我正面临STDERR的问题,我希望我错过了一些东西。请看下面的语法和输出:
find /etc/sudoers.d -type f -exec cat {} + | grep kali 2> /dev/null
输出:
cat: /etc/sudoers.d/README: Permission denied
cat: /etc/sudoers.d/kali-grant-root: Permission denied
cat: /etc/sudoers.d/ospd-openvas: Permission denied
cat: /etc/sudoers.d/live: Permission denied
因此根据我的理解,查找正在寻找"/etc/sudoers"中的文件类型。并且使用cat命令执行输出,该命令被进一步grepped,所以最后我将得到一个permission denied错误,因为我不是根用户,而是2>/dev/null应该忽略stedrr, Am I right/?
您看到的输出是find
,而不是grep
。在可能的情况下,消除错误的源,而不是通过重定向忽略所有错误输出。在本例中,您只希望对具有读取权限的文件调用cat
。
find /etc/sudoers.d -type f -exec test -r ; -exec cat {} + | grep kali
注意,你根本不需要管道;让find
替你执行grep
。
find /etc/sudoers.d -type f -exec test -r ; -004 -exec grep kali {} +
2>/dev/null
仅适用于单个命令,而不是整个管道。在您的示例中,只重定向了grep
的stderr,而没有重定向find
的stderr。
重定向每个命令或使用命令组:
find /etc/sudoers.d -type f -exec cat {} + 2> /dev/null | grep kali 2> /dev/null
{ find /etc/sudoers.d -type f -exec cat {} + | grep kali; } 2> /dev/null
也可以使用a子shell:
(find /etc/sudoers.d -type f -exec cat {} + | grep kali) 2> /dev/null
分组:
{ find /etc/sudoers.d -type f -exec cat {} + | grep kali; } 2>/dev/null