Add bin path linux

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

Когда вы вводите команду в командной строке, вы в основном говорите оболочке запустить исполняемый файл с заданным именем. В Linux эти исполняемые программы, такие как ls , find , file и другие, обычно find в нескольких разных каталогах вашей системы. Любой файл с исполняемыми разрешениями, хранящийся в этих каталогах, может быть запущен из любого места. Наиболее распространенные каталоги, содержащие исполняемые программы, — это /bin , /sbin , /usr/sbin , /usr/local/bin и /usr/local/sbin .

Но как оболочка узнает, в каких каталогах искать исполняемые программы? Оболочка выполняет поиск по всей файловой системе?

Ответ прост. Когда вы вводите команду, оболочка просматривает все каталоги, указанные в $PATH пользователя, в поисках исполняемого файла с таким именем.

В этой статье показано, как добавить каталоги в $PATH в системах Linux.

Что такое $PATH в Linux

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

Чтобы проверить, какие каталоги находятся в вашем $PATH , вы можете использовать команду printenv или echo :

Результат будет выглядеть примерно так:

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

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

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

Допустим, у вас есть каталог bin расположенный в вашем домашнем каталоге, в котором вы храните сценарии оболочки. Чтобы добавить каталог в ваш $PATH введите:

Команда export экспортирует измененную переменную в среду дочернего процесса оболочки.

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

Однако это изменение носит временный характер и действует только в текущем сеансе оболочки.

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

Глобальные файлы конфигурации оболочки, такие как /etc/environment и /etc/profile . Используйте этот файл, если хотите, чтобы новый каталог был добавлен всем пользователям системы $PATH .

Файлы конфигурации для конкретной оболочки пользователя. Например, если вы используете Bash, вы можете установить $PATH в файле

/.bashrc . Если вы используете Zsh, имя файла

В этом примере мы установим переменную в файле

/.bashrc . Откройте файл в текстовом редакторе и добавьте в конец следующую строку:

Сохраните файл и загрузите новый $PATH в текущий сеанс оболочки с помощью source команды:

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

Выводы

Добавить новые каталоги к вашему пользователю или глобальной $PATH довольно просто. Это позволяет выполнять команды и сценарии, хранящиеся в нестандартных местах, без необходимости вводить полный путь к исполняемому файлу.

Те же инструкции применимы для любого дистрибутива Linux, включая Ubuntu, CentOS, RHEL, Debian и Linux Mint.

Не стесняйтесь оставлять комментарии, если у вас есть вопросы.

Источник

Переменная PATH в Linux

Когда вы запускаете программу из терминала или скрипта, то обычно пишете только имя файла программы. Однако, ОС Linux спроектирована так, что исполняемые и связанные с ними файлы программ распределяются по различным специализированным каталогам. Например, библиотеки устанавливаются в /lib или /usr/lib, конфигурационные файлы в /etc, а исполняемые файлы в /sbin/, /usr/bin или /bin.

Читайте также:  Hp laserjet 1010 drivers windows 10 64 bit

Таких местоположений несколько. Откуда операционная система знает где искать требуемую программу или её компонент? Всё просто — для этого используется переменная PATH. Эта переменная позволяет существенно сократить длину набираемых команд в терминале или в скрипте, освобождая от необходимости каждый раз указывать полные пути к требуемым файлам. В этой статье мы разберёмся зачем нужна переменная PATH Linux, а также как добавить к её значению имена своих пользовательских каталогов.

Переменная PATH в Linux

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

На экране появится перечень папок, разделённых двоеточием. Алгоритм поиска пути к требуемой программе при её запуске довольно прост. Сначала ОС ищет исполняемый файл с заданным именем в текущей папке. Если находит, запускает на выполнение, если нет, проверяет каталоги, перечисленные в переменной PATH, в установленном там порядке. Таким образом, добавив свои папки к содержимому этой переменной, вы добавляете новые места размещения исполняемых и связанных с ними файлов.

Для того, чтобы добавить новый путь к переменной PATH, можно воспользоваться командой export. Например, давайте добавим к значению переменной PATH папку/opt/local/bin. Для того, чтобы не перезаписать имеющееся значение переменной PATH новым, нужно именно добавить (дописать) это новое значение к уже имеющемуся, не забыв о разделителе-двоеточии:

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

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

В ОС Ubuntu значение переменной PATH содержится в файле /etc/environment, в некоторых других дистрибутивах её также можно найти и в файле /etc/profile. Вы можете открыть файл /etc/environment и вручную дописать туда нужное значение:

sudo vi /etc/environment

Можно поступить и иначе. Содержимое файла .bashrc выполняется при каждом запуске оболочки Bash. Если добавить в конец файла команду export, то для каждой загружаемой оболочки будет автоматически выполняться добавление имени требуемой папки в переменную PATH, но только для текущего пользователя:

Выводы

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

Источник

Как правильно добавить путь к PATH?

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

Простые вещи

в зависимости от того, хотите ли вы добавить

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

Вы можете добавить несколько записей одновременно. PATH=$PATH:

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

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

Читайте также:  Droidcam client для компьютера windows 10

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

Где его поставить

Поместите линию , чтобы изменить PATH в

/.bash_profile если это то, что у вас есть.

Обратите внимание, что

/.bash_rc не читается ни одной программой, и

/.bashrc является файлом конфигурации интерактивных экземпляров bash. Вы не должны определять переменные среды в

/.bashrc . Правильное место для определения переменных среды, таких как PATH is

/.bash_profile если вас не волнуют другие оболочки, кроме bash). Посмотрите, в чем разница между ними и какой я должен использовать?

Не помещайте это в /etc/environment или

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

