【linux学习笔记】bash学习之login shell与non-login shell(source命令)

login shell:取得bash时需要完整的登录流程的,就称为login shell。比如,你登录tty1~tty6,需要输入自己用户名和密码,此时取得的bash就称为【login shell】。

non-login shell: 取得bash接口的方法不需要重复登录的举动。比如:当你在原来的bash环境下再次下达bash命令,此时不需要输入用户名密码,那第二个bash(子程序)就是non-login shell。

这两个取得bash的情况中,读取的配置文件数据不一样。


login shell

一般来说,login shell其实只会读取两个配置文件:
1、/etc/profile:这是系统整体的设定。
2、~/.bash_profile或~/.bash_login或~/.profile:属于使用者个人设定。

下边说一下这两个档案。
1、/etc/profile(login shell才会读)
可以用vim去读一下/etc/profile的内容。这个文件主要是利用使用者的标识符(UID)来决定很多重要的变量数据,这也是每个使用者登陆取得bash时一定会读取的配置文件!这个档案设定的变量主要有:

·PATH:会依据 UID 决定 PATH 变量要不要含有 sbin 的系统指令目录;
·MAIL
·USER:根据用户用户名来设定这个变量
·HOSTNAME:依据主机癿的hostname 指令决定此一变量内容;
·HISTSIZE:历史命令记录笔数。

/etc/profile不止做这个,它还会呼叫外部的设定数据。
如:
·/ect/inputrc

这个档案设定的是bash的热键、【tab】键要不要有声音这些数据。一般不需要修改

·/ect/profile.d/*.sh

只要是在/etc/profile.d/这个目录内,并且扩展名为.sh,使用者有r权限,那么这个档案就会被/etc/profile呼叫进来。在CentOS中,这个目录下的档案规范了bash操作接口的颜色、语系、ll与ls指令的命令别名、vi的命令别名、which的命令别名等等。如果你需要给所有使用者设定一些共享的命令别名,你可以在这个目录下边自行建立.sh的档案。

·/etc/sysconfig/i18n

这个档案其实是由/etc/profile.d/lang.sh呼叫进来的。这是决定bash预设使用哪种语系的重要配置文件。

说了这么多,只要记得bash的login shell所读取的整体环境变量文件其实只有/etc/profile,但是它会呼叫其他的配置文件就行了。

2、~/.bash_profile(login shell才会读)
bash在读完了整体环境设定的/etc/profile并呼叫其他配置文件后,接下来则会读取使用者个人的配置文件。在login shell的bash环境中,所读取的偏好配置文件主要有三个,依序分别为:
① ~/.bash_profile
②~/.bash_login
③~/.profile
其实bash的login shell只会读取上面档案中的其中一个,读取的顺序就是按照上面的顺序。也就是说如果~/.bash_profile存在,无论其他两个档案存不存在,都不会被读取。看一下CentOS 6.8普通用户下的~/.bash_profile。

[lovebell@iZwz9gjh3pbz2k2hin7cg8Z ~]$ cat .bash_profile 
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

# User specific environment and startup programs

PATH=\$PATH:$HOME/bin

export PATH

这个档案里边设定了PATH这个变量!而且还使用了export将PATH变成环境变量!
由于PATH已经在/etc/profile设定过,所以这里以累加的方式添加了用户home目录下的~/bin为额外的执行文件放置目录。

if…then…的那一段内容是指【判断~/.bashrc是否存在,如果存在则读取~/.bashrc的设定】。【. ~/.bashrc】中【.】的意思其实就是source命令。
再来看整个login shell的读取流程:

这里写图片描述
实线的方向是主线流程,虚线的方向是被呼叫的配置文件。可以看出来,在CentOS的login shell环境下,最终被读取的配置文件是【~/.bashrc】这个档案,所以,将自己的设定写入该档案即可。

source命令

由于/etc/profile与~/.bash_profile都是在取得login shell的时候才会读取的配置文件,所以,如果修改之后,一般都是注销再登陆后才能生效。那么能不能直接生效呢,那就需要用到source命令了。
用法:

source filename

比如:

source /etc/profile

可以利用source或者小数点【.】可以将配置文件的内容读取到目前的shell环境中。举例来说,我修改了/ect/profile,那么不需要注销,直接source /ect/profile就可以直接把刚刚修改的内容读取到目前的环境中。

non-login shell

取得non-login shell时,这个bash配置文件只会读取~/.bashrc这个档案
·~/.bashrc(non-login shell会读取)

首先先看一下CentOS预设的~/.bashrc的内容

[lovebell@iZwz9gjh3pbz2k2hin7cg8Z ~]$ cat ~/.bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
    . /etc/bashrc
fi

# User specific aliases and functions

这是一个普通用户下的【~/.bashrc】,root用户和这个稍微有点区别,它还规范了一些命令别名。此外,CentOS还会主动呼叫/etc/bashrc这个档案,因为这个档案帮助bash定义出底下的数据:

①依据不同的UID规范出umask值
②依据不同的UID规范出提示字符(其实就是PS1变量,可以用echo $PS1查看)
③呼叫/etc/profile.d/*.sh的设定

需要注意的是,这个/etc/bashrc是CentOS特有的(其实是Red Hat特有的),其他不同的distribution可能放到的不同的档名里边了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值