注意:正如 JdeBP在评论中指出的那样,重现mesg
with的行为并非易事chmod
。
更改的终端
mesg
是与标准输入、输出或错误相关的终端,而不是 session 的控制终端。这是因为多次登录的用户应该能够更改他们的任何登录终端,而不必停止在这些会话中运行的作业。这不是涉及其他用户终端的安全问题,因为需要适当的权限才能影响其他用户的终端。System V采用的方法是依次检查前三个文件描述符中的每一个,直到找到终端。
最简单的方法是查看 shell 的控制终端(当前交互式 shell 的标准输入所连接的设备)在mesg
使用时权限的变化。
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
Run Code Online (Sandbox Code Playgroud)
所以它看起来像mesg n
删除了设备的组写入权限(rw--w----
更改为rw-------
)并mesg y
再次添加组写入权限。
该chmod
等效会,于我而言,是
$ chmod g-w "$(tty)" # for "mesg n"
$ chmod g+w "$(tty)" # for "mesg y"
Run Code Online (Sandbox Code Playgroud)
适当地添加盐和胡椒粉,以适应您的 Unix 特定风味。
但是请注意,如果 shell 的标准输入不是终端,tty
则会返回字符串not a tty
并且chmod
会失败。在这种情况下,mesg
将继续尝试使用终端设备获取 shell 的标准输出,然后尝试标准错误(按此顺序)。这就是为什么上述是一种幼稚的方法。
归档时间: |
|
查看次数: |
614 次 |
最近记录: |