Ce face which, whereis și type
Când scrii o comandă, shell-ul caută în ordine: aliasuri, cuvinte cheie, funcții, comenzi interne (built-in) și abia apoi programe în directoarele din PATH. Comenzile din această pagină îți spun ce a găsit.
which caută doar în PATH și afișează calea fișierului executabil. whereis caută și pagina de manual și sursele. type este o comandă internă Bash și este cea mai exactă: recunoaște și aliasurile, funcțiile și comenzile interne, pe care which nu le vede.
În scripturi, pentru a verifica dacă o comandă există, se recomandă command -v: este standard POSIX, este internă shell-ului și întoarce un cod de ieșire diferit de 0 dacă numele nu există.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
which -a |
Afișează toate potrivirile din PATH, nu doar prima. |
whereis -b / -m |
Doar fișierele binare / doar paginile de manual. |
type -t |
Afișează doar tipul: alias, keyword, function, builtin sau file. |
type -a |
Toate locurile unde există numele (de exemplu și comanda internă, și fișierul). |
command -v |
Afișează numele sau calea și întoarce 0 dacă există; potrivită pentru scripturi. |
Exemple
Exemplul 1: Unde se află un program
which dă calea executabilului, iar whereis adaugă și pagina de manual.
which python3
whereis tar
Ieșire în terminal
/usr/bin/python3
tar: /usr/bin/tar /usr/share/man/man1/tar.1.gz
Exemplul 2: Ce fel de nume este fiecare
type recunoaște comenzile interne, cuvintele cheie și funcțiile definite în shell, pe care which nu le poate găsi.
salut() { echo "Salut, Ana!"; }
type cd
type -t if
type -t salut
type -t cd
Rezultat
cd is a shell builtin
keyword
function
builtin
Exemplul 3: Verificarea unei dependențe într-un script
command -v întoarce cod diferit de 0 când comanda lipsește, așa că scriptul poate afișa un mesaj clar în loc să eșueze mai târziu.
for unealta in printf comanda_inexistenta; do
if command -v "$unealta" > /dev/null; then
echo "$unealta: există"
else
echo "$unealta: lipsește, instaleaz-o înainte"
fi
done
Rezultat
printf: există
comanda_inexistenta: lipsește, instaleaz-o înainte
Greșeli frecvente
- Folosirea lui
whichpentru aliasuri sau funcții: nu le vede. Foloseștetype. - Verificarea existenței unei comenzi în scripturi cu
which: comportamentul și mesajele diferă între distribuții;command -veste standard. - Uitarea faptului că Bash ține minte căile găsite (
hash): după ce muți un program, ruleazăhash -r.
Comenzi înrudite
man: Deschide manualul oficial al unei comenzi, al unui fișier de configurare sau al unei funcții, direct în terminal.locate: Găsește fișiere după nume aproape instantaneu, căutând într-o bază de date actualizată periodic cu updatedb.alias: Creează scurtături personalizate și memorabile pentru comenzi lungi sau frecvente.export: Transformă o variabilă de shell într-o variabilă de mediu (environment variable) accesibilă proceselor copil.