标签:linux 重定向 管道
1.I/O重定向:input输入,output输出,我们先来看一下那些是输入那些是输出:
输入的数据流:<----标准输入(stdin) 键盘;
输出的数据流: ---->标准输出(stdout) 显示器;
错误的输出流: ---->错误输出 (stderr)显示器;
2.在shell里面标准输入和标准输出以及错误输出都分别有一个代号。
标准输入:0
标准输出:1
错误输出:2
3.重定向
从标准输入读入,标准输出输出,异常报告到标准错误。
以 > 改变标准输出
Command > file 将Command的标准输出重定向到文件中,而不是打印在控制台上。
[root@localhost nzg]# cat /etc/passwd > /home/nzg/a1
以 < 改变标准输入
Command < file 将Command的标准输入修改为file
[root@localhost nzg]# cat /dev/null < /etc/passwd
以 >> 追加文件
Command >> file 可将Command的输出追加到文件file末尾
[root@localhost nzg]# cat /etc/passwd >> /home/nzg/a1
#管道的数据共享在Linux内核中是通过内存复制实现的,相较于cpu的运算,数据的移动往往更消耗时间,因此,在设计管道时,尽量把能够减少数据量的操作置于管道的前端.这样一来数据复制快速,二来程序运算量减少.
4.特殊文件的妙用
/dev/null 黑洞,吞噬一切文件,所有写入它内容的文件都不可读取,对于脚本来说用处很大.
[root@localhost nzg]# cat /dev/null < /etc/passwd
/dev/zero 用来创建一个指定长度,并且初始化为空的文件这种文件一般都是用作临时交换文件
/dev/tty 强制把信息输出至指定终端
[root@localhost nzg]# echo hahahaha111 > /dev/pts/1
5.禁止覆盖输出重定向至已存在的文件;
[root@localhost nzg]# set -C
此时可使用强制覆盖输出; >|
开启覆盖输出重定向至已存在的文件;
[root@localhost nzg]# set +C
错误输出流重定向: 2>,2>>
[root@localhost nzg]# llls a1 2> 1.txt
[root@localhost nzg]# llls a1 22> 1.txt
合并正常输出流和错误输出流;
(1) &>,&>> (>为覆盖,>>为追加)
[root@localhost nzg]# llls a1 &> 1.txt
[root@localhost nzg]# llls a1 &>> 1.txt
(2)COMMAD > /path/to/somefile 2>&1
[root@localhost nzg]# llls al > 1.txt 2>&1
COMMAD >> /path/to/somefile 2>&1
[root@localhost nzg]# llls al >> 1.txt 2>&1
6.管道
重定向与管道结合起来可以发挥他的最大优势,使用起来会很灵活,很实用。
在使用管段的时候我们可以想象成两根水管流入另一个程序输入端的水管,这样做使得我们可以任意拼接程序。
管道:连接程序,实现将前一个命令的输出直接定向后一个程序当作输入数据流
COMMAND1 | COMMAND2 | COMMAND3 | ....
[root@localhost nzg]# head -n10 /etc/passwd | tr a-z A-Z
就像这样我们先读取了/etc/passwd这个文件,然后我们在执行把里面的小写全部转换为大写
本文出自 “Linux学习之路” 博客,请务必保留此出处http://luyubo.blog.51cto.com/7634254/1833119
标签:linux 重定向 管道
原文地址:http://luyubo.blog.51cto.com/7634254/1833119