# 标准输入输出和重定向 ## 标准输入输出012 在Linux系统中`0 1 2` 是一个文件描述符。 | 名称 | 代码 | 操作符 | Java表示 | Linux下文件描述符(Debian) | | -------------------- | ---- | ------------------ | ------------ | ----------------------------------------------- | | 标准输入(stdin) | 0 | < 或 << | `System.in` | `/dev/stdin -> /proc/self/fd/0 -> /dev/pts/0` | | 标准输出(stdout) | 1 | `>, >>, 1> 或 1>>` | `System.out` | `/dev/stdout -> /proc/self/fd/1 -> /dev/pts/0` | | 标准错误输出(stderr) | 2 | `2> 或 2>>` | `System.err` | `/dev/stderr -> /proc/self/fd/2 -> /dev/pts/0` | 平时使用的重定向写入命令 ```bash echo "wang" > test.txt ``` 其实也可以写成 ```bash echo "wang" 1> text.txt ``` ## 输入输出 大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端。一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端。同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端。 | 命令 | 说明 | | --------------- | ------------------------------------------------ | | command > file | 将输出重定向到 file | | command < file | 将输入重定向到file | | command >> file | 将输出以追加的方式重定向到file | | n > file | 将文件描述符为 n 的文件重定向到 file | | n >> file | 将文件描述符为 n 的文件以追加的方式重定向到 file | | n >& m | 将输出文件 m 和 n 合并 | | n <& m | 将输入文件 m 和 n 合并 | 放在**>**后面的**&**,表示重定向的目标不是一个**文件**,而是一个**文件描述符**。内置的文件描述符 **0** 为标准输入,文件描述符 **1** 为标准输出,文件描述符 **2** 为标准错误输出。 常见的 **2>&1** ,表示 stderr 错误输出重定向到 stdout 标准输出。 ## /dev/null文件 如果希望执行某个命令,但是不想看到结果,那么就把输出重定向一个永远不存在的东西上,`/dev/null` 就是一个黑洞垃圾站,不要的东西都放进来。/dev/null 文件非常有用,将命令的输出重定向到它,会起到"禁止输出"的效果。 ```bash # 如果希望屏蔽 stdout 和 stderr command > /dev/null 2>&1 #意:0 是标准输入(STDIN),1 是标准输出(STDOUT),2 是标准错误输出(STDERR)。这里的 2 和 > 之间不可以有空格,2> 是一体的时候才表示错误输出。 ```