разница между файлом bash.bashrc и файлом / etc / environment

42

До даты я использовал для установки переменных окружения в bash.bashrcфайле. Недавно мне сказали использовать /etc/environmentфайл. Ну, оба работают нормально.

Итак, в чем разница между ними?

Я гуглил это и обнаружил, что «bashrc используется для конкретного пользователя и среды, всей системы». Что подразумевается под широкой системой здесь? /etc/bash.bashrcтакже применяет изменения в масштабе всей системы. Поправь меня, если я ошибаюсь. Любая помощь будет оценена

trapaank
источник

Ответы:

35

Одно из отличий состоит в том, что он /etc/environmentсодержит только определения переменных и, по-видимому, не проходит никакого расширения / интерполяции переменных. Таким образом, вы не можете ссылаться на переменные в определениях. Это, например, не будет работать:

A="else"
B="something $A"

В буквальном смысле будет something $A, а не ожидаемый something else.

Смотрите этот вопрос .

Кстати, ответ, который вы нашли через Google ~/.bashrc, скорее всего, касается пользователя , а не всей системы /etc/bash.bashrc. Это может быть причиной вашего замешательства.

roadmr
источник
Какова цель ~ / .bashrc, когда есть два файла, которые делают одно и то же / etc / environment и /etc/bash.bashrc?
трапаанк
6
/Etc/bash.bashrc выполняется, если какой-либо пользователь открывает bash. ~ / .Bashrc выполняется, только если владелец домашнего каталога, в котором он сохранен, открывает bash.
Андре Станнек
18

/etc/environmentФайл устанавливает переменную систему широкой для каждого пользователя при загрузке. Команды в команде /etc/bash.bashrcвыполняются, если bashоболочка открыта любым пользователем. Таким образом, переменные не будут установлены, если bashоболочка не будет открыта хотя бы один раз.

Андре Станнек
источник
Извините, я новичок в Linux. где оболочка bash будет открыта? и еще одна вещь, когда оболочка bash открыта, будет ли она переопределять переменную, установленную в / etc / enviornment или нет?
trapaank
Я не уверен, когда / etc / environment выполняется точно, но /etc/bash.bashrc выполняется Ubuntu, когда вы входите в среду рабочего стола. Вот почему это работает, если вы установите переменные там. Я предполагаю, что / etc / environment выполняется один раз при загрузке перед входом на рабочий стол и что выполнение /etc/bash.bashrc перезаписывает переменные. Но еще раз: я не уверен в этом.
Андре Станнек
4
Это при входе в систему, а не при загрузке!
Slm
6

И, как вы спрашиваете о " всей системы ":

Файлы конфигурации, расположенные в /etcкаталоге, применяются ко всем пользователям системы. Ибо /etc/bash.bashrcэто значило бы для всех и всего, кто использует «Borne Again SHell», также известный как Bash на этой машине. Даже если вы являетесь единственным человеком, использующим его, это может повлиять на «технических пользователей» (просто посмотрите /etc/passwdи проверьте, как часто там используется термин «/ bin / bash» - или используйте grep bash /etc/passwd | wc -l, что должно дать вам это число напрямую (что означает: «захватить» все строки, содержащие строку «bash», из файла «/ etc / passwd») и отправить результаты («|») в команду «wc» (количество слов) для подсчета строк ( "-l").

Поэтому для вашего пользователя гораздо безопаснее ~/.bashrcвместо этого изменить (имеется в виду файл ".bashrc" - с начальной точкой, да - например, в вашем домашнем каталоге /home/ankur/.bashrc), который затем просто воздействует на вашего пользователя и оставляет все остальное в покое. , Файлы в /etcдолжны быть изменены только в том случае, если общесистемные изменения действительно предназначены.

Кроме того: обе конфигурации будут использоваться, если они существуют. Во-первых, общесистемный файл (здесь /etc/bash.bashrc:) читается и «получен» (его настройки применяются к текущему сеансу), а затем пользователи /home/username/.bashrcобрабатываются одинаково, и, таким образом, могут добавлять или даже изменять / перезаписывать настройки из глобального /etc/bash.bashrcфайл.

Иззи
источник
3

Помимо общесистемного и пользовательского обсуждения, наиболее существенным отличием /etc/environmentявляется не сценарий, кроме ~/.bashrc.

Вы не можете разыменовать переменную внутри /etc/environment, ее присваивание переменной, которая буквально принимает значение строки (как уже упоминалось roadmr).

Ваш Ubuntu будет заблокирован , если вы завинчивать $PATHвнутрь /etc/environment, пытаясь добавить новый путь

PATH=$PATH:/new_path

Если ваша страница входа в Ubuntu Gnome или Unity не позволила вам войти, не пожаловавшись на неверный пароль. И вы недавно изменили /etc/environment, это, скорее всего, так.

Исправление - войти в виртуальную консоль CTRL+ ALT+ F1войти в консоль, вручную проверить $PATHи исправить /etc/environmentфайл.

В соответствии с этим , /etc/environmentзагружается стек PAM, который заполняет переменную окружения строка за строкой.

legendbb
источник
-1

Разница между ними заключается в том, что /etc/enivironmentфайл будет работать для всех пользователей, в то время как файл bash.bashrc будет особенно работать только для этого пользователя. И если вы делаете что-то не так в этом /etc/environmentфайле, последствия могут быть серьезными, в то время как вы можете легко отменить изменения в файле bash.bashrc, скопировав содержимое файла / etc / environment. Но первое предпочтение отдается bash.bashrcфайлу, а затем файлу / etc / environment. Дело не в том, что если вы вносите изменения в bash.bashrcфайл, то терминал сначала будет отдавать предпочтение локальному пользовательскому файлу (т. Е. bash.bashrc), А затем главному файлу (т. Е. /etc/environment).

Пранит Баува
источник
Я думаю, что вы путаете файлы ~ / .bashrc и /etc/bash.bashrc. Первый - локальный для пользователя, открывающего оболочку, второй - глобальный для всех пользователей, открывающих оболочку.
Деннис