原文地址:http://blog.csdn.net/lucky_liuxiang/article/details/70597755

重定向、管道和xargs命令都是在命令之间传递数据的方式。Linux的最初的理念就是KISS,“Keep It Simple, Stupid!”的缩写。命令行命令都只做一样事情,但是要完成得非常出色。给我最深刻印象是tar命令。tar命令的目的只是将几个文件连接在一起组成一个大文件而已。而压缩的程序只能压缩单个文件。肯定有人会有疑问,tar命令的-z和-j之类的参数也可以压缩啊。其实tar本身没有压缩代码,tar是通过调用外部的gzip、bzip2之类的压缩命令来完成工作的。KISS的理念得到了广泛的支持。好多Linux命令都只会做一件事情。而复杂的事情则需要通过各种命令的组合来完成。各命令之间的通信,除了中间临时文件以外,Linux还提供了管道来完成直接的数据传输。重定向可以将标准输入、标准输入或标准错误重定向到文件或设备(这里涉及到Linux另外一条设计理念,就是一切都是文件,设备都是文件)。xargs可以将标准输入的内容转变成命令的命令行参数。

重定向
在讲重定向之前,我想说说什么叫标准输入,标准输出和标准错误。在Linux里,进程间通信(IPC)最基本的一种方法是通过管道(其他还有消息、共享内存等)。管道就像流水线一样,单向的,不用关心管道另外一边是谁。系统给每一个命令行程序默认三条管道与用户交互,就是标准输入,标准输出和标准错误。标准输入指的是用户按键盘给程序输入数据。标准输出是指程序正常打印给用户的信息,是打印到shell上的。标准错误跟标准输出在本质上是相同的,都是输出信息给用户。不同的是,两个管道是分开的,可以用来打印不同种类的信息,比如说标准错误通常用来打印错误信息。因为使用管道不用关心另外一边是谁,所以把管道接到别的地方,程序也不会知道。Linux用了这种特性来实现了管道的重定向。
默认情况,三个默认管道是跟用户交互的。因为在Linux下,每个命令都只做一件事情。有些情况下,用户想让程序跟程序之间交互通过默认管道交互,比如说想把一个命令的输出接到另外一个命令的输入里面。重定向的方法如下:

> filename,重定向标准输出到文件,覆盖文件。
>> filename,重定向标准输出到文件,追加模式。
2> filename,重定向标准错误到文件。
&> filename,重定向标准输入和标准错误到文件。相当于同时使用>和2>。(感谢yszzf友情提供)
< filename,重定向标准输入自文件

举个例子,在用find的时候,有的目录不允许访问,find就输出很多行的错误,真正的搜索结果就看不到了。这时我会把标准错误重定向到空设备去。

1. find / -name "filename" 2> /dev/null

再比如在用gdb进行自动测试的时候,把命令写到一个文件里,然后送入gdb。

1. gdb program < test_script.gdb

管道
管道的原理上面基本介绍清楚了。管道是让用户将不同程序间的标准输入、标准输出连接起来,而不单单是重定向到文件。用法是在命令间用“|”连接起来。

app1 | app2

我最常用的几个情况:
1. 程序输出太多,用less慢慢看。

1. verbose_app | less

2. 在程序输出里面进行搜索。一种方法可以送到less里面在用less搜索。这里用另外一个命令,grep。

verbose_app | grep pattern
# pattern是被搜索的内容。如果有空格,用双引号括起来。如果想使用扩展正则表达式,用grep -E。

3. 因为在重定向了以后,被重定向的管道就不再打印到屏幕了。如果又想打印到文件,又想打印到屏幕,可以用tee命令

verbose_app | tee filename | another_app

xargs
如果后面的程序必须要命令行参数,而不接受管道传参数,就要使用xargs。
1. 先演示一下原理。

echo "arg1 arg2" | xargs app
# 相当于
app arg1 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

重定向的>,2>,<之类的原理是把标准输入等用新的管道来取代。
我一开始是这样写的

command >/dev/null 2>&1

这样写的问题是,>已经将标准输出用null设备替换了,然后2>&1将标准错误接到“标准输出”上,而“标准输出”现在已经变成了null设备,也就是说标准错误接到了null设备上。
正确的方法是

command 2>&1 >/dev/null

另外,交换标准输出和标准错误:

command 3>&1 1>&2 2>&3

