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

Bru*_*uce 57 unix

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

crw-rw-rw- 1 root tty 5, 0 Dec 14 22:21 /dev/tty
Run Code Online (Sandbox Code Playgroud)

一开始c是什么意思?当我做类似的东西pwd > /dev/tty打印到标准输出.文件/ dev/tty包含什么?

lah*_*her 89

'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"以查看它是什么(请参见手册第tt(1)页)./ dev/tty类似于实际终端设备名称的链接,以及C程序员的一些附加功能:请参见手册页tty(4).

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

  • / dev / tty`的一个很好的用途是,如果您试图在管道中调用编辑器(例如,使用`xargs`)。由于`xargs`的标准输入是一些文件列表而不是您的终端,因此只需执行例如||。xargs emacs`将破坏您的终端。相反,您可以使用`| xargs sh -c'emacs“ $ @” </ dev / tty'emacs`可以将编辑器连接到终端,即使xargs的输入来自其他地方。(我系统上的`xargs`手册页建议了这种用法。) (3认同)

Kei*_*son 10

/dev/tty是当前进程的控制终端(如果有)的同义词.正如jtl999所说,它是一个字符特殊文件; 这就是将cls -l输出装置.

man 4 tty或者man -s 4 tty应该给你更多的信息,或者你可以在这里在线阅读手册页.

顺便说一下,pwd > /dev/tty不一定打印到shell的标准输出(尽管它是pwd命令的标准输出).如果shell的标准输出已被重定向到终端以外的其他内容,则/dev/tty仍然指向终端.

您也可以阅读/dev/tty,通常从键盘读取.

  • 它是如何产生影响的一个例子:`(echo to stdout; echo to tty>/dev/tty)> a_file`一个人会发现"to stdout"被重定向到a_file,但是"to tty"仍会出现在shell运行的终端,不会被重定向到a_file.在`(...)`中运行部件的子shell将stdout重定向到文件,但控制终端仍然是父shell运行的终端,例如.您的xterm或ssh或串行控制台等 (7认同)
  • 我发现做类似“find”的事情非常有用。-type d -name 虚拟 | 三通 /dev/tty | xargs rm` (2认同)