关于Linux环境变量配置文件
环境变量相关的配置文件
/etc/profile:此文件为系统的每个用户设置环境信息。
/etc/bashrc或 /etc/bash.bashrc:为每一个运行 bash shell 的用户执行此文件.当 bash shell 被打开时,该文件被读取。
~/.bashrc:该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该文件被读取。
~/.bash_profile 或 ~/.bash_login 或 ~/.profile:属于使用者个人配置,需要修改自己的数据,就写入这些文件!(ps1:其实 bash 的 login shell 配置只会读取上面三个文件的其中一个,而读取的顺序则是依照上面的顺序。ps2:这三个文件一般没啥人修改的,因为它们最终都是去调用读取~/.bashrc 这个文件。ps3:这三个文件不一定存在,我的 debian11.9 系统中就没有看到这三个文件,只有~/.bashrc)
以上文件中,其实只有/etc/profile 和~/.bashrc 这两个是常用的、重要的。其他的几乎不用管,没有必要去深入了解。
如果你设置的变量只针对你或其他一个用户,那就修改~/.bashrc,如果是针对所有用户,就修改/etc/profile。
交互式 shell 和非交互式 shell
交互式 shell:顾名思义,这种 shell 中的命令时由用户从键盘交互式地输入的,运行的结果也能够输出到终端显示给用户看。例如我们平常在终端输入的 cd 命令、vi 命令、mv 等都属于交互式的。
非交互式 shell:这种 shell 可能由某些自动化过程启动,不能直接从请求用户的输入,也不能直接输出结果给终端用户看。通常我们写的 shell 脚本都是非交互式的,通过 sh 直接运行该脚本文件。
login shell 和 non-login shell
login shell:取得 bash 时需要完整的登陆流程的,就称为 login shell。举例来说,我们登陆 tty1 ~ tty6 时,需要输入用户的账号与密码,此时取得的 bash 就称为 login shell
non-login shell:取得 bash 接口的方法不需要重复登陆的举动,比如我们登陆 Linux 后,启动终端 Terminal,此时那个终端接口并没有需要再次的输入账号与密码,那个 bash 的环境就称为 non-login shell 了。又或者你在原本的 bash 环境下再次使用 bash 这个命令,建立了一个 bash 子进程,同样的也没有输入账号密码,那第二个 bash (子程序) 也是 non-login shell 。
注意:non-login shell 不会读取/etc/profile 和~/.bash_profile,而是读取~/.bashrc 来应用新的环境变量。
判断当前 shell 是 login 还是 non-login shell,可以简单的执行如下命令:echo $0
- login shell 输出的结果类似 -bash 或 -su
- non-login shell 输出的结果类似 bash 或 su
关于 su 命令
su 命令一般是用于切换用户。但是 su root
和 su - root
是有区别的。
例如:su xjj
和 su -xjj
这两个都是切换到 xjj 用户。但是前者是以 non-login shell 的形式登陆,后者是以 login shell 的形式登录。
执行 su - xjj
执行 su xjj
因为 non-login shell 不会读取/etc/profile 和~/.bash_profile,而是读取~/.bashrc 来应用新的环境变量,所以会缺少一些变量。
我们应该使用 su -、su - root 或者 su -l root 以 login shell 方式切换至 root 用户,而不是 su 或者 su root 以 non-login shell 方式切换至 root 用户