Zvažte některé běžné * nix systémy (řekněme Debian, CentOS, Arch a Kali).

Vždy used find; Nepamatuji si použití GNU find, ale z jednoho příkladu jsem viděl, že jsem předpokládal, že syntaxe GNU find může být jednodušší (i když může povolit méně operací).

Mám dvě otázky:

  1. Je find výchozí obslužný program „najít nebo provozovat“ v běžných systémech nebo budou systémy dodávány s oběma find a GNU find?

  2. Byl GNU find mělo být jednodušší než find ?

Komentáře

  • v systému Linux jste vždy používali GNU find, pokud ne ' je velkým uživatelem find na busyboxu nebo androidu 😉 Na systémech jiných než linux se GNU find obvykle jmenuje gfind.
  • Vyzkoušejte find --version😉
  • Tyto systémy, o kterých ' hovoříte, jsou systémy GNU, pro většinu GNU / Linux, ačkoli Debian je k dispozici pro několik dalších jader jako studna. Není tedy divu, že implementací find na těchto systémech je GNU find. '.

Odpověď

Obslužné programy GNU často implementují standard POSIX a poté ho také rozšiřují o další funkce pro větší pohodlí (a na druhé straně to snížilo přenositelnost napříč Unices). Aspekt přenositelnosti je důvod, proč na tomto webu někdy uvidíte odpovědi nebo komentáře, které jsou velmi opatrné, když upozorníte, když se předpokládá nástroj GNU nebo nějaká jiná konkrétní implementace nástroje.

Pokud používáte systém Linux systému, velmi pravděpodobně použijete implementaci GNU find a pravděpodobně byste neměli další find nainstalován. V systémech jiných než Linux byste měli nativní find a možnost nainstalovat také GNU find (který by se nejčastěji instaloval pod name gfind nebo méně často gnufind).

Stejně jako u většiny nástrojů GNU, GNU find implementuje a rozšiřuje standardní find specifikaci . Není to tedy „jednodušší“, ale místo toho pravděpodobně složitější, aby to bylo pohodlnější, a bylo by o něco snazší provádět s ním určité složité úkoly než s přísně standardním find .

Rozšířené implementace find často například implementují -maxdepth a -mindepth predikáty, které standard nezmiňuje, a GNU find zejména také -printf pro tisk nalezených cest pomocí různé možnosti formátování (standardní find nemá -printf) a predikáty pro porovnávání regulárních výrazů různých druhů na cestách, stejně jako řada dalších nestandardních predikátů, z nichž některé se také nacházejí v jiných implementacích find (možná s tak trochu odlišnou sémantikou, jako je -execdir whi ch funguje mírně odlišně v závislosti na tom, co find se používá 1 ).

-delete použitý v odpovědi, na kterou odkazujete, je nestandardní, ale implementován GNU find stejně jako v find na některých jiných systémech jiných než Linux. GNU find „s -delete si bude stěžovat, pokud jej použijete k odstranění neprázdného adresáře, ale odpovídající možnost např. S OpenBSD find nebude (nevymaže neprázdný adresář).

Většina systémů Linux, bez ohledu na distribuci, používá stejnou sadu nástrojů coreutils a findutils (varianty jako busybox samozřejmě existuje). Chcete-li použít úplně jinou sadu implementací nástrojů, budete muset přejít na některý z otevřených systémů BSD nebo na MacOS, Solaris, AIX nebo na nějaký jiný komerční Unix.


1 GNU find předchází ./ před názvy cest při použití -execdir při některé další implementace „t.

Komentáře

  • And -print0 a -direxec a -delete a … ;-). Možnosti nulového oddělovače dostupné v nástrojích GNU jsou obzvláště výhodné.
  • @StephenKitt Ale málokdy je potřeba 🙂
  • správně, kromě případů, kdy sem píšete odpovědi jiné než POSIX ;-). (Nebo skripty, které musí fungovat kdekoli .)
  • Hlavním problémem dokumentace GNU je, že se pokouší umožnit lidem používat nestandardní aliasy k metodám POSIX a způsobit tak související skripty pro vytvoření zámku dodavatele.
  • @StephenKitt -print0 je také k dispozici na * bsd a solaris; ale na solaris xargs -0 nefunguje ', takže gxargs -0 (z /usr/bin/sfw).

Odpověď

Na co lidé často odkazují protože Linux se lépe označuje jako GNU / Linux: Linux plus GNU. Nástroje, které používáte, jsou proto pravděpodobně GNU.

  • Linux: jádro, používá se v GNU / Linux, Android a mnoha dalších systémech.
  • GNU: an operační systém, často používaný s linuxovým jádrem, ale lze jej použít také s BSD, Hurd, Cygwin (DLL pro Windows od Microsoftu, vydává se za jádro), WSL (Windows Subsystém pro Linux: GNU bez Linuxu, na Microsoft Windows), HPUX, Solaris, Dec Athena a mnoho dalších.

Proto pravděpodobně používáte GNU find.

GNU je projekt k re- napište bezplatnou (zdarma jako ve svobodě, ne jako v ceně) verzi celého Unixu, včetně nástrojů jako find projekt GNU si nedělá starosti s dodržováním POSIX: Bude vyhovovat tam, kde to dává smysl, ale také vylepší.

Rovněž předpokládáte, že existuje pouze jeden další find se mýlí.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *