理解Shell(马马虎虎)

  • shell是一种CLI(command - line interface,命令行界面),是一个时刻都在运行的复杂交互式程序。
  • shell的类型:
/etc/password文件中,在用户ID记录的第7个字段中列出了默认的shell程序。
(每个字段之间用:分割)
只要用户登陆到某个虚拟的控制台终端或者在GUI中启动终端仿真器,默认的shell就会开始运行。
一般情况下:默认的是bash shell
//(还会有另一个默认的shell是/bin/sh,作为默认的系统shell,用于那些需要在启动时使用的系统shell脚本)
//并不是必须一直要使用默认的shell,可以使用发行版中的所有可用的shell,只要要输入文件名启动对应的shell就行。
//之后可以使用exit来退出启动的shell
  • 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。
//还可以嵌套使用,创建子shell的子shell,如:
(pwd;(echo $BASH_SUBSHELL))
  • 其他的shell用法—协程、管道
后台模式:运行命令的同时,还可以让出CLI以供他用。
要将命令置入后台模式,需要在命令的结尾加上 & ,如:
sleep 3000&
[1] 2212
//将命令置入后台模式之后,返回CLI提示符之前,会返回两条信息,
//如上:一个代表后台作业号,一个代表该后台作业的进程ID,可以使用jobs命令来查看后台作业信息
//jobs -l还会显示更多信息
同理可以将进程列表置入后台模式:如:
(pwd;ls;ls-l)&

协程:同时干两件事,在后台生成一个子shell,并在子shell中执行命令
使用命令coproc,如:
coproc sleep 10
[1] 2256
//可以发现使用coproc之后会启用了一个后台作业
可以将协程和进程列表结合起来产生嵌套的子shell,如:
coproc (sleep 12,sleep 20)
  • shell的内建命令
内建命令和外部命令的区别在于前者不需要使用子进程来执行,它们已经和shell编译成一体。
可以使用type命令来查看某个命令是不是内建的。
有些命令同时有外部命令,和内建命令,使用type -a可以查看。这种命令执行时,如果想使用外部命令,那么输入对应路径即可。
which命令也可以查看,但它只显示外部命令

history命令 //通常会显示最近1000条执行的命令。
可以输入!!,来执行刚才使用过的那条命令。
//输入!!执行之后,会先显示刚才执行的命令,然后再执行。
还可以使用 ! 历史记录中命令编号来唤醒任何一条历史命令

//命令历史记录被保存在隐藏文件.bash_history中,位于用户的主目录。
//默认情况下:历史命令记录先存放在内存中,shell退出之后才被写到历史文件中
//可以使用history -a来强行写入(但是注意的是,在history -a执行之后执行的那些命令,这次依然没有写入进去)

alias //该命令可以给命令取别名
Linux发行版可能已经设置好了一些别名,所以可以使用alias -p来查看。
可以自己设置自己命令的别名
alias li="ls -li"
(注意的是,alias是内建命令,别名只会在它所被定义的shell进程中才有效)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值