楔子
学习笔记
which 、 whereis 、 file 与 whatis 命令可以给出文件和目录的相关信息。
which
用来查找某个命令的位置。例如
[root@localhost soft]# which nginx
/usr/sbin/nginx
通常在使用命令时,无需知道可执行文件所在的位置。根据对PATH变量的定义,可以直接使用/bin /usr/local/bin 目录下的命令
whersis
whereis与which命令类似,它不仅返回了命令的路劲,还能打印出其对应的命名手册以及源代码的路劲。
[root@localhost opt]# whereis nginx
nginx: /usr/sbin/nginx /usr/lib64/nginx /etc/nginx /usr/share/nginx /usr/share/man/man8/nginx.8.gz /usr/share/man/man3/nginx.3pm.gz
[root@localhost opt]#
whatis
whatis会输出指定命令的一行简短描述。
file
file - 确定文件类型
后台执行
以后台模式运行脚本
在后台模式中,进程运行时不会和终端会话上的STDIN STDOUT STDERR关联。
后台运行脚本
以后台运行脚本只要在命令后加个&符就可以了。
当&符 放到命令后时,它会将命令和bash shell分离开来,将命令作为系统中的一个独立的后台进程运行。
后台运行显示地第一行是[1] 64687
, 方括号中的数字是shell分配给后台进程的作业号。下一个数字是Linux系统分配给进程的进程ID(PID)。
[root@localhost t]# cat test01.sh
#!/bin/bash
# Test running in the background
#
count=1
while [ $count -le 10 ]
do
sleep 1
count=$[ $count + 1 ]
done
[root@localhost t]# ./test01.sh &
[1] 64687
[root@localhost t]#
执行完毕后,终端上会显示一条消息如下
[root@localhost t]#
[1]+ Done ./test01.sh
在终端中使用后台进程时,每一个后台进程都和终端会话(pts/0)终端联系在一起,如果终端会话退出的话,那么后台进程也会随之退出
在非控制台下运行脚本
如果想要终端会话中启动运行shell脚本。然后让脚本一直以后台模式运行到结束。即使退出了终端会话。可以使用nohup命令实现
nohup 命令运行了另外一个 命令来阻断所有发送给该进程的SIGHUP信号。这会在退出终端会话是阻止进程退出。
nohup命令的格式如下:
nohup ./test01.sh &
[root@localhost t]# nohup ./test01.sh &
[1] 65029
[root@localhost t]# nohup: ignoring input and appending output to ‘nohup.out’
和普通后台进程一样,shell命令会给命令分配一个作业号,Linux系统会为其分配一个PID号。区别在于,当使用nohup命令时。如果关闭该会话,脚本会忽略终端会话发过来的SIGHUP信号。
由于nohup命令会解除终端与进程的关联,进程也就不再同STDOUT和STDERR联系在一起。为了保存该另的产生的输出,nohup命令会自动将STDOUT和STDERR的消息重定向到一个名为 nohup.out 文件中。
作业控制
启动、终止、停止以及恢复作业的这些功能被称为作业控制
。通过作业控制,就能完全控制shell环境中所有进程的运行方式。
查看作业
作业控制中的关键命令是jobs命令。job命令允许查看shell当前正在处理的作业。
[root@localhost t]# jobs
[1]+ Running sh test_job.sh &
jobs命令参数
参数 | 描述 |
---|---|
-l | 只列出进程的PID以及作业号 |
-n | 只列出上次shell发出的通知后改变了状态的作业 |
-p | 只列出作业的PID |
-r | 只列出运行中的作业 |
-s | 只列出以停止的作业 |
重启停止的作业
Ctrl+Z
可以 终止作业
bg命令 加上作业号 可以重启作业
要以前台模式重启作业,可用 带有作业号的fg命令:fg 作业号
[root@localhost t]# sh test_job.sh
Script Process ID: 65508
Loop #1
^Z
[1]+ Stopped sh test_job.sh
[root@localhost t]# bg
[1]+ sh test_job.sh &