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

linux 重定向

2015-10-14 09:33 459 查看
linux的重定向

1 文件描述符与标准输入(stdin),标准输出(stdout),标准错误(stderr)

内核用文件描述符来访问文件,文件描述符是非负整数,打开文件,新建文件,内核会返回一个文件描述符,读写文件也需要文件描述符来指定特定的文件。

stdin的文件描述符是0,stdout的文件描述符是1,stderr的文件描述符是2.在默认情况下stdin连接到键盘,stdout连接到屏幕,stderr连接到屏幕。

2 重定向

重定向就是改变stdin,stdout,stderr的默认连接位置。

3 stdout重定向

<1>stdout重定向需要使用‘>’后面连接文件,例如:

ls –l/home/tmp > xxx.txt             

如果xxx.txt存在,此命令则擦除其内容并且将输出写到xxx中,如果xxx.txt不存在则新建一个并且输出写到xxx中。

<2>‘>>’跟‘>’的区别是‘>>’会把输出写到文件的末尾而不是覆盖原来的文件。例如:

ls –l /home/tmp >>  xxx.txt

<3>  ‘>’特性的巧妙利用

我们可以使用下面命令来新建一个xx.txt的空文本,利用的就是’>’的新建文件的功能。

>xx.txt

4 stderr的重定向

这个和stdout的重定向很类似,只不过在‘>’的左边多个一个文件描述符2,这个文件描述符就是标准错误的文件描述符。示例:

ls + 2>xxx.txt

从这里可以看出’>’的左边可以是1,2或者空,当是1或者空的时候表示要把stdout重定向;‘>’的右边是可以是&1,&2,或者文件名。

5 多次重定向

多次重定向中用的比较多的是就是将stdout和stderr都重定向到文件中,此时有两种方法:

ls+ >xx.txt 2>&1;                                 //信息保存在xx.txt

ls+ &>xx.txt;                                         //信息保存在xx.txt

一个更加多的重定向,例子如下:

xxx@LinuxDDD:/home/tmp$ exec 3>zz.txt

xxx@LinuxDDD:/home/tmp$ exec 4>pp.txt

xxx@LinuxDDD:/home/tmp$ ls+ 3>&4 1>&32>&1

在这里3,4分别是zz.txt,pp.txt的文件描述符。这里重定向的时候是先把3重定向到4,然后把1重定向到3,最后是把2重定向到1。这样在打印错误的时候最终是打印到文件描述符4定义的文件中。

所以更深一层,‘>’的左边可是任意的文件描述符(非负整数)或者‘&’。右边是文件名或者&n,其中n代表文件描述符。

6 处理不想要的结果

当输出结果重定向到/dev/null的时候,它对输入不进行任何处理,从而达到隐藏错误的目的。如:

ls>/dev/null;

ls+>/dev/null;

7 标准输入重定向与cat

cat是个强大的命令,它复制一个或者多个文件并且将他们复制到标准输出中,它的基本模式:

cat[file1,file2,….] > xxx;

当没有重定向‘>’的时候,这时候的标准输出就是屏幕,所以它的作用就是合并文件并且显示在屏幕,也就是说起一个显示的作用。如:

catxx.txt

当重定向‘>’左边没有file的时候,此时就是把stdin作为了输入,默认的就是你在键盘上敲字符,然后输出到文件中。示例:

cat >xx.txt

输入的重定向,就是下面这样子了:cat <zz.txt

或者复杂点的 :exec 3>pp.txt; cat <z.txt>&3

 

8 sort ,uniq,grep

这些都是在在搜索显示的时候常用的一些命令,如sort表示排序,uniq表示去除重复行,grep则是一个强大的查找匹配文本的程序。示例:

xxx@LinuxDDD:/home/tmp$ ls | sort |uniq | grep txt

aa.txt

pp.txt

stdout.txt

z.txt

z.txt~

zz.txt

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux 重定向