Betrachten Sie einige gängige * nix-Systeme (z. B. Debian, CentOS, Arch und Kali).

Ich immer verwendet find; Ich kann mich nicht erinnern, GNU find verwendet zu haben, aber aus einem Beispiel habe ich gesehen, dass ich angenommen habe, dass die Syntax von GNU find einfacher ist (obwohl kann weniger Operationen zulassen).

Ich habe zwei Fragen:

  1. Ist find das Standarddienstprogramm „Suchen oder Bedienen“ in gängigen Systemen oder werden Systeme mit beiden find und GNU find?

  2. War GNU find beabsichtigte, einfacher zu machen als find ?

Kommentare

  • Sie haben immer GNU find unter Linux verwendet, es sei denn, Sie ' ist ein großer Benutzer von find auf Busybox oder Android 😉 Auf Nicht-Linux-Systemen wird GNU find normalerweise gfind.
  • Versuchen Sie find --version😉
  • Die Systeme, auf die Sie sich ' beziehen, sind GNU-Systeme, GNU / Linux für die meisten, obwohl Debian für einige andere Kernel verfügbar ist Gut. Daher ist es ' nicht überraschend, dass die find -Implementierung auf diesen Systemen GNU find ist.

Antwort

GNU-Dienstprogramme implementieren häufig den POSIX-Standard und erweitern ihn für zusätzlichen Komfort um zusätzliche Funktionen (und als Kehrseite davon verringerte Portabilität über Unices). Der Portabilitätsaspekt ist, warum Sie auf dieser Site manchmal Antworten oder Kommentare sehen, die sehr sorgfältig darauf hinweisen, wann ein GNU-Dienstprogramm oder eine andere spezifische Implementierung eines Dienstprogramms angenommen wird.

Wenn Sie unter Linux arbeiten System würden Sie sehr wahrscheinlich die GNU-Implementierung von find verwenden, und Sie würden wahrscheinlich kein anderes find installiert. Auf Nicht-Linux-Systemen hätten Sie eine native find und die Möglichkeit, auch GNU find zu installieren (die am häufigsten unter der installiert wird Name gfind oder seltener gnufind).

Wie bei den meisten GNU-Dienstprogrammen GNU find implementiert und erweitert die Standardspezifikation find . Es ist daher nicht „einfacher“, sondern wohl komplexer, um bequemer zu sein, und es wäre etwas einfacher, bestimmte komplexe Aufgaben damit zu erledigen, als mit einem streng standardkonformen find

Erweiterte Implementierungen von find implementieren beispielsweise häufig die -maxdepth und Prädikate, die der Standard nicht erwähnt, und insbesondere GNU find verfügt auch über -printf, um die gefundenen Pfadnamen mit auszudrucken Eine Vielzahl von Formatierungsmöglichkeiten (der Standard find verfügt nicht über -printf) und Prädikate für die Durchführung von Übereinstimmungen mit regulären Ausdrücken verschiedener Art für Pfadnamen. sowie eine Reihe anderer nicht standardmäßiger Prädikate, von denen einige auch in anderen Implementierungen von find zu finden sind (möglicherweise mit einer etwas anderen Semantik wie whi ch funktioniert etwas anders, je nachdem, was find verwendet wird 1 ).

Die -delete, das in der Antwort verwendet wird, auf die Sie verlinken, ist kein Standard, wird jedoch von GNU find sowie in find auf einigen anderen Nicht-Linux-Systemen. GNU find „s -delete beschwert sich, wenn Sie damit ein nicht leeres Verzeichnis löschen, aber die entsprechende Option mit z. B. OpenBSD“ s find wird dies nicht tun (und das nicht leere Verzeichnis wird auch nicht gelöscht).

Die meisten Linux-Systeme verwenden unabhängig von der Verteilung dieselben Coreutils und Findutils-Tools (Varianten wie Busybox existiert offensichtlich). Um einen völlig anderen Satz von Tool-Implementierungen zu verwenden, müssten Sie zu einem der Open-Source-BSD-Systeme oder zu macOS, Solaris, AIX oder einem anderen kommerziellen Unix wechseln.


1 GNU find stellt ./ Pfadnamen voran, wenn -execdir verwendet wird Einige andere Implementierungen tun dies nicht.

Kommentare

  • Und -print0 und -direxec und -delete und … ;-). Die in GNU-Tools verfügbaren Nulltrennoptionen sind besonders praktisch.
  • @StephenKitt Aber selten benötigt 🙂
  • richtig, außer wenn hier Nicht-POSIX-Antworten geschrieben werden ;-). (Oder Skripte, die überall funktionieren müssen.)
  • Das Hauptproblem bei der GNU-Dokumentation besteht darin, dass versucht wird, nicht standardmäßige Aliase für POSIX-Methoden zu verwenden und somit die Verwandte Skripte zum Erstellen einer Anbietersperre.
  • @StephenKitt -print0 ist auch für * bsd und solaris verfügbar. Aber unter Solaris xargs -0 funktioniert ' nicht, also gxargs -0 (von /usr/bin/sfw) sollte stattdessen verwendet werden.

Antwort

Worauf sich die Leute oft beziehen als Linux wird besser als GNU / Linux bezeichnet: Linux plus GNU. Daher sind die von Ihnen verwendeten Tools wahrscheinlich GNU.

  • Linux: Ein Kernel, der in GNU / Linux, Android und vielen anderen Systemen verwendet wird.
  • GNU: an Betriebssystem, das häufig mit dem Linux-Kernel verwendet wird, aber auch mit BSD, Hurd, Cygwin (eine DLL für Microsoft Windows, es gibt vor, ein Kernel zu sein), WSL (Windows-Subsystem für Linux: GNU ohne Linux) verwendet werden kann Microsoft Windows), HPUX, Solaris, Dec Athena und viele andere.

Daher verwenden Sie wahrscheinlich GNU find.

GNU ist ein Projekt, das neu erstellt werden muss Schreiben Sie eine kostenlose (kostenlos wie in Freiheit, nicht wie im Preis) Version von Unix, einschließlich Tools wie find, das GNU-Projekt kümmert sich nicht um die POSIX-Konformität: Es wird konform sein, wo es sinnvoll ist, aber auch Verbesserungen vornehmen.

Sie gehen auch davon aus, dass es nur eine andere gibt find ist falsch.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.