- shell是一种CLI(command - line interface,命令行界面),是一个时刻都在运行的复杂交互式程序。
- shell的类型:
在/etc/password文件中,在用户ID记录的第7个字段中列出了默认的shell程序。
(每个字段之间用:分割)
只要用户登陆到某个虚拟的控制台终端或者在GUI中启动终端仿真器,默认的shell就会开始运行。
一般情况下:默认的是bash shell
终端或者仿真器启动的默认交互shell是父shell,在CLI提示符后面输入/bin/bash命令或者其他等效的bash命令时,会创建一个新的子shell。
子shell也会拥有CLI提示符,等待命令输入。
exit命令不仅可以退出子shell,还能用来登出当前的虚拟控制台或者终端仿真器软件,只需要在父shell中输入exit,就可以从容地退出CLI了。
pwd;ls;cd /;pwd ls
(pwd;ls;cd /;pwd ls)
进程列表会生成一个子shell来执行对应的命令,而命令列表不会。
可以使用命令echo $BASH_SUBSHELL来查看是不是生成了子shell
(测试时可以将该命令加到命令列表或者进程列表的末尾)
命令返会0就代表没有生成子shell,为1或者大于1表示生成了子shell。
(pwd;(echo $BASH_SUBSHELL))
后台模式:运行命令的同时,还可以让出CLI以供他用。
要将命令置入后台模式,需要在命令的结尾加上 & ,如:
sleep 3000&
[1] 2212
同理可以将进程列表置入后台模式:如:
(pwd;ls;ls-l)&
协程:同时干两件事,在后台生成一个子shell,并在子shell中执行命令
使用命令coproc,如:
coproc sleep 10
[1] 2256
可以将协程和进程列表结合起来产生嵌套的子shell,如:
coproc (sleep 12,sleep 20)
内建命令和外部命令的区别在于前者不需要使用子进程来执行,它们已经和shell编译成一体。
可以使用type命令来查看某个命令是不是内建的。
有些命令同时有外部命令,和内建命令,使用type -a可以查看。这种命令执行时,如果想使用外部命令,那么输入对应路径即可。
which命令也可以查看,但它只显示外部命令
history命令
可以输入!!,来执行刚才使用过的那条命令。
还可以使用 ! 历史记录中命令编号来唤醒任何一条历史命令
alias
Linux发行版可能已经设置好了一些别名,所以可以使用alias -p来查看。
可以自己设置自己命令的别名
alias li="ls -li"
(注意的是,alias是内建命令,别名只会在它所被定义的shell进程中才有效)