Skip to main content

Utilizarea comenzilor Linux și Unix găsiți

Linux Tutorial for Beginners: Introduction to Linux Operating System (Aprilie 2025)

Linux Tutorial for Beginners: Introduction to Linux Operating System (Aprilie 2025)
Anonim

Comanda Linux și Unix găsi execută o căutare pentru fișiere într-o ierarhie de directoare.

Sintaxă pentru găsi comanda:

găsi cale … expresie

Descriere

Această pagină manuală documentează versiunea GNU din găsi . Comanda găsi caută arborele de directoare înrădăcinat la fiecare nume de fișier dat, evaluând expresia dată de la stânga la dreapta, în conformitate cu regulile de prioritate (vezi secțiunea privind operatorii de mai jos), până când rezultatul este cunoscut; cu alte cuvinte, partea stângă este falsă și operații, adevărate pentru sau , moment în care găsi se trece la următorul nume de fișier.

Primul argument care începe cu:

  • -
  • ( sau),
  • !

este considerat începutul expresiei; orice argumente înainte de a fi căi de căutare, și orice argumente după el sunt restul expresiei. Dacă nu sunt date căi, se folosește directorul curent. Dacă nu se dă nici o expresie, expresia -imprimare este folosit.

găsi comanda iese la starea 0 dacă toate fișierele sunt procesate cu succes, mai mare de 0 dacă apar erori.

Expresii

Expresia este alcătuită din opțiuni (care afectează operația generală mai degrabă decât procesarea unui anumit fișier și întoarcerea întotdeauna adevărată), testele (care returnează o valoare adevărată sau falsă) și acțiunile (care au efecte secundare și returnează un adevărat sau valoare falsă), toate separate de operatori. Expresia -și se presupune că operatorul este omis. Dacă expresia nu conține alte acțiuni decât -prună uscată , atunci -imprimare este efectuată pe toate fișierele pentru care expresia este adevărată.

Opțiuni

Toate opțiunile se întorc întotdeauna la adevărat. Ele intotdeauna produc efecte, mai degraba decat sa fie procesate doar atunci cand se ajunge la locul lor in expresie. Prin urmare, pentru claritate, este mai bine să le plasați la începutul expresiei.

-daystart Măsurarea timpilor (pentru -amin, -atime, -cmin, -time, -min, și -mtime ) de la începutul zilei de astăzi, mai degrabă decât de acum 24 de ore.
-adâncime Procesați conținutul fiecărui director înainte de directorul propriu-zis.
-urma Dereference link-uri simbolice. presupune -noleaf .
-Ajutor sau --Ajutor Imprimați un sumar al utilizării liniei de comandă din găsi și ieșire.
-adancime maxima număr Coborâți la cel mai mare număr de niveluri (un număr întreg negativ) de directoare aflate sub argumentele liniei de comandă. Expresia -maxdept 0 înseamnă că aplică numai testele și acțiunile la argumentele liniei de comandă.
-mindepth număr Nu aplicați teste sau acțiuni la niveluri mai mici decât numărul (un număr întreg negativ). Expresia -mindepth 1 înseamnă procesul tuturor fișierelor, cu excepția argumentelor din linia de comandă.
-montură Nu coborâți directoare pe alte sisteme de fișiere. Un nume alternativ pentru -xdev , pentru compatibilitatea cu alte versiuni ale găsi .
-noleaf Nu optimizați presupunând că directoarele conțin mai puține subdirectoare decât numărul lor de link-uri grele. *
-versiune sau --versiune Imprimați găsi numărul versiunii și ieșirea.
-xdev Nu coborâți directoare pe alte sisteme de fișiere.

* Această opțiune este necesară atunci când căutați sisteme de fișiere care nu respectă convenția Unix-directoare, cum ar fi sistemele de fișiere CD-ROM sau MS-DOS sau punctele de montare a volumului AFS. Fiecare director dintr-un sistem de fișiere obișnuit Unix are cel puțin 2 link-uri tari: numele și codul său. (perioadă). În plus, subdirectoarele sale (dacă există) au fiecare. intrare legată de acel director.

Cand găsi examinează un director, după ce a afișat mai puține subdirectoare decât numărul de linkuri al directorului, știe că restul intrărilor din director sunt non-directoare ( frunze fișiere din arborele de directoare). Dacă este necesar să se examineze numai numele fișierelor, nu este nevoie să le stăpânești; aceasta oferă o creștere semnificativă a vitezei de căutare.

