Se poate întâmpla să vrem să aflăm dacă într-o ierarhie de fișiere găsim un anumit fișier și, dacă există, vrem să aflăm unde se află. Spre exemplu, serviciul ssh
folosește un fișier de configurare numit ssh_config
, dar nu mai ținem minte calea exactă până la acel fișier.
Linux ne oferă două utilitare, locate
și find
, care pot fi de ajutor în situația descrisă mai sus.
În mod obișnuit, numele fișierelor de configurare pentru servicii se termină în extensia conf
. Găsim toate fișierele de configurare ale serviciului ssh
de pe sistem folosind comanda find
:
student@uso:~$ mkdir comenzi student@uso:~$ cd comenzi/ student@uso:~/comenzi$ sudo find / -iname "*ssh*conf" /usr/share/upstart/sessions/ssh-agent.conf /usr/lib/tmpfiles.d/sshd.conf /etc/init/ssh.conf
Am căutat în calea /
(root) orice fișier ce conține ssh
și se termină cu conf
. Am folosit comanda sudo
pentru că suntem un utilizator neprivilegiat și nu putem căuta în directorul (root).
Utilitarul find
caută în ierarhia de fișiere care începe de la calea dată ca parametru în jos. În cazul nostru, de la /
(root) în jos, adică în tot sistemul de fișiere.
Mai multe informații și exemple de utilizări vom vedea în capitolul Interfața în linia de comandă
.
Atunci când vrem să căutăm într-o ierarhie mare de fișiere, utilitarul find
nu este cea mai bună soluție deoarece este încet.
Utilitarul locate
ne poate ajuta în astfel de situații.
Acesta funcționează în 2 pași:
updatedb
. Aceasta conține intrări cu toate fișierele din sistem și locatia acestora.locate
. Această căutare se reduce la interogarea bazei de date create anterior cu updatedb
.
Performanța utilitarului este foarte bună, superioară lui find
. Partea negativă este că la fiecare căutare trebuie folosit utilitarul updatedb
.
Încercăm să căutăm fișiere ce conțin ssh
și se termină cu conf
în sistemul de fișiere folosind locate
:
student@uso:~/comenzi$ sudo updatedb student@uso:~/comenzi$ locate "*ssh*conf" /etc/init/ssh.conf /usr/lib/tmpfiles.d/sshd.conf /usr/share/upstart/sessions/ssh-agent.conf
Actualizăm baza de date folosind updatedb
și apoi căutăm fișierul de configurare cu utilitarul locate
. Răspunsul comenzii este instant.
Acum ne dorim să găsim toate arhivele de tip tar
de pe stația noastră. Vom folosi iar utilitarul locate
alături de șirul de caractere *.tar
.
student@uso:~$ locate *.tar /home/student/inregistrari.tar /home/student/usr_bin.tar
Acesta este un presupus output al utilitarului locate
. Au fost găsite arhivele înregistrări.tar
și usr_bin.tar
pe care le aveam în sistemul de fișiere de la secțiunea anterioară.
Găsim mai multe informații și exemple în capitolul Interfață în linia de comandă.
Până acum am învățat câteva comenzi utile: ls
, cd
, find
, locate
.
Utilitarele sunt de fapt programe (executabile) care se află undeva în sistemul de fișiere.
Shell-ul știe să ruleze utilitarele din orice loc în care ne aflăm (din ierarhia de fișiere). Se întâmplă acest lucru pentru că shell-ul are o listă de câteva directoare în care se uită după utilitarele pe care le folosim. Spre exemplu, atunci când rulăm utilitarul ls
, el caută programul ls
în lista pe care o are, îl găsește și îl rulează.
Această listă se găsește în variabila de mediu1) PATH
.
Afișăm valoarea variabilei de mediu PATH
a sistemului folosind utilitarul echo
.
$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/games
Variabila PATH
are patru căi din sistem, despărțite de caracterul :
. Astfel, sistemul verifică dacă utilitarul este prezent în calea /usr/local/bin
. Dacă nu-l găsește, merge la următoarea calea /usr/bin
. Se caută utilitarul la toate căile disponibile. Dacă nu-l găsește va apărea în shell-ul curent un mesaj de eroare.
Există cazuri când vrem să găsim locația exactă a unui utilitar: vrem să aflăm ce permisiuni are, cine îl deține sau ce dimensiune are.
Acest utilitar identifică calea programelor din sistem.
Căutăm calea la care se află utilitarul ls
folosind comanda which
:
student@uso:~$ which ls /bin/ls student@uso:~$ which pwd /bin/pwd student@uso:~$ which man /usr/bin/man
which
folosește variabila de mediu PATH
pentru a găsi utilitarul cerut și va afișa rezultatele în ordinea directoarelor din PATH
.
Aflăm mai multe detalii despre utilitarul which
în capitolul Interfața în linia de comandă
pwd
în pwd_backup
. Puteți să mai executați comanda pwd
? Dar pwd_backup
?