Terminalul este bun pentru a rula sarcini, iar una dintre sarcinile care cred că sunt mai rapide de făcut în terminal în loc de interfața grafică cu utilizatorul este căutarea bazată pe terminal. Folosind mai multe comenzi Linux, puteți găsi ușor și rapid orice fără să căutați fișiere și foldere într-un manager de fișiere GUI. Să explorăm cum puteți căuta în terminalul Linux și găsiți tot ce căutați.
Cuprins
- Căutarea textului în fișiere cu grep
- grep vs ripgrep: Care este diferența și pe care să utilizați
- Găsirea fișierelor și directoarelor cu find
- Căutare interactivă cu fzf
- Filtrare inteligentă a fișierelor cu ack
Căutarea textului în fișiere cu grep
Dacă înveți doar o singură comandă de căutare, fă-o grep. Numele înseamnă Global Regular Expression Print, iar munca sa este simplă: căutați în interiorul fișierelor anumite modele de text. Este instalat implicit pe majoritatea sistemelor Linux (și macOS).
Sintaxa este simplă, trebuie doar să utilizați grep împreună cu modelul de căutare dorit. De exemplu, să presupunem că încercați să găsiți fiecare linie care menționează eroare într-un fișier. Puteți face asta cu:
grep "error" fileserver.logTipărește fiecare linie care conține cuvântul eroare. Dacă doriți să ignore majuscule (deci se potrivesc cu Eroare, EROARE etc.), trebuie doar să adăugați-isteag astfel:
grep -i "error" fileserver.logDacă nu sunteți sigur unde se află fișierul și doriți să căutați într-un întreg director, utilizați-ropțiune (recursivă):
grep -r "TODO"Aceasta trece prin fiecare fișier din folderul curent și toate subfolderele, căutând cuvântul „TODO”.
Uneori doriți să vedeți totul, cu excepția termenului dvs. de căutare. The-vflag inversează căutarea, arătând numai liniile care nu se potrivesc. Acest lucru este fantastic pentru filtrarea zgomotului din fișierele jurnal.
grep -v "DEBUG" app.logAcest lucru îmi arată tot ceea ce nu este un mesaj de depanare.
Combinarea grep cu alte comenzi
De asemenea, puteți combina grep cu alte comenzi. De exemplu, puteți conducta (folosind|simbol) ieșirea unei comenzi direct în alta. Acest lucru vă permite să conectați comenzile împreună. Să presupunem că doriți să vedeți toate procesele SSH rulând pe sistemul dvs. Puteți enumera toate procesele și apoi puteți introduce acea listă gigantică în grep folosind acest lucru:
ps aux | grep "ssh"
Theps auxcomanda ar putea enumera 300 de procese, dargrepo filtrează până la unul sau doi la care îți pasă cu adevărat. Puteți folosi asta pentru orice.
grep acceptă și expresii regulate, pentru modele mai avansate. Puteți căuta lucruri precum orice linie care începe cu un număr sau adrese de e-mail sau numere de telefon într-un anumit format. De exemplu, pentru a găsi linii care încep cu un număr, utilizați aceasta:
grep "^[0-9]" file.txtCurba de învățare devine mai abruptă aici, dar profitul este enorm.
Vezi și:Android 16 QPR2 face terminalul Linux mult mai util cu acces extins la fișiere
grep vs ripgrep: Care este diferența și pe care să utilizați
Știți deja cât de util este grep pentru a căuta text în fișiere, dar există o alternativă mai rapidă și mai modernă numită ripgrep (rg). Funcționează aproape la fel ca grep, dar oferă performanțe mult mai bune și setări implicite mai convenabile.
Principala diferență este viteza. În timp ce grep procesează fișierele secvențial, ripgrep include optimizări (inclusiv multi-threading și omiterea fișierelor irelevante) care adesea îl fac mult mai rapid. La proiectele mari, o căutare care ar putea dura 30 de secunde grep se poate termina în mai puțin de una cu ripgrep. Este scris în Rust și optimizat pentru a gestiona eficient directoare mari.
Spre deosebire de grep, ripgrep nu este instalat implicit. Trebuie să îl instalați pe sistemul dvs. folosind managerul de pachete. De exemplu, pe Ubuntu/Debian, utilizați asta:
sudo apt install ripgrepOdată instalat, îl vei folosi aproape exact ca grep:
rg "TODO"
Această comandă caută toate fișierele din folderul curent și subfolderele acestuia. ripgrep omite automat fișierele ascunse, directoarele .git și fișierele binare, astfel încât să vedeți doar rezultate relevante. Afișează, de asemenea, numerele de linii și evidențieri colorate în mod implicit.
Pe scurt, ambele instrumente fac aceeași treabă, dar ripgrep este mai rapid și mai convenabil pentru utilizarea de zi cu zi, mai ales atunci când căutați proiecte mari. Cu toate acestea, grep rămâne util atunci când sunteți pe sisteme în care nu puteți instala software nou sau când aveți nevoie de un instrument care este disponibil peste tot în mod implicit.
Găsirea fișierelor și directoarelor cu find
În timp ce grep vă ajută să căutați în interiorul fișierelor, comanda find vă ajută să localizați fișierele și folderele în sine. Este instrumentul de utilizat atunci când știți numele sau tipul a ceea ce căutați, dar nu unde este stocat. Puteți căuta după nume, dimensiune, timp de modificare, permisiuni, tip de fișier, aproape orice atribut la care vă puteți gândi.
Sintaxa de bază arată astfel:
find /path -name "filename"Această comandă îi spune find să înceapă căutarea din calea dată și să caute fișiere care se potrivesc cu numele specificat. De exemplu, dacă încercați să găsiți un fișier de configurare lipsă, executați:
find /etc -name "config.json"Implicit,-nameeste sensibil la majuscule. Dacă nu sunteți sigur de scrierea cu majuscule, treceți la-inamepentru o căutare fără majuscule:
find . -iname "readme.md"Punctul (.) înseamnă începe în directorul curent.findpoate face mult mai mult decât căutări bazate pe nume. Puteți filtra rezultatele în funcție de momentul în care fișierele au fost modificate ultima dată, ceea ce este util atunci când curățați jurnalele sau copiile de rezervă. De exemplu, această comandă listează toate fișierele jurnal modificate în ultimele trei zile:
find /var/log -name "*.log" -mtime -3Asteriscul acționează ca un wildcard, potrivindu-se cu orice caractere. De asemenea, îl puteți folosi pentru a urmări fișiere mari care ar putea să vă umple spațiul pe disc.
Căutare interactivă cu fzf
fzf înseamnă fuzzy finderși este practic un instrument de căutare interactiv pentru terminalul dvs. Este un filtru neclar în care poți introduce lucrurile. Vă oferă o ieșire super-rapidă, pe măsură ce tastați bara de căutare pentru orice listă. De asemenea, nu trebuie să fiți precis, dacă căutați „react_component.js”, puteți doar să tastațirctjsși fzf va înțelege ce vrei să spui.
Pentru a-l folosi, trebuie să îl instalați pe sistemul dvs. folosind managerul de pachete. Pe Ubuntu/Debian, rulați asta:
sudo apt install fzfOdată instalat, cel mai simplu mod de a utiliza fzf este doar tastarea:
fzf
Veți obține instantaneu o listă de fișiere care poate fi căutată în folderul curent. Pe măsură ce tastați, filtrează rezultatele în timp real. Puteți naviga cu tastele săgeți și apăsați Enter pentru a selecta una.
Îl poți combina și cu find. De exemplu:
find . -type f | fzfAcest lucru vă va permite să alegeți un fișier în mod interactiv din lista pe care o generează găsirea.
Îl poți folosi chiar și pentru a căuta istoricul comenzilor:
history | fzfAcest lucru vă permite să căutați în mod interactiv istoricul comenzilor. Puteți găsi cu ușurință comanda pe care ați executat-o acum trei zile, dar nu vă puteți aminti. Tastați câteva litere, găsiți-l, apăsați Enter și este gata de rulare.
Filtrare inteligentă a fișierelor cu ack
ack este similar cu grep, dar este conceput special pentru căutarea prin cod. Omite automat fișierele irelevante (cum ar fi binare, jurnale sau foldere de control al versiunilor), ceea ce îl face perfect pentru dezvoltatori. Nu este disponibil în mod implicit, trebuie să îl instalați pe sistemul dvs. De exemplu, dacă utilizați Ubuntu, rulați acest lucru:
sudo apt install ackOdată instalat, îl puteți folosi pentru a căuta orice. De exemplu, pentru a căuta o definiție de funcție în fișierele Python, utilizați:
ack --python "def my_function"Doriți să găsiți fiecare comentariu TODO din proiectul dvs.? Run:
ack "TODO"De asemenea, îl puteți utiliza cu steaguri obișnuite, de exemplu, dacă aveți nevoie de o căutare fără majuscule cu numere de rând, rulați:
ack -i -n "config"În plus, ack știe deja despre tipurile obișnuite de fișiere. Puteți căuta numai în fișiere JavaScript, fișiere Python sau fișiere Markdown folosind steaguri precum--jssau--python.
Pe vremuri, înainte de apariția ripgrep, ack era instrumentul de bază pentru dezvoltatori. Acum, ripgrep este mai rapid, dar ack are încă farmecul său pentru rezultate lizibile și filtrare prietenoasă pentru dezvoltatori.
Gânduri finale
Terminalul Linux se poate simți intimidant la început, dar odată ce începeți să utilizați aceste instrumente de căutare, devine parte a fluxului de lucru zilnic. Odată ce vă simțiți confortabil cu ele, puteți crea, de asemenea, alias-uri în shell-ul dvs., astfel încât să nu trebuie să vă amintiți comenzi lungi.













