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".