chmod 000 / dev / stdin会永远禁用终端吗?


12

我正在研究Unix教科书中的问题 (第8章,第16页,第207页)

提供chmod执行与mesg nmesg y命令相同任务的命令行。(提示:每个硬件设备,包括您的终端,在/dev目录中都有一个关联的文件。)

我相信答案是:

mesg n = chmod 770 /dev/stdout

mesg y = chmod 777 /dev/stdout

但是我想知道如果您使用该chmod 000 /dev/stdin怎么办?

您是否无法在终端中输入命令而被锁定?


2
重要的是要了解仅在打开文件时才检查权限。因此,无论您的外壳程序的标准输入是什么,更改其权限都不会使您无法输入命令,因为外壳程序和终端仿真器或ssh或其他任何东西都已经打开了通信通道。 mesg n可以使用权限来影响未来write唯一的,因为write 没有已有的终端开放。
zwol

Answers:


20

不,/dev/stdin并且/dev/stdout是错误的设备。这些不是终端设备,它们分别是标准输入和标准输出的别名。按照定义,标准输入和标准输出是应用程序期望打开的文件描述符,它们具有常规含义(文件描述符分别为0和1,还有2是标准错误)。当应用程序需要文件名但应用程序的用户希望它访问特定的文件描述符而不是打开某些文件时,诸如/dev/stdin和之/dev/stdout类的设备很有用。根据unix变体的不同,它们甚至可能不是设备文件。例如,在Linux上,它们是指向/proc/self/fd/0 和朋友,而这些又是指向该文件描述符上已打开的任何文件的“魔术”符号链接。

更改的权限,/dev/stdin并且/dev/stdout只会更改显式使用这些文件名时发生的情况。它不会影响与终端相关的任何内容,也不会影响标准输入和标准输出的正常使用,因为权限仅在打开特定文件名时才重要。

什么mesg确实是改变过程的的权限控制终端。对于在终端中运行的应用程序,将在标准输入,标准输出和标准错误(文件描述符0、1和2)下打开终端。您可以使用该命令tty查看终端设备是什么。mesg n等同于chmod g-w "$(tty)"mesg y等同于chmod g+w "$(tty)"


2
tty不报告控制终端,但是终端在stdin上打开(如果有)。因此,在/ dev / stdin不是设备但在/ dev / stdin上打开的文件的特殊符号链接的Linux上,该符号链接chmot "$(tty)"大致相同chmod /dev/stdin(如果stdin是tty设备,则将尝试更改其模式)。not a tty否则为当前目录中的文件)。有关/dev/$(ps -o tty= -p "$$")控制终端,请参见。
斯特凡Chazelas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.