15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
28.10.2024
2 +1

Jak używać polecenia `xargs` w Linux: Kompletny przewodnik

Polecenie xargs jest jednym z najpotężniejszych i najbardziej wszechstronnych narzędzi dostępnych w systemach Unix/Linux. Buduje i wykonuje polecenia, odczytując argumenty ze standardowego wejścia, skutecznie wypełniając lukę między poleceniami produkującymi dane wyjściowe a poleceniami przyjmującymi argumenty. Niezależnie od tego, czy zarządzasz tysiącami plików, automatyzujesz powtarzające się zadania powłoki, czy tworzysz złożone potoki poleceń, opanowanie xargs znacząco poprawi Twoją efektywność w terminalu.

W tym kompleksowym przewodniku omówimy, jak xargs działa od środka, przejdziemy przez praktyczne przykłady z życia wzięte, wyjaśnimy wszystkie istotne opcje i pokażemy, jak unikać typowych pułapek.

Czym jest polecenie xargs i jak działa?

W swojej istocie xargs odczytuje elementy ze standardowego wejścia (stdin) — zazwyczaj oddzielone białymi znakami lub znakami nowej linii — i przekazuje je jako argumenty do określonego polecenia. Jest to kluczowe, ponieważ wiele poleceń Unix nie przyjmuje bezpośrednio danych przesyłanych potokiem jako argumentów; oczekują argumentów w wierszu poleceń. xargs rozwiązuje ten problem w elegancki sposób.

Podstawowa składnia to:

command | xargs [options] another_command

Na przykład, aby znaleźć wszystkie pliki .txt w bieżącym katalogu i je usunąć:

find . -name "*.txt" | xargs rm

Tutaj find generuje listę nazw plików .txt i zapisuje je na stdout. xargs odczytuje tę listę i przekazuje nazwy plików jako argumenty do rm, który następnie je usuwa — wszystko w jednej, wydajnej operacji.

> Dlaczego nie używać po prostu rm $(find . -name "*.txt")? Podstawianie poleceń może zawieść lub zachowywać się nieoczekiwanie, gdy lista argumentów jest bardzo długa lub gdy nazwy plików zawierają znaki specjalne. xargs obsługuje oba scenariusze bezpieczniej i wydajniej.

Podstawowe użycie xargs

Zanim przejdziemy do zaawansowanych przykładów, ustalmy jasne zrozumienie podstawowego wzorca wywołania.

Przekazywanie prostej listy argumentów

echo "file1.txt file2.txt file3.txt" | xargs touch

To polecenie tworzy trzy pliki — file1.txt, file2.txt i file3.txt — przekazując wszystkie trzy nazwy jako argumenty do touch. Bez xargs musiałbyś albo wpisywać każdą nazwę pliku ręcznie, albo pisać pętlę.

Weryfikowanie, co wykona xargs

Przed uruchomieniem potencjalnie destrukcyjnego polecenia użyj flagi -t, aby wydrukować zbudowane polecenie na stderr przed jego wykonaniem:

echo "file1.txt file2.txt" | xargs -t rm

Wynik:

rm file1.txt file2.txt

Jest to nieocenione przy debugowaniu potoków przed zatwierdzeniem do wykonania.

Praktyczne przykłady użycia xargs

1. Usuwanie plików znalezionych przez find

Jednym z najczęstszych i najpotężniejszych zastosowań xargs jest łączenie go z find w celu usuwania plików spełniających określone kryteria:

find /var/log -name "*.log" -mtime +30 | xargs rm

Znajduje to wszystkie pliki .log w /var/log starsze niż 30 dni i usuwa je. Ten rodzaj automatycznego czyszczenia jest niezbędny do konserwacji serwera — coś, z czym administratorzy prowadzący Hosting VPS lub Serwery Dedykowane mają do czynienia regularnie, aby kontrolować wykorzystanie dysku.

2. Ograniczanie liczby argumentów na wykonanie za pomocą -n

Domyślnie xargs przekazuje jak najwięcej argumentów do polecenia w jednym wywołaniu. Opcja -n pozwala kontrolować dokładnie, ile argumentów jest przekazywanych na wykonanie:

echo "one two three four five six" | xargs -n 2 echo

Wynik:

one two
three four
five six

Jest to szczególnie przydatne, gdy polecenie ma limit liczby argumentów, które może przyjąć, lub gdy chcesz przetwarzać elementy w kontrolowanych partiach.

3. Obsługa nazw plików ze spacjami i znakami specjalnymi za pomocą -0

Jest to jedna z najważniejszych praktyk bezpieczeństwa przy używaniu xargs. Nazwy plików zawierające spacje, znaki nowej linii lub inne znaki specjalne zepsują naiwne potoki. Rozwiązaniem jest użycie find z -print0 (który oddziela nazwy plików bajtami zerowymi zamiast znakami nowej linii) i xargs z -0:

find . -name "*.txt" -print0 | xargs -0 rm

Bajt zerowy (

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij