一. ~/.bashrc, ~/.bash_profile, /etc/bashrc,/etc/profile
系统会在启动的时候加载 ~/.bashrc, ~/.bash_profile, /etc/bashrc,/etc/profile 脚本 中的bash配置
- (1) /.bashrc和/etc/bashrc负责bash shell的配置加载
- /.bashrc是用户级
- /etc/bashrc是系统级
- (2)~/.bash_profile 和 /etc/profile负责系统配置的加载
- ~/.bash_profile是用户级
- /etc/profile是系统级
- (3) 他们的执行顺序
/etc/profile -> (~/.bash_profile | ~/.bash_login | ~/.profile) -> ~/.bashrc -> /etc/bashrc -> ~/.bash_logout
二.source,. ,sh,bash,./执行命令的区别
-
source就等效于.执行脚本,如执行在当前目录下的file.sh则有. ./file.sh,它们当前shell中执行脚本,可以修改在当前shell中定义的变量。
-
sh,bash,./执行脚本,会产生一个子shell去执行,不能修改在当前shell中定义的变量。
-
source一般用于刷新系统配置文件如~/.bashrc ,/etc/profile等。这样就可以无需等待系统启动时刷新
-
子shell和父shell在pstree中的关系
解释:登录用户首先为login创建了一个进程,bash为login的子进程,su是bash的子进程…
因为su和pstree都是外部命令所以执行这些命令都会先为其创建子进程,而cd这是内置命令执行时不会创建子进程
三.全局变量和局部变量
1.显示变量
-
set 查看全局和局部变量,局部指的是当前shell中定义的变量,全局是指系统变量和设置
-
env只显示全局变量
2.删除变量
- unset可以删除全局或局部变量,但是如果变量是放在系统配置文件内如~/.bash_profile,那么在重
启后变量依然会重新加载
3.添加变量
- 注意两点
-
1.定义变量时要注意是否使用export
export 变量名=XXX 表示定义一个变量,而且该变量在所有的子shell中也生效。如果不加export则只在父shell中生效 -
2.在~/.bash_profile和 ~ /.bashrc中定义变量是局部的,只属于当前用户(即在其他用户的终端是没有定义的),在/etc/profile 和/etc/bashrc中定义变量是全局的
-
三.为用户添加别名
通过在~/.bashrc中添加if[ -f ~/.bash_aliases ]来对该用户进行别名的设置