文件描述符及其重定向的学习笔记

    Linux将每个对象当做文件处理。这包括输入和输出过程。Linux用文件描述符来标识每个文件对象。文件描述符是一个非负整数,可以唯一标识会话中打开的文件。每个过程最多有9个文件描述符。
1 标准文件描述符
    * 标准输入STDIN:0
        STDIN文件描述符代表shell的标准输入。对于终端来说,标准输入是键盘。
    * 标准输出STDOUT:1
        STDOUT文件描述符代表标准的shell输出。在终端上,标准输出是终端显示器。
    * 标准错误STDERR:2
        shell通过特殊的文件描述符来处理错误消息。默认情况下,STDERR文件描述符和STDOUT文件描述符指向同样的地方。就是说,默认情形下,错误消息输出到显示器上。
2 重定向错误
    *只重定向错误 2>
        #ls -al badfile 2> test4
    *重定向错误和数据
        #ls -al badfile  2> test6 1>test7
        #ls -al badfile &> test7
3 脚本中重定向输出
    *临时重定向:文件描述符之前加and符(&)
    *永久重定向:用exec命令告诉shell在脚本执行期间重定向某个特定文件描述符。
4 脚本中重定向输入
    用exec命令来将STDIN重定向到Linux文件。
5 创建自己的重定向
    你可以创建文件描述符3~8,并将它们分配给要用到的任何文件。
    *创建输出文件描述符
        例:exec 3>testout
    * 重定向文件描述符
        exec 3>&1      #将文件描述符3重定向到文件描述符1
        exec 1>testout #将STDOUT重定向到文件
        ....
        exec 1>&3      #恢复文件描述符1
    * 创建输入文件描述符
        exec 6<&0      #将文件描述符6重定向到文件描述符0
        exec 0<testout #将STDIN重定向到文件
        ....
        exec 0<&6      #恢复文件描述符0
    * 创建读写文件描述符
        exec 3<> testfile
    * 关闭文件描述符
        exec 3>&-
        一旦关闭了文件描述符,就不能在脚本里向它写任何数据了,否则shell会生成错误消息。
6 列出打开的文件描述符
    /usr/sbin/lsof
7 阻止命令输出
    shell输出到null文件的任何数据都不会保存。
    ls -al > /dev/null    #阻止STDOUT输出
    ls -al 2> /dev/null  #阻止STDERR输出
    cat /dev/null > testfile # 清空一个文件

参考文献:《Linux Command Line and Shell Scripting Bible》 by Richard Blum
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当进行文件描述符定向时,会改变标准输入、标准输出和标准错误输出的目标。具体来说,定向文件描述符可以将原本要输出到屏幕上的内容写入到文件中,或者从文件中读取数据而不是从键盘输入。这样可以实现一些定向操作的需求,如将程序的输出保存到文件中,或者从文件中读取输入数据。 下面是一些常见的文件描述符定向操作: 1. 标准输出定向(> 或 >>): 使用 '>' 符号可以将标准输出定向到指定的文件,如果文件不存在则创建,如果存在则覆盖原有内容。 使用 '>>' 符号可以将标准输出定向到指定的文件,如果文件不存在则创建,如果存在则在末尾追加内容。 2. 标准错误输出定向(2> 或 2>>): 使用 '2>' 符号可以将标准错误输出定向到指定的文件,如果文件不存在则创建,如果存在则覆盖原有内容。 使用 '2>>' 符号可以将标准错误输出定向到指定的文件,如果文件不存在则创建,如果存在则在末尾追加内容。 3. 标准输入定向(<): 使用 '<' 符号可以将标准输入定向为来自指定文件的内容。程序将从该文件读取数据而不是从键盘输入。 这些定向操作可以通过命令行操作符进行设置,也可以在程序中使用相关的系统调用函数来实现。文件描述符定向可以灵活地改变输入输出的目标,方便进行数据的读取和写入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值