在 Linux 的世界里,命令行就像是魔法师手中的魔杖,而文件描述符就是那些隐藏的秘密力量。今天,我们就来揭开其中一个秘密——2>&1
。
文件描述符简介
在 Linux 系统中,有三个特殊的文件描述符:
- 0: 标准输入 (stdin)
- 1: 标准输出 (stdout)
- 2: 标准错误输出 (stderr)
这些数字代表了数据的流向。例如,当我们使用 echo "hello"
时,数据从标准输出(1)流向屏幕。
解析 2>&1
那么,2>&1
是什么意思呢?简单来说,它的作用是将标准错误输出重定向到标准输出。这样,错误信息就不会单独显示,而是和正常输出一起展示。
但是,为什么不是直接写 2>1
呢?原来,>&
是一个整体,意味着“引用并重定向”。如果写成 2>1
,就会将标准错误输出重定向到一个名为 1
的文件,这显然不是我们想要的。
为什么要放在后面?
考虑这样一个命令:
nohup java -jar app.jar >log 2>&1 &
这里的顺序很重要。首先,>log
将标准输出重定向到 log
文件。接着,2>&1
将标准错误输出也指向标准输出,因此错误信息也会被写入 log
文件。
如果顺序反过来:
nohup java -jar app.jar 2>&1 >log &
那么 2>&1
会先执行,导致标准错误输出和标准输出都指向屏幕。随后的 >log
只会影响标准输出,所以只有标准输出会被写入 log
文件。
简化写法
每次写 ">log 2>&1"
太麻烦了,有没有办法简化呢?答案是有的:
nohup java -jar app.jar &>log &
这种写法和 ">log 2>&1"
的效果是一样的,但更简洁。
总结
通过今天的探索,我们不仅学会了 2>&1
的用法,还了解了它背后的逻辑。下次当你在使用 Linux 命令行时,不妨试试这些技巧,让你的命令行操作更加高效吧!