“ /bin/sh $(tty) 2>$(tty) ”是什么意思?

“ /bin/sh $(tty) 2>$(tty) ”是什么意思?

我正在看格特福宾斯at 命令的页面并看到此命令(该页面中的最后一个命令)

echo "/bin/sh <$(tty) >$(tty) 2>$(tty)" | sudo at now; tail -f /dev/null

获取 root shell。此命令确实给了我 root shell,但是,

  1. 该命令的前半部分是什么意思以及它是如何工作的?

删除 tail 命令会导致 shell 立即关闭。

  1. tail 命令如何保持 shell 保持打开状态?

答案1

命令计划启动一个命令(sudo at now),计划的命令是一个 shell,它将您的控制台作为标准输入、标准输出和标准错误。$(tty)这里的 被替换为类似于/dev/pty/0取决于您的控制台的内容。这是必要的,因为计划的作业是由没有 TTY 重定向的守护进程启动的。

只需tail -f /dev/null永远等待(或按 Ctrl-C)并避免与 TTY 交互,然后在启动此命令的 shell 和 root shell 之间进行交互。如果没有它,我猜你有 2 个并行的 shell 读取你的 TTY,你输入的内容可能会被其中一个 shell 随机解释。

相关内容