路径与命令查找顺序
一个命令可能会有多个版本,在多个地方存在,具体应该执行哪一个
比如:ls,pip,特别是当系统中有多个python版本的时候,对应pip有多个版本,每次执行的是哪个版本
1.若是相对路径或者绝对路径的命令则直接执行
2.由alias找到该命令来执行
3.由bash内置的builtin命令来执行
4.通过$PATH这个变量的顺序查找到的第一个命令执行
bash的登录与欢迎信息
/etc/isssue
用来存储bash的登录信息,使用其特有的表示码
还有一个文件 /etc/issue.net 这是用来给远程登录显示的画面
/etc/motd
用来存储用户登录之后才会显示的一些信息
bash的环境配置文件
login shell与non-login shell
login shell取得bash时需要完整的登录流程就称为login shell 如:tty1-tty6登录的终端
non-login shell就是不需要重复登录的操作就可以启用bash 如:i)窗口界面打开的终端,ii)bash环境下再次执行bash命令打开的bash子进程
login shell包括/etc/profile系统的整体设置;~/.bash_pfofile或~/.bash_login或~/.profile属于用户个人设置,需要自己添加数据
/etc/profile
这里设置的时所有用户的整体环境,其中包含PATH、MAIL、USER、HOSTNAME、HISTSIZE等
除了设置这些变量,还要调用外部的配置文件:/etc/profile.d/*.sh(这一系列包括bash操作界面的颜色,语系,ll和ls的命令别名,vi的命令别名,which的命令别名等),/etc/locale.conf,/usr/share/bash-completion/completions/*(命令和文件名补齐、选项/参数补齐功能)
总之,整体环境的配置文件只有/etc/profile,但是这个文件还会调用其他的配置文件。
bash在读完了整体环境设置的/etc/profile之后会读取用户的个人配置文件,个人配置文件主要为以下三个
~/.bash_profile
~/.bash_login
~/.profile
这三个是按照顺序读取的,当前面存在的时候后面的就不会被读取,最终只会读取一个
在我的主机中,~/.bash_profile与~/.bash-login都不存在,
只有~/.profile
可以看到~/.profile这个脚本会调用$HOME/.bashrc这个脚本
~/.bahs_profile会调用~/.bashrc在最终调用的配置文件为/etc/bashrc
通常需要注销再登录才能使配置生效,使用source 配置文件名 来避免注销再登录。
当多个环境时,可以其中多种环境配置文件,分别souce激活即可。
如Ananconda下python的虚拟环境配置,激活和关闭命令:source activate work
source deactivate work
~/.bashrc
这是non-login shell时,bash配置文件仅会读取~/.bashrc,自己使用的alias rm='rm -i'就是添加在这里。
其他配置文件
/etc/man_db.conf
规定了使用man的时候,man page的路径到哪里去寻找
~/.bash_history
存储历史命令,可以存储多少条命令则与HISTSIZE有关
~/.bash_logout
记录了当注销bash后,系统再做什么操作后才离开
终端的环境设置
stty
set
参考:鸟哥的Linux私房菜(第四版)