vaj*_*elu 3 io-redirection tty time
我正在find
以普通用户身份运行定时命令。
我所知道的是重定向是为了防止终端上的 stdout/stderr 消息。如果是这样,为什么不同的重定向方法需要不同的时间?它是否与 tty 上的写入速度有关,或者背后是否有其他原因?有人能指出我正确的方向来理解这一点吗?
$ id
uid=1000(user1) gid=1000(user1) groups=1000(user1),1001(user2)
$time find /
<truncated output>
real 0m13.902s
user 0m0.197s
sys 0m0.448s
$ time find / >/dev/null
<truncated output>
real 0m0.298s
user 0m0.068s
sys 0m0.206s
$time find / 2> /dev/null
<truncated output>
real 0m13.279s
user 0m0.181s
sys 0m0.405s
$ time find / > /dev/null 2>&1
real 0m0.306s
user 0m0.109s
sys 0m0.174s
Run Code Online (Sandbox Code Playgroud)
当您的进程 ( find
) 需要实际写出输出时,这显然比您告诉它丢弃所述输出需要更长的时间。
当您使用时find /
,stdout 和 stderr 都会发送到您的终端,并且必须将它们都写出(即,实际结果和所有权限错误等等)
当您使用时,time find / >/dev/null
您将删除命令的标准输出,但仍会打印出所有错误(如果有)。从你的结果来看,你有很多合法的结果和很少的错误。
当您使用 时time find / 2> /dev/null
,命令的标准输出仍在发送到您的终端,但现在您只是删除了标准错误。如果您通过文件系统查找您没有读取权限的文件,这实际上会非常快。
当您使用 时time find / > /dev/null 2>&1
,您将删除标准输出,然后将标准错误发送到发送标准输出的位置,...即,您同时删除了两者。这不会输出任何内容,因此将是所有命令中最快的。