Войти
Android, Windows, Apple, Ликбез. Социальные сети. Драйверы
  • Японские телефоны Новый японский смартфон
  • Lenovo G500S: характеристики, основные особенности
  • Определяем серию продукта видеокарт Nvidia Характеристики карты nvidia 9800 gt
  • А конкуренты у смартфона есть
  • Что такое расширение файла TRZ?
  • Не работает динамик в "айфоне"
  • Добавить в переменную среды path linux. Переменные окружения в Linux

    Добавить в переменную среды path linux. Переменные окружения в Linux

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

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

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

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

    Что есть $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 в файлах конфигурации оболочки. В большинстве дистрибутивов Linux при запуске нового сеанса переменные среды считываются из следующих файлов:

    • Конфигурационные файлы глобальной оболочки, такие как /etc/environment и /etc/profile. Используйте этот файл, если вы хотите, чтобы новый каталог был добавлен всем системным пользователям $PATH.
    • Конфигурационные файлы для отдельных пользовательских оболочек. Например, если вы используете Bash, вы можете установить переменную $PATH в файле ~/.bashrc, а если вы используете Zsh – имя файла ~/.zshrc.

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

    Nano ~/.bashrc

    Export PATH="$HOME/bin:$PATH"

    Сохраните файл и загрузите новое значение $PATH в текущий сеанс оболочки, используя :

    Source ~/.bashrc

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

    Echo $PATH

    Заключение

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

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

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

    Что это такое? Многие команды, которые вы вводите в командной строке, требуют применения внешней программы, загружаемой из файловой системы. Например, такие команды как mkdir и wc на самом деле находятся в папке /bin.

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


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

    Echo $PATH

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

    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

    При каждом вводе неизвестной команды Linux будет просматривать каждую из папок, указанных в переменной окружения, в порядке их задания, пытаясь найти программу с тем же именем. Если программа найдена, она запускается; в противном случае выводится сообщение об ошибке. Но не будет ошибкой, если вы купите своё любимой серебряные кольца в подарок. Серебро украсит любую женщину!

    Эти семь папок обеспечивают легкий доступ ко всем основным программам в операционной системе, включая . Любые программы за пределами этих семи папок не могут быть запущены простым вводом их имени в командной строке.

    Например, вы загрузили из Интернета в вашу домашнюю папку утилиту diary. Если вы введете ее имя в командной строке, то получите сообщение об ошибке, потому что она находится в папке, не включенной в системный путь. Для выполнения этой программы следует ввести следующую строку (напоминаю, что символ ~ - сокращенное обозначение вашей домашней папки):

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

    Конечно предполагается, что diary - простая автономная программа, не требующая установки, потому что большинство основных приложений в процессе установки поместят исполняемый файл программы куда-нибудь в ваш заданный путь. Вот такая переменная окружения PATH , пользуйтесь на здоровье!

    export PATH=~/opt/bin:$PATH

    Export PATH=$PATH:~/opt/bin

    9 Solutions collect form web for “Как правильно добавить путь к PATH?”

    Простые вещи

    PATH=$PATH:~/opt/bin PATH=~/opt/bin:$PATH

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

    Вы можете добавить несколько записей одновременно. PATH=$PATH:~/opt/bin:~/opt/node/bin или изменения в порядке упорядочения просто отлично.

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

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

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

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

    Заметки о оболочках, отличных от bash

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

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

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

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

    В любом случае это работает, но они не делают то же самое: элементы PATH проверяются слева направо. В первом примере исполняемые файлы в ~/opt/bin будут иметь приоритет над установленными, например, в /usr/bin , что может быть или не быть тем, что вы хотите.

    В частности, с точки зрения безопасности, опасно добавлять пути к фронту, потому что, если кто-то может получить доступ на запись к вашему ~/opt/bin , они могут, например, разместить другие ls , которые вы "d, то, вероятно, используйте вместо /bin/ls не заметив. Теперь представьте себе то же, что и для ssh или вашего браузера или выбора … (То же самое можно сделать трижды на вашем пути.)

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

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

    Export PATH=$PATH:~/opt/bin export PATH=$PATH:~/opt/node/bin

    но это происходит не потому, что второе назначение не только добавляет ~/opt/node/bin , но и все ранее назначенные PATH .

    Это возможное решение:

    Export PATH=$PATH:~/opt/bin:~/opt/node/bin

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

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

    PATH=~/opt/bin

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

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

    Export PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # add optional items to the path for bindir in $HOME/local/bin $HOME/bin; do if [ -d $bindir ]; then PATH=$PATH:${bindir} fi done

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

    PATH=/data/myscripts:$PATH

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

    PATH=$PATH:/data/myscripts

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

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

    $HOME/myscript.sh source $HOME/myscript.sh

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

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

    PATH=$PATH:/data/myscripts export PATH

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

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

    Дополнительная информация здесь

    В течение некоторого времени я сохранил со мной две функции pathadd и pathrm которые помогают добавлять элементы в путь без необходимости беспокоиться о дублированиях.

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

    Почти в каждой ситуации, если вы добавляете путь, вы, вероятно, хотите переопределить все, что уже есть в пути, поэтому я предпочитаю добавлять по умолчанию.

    Pathadd() { newelement=${1%/} if [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; then if [ "$2" = "after" ] ; then PATH="$PATH:$newelement" else PATH="$newelement:$PATH" fi fi } pathrm() { PATH="$(echo $PATH | sed -e "s;\(^\|:\)${1%/}\(:\|\$\);\1\2;g" -e "s;^:\|:$;;g" -e "s;::;:;g")" }

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

    Pathadd "/foo/bar" pathadd "/baz/bat" after export PATH

    Вам гарантировано не добавлять к пути, если он уже существует. Если вы теперь хотите, чтобы /baz/bat был на старте.

    Pathrm "/baz/bat" pathadd "/baz/bat" export PATH

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

    Я не могу говорить о других дистрибутивах, но у Ubuntu есть файл, / etc / environment, который является стандартным поисковым путем для всех пользователей. Поскольку мой компьютер используется только мной, я помещаю любые каталоги, которые я хочу на моем пути, если только это временное дополнение, которое я ввел в сценарий.

    Вот мое решение:

    PATH=$(echo -n $PATH | awk -v RS=: -v ORS=: "!x[$0]++" | sed "s/\(.*\).\{1\}/\1/")

    Хороший легкий лайнер, который не оставляет трейлинг:

    Для меня (в Mac OS X 10.9.5) добавление имени пути (например, /mypathname) в файл /etc/paths очень хорошо работало.

    Перед редактированием возвращается echo $PATH:

    /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

    После редактирования /etc/paths и перезапуска оболочки переменная $ PATH добавляется с /pathname . Действительно, echo $PATH возвращает:

    /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname

    Случилось так, что /mypathname добавлено в $PATH .

    Чтобы добавить новый путь к PATH среды PATH:

    Export PATH=$PATH:/new-path/

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

    • Bash Shell: ~ / .bash_profile, ~ / .bashrc или профиль
    • Korn Shell: ~ / .kshrc или.profile
    • Z Shell: ~ / .zshrc или.zprofile

    например

    # export PATH=$PATH:/root/learning/bin/ # source ~/.bashrc # echo $PATH

    Вы можете увидеть предоставленный путь в вышеупомянутом выходе.

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

    Шаги

    1. 1 Найдите текущий путь, введя команду echo $PATH. Откроется список каталогов, как показано ниже (пример):
      • uzair@linux:~$ echo $PATH/home/uzair/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/games
      • Примечание: каталоги разделены двоеточиями.
    2. 2 Временно добавьте: /sbin и:/usr/sbin: к текущему пути, введя команду:
      • uzair@linux:~$ export PATH=$PATH:/sbin/:/usr/sbin/
    3. 3 Для подтверждения того, что переменная PATH была изменена, введите команду:
      • uzair@linux:~$ echo $PATH/home/uzair/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
      • Помните, что внесенные изменения являются временными и будут отменены при перезагрузке системы.
    4. 4 Проверьте правильность работы программ с временной переменной.
    5. 5 Для внесения постоянных изменений в переменную PATH добавьте ту же строку в файл ~/.bashrc

    Предупреждения

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