第五章
shell的类型
bash sh zsh csh,在命令行中,使用echo $0可以查看当前使用的shell
shell的父子关系
输入bash进入子shell,可以无限套娃,退出使用exit; 使用ps --forest可以查看shell嵌套关系
查看进程列表
一系列命令可以通过()
括起来,表示是进程列表,会生成一个子shell来执行这些命令;
如:
echo $0; ls -alh; ps -ef;ps --forest;
和:
(echo $0; ls -alh; ps -ef;ps --forest;)
能看到层级是不一样的
探究后台模式
直接&,例如sleep 300&
,返回两条数据,第一条信息是方括号中的后台作业号。第二条信息是
后台作业的进程 ID
此时通过ps -ef可以看到这个运行中的sleep命令;
以及:通过jobs
可以查看到当前运行在后台模式中,所有属于当前用户的所有进程(作业)
jobs -l
还可以查看到后台运行进程的pid;
jobs列出的多个后台进程中,最近启动的进程以+表示,之前启动的进程前会有个-
协程
coproc
:命令为coproc command
,如coproc sleep 300
;此时jobs命令也可以查看协程的状态;
在子shell中执行后台命令格式:coproc COMMAND_NAME {}
理解外部命令和内建命令
使用type能区分出来是外部还是内建命令
history命令衍生,!!
可以查看最近几条命令
别名
alias -p查看所有别名
第六章 环境变量
全局环境变量
对于shell及子shell都是可见的,一般全大写
局部环境变量
局部环境变量只对创建它的 shell 可见
设置用户自定义变量
自定义的局部变量用的是小写字母,而系统环境变量用的都是大写字母
设置全局环境变量
创建全局环境变量的方法是先创建局部变量,然后再将其导出到全局环境中。
my_variable="I am Global now"
export my_variable
一般的写法是:export my_variable="I am Global Now"
修改子 shell 中的全局环境变量并不会影响父 shell 中该变量的值,子 shell 甚至无法使用 export 命令改变父 shell 中全局环境变量的值
删除环境变量
unset,注意使用unset时没有$ unset my_variable
对于环境变量的修改,只能维持到退出或重启系统
彻底修改环境变量
一般按一下顺序加载,可以直接修改文件,增加环境变量
$HOME/.bash_profile
$HOME/.bash_login
$HOME/.profile