I/O重定向:允许我们更改输入输出走向,一般,输入到键盘,输出到屏幕
cat——连接文件
sort——排序文本行
uniq——报道或省略重复行
grep——打印匹配行
wc——打印文件中换行符、字和字节个数
head——输出文件第一部分
tail——输出文件最后一部分
一、重定向标准输出
重定向标准输出到另一个文件除了屏幕,我们使用“>"重定向符,其后跟着文件名
用>重定向符,输出到另一个文件
ls-l/usr/bin > ls-output.txt 创建一个长长的目录/usr/bin列表,并且输送程序运行结果到文件ls-output.txt中
使用>重定向符时,存在以下问题
1)制定的目录/usr/bin必须是存在的目录,如果不是存在的目录,如/bin/usr,会产生错误信息并输出到屏幕上
2)产生错误的时候,使用ls-l ls-output.txt会发现,这个目标文件里面是空的,这是因为>重定向的时候是从头开始重写。那么引入>>重定向符
>重定向输出结果时,目标文件总是从开头进行重写,如何将重定向结果追加到文件内容后面,而不是从开头重写文件?我们使用>>重定向符
ls-l /usr/bin >> ls-output.txt
这样将导致输出结果添加到文件内容之后,如果文件不存在,文件会被创建,就如同>一样了
3)另外,其实可以很好的利用>重定向从头重写目标文件的作用,来删除目标文件中的内容
> ls-output.txt
4)错误消息是返回到显示屏幕上了,我们有时候是想将其重定向到文件中,该怎么做?
首先,我们先介绍文件流的前三个看做标准输入、标准输出、错误,shell内部参考他们为文件描述符0、1、2
重定向标准错误:使用2>重定向符
ls-1 /bin/usr 2> ls-error.txt
引申:
1. 重定向标准输出和错误到同一个文件
ls-l bin/usr > ls-output.txt 2> &1
注意上边的顺序!首先重定义标准输出到文件ls-output.txt,然后重定向文件描述符2(标准错误)到文件描述符1(标准输出)使用表示法2>&1
另外,bash版本提供了一种新的方法,使用&>重定向符
ls-l /bin/usr &> ls-output.txt
2.处理不需要的输出
让其输出到/dev/null文件中,/dev/null文件是系统设备,叫做位存储器,可以接受输入,并且对输入不做处理,可用于隐藏命令错误信息
ls-l /bin/usr 2> /dev/null
二、cat——连接文件
cat是读取一个或多个文件,然后复制他们到标准输出
1.显示文件(到显示屏),类似type命令
cat ls-output.txt
2.连接文件
cat movie.mpeg.0* > moovie.mpeg
3.键盘输入信息,并显示在屏幕上
[me@linuxbox-]-$ cat
The quick browm fox junped over the lazy dog.
注意!输入cat换行,再键盘输入目标数据,然后ctrl+d键,告诉cat已经输入到文件末尾
4.键盘输入信息,并重定向到目标文件中
[me@linuxbox-]-$ cat lazy——dog.txt
The quick browm fox junped over the lazy dog.
三、管道线
什么是管道线?
命令从标准输入读取信数据,然后再把数据输送到标准输出,命令的这种能力被一个shell特性所利用,这个特性就叫做管道线,使用管道操作符|,一个命令的标准输出可以管道到另一个命令的输入
command1 | command2 command1命令的结果作为command2的参数,
ls-l /usr/bin | less less是接受标准输入的命令,我们用less来一页一页地显示任何命令的输出,命令把他们的运行结果输送到标准输出
四、过滤器
接受输入,并以某种方式改变它,然后输出。比如sort
ls /bin /usr/bin | sort | less 把目录/bin和/usr/bin中的可执行命令联合在一起,然后把他们排序,最后浏览执行结果
五、uniq——报道或忽略重复行
常与sort一起用
ls /bin /usr/bin |sort | uniq | less
如果我们想看到重复的数据列表,uniq_d
ls /bin /usr/bin |sort | uniq-d | less
六、wc——打印行,字和节数
wc ls-output.txt
会输出三个数,分别是行数,单词数和字节数
如果要强制只输出行数,则用wc-l
ls /bin /usr/bin | sort | uniq |wc-l
七、grep——打印匹配行
grep pattern [file...] patten是模式
ls /bin /usr/bin | sort | uniq | grep zip 输出是zip类型的匹配文件
八、head/tail——打印文件开头和结尾部分
1.head默认打印文件的前10行,如果想改变打印行数,就用head—n
head -n 5 ls-output.txt 打印前5行
tail -n 15 ls-output.txt 打印后15行
2.使用 “-f” 选项, tail 命令继续监测这个文件,当新的内容添加到文件后,它们会立即出现在屏幕上。这会一直继续下去直到你输入 Ctrl-c。
tail -f /var/log/messages
九、tee——从Stdin读取数据,并同时输出到Stdout和文件
tee 程序从标准输入读入数据,并且同时复制数据到标准输出(允许数据继续随着管道线流动)和一个或多个文件
当在某个中间处理阶段来捕捉一个管道线的内容时,这很有帮助。这里,我们重复执行一个先前的例子,这次包含 tee 命令,在 grep过滤管道线的内容之前,来捕捉整个目录列表到文件 ls.txt:
ls /usr/bin | tee ls.txt | grep zip