Despre Linux

  • Facebook
  • Twitter
  • LinkedIn
  • Acasă
  • Linux
    • Comenzi Linux
    • Tutoriale
  • Kubernetes
  • RHCSA
    • Exerciții RHCSA
    • SELinux
    • Permisiuni
  • General
    • Open source
  • Contact

Cum se caută fișiere din terminal în Linux

2 octombrie 2016 By Bobses 18 comentarii

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ât find. Î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 comanda updatedb 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'
$

Comenzi Linux pentru localizarea fișierelor: find, locate, whereis, which, type

Partajează asta:

  • Dă clic pentru a partaja pe Facebook(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe LinkedIn(Se deschide într-o fereastră nouă)
  • Dă clic pentru a partaja pe Twitter(Se deschide într-o fereastră nouă)

Similare

Din categoria: Comenzi Linux Etichete: cautare, comenzi Linux, fisiere, linie de comanda, linux, localizare fisiere, terminal

Comentarii

  1. Marius a zis

    7 noiembrie 2016 la ora 21:13

    Mulțumesc, docfetcher este ceea ce căutam!

    Răspunde
    • Bobses a zis

      7 noiembrie 2016 la ora 21:25

      Cu plăcere. 😉

      Răspunde
  2. Marius a zis

    6 noiembrie 2016 la ora 21:54

    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.

    Răspunde
    • Bobses a zis

      7 noiembrie 2016 la ora 7:07

      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.

      Răspunde
      • Marius a zis

        7 noiembrie 2016 la ora 10:57

        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.

        Răspunde
        • Bobses a zis

          7 noiembrie 2016 la ora 14:49

          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.

          Răspunde
  3. Cipri a zis

    3 octombrie 2016 la ora 18:00

    Perfect pentru începători ca mine. Urmăresc blog-ul tău cu mare interes! Felicitări

    Răspunde
    • Bobses a zis

      3 octombrie 2016 la ora 18:05

      Mulțumesc! 🙂

      Răspunde
  4. Donald Carol a zis

    3 octombrie 2016 la ora 11:43

    Sal. Cum ai facut sa iti apara acel terminal personalizat, cu Arch linux?

    Răspunde
    • Bobses a zis

      3 octombrie 2016 la ora 11:46

      Salut
      Pentru terminal am aplicația Terminator, iar pentru informațiile de sistem folosesc screenfetch.

      Răspunde
      • Donald Carol a zis

        4 octombrie 2016 la ora 8:24

        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....

        Răspunde
        • Bobses a zis

          4 octombrie 2016 la ora 9:37

          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.

          Răspunde
        • Bobses a zis

          4 octombrie 2016 la ora 20:58

          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.

          Răspunde
          • Donald Carol a zis

            5 octombrie 2016 la ora 8:31

            Mersi pentru raspunsuri si pentru timpul acordat!
            Ajutorarea celorlalti neasteptind nicio rasplata este o practica de Bodhisattva! 🙂

          • Bobses a zis

            5 octombrie 2016 la ora 8:52

            Cu plăcere.
            Voi atinge Nirvana! 🙂

  5. Cătălin a zis

    3 octombrie 2016 la ora 9:11

    locate este preferata mea.. restul nu prea le folosesc, sau aproape deloc.

    Răspunde
    • Bobses a zis

      3 octombrie 2016 la ora 10:08

      Și a mea.

      Răspunde

Trackbacks

  1. Cum se pot șterge fișiere mai vechi de x zile în Linux | Lumea lui Bobses spune:
    23 noiembrie 2016 la 21:04

    […] este, de fapt, o comandă find cu câteva opțiuni […]

    Răspunde

Lasă un răspuns Anulează răspunsul

Acest site folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Copyright © 2023 · Bobses

Administrează consimțămintele pentru cookie-uri
Pentru a oferi cea mai bună experiență, folosim tehnologii, cum ar fi cookie-uri, pentru a stoca și/sau accesa informațiile despre dispozitive. Consimțământul pentru aceste tehnologii ne permite să procesăm date, cum ar fi comportamentul de navigare sau ID-uri unice pe acest site. Dacă nu îți dai consimțământul sau îți retragi consimțământul dat poate avea afecte negative asupra unor anumite funcționalități și funcții.
Funcționale Mereu activ
Stocarea tehnică sau accesul sunt strict necesare în scopul legitim de a permite utilizarea unui anumit serviciu cerut în mod explicit de către un abonat sau un utilizator sau în scopul exclusiv de a executa transmiterea unei comunicări printr-o rețea de comunicații electronice.
Preferințe
Stocarea tehnică sau accesul este necesară în scop legitim pentru stocarea preferințelor care nu sunt cerute de abonat sau utilizator.
Statistici
Stocarea tehnică sau accesul care sunt utilizate exclusiv în scopuri statistice. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
Stocarea tehnică sau accesul sunt necesare pentru a crea profiluri de utilizator pentru a trimite publicitate sau pentru a urmări utilizatorul pe un site web sau pe mai multe site-uri web în scopuri de marketing similare.
Administrează opțiunile Administrează serviciile Administrează vânzătorii Citește mai multe despre aceste scopuri
Vizualizează preferințele
{title} {title} {title}