您的位置:首页 > 运维架构 > Linux

重定向与管道

2016-08-02 15:05 148 查看
一、解读重定向
程序必须能够读入输入然后经过加工来显示结果,程序获取的数据也多种多样,程序生产出来的结果也是多种多样的。也就是说程序要有读入也要有输出。





读入数据:Input
输出数据:Output
在linux中一切接文件。这就意味着,任何设备在系统中都有一个与之对应的文件。所以我们就可以通过文件来访问设备。对于用户来说,访问文件就是通过文件名来进行的,用户看到的是文件名,但是,对于内核来说,所有都是数字,这个数字就是文件描述符来访问文件。打开现存文件或新的文件时,内核返回一个fd。读写文件都需要使用fd来制定读写的文件。fd:file descriptor(文件描述符)
linux给程序提供三种I/O设备
标准输入(STDIN) -0 默认接受来自键盘的输入
标准输出(STDOUT)-1 默认输出到终端窗口
标准错误(STDERR)-2 默认输出到终端窗口
I/O重定向:改变默认位置



当执行重定向时我们看到 ls显示的结果被输出到一个新的文件中,如果testdir中没有该文件,那么将自动创建该文件。



而我又将ll结果重定向到文件中,那么我们会发现,之前的结果没有了,都被覆盖了,所以文件的创建方法是。
1:该文件若不存在,系统会自动建立该文件。
2:当这个文件存在,系统会将这个文件的内容清空,让后将数据写入。
3:如果以>输出到一个已存在的文件,文件会被覆盖。
如果我们不想覆盖该文件使用>>(累加)就可以了
二、重定向具体用法
STDOUT和TDERR可以被重定向到文件:
命令 操作符号 文件名
支持的操作符号有:
> 把STDOUT重定向到文件
2> 把STDERR重定向到文件
&> 把所有输出重定向到文件
>文件内容会被覆盖
#set -C:禁止将内容覆盖已有文件,但可追加强制覆盖:>|
#set+C:允许覆盖
>> 原有内容基础上,追加内容
把输出和错误重新定向到文件
2>:覆盖重定向错误输出数据流;
2>>:追加重定向错误输出数据流;
标准输出和错误输出各自定向至不同位置:
COMMAND > /path/to/file.out > /path/to/error.out
合并标准输出和错误输出为同一个数据流进行重定向
&>:覆盖重定向
&>>:追加重定向
COMMAND > /path/to/file.out 2>&1(顺序重要)
COMMAND >> /path/to/file.out 2>>&1(顺序重要)
find /etc -name passwd 2> /dev/null
/dev/null垃圾桶黑洞的用法
如果我们知道会出现大量的错误信息而又不想让它显示出来,这个时候使用黑洞设备/dev/null。它可以吃掉导向它的所有信息
():合并多个程序的STDOUT
(cal 2007;cal2008)>all.txt
standard input:<与<<
<就是讲原本需要由键盘输入的数据改由文件内容来替代。如下图所示。



<很有帮助,尤其是在发邮件mail这种命令中。那么<<又是什么意思呢,它代表结束输入的意思。如下图



可以看出end就是结束输入,他并没有显示在文件中。

使用<来重定向标准输入 某些命令能够接受从文件中导入的STDIN: $tr 'a-z' 'A-Z'< /etc/issue 将文件中的小写字母转换为大写字母。 tr -d abc</etc/issue 删除issue文件中所有abc中任意字母。 #cat > filea 按ctrl+d离开,可以使用文件来代替键盘的输入 #Cat > filea < fileb

tr-转换和删除字符
tr[OPTION]...SET1[SET2]
选项:
-c或--complerment:取字符集的补集
-d或--delete:删除所有属于第一字符集的字符
-s或-squeeze-repeats:把连续重复的字符以单独一个字符表示
-t或--truncate-set1:将第一个字符集对应字符转化为第二字符集对应的字符
管道



管道(使用符号“|”表示)用来连接命令
命令1 | 命令2 | 命令3 | …
将命令1的STDOUT发送给命令2的STDIN,命令2的 STDOUT发送到命令3的STDIN
STDERR默认不能通过管道转发,可利用2>&1 或 |& 实现
最后一个命令会在当前shell进程的子shell进程中执行用来
组合多种工具的功能
ls | tr 'a-z' 'A-Z'
less :一页一页地查看输入:
$ ls -l /etc | less
mail: 通过电子邮件发送输入:
$ echo "test email" | mail \ -s "test" user@example.com
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 管道 定向