在Linux中标准输入、输出为键盘输入和显示器输出。对于echo命令可以在标准输出设备上显示一些内容,比如:
echo "Hello World!" Hello World!
这就是标准输出。但是标准输出并不是echo的唯一输出目的地。可以通过>符号来重定向echo的输出设备,比如:
echo "Hello World!" > hw ls -l -rw-rw-r--. 1 lidq lidq 13 Mar 31 12:48 hw cat hw Hello World!
这就是使用了>符号来将echo这个命令的输出重定向到文件hw中,也就是将Hello World!内容写入了文件hw中。同理,命令的标准输入也可以被重定向为文件输入。
在Linux中使用管道符号|将两个命令分别隔开,将前一个命令的输入重定向到后一个命令的输入。也就是说在Linux下可以通过管道机制执行多个命令,它们之间都用|符号隔开。前一个命令的输入被重定向到后一个命令的输入,数据就像在一个管道里流动一样,从管道的入口流向出口。比如在~/Documents/books下有3个文本文件test1.txt、test2.txt、test3.txt里面的内容分别为aaa、bbb、ccc。执行下面命令:
find ~/Documents/books -name *.txt | grep -i test2 | cat > test.log cat test.log /home/lidq/Documents/books/test2.txt
首先在~/Documents/books中查找其下的以.txt结尾的文件列表,再将这个输出结果重定向到grep;在结果中查找test2的字符串,并将结果重定向到cat中;cat命令显示这个结果并重定向到test.log文件中。test.log文件的内容为test2.txt。
注意:第2步grep命令所查找的内容是:
"/home/lidq/Documents/books/test2.txt /home/lidq/Documents/books/test1.txt /home/lidq/Documents/books/test3.txt"
这个字符串,而不是这几个文件的内容。那么问题来了,如果想要在这几个文件的内容中查找一个字符串,应该怎么办呢?答案是使用xargs:
find ~/Documents/books -name *.txt | xargs grep test2
在这些文件内容中查找test2,没有任何结果。
find ~/Documents/books -name *.txt | xargs grep aaa /home/lidq/Documents/books/test1.txt:aaa
在这些文件内容中查找aaa,查找到了一个结果。
有了重定向和管道机制,就可以做一些功能非常强大的命令组合,比如:
查找所有的wine进程,并强制杀死它们:
ps -ef | grep wine | grep -v grep | awk '{print $2}' | xargs kill -9
删除某个目录及其下子目录中所有的png文件:
find Pictures/ -iname "*.png" | xargs rm -rvf removed ‘Pictures/icon/eclipse.png’ removed ‘Pictures/icon/qq.png’ removed ‘Pictures/icon/sqldeveloper.png’ removed ‘Pictures/background/FootFall.png’ removed ‘Pictures/Selection_001.png’ removed ‘Pictures/Selection_003.png’
查找/etc下及其下子目录中所有的conf文件并将结果写入log文件:
find /etc -iname "*.conf" | grep -i network > log cat log /etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf /etc/NetworkManager/NetworkManager.conf /etc/NetworkManager/conf.d/20-connectivity-fedora.conf
统计某个C语言工程头文件和源代码文件的总行数:
find . -iname "*.[h|c]" | xargs wc -l 22347 total
注意,在使用wc统计命令时要使用xargs命令,不然就变成了这个目录下一共有多少个h和c文件,而不是统计代码的行数了。
find . -iname "*.[h|c]" | wc -l 106
使用wc统计时没有使用xargs命令,变成是统计这个工程下一共有多少个h和c文件。
Copyright © 2015-2023 问渠网 辽ICP备15013245号