Przekierowywanie strumieni, potoki Standardowe strumienie we/wy
Transkrypt
Przekierowywanie strumieni, potoki Standardowe strumienie we/wy
Przekierowywanie strumieni, potoki Standardowe strumienie we/wy: 0 wejście, stdin 1 wyjście, stdout 2 blędy, null ("czrna dziura") Wejście oznacza się jako "<", wyjście z kolei symbolem: ">". Wynik polecenia "cat" zapiszujemy do pliku "pliczek": $ cat > wyjscie jakis tekst możesz wprowadzać wiele linii możesz używać polskich znaków: ąęćź oraz &^!%#@ ^@*$&*)(@*)!{}:": dopoki nie naciśnesz kombinacji [CTRL]+[d] aby zakończyć Można łączyć symbole we/wy w jednym poleceniu. $ cat < wyjscie > kopia_wyjscia Standardowe wyjście błędów # cat < nieistniejacy_plik > kopia bash: nieistniejacy_plik: Nie ma takiego pliku ani katalogu Linux (podobnie jak większość SO) odróżnia dwa wyjścia: standardowe wyjście oraz standardowe wyjście błędów oznaczane symbolem "2>". # find / -Qname "qwq" -print > wyniki_szukania 2> bledy & -Qname zamiast -name --->, BŁĄD $ cat bledy find: invalid predicate `-Qname' Można zrobić jeszcze jedną "sztuczkę". Błędy i wyniki są zapisywane do jednego pliku (i tak się zazwyczaj robi, aby wiedzieć kiedy wystąpił błąd - łatwiej będzie taki błąd zlokalizować i poprawić). Używa się wtedy "&>" aby poinformować powłokę, że standardowe wyjście oraz wyjście błędów mają być przekierowane do tego samego pliku. $ find / -Qname "xyz" -print &> wyniki_szukania & Operatory ">>" oraz "<<" Pierwszy operator jest operatorem dołączenia. Możemy tak połączyć w jeden dokument kilka plików. Np. dopiszmy pliki: "bledy_pn", "bledy_wt", "bledy_sr" do pliku "bledy". $ cat < bledy_pn > bledy $ cat < bledy_wt >> bledy $ cat < bledy_sr >> bledy Pierwszy poleceniem "cat" stworzyłem plik "bledy", potem już tylko dopisywałem do niego. Operator "<<" jest tez nazywany operatorem "here". Powoduje on wczytywanie do pliku danych dopóki nie wpiszemy wzorca kończącego, który jest argumentem operatora. np.: $ cat << $koniec$ > moj_tekst.txt > sjdcsgfdhsgfdg > dsvjgfdgvfd > djhgffhgvjfdhgs > i tak dalej ;D > $koniec$ Jeśli wyświetlimy teraz zawartość pliku moj_tekst.txt otrzymamy: $ cat moj* sjdcsgfdhsgfdg dsvjgfdgvfd djhgffhgvjfdhgs i tak dalej ;D Czyli bez napisu $koniec$ - ponieważ był to wzorzec końca wprowadzanego tekstu. Potoki Potoki to nic innego jak przekierowania wyjścia strumieni z jednej aplikacji (polecenia, urządzenia) na wejście drugiej. Znak potoku to: "|". Polecenie "users" wyświetla listę aktualnie zalogowanych do systemu użytkowników. Aby policzyć tych użytkowników możemy użyć polecenia "wc -w", które policzy słowa zwracane przez pierwsze polecenie. Możemy dopisać kilka pożytecznych linii do pliku ".bash_profile": kto=`users` ile=`users | wc -w` echo "Obecnie w systemie jest: $ile uzytkownikow, oto oni:" echo $kto I teraz po każdym zalogowaniu się do systemu będziesz otrzymywał komunikat o zalogowanych użytkownikach - ich liczbę oraz listę. find Find - szukanie plików w systemie Linux Podstawowa składania to: # find katalog -name wzorzec [inne opcje] -print Poszukemy pliku o wzorcu "abc*" i chcemy przeszukać cały system: # find / -name "abc*" -print Wyszukanie wszystkich plików, które nie pasujących do wzorca "abc*". (negacja opcji) # find / ! -name "abc*" -print Find może uwględniać kilka wybranych warunków. # find / -name "abc*" -size +10c -mtime 3 -print "Znajdź pliki o nazwie pasującej do "abc*" i o rozmiarach >= 10 bajtów i modyfikowanych trzy dni temu" Alternatywa do warunków, wprowadzana jest w maskowanych nawiasach a pomiędzy dwoma warunkami wstawiamy -o(lub -or), schemat: find katalog \( opcja1 -o opcja2 -o ... -o opcjan \) -print Można zagnieżdżać warunki! # find / \( -name "abc*" -o -name "comm*" -o -name "au*" \) -o \( -size +1000c -mtime 2 \) -print Alternatywa dwóch warunków: pierwszy to alternatywa plików pasujących do trzech wzorców nazw, drugi warunek do koniunkcja warunku >= 1000 bajtów oraz ostatniej modyfikacji dwa dni temu.