Linux操作系统--常用命令(十六)

一、kill 命令

Linux kill命令用于删除执行中的程序或工作。

信号编号 信号名 含义
0 EXIT 程序退出时收到该信息。
1 HUP 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2 INT 表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3 QUIT 退出。
4 ILL 非法指令(ANSI)
5 TRAP 跟踪陷阱(POSIX)
6 IOT IOT 陷阱(4.2 BSD)
7 BUS 总线错误 (4.2 BSD)
8 FPE 浮点异常(ANSI)
9 KILL 杀死进程,即强制结束进程。
10 USR1 用户定义信号1(POSIX)
11 SEGV 无效的内存段访问(ANSI)。
12 USR2 用户定义信号2(POSIX)
13 PIPE 写在没有读卡器的管道上,管道破裂(posix)
14 ALRM 闹钟(POSIX)
15 TERM 正常结束进程,是 kill 命令的默认信号。
16 STKFLT Linux堆栈错误
17 CHLD 子进程已停止或退出,已更改(POSIX)
18 CONT 如果停止,则继续执行(posix)
19 STOP 停止执行(无法捕获或忽略)(POSIX)
20 TSTP 终端停止信号(POSIX)
21 TTIN 试图从tty(posix)读取的后台进程
22 TTOU 试图写入的后台进程,到tty(posix)
23 URG Urgent condition on socket (4.2 BSD)
24 XCPU 超过CPU限制(4.2 BSD)
25 XFSZ 超出文件大小限制(4.2 bsd)
26 VTALRM 虚拟闹钟(4.2 BSD)
27 VTALRM 仿形闹钟(4.2 BSD)
28 WINCH 窗尺寸变化(4.3 BSD,sun)
29 GIO 可以进行I/O操作(4.2 BSD)
30 PWR 电源故障重启

执行kill(不加 -* 默认kill -15)命令,系统会发送一个SIGTERM信号给对应的程序。当程序接收到该signal信号后,将会发生以下事情:

  1. 程序立刻停止
  2. 当程序释放相应资源后再停止
  3. 程序可能仍然继续运行
    大部分程序接收到SIGTERM信号后,会先释放自己的资源,然后再停止。但是也有程序可能接收信号后,做一些其他的事情(如果程序正在等待IO,可能就不会立马做出响应),也就是说,SIGTERM多半是会被阻塞的。

kill -9
系统给对应程序发送的信号是SIGKILL,即exit。exit信号不会被系统阻塞,所以kill -9能顺利杀掉进程。
在使用 kill -9 前,应该先使用 kill -15,给目标进程一个清理善后工作的机会。如果没有,可能会留下一些不完整的文件或状态,从而影响服务的再次启动。

二、AWK

awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
默认使用空格作为分隔符。

 awk   '{ action }'   {filenames}
 awk   '{ pattern + action }'   {filenames}
 awk  -F  '分隔符' { action } 

变量

$ + 数字 :表示第几个字段,$1 ,$2 表示第 1 ,2 个字段,
NF :表示当前行有多少个字段,因此$NF就代表最后一个字段,$(NF-1)代表倒数第二个字段。
NR 表示当前处理的是第几行
FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为%.6g。

函数

print 和 printf
  awk中同时提供了print和printf两种打印输出的函数。
  print函数,参数可以是变量、数值或者字符串。字符串必须用双引号引用,参数用逗号分隔。如果没有逗号,参数就串联在一起而无法区分。这里,逗号的作用与输出文件的分隔符的作用是一样的,只是后者是空格而已。
  printf函数,其用法和c语言中printf基本相似,可以格式化字符串,输出复杂时,printf更加好用,代码更易懂。

其他函数
tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。

示例:

显示最近登录的5个帐号:
[root@localhost workspace]# last -n 5
root     pts/1        192.168.77.1     Fri Oct 11 10:14   still logged in   
root     pts/0        192.168.77.1     Fri Oct 11 08:30   still logged in   
reboot   system boot  3.10.0-514.el7.x Fri Oct 11 08:21 - 13:24  (05:02)    
root     pts/0        192.168.77.1     Thu Oct 10 09:06 - 14:37  (05:31)    
reboot   system boot  3.10.0-514.el7.x Thu Oct 10 09:05 - 13:24 (1+04:18)   

wtmp begins Wed Sep  4 19:31:26 2019
# 只是显示最近登录的5个帐号
[root@localhost workspace]# last -n 5 | awk  '{print $1}'
root
root
reboot
root
reboot

wtmp


awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,1表示第一个域,1表示登录用户,$3表示登录用户ip,以此类推。

NR,表示awk开始执行程序后所读取的数据行数。
FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计。

$NF表示最后一个列(field),即输出最后一个字段的内容

三、 tail 命令

tail 命令可用于查看文件的内容,有一个常用的参数 -f 常用于查阅正在改变的日志文件。
tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。
参数:

-f 循环读取
-q 不显示处理信息
-v 显示详细的处理信息
-c<数目> 显示的字节数
-n<行数> 显示文件的尾部 n 行内容
--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束
-q, --quiet, --silent 从不输出给出文件名的首部
-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒

四、linux shell中?,$!等的特殊用法

变量说明:

$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1~$n
添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

简单的脚本测试:

#!是一个特殊符号,/bin/sh是用来解释该脚本的的shell路径
#!/bin/sh指该脚本使用/bin/sh来执行

创建shell文件:

# touch variable
# vi variable

脚本内容如下

#!/bin/sh
echo "number:$#"
echo "scname:$0"
echo "first :$1"
echo "second:$2"
echo "argume:$@"

保存退出
赋予脚本执行权限

# chmod +x variable

执行脚本

# ./variable aa bb
number:2
scname:./variable
first: aa
second:bb
argume:aa bb

通过显示结果可以看到:

$# 是传给脚本的参数个数
$0 是脚本本身的名字
$1 是传递给该shell脚本的第一个参数
$2 是传递给该shell脚本的第二个参数
$@ 是传给脚本的所有参数的列表

五、xargs 命令

xargs 是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。
xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。
xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。
xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的

xargs 一般是和管道一起使用。
命令格式:

somecommand |xargs -item  command

你可能感兴趣的:(Linux操作系统--常用命令(十六))