Linux 中同名进程的查杀
长久一段时间没有做任何工作总结了,如果用工作忙来敷衍那是欺骗自己,承认这一段时间拒绝进步了。
在系统运维中,有许多同名进程需要kill是常有的事情,
数一下battle这个进程的数量
[root@HDSG-4dtime-S2 ~]# netstat -ltpun | grep battle | wc -l
16
数量有16个之多,如果需要手工kill,则得一个个kill PID && kill PID
没错,我之前就是这么做的,感觉有点累。
先记录一下有用的几个命令:
联系到这个命令:这里深恶痛绝一下那些在文本中即使用tab又使用空格的二货。
第一个:cut
cut [选项] 文件名
选项:
-f 列数值: 想提取的第几列
-d 分隔符: 按照指定的分隔符对文件中的内容进行切割列
看下效果:
原始文本内容如下:
[root@HDSG-4dtime-S2 ~]# cat demo.format
tmpfs /dev/dev tmpfs
devpts /dev/dev devpts
sysfs /sys/dev sysfs
proc /proc/dev proc
取出第一列的内容
[root@HDSG-4dtime-S2 ~]# cut -f 1 demo.format
tmpfs
devpts
sysfs
proc
对第二列进行分割在取dev这三个字母这一列
[root@HDSG-4dtime-S2 ~]# cut -f 2 demo.format | cut -d '/' -f 3
dev
dev
dev
dev
注意:cut命令只能在以tab作为分隔符的文本中切割列有效,你要是切割看着像好几列的文本中基本都会得到整个文本,就像这样
[root@HDSG-4dtime-S2 ~]# df -h [显示出来多完美的一个列表]
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 5.8G 13G 31% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/xvdb1 99G 23G 71G 25% /data
[root@HDSG-4dtime-S2 ~]# df -h | cut -f 5 [但是你切割第五列的时候却事与愿违]
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 20G 5.8G 13G 31% /
tmpfs 3.9G 0 3.9G 0% /dev/shm
/dev/xvdb1 99G 23G 71G 25% /data
想到用参数-d进行分割:这里呵呵一下,这个是不靠谱的,结果是这样
结果是空白列。所以这里想用cut实现目的已经有点困难了。
第二个:printf
输出类型有 s 字符串型,i 整型,f 浮点型,其中n 和m的意义看上表
用于显示输出格式的呢?
有下表这些:
下面有些个例子很好解释了用法:
[root@HDSG-4dtime-S2 ~]# printf '%s' 1 2 3 4 5 6
123456[root@HDSG-4dtime-S2 ~]# printf '%s %s %s' 1 2 3 4 5 6
1 2 34 5 6[root@HDSG-4dtime-S2 ~]# printf '%s %s %s\t' 1 2 3 4 5 6
1 2 3 4 5 6 [root@HDSG-4dtime-S2 ~]# printf '%s %s %s\n' 1 2 3 4 5 6
1 2 3
4 5 6
[root@HDSG-4dtime-S2 ~]#
最后一个命令就是神器 : awk
awk是一门编程语言来着,这里说下最简单的用法
还是回到最初杀进程的目的:
我们要显示出第七列 并切割出第七列前的数字列
到这里 这列数字扔给 xargs 然后kill掉就over了。