linux 的重定向、管道、xargs 命令相关推荐

  1. Linux Shell重定向 管道命令 grep搜索 awk编程 sed文件操作高阶函数

    在编程中如果能够熟悉shell高阶语法,将对我们进阶为高级程序员有很大的帮助,本文将从Shell重定向 管道命令 awk编程 sed等方面展开介绍. 作者:有勇气的牛排 文章目录 1 shell重定向 ...

  2. linux shell脚本学习xargs命令使用详解

    xargs是给命令传递参数的一个过滤器,也是组合多个命令的一个工具.它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理.通常情况下,xargs从管道或者stdin中读取数据,但是它也能够从 ...

  3. linux双向重定向之tee命令

    tee的作用是将一份标准输入多重定向,一份重定向到标准输出/dev/stdout,然后还将标准输入重定向到每个文件FILE中. 在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls > ...

  4. linux脚本 scp 管道,scp命令详解(全)

    svn 删除所有的 .svn文件 find . -name .svn -type d -exec rm -fr {} \; linux之cp/scp命令+scp命令详解 名称:cp 使用权限:所有使用 ...

  5. Linux xargs 命令

    2015-08-29 创建 1.概述 从标准输入中创建并且执行命令行. xargs 从标准输入中读取条目,使用空格(这样可以保护单双引号或者反斜杠)或者换行符分隔,并且执行(默认是 /bin/echo ...

  6. Bash基础(2) 通配符 组合键 数据重定向 管道 tee

    Bash基础(2)     通配符  组合键  数据重定向  管道  tee命令 1 文本名"通配符" *:匹配任意长度的任意字符: ?:匹配任意单个字符: []: 匹配指定范围内 ...

  7. linux管道、重定向和查看命令

    目录 二.linux管道.重定向和查看命令 1.管道:| 2.tee 3.重定向 4.文件内容浏览 5.文件内容过滤:grep 6.命令搜索 7. find 查找文件---按照文件名称.大小.类型.权 ...

  8. Linux重定向+管道命令+环境变量PATH

    目录 ⛺️1.了解Linux目录配置标准FHS ⛺️2. Linux数据重定向的理解与操作

  9. Linux重定向管道——双通、三通管道一篇学会【CenOs】

    Linux重定向管道是指修改原来默认的一些东西,对原来系统命令的默认执行方式进行改变. 如: date > date.txt 将日期输出到date文件 FD:file descriptors , ...

最新文章

  1. WCF:如何将net.tcp协议寄宿到IIS
  2. Eclipse 增加打开文件路径功能
  3. vc开发soap客户端(方式一)
  4. 采样次数不同平均值不一样_不同的真石漆装饰效果也是不一样的
  5. java免检异常_java-异常
  6. Matrix Factorization: A Simple Tutorial and Implementation in Python
  7. Mac OS X下的截屏功能和使用技巧
  8. 基于Linux的小项目-在线词典
  9. mysql报错无效默认值1067_Mysql 报错:#1067
  10. 写了个算分压电阻阻值的MATLAB小程序
  11. swagger 修改dto注解_Swagger注解及参数细节的正确书写。
  12. python编写程序、一个富翁与陌生人做交易_智慧职教云课堂Python程序设计(常州工业职业技术学院)题目答案...
  13. HTML:设置背景颜色和图片
  14. Java 小数保留小数位数的方法
  15. homepod换wifi网络_HomeKit的最佳入口——HomePod使用体验
  16. 安卓手机运行python程序
  17. APP合集,简单总结一下
  18. 「Mac」突然没声音,音量键不起作用——解决办法(大部分情况)
  19. 货币供应量M1M2与上证综合指数之间的相关性图示
  20. quartusii生成FIFO

热门文章

  1. educational round 前缀和_总结分析634个以re为前缀的单词得出了re为前缀组合单词意思规律
  2. 15.基于Hadoop的数据仓库Hive第3部分(Hive编程实践)
  3. Python-OpenCV 处理视频(二): 视频处理
  4. 深度学习模型之各种caffe版本(Linux和windows)的网址和配置
  5. Java 面试知识点解析(六)——数据库篇
  6. 通过JDBC进行简单的增删改查(以MySQL为例)
  7. 词袋模型BoW图像检索Python实战
  8. ASM(active shape models)算法介绍
  9. 循环神经网络教程3-BP算法和梯度消失问题, Part 3 – Backpropagation Through Time and Vanishing Gradients
  10. GMM-HMM语音识别模型 原理篇