为什么redirect“脚本”到/ dev / null /允许“屏幕”工作,而作为另一个用户?

我被su'ed到一个用户运行一个特定的长时间运行的脚本。 我想使用屏幕,但我得到错误信息“无法打开您的terminal/ dev / pts / 4”,请检查。

所以我search了一下,遇到了一个论坛post,指示运行$ script '/dev/null/' 。 我这样做,然后我可以屏幕。

为什么这个工作? 什么是做屏幕不能像su'ed用户运行? 为什么redirect“脚本”到/ dev / null做这个被阻止呢? 是使用脚本来写一个日志作为原来的用户到某个地方?

那么,从技术上讲,你不会在这里redirect任何东西。

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

详细信息请参阅man scriptutil-linux-ng软件包用于实现( misc-utils/script.c )。

实际上这与screen无关。 为什么这个工作是调用script/dev/pts/X有一个副作用,就是为你创build一个伪terminal。 这样你就不必自己动手了,屏幕也不会有权限问题 – 如果你从用户A到用户B ,通过直接调用screen你试图占用用户A的伪terminal。 这不会成功,除非你是 。 这就是为什么你看到错误信息。

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

只有您login时,您的pty才具有写权限,否则其他用户可能会在您的显示器上涂鸦(或读取它)。 因此,当你su到另一个用户(并且该用户不是root用户)时,该用户不能访问基础pty。

但是,比如屏幕等更复杂的I / O需要直接访问pty来控制整个屏幕。 那时候遇到问题时,运行命令的人没有适当的访问控制terminal的权限。

将脚本redirect到/ dev / null将导致屏幕不会尝试写入控制terminal,因此它不会触及权限问题。