- cat
konkatenacja plików (catenate)
- cat FILE
- wypisanie zawartości pliku
- cat FILE1 FILE2
- wypisanie skonkatenowanej zawartości pliku
-n, --number ponumeruj linie -b, --number-nonblank ponumeruj niepuste linie - diff
porównaj pliki - jakie zmiany należy wprowadzić w pierwszy pliku, żeby był identyczny z drugim (difference)
diff FILE1 FILE2:
[linie pliku 1][adc][linie pliku 2] < To co jest w pliku 1 --- > To co jest w pliku 2a - added, d - deleted, c - changed
- comm
porównaj pliki linia po lini - dane muszą być posortowane (compare)
comm FILE1 FILE2:
asia asia basia basia casia dasia
- kolumna 1 - to co jest tylko w pliku 1,
- kolumna 2 - to co jest tylko w pliku 2,
- kolumna 3 - to co jest zarówno w pliku 1 jak i 2.
- echo
wyświetl napis (podany przez argumenty)
-e interpretuj znaki specjalne -n nie dodawaj na końcu znaku nowej linii echo hello world
echo -e "hello\nworld"
Z każdym procesem związane są przynajmniej 3 strumienie:
- stdout - standardowe wyjście
- stderr - standardowe wyjście błędów
- stdin - standardowe wejście
- komenda > plik
- zapisz stdout komendy do pliku
- komenda >> plik
- dopisz stdout na koniec pliku
- komenda < plik
- otwórz zawartość pliku jak stdin komendy
- Przykłady
- cat FILE1 > FILE2 - zapisz zawartość FILE1 do FILE2
- man man > man
- echo "ala ma kota" > plik
- cat < FILE1
- < FILE1 cat
Wywołaj komendę podając jako argument anonimowy plik:
cat <<XXX ... XXX
- Plik zostaje utworzony tylko na czas działania komendy;
- Plik jest wpisany ręcznie i zakończony kombinacją znaków XXX (dowolna kombinacja);
Przykłady:
cat << EOF ala ma kota EOF python <<END import sys print sys.platform END
cat PLIK > /dev/null
- KOMENDA_0 | KOMENDA_1 | ... | KOMENDA_N
stdout z komendy 0 jest podawane na stdin komendy 1, itp.
- Przykłady
- cat PLIK | less - otwórz plik, podaj zawartość do komendy less (która pozwoli na przewijanie w górę/w dół)
- cat PLIK1 | head -n 1 | cat - PLIK2 > PLIK3 - otwórz plik 1, wytnij tylko pierwszą linię, połacz pierwszą linie pliku 1 z plikiem 2, zapisz do pliku 3
- tac
- cat od tyłu
- more
- stronnicowanie wyników (spacja - następna strona, q - wyjście)
- less
- przewijanie listy wyników (strzałki - przewijanie, q - wyjście)
- head
czyta początek pliku (strumienia) - domyślnie 10 linii
-n, --lines=K czytaj K pierwszych linii; jeśli K zaczyna się od znaku -, czytaj wszystkie linie pliku oprócz K ostatnich - tail
czyta koniec pliku (strumienia) - domyślnie 10 linii
-n, --lines=K czytaj K ostatnich linii; jeśli K zaczyna się od znaku +, czytaj wszystkie linie pliku oprócz K pierwszych -f, --follow nie przerywaj czytania, wyświetlaj dane dopisywane do pliku w miare jak się pojawiają - wc
liczenie znaków/słów/linii (word count)
-c licz tylko znaki -w licz tylko słowa -l licz tylko linie - tr
tłumaczenie znaków (na inne znaki) (translate)
-s, --squeeze zamiast tłumaczyć, usuń powtórzenia -d, --delete zamiast tłumaczyć, usuń znaki -c, --C, --complement zamiast wykonywać operacje dla wskazanego zbioru znaków, wykonuj ją dla wszystkiego co nie mieści się we wskazanym zbiorze znaków (dopełnienie) tr ab '.?' - zamień wszystkie litery a na kropki, wszystkie litery b na znaki zapytania
tr -d a - usuń wszystkie znaki a
tr -cd a - usuń wszystkie znaki inne niż a
tr -s ' ' - usuń wszystkie powtarzające się spacje
Klasy znaków: [upper:], [:lower:], [:alpha:], etc. (man tr - dokładny opis wszystkich klas)
- cut
wycinanie pól (słów) z rekordu (linii)
-d, --delimiter separator pól -f, --fields pola do wyświetlenia -c, --complement wyświetl wszystkie pola które nie zostały wskazane (dopełnienie) - sort
sortowanie liniami
-r, --reverse odwróć kolejność -n, --numeric-sort sortowanie wg wartości liczbowych -f, --ignore-case nie zważaj na wielkośc znaków - uniq
usuń powtarzające się linie, działa na posortowanych danych (unique)
-c, --count policz powtarzające się linie - grep
(bardzo) konfigurowalny filtr - przepuszcza linie które pasują do zadanego wzorca (global regular expression print)
grep ala - przepuść linie które zawierają napis ala
-i, --ignore-case nie zważaj na wielkość liter -v, --invert match przepuść tylko linie które nie pasują do wzorca (dopełnienie) -e, --regexp=PATTERN zastosuj wyrażenie regularne do filtrowania
- Wyrażenia regularne w pigułce:
- ^ - początek linii
- $ - koniec linii
- . - dowolny znak
- X? - (jakikolwiek) znak X wystąpi opcjonalnie
- X* - (jakikolwiek) znak X może wystąpić dowolną liczbę razy (w tym: wcale)
- \ - escape
- Przykłady:
- ^.$ - linia składająca sie tylko z jednego dowolnego znaku
- ^mm*$ - linia składająca się z wyłącznie z przynajmniej jednej litery m
- ^\t\. - linia rozpoczynająca sie od tabulatora po którym występuje znak .
- tee
wypisz otrzymany strumień do strumienia wyjsciowego, a także do wskazanych plików
-a, --append dopisz zamiast nadpisywać - xargs
przekieruj strumień na argumenty do komendy
xargs echo - wszystko co zostanie wpisane na strumień wejściowy zostanie przekazane do komendy echo jako argumenty
-i, --replace=STRING wstaw każdy z argumentów za wskazany STRING, np. xargs -i{} echo "Hello, {}. Did you miss me?" -0, --null przyjmij, że obiekty w strumieniu wejściowym są rozdzielone znakiem \0 zamiast \n (patrz np: find) - bc
kalkulator przyjmujący dane ze standardowego wejścia (basic calculator)
echo 2 + 2 | bc
bc jest kalkulatorem arbitrary precision, więc można (trzeba) zdefiniować ile miejsc po przecinku nas interesuje
echo "scale=2; 6 / 4" | bc
http://www.cs.put.poznan.pl/csobaniec/edu/sop/doc/sop1-zadania.pdf (Rozdział 6: Potoki, strona 22)
Można się odwoływać do strumieni wyjsciowych i wejściowych przez ich identyfikatory: stdout - 1, stderr - 2, stdin - 0.
- ./noisegen 1> plik
- przekierowuje stdout do pliku (ekwiwalent: >)
- ./noisegen 2> plik
- przekierowuje stderr do pliku
- ./noisegen 1> plik1 2> plik2
- przekierowuje stdout i stderr do plików
- ./noisegen 1> plik 2>> plik
- przekierowuje stdout i stderr do jednego pliku
Można także przekierować strumień na inny strumień.
- ./noisegen 2>&1 | less
- dodaje stderr do strumienia stdout (żeby uwzględnić przy korzystaniu z less)
- ./echo "BŁĄD!!!!1" 1>&2
- dodaje stdout do strumienia stderr
- ./noisegen 2>&1 1>&2
- wbrew pozorom, dodaje tylko stderr do stdout
- ./noisegen 3>&1 1>&2 2>&3
- zamiana stdout z stderr
- ./noisegen 3>&1 1>&2 2>&3 3>&-
- zamykamy strumień 3 na wszelki wypadek
Skrypt noisegen: http://www.cs.put.poznan.pl/ksiek/_downloads/noisegen1.sh (wymaga cowsay)
- D>N
Zapis do pliku.
- D to deskryptor pliku. N to nazwa pliku.
- D może być pominięte - przyjmuje domyślną wartość 1.
- D<N
Odczyt z pliku.
- D to deskryptor pliku. N to nazwa pliku.
- D może być pominięte - przyjmuje domyślną wartość 0.
- D>&F
Przekierowanie na strumień.
- D i F to deskryptory plików.
- D może być pominięte - przyjmuje domyślną wartość 1.
- D<&F
Przekierowanie ze strumienia.
- D i F to deskryptory plików.
- D może być pominięte - przyjmuje domyślną wartość 1.
- C | C | ... | C
- C to polecenia, np echo ...
- Otwórz w przeglądarce adresy podane w (jakimś) pliku [xargs]
- Wyświetl częstotliwości taktowania wszystkich procesorów (w jednej linii) [/proc/cpuinfo xargs]
- Wygeneruj listę wszystkich słów które mają 8 liter, z których 3-cia to litera a, a ostatnią to literą jest y (do krzyżówki?). Wyświetl wyniki wielkimi literami. Zastosuj paginację lub przesuwanie wyników. [/usr/share/dict/words grep]
- Wyświetl 20 losowych cyfr [/dev/urandom]
- Wygeneruj 6 losowych 8-o znakowych haseł [fold]
- Podaj nazwę użytkownika który jest zalogowany najdłużej/najkrócej [sort who]
- Wypisz adres fizyczny (MAC) karty sieciowej komputera [ifconfig grep]
- Wypisz wszyskie adresy IP komputera [ifconfig grep]
- Wypisz 5 najpopularniejszych komend z historii [.bash_history sort uniq]
- Wypisz nazwy wszystkich zwykłych plików i linków w katalogu bieżącym [ls]
- Sprawdź który z użytkowników otworzył najwięcej plików (i ile to ich jest) [lsof sort uniq]
- Wypisz 5 najpopularniejszych rozszerzeń plików (bez katalogów) w swoim katalogu domowym [ls sort uniq]
- Jak wyżej, tylko typy plików (mimetype) zamiast rozszerzeń [sort uniq file]
- Policz linie kodu we wszytskich plikach katalogu z projektem (znaki \n) [find wc xargs]
- Jak wyżej, tylko policz średniki zamiast znaków nowej linii. [find tr xargs]
- Jak wyżej, tylko wypisz wiadomość na końcu z liczbą średników (np. "Semicolons: 644") [echo wc xargs]
- Wypisz informacje o copyright ze wszystkich plików z kodem w katalogu (po rozszerzeniu) [find cat xargs]
- Policz wszystkie pliki ukryte w swoim katalogu domowym [grep ls wc]
- Wypisz wartość 2^n dla n=1..100 [bc echo xargs]
- Wylicz średnią ocen dla każdego ze studentów w pliku przyklad.csv [xargs echo bc] (http://www.cs.put.poznan.pl/ksiek/SOP/resources/przyklad.csv)
- Wypisz wszystkie pliki i katalogi z katalogu /proc do pliku tymczasowego (np. /tmp/proc.log) i na ekran, ale nie pokazuj błędów. Włącz paginację albo przemieszczanie się po wynikach. [find tee /dev/null]