UNIX 模式字符串的第一个字符表示什么?

ste*_*516 37 filesystem files file-type

我非常熟悉 linux 文件权限和特殊权限(sticky bit、suid、guid)

但是不知道是什么意思c?是许可,还是其他什么?我已经做了一些谷歌搜索,无法弄清楚。

这是包含它的设备文件。

steven@A215:~$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Dec 29 20:58 /dev/null
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

图片参考:https : //detailed.wordpress.com/2017/10/28/understanding-ls-command-output/

ste*_*ver 42

这意味着该文件是一个字符特殊文件- 基本上是一个提供串行访问的设备文件(与块特殊设备如磁盘驱动器相反)。例如,终端和串行设备通过字符特殊文件(/dev/tty1/dev/ttyS0等等)连接。

有关设备文件的简要介绍,请参阅Linux/UNIX:设备文件[cyberciti.biz]。有关更详细的讨论,请参阅此堆栈交换答案了解 /dev 及其子目录和文件。要了解底层数据结构,请参阅 The Linux Kernel Module Programming Guide: Character Device Files [tldp.org] 的第 4 章

  • 虽然很好,但如果你再扩展你的答案并提供一些有用的链接会更好。:) (3认同)
  • @SauravKumar 请随意添加一些 - 我在合适的级别找不到任何东西(要么什么都不添加,要么直接深入到 `struct char_device` C 代码内核编程) (3认同)

sou*_* c. 24

第一个字符标识Unix 文件类型:字符设备被标记c为模式字符串的第一个字母。同样,块设备标有b,

$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 Jan 21 21:50 /dev/null
$ ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Jan 21 21:50 /dev/sda
Run Code Online (Sandbox Code Playgroud)

还有更多这些特殊的设备(文件在某种意义上说在 Linux 中一切都是文件),

d : directory
s : socket
p : pipe
D : Door
l : symbolic link etc.
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅此维基百科页面。


pre*_*ise 7

ls -l输出一个 10 个符号的 UNIX 信息字符串,通常称为权限字符串。例如

-rw-rw-r--  1 userName groupName   13200650 Dec 13 21:23 fileName
Run Code Online (Sandbox Code Playgroud)

权限字符串模式字符串的第一个字符,称为文件描述符,表示文件类型,其余九个以三个为一组表示相关文件的权限,其中:

  • 第一组三个字符(在 10 个字符中的第一个字符之后)表示所有者的权限,
  • 第二组三个为组指定权限,
  • 最后一组三个为其他人(或世界)指定权限。

这里,在上面的例子中,第一个字符/符号“-”表示一个普通文件。

而在下面的例子中,

crw-rw-rw- 1 root root 1, 3 Dec 29 20:58 /dev/null
crw-rw-rw- 1 root root 1, 5 Jan 13 20:56 /dev/zero
Run Code Online (Sandbox Code Playgroud)

权限字符串的第一个字符是“c”,如上所述,它是一个文件类型指示器,表示字符设备

除了-c其他一些文件描述符是:

  • d -> 目录
  • l -> 符号链接
  • s -> Unix 套接字
  • b -> 块设备
  • p -> 管道
  • D -> 门

参考: