类Unix系统中进程的标准的文件描述符

文件描述符在Unix系统中是一个整数,用来标识打开的文件或者I/O资源,每个进程默认会打开三个标准文件描述符(File Descriptors, FDs),用于处理输入和输出。下面介绍这三个FD

  1. 标准输入(Standard Input)
    • 文件描述符编号0
    • 作用:用于进程读取输入数据(默认来自键盘输入)
    • 相关符号:在Shell中通常用 <<< 进行重定向(如 command < input.txt
  2. 标准输出(Standard Output)
    • 文件描述符编号1
    • 作用:用于进程输出正常结果(默认显示到终端)
    • 相关符号:在Shell中通常用 >>> 进行重定向(如 command > output.txt
  3. 标准错误(Standard Error)
    • 文件描述符编号2
    • 作用:用于输出错误或诊断信息(默认显示到终端)
    • 相关符号:在Shell中用 2>2>> 重定向错误(如 command 2> error.txt

那我们在看以下代码便会清晰的多:

echo log > /dev/null 2>&1

这条命令由以下部分组成:

  • **echo log**:向标准输出(stdout)打印字符串 log
  • **> /dev/null**:将标准输出(文件描述符 1)重定向到 /dev/null
  • **2>&1**:将标准错误(文件描述符 2)重定向到当前标准输出(即 /dev/null

关键概念

(1) /dev/null 的作用

  • /dev/null 是一个特殊的设备文件,写入它的内容会被直接丢弃
  • 常用于屏蔽命令的输出或错误信息

(2) 文件描述符重定向

  • > 默认重定向标准输出(1> 的简写)
  • 2> 表示重定向标准错误(文件描述符 2
  • &1 表示引用当前标准输出的目标(即 /dev/null

3. 执行流程

  1. echo log 输出内容
    echo 命令默认将 log 写入标准输出(文件描述符 1)。
  2. > /dev/null 重定向标准输出
    将标准输出(1)从默认的终端屏幕重定向到 /dev/null,导致 log 被丢弃,不会显示在终端。
  3. 2>&1 重定向标准错误
    • 2> 表示重定向标准错误(文件描述符 2)。
    • &1 表示将标准错误指向当前标准输出的目标(即 /dev/null)。
    • 因此,标准错误(如有)也会被丢弃。