这是/dev/sda1
我最新的Arch Linux服务器上的文件列表:
% ls -li /dev/sda1
1294 brw-rw---- 1 root disk 8, 1 Nov 9 13:26 /dev/sda1
因此/dev/
for中的目录条目sda
具有一个inode号1294。它是磁盘上的实际文件。
查看文件大小通常出现的位置。而是显示“ 8,1”。这是主要和次要设备号。还要注意文件权限中的“ b”。
该文件/usr/include/ext2fs/ext2_fs.h
包含以下(片段)C结构:
/*
* Structure of an inode on the disk
*/
struct ext2_inode {
__u16 i_mode; /* File mode */
该结构向我们展示了文件inode的磁盘结构。在这个结构中有很多有趣的东西。仔细看看。
的i_mode
元素struct ext2_inode
具有16位,并且仅对用户/组/其他,读/写/执行权限使用9位,对setuid,setgid和sticky使用另外3位。它有4位可以区分“普通文件”,“链接”,“目录”,“命名管道”,“ Unix系列套接字”和“块设备”等类型。
Linux内核可以遵循通常的目录查找算法,然后根据i_mode
元素中的权限和标志做出决定。对于块设备文件“ b”,它可以找到主要设备号和次要设备号,并且传统上使用主要设备号来查找指向处理磁盘的某些内核函数(设备驱动程序)的指针。次要设备号通常用于表示SCSI总线设备号或EIDE设备号等。
有关如何处理类似文件的其他决定/proc/cpuinfo
是基于文件系统类型做出的。如果您执行以下操作:
% mount | grep proc
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)
您可以看到/proc
文件系统类型为“ proc”。从文件中读取/proc
会导致内核根据文件系统的类型执行不同的操作,就像在ReiserFS或DOS文件系统上打开文件会导致内核使用不同的功能来查找文件以及查找文件的数据一样。文件。