andchmod
的等价词是什么?mesg y
mesg n
答案1
注:作为JdeBP在评论中指出mesg
,重现with的行为并非易事chmod
。
更改的终端
mesg
是与标准输入、输出或错误关联的终端,而不是会话的控制终端。这是因为多次登录的用户应该能够更改其任何登录终端,而不必停止在这些会话中运行的作业。这不是涉及其他用户终端的安全问题,因为需要适当的权限才能影响其他用户的终端。依次检查前三个文件描述符直到找到终端的方法是从 System V 开始采用的。
天真的方法mesg
是在使用时查看 shell 的控制终端(当前交互式 shell 的标准输入所附加的设备)上的权限变化。
shell 的控制终端由命令返回tty
。要弄清楚设备上的权限正在做什么,我们可以使用mesg n
它并查看发生了什么变化:mesg y
ls -l
$ ls -l "$(tty)"
crw--w---- 1 myself tty 5, 1 May 6 00:21 /dev/ttyp1
$ mesg n
$ ls -l "$(tty)"
crw------- 1 myself tty 5, 1 May 6 00:21 /dev/ttyp1
$ mesg y
$ ls -l "$(tty)"
crw--w---- 1 myself tty 5, 1 May 6 00:21 /dev/ttyp1
因此,看起来像是mesg n
删除了设备的组写入权限(rw--w----
更改为rw-------
)并mesg y
再次添加组写入权限。
chmod
就我而言,相当于
$ chmod g-w "$(tty)" # for "mesg n"
$ chmod g+w "$(tty)" # for "mesg y"
根据您的 Unix 风味适当添加盐和胡椒。
但请注意,如果 shell 的标准输入不是终端,tty
则会返回字符串not a tty
并且chmod
会失败。在这种情况下,mesg
将继续尝试使用终端设备获取 shell 的标准输出,然后使用标准错误(按该顺序)。这就是为什么上面是一个幼稚的方法。