Как переменная среды пути работает в Linux?

Выходить из сессии заставит X перезапускать с большинством менеджеров по оформлению.

Как предложено кем-то еще, Вы могли также попробовать sudo restart lightdm, однако, в зависимости от Вашего менеджера по оформлению это могло бы также быть sudo restart gdm или sudo restart kdm (Вы использовали lightdm в качестве примера, таким образом, я предполагаю, что это - то, что Вы имеете; просто требуемый для покрытия всех оснований).

Править: Удаленный Ctrl + Alt + Backspace поскольку кто-то указал, что это было отключено в Ubuntu. Может работать на людей на различных дистрибутивах, которые находят этот поток.

7
25.02.2018, 15:10
4 ответа

Фундаментальное понятие для схватывания вот - то, что ПУТЬ может быть определен во многих местах. Поскольку @demure объясняет в его ответе, PATH=$PATH:/new/dir средства добавляют /new_dir кому: $PATH, это не очистит оригинал $PATH.

Теперь, одна причина там много файлов, глубоко соединен с понятием login и non-login оболочки. Посмотрите здесь для хорошей сводки. Следующее из страницы справочника удара (шахта акцента):

Когда удар вызывается как интерактивная оболочка входа в систему, или как неинтерактивная оболочка с - опция входа в систему, он сначала читает и выполняет команды из файла/etc/profile, если тот файл существует. После чтения того файла это ищет ~/.bash_profile, ~/.bash_login и ~/.profile, в том порядке, и читает и выполняет команды от первой, которая существует и читаема. - noprofile опция может использоваться, когда оболочка запускается для запрещения этого поведения.

Когда Вы сначала входите в свою систему, Вы запускаете оболочку входа в систему, таким образом, удар считает упомянутые выше файлы. Большинство дистрибутивов устанавливает в масштабе всей системы $PATH (который относится ко всем пользователям) в /etc/profile и это - то, где необходимо внести любые изменения, которые Вы хотите, относился ко всем пользователям. Это - то, что я имею на своем Debian:

PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"

После того как Вы вошли в систему при открытии терминала, Вы запускаете интерактивную, оболочку невхода в систему. Это что man bash должен сказать о тех:

   When  an  interactive shell that is not a login shell
   is started, bash reads  and  executes  commands  from
   /etc/bash.bashrc and ~/.bashrc, if these files exist.

Так, те файлы читаются каждый раз, когда Вы открываете новый терминал. Ваш filnal $PATH является комбинацией значений во всех файлах. В типичной ситуации Вы входите в систему с помощью графического журнала в менеджере и запускаете новую сессию. В этом pòint Ваш $PATH то, что было определено в различном profile файлы. Если Вы открываете терминал, то Вы находитесь в интерактивной оболочке и различном bashrc файлы читаются, который может добавить вещи к $PATH.


Подводя итоги, все, что действительно необходимо знать, - то, что можно внести изменения в пользователя $PATH путем редактирования $HOME/.profile.

9
27.01.2020, 20:16
  • 1
    Нет: .profile, нет .bashrc. –  Gilles 'SO- stop being evil' 02.06.2013, 02:20
  • 2
    @Gilles, почему? Если Вы, например, переключаете пользователей с su, ~/.profile не читается в то время как .bashrc . Это должно постараться не перезагружать $PATH каждый раз, когда Вы открываете новый терминал? –  terdon♦ 02.06.2013, 05:09
  • 3
    Учитывая, что su как предполагается, не изменяет среду, это точно как разработано. Если Вы хотите среду целевого пользователя, работаете su -l. Самый очевидный способ установить PATH в .bashrc перерывы в общих сценариях состоят в том, что это не вступает в силу в программах, запущенных менеджером окон. –  Gilles 'SO- stop being evil' 02.06.2013, 13:52
  • 4
    @Gilles ах, конечно, который имеет смысл. Хорошо, отредактированный ответ, спасибо. –  terdon♦ 02.06.2013, 16:53

В Вашем домашнем dir это было бы .bashrc, нет .bash.rc.
Конфигурация в масштабе всей системы /etc/bashrc нет /etc/.bash.rc.

Unix и Linux не используют \some\path\here пути к файлам, они используют /some/path/here пути к файлам. \ символ ESC и используется для отключения других специальных символов.

Вы могли отредактировать Ваш $PATH путем добавления их к строкам к Вашему ~/.bashrc (~ означает Ваш домашний dir),

PATH=$PATH:/usr/local/bin:/some/other/path
export PATH

Где

  • $PATH уже сохраняет что-либо набор к ПУТИ.
  • : разделяет записи.
  • И эти два каталога являются примерами (Вам не нужно :/some/other/path часть)

Я не предложил бы редактировать Ваше в масштабе всей системы /etc/bashrc если Вам только нужны изменения для себя.

3
27.01.2020, 20:16
  • 1
    Нет: .profile, нет .bashrc. –  Gilles 'SO- stop being evil' 02.06.2013, 02:20
  • 2
    @Gilles, в то время как я соглашаюсь, что ~/.profile является лучшим выбором, не, всем нравится беспокоить им –  demure 02.06.2013, 05:32
  • 3
    я плохо знаком с Linux и потребностью изменить мой ПУТЬ для содержания пути для Java jdk. Это должно быть в масштабе всей системы или пользователем определенное изменение? Никто больше не будет использовать мой ноутбук также. Вы говорите, что ~/.profile лучше для использования, чем .bashrc, какой должен новый пользователь, который не знает много об использовании Linux? А-ч –  Ungeheuer 21.11.2016, 00:56
  • 4
    @Adrian оба влиял бы только на пользователя, /etc/profile был бы для всех пользователей. ~/.bashrc только удар влияния, ~/.profile влияние все* оболочки. Просто используйте ~/.profile если у Вас нет предпочтения. –  demure 25.11.2016, 03:50

En primer lugar, el kernel (o initramfs )proporcionarán un valor de RUTA predeterminado inicial para el proceso init, además de algunas otras variables de entorno. Puedes verlos si quieres:

$ sudo strings /proc/1/environ
selinux=0
SHLVL=1
HOME=/
init=/sbin/init
TERM=linux
drop_caps=
BOOT_IMAGE=/vmlinuz-4.9.80-atom
PATH=/sbin:/usr/sbin:/bin:/usr/bin
crashkernel=384M-:128M
PWD=/
rootmnt=/root

Para demonios y otros procesos iniciados en el arranque -, el initproceso (ya sea un SysVinit tradicional o uno de los nuevos reemplazos comosystemd)puede aplicar su propia RUTA predeterminada, o simplemente pasar por el valor predeterminado del núcleo. Esto puede o no ser configurable :consulte la documentación de su sistema de inicio.

Para las sesiones de inicio de sesión, la configuración de PAM puede incluir pam_env.soque podría imponer una RUTA predeterminada para las sesiones de usuario, configurable en /etc/security/pam_env.conf. O si no se usa pam_env.so, el proceso que maneja el inicio de sesión (, p. sshd, o el par tradicional *getty+ loginen la consola o los inicios de sesión del puerto serie )pueden aplicar su propia RUTA de inicio predeterminada para las sesiones de usuario.

Luego, el shell del usuario normalmente ejecutará uno o más scripts de inicio de sesión de todo el sistema -, y uno o más scripts de inicio de sesión específicos del usuario -, si existen. Cualquiera de estos puede agregarse a la configuración PATH existente o reemplazarla por completo.

1
27.01.2020, 20:16

вместо PATHя использую /etc/enviromentи/etc/login.defs

...

0
02.07.2020, 19:36

Теги

Похожие вопросы