teste

Argumentele numerice pot fi specificate ca:

+ n Pentru mai mult decât n.
-N Pentru mai puțin de n.
n Exact n.
-amină n Fișierul a fost accesat ultima dată n minute în urmă.
-neu fișier Fișierul a fost accesat ultima dată mai recent decât fişier a fost modificată. -anagerul este afectat de -foloseste numai daca -sunt inainte de a-apare pe linia de comanda.
-atime n Fișierul a fost accesat ultima dată n * Acum 24 de ore.
-cmin n Starea fișierului a fost modificată ultima dată n minute în urmă.
-cnewer fișier Starea fișierului a fost ultima dată modificată mai recent decât modificarea fișierului.- cnewer este afectată de -urma doar dacă -urma vine înainte de -cnewer pe linia de comandă.
-cmp n Starea fișierului a fost modificată ultima dată n * Acum 24 de ore.
-gol Fișierul este gol și este fie un fișier obișnuit, fie un director.
-fals Întotdeauna fals.
-tip tip Fișierul se află într-un sistem de fișiere de tipul specificat. Tipurile de sisteme de fișiere valide variază între diferite versiuni de Unix; o listă incompletă a tipurilor de sisteme de fișiere acceptate pe o versiune de Unix sau alta este: ufs, 4.2, 4.3, nfs, tmp, mfs, S51K, S52K. Puteți utiliza -printf cu directiva% F pentru a vedea tipurile de sisteme de fișiere.
-Gid n ID-ul grupului numeric al fișierului este n .
-group gname Fișierul aparține grupului gname (permis grupului numeric permis).
-name model Cum ar fi -includ, dar meciul este insensibil pentru litere mici.
-inima model Ca -Nume , dar meciul este insensibil pentru litere mici. De exemplu, modelele FO * și F ?? se potrivesc cu numele fișierelor foo , FOO , foo , foo , etc.
-inum n Fișierul are numărul inode n .
-path model Ca -cale , dar meciul este insensibil pentru litere mici.
-regex model Ca -regex, dar meciul este insensibil pentru litere mici.
- link-uri n Fișierul are n link-uri.
-informa model Fișierul este o legătură simbolică al cărei conținut corespunde modelului de coajă. Metacaractele nu se tratează / sau . special.
-mmin n Datele fișierelor au fost modificate ultima dată n minute în urmă.
-m n Datele fișierelor au fost modificate ultima dată n * Acum 24 de ore.
-name model Baza de nume a fișierului (calea cu directorii eliminați) se potrivește cu modelul de coajă. Metacaractele (*, ?, și ) nu se potrivesc cu a . la începutul numelui de bază. Pentru a ignora un director și fișierele de sub el, utilizați -prună uscată ; a se vedea un exemplu în descrierea lui -cale .
-newer fișier Fișierul a fost modificat mai recent decât fişier . Expresia -newer este afectată de -urma doar dacă -urma vine înainte de -newer pe linia de comandă.
-nouser Niciun utilizator nu corespunde numelui de utilizator numeric al fișierului.
-nogroup Niciun grup nu corespunde ID-ului grupului numeric al fișierului.
-path model Numele fișierului se potrivește cu modelul coajă model . Metacaractele nu se tratează / sau . special; astfel încât, de exemplu,găsi . -path "./sr*sc va imprima o intrare pentru un director numit ./src/misc (dacă există). Pentru a ignora un întreg arbore de directoare, utilizați -prună uscată mai degrabă decât să verificați fiecare fișier din arbore. De exemplu, pentru a sări peste directorul src / emacs și toate fișierele și directoarele de sub acesta și pentru a tipări numele celorlalte fișiere găsite, procedați astfel:găsi . -path "./src/emacs" -prune -o -print
-perm mod Fișierele de permisiune ale fișierelor sunt exact Mod (octale sau simbolice). Modurile simbolice utilizează modul 0 ca punct de plecare.
-perm-mod Toate biții de permisiune Mod sunt setate pentru fișier.
-perm + mod Orice bit de permisiune Mod sunt setate pentru fișier.
-regex model Numele de fișier se potrivește cu expresia regulată model . Acesta este un meci pe întreaga cale, nu o căutare. De exemplu, pentru a potrivi un fișier numit ./fubar3, puteți utiliza expresia regulată .*bar. sau . * B. * 3, dar nu b. * r3.
-size n bckw Utilizarea fișierelor n unități de spațiu. Unitățile sunt blocuri de 512 octeți în mod prestabilit sau dacă urmează b n , octeți dacă c urmează n , kilobytes dacă urmează k n , sau 2-octeți dacă w urmează n . Dimensiunea nu contorizează blocuri indirecte, dar numără blocuri în fișiere rare care nu sunt alocate.
-Adevărat Întotdeauna adevărat.
- tip c Fișierul este de tip c :
b Block (tamponat) special
c Caracter (nebuferat) special
d Director
p Conducta numită (FIFO)
f Fișier normal
L Link-uri simbolice
s Priză
D ușă (Solaris)
-uid n ID-ul de utilizator numeric al fișierului este n .
-utilizat n Fișierul a fost accesat ultima dată n după ce statutul său a fost modificat ultima dată.
-utilizator Fișierul este proprietatea utilizatorului uname (permis de utilizator numeric permis).
-xtype c La fel ca -tip cu excepția cazului în care fișierul este o legătură simbolică. Pentru legăturile simbolice: dacă -urma nu a fost dat, adevărat dacă fișierul este o legătură la un fișier de tip c ; dacă -urma a fost dat, adevărat dacă c este l. Cu alte cuvinte, pentru legăturile simbolice, -xtype verifică tipul fișierului -tip nu verifică.

