bash初探与PATH详解
1.认识bash这个shell
在/etc/shells里面记录有本机提供的shell,这些shell本身是二进制可执行文件。而/etc/passwd可以查找固定用户对应的启动进入的shell,使用type可以查看bash命令的别名等信息,使用alias可以进行命令的别名。
1.1shell变量功能
1.1.1变量的设置规则
1)变量用=赋值(在终端中赋值的变量会在终端重启后消失!!!,因为这个进程结束了)
2)等号两边不能直接用空格符,若有空格需要用单引号或者双引号
双引号内的字符保持原有的特性:“$pwd”表示当前路径
单引号内的字符为一般字符,用以保护空格和特殊字符避免受到shell的特殊解释 :
3)可使用转意字符/将特殊字符转换成一般字符
4)在一串命令中,还需要调用其他命令提供信息,可以使用反单引号~或者$
Eg:version=$(uname-r) then echo $version
5)为了增加变量内容,则可以使用$name累加内容
Eg:PATH=”$PATH”:/home/bin
6)该变量需要其他子进程执行,需要用export来使变量变成环境变量
7)大写为系统变量,小写为用户变量
8)使用unset取消变量
使用PATH=$PATH:/home/bin
PATH=”$PATH”:/home/bin
PATH=${PATH}:/home/bin
效果是一样的,但最后一个最好
1.1.2环境变量的功能:
注意:自定义变量就是set命令所显示的变量仅仅在当前进程可用,即使在子进程也不可以。而环境变量是可以在子进程使用的。
1.2命令别名与历史变量
1.2.1命令别名设置:alias,unalias
注意alias在终端中直接设定是保存在内存之中的,不会写入到文件;所以打开另外一个终端并不会生效.
1.3bashshell的操作环境
1.3.1路径与命令查找顺序
命令的查找执行顺序:
1)以相对、绝对路径来执行命令:例如“/bin/ls”或者“./ls”(定向执行命令)
2)以alias找到该命令来执行(保证名可以执行别名)
3)由bash内置的(builtin)命令来执行
4)通过$PATH这个变量的顺序找到第一个命令来执行
通过type可以查找某个命令具体是来自于哪个地方,通过type–a可以查找该命令的执行顺序。
1.3.2bash的登录与欢迎信息:/etc/issue,/etc/issue.net,/etc/motd
1.3.3bash的环境配置文件
所有的配置要在写入配置文件以后,才能够保存在下一次使用。
Login与non-loginshell
Loginshell会读取的两个配置文件:
(1)/etc/profile:系统整体设置,最好不要修改,它会根据用户id决定不同的配置
(2)~/.bash_profile或~/.Bash_login或者~/.profile:属于个人设置
/etc/profile(loginshell才会读取)
该文件设置的变量主要有:PATH/MAIL/USER/HOSTNAME/HISTSIZE
调用的外部数据有:
/etc/inputrc
/etc/profile.d/*.sh
Bash操作接口的颜色,语系、ll与ls命令的别名、vi的命令别名、which的命令别名等。如果你需要帮所有用户设置一些共享的命令别名时,可以在这个目录下创建拓展名为.sh的文件,并将所需要的数据写入即可
/etc/sysconfig/i18n
~/.bash_profile(loginshell才读取)
Bash在读完整体配置以后,会依次读取个人配置:~/.bash_profile ~/.bash_login ~/.profile(这三个文件只会读取一个,就前原则)
下面是loginshell的配置文件读取流程:
~/.bashrc(non-loginshell会读取)
其他相关配置文件
/etc/man.config:主要是MANPATH这个变量,~/.bash_history和~/.bash_logout
注意:每次重新打开终端的时候,.bashrc会自动执行一次,而.bash_profile不会。因为~/.bash_profile 是交互式、login 方式进入 bash 运行的
~/.bashrc 是交互式 non-login 方式进入 bash 运行的
2.PATH详解
从第一部分中,我们已经知道bash配置文件的读取流程是/etc/profile---->~/.bash_profle(~/.bash_login)(~/.profile)。如果需要设置对全体用户都可用的path,我们可以在/etc/profile中设置,反之,在后面三个文件中设置。设置完成后,重新启动终端或者直接source .filename就可以使用了。