Localizarea fișierelor în Linux poate fi făcută de oricine folosind un mediu grafic și managerul de fișiere dedicat: Caja, Nautilus, Thunar...
Dar probabil cea mai rapidă (dacă nu și cea mai ușoară metodă) este prin intermediul terminalului, folosind comenzi de localizare a fișierelor din sistem: find, locate, whereis, which, type.
Comanda find
Utilitarul find
implementează abordarea prin forță brută de găsire a fișierelor. Comanda caută fișierele prin arborele de directoare, verificând numele fișierelor, data când au fost create, localizând, în acest fel, fișierele care îndeplinesc un anumit criteriu. Din cauza acestei metode de operare, comanda find
este destul de lentă, dar foarte flexibilă și cu mari șanse de reușită (în cazul în care fișierele căutate există, bineînțeles).
Sintaxa comenzii find
:
find [cale...] [expresie...]
Se pot specifica una sau mai multe căi în care comanda find
să opereze. Programul de căutare va fi restricționat doar la căile indicate. Opțiunea [expresie...] specifică criteriul după care vrem să căutăm.
Căutarea după numele fișierului folosind expresia -name model,
unde model
definește criteriul de căutare. De exemplu, vreau să caut imaginea .iso a Ultimate Boot CD pe care o am în Downloads și îmi amintesc doar 4 caractere din numele său (voi folosi metacaracterul *):
$ find Downloads -name "ubcd*"
Downloads/ubcd535.iso
$
Dacă vreau să caut în directorul curent fișierele care au in numele lor textul fisier (caracterul punct .
îi spune comenzii find
să caute în directorul curent):
$ find . -name "fisier*"
./fisier.txt
./fisier2.txt
./fisier.text
./fisier1.txt
$
Un exemplu de căutare prin toate directoarele sistemului a fișierelor care au extensia .pdf:
$ sudo find / -name *.pdf
Căutarea după permisiuni. Dacă vrem să căutăm fișiere care au anumite permisiuni, vom folosi expresia -perm mod
, unde opțiunea mod poate fi în formă simbolică sau octală. Comanda d emai jos caută în directorul curent toate fișierele care au permisiunea 640:
$ find . -perm 640
./.local/share/Trash/files/out0001.pdf
./.local/share/Trash/files/out0002.pdf
./.gksu.lock
$
Putem căuta după dimensiunea fișierului (expresia -size mărime
), după fișierele care aparțin unui anumit grup (cu expresia -gid GID
), după fișierele unui anumit utilizator (cu expresia -uid UID
se caută după UID; cu expresia
-user name
se caută după numele de utilizator).
Un exemplu de căutare în directorul Downloads a unui fișier mai mic de 5MB și mai mare de 2 MB:
$ find Downloads -size -5M -and -size +2M
Mai multe expresii cu care se pot completa criteriile de localizare a fișierelor în Linux pot fi aflate citind manualul: man find
.
Comanda locate
Comanda locate
funcționează aproximativ la fel ca find
pentru a găsi un fișier după numele său, dar diferă în două puncte importante:
- instrumentul
locate
este mai puțin sofisticat decâtfind
. În mod normal, se folosește pentru a căuta doar după numele unui fișier. Programul returnează toate fișierele care conțin șirul de caractere specificat. De exemplu, când căutăm după pacman,locate
ne va returna toate fișierele și directoarele care au în numele lor șirul de caractere pacman; - pentru localizarea fișierelor, comanda
locate
caută într-o bază de date. Cele mai multe distribuții Linux includ un job cron pentru actualizarea acestei baze de date. Din această cauză,locate
poate să nu găsească fișierele recente sau poate să returneze nume de fișiere care nu mai există. Oricum, se poate folosi comandaupdatedb
pentru a îndeplini această sarcină în orice moment (updatedb are fișierul de configurare în /etc/updatedb.conf).
Deoarece locate
funcționează cu o bază de date, este mult mai rapidă decât find
.
Un exemplu de căutare a fișierului .iso Ultimate Boot CD:
$ locate ubcd
/home/bobses/.local/share/icons/hicolor/48x48/apps/multisystem-ubcd.png
/home/bobses/.local/share/icons/hicolor/48x48/apps/multisystem-ubcd4win.png
/home/bobsesa/.cache/pacaur/multisystem/src/multisystem/pixmaps/multisystem-ubcd.png
/home/bobsesa/.cache/pacaur/multisystem/src/multisystem/pixmaps/multisystem-ubcd4win.png
/home/bobsesa/.local/share/icons/hicolor/48x48/apps/multisystem-ubcd.png
/home/bobsesa/.local/share/icons/hicolor/48x48/apps/multisystem-ubcd4win.png
/home/bobsesa/Downloads/ubcd535.iso
/usr/local/share/multisystem/pixmaps/multisystem-ubcd.png
/usr/local/share/multisystem/pixmaps/multisystem-ubcd4win.png
$
În Arch Linux, pentru a beneficia de comanda locate
, trebuie să instalăm pachetul mlocate:
sudo pacman -S mlocate
Comanda whereis
Această comandă de localizare a fișierelor caută doar într-un număr restrâns de directoare, cum ar fi directoarele pentru fișiere binare, directoarele pentru biblioteci, directoarele paginilor man.
Comanda whereis
nu caută în directoarele utilizatorilor și nici în majoritatea locurilor care pot fi accesate doar cu find
ori locate
.
Această comandă întoarce ca rezultate numele de fișiere care încep cu ceea ce am scris ca fiind criteriul de căutare, chiar dacă acele nume de fișiere au anumite extensii.
Pentru a folosi comanda whereis
, scriem numele programului pe care vrem să-l găsim; comanda de mai jos ne arată atât executabilul ls, cât și pagina man a comenzii ls:
$ whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1p.gz /usr/share/man/man1/ls.1.gz
$
Comanda which
O altă comandă pentru localizarea fișierelor în Linux este which
. Comanda which este foarte slabă: putem obține, cu ajutorul ei, calea către executabilele care pot fi rulate în terminal. Întoarce numai primul rezultat găsit.
$ which mv
/usr/sbin/mv
$
Se pot afișa toate rezultatele (nu numai prima găsită) dacă folosim opțiunea -a
:
$ which mv -a
/usr/sbin/mv
/sbin/mv
/bin/mv
/usr/bin/mv
$
Comanda type
Această comandă nu este un comandă de căutare în adevăratul sens al cuvântului. Ea ne arată modul în care o anumită comandă este interpretată, de exemplu comandă integrată în shell, comandă externă sau alias.
Exemple de comenzi integrate în shell:
$ type type
type is a shell builtin
$ type cd
cd is a shell builtin
$
Exemplu de comandă externă:
$ type cat
cat is /usr/sbin/cat
$
Pentru a găsi comenzile duplicate (unele comenzi, deși sunt integrate în shell, sunt și externe), folosim opțiunea -a
:
$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$
Exemplu de alias (în cazul unui alias este afișată comanda echivalentă):
$ type ls
ls is aliased to `ls --color=auto'
$
Marius a zis
Mulțumesc, docfetcher este ceea ce căutam!
Bobses a zis
Cu plăcere. 😉
Marius a zis
Te rog sa-mi spui cum pot sa caut dupa un cuvant aflat intr-un fisier text, am folosit catfish cu search file contents bifat dar nu merge. Folosesc arch +xfce4 momentan.
Bobses a zis
Folosești comanda grep. Sintaxa sa de bază este:
grep cuvânt_expresie_căutată nume_fișier
Dacă vrei să-ți afișeze și numărul liniei din fișier unde se află ceea ce cauți:
grep -n cuvânt_expresie_căutată nume_fișier
Voi scrie un tutorial și despre folosirea comenzii grep.
Marius a zis
Multumesc, cred ca m-am exprimat eu putin gresit si nu s-a inteles exact ce vreau asa ca o sa incerc sa fiu cat mai clar. Am o multime de fisire word salvate sub diferite nume si stiu ca intr-un fisier word am undeva in cuprinsul textului cuvantul "tastatura". Ceea ce doresc e sa-mi gasesca fisierul word care are in cuprinsul textului cuvantul "tastatura" si daca e si gui ar fi minunat, de aia ziceam mai sus de catfish.
Multumesc.
Bobses a zis
Ai spus că e vorba de "fișiere text"... Așa e, grep nu funcționează pe .doc. Pentru .doc îți trebuie altceva. Poți să încerci cu antiword pentru CLI sau DocFletcher pentru GUI.
N-am lucrat cu niciunul, dar se pare că e ceea ce cauți.
Te rog să scrii aici dacă ai reuşit.
Cipri a zis
Perfect pentru începători ca mine. Urmăresc blog-ul tău cu mare interes! Felicitări
Bobses a zis
Mulțumesc! 🙂
Donald Carol a zis
Sal. Cum ai facut sa iti apara acel terminal personalizat, cu Arch linux?
Bobses a zis
Salut
Pentru terminal am aplicația Terminator, iar pentru informațiile de sistem folosesc screenfetch.
Donald Carol a zis
Am instalat screenfetch si Terminator. Am pus la Terminator la Propierties sa ruleze screenfetch la pornire dar chestia e ca nu imi mai apare prompterul, nu mai pot scrie nicio comanda.../ La terminalul simplu am reusit modificind direct fisierul .bshrc....
Bobses a zis
Din câte îmi amintesc, eu am modifica numai fișierul .bashrc, nemaipunând nimic la Terminator.
Acum nu sunt acasă că să-ți spun exact.
Bobses a zis
Așa e cum am spus: linia cu screenfetch e doar în .bashrc. Ar trebui să se încarce automat bash-ul indiferente de terminalul pe care îl folosești.
Donald Carol a zis
Mersi pentru raspunsuri si pentru timpul acordat!
Ajutorarea celorlalti neasteptind nicio rasplata este o practica de Bodhisattva! 🙂
Bobses a zis
Cu plăcere.
Voi atinge Nirvana! 🙂
Cătălin a zis
locate este preferata mea.. restul nu prea le folosesc, sau aproape deloc.
Bobses a zis
Și a mea.