类Unix系统中进程的标准的文件描述符
文件描述符在Unix系统中是一个整数,用来标识打开的文件或者I/O资源,每个进程默认会打开三个标准文件描述符(File Descriptors, FDs),用于处理输入和输出。下面介绍这三个FD
- 标准输入(Standard Input)
- 文件描述符编号:
0
- 作用:用于进程读取输入数据(默认来自键盘输入)
- 相关符号:在Shell中通常用
<
或<<
进行重定向(如command < input.txt
)
- 文件描述符编号:
- 标准输出(Standard Output)
- 文件描述符编号:
1
- 作用:用于进程输出正常结果(默认显示到终端)
- 相关符号:在Shell中通常用
>
或>>
进行重定向(如command > output.txt
)
- 文件描述符编号:
- 标准错误(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. 执行流程
echo log
输出内容echo
命令默认将log
写入标准输出(文件描述符1
)。> /dev/null
重定向标准输出
将标准输出(1
)从默认的终端屏幕重定向到/dev/null
,导致log
被丢弃,不会显示在终端。2>&1
重定向标准错误2>
表示重定向标准错误(文件描述符2
)。&1
表示将标准错误指向当前标准输出的目标(即/dev/null
)。- 因此,标准错误(如有)也会被丢弃。