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

Как добавить каталог в ваш PATH в Linux


PATH — один из бесшумных манипуляторов в фоновом режиме вашего компьютера с Linux. Это незаметно влияет на ваш пользовательский опыт, но в этом нет ничего подозрительного. Мы объясним, что он делает и как вы можете его настроить.

Что такое $PATH в Linux и как он работает?

Когда вы вводите команду в окне терминала и нажимаете Enter, вы запускаете довольно много действий еще до того, как ваша команда будет выполнена.

Bash — это оболочка по умолчанию в большинстве дистрибутивов Linux. Он интерпретирует введенную вами строку текста и идентифицирует имена команд, смешанные с параметрами, каналами, перенаправлениями и всем остальным. Затем он находит исполняемые двоичные файлы для этих команд и запускает их с указанными вами параметрами.

Первый шаг, который оболочка предпринимает для поиска исполняемого файла, — это определение того, задействован ли вообще двоичный файл. Если используемая вами команда находится в самой оболочке («встроенная оболочка»), дальнейший поиск не требуется.

Встроенные оболочки легче всего найти, потому что они являются неотъемлемой частью оболочки. Это как иметь их на поясе с инструментами — они всегда с вами.

Однако, если вам нужен какой-либо из ваших других инструментов, вам придется порыться в мастерской, чтобы найти его. Это на вашем верстаке или настенной вешалке? Это то, что делает переменная окружения PATH. Он содержит список мест, которые ищет оболочка, и порядок, в котором они будут искаться.

Если вы хотите узнать, является ли команда встроенной оболочкой, псевдонимом, функцией или отдельным двоичным файлом mv /work/unfile, вы можете использовать команду type, как показано ниже:

type clear
type cd

Это говорит нам о том, что clear — это двоичный файл, и первый найденный в пути файл находится в /usr/bin. На вашем компьютере может быть установлено несколько версий clear, но оболочка попытается использовать именно эту.

Неудивительно, что cd является встроенной оболочкой.

Список вашего $PATH

Легко увидеть, что находится на вашем пути. Просто введите следующее, чтобы использовать команду echo и вывести значение, хранящееся в переменной PATH:

echo $PATH

Результатом является список расположений файловой системы, разделенных двоеточием (:). Оболочка выполняет поиск слева направо по пути, проверяя каждое местоположение файловой системы на наличие соответствующего исполняемого файла для выполнения вашей команды.

Мы можем пройтись по списку, чтобы увидеть местоположения файловой системы, в которых будет выполняться поиск, и порядок, в котором они будут выполняться:

  • /usr/local/sbin
  • /usr/local/bin
  • /usr/sbin
  • /usr/bin
  • /sbin
  • /bin
  • /usr/игры
  • /usr/local/games
  • /snap/bin

Что может быть неочевидно сразу, так это то, что поиск начинается не в текущем рабочем каталоге. Скорее, он работает через перечисленные каталоги и только перечисленные каталоги.

Если текущий рабочий каталог не указан в вашем пути, он не будет найден. Кроме того, если у вас есть команды, хранящиеся в каталогах, не указанных в пути, оболочка их не найдет.

Чтобы продемонстрировать это, мы создали небольшую программу под названием rf. При выполнении rf печатает имя каталога, из которого он был запущен, в окне терминала. Он находится в /usr/local/bin. У нас также есть более новая версия в каталоге /dave/work.

Мы вводим следующую команду  what, чтобы показать нам, какую версию нашей программы найдет и использует оболочка:

which rf

Оболочка сообщает, что найденная версия — это версия в каталоге, указанном в пути.

Мы вводим следующее, чтобы запустить его:

rf

Версия 1.0 rf работает и подтверждает, что наши ожидания были правильными. Найденная и выполненная версия находится в /usr/local/bin.

Чтобы запустить любую другую версию rf на этом компьютере, нам нужно указать путь к исполняемому файлу в командной строке, как показано ниже:

./work/rf

Теперь, когда мы сообщили оболочке, где найти версию rf, которую мы хотим запустить, она использует версию 1.1. Если мы предпочитаем эту версию, мы можем скопировать ее в каталог /usr/local/bin и перезаписать старую.

Допустим, мы разрабатываем новую версию rf. Нам нужно будет часто запускать его по мере разработки и тестирования, но мы не хотим копировать невыпущенную сборку для разработки в живую среду.

Или, возможно, мы загрузили новую версию rf и хотим провести ее проверочное тестирование, прежде чем сделать ее общедоступной.

Если мы добавим наш рабочий каталог в путь, мы заставим оболочку найти нашу версию. И это изменение затронет только нас — другие по-прежнему будут использовать версию rf в /usr/local/bin.

Добавление каталога в ваш $PATH

