Linux中重定向及管道

1重定向
1.1      重定向符号
  >               输出重定向到一个文件或设备 覆盖原来的文件
  >!              输出重定向到一个文件或设备 强制覆盖原来的文件
  >>             输出重定向到一个文件或设备 追加原来的文件
  <               输入重定向到一个程序
1.2标准错误重定向符号
  2>             将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件  b-shell
  2>>           将一个标准错误输出重定向到一个文件或设备 追加到原来的文件
  2>&1         将一个标准错误输出重定向到标准输出 注释:1 可能就是代表 标准输出
  >&             将一个标准错误输出重定向到一个文件或设备 覆盖原来的文件  c-shell
  |&              将一个标准错误 管道 输送 到另一个命令作为输入
1.3命令重导向示例
  在 bash 命令执行的过程中,主要有三种输出入的状况,分别是:
  1. 标准输入;代码为 0 ;或称为 stdin ;使用的方式为 <
  2. 标准输出:代码为 1 ;或称为 stdout;使用的方式为 1>
  3. 错误输出:代码为 2 ;或称为 stderr;使用的方式为 2>

  [test @test test]# ls -al > list.txt
  将显示的结果输出到 list.txt 文件中,若该文件以存在则予以取代!

  [test @test test]# ls -al >> list.txt
  将显示的结果累加到 list.txt 文件中,该文件为累加的,旧数据保留!

  [test @test test]# ls -al  1> list.txt   2> list.err
  将显示的数据,正确的输出到 list.txt 错误的数据输出到 list.err

  [test @test test]# ls -al 1> list.txt 2> &1
  将显示的数据,不论正确或错误均输出到 list.txt 当中!错误与正确文件输出到同一个文件中,则必须以上面的方法来写!不能写成    其它格式!

  [test @test test]# ls -al 1> list.txt 2> /dev/null
  将显示的数据,正确的输出到 list.txt 错误的数据则予以丢弃! /dev/null ,可以说成是黑洞装置。为空,即不保存。

1.4为何要使用命令输出重导向
  • 当屏幕输出的信息很重要,而且我们需要将他存下来的时候;
  • 背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
  • 一些系统的例行命令(例如写在 /etc/crontab 中的文件)的执行结果,希望他可以存下来时;
  • 一些执行命令,我们已经知道他可能的错误讯息,所以想以『 2> /dev/null 』将他丢掉时;
  • 错误讯息与正确讯息需要分别输出时。
2   管线命令 ( pipe )

  就如同前面所说的, bash 命令执行的时候有输出的数据会出现,那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设定?这就牵涉到管线命令的问题了( pipe ),管线命令使用的是『 | 』。

例子:简单的管线命令
  假设我们要读取 last 这个指令中,那个 root 登入的『次数』应该怎么作?
那么我所进行的步骤是:
  1. 执行 last ,将所有这个月的所有人登入数据取出来;
  2. 使用 grep 将上面的输出数据(stdout)当中的 root 撷取出来,其它的不要;
  3. 使用 wc 这个可以计算行数的指令将上一步的数据计算行数!
  由于 last 的输出是一行代表一次登入,所以只要计算几行就代表登入几次的意思,经由上面三个步骤,将 last 数据逐步的筛选,就可以得到我们的数据了!整个命令可以写成如下: [test @test bin]# last | grep root | wc -l
这个管线命令『 | 』仅能处理经由前面一个指令传来的正确信息,也就是standard output ( STDOUT ) 的信息,对于 stdandard error 并没有直接处理的能力。

2.1基本的管线命令指令介绍

• cut
  语法:[root @test /root ]# cut -d "分隔字符" [-cf] fields
  参数说明:
  -d :后面接的是用来分隔的字符,预设是『空格符』
  -c :后面接的是『第几个字符』
  -f :后面接的是第几个区块?
  范例:[root @test /root]# cat /etc/passwd | cut -d ":" -f 1
  将 passwd 这个文件里面,每一行里头的 : 用来作为分隔号,而列出第一个区块!也就是姓名所在啦!
  [root @test /root]# last | cut -c1-20
  将 last 之后的数据,每一行的 1-20 个字符取出来!
