Intereting Posts
Настройка редактора по умолчанию для php-файлов Как добавить раздел NTFS в fstab? Переменная Shell не изменяется с комбинацией «труба-время-чтение» Где «Программа« <пакет> »в настоящее время не установлена.» Извлеките свой список программ? Я хочу загрузить GNOME, но он всегда загружает Unity Можно ли установить LIB-пути в rc.local? Выполняет ли он свои команды после входа в систему? Как добавить параметр форматирования правой кнопки мыши на значок диска в панели запуска? Отменить автоматическое сохранение второго внутреннего жесткого диска при загрузке В bash существует ли способ сделать короткие (if or) заявления? Ubuntu 16.04 установка драйвера Epson сбой на LSB> = 3.2 Ошибка Python 3 при запуске команды печати Могу ли я сделать эту команду клавиатуры, которая требует запуска sudo при запуске? Как получить работу Intel Corporation Centrino Wireless-N 1000? Средний щелчок с сенсорным дисплеем с тремя пальцами на 11.10, Как я могу восстановить это? Могу ли я установить kdirstat на Ubuntu 11.10?

Установка переменной PATH в / etc / environment vs .profile

Где предпочтительное место для установки envvar PATH ?

~/.profile или /etc/environment ?

Что происходит, когда PATH установлен в обоих местах? Является ли конечный результат конкатенацией обоих значений, установленных в этих двух местах?

Резюме:

  • Если вы хотите добавить к вашей PATH путь (например, /your/additional/path ) для вашего текущего пользователя, а не для всех пользователей вашего компьютера, вы обычно ставите его в конец ~/.profile как в одном из эти два примера:

     PATH="/your/additional/path:$PATH" PATH="$PATH:/your/additional/path" 

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

  • Однако, если вам нужно установить эту переменную среды для всех пользователей, я бы по-прежнему не рекомендовал касаться /etc/environment но создавал файл с именем файла, заканчивающимся на .sh в /etc/profile.d/ . Скрипт /etc/profile и все сценарии в /etc/profile /etc/profile.d являются глобальным эквивалентом личного файла ~/.profile каждого пользователя и выполняются как обычные сценарии оболочки всеми оболочками во время их инициализации.


Более детально:

  • /etc/environment – это системный файл конфигурации, что означает, что он используется всеми пользователями. Однако он принадлежит root , поэтому вам нужно быть пользователем admin и использовать 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 – более новых версиях добавьте его безоговорочно):

     # set PATH so it includes user's private bin if it exists if [ -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_login ~/.bash_profile или ~/.bash_login если вы хотите, чтобы изменения в ~/.profile имели эффект для вашего пользователя.


Связанный вопрос: разница между файлом bash.bashrc и / etc / environment

Файл / etc / environment не является файлом сценария, который вы не можете использовать там, и он не поддерживает переменное расширение типа $ HOME, просто пары simplevariable = value. Чтобы использовать этот файл, вам нужно просто добавить свой путь к существующему определению, специально предназначенный для общесистемных параметров среды. по одной в каждой строке. В частности, этот файл хранит общесистемные настройки языка и пути.

~ / .profile – этот файл запускается всякий раз, когда выполняется оболочка bash, обычно является рекомендуемой для переменных среды, однако у него есть недостаток в том, что он вызывается только с помощью оболочек входа, поэтому, чтобы заставить его вступить в силу, вам понадобится для выхода из системы и возврата в нее или, по крайней мере, для запуска новой оболочки входа.

Предпочтительное место для установки переменных окружения зависит от нескольких вещей:

  1. Вы единственный, кто пользуется компьютером:
    • В этом случае наилучшее место для его установки будет в /etc/environment поскольку нет угрозы для несанкционированного доступа.
  2. Если система используется многими
    • Если переменные должны быть доступны всем, то местоположение будет /etc/environment , но
    • если отдельные пользователи должны выбрать для них доступ, то каждый должен установить их в файле ~/.profile относящемся к каждому пользователю системы, поскольку он находится в домашнем каталоге каждого пользователя.

Система прочитает /etc/environment перед чтением ~/.profile . Никакой конкатенации не происходит, и, как сказал Алекс Р, последнее преимущество на пути преобладает.

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