我被su'ed到一个用户运行一个特定的长时间运行的脚本。 我想使用屏幕,但我得到错误信息“无法打开您的terminal/ dev / pts / 4”,请检查。
所以我search了一下,遇到了一个论坛post,指示运行$ script '/dev/null/'
。 我这样做,然后我可以屏幕。
为什么这个工作? 什么是做屏幕不能像su'ed用户运行? 为什么redirect“脚本”到/ dev / null做这个被阻止呢? 是使用脚本来写一个日志作为原来的用户到某个地方?
那么,从技术上讲,你不会在这里redirect任何东西。
调用script /dev/null
只是使script
将整个打字稿保存到/dev/null
,这实际上意味着丢弃内容。
详细信息请参阅man script
, util-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,因此它不会触及权限问题。