• sort
  语法:[root @test /root ]# sort [-t 分隔符] [(+起始)(-结束)] [-nru]
  参数说明:
  -t 分隔符:使用分隔符来隔开不同区间,预设是 tab
  +start -end:由第 start 区间排序到 end 区间
  -n :使用『纯数字』排序(否则就会以文字型态来排序)
  -r :反向排序
  -u :相同出现的一行,只列出一次!
  范例:[root @test /root]# cat /etc/passwd | sort将列出来的个人账号排序!
  [root @test /root]# cat /etc/passwd | sort -t: +2n将个人账号中,以使用者 ID 来排序(以 : 来分隔,第三个为 ID ,但第一个代号为 0 之故)
  [root @test /root]# cat /etc/passwd | sort -t: +2nr反相排序啰!
• wc
  语法:[root @test /root ]# wc [-lmw]
  参数说明:
  -l :多少行
  -m :多少字符
  -w :多少字
  范例:[root @test /root]# cat /etc/passwd | wc -l这个文件里头有多少行?
  [root @test /root]# cat /etc/passwd | wc -w这个文件里头有多少字!?
• uniq这个指令用来将『重复的行删除掉只显示一个』
  语法:[root @test /root ]# uniq
  范例:[root @test /root]# last | cut -d" " -f1 | sort | uniq
• tee命令重定向到文件的同时将数据显示在屏幕上
  语法:[root @test /root ]# last | tee last.list | cut -d " " -f1
  范例:[root @test /root]# last | tee last.list | cut -d " " -f1
• tr
  语法:[root @test /root ]# tr [-ds] SET1
  参数说明:
  -d :删除 SET1 这个字符串 
  -s :取代掉重复的字符!
  范例:[root @test /root]# last | tr ‘[a-z]‘ ‘[A-Z]‘ <==将小写改成大写
  [root @test /root]# cat /etc/passwd | tr -d : <== : 这个符号在 /etc/passwd 中不见了!
  [root @test /root]# cat /home/test/dostxt | tr -d ‘\r‘ > dostxt-noM
• split
  语法:[root @test /root ]# split [-bl] 输入文件 输出文件前导字符
  参数说明:
  -b :以文件 size 来分
  -l :以行数来分
  范例:[root @test /root]# split -l 5 /etc/passwd test <==会产生 testaa, testab, testac... 等等的文件
  说明:在 Linux 底下就简单的多了!你要将文件分割的话,那么就使用 -b size 来将一个分割的文件限制其大小,如果是行  数的话,那么就使用 -l line 来分割!
管线命令在 bash 的连续的处理程序中是相当重要的!另外,在 log file 的分析当中也是相当重要的一环。
管道输送到一个命令的标准输入可以使用标准输入参数”-“ 进行更仔细的控制.如cat命令的示例
  eg:  sort mylist | more
  sort mylist | cat –n | lpr
  pwd | cat – mylist | lpr

时间: 2024-11-06 12:51:53

Linux中重定向及管道的相关文章

Linux中重定向、管道和grep命令总结

今天我们来讲下Linux中的重定向.管道和grep命令.由于重定向和管道知识点比较少,但是又比较重要所以和grep命令一起讲. 在将重定向我们先讲下系统的标准输入和输出.在Linux中标准输入(STDIN 0)对应设备:键盘:标准输出(STDOUT 1)和标准错误输出(STDERR 2)对应设备:显示器.重定向就是将标准输入输出重新定位到指定位置或者设备中(比如:文件). I/O重定向 set –C 禁止对已存在的文件进行覆盖重定向 强制覆盖>| set +C 关闭上述功能 输出重定向: >:

Linux数据流重定向与管道

