Luați în considerare câteva sisteme comune * nix (să zicem Debian, CentOS, Arch și Kali).
Întotdeauna folosit find
Nu-mi amintesc să folosesc GNU find, dar din un exemplu am văzut că am presupus că sintaxa GNU find ar putea fi mai simplă (deși ar putea să permită mai puține operații).
Am două întrebări:
-
Este
find
utilitarul implicit „găsiți și operați” în sistemele comune sau sistemele vor veni cu ambelefind
șiGNU find
? -
A fost
GNU find
destinat să fie mai simplu lafind
?
Comentarii
Răspuns
Utilitățile GNU implementează adesea standardul POSIX și apoi îl extind și cu funcționalitate suplimentară pentru un plus de confort (și, ca parte inversă, scăderea portabilității între Unici). Aspectul portabilității este motivul pentru care veți vedea cândva răspunsuri sau comentarii pe acest site, care sunt foarte atenți să indicați când se presupune un utilitar GNU sau o altă implementare specifică a unui utilitar.
Dacă sunteți pe un Linux sistem, foarte probabil că veți utiliza implementarea GNU a find
și probabil că nu ați avea un alt find
instalat. Pe sistemele non-Linux, veți avea un find
nativ și posibilitatea de a instala și GNU find
(care cel mai adesea s-ar instala sub nume gfind
sau, mai rar, gnufind
).
La fel ca în majoritatea utilităților GNU, GNU find
implementează și extinde specificația standard find
. Prin urmare, nu este „mai simplu”, ci, în schimb, este mai complex, pentru a fi mai convenabil și ar fi oarecum mai ușor să faci anumite sarcini complexe cu acesta decât cu un standard find
.
Implementări extinse ale find
deseori, de exemplu, implementează -maxdepth
și -mindepth
predicate pe care standardul nu le menționează și, în special, GNU find
are și -printf
pentru a imprima numele de cale găsite folosind o varietate de posibilități de formatare (standardul find
nu are -printf
) și predicate pentru efectuarea potrivirii expresiilor regulate de diferite tipuri pe nume de cale, precum și o serie de alte predicate nestandardizate, dintre care unele se găsesc și în alte implementări ale find
(posibil cu semantică atât de ușor diferită, cum ar fi -execdir
whi ch funcționează ușor diferit în funcție de ceea ce find
este utilizat 1 ).
-delete
predicat, utilizat în răspunsul la care faceți legătura, este non-standard, dar implementat de GNU find
, precum și în find
pe alte sisteme non-Linux. GNU find
„s -delete
se va plânge dacă îl utilizați pentru a șterge un director care nu este gol, dar opțiunea corespunzătoare cu, de exemplu, OpenBSD” s find
nu va (nici nu va șterge directorul care nu este gol).
Majoritatea sistemelor Linux, indiferent de distribuție, utilizează aceleași seturi de instrumente coreutils și findutils (variante precum busybox există, evident). Pentru a utiliza un set complet diferit de implementări de instrumente, va trebui să vă deplasați la unul dintre sistemele open source BSD sau la macOS, Solaris, AIX sau alt Unix comercial.
1 GNU find
preîntâmpină ./
cu nume de cale atunci când se utilizează -execdir
alte implementări nu fac „t.
Comentarii
- Și
-print0
și-direxec
și-delete
și … ;-). Opțiunile pentru separatorul nul disponibile în instrumentele GNU sunt deosebit de convenabile. - @StephenKitt Dar rar este necesar 🙂
- corect, cu excepția cazului în care scrieți răspunsuri non-POSIX aici ;-). (Sau scripturi care trebuie să funcționeze oriunde .)
- Principala problemă cu documentația GNU este că încearcă să permită oamenilor să utilizeze aliasuri non-standard la metodele POSIX și astfel să provoace scripturile aferente pentru a crea o blocare a furnizorului.
- @StephenKitt
-print0
este disponibil și pe * bsd și solaris; dar pe solarisxargs -0
nu funcționează ', decigxargs -0
(din/usr/bin/sfw
) ar trebui folosit în schimb.
Răspuns
La ce se referă adesea oamenii deoarece Linux este mai bine denumit GNU / Linux: Linux plus GNU. Prin urmare, instrumentele pe care le utilizați sunt probabil GNU.
- Linux: un kernel, este utilizat în GNU / Linux, Android și multe alte sisteme.
- GNU: un sistem de operare, adesea utilizat cu kernel-ul Linux, dar poate fi folosit și cu BSD, Hurd, Cygwin (un DLL pentru Windows-ul Microsoft, se pretinde a fi un kernel), WSL (Windows Subsystem for Linux: GNU without Linux, on Windows pentru Microsoft), HPUX, Solaris, Dec Athena și multe altele.
Prin urmare, probabil că utilizați GNU find.
GNU este un proiect pentru re- scrie, o versiune gratuită (gratuită ca în libertate, nu ca în preț) a Unixului, inclusiv instrumente precum find
, proiectul GNU nu își face griji cu privire la conformitatea POSIX: se va conforma acolo unde are sens, dar va aduce și îmbunătățiri.
De asemenea, presupuneți că există doar un alt find
este greșit.
find
pe busybox sau android 😉 Pe sistemele non-linux, căutarea GNU se numește de obiceigfind
.find --version
😉find
pe aceste sisteme este GNUfind
.