Linux中的PATH环境变量

Linux中的PATH环境变量

我想知道linux操作系统给出的标准环境变量(如PATH、HOME)是如何自动设置的。这些是从哪个文件中读取的。当特定用户登录时,应该有一些文件可以设置这些变量。

答案1

您的问题的答案可以在INVOCATION部分找到man bash。以下是相关摘录:

   When  bash is invoked as an interactive login shell, or as a non-inter-
   active shell with the --login option, it first reads and executes  com-
   mands  from  the file /etc/profile, if that file exists.  After reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in  that order, and reads and executes commands from the first one that
   exists and is readable.  The --noprofile option may be  used  when  the
   shell is started to inhibit this behavior.

   When  a  login  shell  exits, bash reads and executes commands from the
   file ~/.bash_logout, if it exists.

   When an interactive shell that is not a login shell  is  started,  bash
   reads  and executes commands from ~/.bashrc, if that file exists.  This
   may be inhibited by using the --norc option.  The --rcfile file  option
   will  force  bash  to  read  and  execute commands from file instead of
   ~/.bashrc.

   When bash is started non-interactively, to  run  a  shell  script,  for
   example, it looks for the variable BASH_ENV in the environment, expands
   its value if it appears there, and uses the expanded value as the  name
   of  a  file to read and execute.  Bash behaves as if the following com-
   mand were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used to search for  the  file
   name.

手册页中还有更多内容,我建议您阅读它。

答案2

事情比 shell 提供的要复杂一些。

登录方式主要有以下三种:

  • 从真正的终端登录(现在主要是控制台)
  • 从伪终端登录(主要是网络连接)
  • 从图形环境登录

它们都能够在执行您的 shell 之前设置环境,并且它们都可以(HOMELOGNAMETERM可能不是由您的 shell 设置的,即使您没有启动文件,您的 shell 通常也会继承PATH环境变量)。

当从真实终端登录时,处理连接的进程可能会设置TERM环境变量并将其余工作委托给程序login。该程序会执行一些验证(例如防止 root 在不安全的终端上登录),确保整个环境TERM是干净的,初始化HOME, PATH, SHELL, TERM, MAIL,LOGNAME然后启动您的登录 shell。然后您的 shell 将进行自己的初始化。

当从伪终端登录时,会发生同样的事情,但稍有不同。通常,环境从处理连接的进程中获得更多的初始化,而不仅仅是TERM环境变量(网络协议通常有一种从另一端传输环境的方法),因此login在不清理环境的模式下使用,清理工作是由处理连接的程序完成的。

图形环境通常不会委托,login但行为类似。验证您的凭据后,他们会创建一个干净的环境(使用常用的环境变量,并且至少DISPLAY设置正确;他们通常允许系统管理员提供的脚本添加内容),然后为您的桌面环境启动启动脚本;这些可能会尝试从您的登录 shell 获取环境,并且通常还提供提供脚本来完成设置的可能性。因此,当您从桌面启动任何程序时,其环境是图形登录程序、桌面环境和登录脚本设置的组合。

最后一件事:当您启动终端模拟器时,您可能会获得一个登录 shell(在这种情况下,会执行 shell 中的登录脚本,因此您可以看到其中最新更改的效果,但不会看到与其他程序相同的环境)或不同(在这种情况下,不执行 shell 中的登录脚本,您看不到最新的更改,但您获得与其他程序相同的环境 - 由交互式初始化修改shell 的脚本)。

答案3

检查/etc/bash* /etc/profile*文件。

答案4

检查 bash 的手册页,因为它应该根据您的发行版提供所有已检查的文件(以及按顺序)。该env命令会告诉您设置的内容,但不会告诉您设置的位置。然而,快速的 grep 会告诉你这些设置在哪里。

相关内容