Что такое Unix PATH и как в него добавлять программы?
Unix PATH — это переменная среды, которая сообщает оболочке, какие каталоги следует искать при вводе команд. Вы можете думать об этом как о списке папок Application или Program Files.
Что делает ПУТЬ?
Если вы хотите запустить двоичный файл в текущей папке, вам нужно будет указать относительный путь, например:
./command [args]
Но если вы переместите этот двоичный файл в папку, например /usr/local/bin/
, вместо этого вы просто наберете имя команды для его запуска:
command [args]
Это связано с тем, что /usr/local/bin/
находится в PATH. Оболочка знает, что нужно искать в этой папке, если вы не укажете местоположение. Здесь и в подобных папках установлены многие утилиты командной строки. Вы можете просмотреть, какие папки находятся в вашем PATH, повторив саму переменную, используя префикс $
:
echo $PATH
Однако по умолчанию переменная PATH представляет собой список имен каталогов, разделенных двоеточиями. Не очень читаемо:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Но с небольшим количеством регулярных выражений вы можете очистить его, чтобы распечатать список:
echo $PATH | sed $'s/:/\n/g'
Все эти каталоги служат разным целям:
- Папки, оканчивающиеся на
bin
– общего назначения, папки, оканчивающиеся наsbin
, предназначены для команд системного администрирования, которые выполняются системой, но вы, вероятно, не будете взаимодействовать с ними. Хотя есть /bin
и/sbin
предназначены для программ, которые нужны системе до того, как/usr
будет доступна. Здесь хранятся ключевые программы, такие какsh
иls
./usr/bin
и/usr/sbin
– обычные пользовательские программы, обычно встроенные в ОС./usr/local/bin
и/usr/local/sbin
– для программ, которые вы скачали или скомпилировали самостоятельно. Если вы скачали бинарный файл и не знаете, куда его поместить, бросьте его в/usr/local/bin
.
/usr/local/sbin
может даже не существовать в вашей системе, так как он довольно противоречив по своей природе. Его нет в macOS, но есть несколько программ в Ubuntu.
Вы можете посмотреть, в каких папках находятся разные команды, с помощью команды what
:
which ls
Который распечатает полный путь, ведущий к данной команде.
Как добавить папки в PATH
Добавить папку в PATH очень просто, вам просто нужно установить переменную. Но вы не можете перезаписать его полностью, поэтому вместо этого вы добавляете папку в начало PATH:
PATH=~/folder:$PATH
Вы также можете прикрепить папку к обратной стороне PATH:
PATH=$PATH:~/folder
Они имеют различное использование. Папки, расположенные ближе к началу, будут проверены в первую очередь, поэтому, если есть повторяющиеся команды (например, две версии Python, обе называются «python
»), добавление папки на передний план гарантирует, что добавленная вами папка вручную будут проверены в первую очередь. В большинстве случаев это, вероятно, то, что вы хотите.
Обычно вы определяете это в профиле вашей оболочки, который будет устанавливать переменную всякий раз, когда вы открываете новый терминал. Если вы используете bash, это либо .bash_profile
или .bashrc
. Если вы используете оболочку вроде zsh, это будет другой файл (в данном случае .zshrc
). Если определение уже есть, вы можете просто добавить свою папку в начало списка, разделив ее двоеточием.
Рассмотрите возможность использования символических ссылок
Вместо того, чтобы добавлять папку напрямую, вы можете вместо этого использовать символическую ссылку на определенные команды и поместить символическую ссылку в /usr/local/bin
. Например, Python устанавливается в свою собственную папку, но вместо того, чтобы добавлять эту папку в PATH, он использует символическую ссылку. Вы можете посмотреть, куда ведут символические ссылки, с помощью ls -la
:
ls -la $(which python)
И вы можете создавать символические ссылки с помощью ln
:
ln -s command /usr/local/bin/command
ПУТЬ может измениться
Поскольку переменная PATH обычно определяется в .bashrc
, ваш PATH может отличаться при работе в другой среде. Это особенно актуально, если вы работаете внутри скрипта bash или если вы запускаете команду через cron
. Если у вас возникли проблемы «команда не найдена», вам нужно дважды проверить правильность установки PATH в среде, в которой вы работаете.