Потенциальные осложнения в некоторых системных скриптах

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

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

Примечания о снарядах, кроме Баш

В bash, ksh и zsh, export есть специальный синтаксис, и то и другое PATH=

/opt/bin:$PATH и export PATH=

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

Таким образом, в таких оболочках, как dash, export PATH=

/opt/bin:$PATH устанавливается PATH литеральная строка,

/opt/bin/: за которой следует значение PATH до первого пробела. PATH=

/opt/bin:$PATH (голое задание) не требует кавычек и делает правильные вещи. Если вы хотите использовать export в переносимом скрипте, вам нужно написать export PATH=»$HOME/opt/bin:$PATH» или PATH=

/opt/bin:$PATH; export PATH (или PATH=$HOME/opt/bin:$PATH; export PATH для переносимости даже в оболочку Bourne, которая не принимала export var=value и не выполняла расширение тильды).

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

/ .bashrc », но, к сожалению, 100% программ, которые я установил в моей системе и которые изменяют путь (FZF и Rust’s Cargo), изменяют путь в нем .bashrc . Я предполагаю, что, поскольку FZF написан на Rust, он также следует шаблону Rust.

В любом случае работает, но они не делают то же самое: элементы PATH проверяются слева направо. В вашем первом примере исполняемые файлы in

/opt/bin будут иметь приоритет над установленными, например in /usr/bin , которые могут быть, а могут и не быть теми , которые вы хотите.

В частности, с точки зрения безопасности, опасно добавлять пути вперед, потому что, если кто-то может получить доступ для записи к вашему

/opt/bin , он может добавить, например, другое ls , которое вы, вероятно, вместо этого могли бы использовать вместо этого. из того /bin/ls не замечая. Теперь представьте то же самое для ssh или вашего браузера или выбора . (То же самое происходит трижды для вставки на вашем пути.)

Я смущен вопросом 2 (так как удален из вопроса, так как это было связано с не связанной проблемой):

Как можно добавить больше путей в разные строки? Первоначально я думал, что это может сделать свое дело:

но это не так, потому что второе назначение не только добавляет

Читайте также:  Не работает установщик приложений windows 10

/opt/node/bin , но и все PATH ранее назначенное.

Это возможный обходной путь:

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

Если вы говорите

это все, что будет в вашем ПУТИ. PATH — это просто переменная окружения, и если вы хотите добавить ее в PATH, вам нужно перестроить переменную с тем содержимым, которое вы хотите. То есть то, что вы приводите в качестве примера к вопросу 2, это именно то, что вы хотите сделать, если только я полностью не упускаю суть вопроса.

Я использую обе формы в моем коде. У меня есть общий профиль, который я устанавливаю на каждой машине, на которой я работаю, который выглядит так, чтобы приспособиться к потенциально отсутствующим каталогам:

Пуленепробиваемый способ добавления / предоплаты

Есть много соображений, связанных с выбором добавления против предварительного добавления. Многие из них описаны в других ответах, поэтому я не буду повторять их здесь.

Важным моментом является то, что, даже если системные скрипты не используют это (интересно, почему) * 1 , пуленепробиваемый способ добавить путь (например, $HOME/bin ) в переменную среды PATH — это

для добавления (вместо PATH=»$PATH:$HOME/bin» ) и

за предлог (вместо PATH=»$HOME/bin:$PATH» )

Это позволяет избежать ложного $PATH начального / конечного двоеточия, когда оно изначально пустое, что может иметь нежелательные побочные эффекты и может стать кошмаром , который трудно найти ( этот ответ кратко касается случая «в пути» awk ).

Если parameter равно null или не установлено, ничто не подставляется, в противном случае подставляется расширение word .

Таким образом, $:> расширяется до: 1) ничего, если PATH ноль или не установлен, 2) $: , если PATH установлено.

Примечание : это для bash.

* 1 Я только что обнаружил, что подобные сценарии devtoolset-6/enable действительно используют это,

Linux определяет путь поиска исполняемого файла с помощью $PATH переменной среды. Чтобы добавить каталог / data / myscripts в начало $PATH переменной среды, используйте следующее:

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

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

  • Если в сценарии вы экспортируете переменную окружения, она действует в любых программах, вызываемых сценарием. Обратите внимание, что это не эффективно в программе, которая вызывает скрипт.
  • Если программа, вызывающая скрипт, делает это путем включения вместо вызова, любые изменения среды в скрипте вступают в силу в вызывающей программе. Такое включение может быть сделано с помощью команды точка или команды источника.

Включение в основном включает «вызываемый» сценарий в «вызывающий» сценарий. Это как #include в C. Так что это эффективно внутри «вызывающего» скрипта или программы. Но, конечно, это не эффективно ни в каких программах или скриптах, вызываемых вызывающей программой. Чтобы сделать его эффективным на протяжении всей цепочки вызовов, вы должны следовать настройке переменной среды с помощью команды экспорта.

Например, программа оболочки bash включает содержимое файла .bash_profile путем включения. Поместите следующие 2 строки в .bash_profile:

эффективно помещает эти 2 строки кода в программу bash. Таким образом, в bash переменная $ PATH включает $HOME/myscript.sh и из-за оператора экспорта все программы, вызываемые bash, имеют измененную $PATH переменную. И поскольку любые программы, которые вы запускаете из приглашения bash, вызываются bash, новый путь действует для всего, что вы запускаете из приглашения bash.

Суть в том, что для добавления нового каталога к пути вы должны добавить или добавить каталог к ​​переменной среды $ PATH в сценарии, включенном в оболочку, и вы должны экспортировать $PATH переменную среды.

Источник

Оцените статью