
Когда вы вводите команду в командной строке, вы, по сути, отдаёте командной оболочке команду запустить исполняемый файл с заданным именем. В Linux исполняемые программы, такие как ls , find , file и другие, обычно находятся в нескольких различных каталогах вашей системы. Все файлы с правами на исполнение, хранящиеся в этих каталогах, могут быть запущены из любого места. Наиболее распространённые каталоги для хранения исполняемых программ: /bin , /sbin , /usr/sbin , /usr/local/bin и /usr/local/sbin .
Но как оболочка определяет, в каких каталогах искать исполняемые программы? Неужели она ищет по всей файловой системе?
Ответ прост. При вводе команды оболочка ищет исполняемый файл с этим именем во всех каталогах, указанных в пользовательской переменной $PATH .
В этой статье объясняется, как добавлять каталоги в переменную $PATH в системах Linux.
Что такое $PATH в Linux
Переменная среды $PATH — это список каталогов, разделенных двоеточиями, который сообщает оболочке, в каких каталогах следует искать исполняемые файлы.
Чтобы проверить, какие каталоги находятся в вашей $PATH , вы можете использовать команду printenv или echo :
echo $PATH
Вывод будет выглядеть примерно так:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Если у вас есть два исполняемых файла с одинаковыми именами, расположенных в двух разных каталогах, оболочка запустит файл, находящийся в каталоге, который указан первым в $PATH .
Добавление каталога в $PATH
В некоторых ситуациях может потребоваться добавить другие каталоги в переменную $PATH . Например, некоторые программы могут быть установлены в разных местах, или вам может понадобиться отдельный каталог для ваших личных скриптов, но при этом иметь возможность запускать их без указания абсолютного пути к исполняемым файлам. Для этого нужно просто добавить нужный каталог в переменную $PATH .
Предположим, в вашем домашнем каталоге есть каталог bin , в котором хранятся скрипты оболочки. Чтобы добавить этот каталог в переменную $PATH , введите:
export PATH="$HOME/bin:$PATH"
Команда export экспортирует измененную переменную в среды дочерних процессов оболочки.
Теперь вы можете запускать свои скрипты, вводя имя исполняемого скрипта, не указывая полный путь к файлу.
Однако это изменение является временным и действует только в текущем сеансе оболочки.
Чтобы изменения стали постоянными, необходимо определить переменную $PATH в файлах конфигурации оболочки. В большинстве дистрибутивов Linux при запуске нового сеанса переменные окружения считываются из следующих файлов:
-
Глобальные файлы конфигурации, специфичные для оболочки, такие как
/etc/environmentи/etc/profile. Используйте этот файл, если хотите добавить новый каталог в$PATHвсех пользователей системы. -
Файлы конфигурации, специфичные для каждой оболочки пользователя. Например, если вы используете Bash, вы можете задать переменную
$PATHв файле~/.bashrc. Если вы используете Zsh, имя файла —~/.zshrc.
В этом примере мы установим переменную в файле ~/.bashrc . Откройте файл в текстовом редакторе и добавьте в конец следующую строку:
nano ~/.bashrc
~/.bashrc
export PATH = " $HOME /bin: $PATH "
Сохраните файл и загрузите новый $PATH в текущий сеанс оболочки с помощью команды source :
source ~/.bashrc
Чтобы подтвердить успешное добавление каталога, выведите значение $PATH , введя:
echo $PATH
Удаление каталога из $PATH
Чтобы удалить каталог из переменной $PATH , необходимо открыть соответствующий файл конфигурации и удалить нужный каталог из переменной $PATH . Изменение вступит в силу в новых сеансах оболочки.
Другая редкая ситуация — если вы хотите удалить каталог из переменной $PATH только для текущего сеанса. Это можно сделать, временно отредактировав переменную. Например, если вы хотите удалить каталог /home/lina/bin из переменной $PATH , выполните следующие действия:
PATH=$(echo "$PATH" | sed -e 's/:/home/lina/bin$//')
В приведенной выше команде мы передаем текущую переменную $PATH команде sed , которая удалит указанную строку (путь к каталогу).
Если вы временно добавили новый каталог в переменную $PATH , вы можете удалить его, выйдя из текущего терминала и открыв новый. Временные изменения действительны только в текущем сеансе командной оболочки.
Заключение
Добавить новые каталоги в пользовательскую или глобальную переменную $PATH довольно просто. Это позволяет выполнять команды и скрипты, хранящиеся в нестандартных местах, без необходимости указывать полный путь к исполняемому файлу.
Те же инструкции применимы для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian и Linux Mint.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии.
Связанные руководства