XARGS(1) General Commands Manual XARGS(1) NAZWA xargs - wykonuje polecenie z argumentami pobranymi ze standardowego wejscia SKLADNIA xargs [opcje] [polecenie [argumenty-poczatkowe]] OPIS Ta strona opisuje wersje GNU programu xargs. xargs czyta ze standardowego wejscia liste elementow rozdzielonych spacjami (argumenty je zawierajace moga byc ujete w pojedyncze lub podwojne cudzyslowy albo spacje w argumentach moga byc poprzedzone przez odwrotne ukosniki) lub znakami nowego wiersza. Nastepnie wykonywane jest polecenie (domyslnie echo) jeden lub wiecej razy z argumentami-poczatkowymi, po ktorych nastepuja argumenty przeczytane ze standardowego wejscia. Puste wiersze ze standardowego wejscia sa ignorowane. Wiersz polecen dla polecenia jest budowany az do momentu osiagniecia systemowego limitu (chyba ze podano opcje -n i -L). Podane polecenie moze byc wywolane tak wiele razy, jak to potrzebne, aby uzyc cala liste elementow wejsciowych. Ogolniej, wystapi znacznie mniej wywolan polecenia niz bylo elementow na wejsciu. Zwykle daje to znaczaca roznice w wydajnosci. W przypadku niektorych polecen, przydatne okaze sie ich wykonanie rownolegle; zob. opcja -P. Poniewaz nazwy plikow pod Uniksem moga zawierac spacje i znaki nowego wiersza, to domyslne zachowanie jest czesto problematyczne: xargs niepoprawnie przetwarza pliki zawierajace powyzsze znaki. W takich sytuacjach lepiej jest uzywac opcji -0, co zapobiega takim problemom. Podczas uzywania tej opcji nalezy sie upewnic, ze program, ktory przetwarza wejscie dla xargs takze uzywa znaku null jako separatora. Jesli na przyklad tym programem jest GNU find, to odpowiednia opcja to -print0. Jesli uruchomione polecenia zakonczy sie z kodem 255, to xargs natychmiast przerwie swoje dzialanie bez czytania dalszego wejscia. Jesli sie to zdarzy, to na standardowym wyjsciu bledow wypisywany jest komunikat bledu. OPCJE -0, --null Nazwy plikow wejsciowych sa zakonczone znakiem null zamiast spacja, a cudzyslowy i odwrotne ukosniki nie maja specjalnego znaczenia (wszystkie znaki sa brane doslownie). Lancuch konca pliku jest traktowany jak kazdy inny. Opcja jest uzyteczna, gdy argumenty moga zawierac biale znaki, cudzyslowy, apostrofy lub odwrotne ukosniki. Ta opcja moze byc uzyta do pobrania argumentow od programu GNU find uruchomionego z opcja -print0. -a plik, --arg-file=plik Czyta elementy z podanego pliku zamiast ze standardowego wejscia. Jesli ta opcja jest uzywana, to standardowe wejscie nie jest zmieniane podczas uruchamiania polecen. W przeciwnym wypadku standardowe wejscie jest przekierowywane z /dev/null. --delimiter=ogranicznik, -d ogranicznik Elementy wejsciowe sa zakonczone podanym znakiem. Podany ogranicznik moze byc pojedynczym znakiem, cytowanym znakiem w stylu C, takim jak \n, albo osemkowym lub szesnastkowym kodem ucieczki. Osemkowe i szesnastkowe kody ucieczki sa interpretowane tak, jak w przypadku polecenia printf. Nie sa obslugiwane znaki wielobajtowe. Przy przetwarzaniu wejscia, znaki cytatu i odwrotny ukosnik nie sa znakami specjalnymi; kazdy znak wejscia jest przyjmowany doslownie. Opcja -d wylacza wszelkie lancuchy konca pliku, ktore sa traktowane jak kazdy inny argument. Mozna uzyc tej opcji, gdy wejscie sklada sie z elementow oddzielonych znakiem nowego wiersza, aczkolwiek niemal zawsze, lepiej jest zaprojektowac swoj program, aby uzywal --null tam, gdzie to mozliwe. -E lancuch-konca-pliku Nadaje lancuchowi konca pliku wartosc lancuch-konca-pliku. Jezeli ciag oznaczajacy koniec pliku pojawi sie w jednym z wierszy wejsciowych, reszta danych jest ignorowana. Jesli nie uzyto opcji -E, ani -e, to lancuch konca pliku nie jest uzywany. -e[lancuch-konca-pliku], --eof[=lancuch-konca-pliku] Opcja jest synonimem opcji -E. Nalezy zamiast niej uzywac opcji -E, poniewaz jest zgodna z POSIX-em, podczas gdy ta opcja -- nie jest. Jesli pominieto lancuch-konca-pliku, to lancuch konca pliku nie jest uzywany. Jesli nie podano ani opcji -E, ani opcji -e, to lancuch konca pliku nie jest uzywany. -I lancuch-do-zastapienia Zastepuje wszystkie wystapienia lancucha-do-zastapienia w poczatkowych-argumentach argumentami przeczytanym ze standardowego wejscia. Ponadto, niecytowane odstepy nie separuja argumentow, zamiast nich separatorem jest znak nowego wiersza. Automatycznie wlaczane sa opcje -x oraz -L 1. -i[lancuch-do-zastapienia], --replace[=lancuch-do-zastapienia] Opcja jest synonimem -I lancuch-do-zastapienia, jesli podano lancuch-do-zastapienia. Jesli brak argumentu lancuch-do-zastapienia, to dziala to jak -I{}. Opcja -i jest przestarzala, nalezy zamiast niej uzywac -I. -L maksymalna-liczba-wierszy Uzywa co najwyzej maksymalnej-liczby-wierszy niepustych wierszy danych wejsciowych na kazdy wiersz polecen. Spacje na koncu wiersza powoduja, ze jest do niego dolaczany nastepny wiersz. Automatycznie wlaczana jest opcja -x. -l[maksymalna-liczba-wierszy], --max-lines[=maksymalna-liczba-wierszy] Synonim opcji -L. W przeciwienstwie do -L argument maksymalna-liczba-wierszy jest opcjonalny; jesli nie jest podany to jego wartoscia domyslna jest jeden. Opcja -l jest przestarzala poniewaz standard POSIX wymienia -L zamiast niej. -n maksymalna-liczba-argumentow, --max-args=maksymalna-liczba-argumentow Uzywa co najwyzej maksymalnej-liczby-argumentow na kazdy wiersz polecen. Moze zostac uzytych mniej argumentow niz maksymalna-liczba-argumentow, jesli zostanie przekroczony ich rozmiar (patrz opcja -s), chyba ze podana jest opcja -x, w ktorym to przypadku dzialanie programu xargs zostanie zakonczone. -P maksymalna-liczba-procesow, --max-procs=maksymalna-liczba-procesow Uruchamia do maksymalnej-liczby-procesow jednoczesnie; domyslnie 1. Jesli maksymalna-liczba-procesow wynosi 0, to xargs uruchomi tak wiele procesow jednoczesnie, jak to mozliwe. Nalezy korzystac z opcji -n lub z opcji -L razem z -P; w innym przypadku moze sie zdarzyc, ze bedzie uruchomione tylko pojedyncze wykonanie. W trakcie dzialania xargs, mozna wyslac jego procesowi sygnal SIGUSR1 aby zwiekszyc liczbe rownoleglych polecen do uruchomienia, lub SIGUSR2 -- aby ja zmniejszyc. Nie mozna zwiekszyc liczby ponad wynikajacy z implementacji limit (ukazany za pomoca opcji --show-limits). Liczby nie mozna zmniejszyc ponizej 1. xargs nigdy nie przerywa swoich polecen, przy zadaniu zmniejszenia liczby rownoleglych procesow, program jedynie poczeka, az wiecej niz jedno dotychczasowe polecenie sie zakonczy, zanim rozpocznie kolejne. xargs zawsze zaczeka na zakonczenie wszystkich procesow potomnych, zanim sam sie zakonczy (lecz zob. USTERKI). Jesli nie korzysta sie z opcji -P, to xargs nie obsluzy sygnalow SIGUSR1 i SIGUSR2 co oznacza, ze zakoncza one program (chyba ze zostaly zablokowane w procesie macierzystym przed uruchomieniem xargs). Prosze zauwazyc, ze to do procesow wywolujacych nalezy poprawne zarzadzanie rownoleglym dostepem do zasobow dzielonych. Przykladowo, jesli wiecej niz jeden z nich sprobuje wypisac na standardowe wyjscie, wyjscie zostanie utworzone w nieokreslonej (i najprawdopodobniej przemieszanej) kolejnosci, chyba ze procesy w jakis sposob wspolpracuja ze soba, aby temu zapobiec. Jednym ze sposobow unikniecia takich problemow jest korzystanie z jakiegos typu blokad. Mowiac ogolnie, blokady zapewnia poprawna kolejnosc wyjscia, kosztem wydajnosci. Jesli koszt zmniejszenia wydajnosci jest nieakceptowalny, nalezy doprowadzic do tego, aby kazdy proces tworzyl wyjscie do oddzielnego pliku (lub innego typu oddzielnego zasobu). -o, --open-tty Otwiera ponownie standardowe wejscie jako /dev/tty w procesie potomnym, przed wykonaniem polecenia. Przydaje sie to, gdy xargs ma uruchomic aplikacje interaktywna. -p, --interactive Prosi uzytkownika o potwierdzenie przed uruchomieniem kazdego wiersza polecen i przeczytaniem danych z terminala. Uruchamia wiersz polecen tylko wtedy, gdy odpowiedz zaczyna sie od ,,y" lub ,,Y". Automatycznie wlacza opcje -t. --process-slot-var=nazwa Ustawia zmienna srodowiskowa nazwa na unikalna wartosc dla kazdego procesu potomnego. Wartosci sa uzywane ponownie, po zakonczeniu potomkow. Moze to posluzyc np. jako prymitywny sposob rozlozenia obciazenia. -r, --no-run-if-empty Jezeli w danych ze standardowego wejscia nie znajduja sie znaki inne niz spacje, polecenie nie jest uruchamiane. Normalnie polecenie jest uruchamiane jednorazowo, nawet gdy nie odczytano zadnych danych. Ta opcja jest rozszerzeniem GNU. -s maksymalna-liczba-znakow, --max-chars=maksymalna-liczba-znakow Uzywa co najwyzej maksymalnej-liczby-znakow w kazdym wierszu polecen, wlaczajac w to polecenie, argumenty poczatkowe oraz znaki null konczace kazdy z lancuchow argumentow. Najwieksza mozliwa wartosc zalezy od systemu i jest wyliczana jako limit dlugosci argumentow wywolania exec(2) pomniejszony o rozmiar srodowiska, nastepnie pomniejszony o 2048 bajtow. Jesli wartosc ta jest wieksza niz 128 KiB, to 128 KiB jest uzywane jako wartosc domyslna, w przeciwnym wypadku wartoscia domyslna jest wyliczona wartosc maksymalna. 1 KiB (kibibajt) to 1024 bajty. xargs automatycznie dostosowuje sie do silniejszych ograniczen. --show-limits Wyswietla ograniczenia na dlugosc wiersza polecen, ktore sa ustanawiane przez system operacyjny, przez xargs w przypadku rozmiaru wewnetrznego bufora lub przez opcje -s. Aby xargs nie zrobil nic poza wyswietleniem ograniczen, jego wejscie powinno byc przekierowane z /dev/null (i byc moze powinna byc podana opcja --no-run-if-empty). -t, --verbose Wiersz polecen jest wypisywany na standardowe wyjscie bledow przed wykonaniem polecenia. -x, --exit Konczy dzialanie programu, jezeli rozmiar zostanie przekroczony (patrz opcja -s). -- Rozdziela liste opcji. Nastepne argumenty, jesli wystapia, sa traktowane tylko jako argumenty, nawet jesli rozpoczynaja sie od -. Na przyklad xargs -- --help uruchomi polecenie --help (zlokalizowane w PATH), zamiast wypisac komunikatu pomocy, a xargs -- --moje-polecenie uruchomi polecenie --moje-polecenie, zamiast odrzucic go jako nierozpoznana opcje. --help Podaje wszystkie opcje programu xargs i konczy dzialanie. --version Wypisuje numer wersji xargs i konczy dzialanie programu. Opcje --max-lines (-L, -l), --replace (-I, -i) i --max-args (-n) wzajemnie sie wykluczaja. Jesli poda sie niektore z nich w tym samym czasie, xargs zwykle uzyje opcji podanej w wierszu polecenia jako ostatniej tj. zresetuje ona wartosc sprzecznej opcji (podanej wczesniej) na jej wartosc domyslna. Dodatkowo xargs wypisze ostrzezenie na stderr. Wyjatkiem od tej reguly jest specjalna wartosc maksymalnej-liczby-argumentow rowna 1 (,,-n1"); jest ona ignorowana po opcji --replace i jej aliasach -I oraz -i, poniewaz nie prowadzi to do faktycznego konfliktu. PRZYKLADY find /tmp -name core -type f -print | xargs /bin/rm -f Wyszukuje a nastepnie usuwa pliki o nazwie core w katalogu /tmp i jego podkatalogach. Prosze zauwazyc, ze bedzie to dzialac niepoprawnie jesli ktorakolwiek z nazw plikow zawiera znaki nowego wiersza lub spacji. find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f Wyszukuje a nastepnie usuwa pliki o nazwie core w katalogu /tmp i jego podkatalogach. Nazwy plikow sa przetwarzane w taki sposob, ze nazwy plikow lub katalogow zawierajace znaki spacji lub nowego wiersza sa poprawnie obslugiwane. find /tmp -depth -name core -type f -delete Wyszukuje a nastepnie usuwa pliki o nazwie core w katalogu /tmp i jego podkatalogach. Robi to jednak w sposob bardziej efektywny niz w poprzednim przykladzie (poniewaz nie uzywa fork(2) i exec(2), zeby uruchomic rm i nie potrzebuje dodatkowego procesu xargs). cut -d: -f1 < /etc/passwd | sort | xargs echo Tworzy zwiezla liste wszystkich uzytkownikow systemu. STATUS ZAKONCZENIA xargs zwraca nastepujace statusy zakonczenia: 0 jesli sie powiedzie 123 jesli dowolne z wywolanych polecen zakonczy sie ze statusem 1-125 124 jesli polecenie zakonczylo sie ze statusem 255 125 lub polecenie zostalo zabite sygnalem 126 jesli polecenie nie moze byc uruchomione 127 jesli nie znaleziono polecenia 1 jesli wystapil jakis inny blad. Kody zakonczenia wieksze od 128 sa uzywane przez powloke do wskazania, ze program zostal zabity przez sygnal. ZGODNOSC ZE STANDARDAMI Wedlug stanu na wersje 4.2.9 programu GNU xargs, domyslnie xargs nie uzywa logicznego znacznika konca pliku. Standard POSIX (IEEE Std 1003.1, edycja 2004) na to pozwala. Opcje -l i -i pojawiaja sie w wersji standardu POSIX z roku 1997, ale brak ich w wersji z roku 2004. Dlatego powinno sie uzywac zamiast nich opcji - odpowiednio - -L i -I. Opcja -o jest rozszerzeniem standardu POSIX, majaca na celu lepsza kompatybilnosc z BSD. Standard POSIX pozwala implementacjom na stosowanie limitu rozmiaru argumentow funkcji exec. Limit ten moze wynosic tylko 4096 bajtow, wlaczajac w to rozmiar srodowiska. Przenosne skrypty nie moga polegac na tym, ze wieksza wartosc jest obslugiwana. Jednakze nie znamy zadnej implementacji, w ktorej to ograniczenie jest tak male. Mozna uzyc opcja --show-limits, aby wyswietlic ograniczenia majace zastosowanie do biezacego systemu. W wersjach xargs do wersji 4.9.0 wlacznie, SIGUSR1 i SIGUSR2 nie spowoduja zakonczenia xargs nawet, gdy nie korzysta sie z opcji -P. HISTORIA Polecenie xargs zostalo wymyslone przez Herba Gellisa w Bell Labs. Wiecej informacji w podreczniku Texinfo findutils, w rozdziale Finding Files. USTERKI Nie jest mozliwe uzywanie xargs w sposob calkowicie bezpieczny, poniewaz zawsze istnieje luka czasowa pomiedzy utworzeniem listy plikow wejsciowych i uzyciem tej listy przez polecenia, ktore xargs wykonuje. Jesli inni uzytkownicy maja dostep do systemu, to moga zmienic stan systemu plikow podczas tej luki czasowej, tak zeby wymusic na poleceniach uruchomianych przez xargs wykonywanie akcji na plikach, ktore nie byly zamierzone. Bardziej szczegolowa dyskusje dotyczaca tego i podobnych problemow mozna znalezc w rozdziale ,,Security Considerations" dokumentacji texinfo pakietu findutils. Opcja -execdir polecenia find czesto moze stanowic bardziej bezpieczna alternatywe. Podczas uzywania opcji -I kazdy przeczytany wiersz wejsciowy jest wewnetrznie buforowany. Oznacza to, ze istnieje gorne ograniczenie dlugosci wierszy wejsciowych akceptowanych przez xargs z opcja -I. Aby ominac to ograniczenie mozna uzyc opcji -s do zwiekszenia rozmiaru bufora uzywanego przez xargs oraz mozna takze uzyc dodatkowego wywolania xargs, by zapewnic, ze bardzo dlugie wiersze sie nie pojawia. Na przyklad: jakiespolecenie | xargs -s 50000 echo | xargs -I '{}' -s 100000 rm '{}' Powyzsze pierwsze wywolanie xargs nie ma ograniczenia na dlugosc wiersza wejsciowego, poniewaz nie uzywa opcji -i. Drugie wywolanie xargs ma takie ograniczenia, ale zapewnilismy, ze nigdy nie wystapi wiersz dluzszy niz obslugiwany. Nie jest to idealne rozwiazanie. Zamiast tego opcja -i nie powinna wymuszac ograniczenia na dlugosc wiersza -- dlatego tez ten opis pojawia sie w rozdziale USTERKI. Problem nie wystepuje jesli wejscie pochodzi z programu find(1), poniewaz wypisuje on tylko jedna nazwe pliku w wierszu. W wersjach xargs do wersji 4.9.0 wlacznie, xargs -P zakonczyloby dzialanie, w chwili gdy niektore z jego potomkow wciaz by dzialaly, jesli jeden z nich zakonczyl sie ze statusem 255. ZGLASZANIE BLEDOW Strona internetowa z pomoca GNU findutils: O bledach tlumaczenia programu prosimy poinformowac przez Wszelkie inne problemy prosimy zglaszac za pomoca systemu sledzenia bledow GNU Savannah: Do ogolnej dyskusji na tematy zwiazane z pakietem GNU findutils sluzy lista dyskusyjna bug-findutils: PRAWA AUTORSKIE Copyright (C) 1990-2024 Free Software Foundation, Inc. Licencja GPLv3+: GNU GPL w wersji 3 lub pozniejszej . Jest to wolne oprogramowanie: mozna je zmieniac i rozpowszechniac. Nie ma ZADNEJ GWARANCJI, w granicach okreslonych przez prawo. ZOBACZ TAKZE find(1), kill(1), locate(1), updatedb(1), fork(2), execvp(3), locatedb(5), signal(7) Pelna dokumentacja: albo dostepna lokalnie przez: info xargs TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Lukasz Kowalczyk , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . XARGS(1)