shell高级技巧-linux黑科技命令xargs

本文深入探讨了xargs命令的功能与应用场景,特别是在处理大量文件时如何与find命令结合使用,解决参数列过长和进程过多的问题,提高系统性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该命令的主要功能是从输入中构建和执行shell命令。
在使用find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行。但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出现溢出错误。错误信息通常是“参数列太长”或“参数列溢出”。这就是xargs命令的用处所在,特别是与find命令一起使用。
find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。

在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;
而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。

   [root@xieqichao ~]# ls -l
   -rw-r--r--. 1 root root        0 Nov 12 10:02 datafile3
   -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
   -rwxr--r--. 1 root root    183 Nov 11 08:02 users
   -rw-r--r--. 1 root root    279 Nov 11 08:45 users2
   #查找当前目录下的每一个普通文件,然后使用xargs命令来测试它们分别属于哪类文件。
   [root@xieqichao ~]# find . -type f -print | xargs file
   ./users2:        ASCII text
   ./datafile3:      empty
   ./users:          ASCII text
   ./test.tar.bz2: bzip2 compressed data, block size = 900k
   #回收当前目录下所有普通文件的执行权限。
   [root@xieqichao ~]# find . -type f -print | xargs chmod a-x
   [root@xieqichao ~]# ls -l
   -rw-r--r--. 1 root root     0 Nov 12 10:02 datafile3
   -rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
   -rw-r--r--. 1 root root   183 Nov 11 08:02 users
   -rw-r--r--. 1 root root   279 Nov 11 08:45 users2
   #在当面目录下查找所有普通文件,并用grep命令在搜索到的文件中查找hostname这个词
   [root@xieqichao ~]# find . -type f -print | xargs grep "hostname"
   #在整个系统中查找内存信息转储文件(core dump) ,然后把结果保存到/tmp/core.log 文件中。
   [root@xieqichao ~]# find / -name "core" -print | xargs echo "" >/tmp/core.log  

   [root@xieqichao ~]# pgrep mysql | xargs kill -9  #直接杀掉mysql的进程
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值