acţiuni

exec comanda ;

A executa comanda ; adevărat dacă statusul 0 este returnat. Toate argumentele următoaregăsi sunt considerate a fi argumente pentru comanda până când un argument constând în ";" este întâlnit. Șirul "{}" este înlocuit de numele curent al fișierului care este procesat oriunde apare în argumentele comenzii, nu doar în argumentele în care este singur, ca în unele versiuni alegăsi. Este posibil ca ambele construcții să fie scape (cu un "") sau cotate pentru a le proteja de expansiune de către coajă. Comanda este executată în directorul de pornire.

-fls fişier

Adevărat; cum ar fi -l, dar scrie la fişier cum ar fi -print.

-fprint fişier

Adevărat; imprimă numele fișierului complet în fișier fişier . Dacă fişier nu există atunci cândgăsi este rulat, este creat; dacă există, este trunchiată. Numele fișierelor "/ dev / stdout" și "/ dev / stderr" sunt tratate în mod special; se referă la ieșirea standard și, respectiv, la ieșirea de eroare standard.

-fprint0 fişier

Adevărat; cum ar fi -print0 dar scrie la fişier cum ar fi -print.

-fprintf fişier format

Adevărat; cum ar fi -printf, dar scrieți la fişier cum ar fi -print.

-O.K comanda ;

Ca -exec, dar întrebați mai întâi utilizatorul (pe intrarea standard); dacă răspunsul nu începe cu "y" sau "Y", nu executați comanda și returnați false.

-imprimare

Adevărat; imprimați numele complet al fișierului pe ieșirea standard, urmat de o linie nouă.

-print0

Adevărat; imprimați numele complet al fișierului pe ieșirea standard, urmat de un caracter nul.Acest lucru permite ca numele fișierelor care conțin linii noi să fie interpretate corect de către programele care proceseazăgăsi de ieșire.

-printf format

Adevărat; imprimare format la ieșirea standard, interpretând directivele "escapes" și "%". Lățimile câmpurilor și precizările pot fi specificate ca în cazul funcției `printf 'C. Spre deosebire de -print, -printf nu adauga o noua linie la sfarsitul sirului. Escapesele și directivele sunt:

A

Alarmă clopot.

b

Backspace.

c

Opriți imprimarea imediat din acest format și spălați ieșirea.

f

Feed feed.

n

Linie nouă.

r

Retur transport.

t

Fila orizontală.

v

Fila verticală.

\

Un backslash literal (` ').

NNN

Personajul al cărui cod ASCII este NNN (octal).

Un caracter "` "urmat de orice alt caracter este tratat ca un caracter obișnuit, astfel că ambele sunt imprimate.

%%

Un semn procentual literal.

%A

