“-p \; -quit”与 -exec 是什么意思?

“-p \; -quit”与 -exec 是什么意思?

这是什么find . exec /bin/bash -p \; -quit意思?

我已经知道,当它找到带有 a 的东西(文件?)时,.它会执行/bin/bash.

和命令有-p 关系吗?/bin/bashfind

\;和是什么-quit意思?

答案1

find . -exec /bin/bash -p \; -quit

(这里假设 GNUfind或与其兼容-quit)将启动,这将从(当前工作目录)find开始沿着目录树下降,对于每个文件,从其自身开始,执行 (其中只是告诉要执行的命令在哪里结束) ),如果该命令成功,则退出(因为)。../bin/bash -p\;find-quit

find命令本身并没有多大用处。这是一个复杂的开始方式bash。这里-p可以给你一个关于该命令背后的(邪恶)意图的提示。

-pbash当在权限提升上下文中调用它时(例如从执行了 setuid 可执行文件的进程调用时),将防止放弃其权限。

看起来我们处于一个受限制的上下文中,其中只允许用户执行一组受限制的命令。例如,这可以通过受限 shell 来完成。

find恰好是允许的命令列表之一,并且无论谁设置了受限环境,都忽略了这样一个事实:find可以执行任意命令,而不受针对 shell(find不是 shell 内置)设置的限制的影响。

所以find . -exec /bin/bash -p \; -quit看起来有人会运行这个命令来规避这些限制。

答案2

find命令实际上应该使用该选项-exec,这又应该以转义的分号结尾。这是在 的所有手册中find,其中解释了需要转义以使其成为命令的一部分find,而不是 shell 命令之间的分隔符和(例如)不与-quit您的示例中显示的选项。

顺便一提,-quit似乎指的是一些具体的实现(例如GNU 查找),因为它没有出现在POSIX

-quit
立即退出(如果没有发生错误,则返回值为零)。这不同于-prune因为-prune仅适用于修剪目录的内容,而-quit 只是让 find 立即停止。没有子进程将继续运行。任何已构建的命令行 -exec...\+或者-execdir...\+在程序退出之前调用。后-quit执行后,将不再处理命令行中指定的文件。例如,find /tmp/foo /tmp/bar -print -quit将仅打印/tmp/foo.一种常见的用法是-quit就是一旦找到我们想要的东西就停止搜索文件系统。例如,如果我们只想查找一个文件,我们可以这样做:
find / -name needle -print -quit

-p选项记录在bash 的手册

如果 Bash 启动时有效用户(组)id 不等于真实用户(组)id,并且-p不提供选项,不读取启动文件,shell 函数不从环境继承,SHELLOPTS、BASHOPTS、CDPATH 和 GLOBIGNORE 变量(如果它们出现在环境中)将被忽略,有效用户 ID 设置为真实用户ID。如果在调用时提供 -p 选项,则启动行为是相同的,但不会重置有效用户 ID。

相关内容