Phi*_*ide 12 terminal chmod devices
我正在解决来自Unix The Textbook (第 8 章,#16,第 207 页)的问题:
给出
chmod
与mesg n
和mesg y
命令执行相同任务的命令行。(提示:每个硬件设备,包括您的终端,在/dev
目录中都有一个关联的文件。)
我相信答案是:
mesg n
= chmod 770 /dev/stdout
mesg y
= chmod 777 /dev/stdout
但我想知道如果你使用会发生什么chmod 000 /dev/stdin
?
您是否无法在终端中输入命令?
Gil*_*il' 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)"
。