#### # 区别：

    1

    2>/dev/null

意思就是把错误输出到 “黑洞”

    1

    >/dev/null 2>&1

默认情况是 1，也就是等同于 1>/dev/null 2>&1。意思就是把标准输出重定向到 “黑洞”，还把错误输出 2 重定向到标准输出 1，也就是标准输出和错误输出都进了 “黑洞”

    1

    2>&1 >/dev/null

意思就是把错误输出 2 重定向到标准出书 1，也就是屏幕，标准输出进了 “黑洞”，也就是标准输出进了黑洞，错误输出打印到屏幕

#### # 解释：

1. 文件描述符
   Linux 系统预留三个文件描述符：0、1 和 2，他们的意义如下所示：
   0—— 标准输入（stdin）
   略...
   1—— 标准输出（stdout）
   在当前目录下，有且只有一个文件名称为 a.txt 的文件，这时我们运行这个命令【ls a.txt】, 就会获得一个标准输出 stdout 的输出结果：a.txt
   2—— 标准错误（stderr）
   在当前目录下，有且只有一个文件名称为 a.txt 的文件，我们运行命令【ls b.txt】，我们就会获得一个标准错误 stderr 的输出结果 “ls：无法访问 b.txt：没有这样的文件或目录”。

2. 重定向
   重定向的符号有两个：> 或 >>，两者的区别是：前者会先清空文件，然后再写入内容，后者会将重定向的内容追加到现有文件的尾部。举例如下：

- 重定向标准输出 stdout
  如上图所示，对比没有添加重定向的操作，这条命令在使用之后并没有将 a.txt 打印到屏幕。在紧接的 cat 操作后，可以发现本来应该被输出的内容被记录到 stdout.txt 中。

- 重定向标准错误 stderr
  如上图所示，文件描述符 2，标准错误的重定向也是同样的原理被记录在了文件 stderr.txt 这个文件里面了。

- 可以将 stderr 单独定向到一个文件，stdout 重定向到另一个文件

      1

      ls b.txt 2> stderr.txt 1>stdout.txt

- 也可以将 stderr 和 stdout 重定向到同一个文件

      1

      ls b.txt > output.txt 2>&1

- 或采用下面的方法，可以少写几个字，能达到同样的效果

      1
      2

      ls b.txt &> output.txt
      ls b.txt >& output.txt #两个表达式效果一样的

3. Linux 特殊文件
   /dev/null 是一个特殊的设备文件，这个文件接收到任何数据都会被丢弃。因此，null 这个设备通常也被称为位桶（bit bucket）或黑洞。
   所以，2>/dev/null 的意思就是将标准错误 stderr 删掉。

Shell 2>&1