1.路径与指令搜寻顺序
当我们下达一个指令,计算机都是要在内部搜寻这个指令对应的操作,然后再执行的。假如一个指令可以对应很多种操作,那么计算机该怎么执行?如果不理解? 那就举个栗子:
我们都知道系统里面其实有很多ls 指令,假如我们曾经 alias ls='ls -l'
,当我们在命令行内输入ls
,计算机是执行最原始定义的ls
还是ls -l
呢?所以这就关系到 指令搜寻顺序 了,一般指令运作的顺序可以这么看(简单了解就好):
- 以相对/绝对路径执行指令,例如「/bin/ls」或「./ls」;
- 由 alias 找到该指令来执行;
- 由 bash 内建的(builtin)指令来执行;
- 透过 $PATH 这个变量的顺序搜寻到的第一个指令来执行
2. bash 的进站与欢迎讯息
大家在登陆终端机接口一般都会有进站的欢迎信息,这个进站信息其实都是可以编辑的。
定制属于自己的进站画面:编辑这个文件/etc/issue
定制telnet远程登陆程序的登入画面:编辑这个文件/etc/issue.net
让使用者登陆后取得一些讯息:编辑这个文件/etc/motd(一定要以root的身份)
3.bash的环境配置文件
3.1 认识 login 与 non-login shell
- login shell: 取得 bash 时需要完整的登入流程的,就称为 login shell。
- non-login shell:取得 bash 接口的方法不需要重复登入的举动。
不理解?没关系,只要知道这两种shell读取的配置文件不一致也可以。
3.1-1 login shell 读取的文件(2个)
(1) /etc/profile
这是每个使用者登入取得bash时一定会读取的配置文件,所以如果想要帮所有使用者设定整体环境,就可以修改这份文档(这个文件设定的变量主要有:PATH,MAIL,USER,HOSTNAME,HISTSIZE,unmask-root默认022;一般用户为002)
除此以外,/etc/profile它还会去呼叫外部的设定数据,例如如下文档中的数据
-
/etc/profile.d/*.sh
它的意思是指/etc/profile.d/文档下的所有扩展名为sh 的文件,这个目录底下的文件规范了bash操作接口的颜色、语系、ll与ls指令的命令别名、vi 的命令别名、which 的命令别名等等。Tips : 如果你要帮所有使用者设定一些共享的命令别名时,可以在这个目录底下自行建立扩展名为.sh的文件,并将所需要的数据写入即可。
-
/etc/locale.conf
悄悄告诉你:这个文件实际上是由👆/etc/profile.d/*.sh中的/etc/profile.d/lang.sh呼叫进来的,是我们决定 bash 预设使用哪种语系的重要配置文件(eg: LANG/LC_ALL等变量的设定) -
/usr/share/bash-completion/completions/*
同样的,这个目录底下的内容都是👆/etc/profile.d/*.sh中的/etc/profile.d/bash_completion.sh这个文件载入的。我们使用[tab]进行命令补齐、档名补齐、指令的选项/参数补齐功能,都是在这个目录里找到相应的指令来处理的。
其实 bash 的 login shell 读取的整体环境配置文件其实只有/etc/profile,但是/etc/profile会呼叫出/etc/profile.d/文档下的所有扩展名为sh 的文件,而/etc/profile.d/文档下部分扩展名为sh的文件会继续往外呼叫出其他的配置文件,这就使得我们的bash操作接口变得非常友善~
(2)~/.bash_profile
bash在读完了整体环境设定的/etc/profile并呼叫其他配置文件之后,接下来会读取使用者的个人配置文件。按照优先顺序依次为:
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
注意:只会读取三个文件中的一个
通过cat 来看一下~/.bash_profile这个优先级最高的文件吧:
bash_profile一般都是这个内容
我们需要了解这份文档中的两个内容:
<1> PATH 这个变量
其实 PATH 在 /etc/profile 当中已经设定过了(看👆(1) /etc/profile),所以这里出现的PATH就以 累加的方式 ,增加 用户家目录下的 ~/bin 为额外的执行文件放置目录。所以你可以将执行文档放在自己HOME目录对应的目录下直接执行,而不用使用绝对/相对路径。
<2> if ... then ...
这是什么东西?这段话的内容是“判断HOME目录下的~/.bashrc是否存在,如果存在,则读入~/.bashrc的设定”
总结一下,整个login shell 的读取流程是这样的:
![](https://img.haomeiwen.com/i16632586/3f3c0b1c0d34f65e.png)
实线的方向是主线流程,虚线的方向则是被呼叫的配置文件。
Tips:
由于上面提到的这些配置文件都是在取得 login shell 的时候才会读取的配置文件,所以,如果你将自己的偏好设定写入对应文件后,通常要注销再登陆后,设定才会生效。这么做太麻烦了,可以使用命令行中输入source 配置文档名
的方法,不需要注销,便立即将刚刚设定的内容读进目前的环境中。
3.1-2 non-login shell 读取的文件
- ~/.bashrc
当我们取得 non-login shell时,该bash配置文件仅会读取~/.bashrc!
除此之外,CentOS 7.x 还会主动呼叫 /etc/bashrc,它会帮bash 定义下面的数据
1.依据不同的UID规范出 umask 的值
2.依据不同的UID规范出提示字符(PS1变量)
3.呼叫/etc/profile.d/*.sh的设定
Tip:
假如不小心把重要的~/.bashrc删掉了,补救措施:复制 /etc/skel/.bashrc到家目录,稍微修订一些你想要的内容,source 去呼叫一下~/.bashrc。可以作为一个填坑的方法~
3.2 其他一些影响bash操作的配置文件
- /etc/man_db.conf
相关作用:它规范了使用man
的时候, man page的路径去哪里寻找 - ~/.bash_history
相关作用:它记录历史命令,同时记录历史命令的数量与 HISTFILESIZE这个变数有关 - ~/.bash_logout
相关作用:文件记录了我们注销bash后,系统帮我们做完什么动作后才离开
网友评论