linux 命令之间传递数据的方式:重定向、管道、xargs 命令。
2013-01-10 13:33
597 查看
重定向、管道和
xargs
命令都是在命令之间传递数据的方式。
Linux的最初的理念就是KISS,“KeepIt
Simple,Stupid!”的缩写。命令行命令都只做一样事情,但是要完成得非常出色。给我最深刻印象是tar命令。tar命令的目的只是将几个文件连接在一起组成一个大文件而已。而压缩的程序只能压缩单个文件。肯定有人会有疑问,tar命令的-z和-j之类的参数也可以压缩啊。其实tar本身没有压缩代码,tar是通过调用外部的gzip、bzip2之类的压缩命令来完成工作的。KISS的理念得到了广泛的支持。好多Linux命令都只会做一件事情。而复杂的事情则需要通过各种命令的组合来完成。各命令之间的通信,除了中间临时文件以外,Linux还提供了管道来完成直接的数据传输。重定向可以将标准输入、标准输入或标准错误重定向到文件或设备(这里涉及到Linux另外一条设计理念,就是一切都是文件,设备都是文件)。xargs可以将标准输入的内容转变成命令的命令行参数。
一、重定向
>filename,重定向标准输出到文件,覆盖文件。
>>filename,重定向标准输出到文件,追加模式。
2>filename,重定向标准错误到文件。
&>filename,重定向标准输入和标准错误到文件。相当于同时使用>和2>。(感谢yszzf友情提供)
<filename,重定向标准输入自文件
举个例子,在用find的时候,有的目录不允许访问,find就输出很多行的错误,真正的搜索结果就看不到了。这时我会把标准错误重定向到空设备去。
find/ -name "filename" 2> /dev/null
再比如在用gdb进行自动测试的时候,把命令写到一个文件里,然后送入gdb。
gdbprogram < test_script.gdb
二、管道
管道的原理上面基本介绍清楚了。管道是让用户将不同程序间的标准输入、标准输出连接起来,而不单单是重定向到文件。用法是在命令间用“|”连接起来。
app1| app2
三、xargs 命令
如果后面的程序必须要命令行参数,而不接受管道传参数,就要使用xargs。
1.先演示一下原理。
echo"arg1 arg2" | xargs app
相当于
apparg1 arg2
2.用find或者ls查找文件,然后将所有文件tar了。
find. -type f | xargs tar -cvzf output.tar.gz
3.计算源文件行数。这里要用到一个叫wc的命令,是用来计算文件单词数、字符数和行数的。如果管道到wc的话,wc会将数据当做文本来进行计算。文件名只有从命令行传递
find. \( -name "*.c" -o -name "*.h" -o -name "*.cpp"-o -name "*.hpp" \) -type f | xargs wc -l
或者
find. -type f | grep -E "\.[ch](pp)?$" | xargs wc -l
xargs
命令都是在命令之间传递数据的方式。
Linux的最初的理念就是KISS,“KeepIt
Simple,Stupid!”的缩写。命令行命令都只做一样事情,但是要完成得非常出色。给我最深刻印象是tar命令。tar命令的目的只是将几个文件连接在一起组成一个大文件而已。而压缩的程序只能压缩单个文件。肯定有人会有疑问,tar命令的-z和-j之类的参数也可以压缩啊。其实tar本身没有压缩代码,tar是通过调用外部的gzip、bzip2之类的压缩命令来完成工作的。KISS的理念得到了广泛的支持。好多Linux命令都只会做一件事情。而复杂的事情则需要通过各种命令的组合来完成。各命令之间的通信,除了中间临时文件以外,Linux还提供了管道来完成直接的数据传输。重定向可以将标准输入、标准输入或标准错误重定向到文件或设备(这里涉及到Linux另外一条设计理念,就是一切都是文件,设备都是文件)。xargs可以将标准输入的内容转变成命令的命令行参数。
一、重定向
>filename,重定向标准输出到文件,覆盖文件。
>>filename,重定向标准输出到文件,追加模式。
2>filename,重定向标准错误到文件。
&>filename,重定向标准输入和标准错误到文件。相当于同时使用>和2>。(感谢yszzf友情提供)
<filename,重定向标准输入自文件
举个例子,在用find的时候,有的目录不允许访问,find就输出很多行的错误,真正的搜索结果就看不到了。这时我会把标准错误重定向到空设备去。
find/ -name "filename" 2> /dev/null
再比如在用gdb进行自动测试的时候,把命令写到一个文件里,然后送入gdb。
gdbprogram < test_script.gdb
二、管道
管道的原理上面基本介绍清楚了。管道是让用户将不同程序间的标准输入、标准输出连接起来,而不单单是重定向到文件。用法是在命令间用“|”连接起来。
app1| app2
三、xargs 命令
如果后面的程序必须要命令行参数,而不接受管道传参数,就要使用xargs。
1.先演示一下原理。
echo"arg1 arg2" | xargs app
相当于
apparg1 arg2
2.用find或者ls查找文件,然后将所有文件tar了。
find. -type f | xargs tar -cvzf output.tar.gz
3.计算源文件行数。这里要用到一个叫wc的命令,是用来计算文件单词数、字符数和行数的。如果管道到wc的话,wc会将数据当做文本来进行计算。文件名只有从命令行传递
find. \( -name "*.c" -o -name "*.h" -o -name "*.cpp"-o -name "*.hpp" \) -type f | xargs wc -l
或者
find. -type f | grep -E "\.[ch](pp)?$" | xargs wc -l
相关文章推荐
- linux 的重定向、管道、xargs 命令
- Linux中很多命令不支持|管道来传递参数解决方法 -- xargs
- Linux中的Xargs命令,支持|管道传递参数
- linux 的重定向、管道、xargs 命令
- 每天学点Linux命令之Linux-Shell中的数据重定向与管道命令
- Linux 变干边学 学习笔记之Linux进程、管道和重定向命令
- IOS开发笔记(2)页面之间传递数据几种方式比较
- Linux中重定向及管道(ubuntu 终端命令)
- Struts中Action与视图之间的数据传递方式
- 【Android 开发】 : Activity之间传递数据的几种方式
- (转)使用scp命令在linux操作系统之间传递文件
- 多个类之间传递数据的方式
- android activity之间传递数据的方式
- 使用scp命令在linux操作系统之间传递文件(基于ssh服务,超级好用)
- Linux常用指令别名、输入/输出重定向、管道、命令连接符、命令替换符
- Activity之间传递数据的方式及常见问题总结
- Linux 常用命令1 pwd、ls、cd、tab、清屏、重定向、转义、管道、touch、mkdir、tree、cat、more、rmdir、rm、grep、help、man、history、find
- 通过管道和重定向实现linux管道命令(二)
- Android 学习之路一:Activity之间传递数据的四种方式
- Fragment之间传递数据的三种方式