|
| 1 | +--- |
| 2 | +title: |
| 3 | + '„Ciemność, widzę ciemność, ciemność widzę” - czyli jak poskromić linię komend' |
| 4 | +authors: mojk |
| 5 | +date: '2026-02-04' |
| 6 | +tags: |
| 7 | + - 'dobre-praktyki' |
| 8 | + - 'narzędzia' |
| 9 | + - 'warsztat' |
| 10 | +coverImage: 'linia-komend.png' |
| 11 | +--- |
| 12 | + |
| 13 | +[Bash (Bourne Again Shell)](https://pl.wikipedia.org/wiki/Bash) to złoty |
| 14 | +standard w świecie rozwoju oprogramowania. Ta powłoka systemowa, a upraszczając |
| 15 | +na potrzeby zrozumienia tematu, ta linia komend pozwala nam na wykonanie |
| 16 | +rozmaitych operacji na naszym komputerze. |
| 17 | + |
| 18 | +<!-- truncate --> |
| 19 | + |
| 20 | +Za pomocą poleceń tekstowych możemy uruchomić przydatne narzędzia, dzięki którym |
| 21 | +będziemy mogli np. skopiować lub usunąć pliki. Czyli właściwie to co robimy w |
| 22 | +interfejsie graficznym naszego systemu operacyjnego, tyle, że trudniej :) W |
| 23 | +takim razie, po co sobie zaprzątać głowę tym czarnym okienkiem? |
| 24 | + |
| 25 | +## Po co mi ta wiedza? |
| 26 | + |
| 27 | +Podczas gdy świat technologii pędzi do przodu dostarczając nam każdego dnia tonę |
| 28 | +nowych rozwiązań i apek, które mają nam ułatwiać życie, ja wciąż uparcie |
| 29 | +twierdzę, że warto znać podstawy. Podobnie jak w życiu codziennym - mamy |
| 30 | +kalkulator i Wikipedię, ale jednak dobrze jest umieć podstawy matematyki i mieć |
| 31 | +ogólną wiedzę o świecie. |
| 32 | + |
| 33 | +Pomimo tego, że większość rzeczy możemy już zrobić w interfejsach graficznych, |
| 34 | +linia komend wciąż nie odeszła do lamusa. Są sytuacje, w których przychodzi nam |
| 35 | +z pomocą. Poza tym, nowe rozwiązania, które cały czas się pojawiają na rynku |
| 36 | +oprogramowania, wciąż często oferują możliwość używania ich za pomocą linii |
| 37 | +komend. |
| 38 | + |
| 39 | +Bash powstał pod koniec lat 80. i doczekał się już swoich następców, np. |
| 40 | +[Zsh](https://pl.wikipedia.org/wiki/Zsh). Pomimo tego, jest on wciąż |
| 41 | +wszechobecny w świecie software developmentu i dlatego warto się z nim |
| 42 | +zaprzyjaźnić. Jako tech writer, da Ci to kolejną super moc podczas pracy z |
| 43 | +programistami. Wyobraź sobie zaskoczenie deva z Twojego zespołu kiedy powiesz: |
| 44 | + |
| 45 | +> Nie ma problemu, odpalę Basha i sprawdzę na serwerze, które pliki są dostępne |
| 46 | +> dla użytkownika i co w nich jest. |
| 47 | +
|
| 48 | +## Jak uruchomić |
| 49 | + |
| 50 | +W systemach macOS i Linux, Bash jest dostępny od razu. Jeśli używasz Maca, |
| 51 | +wystarczy, że otworzysz aplikację **Terminal** i wpiszesz komendę `bash`. |
| 52 | + |
| 53 | +Niestety, na Windowsie Bash nie jest dostępny jako część systemu operacyjnego. |
| 54 | +Na szczęście można to całkiem łatwo zmienić, np. instalując |
| 55 | +[Gita](https://git-scm.com/install/windows), który zawiera w sobie paczkę **git |
| 56 | +bash**. |
| 57 | + |
| 58 | +## Jak używać |
| 59 | + |
| 60 | +Tak jak wspomniałem na początku, Bash oferuje nam możliwość uruchomienia |
| 61 | +kwadryliona narzędzi. Ale od czegoś trzeba zacząć, dlatego skupię się na |
| 62 | +absolutnych podstawach. |
| 63 | + |
| 64 | +### Pokaż o czym myślisz |
| 65 | + |
| 66 | +Żeby wyświetlić na ekranie jakiś tekst albo wartość jakiegoś elementu, użyj |
| 67 | +komendy `echo`. Jak w każdym szanującym się poradniku, zacznij od przywitania |
| 68 | +się ze światem: |
| 69 | + |
| 70 | +```bash |
| 71 | +docdeveloper@machine:~$ echo "Hello World!" |
| 72 | +Hello World! |
| 73 | +``` |
| 74 | + |
| 75 | +### Powtórz |
| 76 | + |
| 77 | +Nikt z nas nie lubi się powtarzać. Ale czasem trzeba i jest to przydatne. W |
| 78 | +Bashu jeśli chcesz powtórzyć ostatnio użytą komendę, naciskasz |
| 79 | +`strzałkę do góry`. Prosta rzecz, a oszczędza sporo czasu. |
| 80 | + |
| 81 | +```bash |
| 82 | +docdeveloper@machine:~$ echo "Hello World!" |
| 83 | +Hello World! |
| 84 | +docdeveloper@machine:~$ echo "Hello World!" |
| 85 | +Hello World! |
| 86 | +``` |
| 87 | + |
| 88 | +### Działaj szybciej |
| 89 | + |
| 90 | +Wpisywanie komend tekstowych może być uciążliwe, szczególnie jeśli zawierają one |
| 91 | +długie ciągi znaków, np. ścieżkę do pliku. Na szczęście ktoś wymyślił |
| 92 | +autouzupełnianie. |
| 93 | + |
| 94 | +Żeby zobaczyć podpowiedzi, podczas wpisywania komendy, naciśnij `Tab`. Jeśli |
| 95 | +istnieje tylko jedna możliwość uzupełnienia komendy, Twój wpisywany ciąg znaków |
| 96 | +od razu się wypełni. Jeśli jest ich więcej, to po pierwszym naciśnięciu nic się |
| 97 | +nie stanie. Wtedy naciśnij `Tab` drugi raz, a pod komendą, którą wpisujesz |
| 98 | +dostaniesz listę dostępnych opcji. To pomoże Ci zdecydować co dalej wpisać. |
| 99 | + |
| 100 | +Na każdym etapie wpisywania komendy warto użyć podpowiedzi, czasami kilka razy, |
| 101 | +bo np. dopiero w połowie komenda staje się jednoznaczna i `Tab` doklei nam |
| 102 | +brakującą część. |
| 103 | + |
| 104 | +### Ustal swoją lokalizację |
| 105 | + |
| 106 | +Żeby sprawdzić, w którym obecnie folderze jesteś, użyj polecenia `pwd`. |
| 107 | + |
| 108 | +```bash |
| 109 | +docdeveloper@machine:~/Documents$ pwd |
| 110 | +/Users/docdeveloper/Documents |
| 111 | +``` |
| 112 | + |
| 113 | +### Zmień lokalizację |
| 114 | + |
| 115 | +Jeśli z jakiegoś powodu nie odpowiada Ci Twoje obecne położenie, możesz to łatwo |
| 116 | +zmienić za pomocą polecenia `cd`. |
| 117 | + |
| 118 | +Żeby przejść do jakiegoś folderu, wpisz `cd nazwa_folderu` (pamiętaj o |
| 119 | +ułatwieniu sobie życia tabem). Na poziom wyżej możesz wskoczyć używając `..`. Na |
| 120 | +przykład, jeśli jesteś w folderze `/Users/docdeveloper/Documents/Notes` a chcesz |
| 121 | +przeskoczyć do `/Users`, wpisz `cd ../..`. |
| 122 | + |
| 123 | +```bash |
| 124 | +docdeveloper@machine:~/Documents/Notes$ pwd |
| 125 | +/Users/docdeveloper/Documents/Notes |
| 126 | +docdeveloper@machine:~/Documents/Notes$ cd ../.. |
| 127 | +docdeveloper@machine:~$ pwd |
| 128 | +/Users/docdeveloper |
| 129 | +``` |
| 130 | + |
| 131 | +### Pokaż mi co tam masz |
| 132 | + |
| 133 | +Żeby sprawdzić zawartość folderu, w którym się znajdujesz, użyj komendy `ls`. |
| 134 | +Jeśli chcesz zobaczyć też ukryte pliki, dodaj parametr `-a`. Jeśli chcesz więcej |
| 135 | +szczegółów na temat poszczególnych elementów, np. uprawnienia i właściciel, |
| 136 | +dorzuć `-l`. |
| 137 | + |
| 138 | +Czyli, żeby zobaczyć szczegółową listę zawartości folderu, użyj komendy |
| 139 | +`ls -la`. Jeśli chcesz sprawdzić zawartość innego folderu niż tego, w którym |
| 140 | +obecnie jesteś, po prostu dodaj ścieżkę do polecenia. Np. |
| 141 | +`ls -la /Users/docdeveloper/tmp`. |
| 142 | + |
| 143 | +```bash |
| 144 | +docdeveloper@machine:~/tmp$ ls -la |
| 145 | +total 16 |
| 146 | +drwxr-xr-x 4 docdeveloper staff 128 Feb 2 12:00 . |
| 147 | +drwxr-xr-x 6 docdeveloper staff 192 Feb 2 11:00 .. |
| 148 | +-rw-r--r-- 1 docdeveloper staff 50 Feb 2 12:01 .gitignore |
| 149 | +-rw-r--r-- 1 docdeveloper staff 1024 Feb 2 12:05 notatki.txt |
| 150 | +``` |
| 151 | + |
| 152 | +### Zajrzyj w głąb |
| 153 | + |
| 154 | +Sprawdzanie zawartości folderu to jedna rzecz. Ale jak sprawdzić szybko |
| 155 | +zawartość pliku? Trzeba poprosić kota o pomoc ;) |
| 156 | + |
| 157 | +A tak serio, to trzeba użyć komendy `cat sciezka_do_pliku`. Tylko pamiętaj, że |
| 158 | +taki podgląd działa tylko dla plików typu tekstowego, np. `txt` albo `md`. |
| 159 | +Niestety zdjęć nie będziesz w stanie przeglądać. |
| 160 | + |
| 161 | +```bash |
| 162 | +docdeveloper@machine:~$ cat notatki.txt |
| 163 | +To jest przykładowa zawartość pliku. |
| 164 | +Bash jest bardzo przydatny! |
| 165 | +``` |
| 166 | + |
| 167 | +> Pro tip: Jeśli dorzucisz do komendy opcję `-n`, to zobaczysz zawartość pliku z |
| 168 | +> ponumerowanymi linijkami |
| 169 | +
|
| 170 | +### Stwórz coś |
| 171 | + |
| 172 | +Tworzenie folderów nie wymaga dużego wysiłku. Wystarczy użyć |
| 173 | +`mkdir nazwa_folderu` i gotowe. |
| 174 | + |
| 175 | +Jeśli chcesz stworzyć folder w innej ścieżce niż obecna, to warto dodać opcję |
| 176 | +`-p`. To spowoduje stworzenie wszystkich brakujących folderów w ścieżce. Na |
| 177 | +przykład, chcesz dodać folder `/Users/docdeveloper/kurs_basha/notatki`. Zarówno |
| 178 | +folder `kurs_basha` i `notatki` nie istnieją, więc odpalasz komendę |
| 179 | +`mkdir -p /Users/docdeveloper/tmp/kurs_basha/notatki`. Zrobione! Pominięcie |
| 180 | +opcji `-p` spowoduje błąd, że folder `kurs_basha` nie istnieje. |
| 181 | + |
| 182 | +```bash |
| 183 | +docdeveloper@machine:~$ mkdir -p /Users/docdeveloper/tmp/kurs_basha/notatki |
| 184 | +docdeveloper@machine:~$ |
| 185 | +``` |
| 186 | + |
| 187 | +Jeśli chodzi o pliki, to można by rzec, że tworzy się je jak za dotknięciem |
| 188 | +magicznej różdżki ;) Wystarczy odpalić `touch sciezka_do_pliku`, żeby dodać |
| 189 | +pusty plik. |
| 190 | + |
| 191 | +```bash |
| 192 | +docdeveloper@machine:~/kurs_basha$ touch nowy_plik.md |
| 193 | +``` |
| 194 | + |
| 195 | +Nowy plik możesz też stworzyć za pomocą komendy `echo`. Ta metoda pozwala Ci |
| 196 | +stworzyć nie tylko pusty plik, ale też plik z jakimś tekstem. Pusty plik |
| 197 | +tworzysz komendą `echo > sciezka_do_pliku`, a plik z zawartością |
| 198 | +`echo "tekst" > sciezka_do_pliku`. |
| 199 | + |
| 200 | +```bash |
| 201 | +docdeveloper@machine:~$ echo "Lista zadań" > todo.txt |
| 202 | +``` |
| 203 | + |
| 204 | +### Ogarnij się |
| 205 | + |
| 206 | +Porządek musi być. Czasem trzeba coś usunąć, skopiować albo przenieść. Tutaj |
| 207 | +przyjdą nam z pomocą komendy: |
| 208 | + |
| 209 | +- `cp` - kopiowanie |
| 210 | +- `mv` - przenoszenie |
| 211 | +- `rm` - usuwanie |
| 212 | + |
| 213 | +Kopiowanie pliku albo całego folderu to prosta sprawa - |
| 214 | +`cp sciezka_zrodlowa sciezka_docelowa`. |
| 215 | + |
| 216 | +Jednak kopiowanie samej zawartości folderu, wymaga już użycia opcji |
| 217 | +rekursywności i "dzikiej karty" - `cp -r sciezka_zrodlowa/* sciezka_docelowa`. |
| 218 | +Drobna uwaga - standardowo `*` nie obejmuje plików ukrytych (zaczynających się |
| 219 | +od kropki, np. `.env` lub `.gitignore`). |
| 220 | + |
| 221 | +```bash |
| 222 | +docdeveloper@machine:~$ cp -r projekt_v1/* projekt_finalny/ |
| 223 | +``` |
| 224 | + |
| 225 | +Przenoszenie w inne miejsce to właściwie podobna historia - |
| 226 | +`mv sciezka_zrodlowa sciezka_docelowa`. |
| 227 | + |
| 228 | +Przydatną funkcją jaką nam daje komenda `mv` jest zmiana nazwy. Na przykład, |
| 229 | +jeśli chcemy zmienić nazwę pliku to można go po prostu przenieść, nawet wewnątrz |
| 230 | +tej samej lokalizacji. Na przykład, żeby zmienić nazwę pliku w obecnej |
| 231 | +lokalizacji, użyj komendy `mv obecna_nazwa_pliku nowa_nazwa_pliku` |
| 232 | + |
| 233 | +```bash |
| 234 | +docdeveloper@machine:~$ mv notatka_stara.txt notatka_nowa.txt |
| 235 | +``` |
| 236 | + |
| 237 | +Usunięcie pliku to też krótka piłka - `rm sciezka_do_pliku`. |
| 238 | + |
| 239 | +Usunięcie folderu wymaga dodania opcji rekursywności - |
| 240 | +`rm -r sciezka_do_folderu`. Jeśli dostaniesz jakiś błąd usuwania a i tak nadal |
| 241 | +chcesz usunąć ten plik lub folder, możesz "użyć siły", czyli opcji `-f`. |
| 242 | + |
| 243 | +```bash |
| 244 | +docdeveloper@machine:~$ rm -r folder_do_usuniecia |
| 245 | +``` |
| 246 | + |
| 247 | +### Skomponuj coś |
| 248 | + |
| 249 | +Każde polecenie w Bashu to jak odpalenie małego narzędzia. Naciskanie `Enter` po |
| 250 | +każdym wpisanym poleceniu jest ok, ale można sobie oszczędzić trochę naciskania |
| 251 | +klawiszy za pomocą operatów `&&`, `||` i `|`. Pozwalają one na budowanie |
| 252 | +potężnych jednolinijkowców. |
| 253 | + |
| 254 | +Najczęściej używanym jest `&&` (`AND`), który wykonuje kolejną komendę tylko |
| 255 | +wtedy, gdy pierwsza się uda. |
| 256 | + |
| 257 | +```bash |
| 258 | +docdeveloper@machine:~$ mkdir nowy_folder && cd nowy_folder && echo "Bardzo mi się podoba ten artykuł" > opinia.txt && cat opinia.txt |
| 259 | +``` |
| 260 | + |
| 261 | +Powyższy tasiemiec najpierw stworzy nowy folder, potem do niego wejdzie i |
| 262 | +stworzy plik z zawartością a na końcu wyświetli tę zawartość. |
| 263 | + |
| 264 | +Operator `||` wykonuje kolejną komendę tylko wtedy jeśli poprzednia się nie uda |
| 265 | +(`OR`). |
| 266 | + |
| 267 | +```bash |
| 268 | +docdeveloper@machine:~$ mkdir nowy_folder || mkdir nowy_folder_1 |
| 269 | +``` |
| 270 | + |
| 271 | +Operator `|` (Pipe) przekazuje informację wyjściową z polecenia po lewej stronie |
| 272 | +jako informacje wejściową dla polecenia po prawej stronie. |
| 273 | + |
| 274 | +```bash |
| 275 | +docdeveloper@machine:~$ ls | cat -n |
| 276 | + 1 dokumenty |
| 277 | + 2 zdjecia |
| 278 | + 3 notatki.txt |
| 279 | +``` |
| 280 | + |
| 281 | +### Odśwież swoją pamięć |
| 282 | + |
| 283 | +Ciężko jest sobie przypomnieć obiad sprzed dwóch dni, a co dopiero komendy |
| 284 | +wywoływane w Bashu. |
| 285 | + |
| 286 | +Jeśli potrzebujesz przywołać zapis swoich poczynań, użyj do tego komendy |
| 287 | +`history`. |
| 288 | + |
| 289 | +```bash |
| 290 | +docdeveloper@machine:~$ history |
| 291 | + 501 cd projekty |
| 292 | + 502 mkdir nowa_strona |
| 293 | + 503 ls -la |
| 294 | + 504 touch index.html |
| 295 | +``` |
| 296 | + |
| 297 | +Każdy wpis w historii ma swój numer. Ułatwia to czytanie loga, ale też ma inną |
| 298 | +przydatną funkcję. Żeby ponownie odpalić jakąś komendę z historii, wpisz |
| 299 | +`!numer`. |
| 300 | + |
| 301 | +```bash |
| 302 | +docdeveloper@machine:~$ !503 |
| 303 | +ls -la |
| 304 | +``` |
| 305 | + |
| 306 | +> Pro tip: Żeby odpalić ostatnią użytą komendę, wpisz `!!`. |
| 307 | +
|
| 308 | +### Zostań hardkorem |
| 309 | + |
| 310 | +Lubisz zawsze iść pod wiatr? Nie uznajesz kompromisów? W takim razie mam coś dla |
| 311 | +Ciebie - edytor VI lub VIM dostępny w terminalu. |
| 312 | + |
| 313 | +Tyle samo osób go kocha co nienawidzi z powodu bardzo specyficznego sposobu |
| 314 | +obsługi. Wszystko robisz na klawiaturze całkowicie inaczej niż w nowoczesnych |
| 315 | +edytorach i nie używasz w ogóle myszki. Kiedyś podjąłem wyzwanie nauczenia się |
| 316 | +podstawowej obsługi tego edytora. Na początku był pot, krew i łzy, ale po jakimś |
| 317 | +czasie stwierdziłem, że to wszystko ma sens i zrozumiałem dlaczego można |
| 318 | +polubić VI. Do tej pory zdarza mi się robić jakieś proste zmiany w plikach |
| 319 | +tekstowych lub skryptach za pomocą tego edytora. |
| 320 | + |
| 321 | +Jeśli chcesz spróbować to odpal poniższą komendę, która utworzy nowy plik i |
| 322 | +otworzyć go w VI. |
| 323 | + |
| 324 | +> OSTRZEGAM! Wyjście z programu może okazać się pierwszym poważnym wyzwaniem na |
| 325 | +> jakie natrafisz. W świecie programistów krążą nawet o tym żarty ;) |
| 326 | +
|
| 327 | +```bash |
| 328 | +docdeveloper@machine:~$ vi plik_konfiguracyjny.txt |
| 329 | +``` |
| 330 | + |
| 331 | +## Co dalej? |
| 332 | + |
| 333 | +Każde z opisanych wyżej narzędzi to królicza nora, którą można dalej |
| 334 | +eksplorować. Wiele z nich ma różne parametry, które dają Ci dodatkowe funkcje. |
| 335 | + |
| 336 | +Jeśli temat Basha Cię zainteresował, poszukaj w internecie jakie jeszcze ciekawe |
| 337 | +komendy istnieją. Sztuczny asystent dobrze sprawdza się w generowaniu poleceń, |
| 338 | +których potrzebujesz. |
| 339 | + |
| 340 | +Jak już zaczniesz sprawnie poruszać się w ciemnościach tego magicznego okienka, |
| 341 | +spróbuj stworzyć jakiś prosty skrypt, czyli plik z rozszerzeniem `.sh`, w którym |
| 342 | +umieścisz potrzebne komendy. Na przykład coś takiego: |
| 343 | + |
| 344 | +```bash |
| 345 | +#! /bin/bash |
| 346 | + |
| 347 | +cd /Users/docdeveloper |
| 348 | +ls |
| 349 | +``` |
| 350 | + |
| 351 | +Ta dziwna pierwsza linijka to wiadomość dla systemu operacyjnego, żeby odpalił |
| 352 | +nasz skrypt w powłoce Bash. Na przykład w macOS od jakiegoś czasu domyślną linią |
| 353 | +komend jest Zsh. Brak tej linijki, spowoduje, że skrypt zostanie odpalony z |
| 354 | +automatu w Zsh. |
| 355 | + |
| 356 | +Powodzenia i miłej zabawy! |
0 commit comments