Ultima accesare a fișierului în formatul returnat de funcția C `ctime.

%A k

Ultima accesare a fișierului în formatul specificat de k , care este fie `@ ', fie o directivă pentru funcția C` strftime'. Valorile posibile pentru k sunt enumerate mai jos; unele dintre ele s-ar putea să nu fie disponibile în toate sistemele, din cauza diferențelor dintre `strftime 'dintre sisteme.

@

secunde de la 1 ianuarie 1970, 00:00 GMT.

Câmpuri de timp:

H

ora (00..23)

eu

ora (01..12)

k

ora (0..23)

L

ora (1..12)

M

minute (00..59)

p

localitatea AM sau PM

r

timp, 12 ore (hh: mm: ss AP M)

S

secundă (00..61)

T

timp, 24 de ore (hh: mm: ss)

X

localizarea timpului local (H: M: S)

Z

(de exemplu, EDT), sau nimic dacă nu poate fi determinată nicio fus orar

Câmpuri de date:

A

locație abreviată a zilei de sâmbătă (Sun..Sat)

A

localizarea întregului nume de săptămână, lungimea variabilă (duminică, sâmbătă)

b

locația abreviată a lunii (Jan..Dec)

B

localizarea întregii luni a lunii, lungimea variabilă (ianuarie - decembrie)

c

data și ora locației (Sat Nov 04 12:02:33 EST 1989)

d

ziua lunii (01..31)

D

data (mm / zi / an)

h

la fel ca b

j

ziua anului (001..366)

m

luna (01..12)

U

numărul de săptămâni al anului cu duminică în prima zi a săptămânii (00..53)

w

zi din săptămână (0..6)

W

numărul de săptămâni al anului cu luni în prima zi a săptămânii (00..53)

X

localizarea reprezentării locale (mm / zi / an)

y

ultimele două cifre ale anului (00..99)

Y

an (1970 …)

% b

Dimensiunea fișierului în blocuri de 512 octeți (rotunjit).

% c

Ultimul moment al modificării stării fișierului în format returnat de funcția C `ctime.

% C k

Ultimul moment al modificării stării fișierului în formatul specificat de k , care este la fel ca pentru% A.

% d

File de adâncime în arborele de directoare; 0 înseamnă că fișierul este un argument din linia de comandă.

% f

Numele fișierului cu toate directoarele șterse (numai ultimul element).

F%

Tipul sistemului de fișiere în care se află fișierul; această valoare poate fi utilizată pentru "fstype".

% g

Numele grupului de fișier sau ID-ul grupului numeric dacă grupul nu are nume.

% G

ID-ul grupului numeric al fișierului.

% h

Directorii principali ai numelui fișierului (cu excepția ultimului element).

% H

Argumentul liniei de comandă în care fișier a fost găsit.

% i

Numărul fișierului inode al fișierului (în zecimal).

% k

Dimensiunea fișierului în blocuri de 1K (rotunjit).

% l

Obiectul legăturii simbolice (șir gol dacă fișierul nu este o legătură simbolică).

% m

Fișiere de permisiune ale fișierelor (în octal).

% n

Numărul de linkuri dure pentru fișier.

% p

Numele fișierului.

% P

Numele fișierului cu numele argumentului din linia de comandă sub care a fost eliminat.

% s

Dimensiunea fișierului în octeți.

% t

Ultima modificare a fișierului în formatul returnat de funcția C `ctime.

% T k

Ultima modificare a fișierului în formatul specificat de k , care este la fel ca pentru% A.

% u

Numele de utilizator al fișierului sau ID-ul de utilizator numeric dacă utilizatorul nu are nume.

% U

ID-ul de utilizator numeric al fișierului.

Un caracter "%" urmat de orice alt caracter este aruncat (dar celălalt caracter este tipărit).

-prună uscată

Dacă -depth nu este dat, adevărat; nu coborâți directorul curent.Dacă este dată -depth, false; fara efect.

-Este

Adevărat; lista fișierul curent în format `ls -dils 'la ieșirea standard. Numărul blocurilor este de blocuri de 1K, cu excepția cazului în care variabila de mediu POSIXLY_CORRECT este setată, caz în care sunt utilizate blocuri de 512 octeți.

operatorii

Listate în ordinea descrescătoare a precedentei:

( expr )

Forța precedentă.

! expr

Adevărat dacă expr este falsă.

-nu expr

La fel ca ! expr .

expr1 expr2

Și (implicit); expr2 nu este evaluat dacă Expr1 este falsă.

Expr1 -A expr2

La fel ca expr1 expr2 .

Expr1 -și expr2

La fel ca expr1 expr2 .

Expr1 o- expr2

Sau; expr2 nu este evaluat dacă Expr1 este adevarat.

Expr1 -sau expr2

La fel ca Expr1 o- expr2 .

Expr1 , expr2

