Резюме:
-
Если вы хотите добавить путь (например
/your/additional/path
) к вашемуPATH
переменная только для вашего текущего пользователя, а не для всех пользователей вашего компьютера, обычно вы помещаете ее в конец~/.profile
как в одном из этих двух примеров:PATH="/your/additional/path:$PATH"PATH="$PATH:/your/additional/path"
Обратите внимание, что приоритеты пути убывают слева направо, поэтому первый путь имеет наивысший приоритет. Если вы добавите свой путь слева от
$PATH
, он будет иметь наивысший приоритет, и исполняемые файлы в этом расположении будут переопределять все остальные. Если вы добавите свой путь справа, он будет иметь самый низкий приоритет, а исполняемые файлы из других местоположений будут предпочтительнее. Однако, если вам нужно установить эту переменную среды для всех пользователей, я бы все равно не рекомендовал трогать
/etc/environment
но создание файла с именем файла, заканчивающимся на.sh
в/etc/profile.d/
. В/etc/profile
сценарий и все сценарии в/etc/profile.d
являются глобальным эквивалентом персональных данных каждого пользователя~/.profile
и выполняются как обычные сценарии оболочки всеми оболочками во время их инициализации.
Более подробно:
/etc/environment
это общесистемный конфигурационный файл, что означает, что он используется всеми пользователями. Он принадлежитroot
хотя, поэтому вам нужно быть пользователем-администратором и использоватьsudo
чтобы изменить его.~/.profile
это один из личных сценариев инициализации оболочки вашего собственного пользователя. У каждого пользователя есть один, и он может редактировать свой файл, не затрагивая других./etc/profile
и/etc/profile.d/*.sh
являются ли глобальные сценарии инициализации эквивалентными~/.profile
для каждого пользователя. Однако глобальные скрипты выполняются раньше пользовательских скриптов; и основной/etc/profile
выполняет все*.sh
скрипты в/etc/profile.d/
как раз перед тем, как он выйдет.
-
То
/etc/environment
файл обычно содержит только эту строку:PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
Он устанавливает
PATH
переменная для всех пользователей системы с этим значением по умолчанию, которое не должно быть изменено существенным образом. По крайней мере, вы не должны удалять какие-либо важные пути, такие как/bin
,/sbin
,/usr/bin
и/usr/sbin
от него.Этот файл считывается как один из первых файлов конфигурации каждой оболочкой каждого пользователя. Обратите внимание, что это не сценарий оболочки. Это просто конфигурационный файл, который каким-то образом анализируется и который может содержать только назначения переменных среды!
-
То
~/.profile
файл может содержать много вещей, по умолчанию он содержит, среди прочего, проверку того, является ли~/bin
каталог существует и добавляет его к существующему каталогу пользователяPATH
переменная, подобная этой (в более старых версиях Ubuntu до 16.04, которая добавляет ее безоговорочно, и в 18.04, которая также добавляет "~ /.local /bin"):# set PATH so it includes user's private bin if it existsif [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH"fi
Вы видите, что старое значение
PATH
здесь используется повторно, и новый путь добавляется только к началу вместо того, чтобы перезаписывать все. Когда вы хотите вручную добавить новые пути, вы также должны всегда сохранять старые$PATH
значение где-то в новой строке.Этот сценарий инициализации читается только оболочками пользователя, которому он принадлежит, но есть еще одно условие:
# ~/.profile: executed by the command interpreter for login shells.# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login# exists.
Поэтому, если вы используете оболочку Bash по умолчанию, вы должны убедиться, что у вас нет
~/.bash_profile
или~/.bash_login
если вы хотите, чтобы изменения в~/.profile
чтобы иметь эффект для вашего пользователя.
Для получения полного представления о переменных среды см.:https://help.ubuntu.com/community/EnvironmentVariables
Связанный с этим вопрос: разница между файлом bash.bashrc и файлом /etc/environment