我想知道 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