Środowisko programisty/Bash - podstawowe komendy: Różnice pomiędzy wersjami
→Operowanie na plikach tekstowych: Dodanie pustej sekcji diff |
Nie podano opisu zmian |
||
Linia 50: | Linia 50: | ||
Linia 2 | Linia 2 | ||
bashtest@host:~$ | bashtest@host:~$ | ||
Początkowo może być niejasne co ocnacza wywołanie echo -en '\b'. Otóż jest to konwencja podawania opcji w sposób skrócony. Zamiast pisać -e -n możemy skrócić te dwie opcje do -en. Konwencji skrótowej można używać we wszystkich przedstawionych tutaj narzędziach. Więcej o tej konwencji można przeczytać w '''man 3 getopt'''. | Początkowo może być niejasne, co ocnacza wywołanie echo -en '\b'. Otóż jest to konwencja podawania opcji w sposób skrócony. Zamiast pisać -e -n możemy skrócić te dwie opcje do -en. Konwencji skrótowej można używać we wszystkich przedstawionych tutaj narzędziach. Więcej o tej konwencji można przeczytać w '''man 3 getopt'''. | ||
=== sleep === | === sleep === | ||
Polecenie sleep bierze jeden argument, liczbę całkowitą i czeka tyle sekund. Na przykład '''sleep 60''' czeka minutę. Polecenie to jest przydatne w skryptach lub w pętlach, gdy między jedną, a drugą czynnościa potrzebujemy odstępu czasowego. | Polecenie sleep bierze jeden argument, liczbę całkowitą i czeka właśnie tyle sekund. Na przykład '''sleep 60''' czeka minutę. Polecenie to jest przydatne w skryptach lub w pętlach, gdy między jedną, a drugą czynnościa potrzebujemy odstępu czasowego. | ||
=== clear === | === clear === | ||
Czyści ekran. Przydatne przed | Czyści ekran. Przydatne przed wykonaniem polecenia, które wypisuje dużą ilość komunikatów i nie chcemy, aby zlewało nam się z poprzednimi komunikatami. | ||
=== reset === | === reset === | ||
Resetuje terminal. Podobnie jak clear czyści też ekran, ale również przywraca ustawienia terminala. Przydatne w przypadku, gdy zmienimy ustawienia terminala tak, że nie jesteśmy w stanie na nim pracować, na przykład, gdy | Resetuje terminal. Podobnie jak clear czyści też ekran, ale również przywraca ustawienia terminala. Przydatne w przypadku, gdy zmienimy ustawienia terminala tak, że nie jesteśmy w stanie na nim pracować, na przykład po tym, gdy każemy wypisać (przez nie uwagę) plik binarny. | ||
== Operowanie na plikach i katalogach == | == Operowanie na plikach i katalogach == | ||
Linia 110: | Linia 110: | ||
|} | |} | ||
Przypomnijmy | Przypomnijmy, że są też następujące katalogi: | ||
{| | {| | ||
| '''.''' || bieżący katalog | | '''.''' || bieżący katalog | ||
Linia 121: | Linia 121: | ||
=== ls === | === ls === | ||
Służy do | Służy do wyświetlania zawartości wybranych katalogów. Wyświetlane są informacje o plikach podanych w argumentach i zawartaści katalogów podanych w argumentach. Jeżeli nie został podany żaden plik ani katalog, wyświetlana jest zawartość bieżącego katalogu. | ||
==== Wybrane opcje ==== | ==== Wybrane opcje ==== | ||
Komenda ls może przyjmować wiele argumentów, które głównie dotyczą formatowania wyjścia. Przedstawiamy tylko | Komenda ls może przyjmować wiele argumentów, które głównie dotyczą formatowania wyjścia. Przedstawiamy tylko opcje najczęściej używane. | ||
{| | {| | ||
| '''-R''' || wyświetla zawartość katalogów rekurencyjnie | | '''-R''' || wyświetla zawartość katalogów rekurencyjnie | ||
|- | |- | ||
| '''-a''' || wyświetla wszystkie pliki, również pliki ukryte; w Linuksie pliki ukryte | | '''-a''' || wyświetla wszystkie pliki, również pliki ukryte; w Linuksie pliki ukryte to takie, które zaczynają się od kropki | ||
|- | |- | ||
| '''-l''' || wyświetla dokładną informację o każdym z plików (atrybuty, rozmiar, datę modyfikacji, itp.) | | '''-l''' || wyświetla dokładną informację o każdym z plików (atrybuty, rozmiar, datę modyfikacji, itp.) | ||
Linia 138: | Linia 138: | ||
Tworzy katalog podany jako argument. Z opcją '''-p''' tworzy również katalogi, które są potrzebne do utworzenia katalogu docelowego. Na przykład jeśli wywołamy | Tworzy katalog podany jako argument. Z opcją '''-p''' tworzy również katalogi, które są potrzebne do utworzenia katalogu docelowego. Na przykład jeśli wywołamy | ||
mkdir kat1/kat2 | mkdir kat1/kat2 | ||
to, aby utworzyć kat2 musi istnieć kat1, a jeśli wywołamy | to, aby utworzyć kat2, musi istnieć kat1, a jeśli wywołamy | ||
mkdir -p kat1/kat2 | mkdir -p kat1/kat2 | ||
to, jeśli nie istnieje kat1, to jest tworzony i dopiero potem następuje utworzenie kat2 w katalogu kat1. | to, jeśli nie istnieje kat1, to jest tworzony i dopiero potem następuje utworzenie kat2 w katalogu kat1. | ||
Linia 145: | Linia 145: | ||
Zasadniczo są trzy najczęściej stosowane wywołania komendy cp: | Zasadniczo są trzy najczęściej stosowane wywołania komendy cp: | ||
; cp plik1 plik2 : kopiuje plik1 i zapisuje go jako plik2, jeśli plik2 istnieje to go nadpisuje, | ; cp plik1 plik2 : kopiuje plik1 i zapisuje go jako plik2, jeśli plik2 istnieje, to go nadpisuje, | ||
; cp plik1 ... plikn katalog : kopiuje pliki do katalogu, jeśli jakiś plik istnieje już w katalogu docelowym, to zostaje on nadpisany, | ; cp plik1 ... plikn katalog : kopiuje pliki do katalogu, jeśli jakiś plik istnieje już w katalogu docelowym, to zostaje on nadpisany, | ||
; cp -a katalog1 katalog2 : kopiuje rekurencyjnie katalog1 wraz zawartością; jeśli katalog2 istnieje, to kopia katalog1 zostanie umieszczona w tym katalogu, tzn. po wykonaniu tej operacji w katalog2 będzie katalog1 wraz zawarością; jeśli katalog2 nie istnieje, to kopia zawartości katalog1 znajdzie się w katalog2, tzn. katalog2 zostanie utworzony, a zawartość katalog1 będzie skopiowana do katalog2. | ; cp -a katalog1 katalog2 : kopiuje rekurencyjnie katalog1 wraz zawartością; jeśli katalog2 istnieje, to kopia katalog1 zostanie umieszczona w tym katalogu, tzn. po wykonaniu tej operacji w katalog2 będzie katalog1 wraz zawarością; jeśli katalog2 nie istnieje, to kopia zawartości katalog1 znajdzie się w katalog2, tzn. katalog2 zostanie utworzony, a zawartość katalog1 będzie skopiowana do katalog2. | ||
Linia 155: | Linia 155: | ||
To polecenie usuwa wszystkie pliki, które są podane jako argumenty. Jeżeli chcemy usunąć też katalogi, to możemy użyć opcji '''-r'''. Opcji tej należy używać raczej ostrożnie, gdyż usuwa ona rekurencyjnie zawartość katalogów. | To polecenie usuwa wszystkie pliki, które są podane jako argumenty. Jeżeli chcemy usunąć też katalogi, to możemy użyć opcji '''-r'''. Opcji tej należy używać raczej ostrożnie, gdyż usuwa ona rekurencyjnie zawartość katalogów. | ||
Możemy poprosić o pytanie przed usunięcie każdego pliku dodając opcję '''-i'''. Możemy także poprosić o to, aby nie pojawiały się żadne pytania dodając opcję '''-f'''. Przy tej opcji trzeba zachować ostrożność, szczególnie | Możemy poprosić o pytanie przed usunięcie każdego pliku dodając opcję '''-i'''. Możemy także poprosić o to, aby nie pojawiały się żadne pytania dodając opcję '''-f'''. Przy tej opcji trzeba zachować ostrożność, szczególnie gdy używamy ją łącznie z opcją '''-r'''. | ||
Do usuwania katalogów bezpieczniej jest stosować polecenie '''rmdir''', które usuwa katalog tylko, gdy jest on pusty. | Do usuwania katalogów bezpieczniej jest stosować polecenie '''rmdir''', które usuwa katalog tylko, gdy jest on pusty. | ||
Linia 166: | Linia 166: | ||
; mv katalog1 katalog2 : jeśli katalog2 nie istnieje, to zmieniana jest nazwa podobnie jak przy pierwszym sposobie wywołania; jeśli katalog2 istnieje, to zachowanie jest takie samo jak w poprzednim sposobie wywołania. | ; mv katalog1 katalog2 : jeśli katalog2 nie istnieje, to zmieniana jest nazwa podobnie jak przy pierwszym sposobie wywołania; jeśli katalog2 istnieje, to zachowanie jest takie samo jak w poprzednim sposobie wywołania. | ||
Podobnie jak przy poleceniu '''cp''' możemy dodawać opcję '''-i''' lub '''-f''' | Podobnie jak przy poleceniu '''cp''' możemy dodawać opcję '''-i''' lub '''-f''' aby ustawić opcję potwierdzania nadpisywania istniejących plików. | ||
=== cat === | === cat === | ||
Przy braku argumentów cat po prostu kopiuje standardowe wejście na standardowe wyjście. Przy jednym argumencie wypisuje zawartość pliku o podanej nazwie na standardowe wyjście. Przy większej liczbie argumentów | Przy braku argumentów cat po prostu kopiuje standardowe wejście na standardowe wyjście. Przy jednym argumencie wypisuje zawartość pliku o podanej nazwie na standardowe wyjście. Przy większej liczbie argumentów cat wypisuje na standardowe wyjście wszystkie pliki w kolejności, w jakiej zostały one podane. W ten sposób możemy łączyć kilka plików w jeden. | ||
Wywołanie | Wywołanie | ||
Linia 179: | Linia 179: | ||
bashtest@host:~$ cat plikc >> plik | bashtest@host:~$ cat plikc >> plik | ||
Łącznie z poleceniem '''split''' można użyć tej możliwości do przenoszenia dużych plików w | Łącznie z poleceniem '''split''' można użyć tej możliwości do przenoszenia dużych plików w kawałkach przez mniejsze media. Pokażemy to na przykładzie. Załóżmy, że przenosimy plik '''cdimage.iso'''. Dzielimi go wpierw na części: | ||
bashtest@host:~$ ls -l | bashtest@host:~$ ls -l | ||
-rw-r--r-- 1 bashtest users 495605760 2006-08-11 17:53 cdimage.iso | -rw-r--r-- 1 bashtest users 495605760 2006-08-11 17:53 cdimage.iso | ||
Linia 190: | Linia 190: | ||
-rw-r--r-- 1 bashtest users 118118400 2006-08-11 17:57 xad | -rw-r--r-- 1 bashtest users 118118400 2006-08-11 17:57 xad | ||
bashtest@host:~$ | bashtest@host:~$ | ||
Powstały pliki '''xaa''', '''xab''', '''xac''', '''xad'''. Można było użyć drugiego argumentu przy poleceniu split, aby przedrostek był | Powstały pliki '''xaa''', '''xab''', '''xac''', '''xad'''. Można było użyć drugiego argumentu przy poleceniu split, aby przedrostek był więcej mówiący niż przedrostek '''x'''. Teraz przenosimy pliki '''x*''', na przykład przy użyciu czterech dysków USB o pojemności 128MB, na inny komputer, nagrywamy je do jednego katalogi i poleceniem cat z powrotem łączymy w jeden plik. | ||
bashtest@host:~$ ls -l x* | bashtest@host:~$ ls -l x* | ||
-rw-r--r-- 1 bashtest users 125829120 2006-08-11 18:10 xaa | -rw-r--r-- 1 bashtest users 125829120 2006-08-11 18:10 xaa | ||
Linia 204: | Linia 204: | ||
=== more/less === | === more/less === | ||
Narzędzia more i less służą do wygodnego przeglądania pliku bądź standardowego wejście. Jeśli mają one podany argument, to przeglądają plik o podanej nazwie. Uruchomione bez argumentów przeglądają to co dostają na standardowym wejście. | Narzędzia more i less służą do wygodnego przeglądania pliku, bądź standardowego wejście. Jeśli mają one podany argument, to przeglądają plik o podanej nazwie. Uruchomione bez argumentów przeglądają to, co dostają na standardowym wejście. | ||
Podstawowa różnica między tymi komendami jest taka, że more pozwala przeglądąć pliki tylko w przód podczas | Podstawowa różnica między tymi komendami jest taka, że more pozwala przeglądąć pliki tylko w przód, podczas gdy less pozwala przeglądać je również do tyłu. Przeglądanie odbywa sie przy użyciu intuicyjnej klawiatury (tj. strzałek). | ||
Najczęściej wykorzystuje się less w sytuacji, gdy jakiś program wyrzuca bardzo dużo informacji na standardowe wyjście. Jednym rozwiązaniem jest przekierowanie wyjścia do pliku i poźniej przejrzenie pliku za pomocą jakiegoś edytora bądź polecenia less. Inną możliwością jest użycie potoku. Na przykład: | |||
bashtest@host:~$ ls -lR / | less | bashtest@host:~$ ls -lR / | less | ||
Jeśli polecenie wypluwa też dużo na standardowe wyjście diagnostyczne, to można przekierować je na | Jeśli polecenie wypluwa też dużo na standardowe wyjście diagnostyczne, to można przekierować je na zwykłe standardowe wyjście, używając przekierowania '''2>&1''': | ||
bashtest@host:~$ ls -lR / 2>&1 | less | bashtest@host:~$ ls -lR / 2>&1 | less | ||
w ten sposób obejrzymy zarówno to co idzie na standardowe wyjście, jak i standardowe wyjście diagnostyczne. | w ten sposób obejrzymy zarówno to, co idzie na standardowe wyjście, jak i standardowe wyjście diagnostyczne. | ||
=== du === | === du === | ||
Wyświetla zużycie pojemności dysku dla każdego katalogu rekurencyjnie dla podanych argumentów. Jeśli | Wyświetla zużycie pojemności dysku dla każdego katalogu rekurencyjnie dla podanych argumentów. Jeśli brakuje argumentów, to przegląda katalog bieżący. Polecenie to jest przydatne do policzenia sumarycznej zajętości dysku (opcja '''-s''') albo do przejrzenia rozmiarów podkatalogów danego katalogu (opcja '''--max-depth=1'''). | ||
== Operowanie na plikach tekstowych == | == Operowanie na plikach tekstowych == | ||
Linia 249: | Linia 249: | ||
=== tail === | === tail === | ||
Polecenie podobne do head, z tą | Polecenie podobne do head, z tą różnicą, że wypisuje końcowe fragmenty pliku. Ma identyczne opcje jak head. | ||
=== wc === | === wc === | ||
Linia 268: | Linia 268: | ||
Wypisuje wybrane części linii plików podanych w argumentach na standardowe wyjście. W przypadku braku argumentów czyta ze standardowego wejścia. | Wypisuje wybrane części linii plików podanych w argumentach na standardowe wyjście. W przypadku braku argumentów czyta ze standardowego wejścia. | ||
Każdą linię dzielimy na pola za pomocą znaku zwanego separatorem. Domyślnie jest to znak tabulacji. Separator można podawać za pomocą opcji '''-d'''. | Każdą linię dzielimy na pola za pomocą znaku zwanego separatorem. Domyślnie jest to znak tabulacji. Separator można podawać za pomocą opcji '''-d'''. Naprzykład, dla linii | ||
jkow,Jan Kowalski,1990,,Warszawa | jkow,Jan Kowalski,1990,,Warszawa | ||
i dla separatora ''',''' pola są następujące: | i dla separatora ''',''' pola są następujące: | ||
Linia 285: | Linia 285: | ||
|} | |} | ||
Polecenie cut pozwala wybrać, które pola chcemy wybrać. Listę pól podajemy przy opcji '''-f'''. Lista pól składa się z zakresu lub kilku zakresów oddzielonych przecinkami. Zakres jest albo liczbą '''N''' | Polecenie cut pozwala wybrać, które pola chcemy wybrać. Listę pól podajemy przy opcji '''-f'''. Lista pól składa się z zakresu lub kilku zakresów oddzielonych przecinkami. Zakres jest albo liczbą '''N''' oznaczającą N-te pole, albo przedziałem otwartym z lewej '''-N''' oznaczającym pola od 1 do N, albo przedziałem otwartym z prawej '''N-''' oznaczającym pola od N do ostatniego, albo wreszcie przedziałem '''N-M''' oznaczającym pola od N do M. | ||
bashtest@host:~$ cat baza.txt | bashtest@host:~$ cat baza.txt | ||
jkow,Jan Kowalski,1990,,Warszawa | jkow,Jan Kowalski,1990,,Warszawa | ||
Linia 330: | Linia 330: | ||
tr -d ';@' | tr -d ';@' | ||
usunie z wejścia wszystkie wystąpienia znaku ''';''' i '''@'''. | usunie z wejścia wszystkie wystąpienia znaku ''';''' i '''@'''. | ||
Jeśli dodamy opcję '''-c'' spowoduje to branie wszystkich znaków nie znajdujących się w łańcuch1. Na przykład | Jeśli dodamy opcję '''-c''', spowoduje to branie wszystkich znaków nie znajdujących się w łańcuch1. Na przykład | ||
tr -cd 0123456789 | tr -cd 0123456789 | ||
usunie wszystkie znaki poza cyframi. | usunie wszystkie znaki poza cyframi. | ||
Linia 338: | Linia 338: | ||
=== sort === | === sort === | ||
'''sort''' sortuje linie z podanych plików lub ze standardowego wejścia i wypisuje na standardowe wyjście. Domyślnie linie są porównywane leksykograficznie, ale jest szereg opcji kontrolujących sposób porównywania linii. Przykładem jest opcja '''-n''', | '''sort''' sortuje linie z podanych plików lub ze standardowego wejścia i wypisuje na standardowe wyjście. Domyślnie linie są porównywane leksykograficznie, ale jest szereg opcji kontrolujących sposób porównywania linii. Przykładem jest opcja '''-n''', która powoduje, że linie porównywane są numerycznie, tzn. porównywane są liczby występujące na początku linii. | ||
=== uniq === | === uniq === | ||
Linia 346: | Linia 346: | ||
=== tac === | === tac === | ||
Polecenie działa podobnie jak '''cat''' z tą różnicą, że linie podane na wejściu są wypisywane od | Polecenie działa podobnie jak '''cat''' z tą różnicą, że linie podane na wejściu są wypisywane od tyłu. Przydaje się do odwracania plików. | ||
=== diff === | === diff === | ||
Linia 367: | Linia 367: | ||
=== find === | === find === | ||
Polecenie '''find''' w sposób rekurencyjny wyszukuje pliki w podanych katalogach według podanego kryterium i opcjonalnie | Polecenie '''find''' w sposób rekurencyjny wyszukuje pliki w podanych katalogach według podanego kryterium i opcjonalnie wykonuje podane polecenia dla znalezionych plików. Możliwości tworzenia kryteriów są dosyć rozbudowane, więc podamy tylko kilka przykładów wykorzystujących tylko niektóre opcje. | ||
Najczęściej '''find''' służy po prostu do szukania plików. Na przykład, aby znaleźć wszystkie zwykłe pliki (wyłączając katalogi) o rozszerzeniach '''c''', '''cpp''' i '''h''' w katalogu '''kat''', można użyć polecenie: | Najczęściej '''find''' służy po prostu do szukania plików. Na przykład, aby znaleźć wszystkie zwykłe pliki (wyłączając katalogi) o rozszerzeniach '''c''', '''cpp''' i '''h''' w katalogu '''kat''', można użyć polecenie: | ||
Linia 383: | Linia 383: | ||
Można też kazać wykonać jakieś polecenie, które operuje na znalezionych plikach. | Można też kazać wykonać jakieś polecenie, które operuje na znalezionych plikach. | ||
find kat -name dok.txt -exec bash -c 'echo -e "\nAutor: Jan Kowalski" >> {}' \; | find kat -name dok.txt -exec bash -c 'echo -e "\nAutor: Jan Kowalski" >> {}' \; | ||
Powyższe polecenie dla każdego wszystkich plików o nazwie '''dok.txt''' znajdujących się w katalogu '''kat''' doda na koniec pliku podpis | Powyższe polecenie dla każdego z wszystkich plików o nazwie '''dok.txt''' znajdujących się w katalogu '''kat''' doda na koniec pliku podpis | ||
Autor: Jan Kowalski | Autor: Jan Kowalski | ||
Linia 392: | Linia 392: | ||
== Procesy == | == Procesy == | ||
We współczesnych systemach operacyjnych | We współczesnych systemach operacyjnych może działać wiele procesów na raz. O procesie można myśleć jak o wykonującym się programie. Wywołanie nowego polecenia wiąże się z utworzeniem nowego procesu. | ||
{| border="1" | {| border="1" | ||
|+ Lista poleceń operujących na procesach | |+ Lista poleceń operujących na procesach | ||
Linia 408: | Linia 408: | ||
=== ps === | === ps === | ||
Do wyświetlania procesów, które znajdują się w systemie, służy polecenie '''ps'''. Z procesem jest związanych wiele parametrów. '''ps''' pozwala za pomocą najróżniejszych opcji wyświetlać wybrane parametry i procesy. Najczęściej jednak używamy formy | |||
ps ax | ps ax, | ||
która wyświetla wszystkie procesy w systemie wraz z paroma najistotniejszymi informacjami: | która wyświetla wszystkie procesy w systemie wraz z paroma najistotniejszymi informacjami: | ||
bashtest@host:~$ ps ax | bashtest@host:~$ ps ax | ||
Linia 418: | Linia 418: | ||
5932 pts/2 R+ 0:00 ps ax | 5932 pts/2 R+ 0:00 ps ax | ||
bashtest@host:~$ | bashtest@host:~$ | ||
W pierwszej kolumnie jest '''pid''' procesu. Jest to liczba będąca jednoznacznym identyfikatorem procesu. W ostatniej kolumnie jest polecenie jakim został uruchomiony dany proces. W | W pierwszej kolumnie jest '''pid''' procesu. Jest to liczba będąca jednoznacznym identyfikatorem procesu. W ostatniej kolumnie jest polecenie, jakim został uruchomiony dany proces. W przedostatniej czas zużycia procesora przez dany proces. Najistotniejsza dla nas jest pierwsza i ostatnia kolumna. | ||
=== kill === | === kill === | ||
Znając identyfikator procesu możemy go zakończyć używając polecenia '''kill'''. Na przykład | Znając identyfikator procesu możemy go zakończyć, używając polecenia '''kill'''. Na przykład | ||
kill 5691 | kill 5691 | ||
powinno zakończyć program '''mc'''. | powinno zakończyć program '''mc'''. | ||
Linia 432: | Linia 432: | ||
=== Uruchamianie w tle === | === Uruchamianie w tle === | ||
Dodanie na końcu polecenia znak '''&''' powoduje, że polecenie zostanie uruchomione w tle, dzięki czemu, niezależnie od tego jak długo trwa wykonanie danego polecenia, natychmiast wracamy do linii poleceń i możemy od razu wpisywać następne polecenie. | Dodanie na końcu polecenia znak '''&''' powoduje, że polecenie zostanie uruchomione w tle, dzięki czemu, niezależnie od tego, jak długo trwa wykonanie danego polecenia, natychmiast wracamy do linii poleceń i możemy od razu wpisywać następne polecenie. | ||
bashtest@host:~$ sleep 999 & | bashtest@host:~$ sleep 999 & | ||
[1] 5994 | [1] 5994 | ||
Linia 441: | Linia 441: | ||
=== jobs === | === jobs === | ||
Do wyświetlenia listy wszystkich poleceń wykonywanych w tle w tym shellu służy polecenie '''jobs''': | |||
bashtest@host:~$ jobs | bashtest@host:~$ jobs | ||
[1]- Running sleep 999 & | [1]- Running sleep 999 & | ||
Linia 452: | Linia 452: | ||
=== fg === | === fg === | ||
Można też wybrane polecenie, które jest wykonywane w tle, ustanowić aktualnie | Można też wybrane polecenie, które jest wykonywane w tle, ustanowić aktualnie wykonywanym poleceniem. | ||
bashtest@host:~$ fg 2 | bashtest@host:~$ fg 2 | ||
while true; do | while true; do | ||
Linia 491: | Linia 491: | ||
bashtest@host:~$ | bashtest@host:~$ | ||
Jeżeli nie chcemy wykonywać żadnych czynności zanim nie skończą się wszystkie polecenia w tle możemy użyć polecenia '''wait''': | Jeżeli nie chcemy wykonywać żadnych czynności zanim nie skończą się wszystkie polecenia w tle, możemy użyć polecenia '''wait''': | ||
bashtest@host:~$ wait | bashtest@host:~$ wait | ||
[1]+ Done sleep 999 | [1]+ Done sleep 999 | ||
bashtest@host:~$ | bashtest@host:~$ | ||
W tym przykładzie czekanie trwało nieco mniej niż 999 sekund. Oczywiście możemy czekać tylko na wybrane polecenia w tle podając ich numery jako argumenty poleceniu wait. | W tym przykładzie czekanie trwało nieco mniej niż 999 sekund. Oczywiście możemy czekać tylko na wybrane polecenia w tle, podając ich numery jako argumenty poleceniu wait. | ||
== Zmienne środowiskowe == | == Zmienne środowiskowe == |
Wersja z 15:47, 26 wrz 2006
Okno terminala
Polecenie | Opis |
---|---|
echo | wypisywanie na ekran |
sleep | zawieszanie wykonania |
clear | czyszczenie okna |
reset | resetowanie terminala |
echo
Polecenie echo służy do wypisywania swoich argumentów.
Wybrane opcje
-n | nie przechodzi do następnej linii |
-e | interpretacja znaków specjalnych (ze znakiem \) |
Przy użyciu opcji -e rozpoznawane są znaki specjalne (poprzedzone \), na przykład
\\ | \ |
\a | syngnał dzwiękowy |
\b | znak w tył (backspace) |
\n | nowa linia |
\r | powrót karetki, tzn. kursor jest przesuwany do początku linii |
\t | znak tabulacji |
Przykłady
bashtest@host:~$ echo -e 'abc\rdef' def bashtest@host:~$ echo -n who; echo -n am; echo -n x; echo -en '\b'; echo i whoami bashtest@host:~$ echo -e "Linia 1\nLinia 2" Linia 1 Linia 2 bashtest@host:~$
Początkowo może być niejasne, co ocnacza wywołanie echo -en '\b'. Otóż jest to konwencja podawania opcji w sposób skrócony. Zamiast pisać -e -n możemy skrócić te dwie opcje do -en. Konwencji skrótowej można używać we wszystkich przedstawionych tutaj narzędziach. Więcej o tej konwencji można przeczytać w man 3 getopt.
sleep
Polecenie sleep bierze jeden argument, liczbę całkowitą i czeka właśnie tyle sekund. Na przykład sleep 60 czeka minutę. Polecenie to jest przydatne w skryptach lub w pętlach, gdy między jedną, a drugą czynnościa potrzebujemy odstępu czasowego.
clear
Czyści ekran. Przydatne przed wykonaniem polecenia, które wypisuje dużą ilość komunikatów i nie chcemy, aby zlewało nam się z poprzednimi komunikatami.
reset
Resetuje terminal. Podobnie jak clear czyści też ekran, ale również przywraca ustawienia terminala. Przydatne w przypadku, gdy zmienimy ustawienia terminala tak, że nie jesteśmy w stanie na nim pracować, na przykład po tym, gdy każemy wypisać (przez nie uwagę) plik binarny.
Operowanie na plikach i katalogach
Polecenie | Opis |
---|---|
cd | zmiana katalogu |
pwd | bieżący katalog |
ls | lista plików i katalogów |
mkdir | tworzenie katalogu |
cp | kopiowanie plików/katalogów |
rm | usuwanie plików/katalogów |
mv | przenoszenie/zmiana nazwy pliku/katalogu |
cat | wypisanie zawartości pliku |
more/less | przeglądanie zawartości pliku |
touch | uaktualnianie daty pliku, bądź tworzenie pliku |
df | wyświetla ilość wolnego miejsca na wszystkich dyskach |
du | wyświetla zużycie dysku w wybranych katalogach |
cd
cd zmienia aktualny katalog na katalog podany w argumencie polecenie. Wywołanie cd bez argumentów zmienia katalog na katalog domowy aktualnego użytkownika.
Bash wprowadza również katalogi specjalne z użyciem znaku ~. Nazwy zaczynające się od znaku ~ (nie ujęte w cudzysłowy) mają specjalne znaczenie, na przykład:
~ | katalog domowy aktualnego użytkownika |
~/kat1 | katalog kat1 w katalogu domowym aktualnego użytkownika |
~ktos | katalog domowy użytkownika o loginie ktos |
~ktos/kat1/kat2 | katalog kat1/kat2 w katalogu domowym użytkownika o loginie ktos |
Przypomnijmy, że są też następujące katalogi:
. | bieżący katalog |
.. | katalog nadrzędny |
/ | katalog główny |
ls
Służy do wyświetlania zawartości wybranych katalogów. Wyświetlane są informacje o plikach podanych w argumentach i zawartaści katalogów podanych w argumentach. Jeżeli nie został podany żaden plik ani katalog, wyświetlana jest zawartość bieżącego katalogu.
Wybrane opcje
Komenda ls może przyjmować wiele argumentów, które głównie dotyczą formatowania wyjścia. Przedstawiamy tylko opcje najczęściej używane.
-R | wyświetla zawartość katalogów rekurencyjnie |
-a | wyświetla wszystkie pliki, również pliki ukryte; w Linuksie pliki ukryte to takie, które zaczynają się od kropki |
-l | wyświetla dokładną informację o każdym z plików (atrybuty, rozmiar, datę modyfikacji, itp.) |
mkdir
Tworzy katalog podany jako argument. Z opcją -p tworzy również katalogi, które są potrzebne do utworzenia katalogu docelowego. Na przykład jeśli wywołamy
mkdir kat1/kat2
to, aby utworzyć kat2, musi istnieć kat1, a jeśli wywołamy
mkdir -p kat1/kat2
to, jeśli nie istnieje kat1, to jest tworzony i dopiero potem następuje utworzenie kat2 w katalogu kat1.
cp
Zasadniczo są trzy najczęściej stosowane wywołania komendy cp:
- cp plik1 plik2
- kopiuje plik1 i zapisuje go jako plik2, jeśli plik2 istnieje, to go nadpisuje,
- cp plik1 ... plikn katalog
- kopiuje pliki do katalogu, jeśli jakiś plik istnieje już w katalogu docelowym, to zostaje on nadpisany,
- cp -a katalog1 katalog2
- kopiuje rekurencyjnie katalog1 wraz zawartością; jeśli katalog2 istnieje, to kopia katalog1 zostanie umieszczona w tym katalogu, tzn. po wykonaniu tej operacji w katalog2 będzie katalog1 wraz zawarością; jeśli katalog2 nie istnieje, to kopia zawartości katalog1 znajdzie się w katalog2, tzn. katalog2 zostanie utworzony, a zawartość katalog1 będzie skopiowana do katalog2.
Jeśli chcemy, aby cp pytało nas, czy nadpisywać istniejące już pliki, to dodajemy opcję -i. Jeżeli taki tryb mamy ustawiony domyślnie, to możemy też chcieć, aby cp pytało nas, czy nadpisywać istniejące już pliki, wtedy dodajemy opcję -f.
rm
To polecenie usuwa wszystkie pliki, które są podane jako argumenty. Jeżeli chcemy usunąć też katalogi, to możemy użyć opcji -r. Opcji tej należy używać raczej ostrożnie, gdyż usuwa ona rekurencyjnie zawartość katalogów.
Możemy poprosić o pytanie przed usunięcie każdego pliku dodając opcję -i. Możemy także poprosić o to, aby nie pojawiały się żadne pytania dodając opcję -f. Przy tej opcji trzeba zachować ostrożność, szczególnie gdy używamy ją łącznie z opcją -r.
Do usuwania katalogów bezpieczniej jest stosować polecenie rmdir, które usuwa katalog tylko, gdy jest on pusty.
mv
To polecenie ma trzy możliwe sposoby wywołania:
- mv plik1 plik2
- zmienia nazwę plik1 na plik2 (jak jest taka potrzeba wykonane jest także przeniesienie pomiędzy katalogami),
- mv plik_lub_katalog1 ... plik_lub_katalogn katalog
- w tej wersji katalog podany w ostanim argumencie musi istnieć; wszystkie pliki i katalogi są przenoszone do tego katalogu,
- mv katalog1 katalog2
- jeśli katalog2 nie istnieje, to zmieniana jest nazwa podobnie jak przy pierwszym sposobie wywołania; jeśli katalog2 istnieje, to zachowanie jest takie samo jak w poprzednim sposobie wywołania.
Podobnie jak przy poleceniu cp możemy dodawać opcję -i lub -f aby ustawić opcję potwierdzania nadpisywania istniejących plików.
cat
Przy braku argumentów cat po prostu kopiuje standardowe wejście na standardowe wyjście. Przy jednym argumencie wypisuje zawartość pliku o podanej nazwie na standardowe wyjście. Przy większej liczbie argumentów cat wypisuje na standardowe wyjście wszystkie pliki w kolejności, w jakiej zostały one podane. W ten sposób możemy łączyć kilka plików w jeden.
Wywołanie
bashtest@host:~$ cat plika plikb plikc > plik
jest równoważne wykonaniu ciągu poleceń
bashtest@host:~$ cat plika > plik bashtest@host:~$ cat plikb >> plik bashtest@host:~$ cat plikc >> plik
Łącznie z poleceniem split można użyć tej możliwości do przenoszenia dużych plików w kawałkach przez mniejsze media. Pokażemy to na przykładzie. Załóżmy, że przenosimy plik cdimage.iso. Dzielimi go wpierw na części:
bashtest@host:~$ ls -l -rw-r--r-- 1 bashtest users 495605760 2006-08-11 17:53 cdimage.iso bashtest@host:~$ split -b 120m cdimage.iso bashtest@host:~$ ls -l -rw-r--r-- 1 bashtest users 495605760 2006-08-11 17:53 cdimage.iso -rw-r--r-- 1 bashtest users 125829120 2006-08-11 17:54 xaa -rw-r--r-- 1 bashtest users 125829120 2006-08-11 17:55 xab -rw-r--r-- 1 bashtest users 125829120 2006-08-11 17:56 xac -rw-r--r-- 1 bashtest users 118118400 2006-08-11 17:57 xad bashtest@host:~$
Powstały pliki xaa, xab, xac, xad. Można było użyć drugiego argumentu przy poleceniu split, aby przedrostek był więcej mówiący niż przedrostek x. Teraz przenosimy pliki x*, na przykład przy użyciu czterech dysków USB o pojemności 128MB, na inny komputer, nagrywamy je do jednego katalogi i poleceniem cat z powrotem łączymy w jeden plik.
bashtest@host:~$ ls -l x* -rw-r--r-- 1 bashtest users 125829120 2006-08-11 18:10 xaa -rw-r--r-- 1 bashtest users 125829120 2006-08-11 18:15 xab -rw-r--r-- 1 bashtest users 125829120 2006-08-11 18:20 xac -rw-r--r-- 1 bashtest users 118118400 2006-08-11 18:25 xad bashtest@host:~$ cat x* > cdimage.iso bashtest@host:~$ rm -f x* bashtest@host:~$ ls -l cdimage.iso -rw-r--r-- 1 bashtest users 495605760 2006-08-11 18:30 cdimage.iso bashtest@host:~$
more/less
Narzędzia more i less służą do wygodnego przeglądania pliku, bądź standardowego wejście. Jeśli mają one podany argument, to przeglądają plik o podanej nazwie. Uruchomione bez argumentów przeglądają to, co dostają na standardowym wejście.
Podstawowa różnica między tymi komendami jest taka, że more pozwala przeglądąć pliki tylko w przód, podczas gdy less pozwala przeglądać je również do tyłu. Przeglądanie odbywa sie przy użyciu intuicyjnej klawiatury (tj. strzałek).
Najczęściej wykorzystuje się less w sytuacji, gdy jakiś program wyrzuca bardzo dużo informacji na standardowe wyjście. Jednym rozwiązaniem jest przekierowanie wyjścia do pliku i poźniej przejrzenie pliku za pomocą jakiegoś edytora bądź polecenia less. Inną możliwością jest użycie potoku. Na przykład:
bashtest@host:~$ ls -lR / | less
Jeśli polecenie wypluwa też dużo na standardowe wyjście diagnostyczne, to można przekierować je na zwykłe standardowe wyjście, używając przekierowania 2>&1:
bashtest@host:~$ ls -lR / 2>&1 | less
w ten sposób obejrzymy zarówno to, co idzie na standardowe wyjście, jak i standardowe wyjście diagnostyczne.
du
Wyświetla zużycie pojemności dysku dla każdego katalogu rekurencyjnie dla podanych argumentów. Jeśli brakuje argumentów, to przegląda katalog bieżący. Polecenie to jest przydatne do policzenia sumarycznej zajętości dysku (opcja -s) albo do przejrzenia rozmiarów podkatalogów danego katalogu (opcja --max-depth=1).
Operowanie na plikach tekstowych
Polecenie | Opis |
---|---|
head | wypisanie początku pliku |
tail | wypisanie końca pliku |
wc | zliczanie znaków/słów/linii |
cut | wypisywanie wybranych części z każdej linii |
tr | zamienianie/usuwanie znaków |
sort | sortowanie po liniach |
uniq | usuwanie/znajdywanie powtarzających się linii |
tac | wypisanie plików od tyłu |
diff | porównywanie dwóch plików |
head
Wypisuje początkowe fragmenty plików, których nazwy zostały podane jako argumenty. Jeśli nie zostały podane argumenty, to czyta ze standardowego wejścia. Domyślnie jest to 10 pierwszych linii. Podając opcję -N, gdzie N jest liczbą, head wyświetli N pierwszych linii.
tail
Polecenie podobne do head, z tą różnicą, że wypisuje końcowe fragmenty pliku. Ma identyczne opcje jak head.
wc
Zlicza liczbę znaków, słów i linii w plikach podanych jako argumenty, bądź przy braku argumentów statystyki te liczy dla standardowego wejścia. Można wybrać, którą statystykę chcemy dostać podając jedną z opcji:
-c | liczenie tylko znaków |
-w | liczenie tylko słów |
-l | liczenie tylko linii |
Ćwiczenie: wipisać liczbę linii podanego plik, ale jeśli jest to więcej niż 20, to wypisać 20.
cut
Wypisuje wybrane części linii plików podanych w argumentach na standardowe wyjście. W przypadku braku argumentów czyta ze standardowego wejścia.
Każdą linię dzielimy na pola za pomocą znaku zwanego separatorem. Domyślnie jest to znak tabulacji. Separator można podawać za pomocą opcji -d. Naprzykład, dla linii
jkow,Jan Kowalski,1990,,Warszawa
i dla separatora , pola są następujące:
nr pola | zawartość (w cudzysłowach) |
---|---|
1 | "jkow" |
2 | "Jan Kowalski" |
3 | "1990" |
4 | "" |
5 | "Warszawa" |
Polecenie cut pozwala wybrać, które pola chcemy wybrać. Listę pól podajemy przy opcji -f. Lista pól składa się z zakresu lub kilku zakresów oddzielonych przecinkami. Zakres jest albo liczbą N oznaczającą N-te pole, albo przedziałem otwartym z lewej -N oznaczającym pola od 1 do N, albo przedziałem otwartym z prawej N- oznaczającym pola od N do ostatniego, albo wreszcie przedziałem N-M oznaczającym pola od N do M.
bashtest@host:~$ cat baza.txt jkow,Jan Kowalski,1990,,Warszawa tnow,Tomasz Nowak,,, gbrz,Grzegorz Brzęczyszczykiewicz,,Golfista,Trąbki Wielkie rkub,Robert Kubica,1985,Kierowca Formuły 1,Kraków bashtest@host:~$ cut -d , -f 2 baza.txt Jan Kowalski Tomasz Nowak Grzegorz Brzęczyszczykiewicz Robert Kubica bashtest@host:~$ cut -d , -f 1,3- baza.txt jkow,1990,,Warszawa tnow,,, gbrz,,Golfista,Trąbki Wielkie rkub,1985,Kierowca Formuły 1,Kraków bashtest@host:~$ cut -d , -f 2-4 baza.txt Jan Kowalski,1990, Tomasz Nowak,, Grzegorz Brzęczyszczykiewicz,,Golfista Robert Kubica,1985,Kierowca Formuły 1 bashtest@host:~$
Jak dla powyższego pliku baza.txt wyodrębnić same nazwiska? Trzeba użyć polecenie cut dwukrotnie:
bashtest@host:~$ cut -d , -f 2 baza.txt | cut -d ' ' -f 2 Kowalski Nowak Brzęczyszczykiewicz Kubica bashtest@host:~$
tr
Jest to narzędzie, za pomocą którego można zmieniać i usuwać znaki. Polecenie to czyta ze standardowego wejścia i wynik wypisuje na standardowe wyjście.
Do zmieniania znaków używamy formy:
tr łańcuch1 łańcuch2
Działa to tak, że znak występujący na i-tym miejscu w łańcuch1 jest zastępowany znakiem występującym na i-tym miejscu w łańcuch2. Na przykład
tr abc xyz
zamieni każde a na wejściu na x, b na y i c na z.
Do usuwania znaków służy
tr -d łańcuch1
Z wejścia są usuwane wszystkie znaki, które znajdują się w łańcuch1. Na przykład
tr -d ';@'
usunie z wejścia wszystkie wystąpienia znaku ; i @. Jeśli dodamy opcję -c, spowoduje to branie wszystkich znaków nie znajdujących się w łańcuch1. Na przykład
tr -cd 0123456789
usunie wszystkie znaki poza cyframi.
tr ma też parę innych funkcji, o których można przeczytać sobie w dokumentacji.
sort
sort sortuje linie z podanych plików lub ze standardowego wejścia i wypisuje na standardowe wyjście. Domyślnie linie są porównywane leksykograficznie, ale jest szereg opcji kontrolujących sposób porównywania linii. Przykładem jest opcja -n, która powoduje, że linie porównywane są numerycznie, tzn. porównywane są liczby występujące na początku linii.
uniq
Usuwa powtarzające się po sobie identyczne linie. Polecenie to jest zazwyczaj stosowane w potoku po komendzie sort.
tac
Polecenie działa podobnie jak cat z tą różnicą, że linie podane na wejściu są wypisywane od tyłu. Przydaje się do odwracania plików.
diff
Wyszukiwanie
Polecenie | Opis |
---|---|
grep | przeszukiwanie zawartości plików |
find | wyszukiwanie plików/katalogów |
grep
Polecenie grep zostanie dokładniej omówione przy okazji wyrażeń regularnych.
find
Polecenie find w sposób rekurencyjny wyszukuje pliki w podanych katalogach według podanego kryterium i opcjonalnie wykonuje podane polecenia dla znalezionych plików. Możliwości tworzenia kryteriów są dosyć rozbudowane, więc podamy tylko kilka przykładów wykorzystujących tylko niektóre opcje.
Najczęściej find służy po prostu do szukania plików. Na przykład, aby znaleźć wszystkie zwykłe pliki (wyłączając katalogi) o rozszerzeniach c, cpp i h w katalogu kat, można użyć polecenie:
find kat -type f \( -name "*.c" -o -name "*.cpp" -o -name "*.h" \)
Opcja -type f powoduje, że wyświetlone będą tylko pliki. Następny warunek, który musi być spełniony, aby dany plik był wyświetlony znajduje się w nawiasach. Są to trzy opcje -name, określające możliwe rozszerzenia, połączone opcjami -o, która pełni rolę logicznego operator OR.
Jest szereg opcji kontrolujących format wyświetlania znalezionych plików. Na przykład
find kat -printf "%f\n"
wyświetli samą nazwę pliku bez ścieżki do katalogu, w którym dany plik się znajduje.
find może być używany do usuwania plików.
find kat -type f \( -name "*~" -p -name "*.bak" \) -delete
usuwa rekurencyjnie wszystki pliki backupowe z katalogu kat.
Można też kazać wykonać jakieś polecenie, które operuje na znalezionych plikach.
find kat -name dok.txt -exec bash -c 'echo -e "\nAutor: Jan Kowalski" >> {}' \;
Powyższe polecenie dla każdego z wszystkich plików o nazwie dok.txt znajdujących się w katalogu kat doda na koniec pliku podpis
Autor: Jan Kowalski
Opcja -c dla polecenia bash powoduje wykonanie argumentu w nowym shellu. Tym argumentem jest polecenie
echo -e "\nAutor: Jan Kowalski" >> {}
gdzie symbol {} polecenie find zastępuję nazwą znalezionego pliku wraz ze ścieżką.
Procesy
We współczesnych systemach operacyjnych może działać wiele procesów na raz. O procesie można myśleć jak o wykonującym się programie. Wywołanie nowego polecenia wiąże się z utworzeniem nowego procesu.
Polecenie | Opis |
---|---|
ps | wyświetlanie procesów |
kill/killall | kończenie procesów |
top | "menadżer zadań" |
fg/bg/jobs/^Z | operowanie na zadaniach w shellu |
ps
Do wyświetlania procesów, które znajdują się w systemie, służy polecenie ps. Z procesem jest związanych wiele parametrów. ps pozwala za pomocą najróżniejszych opcji wyświetlać wybrane parametry i procesy. Najczęściej jednak używamy formy
ps ax,
która wyświetla wszystkie procesy w systemie wraz z paroma najistotniejszymi informacjami:
bashtest@host:~$ ps ax ... 5613 ? Ss 0:00 xterm 5627 pts/2 S 0:03 bash 5691 pts/0 S+ 0:00 mc 5932 pts/2 R+ 0:00 ps ax bashtest@host:~$
W pierwszej kolumnie jest pid procesu. Jest to liczba będąca jednoznacznym identyfikatorem procesu. W ostatniej kolumnie jest polecenie, jakim został uruchomiony dany proces. W przedostatniej czas zużycia procesora przez dany proces. Najistotniejsza dla nas jest pierwsza i ostatnia kolumna.
kill
Znając identyfikator procesu możemy go zakończyć, używając polecenia kill. Na przykład
kill 5691
powinno zakończyć program mc.
top
Polecenie top pokazuje w sposób interaktywny aktualne procesy w systemie. Informuje nas o zużyciu procesorów i dostępnej pamięci. Komendy podajemy z klawiatury. Podstawową komendą jest klawisz Q, który powoduje wyjście z programu.
Uruchamianie w tle
Dodanie na końcu polecenia znak & powoduje, że polecenie zostanie uruchomione w tle, dzięki czemu, niezależnie od tego, jak długo trwa wykonanie danego polecenia, natychmiast wracamy do linii poleceń i możemy od razu wpisywać następne polecenie.
bashtest@host:~$ sleep 999 & [1] 5994 bashtest@host:~$ while true; do : ; done & [2] 5995 bashtest@host:~$
jobs
Do wyświetlenia listy wszystkich poleceń wykonywanych w tle w tym shellu służy polecenie jobs:
bashtest@host:~$ jobs [1]- Running sleep 999 & [2]+ Running while true; do :; done & bashtest@host:~$
Można zobaczyć za pomocą polecenia top, że drugie polecenie zajmuje znaczący czas procesora.
fg
Można też wybrane polecenie, które jest wykonywane w tle, ustanowić aktualnie wykonywanym poleceniem.
bashtest@host:~$ fg 2 while true; do :; done
Wtedy polecenie jest dalej wykonywane, ale już w taki sposób, jakby było uruchomione bez znaku & na końcu. fg pobiera numer polecenia ze swojego argumentu, a jeśli jest uruchomione bez argumentu, to bierze ostatnie polecenie w tle i ustawia je jako aktualne.
Wstrzymywanie polecenia
Z kolei aktualnie wykonywane polecenie możemy przenieść do poleceń wykonujących się w tle wciskając Control-Z.
[2]+ Stopped while true; do :; done bashtest@host:~$
Teraz polecenie to jest dodatkowo zatrzymane. Można się przekonać, że teraz nie zuużywa ono czasu procesora.
bg
Aby wznowić działanie tego polecenia można użyć polecenia bg:
bashtest@host:~$ bg 2 [2]+ while true; do :; done & bashtest@host:~$
Teraz polecenie to działa w tle tak jakby było uruchomione ze znakiem &.
Usuwanie poleceń
Aby zakończyć procesy w tle, można użyć polecenia kill. Można wykorzystać to, że polecenia aktualnie wykonywane można przerywać wciskając Control-C. Zatem wystarczy polecenie w tle uczynić aktualnym i wcisnąć tę kombinację klawiszy:
bashtest@host:~$ fg 2 while true; do :; done bashtest@host:~$ jobs [1]+ Running sleep 999 & bashtest@host:~$
Jeżeli nie chcemy wykonywać żadnych czynności zanim nie skończą się wszystkie polecenia w tle, możemy użyć polecenia wait:
bashtest@host:~$ wait [1]+ Done sleep 999 bashtest@host:~$
W tym przykładzie czekanie trwało nieco mniej niż 999 sekund. Oczywiście możemy czekać tylko na wybrane polecenia w tle, podając ich numery jako argumenty poleceniu wait.