Vurder noen vanlige * nix-systemer (si Debian, CentOS, Arch og Kali).

Jeg har alltid brukt find; Jeg husker ikke å bruke GNU-funn, men fra ett eksempel Jeg har sett at jeg antok at syntaksen til GNU-funn kan være enklere (skjønt kan tillate færre operasjoner).

Jeg har to spørsmål:

  1. Er find standardverktøyet «finn eller bruk» i vanlige systemer eller vil systemer komme med begge deler find og GNU find?

  2. Var GNU find ment å være enklere å find ?

Kommentarer

  • du har alltid brukt GNU find på Linux, med mindre du ' er en stor bruker av find på busybox eller android 😉 På ikke-linux-systemer får GNU find vanligvis navnet gfind.
  • Prøv find --version😉
  • Disse systemene du ' refererer til er GNU-systemer, GNU / Linux for de fleste, selv om Debian er tilgjengelig for andre noen få andre kjerner som vi vil. Så det ' er ikke overraskende at find implementeringen på disse systemene er GNU find.

Svar

GNU-verktøy implementerer ofte POSIX-standarden, og utvider den også med ekstra funksjonalitet for ekstra bekvemmelighet (og som baksiden av det, redusert bærbarhet på tvers av enheter). Bærbarhetsaspektet er grunnen til at du en gang vil se svar eller kommentarer på dette nettstedet som er veldig nøye med å påpeke når et GNU-verktøy eller en annen spesifikk implementering av et verktøy antas.

Hvis du er på Linux system, vil du veldig sannsynligvis bruke GNU-implementeringen av find, og du vil sannsynligvis ikke ha en annen find installert. På ikke-Linux-systemer vil du ha en innfødt find og muligheten til å også installere GNU find (som oftest installeres under navn gfind eller sjeldnere gnufind).

Som med de fleste GNU-verktøy, GNU find implementerer og utvider standard find spesifikasjon . Det er derfor ikke «enklere», men i stedet uten tvil mer komplekst for å være mer praktisk, og det ville være noe lettere å gjøre visse komplekse oppgaver med det enn med en strengt standardkompatibel find .

Utvidede implementeringer av find ofte, for eksempel implementerer -maxdepth og -mindepth predikater som standarden ikke nevner, og spesielt GNU find har også -printf for å skrive ut de funnet stienavnene ved hjelp av en rekke formateringsmuligheter (standarden find har ikke -printf), og predikater for å gjøre regelmessige uttrykkstilpasning av forskjellige slag på stienavn, i tillegg til en rekke andre ikke-standard predikater, hvorav noen også finnes i andre implementeringer av find (muligens med stadig så litt forskjellige semantikk, som -execdir whi ch fungerer litt forskjellig avhengig av hva find blir brukt 1 ).

-delete predikat, brukt i svaret du lenker til, er ikke-standard, men implementert av GNU find så vel som i find på noen andre ikke-Linux-systemer. GNU find «s -delete vil klage hvis du bruker den til å slette en ikke-tom katalog, men det tilsvarende alternativet med f.eks OpenBSD» s find vil ikke (heller ikke slette den ikke-tomme katalogen).

De fleste Linux-systemer, uavhengig av distribusjon, bruker samme verktøysett for coreutils og findutils (varianter som busybox eksisterer, tydeligvis). For å bruke et helt annet sett med verktøyimplementeringer, må du flytte til et av BSD-systemene med åpen kildekode eller til macOS, Solaris, AIX eller annen kommersiell Unix.


1 GNU find forbereder ./ til banenavn når du bruker -execdir mens noen andre implementeringer gjør ikke det.

Kommentarer

  • Og -print0 og -direxec, og -delete, og … ;-). Nullseparatoralternativene som er tilgjengelige i GNU-verktøy er spesielt praktiske.
  • @StephenKitt Men sjelden nødvendig 🙂
  • riktig, bortsett fra når du skriver ikke-POSIX-svar her ;-). (Eller skript som må fungere hvor som helst .)
  • Hovedproblemet med GNU-dokumentasjonen er at den prøver å la folk bruke ikke-standardaliaser til POSIX-metoder og dermed forårsake relaterte skript for å opprette en leverandørlåsing.
  • @StephenKitt -print0 er også tilgjengelig på * bsd og solaris; men på solaris fungerer xargs -0 ', så gxargs -0 (fra /usr/bin/sfw) bør brukes i stedet.

Svar

Det folk ofte refererer til da Linux er bedre referert til som GNU / Linux: Linux pluss GNU. Derfor er verktøyene du bruker sannsynligvis GNU.

  • Linux: en kjerne, den brukes i GNU / Linux, Android og mange andre systemer.
  • GNU: en operativsystem, ofte brukt med Linux-kjernen, men kan også brukes med BSD, Hurd, Cygwin (en DLL for Microsofts Windows, den later til å være en kjerne), WSL (Windows Subsystem for Linux: GNU uten Linux, på Microsofts Windows), HPUX, Solaris, Dec Athena og mange andre.

Derfor bruker du sannsynligvis GNU find.

GNU er et prosjekt å gjenskape skriv, en Gratis (gratis som i frihet, ikke som i pris) versjon av hele Unix, inkludert verktøy som find, GNU-prosjektet bekymrer seg ikke for POSIX-overholdelse: Det vil overholde der det er fornuftig, men vil også gjøre forbedringer.

Du antar også at det bare er en annen find er feil.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *