设备文件

在 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)。

设备文件有两种类型

  1. 字符类型
  2. 块类型

字符特殊设备文件

  1. ls -l 命令输出的 filrst 列中的字符“c”标识字符特殊设备文件
  2. 数据以数据流的形式访问(逐个字符,一次1个字节)
  3. 示例:tty、串口、虚拟终端
# ls -l
crw-r-----  1  root  tty   4,  0  Sep  23  12:51  tty0

块特殊设备文件

  1. ls -l 命令输出第一列字符“b”标识一个字符特殊设备文件
  2. 数据按照为该设备定义的块大小访问
  3. 示例:硬盘、CD/DVD
# ls -l
brw-rw-----  1  root  disk   8,  1  Sep  23  12:51  sda0

硬链接

每个文件至少使用一个硬链接。
因此,当我们创建新文件时,会创建一个新的目录条目,称为链接计数。
因此,当我们创建指向此文件的新硬链接时,链接计数会增加 1.

  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. 链接数增加 1,每次创建一个新的文件硬链接时,如上所示。

  2. 即使我们删除任何一个文件,对另一个文件也没有影响。
    只有链接计数减少

  3. 硬链接不能跨文件系统。

命名管道(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
Unix 文件基础知识:Inode、软链接与硬链接、设备文件、命名管道
之路教程 https://onitr oad .com

软链接

如图所示软链接或者符号链接只是指向另一个文件。
它只包含它指向的文件的路径名

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
  1. 上例中创建的软链接的大小为路径名(file1)中的字符数,为5(可以是绝对的,也可以是相对的)。

3.如果删除原始文件(file1),软链接将显示为无用。

  1. 软链接可以驻留在不同的文件系统上。

文件和目录

常规文件可以存储不同类型的数据,并且可以使用 touch 命令或者 vi 编辑器轻松创建。
目录保存文件和/或者目录与 inode 编号之间的关联。

文件类型

在任何 unix 操作系统中基本上有 5 种类型的文件。

  1. 常规
  2. 目录
  3. 符号链接(硬链接和软链接)
  4. 设备文件(字符特殊和块特殊设备)
  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 都有以下关于文件的信息。

  1. 所有者
  2. 权限
  3. 大小
  4. 最后访问时间
  5. 创建时间
  6. 组ID
  7. 指向与文件内容相关的数据块的指针

注意:然而,inode 不提供文件名。

日期:2020-09-17 00:14:33 来源:oir作者:oir