每个打开的文件都会被分配一个文件描述符.stdin (键盘), stdout (屏幕), 和 stderr (错误消息输出到屏幕上)的文件描述符分别是0, 1, 和 2. 对于正在打开的额外文件, 保留了描述符3到9.
文件描述符是文件系统为了跟踪这个打开的文件而分配给它的一个数字。
下面以实例说明
1,>的用法
- [zhangy@localhost ~]$ echo "11111" > 1.txt
- [zhangy@localhost ~]$ cat 1.txt
- 11111
- [zhangy@localhost ~]$ echo "11111" 1> 1.txt
- [zhangy@localhost ~]$ cat 1.txt
- 11111
- [zhangy@localhost ~]$ echo "22222" >1.txt
- [zhangy@localhost ~]$ cat 1.txt
- 22222
这种用法我想大家都非常的熟悉,因为这是我经常会用到的。echo “11111″ > 1.txt 时,>前面是有一个1的,是默认的。>重定向到文件时,会将文件清空,在写入。
- [zhangy@localhost ~]$ > 1.txt
- [zhangy@localhost ~]$ :> 1.txt
上面的这个例子,可以把1.txt文件中的内容清空,其实也很好理解,清空后,不输入内容当然为空了。
2,>>的用法
- [zhangy@localhost ~]$ echo "2222" >> 2.txt
- [zhangy@localhost ~]$ cat 2.txt
- 2222
- [zhangy@localhost ~]$ echo "2222" >> 2.txt
- [zhangy@localhost ~]$ cat 2.txt
- 2222
- 2222
从上面的这个例子我们可以看出,>>重定向到文件时,会将输出写到文件的结尾。这一点和>完全不同的。
3,0,1,2 到9,以及&
- [zhangy@localhost ~]$ cat 1.txt
- 333
- 111
- 222
- 444
- [zhangy@localhost ~]$ grep "22" 0< 1.txt
- 222
- [zhangy@localhost ~]$ ls tank 2>> 1.txt
- [zhangy@localhost ~]$ cat 1.txt
- 333
- 111
- 222
- 444
- ls: tank: 没有那个文件或目录
- [zhangy@localhost ~]$ (ls tank ;pwd) &>1.txt
- [zhangy@localhost ~]$ cat 1.txt
- ls: tank: 没有那个文件或目录
- /home/zhangy
i>&j重定向文件描述符i 到 j.指向i文件的所有输出都发送到j中去. i和j呢是0-9这间的数字
- [zhangy@localhost ~]$ ls tank 2>&1|egrep \* 1> 2.txt
- [zhangy@localhost ~]$ cat 2.txt
- ls: tank: 没有那个文件或目录
4,<>的用法
<这个符号是读取,>这个符号是输出,放在一起就打开并且读取,
- [zhangy@localhost ~]$ echo 123546 > 2.txt
- [zhangy@localhost ~]$ exec 4<> 2.txt
- [zhangy@localhost ~]$ read -n 4 <&4
- [zhangy@localhost ~]$ echo -n . >&4
- [zhangy@localhost ~]$ exec 4>&-
- [zhangy@localhost ~]$ cat 2.txt
- 1235.6
能过上面的这个例子,就可以很清楚了解<>他的作用
5,n<&-关闭输入文件描述符n n>&关闭输出文件描述符n
- [zhangy@localhost ~]$ ls tank
- ls: tank: 没有那个文件或目录
- [zhangy@localhost ~]$ ls tank 2>&-
6,|管理命令
这个命令也是我们常用的,是典型的,把一个命令的输出,当作另一个命令的输入
- [zhangy@localhost ~]$ echo tank | wc -w
- 1
表示tank是一个输出,但它又是wc的输入,不然就不会有统计出现了。
阅读(381) | 评论(0) | 转发(0) |