为什么将“脚本”重定向到 /dev/null/ 允许“屏幕”在作为另一个用户使用时工作?

Ich*_*rus 40 linux su bash gnu-screen

我被说服了一个用户来运行一个特定的长时间运行的脚本。我想使用 screen 但我收到错误消息“无法打开您的终端 '/dev/pts/4' - 请检查。”

所以我在谷歌上搜索并发现了一个论坛帖子,指示运行$ script '/dev/null/'. 我这样做了,然后我就可以筛选了。

为什么这样做?su 在做什么,该屏幕无法以 su 用户身份运行?为什么将“脚本”重定向到 /dev/null 否则会被阻止?是否使用脚本将原始用户的日志写入某处?

Kar*_*zak 44

好吧,从技术上讲,您不会在此处重定向任何内容。

调用script /dev/null只是script将整个打字稿保存到/dev/null其中,实际上意味着丢弃内容。

有关man script详细信息和util-linux-ng包的实现,请参见( misc-utils/script.c)。

这与screen实际无关。为什么这个工作是调用script有一个副作用为你创建一个伪终端/dev/pts/X。这样你就不必自己做,并且 screen 不会有权限问题——如果你su从用户A到用户B,通过直接调用screen你试图抓住用户A的伪终端。除非您是root ,否则这不会成功。这就是您看到错误消息的原因。


Phi*_*ack 8

要直接输出到您的终端窗口,正在运行的程序需要能够写入您的控制终端。如果您使用的是 xterm 或 ssh 或其他一些虚拟连接(而不是真正的实时直接连接终端),则您的控制终端是伪 tty (pty)。

当您登录时,您的 pty 设置为只有您拥有写入权限,否则其他用户可能会在您的显示器上涂鸦(或阅读)。因此,当您 su 到另一个用户(并且该用户不是 root)时,该用户无权访问底层 pty。

但是,更复杂的 I/O(例如 screen)需要直接访问 pty 才能发挥控制整个屏幕的魔力。那是当您遇到运行命令的人无法正确访问控制终端的问题时。

将脚本重定向到 /dev/null 会导致 screen 不尝试写入控制终端,因此不会遇到权限问题。

  • 那么,如果转到 /dev/null,我如何才能看到屏幕写入的内容?我很确定我误解了它并没有真正转到/dev/null,但是它去哪里了? (3认同)