我遇到了一个关于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,我说得对吗/?
3条答案
按热度按时间vm0i2vca1#
是
find
而不是grep
产生了您看到的输出。在可能的情况下,通过重定向消 debugging 误的 * 源 *,而不是忽略 * 所有 * 错误输出。在这种情况下,您只需要对您有权读取的文件调用cat
。请注意,您根本不需要管道;让
find
为您执行grep
。uqzxnwby2#
2>/dev/null
仅适用于单个命令,而不是整个管道。在您的情况下,仅重定向grep
的stderr,而不重定向find
的stderr。重定向每个命令或使用命令组:
也可以使用子shell:
tcbh2hod3#
全部归为一类: