Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1455508
  • 博文数量: 704
  • 博客积分: 10140
  • 博客等级: 上将
  • 技术积分: 6230
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-15 20:41
文章分类

全部博文(704)

文章存档

2013年(1)

2012年(16)

2011年(536)

2010年(151)

分类: LINUX

2011-05-02 14:31:17

每个打开的文件都会被分配一个文件描述符.stdin (键盘), stdout (屏幕), 和 stderr (错误消息输出到屏幕上)的文件描述符分别是0, 1, 和 2. 对于正在打开的额外文件, 保留了描述符3到9.

文件描述符是文件系统为了跟踪这个打开的文件而分配给它的一个数字。
下面以实例说明

1,>的用法

  1. [zhangy@localhost ~]$ echo "11111" > 1.txt  
  2. [zhangy@localhost ~]$ cat 1.txt  
  3. 11111  
  4. [zhangy@localhost ~]$ echo "11111" 1> 1.txt    //这个用法和上面的用法是一样  
  5. [zhangy@localhost ~]$ cat 1.txt  
  6. 11111  
  7. [zhangy@localhost ~]$ echo "22222" >1.txt  
  8. [zhangy@localhost ~]$ cat 1.txt  
  9. 22222  

这种用法我想大家都非常的熟悉,因为这是我经常会用到的。echo “11111″ > 1.txt 时,>前面是有一个1的,是默认的。>重定向到文件时,会将文件清空,在写入。

  1. [zhangy@localhost ~]$ > 1.txt  
  2. [zhangy@localhost ~]$ :> 1.txt  

上面的这个例子,可以把1.txt文件中的内容清空,其实也很好理解,清空后,不输入内容当然为空了。

2,>>的用法

  1. [zhangy@localhost ~]$ echo "2222" >> 2.txt  
  2. [zhangy@localhost ~]$ cat 2.txt  
  3. 2222  
  4. [zhangy@localhost ~]$ echo "2222" >> 2.txt  
  5. [zhangy@localhost ~]$ cat 2.txt  
  6. 2222  
  7. 2222  

从上面的这个例子我们可以看出,>>重定向到文件时,会将输出写到文件的结尾。这一点和>完全不同的

3,0,1,2 到9,以及&

  1. [zhangy@localhost ~]$ cat 1.txt  
  2.  333  
  3.  111  
  4.  222  
  5.  444  
  6.  [zhangy@localhost ~]$ grep "22" 0< 1.txt  //把1.txt中的内容读取出来  
  7.  222  
  8.  [zhangy@localhost ~]$ ls tank 2>> 1.txt   //将错误信息放到文件的结尾  
  9.  [zhangy@localhost ~]$ cat 1.txt  
  10.  333  
  11.  111  
  12.  222  
  13.  444  
  14.  ls: tank: 没有那个文件或目录                 //这个就是 2>> 1.txt产生的内容  
  15.  [zhangy@localhost ~]$ (ls tank ;pwd) &>1.txt   //将错误信息,以及输出内容放到1.txt文件中,&(stderr,stdout)  
  16.  [zhangy@localhost ~]$ cat 1.txt  
  17.  ls: tank: 没有那个文件或目录  
  18.  /home/zhangy  

i>&j重定向文件描述符i 到 j.指向i文件的所有输出都发送到j中去. i和j呢是0-9这间的数字

  1. [zhangy@localhost ~]$ ls tank 2>&1|egrep \* 1> 2.txt  //在这里我把错误信息重定向到了1,在这里1就会输出错误,根赋值差不多  
  2. [zhangy@localhost ~]$ cat 2.txt  
  3. ls: tank: 没有那个文件或目录  

4,<>的用法

<这个符号是读取,>这个符号是输出,放在一起就打开并且读取,

  1. [zhangy@localhost ~]$ echo 123546 > 2.txt  
  2. [zhangy@localhost ~]$ exec 4<> 2.txt     //打开2.txt并将内容读取到&4中  
  3. [zhangy@localhost ~]$ read -n 4 <&4      //从&4中读取4个字符  
  4. [zhangy@localhost ~]$ echo -n . >&4      //在向&4写入一个点  
  5. [zhangy@localhost ~]$ exec 4>&-          //关闭输出文件描述符4  
  6. [zhangy@localhost ~]$ cat 2.txt  
  7. 1235.6  

能过上面的这个例子,就可以很清楚了解<>他的作用

5,n<&-关闭输入文件描述符n         n>&关闭输出文件描述符n

  1. [zhangy@localhost ~]$ ls tank          //会提示错误  
  2. ls: tank: 没有那个文件或目录  
  3. [zhangy@localhost ~]$ ls tank 2>&-     //我把错误关闭后,什么也不输出了  

6,|管理命令

这个命令也是我们常用的,是典型的,把一个命令的输出,当作另一个命令的输入

  1. [zhangy@localhost ~]$ echo tank | wc -w  
  2.  1  

表示tank是一个输出,但它又是wc的输入,不然就不会有统计出现了。

阅读(381) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~