数据流重定向简单来说就是把原本应该输出到某处(比如说屏幕)的数据,重定向其输出目的地,到其他的地方(比如文件). linux中的输入与输出: 标准输入(stdin):默认从键盘输入 标准输出(stdout):执行的正常结果信息,默认输出到屏幕 标准错误输出(stderr):执行的错误信息,默认输出到屏幕 那就让我们来体验下这三个鬼东西吧: [[email protected] 08:32 ~]$ ll <-- 标准输出,默认结果输出到屏幕 总用量 24 drwxrwxr-x. 2 fuwh fu

Linux中可用于管道操作的命令总结

在Linux中药进行稍复杂的操作,通常需要借助管道命令"|"多个命令的组合,形式如下: command 1 |  command 2 |  command 3 -- 在linux中有些命令可以直接用于管道命令中,有些则不可以,对于不可以直接用于管道的命令需要借助xargs命令: find ./ -type f | xargs md5sum >> md5_rc1.txt find ./ -type f  -print| xargs md5sum >> md5_rc

关于linux中重定向 &gt; 1&gt; 2&gt;&amp;1 &gt;&gt;

linux 中很多时候会用到重定向来完成一些工作下面就来谈谈我对重定向的理解 欢迎吐槽             1,0<或者<    表示标准输入  代码为0 或者 称stdin         2 , 1>   表示标准输出     代码为1  或者 称stdout        3,   2>  表示错误输出  代码为2  或者 称 stderr 标准输出:        >或者1>  输出重定向到一个文件或者设备 覆盖原来的文件        >!  强制覆

linux中重定向学习总结

文件标识符是从0到9结束的整数,指明了与进程有关的特定数据流源.当Linux系统启动一个进程(该进程可能用于执行Shell命令)时,将自动为该进程打开三个文件:标准输入.标准输出和标准错误输出,分别由文件标识符0.1.2标识,如果进程要打开其他的输入和输出文件,则从3开始标识.另外3-9是保留的标识符,可以把这些标识符指定为标准输入.标准输出和标准错误输出的临时连接.通常这样可以解决好多复杂的重定向请求. 下面举一些由管道符连接的重定向的例子: 1.ls -l | sed -n '1,5p'--

Linux中重定向

转:http://blog.csdn.net/songyang516/article/details/6758256 1重定向 1.1      重定向符号 >               输出重定向到一个文件或设备 覆盖原来的文件>!              输出重定向到一个文件或设备 强制覆盖原来的文件>>             输出重定向到一个文件或设备 追加原来的文件<               输入重定向到一个程序 1.2标准错误重定向符号 2>    

【Linux】重定向与管道

重定向 redirection 每个命令有输入源和输出目的地,默认行为,是标准输入和标准输出.大多数情况,标准输入是键盘,标准输出是屏幕.可以为单独的操作修改输入和输出,这就是重定向.重定向可以使某个命令从源文件输入而不是键盘,或输出到显示器以外的地方(比如存储到文件). 使用<和>来定义输入和输出源.使用>>追加到文件的末尾. sort<terms>terms-alpha 这个命令将terms文件中的条目排序,然后输出到terms-alpha文件. BASH输出重定向

linux中的命名管道FIFO

匿名管道pipe前面已经说过了,接下来就说命名管道FIFO: 我们可以使用以下函数之一来创建一个命名管道,他们的原型如下:#include <sys/types.h>#include <sys/stat.h>int mkfifo(const char *filename, mode_t mode);int mknod(const char *filename, mode_t mode | S_IFIFO, (dev_t)0);这两个函数都能创建个FIFO,   注意是创建一个真实存

linux - 输入输出重定向 及 管道

> 正确结果重定向 2> 错误结果重定向 &> 正确和错误全部重定向 >> 追加,其它同> 标准输出实际上就是显示器,比如我们使用cat命令打开一个文件,文件内容就会输出到屏幕上. $ cat passwd > a.txt $ 重写向之后,屏幕上不再有输出,全部都输出到a.txt $ cat a.txt root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nolog