是否可以将find与stderr一起使用?



我正面临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

最新更新