正如大多数人已经做过很多次一样,使用less
以下命令查看长文本很方便:
some_command | less
Run Code Online (Sandbox Code Playgroud)
现在它的标准输入连接到一个管道(FIFO)。它怎么还能读取像 up/down/quit 这样的命令?
从这个对Linux 的回答: /dev/console 、 /dev/tty 和 /dev/tty0 之间的区别
从 文档:
Run Code Online (Sandbox Code Playgroud)/dev/tty Current TTY device /dev/console System console /dev/tty0 Current virtual console
在过去的美好时光
/dev/console
是系统管理员控制台。TTY 是用户连接到服务器的串行设备。现在/dev/console
和/dev/tty0
代表当前的显示通常是一样的。例如,您可以通过添加console=ttyS0
到grub.conf
. 之后,您/dev/tty0
是监视器,并且/dev/console
是/dev/ttyS0
.
通过“系统控制台”,/dev/console
就像是一个文本物理终端的设备文件,就像/dev/tty{1..63}
是虚拟控制台的设备文件。
通过“/dev/console
并/dev/tty0
代表当前显示和通常是相同的”,/dev/console
在我看来它也可以是虚拟控制台的设备文件。/dev/console
似乎更像/dev/tty0
是/dev/tty{1..63}
(/dev/tty0
是当前活动的虚拟控制台,可以是 中的任何一个/dev/tty{1..63}
)。
什么是/dev/console
?它是干什么用的?
不/dev/console
玩了Linux内核相同作用/dev/tty
的过程?(/dev/tty …
是major, minor
唯一的编号?
我们有任何引用和参考吗?
NAME MAJ:MIN RM SIZE RO MOUNTPOINT
sda 8:0 0 465.8G 0
??sda1 8:1 0 298.2M 0
??sda2 8:2 0 3G 0
??sda3 8:3 0 458.7G 0 /
??sda4 8:4 0 1K 0
??sda5 8:5 0 3.8G 0
sr0 11:0 1 1024M 0
Run Code Online (Sandbox Code Playgroud) 根据此答案由席利,less
从标准错误读取导航命令,如果它不能够打开/dev/tty
。
这似乎令人费解,因为我从未见过任何写入另一个程序的 stderr 流的内容,而且我什至不知道如何实现。
为读取和写入而打开 stderr 的目的是什么?如果这很有用,我如何在现代系统上使用它?(例如,是否有一些神秘的语法可以将某些东西传送到 stderr 而不是 stdin?)
以下所有命令都在我的 debian 终端中运行。
ls /dev |grep ptmx
/dev/ptmx
ls /dev/pts
0 1 ptmx
Run Code Online (Sandbox Code Playgroud)
/dev/ptmx
和 和有/dev/pts/ptmx
什么区别?
ls /dev/tty* |sort
/dev/tty
/dev/tty0
/dev/tty1
/dev/tty10
Run Code Online (Sandbox Code Playgroud)
/dev/tty 和 /dev/tty0 (/dev/tty1....) 之间有关系吗?
/dev/tty 控制所有其他 /dev/tty[number] ?
来自https://unix.stackexchange.com/a/472920/674
“字符设备”和“块设备”是抽象概念,通常在 Unix 风格的系统中用于对各种设备进行分类。
设备是由硬件(设备或设备控制器)、设备驱动程序、文件系统、操作系统内核 I/O 子系统和/或其他东西决定的块设备还是字符设备?
我认为它们是纯硬件(设备或设备控制器)的概念,独立于设备驱动程序、文件系统和操作系统内核 I/O 子系统。
唯一真正可见的区别是块设备使用缓冲区缓存而字符设备不使用。(并且某些块设备驱动程序可能会提供在每个文件的基础上绕过缓冲区缓存的选项)。
块设备使用的缓冲区缓存是由设备驱动程序、文件系统还是硬件(设备或设备控制器)提供的?如果是硬件,那么这是否意味着设备是块设备还是字符设备完全由硬件(设备或设备控制器)决定?
谢谢。