Tänk på några vanliga * nix-system (säg Debian, CentOS, Arch och Kali).

Jag har alltid använt find; Jag kommer inte ihåg att använda GNU-sökning, men från ett exempel Jag har sett att jag antog att syntaxen för GNU-sökningen kan vara enklare (även om kanske tillåter färre operationer).

Jag har två frågor:

  1. Är find standardverktyget ”hitta eller hantera” i vanliga system eller kommer system att levereras med båda find och GNU find?

  2. Var GNU find avsedd att vara enklare att find ?

Kommentarer

  • du har alltid använt GNU-sökning på Linux, såvida du inte ' är en stor användare av find på upptagenbox eller android 😉 På icke-Linux-system heter GNU find vanligtvis gfind.
  • Försök find --version😉
  • De system som du ' hänvisar till är GNU-system, GNU / Linux för de flesta, men Debian är tillgängligt för andra några andra kärnor som väl. Så det är ' inte förvånande att find implementeringen på dessa system är GNU find.

Svar

GNU-verktyg implementerar ofta POSIX-standarden och utökar den också med extra funktionalitet för ökad bekvämlighet (och, som baksidan av det, minskade bärbarheten över enheter). Portabilitetsaspekten är anledningen till att du någon gång kommer att se svar eller kommentarer på den här webbplatsen som är mycket noga med att påpeka när ett GNU-verktyg eller någon annan specifik implementering av ett verktyg antas.

Om du är på en Linux skulle du mycket troligen använda GNU-implementeringen av find, och du skulle förmodligen inte ha någon annan find installerat. På icke-Linux-system skulle du ha en inbyggd find och möjlighet att också installera GNU find (som oftast skulle installeras under namn gfind eller, mindre ofta, gnufind).

Som med de flesta GNU-verktyg, GNU find implementerar och utökar standardspecifikationen find . Det är därför inte ”enklare” utan istället utan tvekan mer komplicerat för att vara bekvämare, och det skulle vara något lättare att göra vissa komplexa uppgifter med det än med en strikt standardkompatibel find .

Utökade implementeringar av find implementerar ofta till exempel -maxdepth och -mindepth predikat som standarden inte nämner, och i synnerhet GNU find har också -printf för att skriva ut de hittade sökvägarna med en mängd olika formateringsmöjligheter (standarden find har inte -printf) och förutsägelser för att göra regelbundna uttrycksmatchningar av olika slag på sökvägar, liksom ett antal andra icke-standardiserade predikat, varav några också finns i andra implementeringar av find (möjligen med någonsin så lite annorlunda semantik, som -execdir whi ch fungerar lite annorlunda beroende på vad find används 1 ).

-delete predikat, som används i svaret som du länkar till, är inte standard, men implementeras av GNU find samt i find på vissa andra icke-Linux-system. GNU find ”s -delete kommer att klaga om du använder den för att radera en icke-tom katalog, men motsvarande alternativ med t.ex. OpenBSD” s find kommer inte (inte heller tar bort den icke-tomma katalogen).

De flesta Linux-system, oavsett distribution, använder samma coreutils och findutils toolset (varianter som upptagenbox finns, uppenbarligen). För att använda en helt annan uppsättning verktygsimplementeringar måste du flytta till ett av BSD-system med öppen källkod eller till macOS, Solaris, AIX eller någon annan kommersiell Unix.


1 GNU find förlägger ./ till söknamn när du använder -execdir medan några andra implementeringar gör inte det.

Kommentarer

  • Och -print0 och -direxec och -delete, och … ;-). Nollavgränsningsalternativen som finns i GNU-verktyg är särskilt praktiska.
  • @StephenKitt Men sällan behövs 🙂
  • rätt, förutom när man skriver icke-POSIX-svar här ;-). (Eller skript som behöver fungera var som helst .)
  • Huvudproblemet med GNU-dokumentationen är att det försöker låta människor använda icke-standardalias till POSIX-metoder och därmed orsaka relaterade skript för att skapa ett leverantörslås.
  • @StephenKitt -print0 finns också på * bsd och solaris; men på solaris xargs -0 fungerar inte ' så att gxargs -0 (från /usr/bin/sfw) bör användas istället.

Svar

Vad folk ofta hänvisar till eftersom Linux kallas bättre GNU / Linux: Linux plus GNU. Därför är de verktyg du använder förmodligen GNU.

  • Linux: en kärna, den används i GNU / Linux, Android och många andra system.
  • GNU: an operativsystem, som ofta används med Linux-kärnan, men kan också användas med BSD, Hurd, Cygwin (en DLL för Microsofts Windows, det låtsas vara en kärna), WSL (Windows Subsystem för Linux: GNU utan Linux, på Microsofts Windows), HPUX, Solaris, Dec Athena och många andra.

Därför använder du förmodligen GNU-sökning.

GNU är ett projekt för att skriv, en Gratis (gratis som i frihet, inte som i pris) version av hela Unix, inklusive verktyg som find, GNU-projektet oroar sig inte för POSIX-efterlevnad: Det kommer att följa där det är vettigt, men kommer också att göra förbättringar.

Du antar också att det bara finns en annan find är fel.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *