Linux 中常用的文件描述符
- 0 文件描述符,表示标准输入。
- 1 文件描述符,表示标准输出。
- 2 文件描述符,表示标准错误。
标准情况下,这些文件描述符和以下设备关联:
- 0 文件描述符关联键盘,并返回给前端。
- 1 正确返回值,返回给前端。
- 2 错误返回值,返回给前端。
> 符号
在 shell 中,我们经常使用 > 符号,把输出重定位到一个文件。例如:
1 | cat /proc/xxx/maps > memory.txt |
以上输出是把某个进程的内存布局重定向到一个文件。其中,> 是 1> 的简写,实际意思是把标准输出重定向到后面的文件。这样屏幕上就不会有打印了,打印会重定向到文件中。
>& 符号
本质上,>& 符号不是一个符号。我们经常见到 2>&1 符号,实际意义是,将标准错误重新定位到标准输出。那为什么要加个 & 呢?因为不加 & 的话操作系统不会认为你是想把标准错误重定位给标准输出,而是想重定向到一个叫 “1” 的文件。所以 &1 表示 1 输出通道。举例,strace 命令可以查看系统调用,这个结果是输出到标准错误的。
1 | strace ls > log 2>&1 |
将标准输出重定向到 log 文件,并将标准错误重定向到标准输出。这样标准错误也会被重定向到 log 文件。
&> 符号
&> 意思是把标准错误和标准输出都重定向到某个文件。
1 | strace ls &> log |
写起来比较简单,且省力。