Linux 下的用户档案文件

使用 Linux 系统,当有环境变量需要在用户登录时自动被设定时,通常需要对用户档案文件进行编辑。常见的档案文件有 /etc/profile、/etc/bashrc、~/.profile、~/.bash_profile、~/.bashrc 等。

1. /etc/profile。此文件为系统内所有用户设置环境信息。当用户登录系统时,该文件被执行。并且它会从 /etc/profile.d 目录下的配置文件中收集其它的 shell 设置。需要注意的是,在 /etc/profile 里设置系统环境变量时,路径末尾不能以 / 结尾,否则将导致整个 PATH 变量出错。

2. /etc/bashrc。此文件为系统内所有使用 bash shell 的用户设置环境信息。当 bash shell 被打开时,该文件被执行。如果系统是 Ubuntu 或者 Debian 的话, 则不存在 /etc/bashrc 而是 /etc/bash.bashrc。

3. ~/.profile。看完本文后自行补上。

4. ~/.bash_profile。系统内的每个 bash shell 用户都可使用该文件录入专用于自己的 shell 设置。当用户登录时,该文件被执行。默认情况下,它设置一些环境变量,并执行该用户的 .bashrc 文件。

5. ~/.bashrc。系统内的每个 bash shell 用户都可使用该文件录入专用于自己的 shell 设置。当每次打开新的 bash shell 时(显然,用户登录也包括在内),该文件被执行。

6. ~/.bash_logout。当每次退出 bash shell 时,该文件被执行。

可见,/etc/profile 中设定的变量是全局的,可以作用于任何用户,而 ~/.bashrc 等中设定的变量是局部的,可以继承 /etc/profile 中的变量,作用于相应的用户自身。我们可以审视一下 Ubuntu 18.04 和 CentOS 7.7 中,/etc/profile 文件开头的注释对自己的阐述。在 Ubuntu 18.04 里,/etc/profile 开头写道:

从中可以得出需要警惕的点:也许存在某些 shell 是连 /etc/profile 这个文件也不理会的。CentOS 7.7 的说明会略长一些:

在这里,醒目地提示了大家两点,一是 /etc/profile 里主要是存放环境变量,函数和别名应该存放到 /etc/bashrc 文件中;二是不建议直接修改本文件,更应该在 /etc/profile.d 目录下创建自己的定制脚本。

必须指出,如果用户使用了 bash 以外的 shell,则上述含有 bash 字样的配置文件可能均无法生效,要寻找特定 shell 下相应的替代配置文件。拿 zsh 为例,则其按照配置的作用时机等条件做了更细的区分,在 /etc 下就有 zshrc、zshenv、zprofile、zlogin、zlogout 等文件,在 ~/ 下则是 .zshrc 文件。由此也可以得出一个大致的推论,这些配置文件名,如果其中含有特定的 shell 的名称/简称,则与该 shell 相关,如果有 profile 字样,则与用户登录相关。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注