ls -l 命令中文件类型 c 的含义

ls -l 命令中文件类型 c 的含义

我想知道 ls 命令中的类型 c 是什么。

我跟踪 /dev/stdin 处的符号链接,最终得到 /dev/pts/0

$ ls -l /dev/pts/0
crw--w---- 1 blue tty 136, 0 Apr  8 21:50 /dev/pts/0

我可以看到模式输出中的第一个符号是c。现在我正在尝试找出这意味着什么。

我可以找到一些信息,但 c 没有列出,其中一些似乎也有点错误。至少在我的盒子上,符号链接有一个小写的 l,而不是大写的 L。

d      if the entry is a directory;
a      if the entry is an append-only file;
D      if the entry is a Unix device;
L      if the entry is a symbolic link;
P      if the entry is a named pipe;
S      if the entry is a socket;
-      if the entry is a plain file.

来源:http://manpages.ubuntu.com/manpages/jammy/en/man1/ls.1plan9.html

我可以读到man pts这些是伪终端主从对。

ptmx、pts - 伪终端主设备和从设备
当进程打开 /dev/ptmx 时,它会获取伪终端主设备的文件描述符,并在 /dev/pts 目录中创建伪终端从设备。通过打开 /dev/ptmx 获得的每个文件描述符都是一个独立的伪终端主机,具有自己的关联从机,可以通过将文件描述符传递给 ptsname(3) 找到其路径。

那么它c代表什么?我认为这意味着这是一个pseudoterminal slave device.

编辑:

在阅读和思考更多之后,我想这是c因为它本质上是安慰

答案1

“c”表示该设备是“字符特殊设备”。如果您查看,/dev您还会看到“b”代表“块特殊设备”,例如所有磁盘。看维基百科

设备文件允许直接访问设备驱动程序。历史上,UNIX 为块结构设备(例如磁盘)提供字符设备和块设备。 “c”设备允许直接访问设备而无需通过系统缓冲区。这个名字有点误导,“raw”会更好,但历史决定了“c”。对于终端,这允许一次输出或输入一个或多个字符。对于磁盘,虽然它不允许字节级访问,但调用者必须确保所有块对齐和寻址都由调用者完成。 “b”设备可能更适合称为“缓冲”设备。 I/O 对系统的缓冲区进行,并在系统决定的某个点移动到磁盘。由于缓冲,设备驱动程序可能会接受不同大小的非对齐块。

答案2

第一个字符标识文件类型:

-    Regular file
b    Block special file
c    Character special file
d    Directory
l    Symbolic link
n    Network file
p    FIFO
s    Socket

对于常规文件,“-”可以替换为:

D    Demand recall file
E    Encrypted file
O    Offline file
S    Sparse file

相关内容