10.4 Bash Shell(壳)的操作环境
Linux系统启动的时候就会有一些配置信息展示给我们,在用户登录成功后,也会有一些系统告知信息弹出;此外,就像我们设置的环境变量,以及alias后给一些命令取的别名之类,能不能在登陆的时候就主动的帮我们设置好?其实这些都是一些配置文件配置的,又分为了系统配置以及个人个性配置,不同点就仅仅在于配置文件所放的位置不一样。
10.4.1 路径与指令搜索的顺序
如果你要知道你所操作的命令行,例如你输入了ls,你想知道到底是哪个ls在发挥作用。有以下一个基础顺序:
- 以绝对路径或者相对路径执行命令 eg:‘/bin/ls’ or ‘./ls’
- 用alias ls找到该命令来执行 (个人觉得这一个方式比较方便);
- 由bash内置的(builtin)指令来执行;
- 通过$PATH这个变量的顺序搜寻到的第一个指令来执行。
你会发现通常是先alias,再是builtin,最后是通过$PATH这个环境变量搜寻。
10.4.2 bash的进站与欢迎讯息
进站也就是CentOs,Linux嘛,启动的时候,就会弹出来的信息;这个路径是在/etc/issue。
欢迎讯息是在:/etc/motd,在登陆有显示的信息;(登录后要显示什么内容,改在里面就行了)
可以通过cat去查看里面的内容:(如下贴图表示issue内各代码定义)
10.4.3 bash的环境配置文件
首先区别一下login shell 和non-login-shell的区别:
login shell:取得bash需要完整的登录流程,就成为login shell。
non-login shell:取得bash接口的方法不需要重复登录的举动,举例来说在原本bash基础上再bash了一次,不用输入账号密码,就是non-login shell。
因为他们两个取得bash的情况不一致,所以要区别一下。
login shell 其实只会读取这两个配置文件:
第一条/etc/profile里面的内容最好不要修改,除非你知道你在干嘛。
然后~/.bash_profile里面的内容,则是个人设置,要改个人的数据,就写入到里面去。
/etc/profile还会调用外部的设置数据;在CentOs的默认情况下:会依序调用如下数据:
/etc/profil.d/*.sh;使用者能够具有r的权限,那么该文件就会被/etc/profile调用进来。如果你需要给所有的使用者定义一些特别的命令别名时,你就可以在这个目录下面自行创建扩展名为.sh的文件,并且把数据写入其中。
我们再来看看个人偏好的配置文件 ~/.bash_profile(login shell才会读)
bash在读完了整体环境设置的/etc/profile并且调用过其他配置文件后,接下来就是读个人配置文件。在login shell的bash环境中,读取的个人配置文件其实主要有三个,分别是:
他们三个的关系是,如果第一个存在,那么读第一个,不会去读另外两个,如果第一个不存在,第二个存在,就读第二个,不读第三个;第三个同上。
整个login shell的配置文件读取流程:
实线的的方向是主线流程, 虚线的方向则是被调用的配置文件! 从上面我们也可以清楚的知道, 在CentOS 的 login shell 环境下, 最终被读取的配置文件是“ ~/.bashrc ” 这个文件喔! 所以, 你当然可以将自己的偏好设置写入该文件即可。 下面我们还要讨论一下 source 与 ~/.bashrc 喔!
source:读入环境配置文件的指令
在上面所诉的环境配置中,都必须是要登出登录,方能使配置生效,那有没有什么方法,可以不登录登出呢,那就是source。
(跟执行那个操作很像)可以直接将配置文件内容读到shell环境中。
~/.bashrc(non-login shell会读)
这种非登录情况,仅仅就只会去读取~/.bashrc中的内容。
其他配置文件会影响到使用bash操作的情况:
/etc/man_db.conf:
这个文件描述了使用man时,man去哪里找指令,去哪里查看数据的路径位置。
那么什么时候要来修改这个文件呢? 如果你是以 tarball 的方式来安装你的数据, 那么你的 man page 可能会放置在 /usr/local/softpackage/man 里头, 那个 softpackage 是你的套件名称, 这个时候你就以手动的方式将该路径加到 /etc/man_db.conf 里头, 否则使用 man 的时候就会找不到相关的说明文档。
~/.bash_history
~/.bash_logout:
我是觉得这个还挺有用,你可以配置这个文件,让在登出bash的时候,系统帮你做完一些动作再离开。可以满足登出时去做一些操作。
10.4.4 终端机的环境设置:stty,set
你可以使用stty -a来查看目前一些按键实现功能的内容:
几个重要的代表:
如果你想要修改其他的按键实现什么功能你可以:
stty erase ^h
这样ctrl + h就可以实现以前的ctrl+d了。但是记得慎重修改。
下面给一个汇总:
10.4.5 万用字符与特殊符号
列出一些常用的万用字符:
- *:代表“0个到无穷个”任意字符
- ?:代表“一定有一个”任意字符
- []:代表“一定有一个在括号内”。例如[abcd],代表一定有一个字符在abcd中任何一个。
- [-]:代表“在编码顺序内的所有字符”。例如[0-9],代表一定有0-9其中的一个数字在
- [^]:代表一定没有某个字符,例如[^abc],代表一定有一个字符只要是非abc,其他的都能接受。
下面列举写有趣的练习:
除了万用字符外,还有很多有趣的字符:
总结完毕!