【路径与命令的执行顺序】
在 Shell 中,一条命令的执行顺序为:
- 以相对/绝对路径执行命令,例如:
/bin/ls
- 由
alias
找到该命令执行 - 由 Shell 内置命令
builtin
来执行 - 通过 PATH 环境变量内路径的顺序找到的第一个命令来执行
【环境配置文件】
环境配置文件
在 Linux 系统中,存在一些环境配置文件,Shell 在启动时直接读取这些配置文件,以规划好 Shell 的操作环境
对于命令别名、自定义变量等,在注销 Shell 时就会失效,若想让他们永久生效,就需要将这些设置写入配置文件中
在通过 tty1~tty6
登录,需要输入用户名与密码进行验证,之后取得的 Shell 就被称为 login shell,也就是说在取得 Shell 时,需要完整登录流程的就是 login shell
而以 X Window 登录,再以 X 的图形界面启动终端机,此时的终端接口不需要输入用户名与密码,这样取得的 Shell 就被称为 non-login shell
对于 login shell 与 non-login shell 来说,两者读取的配置文件不一致
login shell
配置文件读取流程
login shell 只会读取以下两个配置文件:
/etc/profile
:系统整体设置,不建议进行修改~/.bash_profile
:用户个人设置,要想让命令别名、变量等永久生效,就需要写入该文件
/etc/profile
在 login shell 的 bash 环境中,该文件是每个用户登录取得 Shell 时一定会读取的配置文件,若想修改用户的整体环境,就对该文件进行修改,该文件中主要变量如下表:
变量 | 说明 |
---|---|
PATH | 依据 UID 决定是否包含 sbin 的系统命令目录 |
/var/spool/mail/账号名 |
|
USER | 用户账号 |
HOSTNAME | 主机的 hostname |
HISTSIZE | 历史命令记录条数 |
除上述变量外,/etc/profile
文件还会调入下述数据:
/etc/inputrc
:Shell 热键、[Tab] 有无声音等数据/etc/profile.d/*.sh
:规定了现有 Shell 操作接口的颜色、语系、命令别名等/etc/sysconfig/i18n
:决定 Shell 默认使用的语系配置文件
~/.bash_profile
Shell 在读完整体环境设置的 /etc/profile
并借此调用其他配置文件后,接下来会读取用户的个人配置文件
在 login shell 的 bash 环境中,所读取的用户个人配置文件其实主要是以下三个:
~/.bash_profile
~/.bash_login
~/.profile
实际上,login shell 只会读取上述三个文件中的一个,读取顺序是依照上述的顺序
也就是说,如果 ~/.bash_profile
存在的话,无论剩余两个文件是否存在,都不会读取,只有当 ~/.bash_profile
不存在时,才会读取 ~/.bash_login
之所以有这三个文件,是 bash 为了照顾从其他 Shell 环境转换过来的用户的习惯
打印 ~/.bash_profile
可以发现其分为两部分:
- 读取
~/.bashrc
- 处理个人化设置
non-login shell
当取得 non-login shell 时,只会读取 ~/.bashrc
文件
打印 ~/.bashrc
可以发现其分为两部分:
- 用户个人设置
- 整体环境设置
需要注意的是,root 用户与一般用户的 ~/.bashrc
有所不同,但同样都是分为上述的两部分
source 命令
由于 /etc/profile
和 ~/.bash_profile
都是在取得 login shell 后才会读取的配置文件,因此如果将自己的偏好写入上述两个文件后,需要注销再登录后才会使得设置生效
使用 source 配置文件名
命令可以直接使得修改后的配置文件生效,避免了繁琐的注销登录流程