Вы можете использовать команду export, чтобы добавить каталог в PATH. Затем этот каталог включается в список местоположений файловой системы, которые ищет оболочка. Когда оболочка находит соответствующий исполняемый файл, она прекращает поиск, поэтому убедитесь, что она сначала выполняет поиск в вашем каталоге, а затем /usr/local/bin.

Это легко сделать. В нашем примере мы вводим следующее, чтобы добавить наш каталог в начало пути, чтобы это было первое место поиска:

export PATH=/home/dave/work:$PATH

Эта команда устанавливает PATH равным каталогу, который мы добавляем, /home/dave/work, а затем всему текущему пути.

Первый PATH не имеет знака доллара ($). Мы устанавливаем значение для PATH. Последний PATH имеет знак доллара, потому что мы ссылаемся на содержимое, хранящееся в переменной PATH. Также обратите внимание на двоеточие (:) между новым каталогом и именем переменной PATH.

Давайте посмотрим, как теперь выглядит путь:

echo $PATH

Наш каталог /home/dave/work добавляется в начало пути. Предоставленное двоеточие отделяет его от остальной части пути.

Мы вводим следующее, чтобы убедиться, что наша версия rf найдена первой:

which rf

Доказательство в пудинге выполняется rf, как показано ниже:

rf

Оболочка находит версию 1.1 и запускает ее из /home/dave/work.

Чтобы добавить наш каталог в конец пути, мы просто перемещаем его в конец команды, например так:

export PATH=$PATH:/home/dave/work

Сделать изменения постоянными

Как сказала Бет Брук-Марчиниак: «Успех — это хорошо, но успех мимолетен». В тот момент, когда вы закроете окно терминала, все изменения, внесенные вами в PATH , исчезнут. Чтобы сделать их постоянными, вы должны поместить команду export в файл конфигурации.

Когда вы помещаете команду export в файл .bashrc, она устанавливает путь каждый раз, когда вы открываете окно терминала. В отличие от сеансов SSH, для которых необходимо войти в систему, такие сеансы называются интерактивными.

Раньше вы помещали команду export в свой файл .profile, чтобы указать путь для входа в сеансы терминала.

Однако мы обнаружили, что если поместить команду export в файлы .bashrc или .profile, она правильно установит путь для обоих интерактивных и войдите в сеансы терминала. Ваш опыт может быть другим. Чтобы справиться со всеми возможными случаями, мы покажем вам, как это сделать в обоих файлах.

Используйте следующую команду в каталоге /home, чтобы отредактировать файл .bashrc:

gedit .bashrc

Откроется редактор gedit с загруженным файлом .bashrc.

Прокрутите файл до конца и добавьте следующую команду экспорта, которую мы использовали ранее:

export PATH=/home/dave/work:$PATH

Сохраните файл. Затем либо закройте и снова откройте окно терминала, либо используйте команду dot для чтения файла .bashrc следующим образом:

. .bashrc

Затем введите следующую команду echo, чтобы проверить путь:

echo $PATH

Это добавит каталог /home/dave/work в начало пути.

Процесс добавления команды в файл .profile такой же. Введите следующую команду:

gedit .profile

Редактор gedit запускается с загруженным файлом .profile.

Добавьте команду export в конец файла и сохраните ее. Закрытие и открытие нового окна терминала недостаточно для принудительного повторного чтения файла .profile. Чтобы новые настройки вступили в силу, вы должны выйти и снова войти в систему или использовать команду dot, как показано ниже:

. .profile

Установка пути для всех

Чтобы установить путь для всех, кто использует систему, вы можете отредактировать файл /etc/profile.

Вам нужно будет использовать sudo следующим образом:

sudo gedit /etc/profile

Когда запустится редактор gedit, добавьте команду экспорта в конец файла.

Сохраните и закройте файл. Изменения вступят в силу для других при следующем входе в систему.

Примечание о безопасности

Убедитесь, что вы случайно не добавили двоеточие в начале пути «:», как показано ниже.

Если вы это сделаете, сначала будет выполняться поиск в текущем каталоге, что создает угрозу безопасности. Допустим, вы загрузили архивный файл и распаковали его в каталог. Вы смотрите на файлы и видите еще один заархивированный файл. Вы вызываете unzip еще раз, чтобы извлечь этот архив.

Если первый архив содержал исполняемый файл с именем unzip, который был вредоносным исполняемым файлом, вы случайно запустили его вместо настоящего исполняемого файла unzip. Это произойдет потому, что оболочка сначала будет искать в текущем каталоге.

Поэтому всегда будьте осторожны при вводе команд export. Используйте echo PATH, чтобы просмотреть их и убедиться, что они именно такие, как вы хотите.

RELATED: Best Linux Laptops for Developers and Enthusiasts