Linux-文件描述符及重定向

文件描述符是与文件输入、输出相关联的整数。它们用来跟踪已打开的文件。最常见的文件
描述符是 stdinstdoutstderr 。我们甚至可以将某个文件描述符的内容重定向到另一个文
件描述符中。

在编写脚本的时候会频繁使用标准输入stdin、标准输出stdout和标准错误
stderr。通过内容过滤将输出重定向到文件是我们平日里的基本任务之一。当命令输出文本
时,这些输出文本有可能是错误信息,也可能是正常的(非错误的)输出信息。单靠查看输出的
文本本身,我们没法区分哪些是正常,哪些是错误。不过可以通过文件描述符来解决这个问题,
将那些与特定描述符关联的文本提取出来。
文件描述符是与某个打开的文件或数据流相关联的整数。文件描述符 01 以及 2 是系统预留的。

0 —— stdin (标准输入)

1 —— stdout (标准输出)

2 —— stderr (标准错误)

实战

  1. 通过截断文件的方式,将输出文本存储到文件temp.txt中,写入文件之前,temp.txt中的内容首先会被清空。

    echo "This is a sample text 1" > temp.txt
    
  2. 将文本追加到目标文件中

    echo "This is sample text 2" >> temp.txt
    
  3. stdout输入文件中,stderr 打印到屏幕上

    cmd > out.txt
    
  4. stderr 输入文件中,stdout 打印到屏幕上

    cmd 2> out.txt
    
  5. stderr单独重定向到一个文件,将stdout重定向到另一个文件

    cmd 2>stderr.txt 1>stdout.txt
    
  6. stderr转换成stdout,使得stderrstdout都被重定向到同一个文件中

    cmd 2>&1 output.txt
    
    cmd &> output.txt
    
  7. 既可以将数据重定向到文件,还可以提供一份重定向数据的副本作为后续命令的 stdin

    # tee 只能从`stdin`中读取
    cat a* | tee out.txt | cat -n
    
    1. tee命令
      在输出信息的同时把信息记录到文件中
      1. ls | tee ls.txt将会在终端上显示ls命令的执行结果,并把执行结果输出到ls.txt文件中,将会覆盖原文件的内容,若无ls.txt文件,将会自动创建该文件
      2. ls | tee -a ls.txt 保留ls.txt文件中原来的内容,并把ls命令的执行结果追加到ls.txt文件的最后,不覆盖原来的内容
      3. ls | tee file1.txt file2.txt

补充

  1. 将文件重定向到命令

    # cmd <file
     bash <(curl -s https://gitee.com/yw007/codes/6v34iz57ruhtdx1scq9fa100/raw?blob_name=hello_world.sh)
    
  2. 将脚本内部的文本块进行重定向

    有时候,我们需要对文本块(多行文本)进行重定向,就像对标准输入做的那样。考虑一个
    特殊情况:源文本就位于shell脚本中。一个实用的例子是向log文件中写入头部数据,可以按照下
    面的方法完成:

    #!/bin/bash
    cat<<EOF>log.txt
    LOG FILE HEADER
    This is a test log file
    Function: System statistics
    EOF
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值