
系统大全为您提供
深入linux中重定向及管道详解
一,重定向
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>
例子:
C代码
[test@testtest]#ls-al>list.txt
#将显示的结果输出到list.txt文件中,若该文件以存在则予以取代!
[test@testtest]#ls-al>>list.txt
#将显示的结果累加到list.txt文件中,该文件为累加的,旧数据保留!
[test@testtest]#ls-al 1>list.txt 2>list.err
#将显示的数据,正确的输出到list.txt错误的数据输出到list.err
[test@testtest]#ls-al1>list.txt2>&1
#将显示的数据,不论正确或错误均输出到list.txt当中!错误与正确文件输出到同一个文件中,则必须以上面的方法来写!不能写成其它格式!
[test@testtest]#ls-al1>list.txt2>/dev/null
#将显示的数据,正确的输出到list.txt错误的数据则予以丢弃!/dev/null,可以说成是黑洞装置。为空,即不保存。
1.4为何要使用命令输出重导向
当屏幕输出的信息很重要,而且我们需要将他存下来的时候;
背景执行中的程序,不希望他干扰屏幕正常的输出结果时;
一些系统的例行命令(例如写在/etc/crontab中的文件)的执行结果,希望他可以存下来时;
一些执行命令,我们已经知道他可能的错误讯息,所以想以『2>/dev/null』将他丢掉时;
错误讯息与正确讯息需要分别输出时。
二,管线命令(pipe)
就如同前面所说的,bash命令执行的时候有输出的数据会出现,那么如果这群数据必需要经过几道手续之后才能得到我们所想要的格式,应该如何来设定?这就牵涉到管线命令的问题了(pipe),管线命令使用的是『|』。
例子:简单的管线命令
假设我们要读取last这个指令中,那个root登入的『次数』应该怎么作?
那么我所进行的步骤是:
1.执行last,将所有这个月的所有人登入数据取出来;
2.使用grep将上面的输出数据(stdout)当中的root撷取出来,其它的不要;
3.使用wc这个可以计算行数的指令将上一步的数据计算行数!
由于last的输出是一行代表一次登入,所以只要计算几行就代表登入几次的意思,经由上面三个步骤,将last数据逐步的筛选,就可以得到我们的数据了!整个命令可以写成如下:[test@testbin]#last|greproot|wc-l
这个管线命令『|』仅能处理经由前面一个指令传来的正确信息,也就是standardoutput(STDOUT)的信息,对于stdandarderror并没有直接处理的能力。
2.1基本的管线命令指令介绍
cut
语法:[root@test/root]#cut-d"分隔字符"[-cf]fields
参数说明:
-d:后面接的是用来分隔的字符,预设是『空格符』
-c:后面接的是『第几个字符』
-f:后面接的是第几个区块?
范例:
C代码
[root@test/root]#cat/etc/passwd|cut-d":"-f1
#将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:相同出现的一行,只列出一次!
范例:
C代码
[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:多少字
范例:
C代码
[root@test/root]#cat/etc/passwd|wc-l #这个文件里头有多少行?
[root@test/root]#cat/etc/passwd|wc-w #这个文件里头有多少字!?
uniq
这个指令用来将『重复的行删除掉只显示一个』
语法:[root@test/root]#uniq
范例:
C代码
[root@test/root]#last|cut-d""-f1|sort|uniq
tee
命令重定向到文件的同时将数据显示在屏幕上
语法:[root@test/root]#last|teelast.list|cut-d""-f1
范例:
C代码
[root@test/root]#last|teelast.list|cut-d""-f1
tr
语法:[root@test/root]#tr[-ds]SET1
参数说明:
-d:删除SET1这个字符串
-s:取代掉重复的字符!
dnzg.cn
范例:
C代码
[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''>dostxt-noM
split
语法:[root@test/root]#split[-bl]输入文件输出文件前导字符
参数说明:
-b:以文件size来分
-l:以行数来分
范例:[root@test/root]#split-l5/etc/passwdtest<==会产生testaa,testab,testac...等等的文件
说明:在Linux底下就简单的多了!你要将文件分割的话,那么就使用-bsize来将一个分割的文件其大小,如果是行数的话,那么就使用-lline来分割!
管线命令在bash的连续的处理程序中是相当重要的!另外,在logfile的分析当中也是相当重要的一环。
管道输送到一个命令的标准输入可以使用标准输入参数”-“进行更仔细的控制.如cat命令的示例
例子:
C代码
sortmylist|more
sortmylist|cat–n|lpr
pwd|cat–mylist|lpr
以上就是系统大全给大家介绍的如何使的方法都有一定的了解了吧,好了,如果大家还想了解更多的资讯,那就赶紧点击系统大全官网吧。
本文来自系统大全http:///如需转载请注明!推荐:win7纯净版