Поиск по сайту:

Что такое 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 в среде, в которой вы работаете.