Где установлена программа в Linux: команды which, whereis, type
Куда Linux установил программу?
В отличие от Windows, где все файлы программы обычно лежат в одной папке C:\Program Files\, в операционных системах Linux компоненты приложения разносятся по системным каталогам: исполняемые файлы попадают в /usr/bin/, конфигурации — в /etc/, а мануалы — в /usr/share/man/. Когда нужно прописать точный путь к утилите в cron или systemd, необходимо точно знать её физическое расположение.
3 главные команды для поиска программ в Linux
- Команда which — путь к исполняемому файлу из переменной PATH:
which nginx which php which python3Вывод покажет точный бинарный файл, который запускается при вводе команды (например,
/usr/bin/python3). - Команда whereis — полный поиск исполняемых файлов, исходников и мануалов:
whereis nginxПример вывода:
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz. - Команда type — показывает, чем именно является команда:
type -a ls type -a cdУтилита
typeполезна тем, что подсказывает: является ли команда внешним бинарником, алиасом (alias) или встроенной функцией оболочки Bash (shell builtin).
Совет для Cron: Задачи в планировщике crontab часто не имеют стандартного окружения PATH, поэтому всегда прописывайте полный путь к интерпретаторам, найденный через which php (например: * * * * * /usr/bin/php /var/www/script.php).
Частые вопросы (FAQ)
Почему which не находит команду cd?
Команда `cd` — это встроенная внутренняя инструкция командной оболочки Bash (shell builtin), у нее нет отдельного исполняемого файла на диске.
В каких папках система ищет исполняемые файлы?
Список этих каталогов хранится в системной переменной `PATH`. Посмотреть их можно командой `echo $PATH` (обычно это `/usr/local/bin`, `/usr/bin`, `/bin`, `/usr/sbin`).
Что делать, если which не находит установленный скрипт?
Вероятно, директория с вашим скриптом не добавлена в переменную `$PATH`, либо у файла отсутствуют права на исполнение (`chmod +x script.sh`).
Как найти путь к установленной утилите через find?
Используйте поиск по системным бинарным папкам: `sudo find /usr/bin /usr/sbin /usr/local/bin -name "имя_программы"`.