Listă; ambii Expr1 și expr2 sunt întotdeauna evaluate. Valoarea a Expr1 este aruncat; valoarea listei este valoarea lui expr2 .

Exemple

găsi / home-utilizator Joe

Găsiți fiecare fișier sub directorul / casa deținută de utilizatorul joe.

găsi / usr -name * stat

Găsiți toate fișierele din directorul / usr care se termină în ".stat".

găsi / var / spool -mtime +60

Găsiți fiecare fișier din directorul / var / spool modificat cu mai mult de 60 de zile în urmă.

găsi / tmp -name core -type f -print | xargs / bin / rm -f

Găsiți fișiere numitemiez în sau sub directorul/ tmp și ștergeți-le.Rețineți că acest lucru va funcționa incorect dacă există nume de fișiere care conțin linii noi, citate simple sau duble sau spații.

găsi / tmp -name core -type f -print0 | xargs -0 / bin / rm -f

Găsiți fișiere numitemiez în sau sub directorul/ tmp și să le ștergeți, procesând numele de fișiere astfel încât numele de fișiere sau directoare care conțin citate simple, duble, spații sau linii noi să fie gestionate corect.-Nume testul vine înainte de-tip pentru a evita apelulstat (2) pe fiecare fișier.

găsi . -type f -exec fișier '{}' ;

Rulează "fișierul" pe fiecare fișier din sau sub directorul curent. Observați că bretelele sunt închise în citate simple pentru a le proteja de interpretare ca punctuație a script-urilor. Valoarea virgulă este protejată în mod similar prin folosirea unei lunete, totuși ";" ar fi putut fi folosită și în acest caz.

găsi / (-perm -4000 -fprintf /root/suid.txt '% # m% u% p n' ), (-size + 100M -fprintf /root/big.txt '% -10s% p n' )

Traversați sistemul de fișiere o singură dată, listând fișierele și directoarele setuid/root/suid.txt și fișiere mari în/root/big.txt.

găsi $ HOME -mtime 0

Căutați fișiere în directorul dvs. de acasă care au fost modificate în ultimele douăzeci și patru de ore. Această comandă funcționează astfel, deoarece timpul de la ultima modificare a fișierului este împărțit la 24 de ore, iar restul este eliminat. Asta înseamnă că pentru a se potrivi-mtime

0, un fișier va trebui să aibă o modificare în trecut care este mai mică de 24 de ore în urmă.

găsi . -perm 664

Căutați fișierele care au permisiunea de citire și scriere pentru proprietar și grup, dar pe care ceilalți utilizatori le pot citi, dar nu le pot scrie. Fișierele care îndeplinesc aceste criterii, dar au setat alte setări de permisiuni (de exemplu, dacă cineva poate executa fișierul) nu vor fi potrivite.

găsi . -permă -664

Căutați fișierele care au permisiunea de citire și scriere pentru proprietar și grup și care alți utilizatori pot citi, indiferent de prezența oricăror biți de permisiune suplimentară (de exemplu bitul executabil). Acest lucru se va potrivi cu un fișier care are modul 0777, de exemplu.

găsi . -perm / 222

Căutați fișiere care pot fi inscripționate de cineva (proprietarul, grupul sau oricine altcineva).

găsi . -perm / 220 găsi . -perm / u + w, g + w găsi . -perm / u = w, g = w

Toate cele trei comenzi fac același lucru, dar prima folosește reprezentarea octalică a modului fișier, iar celelalte două utilizează forma simbolică. Aceste comenzi caută toate fișierele care pot fi scriute de proprietar sau de grupul lor. Fișierele nu trebuie să poată fi inscripționate atât de către proprietar, cât și de grup care să fie potrivite; fie va face.

găsi . -perm -220 găsi . -permul -g + w, u + w

Ambele comenzi fac același lucru; căutați fișiere care pot fi scriute atât de proprietarul lor, cât și de grupul acestora.

găsi . -permă -444 -perm / 222! -perm / 111 găsi . -permă -a + r -perm / a + w! -perm / a + x

Aceste două comenzi caută atât fișierele care pot fi citite pentru toată lumea (-perm -444 sau -perm -a + r), au cel puțin setul de biți de scriere (-perm / 222 sau -perm / a + w), dar nu sunt executabile pentru oricine (! -perm / 111 și / -perm / a + x respectiv)

Important: Folosește om comandă ( % om ) pentru a vedea cum se utilizează o comandă pe computerul dvs. particular.