shell 是否可以将find与stderr沿着使用

p5fdfcr1  于 2023-01-21  发布在  Shell
关注(0)|答案(3)|浏览(134)

我遇到了一个关于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

因此,根据我的理解,find是在"/etc/sudoers "中查找文件类型,并使用cat命令执行输出,该命令将进一步执行grepped,因此,最终我将收到权限被拒绝的错误,因为我不是root用户,但2〉/dev/null应该忽略stedrr,我说得对吗/?

vm0i2vca

vm0i2vca1#

find而不是grep产生了您看到的输出。在可能的情况下,通过重定向消 debugging 误的 * 源 *,而不是忽略 * 所有 * 错误输出。在这种情况下,您只需要对您有权读取的文件调用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 {} +
uqzxnwby

uqzxnwby2#

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

也可以使用子shell:

(find /etc/sudoers.d -type f -exec cat {} + | grep kali) 2> /dev/null
tcbh2hod

tcbh2hod3#

全部归为一类:

{ find /etc/sudoers.d -type f -exec cat {} + | grep kali; }  2>/dev/null

相关问题