》shell的类型
在/etc/passwd中第七个字段列出了默认的shell程序
使用软连接将默认的系统shell设置为bash shell
示例:
ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Oct 15 2017 /bin/sh -> bash
》shell的父子关系
所启用的默认的交互shell,是一个父shell;
在CLI提示符后输入/bin/bash命令或其他的等效bash命令时,会创建一个新的shell程序,被称为子shell。
ps -f 显示shell进程
ps --forest 展示了这些子shell之间的嵌套关系
bash中可用的命令行参数:P90
》进程列表
可以在一行中指定要依次运行的一系列命令,只需要在命令之间加入分号(;)即可。
示例:
pwd ; ls ; cd /etc ; pwd ;ls ;echo $BASH_SUBSHELL
命令列表要想成为进程列表,这些命令需用包含在括号里
(pwd ; ls ; cd /etc ; pwd ;ls ;(echo $BASH_SUBSHELL))
echo $BASH_SUBSHELL:返回值大于0,则表示存在子shell
》探索后台模式
sleep 3 说明:将会话暂停3秒,然后返回shell提示符
将命令置于后台模式,可以在命令末尾加上字符&
示例:
sleep 3&
再用ps -f命令查看
jobs:用来显示后台作业信息,可以显示出当前运行在后台模式中的所有用户的进程(作业)
[1]+ Running sleep 3 &
表示运行状态
[1]+ Done sleep 3
表示作业完成,Done表示结束状态
创建备份文件是有效利用后台进程列表的实用的例子:
(tar -cf Rich.tar /home/rich ;tar -cf My.tar /home/christine)&
》协程
在后台生成一个子shell,并在这个子shell中执行命令
示例:
coproc sleep 3
或者
coproc My_job { sleep 3; }
注意:生成子shell的成本不低,速度慢。
》理解shell的内建命令
》外部命令(非内建命令)
也称为文件系统命令,是存在于bash shell之外的程序。
外部命令通常位于/bin、/usr/bin、/sbin、/usr/sbin中
ps就是一个外部命令。可以使用which和type命令找到它
示例:
[root@joincomputer usr]# which ps
/usr/bin/ps
[root@joincomputer usr]# type -a ps
ps is /usr/bin/ps
当外部命令执行时,会创建出一个子进程。这种操作称为衍生。
》内建命令
区别在于:内建命令不需要使用子进程来执行
cd和exit命令都内建于bash shell 。可以用shell命令来了解某个命令是否是内建
[root@joincomputer usr]# type cd
cd is a shell builtin
要查看命令的不同实现,使用-a参数
[root@joincomputer usr]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
type -a显示了每个命令的两种实现;which命令只显示出外部命令文件
》history命令
查看最近使用过的命令列表
》!!
唤出刚刚用过的那条命令来使用(会显示出刚刚的命令,然后再执行)
注意:命令历史纪录被保存在隐藏文件.bash_history中,位于用户的主目录内。历史纪录是先放在内存中,当shell退出时才被写入历史文件
shell推出前强制写入.bash_history中,可以使用history -a命令(也可以理解为命令保存)
唤回历史纪录中的任意一条命令,输入!和编号
示例:
359 cd /
360 lsof -i:22
361 cd usr/
362 ls
363 yum install lsof
364 lsof -i:22
365 lsof -i:8989
366 lsof -i:3306
367 which ps
368 type -a ps
369 clear
370 type -a cd
371 type cd
372 pwd
373 history
374 cat .bash_history
375 cd /root
376 ls
377 du -sh*
378 du -sh *
379 cat .bash_history
380 history -a
381 cat .bash_history
382 history
[root@joincomputer ~]# !359
cd /
[root@joincomputer /]#
》命令别名
查看当前可用的别名:alias -p
创建属于自己的别名:alias li='ls -li'