“/dev/tty”有什么特别之处?

97

ls -la /dev/tty 显示输出:

crw-rw-rw- 1 root tty 5, 0 Dec 14 22:21 /dev/tty

在开头的 c 是什么意思?当我执行类似 pwd > /dev/tty 的操作时,它会输出到标准输出。那么文件 /dev/tty 包含什么内容?

3个回答

133

'c'代表字符设备。tty是一个特殊的文件,表示当前进程的“控制终端”。

字符设备

Unix支持“设备文件”,它们实际上并不是文件,而是硬件设备的类似文件的访问点。 “字符”设备是一种逐字节接口的设备(与缓冲IO相对)。

TTY

/dev/tty是一个特殊文件,表示当前进程的终端。因此,当您使用 echo 1 > /dev/tty 时,您的消息(“1”)将显示在屏幕上。同样,当您使用 cat /dev/tty 时,您的后续输入将被复制(直到按下Ctrl-C为止)。

/ dev / tty 本质上并不“包含”任何内容,但您可以从中读取和写入数据(尽管没有什么用)。我想不出使用它的好处,但有类似的文件非常适用于简单的IO操作(例如, /dev/ttyS0 通常是串行端口)

这段引文来自 http://tldp.org/HOWTO/Text-Terminal-HOWTO-7.html#ss7.3

/ dev / tty代表当前进程的控制终端(如果有)。要查找哪些tty连接到哪些进程,请在shell提示符(命令行)下使用“ps-a”命令。查看“ tty”列。对于您所在的shell进程,/dev/tty是您现在使用的终端。在shell提示符下输入“ tty”可以查看它是什么(请参阅手动页tty(1))。 / dev / tty类似于指向具有一些附加功能的实际终端设备名称的链接,这对C程序员很有用:请参阅手动页tty(4)。

这里是 man 手册:http://linux.die.net/man/4/tty

(该手册介绍了 tty 设备在 Linux 系统中的使用方法)

17
一个好的使用/dev/tty的方法是,如果你试图在管道中调用一个编辑器(例如使用xargs),由于xargs的标准输入是一些文件列表而不是你的终端,仅仅执行| xargs emacs会破坏你的终端。相反,你可以使用 | xargs sh -c 'emacs "$@" </dev/tty' emacs,即使xargs的输入来自其他地方,也可以将编辑器连接到你的终端。(我的系统上的xargs手册建议使用此用法。) - Soren Bjornstad

16

/dev/tty 是当前进程的控制终端(如果有)。正如jtl999所说,它是一个字符特殊文件;这就是 ls -l 输出中 c 的含义。

man 4 tty 或者 man -s 4 tty 可以给你更多信息, 或者你可以在这里在线阅读 man 页面。

顺便提一下,pwd > /dev/tty 不一定会将内容打印到 shell 的标准输出(尽管它是 pwd 命令的标准输出)。如果 shell 的标准输出已经被重定向到除终端之外的其他位置,则 /dev/tty 仍然指向终端。

你也可以从 /dev/tty 中读取数据,通常会从键盘读取输入。


1
我无法理解你的 pwd > /dev/tty 不一定会打印到标准输出。如果标准输出已被重定向到终端以外的其他地方,那么它就不会打印到标准输出。在我看来,它总是会将进程的文件描述符1设置为 /dev/tty。你能解释一下吗? - Dagang
是的,fd 1 可以指代任何文件,但是 >/dev/tty 总是意味着使 fd 1 指向终端,而不管 fd 1 原本指向哪里。你能提供一个例子来支持你的论点吗? - Dagang
13
一个例子可以说明这个区别:( echo to stdout ; echo to tty > /dev/tty ) > a_file。其中,“to stdout”会被重定向到a_file文件里,但是“to tty”仍会显示在终端上,不会被重定向到a_file文件里。括号内部的子shell的标准输出被重定向到了文件a_file里,但是控制终端仍然是父shell所在的终端,比如xterm、ssh或者串行控制台等。 - TrentP
2
我发现这样做非常有用:find . -type d -name dummy | tee /dev/tty | xargs rm - Louay Alakkad
1
几年后重新阅读这段内容,我发现我的说法“pwd必须是一个shell内置命令”是不正确的。它可以是一个shell内置命令,但不一定是。我可能当时想到的是cd - Keith Thompson
显示剩余2条评论

4
“c”表示这是一个字符特殊文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接