Considera alcuni sistemi * nix comuni (ad esempio Debian, CentOS, Arch e Kali).

Io sempre usato find; Non ricordo di aver usato GNU find, ma da un esempio che ho “visto” presumo che la sintassi di GNU find potrebbe essere più semplice (sebbene potrebbe consentire meno operazioni).

Ho due domande:

  1. find è lutilità “trova or-and operate” predefinita nei sistemi comuni o i sistemi verranno forniti con entrambi find e GNU find?

  2. Era GNU find intendeva essere più semplice da find ?

Commenti

  • hai sempre usato GNU find su Linux, a meno che tu non ' è un grande utente di find su busybox o android 😉 Sui sistemi non Linux, GNU find si chiama solitamente gfind.
  • Prova find --version😉
  • Quei sistemi a cui ' ti riferisci sono sistemi GNU, GNU / Linux per la maggior parte, sebbene Debian sia disponibile per altri pochi altri kernel come bene. Quindi ' non sorprende che find implementazione su questi sistemi sia GNU find.

Risposta

Le utilità GNU spesso implementano lo standard POSIX e poi lo estendono con funzionalità extra per una maggiore comodità (e, come rovescio della medaglia, la portabilità ridotta tra gli Unix). Laspetto della portabilità è il motivo per cui a volte vedrai risposte o commenti su questo sito che sono molto attenti a sottolineare quando si presume unutilità GNU o qualche altra implementazione specifica di unutilità.

Se sei su Linux sistema, probabilmente utilizzeresti molto limplementazione GNU di find e probabilmente non avresti un altro find installato. Su sistemi non Linux, avresti un find nativo e la possibilità di installare anche GNU find (che molto spesso viene installato sotto il name gfind o, meno spesso, gnufind).

Come con la maggior parte delle utilità GNU, GNU find implementa ed estende la find specifica standard. Pertanto non è “più semplice” ma piuttosto più complesso per essere più conveniente, e sarebbe un po più facile svolgere alcune attività complesse con esso che con un find strettamente conforme agli standard .

Implementazioni estese di find spesso, ad esempio, implementano -maxdepth e -mindepth predicati che lo standard non menziona, e GNU find in particolare ha anche -printf per stampare i nomi di percorso trovati utilizzando una varietà di possibilità di formattazione (lo standard find non ha -printf) e predicati per eseguire corrispondenze di espressioni regolari di vario tipo sui nomi di percorso, così come una serie di altri predicati non standard, alcuni dei quali si trovano anche in altre implementazioni di find (possibilmente con semantica leggermente diversa, come -execdir whi ch funziona in modo leggermente diverso a seconda di cosa find viene utilizzato 1 ).

Il -delete predicato, utilizzato nella risposta a cui ci si collega, non è standard, ma implementato da GNU find e nel find su altri sistemi non Linux. GNU find “s -delete si lamenterà se lo usi per eliminare una directory non vuota, ma lopzione corrispondente con ad esempio OpenBSD” s find non lo farà (nessuno dei due eliminerà la directory non vuota).

La maggior parte dei sistemi Linux, indipendentemente dalla distribuzione, usa lo stesso set di strumenti coreutils e findutils (varianti come busybox esiste, ovviamente). Per utilizzare un set completamente diverso di implementazioni degli strumenti, dovresti passare a uno dei sistemi BSD open source o a macOS, Solaris, AIX o qualche altro Unix commerciale.


1 GNU find antepone ./ ai nomi di percorso quando si utilizza -execdir mentre alcune altre implementazioni non “t.

Commenti

  • E -print0 e -direxec e -delete e … ;-). Le opzioni del separatore nullo disponibili negli strumenti GNU sono particolarmente convenienti.
  • @StephenKitt Ma raramente necessario 🙂
  • giusto, tranne quando si scrivono risposte non POSIX qui ;-). (O script che devono funzionare ovunque .)
  • Il problema principale con la documentazione GNU è che cerca di consentire alle persone di utilizzare alias non standard per metodi POSIX e quindi causare il script correlati per creare un blocco del fornitore.
  • @StephenKitt -print0 è disponibile anche su * bsd e solaris; ma su solaris xargs -0 ' non funziona, quindi gxargs -0 (da /usr/bin/sfw) dovrebbe essere utilizzato al suo posto.

Risposta

Ciò a cui le persone si riferiscono spesso poiché Linux è meglio indicato come GNU / Linux: Linux plus GNU. Quindi gli strumenti che stai usando sono probabilmente GNU.

  • Linux: un kernel, è usato in GNU / Linux, Android e molti altri sistemi.
  • GNU: un sistema operativo, spesso utilizzato con il kernel Linux, ma può essere utilizzato anche con BSD, Hurd, Cygwin (una DLL per Windows di Microsoft, finge di essere un kernel), WSL (Sottosistema Windows per Linux: GNU senza Linux, su Microsoft “s Windows), HPUX, Solaris, Dec Athena e molti altri.

Perciò probabilmente stai usando GNU find.

GNU è un progetto da ri- scrivi, una versione gratuita (gratuita come in libertà, non come nel prezzo) di tutto Unix, inclusi strumenti come find, il progetto GNU non si preoccupa della conformità POSIX: si conformerà dove ha senso, ma apporterà anche miglioramenti.

Inoltre presumi che ci sia solo un altro find è sbagliato.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *