在使用 find
命令搜索整个系统目录时,可能会遇到 Permission denied
的错误,这是因为当前用户(在这个例子中是 zhjgapp
)没有权限访问某些系统目录。为了避免这些错误消息,可以将错误消息重定向到 /dev/null
,这样就不会显示在命令输出中了。
下面例子,展示如何修改 find
命令来忽略 Permission denied
错误:
find / -name xxxxx 2>/dev/null
这里 2>/dev/null
表示将标准错误(标识符为2)重定向到 /dev/null
,/dev/null
是一个特殊的设备,它会丢弃写入它的任何内容,相当于一个黑洞。
在 Unix 和类 Unix 系统中,每个运行的进程都会有三个标准的数据流:
-
标准输入(Standard Input) - 通常标记为数字
0
。它是程序读取输入数据的渠道(默认从键盘输入)。 -
标准输出(Standard Output) - 通常标记为数字
1
。这是程序输出数据的主要方式(默认输出到终端/屏幕)。 -
标准错误(Standard Error) - 通常标记为数字
2
。这是程序输出错误信息的方式,独立于标准输出,允许错误信息和正常输出分开处理(默认也是输出到终端/屏幕)。
当我们使用 2>/dev/null
这样的重定向表达式时,2
指的就是标准错误流。这个表达式的意思是将所有的错误输出重定向到 /dev/null
,即忽略错误输出。使用这种方式可以有效避免在命令执行过程中由于权限不足而产生的大量错误信息干扰到命令的正常输出结果。
这种区分对待输出和错误的设计允许用户或其他程序更灵活地处理程序的输出内容,例如只捕获错误信息进行特别处理,或只关注正常的命令输出结果。