wtorek,
Bash: Potoki
Potoki (pipeline) w Bashu to bardzo potężne narzędzie, które pozwala przekazywać wyjście jednego polecenia jako wejście do innego. Dzięki temu można łączyć proste polecenia w bardziej złożone operacje i tworzyć skomplikowane ciągi przetwarzania bez potrzeby tworzenia tymczasowych plików czy zapisywania pośrednich wyników.
Przykłady
Filtrowanie listy plików
Jeśli chcesz zobaczyć listę plików z rozszerzeniem .txt w bieżącym katalogu, możesz użyć potoku łączącego polecenia ls i grep:
ls | grep ".txt"
To polecenie najpierw wygeneruje listę wszystkich plików i katalogów (dzięki ls), a następnie grep przefiltruje te wyniki, pokazując tylko te, które zawierają .txt.
Liczenie plików w katalogu
Jeśli chcesz wiedzieć, ile plików znajduje się w bieżącym katalogu, możesz połączyć ls i grep.
ls -l | grep -c "^-"
Tutaj ls -l wyświetla szczegółową listę zawartości katalogu, grep -c "^-" wybiera tylko linie, które opisują pliki (a nie katalogi) i dzięki przełącznikowi -c zwraca ich liczbę.
Sortowanie procesów według zużycia pamięci
Możesz użyć potoku do wyświetlenia listy procesów, posortowanej według zużycia pamięci:
ps aux | sort -nrk 4 | head
Polecenie ps aux wyświetla wszystkie działające procesy, sort -nrk 4 sortuje je numerycznie (-n) w odwrotnej kolejności (-r) według czwartej kolumny (zużycie pamięci), a head pokazuje tylko pierwsze 10 z nich.
Wyszukiwanie tekstu w plikach
Możesz przeszukać wszystkie pliki w katalogu (i podkatalogach) pod kątem określonego tekstu:
find . -type f | xargs grep "szukany_tekst"
Komenda find . -type f znajduje wszystkie pliki w bieżącym katalogu i jego podkatalogach, a xargs grep "szukany_tekst" przeszukuje każdy z tych plików w poszukiwaniu "szukany_tekst".