设备文件
在 UNIX 操作系统中,任何物理设备都有一个与之关联的文件,称为设备文件。
它是一个与设备驱动程序交互的接口。
与其他文件类型不同,它们不在数据块中保存任何数据,而是使用 inode 存储任何设备文件的主要和次要编号。
# cd /dev/ # ls -l crw-r----- 1 root tty 4, 0 Sep 23 12:51 tty0 brw-rw----- 1 root disk 8, 1 Sep 23 12:51 sda0
主要设备 否 访问设备所需的特定设备驱动程序
次要设备 没有设备驱动程序控制的类型的特定单元。
例如,如果我们有 10 台 HP 打印机,则主要编号是 HP 打印机设备驱动程序,次要编号是打印机实例(1,2 .. 最多 10)。
设备文件有两种类型
- 字符类型
- 块类型
字符特殊设备文件
- ls -l 命令输出的 filrst 列中的字符“c”标识字符特殊设备文件
- 数据以数据流的形式访问(逐个字符,一次1个字节)
- 示例:tty、串口、虚拟终端
# ls -l crw-r----- 1 root tty 4, 0 Sep 23 12:51 tty0
块特殊设备文件
- ls -l 命令输出第一列字符“b”标识一个字符特殊设备文件
- 数据按照为该设备定义的块大小访问
- 示例:硬盘、CD/DVD
# ls -l brw-rw----- 1 root disk 8, 1 Sep 23 12:51 sda0
硬链接
每个文件至少使用一个硬链接。
因此,当我们创建新文件时,会创建一个新的目录条目,称为链接计数。
因此,当我们创建指向此文件的新硬链接时,链接计数会增加 1.
- Linux创建硬链接方法
# touch file1 # ls -l -rw-r--r-- 1 root root 0 Sep 23 13:19 file1 # ln file1 file2 # ls -l -rw-r--r-- 2 root root 0 Sep 23 13:19 file1 -rw-r--r-- 2 root root 0 Sep 23 13:19 file2 # ls -li 1282 -rw-r--r-- 2 root 0 root 0 Sep 23 13:19 file1 1282 -rw-r--r-- 2 root 0 root 0 Sep 23 13:19 file2 # find . -inum 1282 ./file1 ./file2
链接数增加 1,每次创建一个新的文件硬链接时,如上所示。
即使我们删除任何一个文件,对另一个文件也没有影响。
只有链接计数减少硬链接不能跨文件系统。
命名管道(Named Pipe)
命名管道是用于处理器间通信的特殊文件。
与普通管道不同,我们可以读取和写入命名管道。
因此,它们也被称为 FIFO(文件入文件出)。
mknod() 或者 mkfifio() 是使用命名管道以按名称访问管道的常见示例。
如下例所示,2 个进程(gzip 和 cat)可以同时访问命名管道以向其中写入和读取数据。
# mkfifo test_pipe # gzip -9 -c > test_pipe < out.gz # cat file1 > test_pipe # ls -l test_pipe prw-rw----- 1 root root 0 Sep 23 12:51 test_pipe
软链接
如图所示软链接或者符号链接只是指向另一个文件。
它只包含它指向的文件的路径名
1.创建方法
# touch file1 # ln -s file1 link1 # ls -l -rw-r--r-- 1 root root 0 Sep 19 14:41 link1 lrwxrwxrwx 1 root root 5 Sep 19 15:41 link1 -> file1
- 上例中创建的软链接的大小为路径名(file1)中的字符数,为5(可以是绝对的,也可以是相对的)。
3.如果删除原始文件(file1),软链接将显示为无用。
- 软链接可以驻留在不同的文件系统上。
文件和目录
常规文件可以存储不同类型的数据,并且可以使用 touch 命令或者 vi 编辑器轻松创建。
目录保存文件和/或者目录与 inode 编号之间的关联。
文件类型
在任何 unix 操作系统中基本上有 5 种类型的文件。
- 常规
- 目录
- 符号链接(硬链接和软链接)
- 设备文件(字符特殊和块特殊设备)
- 命名管道
ls -l 命令第一列中的字符标识文件的类型。
# cd / # ls -l bin lrwxrwxrwx 1 root root 9 Sep 19 15:41 bin -> ./usr/bin
- Regular files d Directories l Symbolic links b Block-special device files c Character-special device files p Named pipes
Linux Inode
Linux/Unix 操作系统中的每个文件都有一个与之关联的 inode,但 Solaris ZFS 除外,它没有 inode。
索引节点的工作原理与一本书的附录非常相似。
每个 Inode 都有以下关于文件的信息。
- 所有者
- 权限
- 大小
- 最后访问时间
- 创建时间
- 组ID
- 指向与文件内容相关的数据块的指针
注意:然而,inode 不提供文件名。