Overweeg enkele veelvoorkomende * nix-systemen (bijvoorbeeld Debian, CentOS, Arch en Kali).

Ik altijd gebruikt find; Ik kan me niet herinneren dat ik GNU find heb gebruikt, maar uit een voorbeeld heb ik gezien dat ik aannam dat de syntaxis van GNU find eenvoudiger zou kunnen zijn (hoewel kan minder bewerkingen toestaan).

Ik heb twee vragen:

  1. Is find het standaard “zoek-en-werk” -hulpprogramma in veelgebruikte systemen of worden systemen geleverd met beide find en GNU find?

  2. Was GNU find bedoeld eenvoudiger te zijn naar find ?

Reacties

  • je hebt altijd GNU find op linux gebruikt, tenzij je ' zijn een grote gebruiker van find op busybox of android 😉 Op niet-linux-systemen wordt GNU-zoekopdracht meestal gfind.
  • Probeer find --version😉
  • De systemen waarnaar u ' verwijst zijn GNU-systemen, GNU / Linux voor de meeste, hoewel Debian beschikbaar is voor een paar andere kernels zoals goed. Het ' is dus niet verwonderlijk dat de find implementatie op die systemen GNU find is.

Answer

GNU-hulpprogrammas implementeren vaak de POSIX-standaard en breiden deze vervolgens uit met extra functionaliteit voor extra gemak (en, als de keerzijde daarvan, verminderde draagbaarheid tussen Unices). Het portabiliteitsaspect is waarom je soms antwoorden of commentaren op deze site zult zien die heel voorzichtig zijn om aan te geven wanneer een GNU-hulpprogramma of een andere specifieke implementatie van een hulpprogramma wordt verondersteld.

Als je een Linux-computer gebruikt. systeem, zou u zeer waarschijnlijk de GNU-implementatie van find gebruiken, en u zou waarschijnlijk geen andere find geïnstalleerd. Op niet-Linux-systemen zou je een native find hebben en de mogelijkheid om ook GNU find te installeren (die meestal onder de name gfind of, minder vaak, gnufind).

Zoals met de meeste GNU-hulpprogrammas, GNU find implementeert en breidt de standaard find specificatie uit. Het is daarom niet “eenvoudiger” maar in plaats daarvan aantoonbaar complexer om handiger te zijn, en het zou iets gemakkelijker zijn om bepaalde complexe taken ermee uit te voeren dan met een strikt standaard compliant find .

Uitgebreide implementaties van find implementeren bijvoorbeeld vaak de -maxdepth en -mindepth predikaten die de standaard niet vermeldt, en GNU find in het bijzonder heeft ook -printf om de gevonden padnamen af te drukken met een verscheidenheid aan opmaakmogelijkheden (de standaard find heeft geen -printf), en predicaten voor het doen van verschillende soorten reguliere expressies voor padnamen, evenals een aantal andere niet-standaard predikaten, waarvan sommige ook worden gevonden in andere implementaties van find (mogelijk met ooit zo iets andere semantiek, zoals -execdir whi ch werkt enigszins anders, afhankelijk van wat find wordt gebruikt 1 ).

De -delete predikaat, gebruikt in het antwoord waarnaar u linkt, is niet standaard, maar geïmplementeerd door GNU find evenals in het find op sommige andere niet-Linux-systemen. GNU find “s -delete zal klagen als je het gebruikt om een niet-lege directory te verwijderen, maar de corresponderende optie met bijvoorbeeld OpenBSD” s find zal niet (geen van beide zal de niet-lege map verwijderen).

De meeste Linux-systemen, ongeacht de distributie, gebruiken dezelfde coreutils en findutils toolset (varianten zoals busybox bestaat natuurlijk). Om een compleet andere set toolimplementaties te gebruiken, zou je moeten verhuizen naar een van de open source BSD-systemen of naar macOS, Solaris, AIX of een andere commerciële Unix.


1 GNU find voegt ./ toe aan padnamen bij gebruik van -execdir terwijl sommige andere implementaties “t.

Reacties

  • En -print0, en -direxec, en -delete, en … 😉 De opties voor null-scheidingstekens die beschikbaar zijn in GNU-tools zijn bijzonder handig.
  • @StephenKitt Maar zelden nodig 🙂
  • juist, behalve wanneer je hier niet-POSIX-antwoorden schrijft ;-). (Of scripts die overal moeten werken.)
  • Het grootste probleem met de GNU-documentatie is dat het mensen probeert niet-standaard aliassen voor POSIX-methoden te laten gebruiken en zo de gerelateerde scripts om een vendor lock in te creëren.
  • @StephenKitt -print0 is ook beschikbaar op * bsd en solaris; maar op solaris xargs -0 werkt ' niet, dus gxargs -0 (van /usr/bin/sfw) moet in plaats daarvan worden gebruikt.

Antwoord

Waar mensen vaak naar verwijzen omdat Linux beter GNU / Linux wordt genoemd: Linux plus GNU. Daarom zijn de tools die je gebruikt waarschijnlijk GNU.

  • Linux: een kernel, deze wordt gebruikt in GNU / Linux, Android en vele andere systemen.
  • GNU: een besturingssysteem, vaak gebruikt met de Linux-kernel, maar kan ook worden gebruikt met BSD, Hurd, Cygwin (een DLL voor Microsoft Windows, het doet zich voor als een kernel), WSL (Windows Subsystem voor Linux: GNU zonder Linux, op Microsoft Windows), HPUX, Solaris, Dec Athena en vele anderen.

Daarom gebruikt u waarschijnlijk GNU find.

GNU is een project om opnieuw write, een Gratis (gratis zoals in vrijheid, niet zoals in prijs) versie van heel Unix, inclusief tools zoals find, het GNU-project maakt zich geen zorgen over POSIX-conformiteit: het zal voldoen waar het zinvol is, maar het zal ook verbeteringen aanbrengen.

Je neemt ook aan dat er maar één andere find is verkeerd.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *