Rozważmy kilka popularnych systemów * nix (na przykład Debian, CentOS, Arch i Kali).

Zawsze używany find; Nie przypominam sobie używania GNU find, ale z jednego przykładu Widziałem, że zakładałem, że składnia GNU find może być prostsza (chociaż może zezwalać na mniej operacji).

Mam dwa pytania:

  1. Czy find jest domyślnym narzędziem „znajdź lub-i operuj” w typowych systemach, czy też systemy będą wyposażone w find i GNU find?

  2. Czy GNU find powinno być prostsze niż find ?

Komentarze

  • zawsze korzystałeś z GNU find w Linuksie, chyba że ' jesteś dużym użytkownikiem find na busybox lub Android 😉 W systemach innych niż linux, GNU find ma zwykle nazwę gfind.
  • Wypróbuj find --version😉
  • Systemy, do których ' odnosisz się, to systemy GNU, większość z nich to GNU / Linux, chociaż Debian jest dostępny dla kilku innych jąder, jak dobrze. Dlatego ' nie jest zaskakujące, że implementacja find w tych systemach to GNU find.

Odpowiedź

Narzędzia GNU często implementują standard POSIX, a następnie rozszerzają go o dodatkowe funkcje dla większej wygody (i, z drugiej strony, zmniejszona przenośność między Unikami). Aspekt przenośności jest powodem, dla którego czasami zobaczysz odpowiedzi lub komentarze na tej stronie, które bardzo uważnie wskazują, kiedy zakłada się narzędzie GNU lub inną konkretną implementację narzędzia.

Jeśli używasz Linuksa system, bardzo użyłbyś implementacji GNU find i prawdopodobnie nie miałbyś innego find zainstalowany. W systemach innych niż Linux miałbyś natywny find i możliwość zainstalowania GNU find (który najczęściej był instalowany w name gfind lub, rzadziej, gnufind).

Podobnie jak w przypadku większości narzędzi GNU, GNU find implementuje i rozszerza standardową find specyfikację . Dlatego nie jest to „prostsze”, ale prawdopodobnie bardziej złożone, aby było wygodniejsze, i byłoby nieco łatwiejsze do wykonania z nim pewnych złożonych zadań niż przy użyciu ściśle zgodnego ze standardami find .

Rozszerzone implementacje find często, na przykład, implementują -maxdepth i -mindepth predykaty, o których norma nie wspomina, a GNU find w szczególności ma również -printf do wydrukowania znalezionych ścieżek za pomocą różnorodne możliwości formatowania (standardowa find nie ma -printf) i predykatów do dopasowywania różnych typów wyrażeń regularnych w nazwach ścieżek, a także szereg innych niestandardowych predykatów, z których niektóre można również znaleźć w innych implementacjach find (prawdopodobnie z nieco inną semantyką, np. -execdir whi ch działa nieco inaczej w zależności od tego, co find jest używane 1 ).

-delete predykat, używany w odpowiedzi, do której tworzysz łącze, jest niestandardowy, ale zaimplementowany przez GNU find, a także w find w niektórych innych systemach innych niż Linux. GNU find „s -delete będzie narzekać, jeśli użyjesz go do usunięcia niepustego katalogu, ale odpowiednią opcję z np. OpenBSD” s find nie (ani nie usunie niepustego katalogu).

Większość systemów Linux, niezależnie od dystrybucji, używa tych samych narzędzi coreutils i findutils (warianty takie jak oczywiście busybox istnieje). Aby użyć zupełnie innego zestawu implementacji narzędzi, musiałbyś przejść na jeden z systemów BSD typu open source lub na macOS, Solaris, AIX lub inny komercyjny Unix.


1 GNU find dodaje ./ na początku do nazw ścieżek, gdy używasz -execdir podczas niektóre inne implementacje nie „t.

Komentarze

  • I -print0 i -direxec i -delete i … ;-). Opcje separatora zerowego dostępne w narzędziach GNU są szczególnie wygodne.
  • @StephenKitt Ale rzadko potrzebne 🙂
  • dobrze, z wyjątkiem sytuacji, gdy piszemy tutaj odpowiedzi spoza POSIX ;-). (Lub skrypty, które muszą działać gdziekolwiek .)
  • Głównym problemem związanym z dokumentacją GNU jest to, że próbuje ona pozwolić ludziom używać niestandardowych aliasów do metod POSIX i tym samym powodować powiązane skrypty do tworzenia blokady dostawcy.
  • @StephenKitt -print0 jest również dostępny na * bsd i solaris; ale na solaris xargs -0 nie ' nie działa, więc gxargs -0 (z ).

Odpowiedź

Co ludzie często mówią ponieważ Linux jest lepiej określany jako GNU / Linux: Linux plus GNU. Dlatego narzędzia, których używasz, to prawdopodobnie GNU.

  • Linux: jądro, jest używane w systemach GNU / Linux, Android i wielu innych.
  • GNU: an system operacyjny, często używany z jądrem Linuksa, ale może być również używany z BSD, Hurd, Cygwin (biblioteka DLL dla Microsoft Windows, udaje jądro), WSL (podsystem Windows dla Linuksa: GNU bez Linuksa, włączony Microsoft Windows), HPUX, Solaris, Dec Athena i wiele innych.

Dlatego prawdopodobnie używasz GNU find.

GNU to projekt, który write, Bezpłatna (bezpłatna jak wolność, a nie cena) wersja całego systemu Unix, w tym narzędzi takich jak find, projekt GNU nie martwi się o zgodność z POSIX: będzie zgodny tam, gdzie ma to sens, ale także wprowadzi ulepszenia.

Zakładasz również, że istnieje tylko jeden find jest błędny.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *