Как добавить в путь linux

Обновлено: 03.07.2024

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

Команды — это не только команды дисковой операционной системы. Путь представляет собой список каталогов, в которых оболочка ищет команды операционной системы и другие команды. Команды похожи на короткие программные файлы. Итак, команды являются исполняемыми. Каждое приложение, установленное на компьютере, поставляется с исполняемым файлом. Для запуска приложения сначала задействуется исполняемый файл. Эти исполняемые файлы также называются командами.

Без переменной PATH каждой команде задавался бы абсолютный путь, например,

/home/john/dir1/dir2/command.exe

где первый / — это корневой каталог; john — пользовательский каталог для пользователя John; dir1 и dir2 — подкаталоги; а command.exe — имя исполняемого файла.

Для исполняемого файла возможны многие другие имена. На самом деле command.exe здесь символичен. Таким образом, если каталог /home/john/dir1/dir2 (без файла) находится в переменной PATH, пользователь john выполнит command.exe в командной строке [email protected]:~$, просто набрав, command.exe без предшествующего пути. То есть:

и затем нажмите Enter.

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

и нажмите Enter на терминале. Результат будет примерно таким:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin< /p>

Теперь возникает вопрос: как каталог (и предшествующий ему путь) добавляется в переменную PATH? При некоторых установках каталог добавляется автоматически. С другими его нужно добавлять вручную. В этой статье объясняются два основных способа добавления каталога. Каталог не добавляется (включается), как это было бы сделано для массива. Два основных способа называются временным добавлением и постоянным добавлением. Bash — это оболочка, используемая для примеров кода в этой статье.

Содержание статьи

Временное добавление

Временное добавление означает, что добавление происходит только в памяти. Он не сохраняется для использования при перезагрузке компьютера.

Встроенная команда экспорта Bourne Shell

Проще говоря, команда экспорта:

В этом случае он переназначает значение переменной в памяти.

Переменная PATH в памяти уже может иметь значение, например,

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/ корзина

Предположим, что добавляемый каталог — /home/john/dir1/dir2. Если команда экспорта введена как,

тогда /home/john/dir1/dir2 заменит все, что уже находится в памяти, в качестве значения для переменной PATH.

Если команда экспорта вводится как,

Затем /home/john/dir1/dir2 прикрепится к концу того, что уже находится в переменной. Итак, новая переменная будет:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/ bin:/home/john/dir1/dir2

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

Теперь одна и та же команда может находиться более чем в одном каталоге. Когда исполняемая команда вводится без предшествующего пути в приглашении, оболочка начинает поиск значения (строки) переменной PATH в памяти слева направо. Итак, с приведенной выше строкой кода /home/john/dir1/dir2 наконец появится в поиске. Кто хочет, чтобы его каталог прибыл последним? - Никто. Таким образом, лучший способ включить (добавить) каталог выглядит следующим образом:

/home/john/dir1/dir2 теперь находится в начале и отделяется от следующего каталога двоеточием. Итак, с подсказкой «[email protected]:~$»,

после ввода и нажатия Enter команда command.exe в каталоге dir2 будет выполнена с помощью:

Пока компьютер не будет выключен, пользователь продолжит выполнение команды command.exe, не вводя предыдущий путь.

Когда компьютер выключается, вся оперативная память стирается. Плохая новость заключается в том, что пользователю компьютера придется повторять этот процесс добавления своего каталога в переменную PATH каждый раз при перезагрузке компьютера. Никто не хочет этим заниматься сегодня. Таким образом, подход постоянного добавления является рекомендуемым подходом. То есть дополнение к PATH должно быть сохранено (на жесткий диск).

Постоянное добавление

Из приведенного выше обсуждения идея состоит в том, чтобы сохранить внесенные изменения (на жесткий диск).Итак, если изменение сохраняется в файл, который оболочка считывает каждый раз при загрузке компьютера, это было бы нормально. То есть при каждой загрузке компьютера переменная PATH в памяти будет соответствующим образом обновляться. Когда компьютер запускается, при загрузке он читает определенные файлы. Один из файлов, который читает оболочка Bash для Linux, ~/.bashrc. Имя файла — .bashrc, начинающееся с точки. Он находится в каталоге пользователя.

Bash — это всего лишь одна оболочка, возможно, самая популярная на сегодняшний день оболочка для Linux. Еще одна оболочка для Linux — Zsh. В Zsh соответствующий файл ~/.zshrc все еще находится в каталоге пользователя. Когда оболочка запускается, при загрузке она читает этот файл. Для Bash это файл ~/.bashrc . Таким образом, если приведенный выше код добавления вводится в файл ~/.bashrc, каталог всегда будет находиться в памяти, так как ~/.bashrc всегда будет включать его в PATH при каждой загрузке компьютера. Он остается в памяти до тех пор, пока компьютер не будет выключен.

В Bash файл ~/.bashrc является скрытым, поэтому обычное использование команды ls не покажет его. ~/.bashrc содержит некоторые команды Bash (оболочки). Ubuntu — это вариант Linux. Ubuntu поставляется с текстовым редактором. На компьютере автора фон текстового редактора Ubuntu черный.

Приведенная выше команда добавления (без подсказки) должна быть включена в файл ~/.bashrc. Хорошо добавить его в конец файла, чтобы не портить его доступное содержимое, которое, вероятно, работает нормально.

Чтобы открыть ~/.bashrc в Ubuntu, введите в командной строке терминала следующую команду и нажмите Enter:

Где nano — текстовый редактор. Здесь nano — это команда (исполняемая), аргументом которой является ~/.bashrc. Содержимое файла должно открываться в текстовом редакторе и накладываться на окно терминала.

Файл ~/.bashrc откроется в текстовом редакторе, возможно, с черным фоном. Курсор будет мигать в левом верхнем углу.

Непрерывно нажимайте клавишу со стрелкой вниз на клавиатуре, пока курсор не достигнет конца файла. Добавьте новую строку,

Это еще не все. Изменение в файле ~/.bashrc не сохранено. Чтобы сохранить файл со внесенными изменениями, нажмите клавиши CTRL+O и следуйте другим отображаемым инструкциям. Чтобы выйти из текстового редактора, нажмите Ctrl+x, и обычное окно терминала должно заменить окно текстового редактора. Затем могут быть запущены другие команды оболочки.

Если исходная команда введена без перезагрузки, то «echo $PATH» покажет новый каталог, добавленный в результат (отображение). Затем интересующая команда может быть введена без предшествующего пути.

Примечание. Не путайте конец значения PATH (список) и конец файла ~/.bashrc. Кроме того, не путайте каталог в PATH в памяти и исполняемый файл в каталоге на жестком диске.

Заключение

PATH — это встроенная переменная в оболочках Linux. Значением PATH является список каталогов, разделенных двоеточиями. Для каждого из этих каталогов на жестком диске есть команда (исполняемый файл). Если команда выдается при продаже без указания пути перед ней, оболочка будет искать команду в этих каталогах. Если он не увидит команду ни в одном из каталогов, то команда не будет выполнена. В этом случае, чтобы выполнить команду, перед командой должен быть указан ее путь. Команда может находиться более чем в одном каталоге в значении PATH. Как только оболочка увидит первый каталог с командой, она выполнит команду. Значение PATH на самом деле представляет собой строку, состоящую из каталогов, разделенных двоеточием.

Проблема заключается в том, как добавить каталог для исполняемого файла нового приложения в PATH. В некоторых случаях это делается автоматически программой установки нового приложения. В остальных случаях это нужно делать вручную. Есть два способа сделать это вручную, называемые: временное добавление и постоянное добавление. Временное добавление использует команду экспорта и просто добавляет каталог, когда компьютер включен. Постоянное добавление должно сохранить командную строку экспорта в файл инициализации ~/.bashrc (Bash) для будущих операций.

Переменная PATH в Linux хранит путь к каталогам, в которых следует искать исполняемые файлы при выполнении команды.

Как видите, ПУТЬ состоит из нескольких каталогов (например, /usr/local/sbin, /usr/bin и других), разделенных двоеточием (:).

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

Это обычное дело при настройке среды разработки. Например, представьте, что вы загрузили и установили Java и Maven. Чтобы ваши программы работали правильно, вам необходимо указать расположение двоичных файлов Maven и Java в PATH.

Это краткое руководство посвящено настройке PATH в Linux. Помимо шагов, я также упомяну вещи, с которыми вам следует быть осторожным при работе с PATH.

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

Процесс добавления нового каталога в переменную PATH в Linux по сути следующий:

Где your_directory — это абсолютный путь к соответствующему каталогу.

Допустим, вы загрузили и распаковали Maven в домашний каталог и хотите добавить его каталог bin в PATH. Предположим, что абсолютный путь к этому каталогу bin — /home/abhishek/maven/apache-maven-3.8.0/bin.

Вот что вы должны сделать:

  • Значок $ перед именем переменной означает, что вы имеете в виду ее значение. PATH — это имя переменной, $PATH — это значение переменной PATH.
  • Вы не должны использовать $ с PATH слева от =
  • Не должно быть пробелов до и после =
  • Не забудьте указать : после $PATH, потому что каталоги в PATH разделяются двоеточием.
  • Не должно быть пробела перед и после двоеточия (:).

После того как вы установили PATH с новым значением, убедитесь, что PATH был правильно обновлен.

Возможно, вы захотите запустить команду или сценарий, для которого вы изменили PATH. Это скажет вам точно, правильно ли установлен PATH.

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

Вы добавили нужный каталог в переменную PATH, но изменение является временным. Если вы выйдете из терминала, завершите сеанс или выйдете из системы, PATH вернется, и изменения будут потеряны.

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

Для этой задачи можно использовать текстовый редактор, например Nano или Vim.

Если вы хотите, чтобы измененная переменная PATH была доступна для всех в системе Linux, вы можете добавить экспорт в файл /etc/profile. Это подходит, если вы являетесь системным администратором и имеете настроенную систему с настраиваемым путем.

Дополнительный совет: каталоги имеют приоритет в PATH

В переменной PATH есть несколько каталогов. Когда вы запускаете исполняемый файл/команду, ваша система просматривает каталоги в том порядке, в котором они указаны в переменной PATH.

Если /usr/local/sbin стоит перед /usr/bin, исполняемый файл сначала ищется в /usr/local/sbin. Если исполняемый файл найден, поиск завершается и исполняемый файл выполняется.

Вот почему вы найдете несколько примеров, когда дополнительный каталог добавляется перед всем остальным в PATH:

Если вы считаете, что ваш дополнительный каталог следует искать перед всем остальным, вы должны добавить его перед $PATH, в противном случае добавьте его после $PATH.

Было ли это достаточно ясно?

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

Мне интересно, где нужно добавить новый путь в переменную среды PATH. Я знаю, что это можно сделать, отредактировав .bashrc (например), но не совсем понятно, как это сделать.



Если уже добавлено несколько путей, например. PATH=$PATH:$HOME/.local/bin:$HOME/bin , другой можно добавить, разделив его : например. PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/ec2-user/pear/bin .

12 ответов 12

Простые вещи

в зависимости от того, хотите ли вы добавить ~/opt/bin в конец (для поиска после всех остальных каталогов, если в нескольких каталогах есть программа с таким же именем) или в начале (для поиска перед все остальные каталоги).

Вы можете добавить несколько записей одновременно. PATH=$PATH:~/opt/bin:~/opt/node/bin или варианты порядка работают нормально. Не помещайте export в начало строки, так как это создает дополнительные сложности (см. ниже в разделе «Примечания к оболочкам, отличным от bash»).

Если ваш PATH состоит из множества разных компонентов, вы можете получить повторяющиеся записи. См. Как добавить путь к домашнему каталогу, который будет обнаружен командой Unix? и Удалите повторяющиеся записи $PATH с помощью команды awk, чтобы избежать добавления дубликатов или удалить их.

Кстати, некоторые дистрибутивы автоматически помещают ~/bin в ваш PATH, если он существует.

Куда поместить

Поместите строку для изменения PATH в ~/.profile или в ~/.bash_profile, если это то, что у вас есть.

Обратите внимание, что ~/.bash_rc не читается ни одной программой, а ~/.bashrc — это файл конфигурации интерактивных экземпляров bash. Вы не должны определять переменные среды в ~/.bashrc . Правильным местом для определения переменных среды, таких как PATH, является ~/.profile (или ~/.bash_profile, если вас не интересуют оболочки, отличные от bash). См. В чем разница между ними и какой из них следует использовать?

Не помещайте его в /etc/environment или ~/.pam_environment : это не файлы оболочки, вы не можете использовать там замены, такие как $PATH. В этих файлах вы можете только переопределить переменную, но не добавлять к ней.

Возможные сложности в некоторых системных сценариях

Вам не нужен экспорт, если переменная уже находится в среде: любое изменение значения переменной отражается в среде.¹ PATH почти всегда находится в среде; все unix-системы устанавливают его очень рано (фактически, как правило, в самом первом процессе).

Во время входа в систему вы можете полагаться на то, что PATH уже находится в среде и уже содержит некоторые системные каталоги. Если вы пишете сценарий, который может быть выполнен на ранней стадии при настройке какой-либо виртуальной среды, вам может потребоваться убедиться, что PATH не пуст и экспортирован: если PATH все еще не установлен, то что-то вроде PATH=$PATH:/ some/directory установит PATH в :/some/directory , а пустой компонент в начале означает текущий каталог (например, .:/some/directory ).

Примечания по оболочкам, отличным от bash

В bash, ksh и zsh экспорт имеет специальный синтаксис, и как PATH=~/opt/bin:$PATH, так и export PATH=~/opt/bin:$PATH даже работают правильно. В других оболочках в стиле Bourne/POSIX, таких как dash (во многих системах это /bin/sh), экспорт обрабатывается как обычная команда, что подразумевает два отличия:

  • ~ анализируется только в начале слова, за исключением назначений (подробности см. в разделе Как добавить путь к домашнему каталогу, который Unix будет обнаруживать командой?);
  • $PATH вне двойных кавычек разрывается, если PATH содержит пробелы или \[*? .

Поэтому в оболочках, таких как dash, export PATH=~/opt/bin:$PATH устанавливает PATH в буквальную строку ~/opt/bin/: за которой следует значение PATH до первого пространство. PATH=~/opt/bin:$PATH (простое назначение) не требует кавычек и делает все правильно. Если вы хотите использовать экспорт в переносимом скрипте, вам нужно написать export PATH="$HOME/opt/bin:$PATH" или PATH=~/opt/bin:$PATH; экспортировать PATH (или PATH=$HOME/opt/bin:$PATH; экспортировать PATH для переносимости даже в оболочку Bourne, которая не принимала export var=value и не выполняла расширение с помощью тильды).

¹ Этого не было в оболочках Bourne (как в реальной оболочке Bourne, а не в современных оболочках в стиле POSIX), но в наши дни вы вряд ли столкнетесь с такими старыми оболочками. < /p>

Указать оболочке Linux, где искать исполняемые файлы, несложно, и каждый должен уметь это делать.

Дорога сквозь природу

Возможность редактировать $PATH — важный навык для любого начинающего пользователя POSIX, независимо от того, используете ли вы Linux, BSD или macOS.

Когда вы вводите команду в командную строку в Linux или других Linux-подобных операционных системах, все, что вы делаете, это говорите ей запустить программу. Даже простые команды, такие как ls, mkdir, rm и другие, представляют собой небольшие программы, которые обычно находятся в каталоге вашего компьютера с именем /usr/bin. В вашей системе есть и другие места, в которых также обычно хранятся исполняемые программы; некоторые распространенные включают /usr/local/bin, /usr/local/sbin и /usr/sbin. Какие программы, где и почему находятся, выходит за рамки этой статьи, но знайте, что исполняемая программа может находиться практически в любом месте на вашем компьютере: она не обязательно должна быть ограничена одним из этих каталогов.

Дополнительные ресурсы по Linux

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

Просмотреть ПУТЬ

Иногда вам может понадобиться установить программы в другие места на вашем компьютере, но вы сможете легко запускать их, не указывая их точное местоположение. Вы можете сделать это легко, добавив каталог в ваш $PATH. Чтобы увидеть, что сейчас находится в вашем $PATH, введите это в терминал:

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

Установите ПУТЬ

Допустим, вы написали небольшой сценарий оболочки с именем hello.sh и разместили его в каталоге с именем /place/with/the/file. Этот сценарий предоставляет некоторую полезную функцию для всех файлов в вашем текущем каталоге, которую вы хотели бы иметь возможность выполнять независимо от того, в каком каталоге вы находитесь.

Просто добавьте /place/with/the/file в переменную $PATH с помощью следующей команды:

Теперь вы сможете выполнять скрипт в любом месте вашей системы, просто введя его имя без необходимости указывать полный путь при вводе.

Постоянно установите PATH

Но что произойдет, если вы перезагрузите компьютер или создадите новый экземпляр терминала? Ваше дополнение к пути пропало! Это по дизайну. Переменная $PATH устанавливается вашей оболочкой каждый раз, когда она запускается, но вы можете установить ее так, чтобы она всегда включала ваш новый путь при каждой новой открываемой вами оболочке. Точный способ сделать это зависит от того, какую оболочку вы используете.

Не знаете, какую оболочку вы используете? Если вы используете практически любой распространенный дистрибутив Linux и не меняли настройки по умолчанию, скорее всего, вы используете Bash. Но вы можете подтвердить это простой командой:

Это команда "echo", за которой следует знак доллара ($) и ноль. $0 представляет собой нулевой сегмент команды (в команде echo $0 слово "echo" поэтому соответствует $1), или, другими словами, то, что запускает вашу команду. Обычно это оболочка Bash, хотя есть и другие, включая Dash, Zsh, Tcsh, Ksh и Fish.

Для Bash вам просто нужно добавить указанную выше строку export PATH=$PATH:/place/with/the/file в соответствующий файл, который будет прочитан при запуске вашей оболочки. Есть несколько различных мест, где вы могли бы установить имя переменной: потенциально в файле с именем ~/.bash_profile, ~/.bashrc или ~/.profile. Разница между этими файлами (главным образом) заключается в том, когда они считываются оболочкой. Если вы не знаете, куда его поместить, ~/.bashrc — хороший выбор.

Для других оболочек вам потребуется найти подходящее место для установки конфигурации во время запуска; Конфигурация ksh обычно находится в ~/.kshrc, zsh использует ~/.zshrc. Проверьте документацию вашей оболочки, чтобы узнать, какой файл она использует.

Это простой ответ, но есть и другие особенности и детали, которые стоит изучить. Как и почти все в Linux, существует несколько способов сделать что-то, и вы можете найти другие ответы, которые лучше соответствуют потребностям вашей ситуации или особенностям вашего дистрибутива Linux. Удачного взлома и удачи, куда бы ни привела вас $PATH.

Эта статья была впервые опубликована в июне 2017 года и обновлена ​​редактором с добавлением дополнительной информации.

Читайте также: