Comanda Linux find este un instrument puternic care permite administratorilor de sistem să localizeze și să gestioneze fișiere și directoare pe baza unei game largi de criterii de căutare. Poate găsi directoare și fișiere după nume, tip sau extensie, dimensiune, permisiuni etc.
Pe lângă localizarea fișierelor și directoarelor, combinarea comenzii find cu altele vă permite să luați măsuri asupra rezultatelor. Adăugarea opțiunii -exec permite administratorilor de sistem să execute comenzi externe și să efectueze acțiuni precum copierea, mutarea, ștergerea sau modificarea permisiunilor fișierelor care corespund criteriilor specificate, cum ar fi dimensiunea, numele etc.
În acest articol, vom începe prin a explica comenzile de bază Linux find cu exemple. Aceasta vă va arăta cum să găsiți fișiere și directoare. Vă vom arăta apoi cum să utilizați opțiunea -exec pentru a acționa asupra fișierelor sau directoarelor în funcție de dimensiunea, permisiunile, etc.
Sintaxa generală pentru comanda find este
find {path} {name -of-file or dir-to-search} {action-to-take}
Unde,
- calea specifică directorul.
- name-of file sau dir-to-search : numele fișierului sau directorului de căutat
- acțiune de luat: cum ar fi copierea, ștergerea, mutarea etc.
În acest tutorial, vom explica cum să localizați fișierele și directoarele care se potrivesc cu modelele specificate. Vom vedea, de asemenea, cum să efectuăm acțiuni asupra fișierelor sau directoarelor pe care le localizează comanda find. Ghidul se bazează pe Ubuntu, dar este aplicabil la majoritatea distribuțiilor și versiunilor Linux.
Cuprins
Găsiți fișiere și directoare
Găsiți anumite fișiere după nume sau extensie
Pentru a căuta un anumit fișier, executați următoarea comandă de la rădăcină (/). Comanda conține numele exact pentru fișierul pe care îl căutați.
find . -name file22.txt
Ieșire
./test/file22.txt ./sales/file22.txt
Vă rugăm să rețineți că rezultatele includ calea. Acest lucru este important dacă nu cunoașteți directorul în care se află fișierul sau când acesta se află în mai multe locuri.
De asemenea, puteți căuta fișierul într-un alt director în timp ce încă vă aflați în locația curentă. În acest caz, trebuie să furnizați calea pentru directorul în care doriți să căutați.
find ./test -name file22.txt
Căutați anumite fișiere într-un alt director
În cazul nostru, le vom căuta pe toate cele care încep cu fișierul cu litere în directorul de testare.
find ./test -name file*
Ieșire
./test/file22.txt ./test/file30.doc ./test/file1.txt ./test/file5,doc
Căutați fișiere după extensie
Pentru a găsi un fișier în Linux cu o anumită extensie, adăugați-l la comandă.
find . -name *.txt
Ieșire
./test/subtest/subfil.txt ./test/file22.txt ./test/file1.txt ./home1/files32.txt ./home2/file22.txt ./qa/tags.txt
Găsiți fișiere și directoare după nume
Utilizați comanda de mai jos pentru a căuta fișiere și directoare care încep cu literele qa. În computerul nostru, avem fișierele qatree.txt și qa.txt, precum și un director cu numele qa.
Dacă rulăm comanda;
find ./ -name "qa*"
Returnează următoarea ieșire
./test/qatree.pdf ./test/qa.txt ./home/qa
Comanda returnează atât fișierele, cât și directoarele care corespund criteriilor de căutare. Pentru a găsi numai fișiere sau directoare, trebuie să specificați acest lucru în comandă.
Găsiți numai fișiere sau directoare
Numai pentru fișiere, utilizați comutatorul de tip f.
Numai fișiere
find ./ -type f -name "qa*"
Ieșire
./test/qatree.pdf ./test/qa.txt
Numai directoare
Adăugați opțiunea de tip d pentru a localiza numai directoare.
find ./ -type d -name "qa*"
Ieșire
./home/qa
Comandă de căutare care nu ține seama de majuscule
Toate căutările cu comutatorul -name sunt sensibile la majuscule și nu vor da rezultate cu majuscule. Pentru a obține toate cazurile, utilizați opțiunea -iname.
find ./ -iname "qa*"
Ieșire
./test/qatree.pdf ./test/qa.txt ./test/QAtest.txt ./home/qa
Căutați un fișier din mai multe directoare
Pentru a găsi fișierele în diferite directoare, adăugați căile acestora în comandă. În cazul nostru, vom verifica în directoarele de testare și numerice.
find ./test ./numeric -name file22.txt -type f
Ieșire
./test/file22.txt /root/numeric/file22.txt
Găsiți mai multe fișiere cu extensii diferite din toate directoarele
Puteți utiliza comanda find pentru a localiza mai multe fișiere care partajează diferite extensii, cum ar fi *.doc, *.txt *.pdf etc. Acest lucru se poate face separat, câte o extensie la un moment dat, sau folosind o singură comandă care include toate extensiile dorite.
găsi . -type f ( -nume „*.txt” -o -nume „*.pdf” -o -nume „*.doc” )
ieșire
./test/subtest/subfil.txt ./test/qatree.pdf ./test/file22.txt ./test/qa.txt ./test/file30.doc ./books/acro.pdf ./data1/FILE22.txt ./docs/files32.txt
Găsiți fișiere care conțin un anumit text
Uneori, doriți să accesați un fișier care conține un anumit text, dar nu vă puteți aminti numele sau locația acestuia. Această comandă vă permite să găsiți toate fișierele care conțin textul țintă.
Pentru a căuta toate fișierele care conțin cuvântul hiperconvergență”, folosește;
find / -type f -exec grep -l -i "hyperconvergence" {} ;
Ieșire
/root/numeric/hci /root/HCIP
Opțiunea –i permite comenzii să ignore cazurile și va găsi textul indiferent dacă este scris cu majuscule sau nu, adică hiperconvergență, hiperconvergență etc.
Pentru a căuta fișierele într-un anumit director, pur și simplu adăugați-le la comandă
find ./numeric -type f -exec grep -l -i "hyperconvergence" {} ;
Ieșire
./numeric/hci
Explorați mai multe exemple de comandă grep.
Găsiți fișiere și directoare în funcție de dimensiune
Puteți găsi toate fișierele sau directoarele care sunt mai mici, egale sau mai mari decât o anumită dimensiune, într-un anumit interval sau goale. Utilizați formatul de dimensiune adecvat, în funcție de tipul de fișiere sau directoare pe care le căutați.
Opțiunile de dimensiune includ;
c – octeți
k – kiloocteți
M – Megaocteți
G – Gigabytes
Găsiți fișiere de o anumită dimensiune – egală cu 30 MB
Pentru a căuta, găsiți toate fișierele de 30 MB
find / -size 30M
Găsiți fișiere mai mari decât o dimensiune specificată
find -size +2M
Ieșire
. /Downloads/ubuntu18043.iso ./.cache/pip/http/6/e/3/8/3/6e38383f41850c3e5705d48116bc52f81b92a80500f414305057 7a9c
Găsiți fișiere mai mici de 10 MB în directorul curent
find . -type f -size -10M
Găsiți fișiere cu dimensiuni între 100-200 MB
Când căutați fișiere într-un interval specific, cum ar fi între 100 și 200 MB
find / -size +100M -size -200M
Căutați directoare mai mari de 20 kb
găsi / -type d -size +20k
Găsiți fișiere și directoare goale.
Fișiere
găsiți ./ -tip f -dimensiunea 0
sau
find ./ -type f –empty
Directoare
find ./ -type d –empty
Găsiți fișiere după vârstă sau timp de modificare
Găsiți fișiere mai vechi de n zile
find /path/ -type f -name '*.txt' -mtime +8
-mtime +8 va căuta fișiere txt care sunt mai vechi de 8 zile.
După data modificării
Aceasta va căuta fișiere modificate în ultimele 17 ore
find . -mtime -17 -type f
Caută directoare modificate în ultimele 10 zile
find . -mtime -10 -type d
Găsiți fișiere pe baza accesului sau modificării
Găsiți fișiere pe baza datei sau orei accesate. Acest lucru vă permite să vedeți fișierele care au fost sau nu au fost accesate într-o perioadă specificată.
Pentru a vedea fișierele care nu au fost accesate în ultimele 10 zile în directorul principal.
find /home -atime +10
Fișiere accesate cu exact 10 zile în urmă
find /home -atime 10
Accesat în ultimele 10 zile
find /home -atime -10
Găsiți fișiere modificate în ultimele n zile
De asemenea, puteți căuta fișierele din directorul /home modificate în ultimele 10 zile folosind comanda;
find /home -mtime -10
Găsiți fișiere modificate într-o anumită perioadă.
De exemplu, toate fișierele modificate între 6 și 15 zile în urmă în directorul principal.
find /home -type f -mtime +6 -mtime -15
Fișiere și directoare accesate în ultimele 10 minute
Pentru a găsi fișierele accesate în ultimele 10 minute, utilizați opțiunea -amin.
find . -amin -10 -type f
Ieșire
./.bash_history ./[email protected]:~#
Directoare accesate în ultimele 10 minute
find . -amin -10 -type d
Găsiți fișiere care se potrivesc cu anumite permisiuni
Sintaxă
$ find -perm mode
Unde modul este permisiunea care este fie numerică, cum ar fi 644, 655, 700, 777 etc., fie litere precum u=x, a=r+x etc.
Puteți specifica modul în următoarele trei moduri diferite.
Găsiți fișiere cu permisiunea 777
find -perm 777
Ieșire
./file1
Găsiți fișiere cu cel puțin 766
găsi -perm -766
Ieșire
./file2 ./file1
Comanda caută toate fișierele în care
- Proprietarul fișierului are permisiuni de citire/scriere/execuție.
- Grupul are permisiuni de citire/scriere
- Alții au permisiunea de citire/scriere
Ca atare, returnează două fișiere care îndeplinesc acest criteriu – fișier1 și fișier2. Fișierele nu trebuie să aibă permisiunile exacte 766 și pot avea altele suplimentare cât timp, dar trebuie să aibă cel puțin permisiunile specificate.
Găsiți fișiere care pot fi scrise de proprietar
Vom folosi acum „/” pentru a căuta fișiere care pot fi scrise fie de proprietarul lor, fie de grup sau de alții.
find -perm /222 . ./file2 ./file3 ./file1
Cele de mai sus caută fișiere care pot fi scrise fie de proprietar, fie de grup.
Aceasta returnează fișierele care pot fi scrise de oricare, dar nu neapărat de ambele. Pentru a vedea fișierele, în care ambele au permisiuni de scriere, utilizați prefixul –.
find -perm -220
Ieșire
./file2 ./file1
Găsiți fișiere deținute de un utilizator
Găsiți toate fișierele deținute de Jack
find /home -user jack
Ieșire
/home/jack /home/jack/examples.desktop /home/jack/.gnupg /home/jack/.gnupg/private-keys-v1.d /home/jack/ans.cgi
Găsiți anumite fișiere deținute de un utilizator
Găsiți toate fișierele text deținute de Jack
find /home -user jack -iname "*.txt"
Ieșire
/home/jack/docs/file32.txt
Găsiți și enumerați fișierele și directoarele împreună cu permisiunile acestora
find -name "*.conf" | ls -l
Ieșire
total 120 drwxr-xr-x 2 root root 4096 Dec 31 13:19 backup2 drwxr-xr-x 2 root root 4096 Jan 4 11:57 Desktop drwxr-xr-x 2 root root 4096 Dec 31 11:50 Documents drwxr-xr-x 2 root root 4096 Dec 31 12:27 Downloads -rw-r--r-- 1 root root 0 Jan 4 12:02 file22.doc drwxr-xr-x 2 root root 4096 Jan 4 12:14 file23 -rw-r--r-- 1 root root 0 Jan 4 12:23 file23.txt
Găsiți și acționați în funcție de rezultate
În această secțiune, vom analiza cum puteți acționa asupra fișierelor care se potrivesc cu modelul specificat în comanda find.
Găsiți fișiere și modificați permisiunile
Găsiți și modificați permisiunile anumitor tipuri de fișiere. În cazul nostru, vom lucra cu fișiere PHP cu permisiuni diferite, așa cum se arată mai jos.
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rw-rw-r-- 1 jack jack 0 Jan 3 14:11 vary.php
Vom căuta acum toate fișierele PHP (mai sus) și le vom înlocui permisiunile cu 755
find ver -name "*.php" -type f -exec chmod 755 {} ;
Comanda caută fișiere PHP în directorul ver și apoi setează permisiunea lor la 755 (rwxr-xr-x)
Rezultate
[email protected]:~/ver$ ls -la total 8 drwxrwxr-x 2 jack jack 4096 Jan 3 14:11 . drwxr-xr-x 8 jack jack 4096 Jan 3 14:05 .. -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 ans.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 base.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 query.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 qust.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:06 text.php -rwxr-xr-x 1 jack jack 0 Jan 3 14:11 vary.php
Găsiți și modificați permisiunile pentru fișiere și directoare
Găsiți fișiere cu 644 de permisiuni și modificați-le pentru a avea 655 de permisiuni
find . -type f -perm 644 -exec chmod 655 {} ;
De asemenea, puteți căuta directoare cu permisiuni 644 și le puteți înlocui cu 755.
find . -type d -perm 644
Ieșire
./docs
Dosarul de documente are 644 de permisiuni
drwxrwxr-x 2 jack jack 4096 Jan 3 12:45 docs
Pentru a-l seta la 755, rulăm
find . -type d -perm 644 -exec chmod 755 {} ;
Acum putem verifica din nou pentru a vedea ce anume 755
find . -type d -perm 755
Ieșire
.
./docs
De sus putem vedea că directoarele rădăcină și docs au permisiunile 755.
Comanda Ls –la oferă următoarele detalii
drwxr-xr-x 2 jack jack 4096 Jan 3 12:45 docs
Găsiți și copiați fișiere sau directoare
Găsiți și copiați un anumit fișier într-un director
Comanda de mai jos va găsi fișierul file22.txt și îl va copia în directorul ~/tmp/images.
find -iname file22.txt -exec cp {} ~/tmp/images ;
Găsiți și copiați un tip de fișiere într-un director
Pentru a găsi fișiere precum imagini cu extensia jpg în directorul curent și a le copia într-o locație diferită, cum ar fi un folder de imagini, utilizați;
find -iname '*.jpg' -exec cp {} ~/tmp/images ;
Aceasta va găsi și copia toate fișierele jpg în folderul ~/tmp/images.
Găsiți și copiați un fișier în mai multe directoare
Găsiți și copiați un singur în mai multe directoare.
find ~/tmp/dir1/ ~/tmp/dir2/ $HOME/3/ -maxdepth 0 -exec cp ~/numeric/hci {} ;
Acesta va găsi fișierul fișierul hci și îl va copia în cele trei directoare ale /tmp/dir1/ /tmp/dir2/ și $HOME/3/
Găsiți și mutați fișiere într-un alt director
Pentru a muta un fișier cunoscut dintr-un director în altul. Pentru a muta fișierul universal.php;
find ~/folder/ -type f -name universal.php -exec mv {} ~/numeric/ ;
Căutați și mutați fișiere cu o anumită extensie într-un folder diferit
find ~/numeric/ -type f -name '*.php' -exec mv {} ~/folder/ ;
Găsiți anumite fișiere și mutați-vă într-un anumit folder diferit
find -type f -name uni*.* -exec mv {} ~/unifiles/ ;
Comanda caută toate fișierele cu nume care încep cu uni și care au orice extensie. Apoi le mută în directorul /unifiles/
Găsiți și mutați fișiere în funcție de vârstă
Găsiți și mutați fișierele mai vechi decât zilele specificate într-o altă locație, cum ar fi arhiva.
find /path/ -type f -name '*.pdf' -mtime +20 -exec mv {} /backup1/ ;
Aceasta va căuta fișiere pdf mai vechi de 20 de zile și le va muta în directorul backup1.
Găsiți și ștergeți fișiere și directoare
Sintaxa pentru găsirea și ștergerea fișierelor sau directoarelor din directorul curent este
găsi . -type f -name „fișier de șters” -exec rm -f {} ; pentru a șterge numai fișiere sau
găsi . -type d -name „dir-to-delete” -exec rm -rf {} ; pentru a șterge numai directoare
Găsiți și ștergeți numai anumite fișiere
Pentru a găsi și șterge fișiere care încep cu til, utilizați;
find . -type f -name "til*" -exec rm {} ;
Pentru a găsi și șterge directoare care încep cu til
find . -type d -name "til*" -exec rm {} ;
Eliminați atât fișierele, cât și directoarele
find . -name "til*" -exec rm -rf {} ;
Acest lucru va elimina atât fișierele, cât și directoarele care încep cu literele til.
Ștergeți prin extensie
Mai jos este cum puteți localiza și șterge toate fișierele txt din directorul curent. Înlocuiți txt-ul cu o altă extensie, cum ar fi bak, pdf sau orice alta pe care doriți să o eliminați.
find . -type f -name "*.txt" -exec rm -f {} ;
În cazul în care doriți ca sistemul să vă solicite să confirmați înainte de a șterge fiecare fișier, adăugați opțiunea -i ca mai jos.
find . -type f -name "*.txt" -exec rm -i {} ;
Ieșire
rm: remove regular empty file './File22.txt'? y rm: remove regular empty file './file22.txt'? y rm: remove regular empty file './file23.txt'?
În mod implicit, -rm nu va elimina directoarele și trebuie să utilizați opțiunea –r pentru a asigura o eliminare recursivă. Acest lucru asigură ștergerea directoarelor goale și a celor care conțin fișiere. Opțiunea -f forțează eliminarea și este utilizată atât pentru fișiere, cât și pentru directoare.
Găsiți și ștergeți fișierele mai vechi de n zile
Găsiți și ștergeți fișierele de rezervă mai vechi de 20 de zile din directorul curent.
find . -type f -name '*.bak' -mtime +20 -exec rm {} ;
Aceasta va șterge toate fișierele .bak mai vechi de 20 de zile.
Găsiți și ștergeți numai directoare
Pentru a șterge un director numit dir22
find . -type d -name dir22 -exec rm -rf {} ;
Asigurați-vă că potriviți majusculele numelui directorului sau utilizați opțiunea -iname.
find . -type d -iname Dir22 -exec rm -rf {} ;
Elimină atât Dir22, cât și dir22
Pentru a confirma înainte de ștergere, utilizați opțiunea -i.
find . -type d -iname Dir22 -exec rm -rf -i {} ;
Ieșire
rm: eliminați directorul „./Dir22”? n
rm: eliminați directorul „./dir22”? y
În cazul nostru, am tastat n pentru directorul Dir22 care nu va fi șters și y pentru dir22 care va fi acum eliminat.
Găsiți și eliminați fișierele goale
Puteți utiliza oricare dintre următoarele comenzi pentru a localiza fișierele goale și pentru a le șterge automat.
find ./ -type f -size 0 -exec rm -f {} ;
sau
găsi ./ -tip f -size 0 | xargs rm -f
sau
găsi ./ -type f -size 0 –delete
Găsiți și eliminați directoarele goale
Pentru a elimina directoarele goale vom folosi opțiunea d.
find ./ -type d -empty -exec rmdir {} ;
O altă alternativă este să folosiți ștergeți în loc de eliminați.
find ./ -type d -empty -delete
Vă rugăm să rețineți că ștergerea fișierelor de sistem sau critice de pe computer poate deteriora sistemul de operare sau aplicațiile sau poate duce la pierderea datelor dvs. importante.
Pentru a evita ștergerile accidentale, este cea mai bună practică să utilizați un cont de utilizator non-root. De asemenea, asigurați-vă că ștergeți fișierele corecte care nu sunt utile și că aveți o copie de rezervă a tuturor fișierelor de date pentru orice eventualitate.
Ce urmeaza?
Continuați și încercați comenzile Linux find de mai sus în laboratorul dvs. sau în mediul NON PRODUCTION. Vedeți dacă puteți folosi unele pentru a automatiza curățarea sistemului de fișiere cu Crontab. Și, pentru a stăpâni Linux, verifică asta curs online.