美文网首页
Linux中文件描述符,重定向与标准输入输出

Linux中文件描述符,重定向与标准输入输出

作者: 躺在家里干活 | 来源:发表于2020-12-11 18:03 被阅读0次

    Linux中文件描述符,重定向与标准输入输出

    文件描述符:内核(kernel)利用文件描述符(file descriptor)来访问文件。在Linux系列的操作系统上,Linux的设计思想便是把一切设备都视作文件

    重定向:举个例子,我不想在显示器上看到程序的执行结果而是希望输出到某一文件中,这种场景就可以使用重定向的方式实现。

    重定向符号 说明
    命令 > 文件 改变送出的数据信道(stdout, stderr),使之输出到指定的文件
    命令 >> 文件 和>相似,以追加的形式输出到指定文件
    命令 < 文件 改变读进的数据信道(stdin),使之从指定的文件读进,作为命令的参数
    命令 << 分解符 从标准输入中读入,直到遇到分界符停止

    标准输入输出

    每个进程都会默认打开3个文件描述符,即0、1、2。其中0代表标准输入流、1代表标准输出流、2代表标准错误流。

    文件描述符 说明 句柄
    0 标准输入 stdin
    1 标准输出 stdout
    2 标准错误 stderr

    分析举例

    >>> 的使用

    1. ls -a > 1.txt

    ls -a命令的输出重定向到1.txt文件,并且会清空1.txt中的内容

    # sparrow @ sparrow-power in ~/test [16:55:48] 
    $ ls -a > 1.txt
    
    # sparrow @ sparrow-power in ~/test [16:55:57] 
    $ cat 1.txt
    .
    ..
    1.txt
    
    # sparrow @ sparrow-power in ~/test [16:56:03] 
    $ 
    
    # sparrow @ sparrow-power in ~/test [16:56:35] C:130
    $ ls -a > 1.txt
    
    # sparrow @ sparrow-power in ~/test [16:57:28] 
    $ cat 1.txt    
    .
    ..
    1.txt
    
    1. ls -a >> 1.txt

    以追加的方式,重定向标准输入到1.txt

    # sparrow @ sparrow-power in ~/test [16:57:31] 
    $ ls -a >> 1.txt
    
    # sparrow @ sparrow-power in ~/test [16:59:23] 
    $ cat 1.txt
    .
    ..
    1.txt
    .
    ..
    1.txt
    
    # sparrow @ sparrow-power in ~/test [16:59:35] 
    $ 
    
    
    1. touch 2> 2.txt

    >符号其实是简写,> == 1>1表示文件描述符。然后2>这个命令就很明确了,把标准错误输出到某个位置

    # sparrow @ sparrow-power in ~/test [17:11:18] C:1
    $ touch 2> 2.txt
    
    # sparrow @ sparrow-power in ~/test [17:14:08] C:1
    $ cat 2.txt
    touch: 缺少了文件操作数
    请尝试执行 "touch --help" 来获取更多信息。
    
    # sparrow @ sparrow-power in ~/test [17:14:11] 
    $ 
    
    1. touch > 3.txt 2 > &1

    &是一个描述符,2 > 1表示将标准错误输出到文件1中,&1表示输出到标准输出

    # sparrow @ sparrow-power in ~/test [17:22:32] C:127
    $ touch > 3.txt 2>&1
    
    # sparrow @ sparrow-power in ~/test [17:23:08] C:1
    $ cat 3.txt
    touch: 缺少了文件操作数
    请尝试执行 "touch --help" 来获取更多信息。
    
    1. touch &>> 4.txt

    命令 &>> 文件命令 > 文件 2 > &1的效果相同

    # sparrow @ sparrow-power in ~/test [17:23:12] 
    $ touch &>> 4.txt 
    
    # sparrow @ sparrow-power in ~/test [17:26:45] C:1
    $ touch 5.txt &>> 4.txt
    
    # sparrow @ sparrow-power in ~/test [17:26:55] 
    $ cat 4.txt 
    touch: 缺少了文件操作数
    请尝试执行 "touch --help" 来获取更多信息。
    
    # sparrow @ sparrow-power in ~/test [17:27:00] 
    $ ll &>> 4.txt
    
    # sparrow @ sparrow-power in ~/test [17:27:13] 
    $ cat 4.txt
    touch: 缺少了文件操作数
    请尝试执行 "touch --help" 来获取更多信息。
    总用量 20K
    -rw-r--r-- 1 sparrow sparrow 28 12月 11 17:22 1
    -rw-r--r-- 1 sparrow sparrow 22 12月 11 16:59 1.txt
    -rw-r--r-- 1 sparrow sparrow 88 12月 11 17:14 2.txt
    -rw-r--r-- 1 sparrow sparrow 88 12月 11 17:23 3.txt
    -rw-r--r-- 1 sparrow sparrow 88 12月 11 17:26 4.txt
    -rw-r--r-- 1 sparrow sparrow  0 12月 11 17:26 5.txt
    

    相关文章

      网友评论

          本文标题:Linux中文件描述符,重定向与标准输入输出

          本文链接:https://www.haomeiwen.com/subject/mgxsgktx.html