Article / 文章中心

Linux深入探索12-文件系统

发布时间:2022-01-26 点击数:257

Linux深入探索12-文件体系

Linuxyouhuiquan.jpg

本文目录结构预览:

  • 一、简介
    1、简略意义上的界说
    2、Unix 中的界说
  • 二、文件体系
    1、主目录:根目录
    2、挂载文件体系
    3、检查文件体系
    4、常见的文件体系
    5、挂载点:/mnt 与 /media
  • 三、文件类型
    1、一般文件
    2、目录
    3、伪文件
  • 四、根目录介绍
    1、常见根目录的目录结构
    2、尖端目录介绍
    3、程序相关目录:bin、lib、sbin
  • 五、特别文件
    1、检查特别文件
    2、硬件
    3、终端
  • 六、proc 文件
  • 七、参阅

一、简介

Unix 文件体系,即操作体系中经过存储及安排体系中的全部数据而为用户和程序供给服务的那一部分。

1、简略意义上的界说

从简略意义上讲,文件便是一个有称号的数据调集。大多数时分,文件储存在数字介质上:硬盘、CD、DVD、软盘、闪存存储卡等。

2、Unix 中的界说

在 Unix 中,文件的界说更为广泛。文件是任何源,有一个称号,能够能够从中读取数据;或许是任何方针,有一个称号,能够向其间写入数据。例如,键盘(一种输入源)、显现器(一种输出方针)都能够作为文件被拜访。另外还有不存在所谓的物理实体的文件,它们也接收输入或许产生输出,从而供给详细的服务。

以这种方法界说文件拥有重大意义:它意味着 Unix 程序能够运用简略的过程从任意的输入源读取数据,或许向任意的输出方针写入数据。

二、文件体系

文件体系的任务便是存储和安排数据,并向用户和程序供给数据的拜访功用。

Unix 和 Linux 体系中包含许多的文件,典型的 Unix 包含大约 10000 至 20000 个文件,许多的文件安排成了一颗十分大的树。

虽然文件数量和文件类型许多,但大部分 Linux 体系采用的都是树形结构文件体系,而且也都大部分采用了一个 Linux 目录结构规范——文件体系结构规范(Filesystem Hierarchy Standard, FHS)。

1、主目录:根目录

在树形结构中,咱们称树的主节点为。因而,咱们将 Linux 文件体系中的主目录称为根目录,用“/”来表明。

以超级用户的身份运转以下指令,能够估计体系中文件和目录的总数量,如下:

[nosee@instance-4 ~]$ sudo ls -R / | wc -l 158732

而根据 GUI 的体系,文件数量则更多:

nosee@nosee-virtual-machine:~/Desktop$ sudo ls -R / | wc -l 855069

注:在文件名的最初,“/”代表根目录。在文件名的中心,“/”充任定界符。

2、挂载文件体系

在大多数情况下,并不是一切的文件都存储在同一个物理设备上。更精确地说,文件存储在不同类型的设备上,包含多个磁盘分区(每个磁盘分区被当作一个独自的设备)。

每个存储设备都有自己的本地文件体系,其目录和子目录近按照规范 Unix 方法安排成树。可是,在拜访本地文件体系时,它的树有必要附加到主树上,这能够经过将小型文件体系的根目录连接到主文件体系中的特定目录上来实现。经过这种方法来连接小型文件体系时,咱们称为挂载(mount)该文件体系,小型文件体系在主树中附加到的目录则称为挂载点(mount point)。最终,当断开文件体系时,称之为卸载(umount)文件体系。

作为发动过程的一部分,Unix 每次发动时,都会主动挂载一些本地文件体系。因而,当体系发动结束以后,主文件体系现已添加了几个其它文件体系。

当咱们需要手动挂载一个设备时,运用的是mount程序(mount a filesystem),手动卸载则需要运用umount程序(unmount file systems)。

例:挂载设备/dev/fd0中的软盘驱动器文件体系,并将其附加在主树中的/media/floppy方位上。

mount /dev/fdo /media/floppy

挂载成功后,用户就能够经过/media/floppy目录拜访软盘上的文件。

3、检查文件体系

如你所知,Linux 支持十分多的文件体系,例如 ext4、ext3、ext2、sysfs、securityfs、FAT16、FAT32、NTFS 等等,当时被运用最多的文件体系是 ext4(Fourth extended filesystem,第四代扩展文件体系)。

1)mount

mount 被用来在类 Unix 体系中挂载本地或长途的文件体系。

运用指令mount自身能够显现当时挂载到体系上的一切文件体系列表,如下。

[nosee@instance-4 ~]$ mount | head sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime) proc on /proc type proc (rw,nosuid,nodev,noexec,relatime) udev on /dev type devtmpfs (rw,nosuid,relatime,size=2011124k,nr_inodes=502781,mode=755) devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000) tmpfs on /run type tmpfs (rw,nosuid,noexec,relatime,size=404084k,mode=755) /dev/sda1 on / type ext4 (rw,relatime,discard,errors=remount-ro) securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime) tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev) tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k) tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)

2)df - report file system disk space usage

运用指令df -T能够检查现已挂载的分区和文件体系类型,如下。

[nosee@instance-4 ~]$ df -hT Filesystem     Type      Size  Used Avail Use% Mounted on udev           devtmpfs  2.0G     0  2.0G   0% /dev tmpfs          tmpfs     395M   40M  355M  11% /run /dev/sda1      ext4      9.7G  2.2G  7.0G  25% / tmpfs          tmpfs     2.0G     0  2.0G   0% /dev/shm tmpfs          tmpfs     5.0M     0  5.0M   0% /run/lock tmpfs          tmpfs     2.0G     0  2.0G   0% /sys/fs/cgroup /dev/sda15     vfat      124M  5.7M  119M   5% /boot/efi tmpfs          tmpfs     395M     0  395M   0% /run/user/1001

注:

df 指令被用来报告文件体系的磁盘空间运用情况。

运用-h(human-readable)选项,将显现人类易读的大小单位。

3)findmnt - find a filesystem

不带参数的 findmnt 指令能够列出一切已挂载的文件体系,如下。(和不带参数的mount输出结果类似,但更直观)

[nosee@instance-4 ~]$ findmnt TARGET                                SOURCE      FSTYPE      OPTIONS /                                     /dev/sda1   ext4        rw,relatime,discard,errors=remount-ro ├─/sys                                sysfs       sysfs       rw,nosuid,nodev,noexec,relatime │ ├─/sys/kernel/security              securityfs  securityfs  rw,nosuid,nodev,noexec,relatime │ ├─/sys/fs/cgroup                    tmpfs       tmpfs       ro,nosuid,nodev,noexec,mode=755 │ │ ├─/sys/fs/cgroup/unified          cgroup2     cgroup2     rw,nosuid,nodev,noexec,relatime,nsdelegate │ │ ├─/sys/fs/cgroup/systemd          cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,xattr,name=systemd │ │ ├─/sys/fs/cgroup/blkio            cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,blkio │ │ ├─/sys/fs/cgroup/pids             cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,pids │ │ ├─/sys/fs/cgroup/net_cls,net_prio cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,net_cls,net_prio │ │ ├─/sys/fs/cgroup/cpuset           cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,cpuset │ │ ├─/sys/fs/cgroup/rdma             cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,rdma │ │ ├─/sys/fs/cgroup/cpu,cpuacct      cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,cpu,cpuacct │ │ ├─/sys/fs/cgroup/memory           cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,memory │ │ ├─/sys/fs/cgroup/perf_event       cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,perf_event │ │ ├─/sys/fs/cgroup/devices          cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,devices │ │ └─/sys/fs/cgroup/freezer          cgroup      cgroup      rw,nosuid,nodev,noexec,relatime,freezer │ ├─/sys/fs/pstore                    pstore      pstore      rw,nosuid,nodev,noexec,relatime │ ├─/sys/firmware/efi/efivars         efivarfs    efivarfs    rw,nosuid,nodev,noexec,relatime │ ├─/sys/fs/bpf                       bpf         bpf         rw,nosuid,nodev,noexec,relatime,mode=700 │ └─/sys/kernel/debug                 debugfs     debugfs     rw,relatime │   └─/sys/kernel/debug/tracing       tracefs     tracefs     rw,relatime ├─/proc                               proc        proc        rw,nosuid,nodev,noexec,relatime │ └─/proc/sys/fs/binfmt_misc          systemd-1   autofs      rw,relatime,fd=35,pgrp=1,timeout=0,minproto=5,maxproto... │   └─/proc/sys/fs/binfmt_misc        binfmt_misc binfmt_misc rw,relatime ├─/dev                                udev        devtmpfs    rw,nosuid,relatime,size=2011124k,nr_inodes=502781,mode=755 │ ├─/dev/pts                          devpts      devpts      rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000 │ ├─/dev/shm                          tmpfs       tmpfs       rw,nosuid,nodev │ ├─/dev/mqueue                       mqueue      mqueue      rw,relatime │ └─/dev/hugepages                    hugetlbfs   hugetlbfs   rw,relatime,pagesize=2M ├─/run                                tmpfs       tmpfs       rw,nosuid,noexec,relatime,size=404084k,mode=755 │ ├─/run/lock                         tmpfs       tmpfs       rw,nosuid,nodev,noexec,relatime,size=5120k │ └─/run/user/1001                    tmpfs       tmpfs       rw,nosuid,nodev,relatime,size=404080k,mode=700,uid=1001... └─/boot/efi                           /dev/sda15  vfat        rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharse...

findmnt 程序展示出了方针挂载点(TARGET)、源设备(SOURCE)、文件体系类型(FSTYPE)以及相关的挂载选项(OPTIONS)。

从上面的3个比如中,都能够看出该案例体系的主文件体系是 ext4。而其它文件体系,都是挂载到主文件体系的某个特定目录下的。

4、常见的文件体系

文件体系 说明
根据磁盘的文件体系 ——
ext3 第3代扩展文件体系(Linux)
ext4 第4代扩展文件体系(Linux)
FAT32 32位文件分配表文件体系(Microsoft Windows)
HFS+ 层次式文件体系(Macintosh)
ISO 9660 ISO 9660 规范文件体系(CD-ROM)
NTFS NT 文件体系(Microsoft Windows)
UDF 通用磁盘格式文件体系(可重写CD和DVD)
UFS2 Unix 文件体系(BSD、Solaris)
网络文件体系 ——
NFS 网络文件体系(广泛运用)
SMB 服务器信息块(Windows网络)
特别用处文件体系 ——
devpts 伪终端的设备界面(PTY)
procfs proc 文件体系
sysfs 体系数据文件体系(设备与驱动器)
tmpfs 暂时存储文件体系

根据磁盘的文件体系在硬盘、CD、DVD或其它设备上存储数据;网络文件体系支持经过网络同享资源;特别用处文件体系供给对体系资源的拜访(如伪文件)。

5、挂载点:/mnt 与 /media

广义地讲,存储设备有两种类型。固定介质永久附属于核算机中,例如硬盘、驱动器。可移动介质在体系运转时能够改动,例如 CD、DVD、软盘、闪存等。

该区别十分重要,因为文件体系存在消失的可能性,Unix 体系有必要保证恰当地办理该文件体系。例如,在答应弹出CD之前,Unix 有必要保证一切的输出操作都现已完成。

根据这一原因,文件体系层次结构需求运用特定的目录挂载文件体系。关于没有挂载在其它方位的固定介质(如额定的硬盘)来说,指定目录是 /mnt;关于可移动介质来说,目录是 /media

三、文件类型

Unix 文件有许多不同的类型,可是它们都能够分成 3 类:一般文件、目录和伪文件。

image

1、一般文件

一般文件(ordinary)或惯例文件(regular)是大多数人在运用的单词“文件”时所指的文件。一般文件包含数据,坐落某种类型的存储设备上。

广义的讲,一般文件有两种类型:文件文件和二进制文件。

文本文件用于存储文本数据:纯文本、shell 脚本、源程序、配置文件等。

二进制文件包含非文本数据,常见的二进制文件:执行程序、目标文件、图画、音乐文件、视频文件、字处理文档、电子表格、数据库等。

2、目录

和一般程序类似,目录文件也驻留在某种类型的存储设备上。可是目录不寄存惯例数据,而是用来安排、拜访其它文件。从概念上讲,目录“包含”其它文件。

咱们运用目录将文件安排成一个类似于树的层次体系。详细安排时,将文件组合成组,再将每组文件存储在各自的目录中。因为目录自身便是文件,所以目录还能够包含其它目录,从而形成层次结构。

实践上,目录并不寄存实践文件,它只是包含文件 Unix 定位文件所需的信息。

3、伪文件

与一般文件和目录不同,伪文件并不用来存储数据,所以这些文件自身不占用任何空间。

伪文件的意图是供给一种服务,这种服采纳和惯例文件相同的拜访方法进行拜访。在大多数情况下,伪文件用来拜访内核供给服务的。

最重要的伪文件类型是特别文件,有时也称为设备文件。特别文件是物理设备的内部表明,例如键盘、显现器、打印机、磁盘驱动器都能够当作特别文件来拜访。(实践上,包含核算机或许网络中的每个设备)

命名管道是管道功用的一个扩展,它能够将一个程序的输出连接到另一个程序的输入上。

proc 文件答应拜访内核中的信息。少量几种特定情况下,甚至还能够运用 proc 文件修改内核中的数据。

四、根目录介绍

理解核算机文件体系最方便的方法便是检查根目录,并检查一切子目录。

1、常见根目录的目录结构

目录 内容
/ 根目录
/bin 根本程序
/boot 发动体系时所需的文件
/dev 设备文件 (后边会详细介绍)
/etc 配置文件
/home 用户的 home 目录
/lib 根本同享库,内核模块
/lost+found 由 fsck 恢复的受损文件
/media 可移动介质的挂载点(如USB驱动器、CD-ROMs等)
/mnt 不能挂载在其他方位上的固定介质的挂载点(如额定的硬盘)
/opt 用来安装“可选的”第三方应用软件(主要是商业软件产品)
/proc proc文件 (后边会详细介绍)
/root 超级用户的 home 目录
/sbin 由超级用户运转的根本体系办理程序
/srv 本地体系所供给服务的数据
/tmp 暂时文件
/usr 静态数据运用的辅佐文件体系
/var 可变数据运用的辅佐文件体系

一般咱们把根目录下的一切子目录称为尖端目录。运用ls -l /检查尖端目录,如下:

[nosee@instance-4 ~]$ ls -l / total 60 lrwxrwxrwx   1 root root     7 Dec  9 20:59 bin -> usr/bin drwxr-xr-x   4 root root  4096 Dec  9 21:03 boot drwxr-xr-x  14 root root  2900 Jan 14 00:06 dev drwxr-xr-x  75 root root  4096 Jan 19 16:18 etc drwxr-xr-x   5 root root  4096 Jan  5 02:40 home lrwxrwxrwx   1 root root     7 Dec  9 20:59 lib -> usr/lib lrwxrwxrwx   1 root root     9 Dec  9 20:59 lib32 -> usr/lib32 lrwxrwxrwx   1 root root     9 Dec  9 20:59 lib64 -> usr/lib64 lrwxrwxrwx   1 root root    10 Dec  9 20:59 libx32 -> usr/libx32 drwx------   2 root root 16384 Dec  9 20:59 lost+found drwxr-xr-x   2 root root  4096 Dec  9 20:59 media drwxr-xr-x   2 root root  4096 Dec  9 20:59 mnt drwxr-xr-x   2 root root  4096 Dec  9 20:59 opt dr-xr-xr-x 130 root root     0 Jan 14 00:05 proc drwx------   9 root root  4096 Jan 14 04:05 root drwxr-xr-x  20 root root   640 Jan 19 12:47 run lrwxrwxrwx   1 root root     8 Dec  9 20:59 sbin -> usr/sbin drwxr-xr-x   2 root root  4096 Dec  9 20:59 srv dr-xr-xr-x  13 root root     0 Jan 14 04:59 sys drwxrwxrwt   9 root root  4096 Jan 19 16:09 tmp drwxr-xr-x  13 root root  4096 Dec  9 20:59 usr drwxr-xr-x  12 root root  4096 Jan  2 01:00 var

2、尖端目录介绍

1)/bin

这个目录寄存最重要的体系,即体系办理员在单用户形式下办理体系所需的根本东西。这些东西都是可执行文件,因而该目录命名为 bin (binary 二进制),即寄存二进制文件的方位。该目录的一些程序也能够由惯例用户运用。

检查/bin目录下的前十个程序,如:

[nosee@instance-4 ~]$ ls /bin | head [ aa-enabled aa-exec ab addpart anthoscli apropos apt apt-cache apt-cdrom

2)/boot

这是体系寄存引导过程中所需全部文件的方位。内核有必要坐落这个目录或许根目录中。

如下能够看出,文件initrd.img-4.19.0-18-cloud-amd64便是该体系的内核文件。假如升级过体系,则会在该目录中发现不止一个版别的内核。

[nosee@instance-4 ~]$ ls -l /boot/ total 21236 -rw-r--r-- 1 root root  2925615 Sep 29 18:53 System.map-4.19.0-18-cloud-amd64 -rw-r--r-- 1 root root    91019 Sep 29 18:53 config-4.19.0-18-cloud-amd64 drwxr-xr-x 3 root root    16384 Jan  1  1970 efi drwxr-xr-x 6 root root     4096 Dec  9 21:03 grub -rw-r--r-- 1 root root 14037410 Dec  9 21:03 initrd.img-4.19.0-18-cloud-amd64 -rw-r--r-- 1 root root  4659968 Sep 29 18:53 vmlinuz-4.19.0-18-cloud-amd64

3)/dev

一切特别文件都坐落这个目录中,包含物理设备和伪设备。(后边还会详细介绍)

4)/etc

这个目录包含的是配置文件。配置文件是某程序发动时处理的文本文件,其间包含有影响程序操作的指令或信息。

5)/home

当创立用户时,办理员会为用户标识赋予一个 home 目录,命名如:/home/用户标识

6)/lib

当程序运转时,常常要调用,即现已存在的数据和代码模块。Unix 供给许多的库,以答应程序拜访操作体系供给的服务。这个目录包含运转/bin和/sbin目录中的程序所需的根本库和内核模块。

7)/lost+found

假如 Unix 没有正常地关机,那么那些仅完成部分写入的文件将受到损坏。Unix 下次发动时,一个叫 fsck(filesystem check 文件体系检查)的程序将主动运转,检查文件体系并修正问题。/lost+found 目录就用于保存由 fsck 恢复的受损文件。

8)/sbin

称号 /sbin 代表“system binaries 体系二进制文件”,这个目录中寄存用于体系办理的程序,一般这个目录中的程序有必要由超级用户运转。

9)/srv

储存为本地体系所供给服务的数据(service,因而命名为/srv)。在这里存储数据的典型服务包含 cgi、Web、ftp、cvs、rsync等。

10)/tmp

这个目录用于暂时存储。任何人都能够在这个目录存储文件,可是最终 /tmp 的内容将主动移除。

11)/usr

这个目录是辅佐文件体系的根,包含有辅佐文件体系的重要子目录。(集成到主文件体系中来的独自文件体系的挂载点)

/usr 的意图是用来寄存静态数据,即没有办理员干与不会改动的数据。根据其特性,静态数据不会随时刻改动。这就答应 /usr 驻留于自己的设备,该设备甚至有可能是诸如 CD-ROM 之类的只读设备。(后边还会详细介绍)

12)/var

这个目录的称号意味着“variable 可变”。像 /usr 一样,这个目录是辅佐文件体系的根,包含有辅佐文件体系的重要子目录。区别是,/var 寄存的是可变数据,如web网站文件、日志文件、打印文件、电子邮件消息等。像 /usr 一样,/var 文件体系一般驻留于自己的设备。

这其间比较重要的一个目录便是/var/log,里面包含各种体系活动的记载,还有各种程序的日志文件。

3、程序相关目录:bin、lib、sbin

目录 内容
通用程序 ——
/bin 根本程序
/usr/bin 非根本程序
/usr/local/bin 本地安装程序
体系办理程序 ——
/sbin 由超级用户运转的根本体系办理程序
/usr/sbin 由超级用户运转的非根本体系办理程序
/usr/local/sbin 本地安装的体系程序
第三方应用程序 ——
/opt/xxx 应用程序xxx的静态数据,包含程序
/var/opt/xxx 应用程序xxx的可变数据

检查/usr目录,如下:

[nosee@instance-4 ~]$ ls -l /usr/ total 68 drwxr-xr-x  2 root root 20480 Jan 14 03:19 bin drwxr-xr-x  2 root root  4096 Oct  3 09:00 games drwxr-xr-x  3 root root  4096 Jan  1 08:23 include drwxr-xr-x 55 root root  4096 Jan  5 02:31 lib drwxr-xr-x  2 root root  4096 Dec  9 20:59 lib32 drwxr-xr-x  2 root root  4096 Dec  9 20:59 lib64 drwxr-xr-x  2 root root  4096 Dec  9 20:59 libx32 drwxr-xr-x 10 root root  4096 Dec  9 20:59 local drwxr-xr-x  2 root root 12288 Jan  6 06:07 sbin drwxr-xr-x 87 root root  4096 Jan  5 02:31 share drwxr-xr-x  2 root root  4096 Oct  3 09:00 src

能够看到/usr目录下的子目录有几个是与根目录/下的尖端目录名字相同。(如/usr/bin与/bin、/usr/lib与/lib等)

按照曾经的规则/bin是寄存根本程序的目录,/usr/bin是寄存非根本程序(大多数用户程序)的目录。/lib寄存根本同享库,而/usr/lib寄存非根本同享库。/sbin寄存由超级用户运转的根本体系办理程序,/usr/sbin

寄存由超级用户运转的非根本体系办理程序。

其实把以上这些程序分别寄存在两个类似的目录中,是由历史原因造成的。现在,存储设备现已十分快速,而且容量也更大了。所以现在许多 Unix 体系现已把这些同类的程序都存到了同一个目录中,可是曾经的目录结构还是保留下来。如下可知:

[nosee@instance-4 ~]$ ls -la /bin /lib /sbin lrwxrwxrwx 1 root root 7 Dec  9 20:59 /bin -> usr/bin lrwxrwxrwx 1 root root 7 Dec  9 20:59 /lib -> usr/lib lrwxrwxrwx 1 root root 8 Dec  9 20:59 /sbin -> usr/sbin

五、特别文件

特别文件是表明物理设备的伪文件,Unix 将一切的特别文件寄存在/dev(device 设备)目录中。

1、检查特别文件

运用指令ls /dev/能够显现体系上特别文件的称号。

[nosee@instance-4 ~]$ ls /dev/ autofs            mqueue              tty0   tty30  tty52    vcs3 block             net                 tty1   tty31  tty53    vcs4 bsg               network_latency     tty10  tty32  tty54    vcs5 btrfs-control     network_throughput  tty11  tty33  tty55    vcs6 char              null                tty12  tty34  tty56    vcsa console           psaux               tty13  tty35  tty57    vcsa1 core              ptmx                tty14  tty36  tty58    vcsa2 cpu_dma_latency   pts                 tty15  tty37  tty59    vcsa3 cuse              random              tty16  tty38  tty6     vcsa4 disk              rtc                 tty17  tty39  tty60    vcsa5 fd                rtc0                tty18  tty4   tty61    vcsa6 full              sda                 tty19  tty40  tty62    vcsu fuse              sda1                tty2   tty41  tty63    vcsu1 hpet              sda14               tty20  tty42  tty7     vcsu2 hugepages         sda15               tty21  tty43  tty8     vcsu3 hwrng             sg0                 tty22  tty44  tty9     vcsu4 initctl           shm                 tty23  tty45  ttyS0    vcsu5 input             snapshot            tty24  tty46  ttyS1    vcsu6 kmsg              stderr              tty25  tty47  ttyS2    vfio log               stdin               tty26  tty48  ttyS3    vga_arbiter loop-control      stdout              tty27  tty49  urandom  vhost-net mapper            tpm0                tty28  tty5   vcs      vhost-vsock mem               tpmrm0              tty29  tty50  vcs1     zero memory_bandwidth  tty                 tty3   tty51  vcs2

其间,大多数称号是平时极少量需要运用到的。因为大部分特别文件是由体系程序运用的。

下表可将常见的特别文件分为3组:硬件、终端和伪设备。

特别文件 说明
-----硬件----- 一切连接到核算机上的设备
/dev/fd0 软盘
/dev/hda 硬盘
/dev/hda1 硬盘:第1分区
/dev/sda SCSI 硬盘
/dev/sda1 SCSI 硬盘:第1分区
/dev/sda1 USB 闪存卡(被视为可移除的SCSI 硬盘)
/dev/lp0 打印机
/dev/usb/lp0 USB 打印机
-----终端----- 能够把终端分为实践终端(独立的物理设备)和伪终端(终端仿真程序)
/dev/tty 当时终端
/dev/tty1 控制台/虚拟控制台
/dev/pts/0 伪终端
/dev/ttyp0 伪终端
----伪设备---- 一个充任输入源或输出方针的文件,但并不对应实践设备(实在的或仿真的)。
/dev/null 放弃输出,输入不回来内容(eof)
/dev/zero 放弃输出,输入回来 null(0)
/dev/random 随机数生成器
/dev/urandom 随机数生成器

2、硬件

一切连接到核算机上的设备都经过特别文件拜访。

如/dev/fd0表明榜首个软盘驱动器,/dev/lp0表明榜首台打印机。(后边的数字指的是一个详细的设备,核算机程序一般从0开端计数)

硬盘的处理有点不同。如,榜首块 IDE 硬盘称为/dev/hda,第二块称为/dev/hdb,等等。

硬盘还被划分为一个或多个分区,分区能够作为独自的设备。榜首块硬盘的榜首个分区称为/dev/hda1,假如有第二个分区则为/dev/hda2。

3、终端

咱们能够把终端分为实践终端(独立的物理设备)和伪终端(终端仿真程序)。

运用指令tty能够检查当时运用的终端称号。(tty - print the file name of the terminal connected to standard input)

1)实践终端

充任硬件设备的终端运用的是/dev/tty命名约定,如/dev/tty1。在桌面环境运用虚拟控制台时,它也充任一个实践终端。默许情况下,Linux 支持6个这样的控制台,分别由特别文件/dev/tty1至/dev/tty6表明。

如:

[nosee ~]$ tty /dev/tty3

2)伪终端

当在窗口运用GUI运转终端仿真程序时,因为没有实践终端,所以 Unix 创立所谓的伪终端(pseudo terminal,pty)来模仿终端。因为有两种不同的体系来创立伪终端,因而能够看到两种类型的称号。

一种是/dev/ttyp0、/dev/ttyp1...这类称号;另外一种则是/dev/pts0、/dev/pts1...

如:

[nosee@instance-4 ~]$ tty /dev/pts/2

3)其它

为了方便起见,特别文件/dev/tty表明当时正在运用的终端。例如,你在运用虚拟控制台#3,那么/dev/tty与/dev/pts/3相同。

还能够这样玩:

image

六、proc 文件

proc 文件是那些供给一种简略的途径来检查多种类型的体系信息的伪文件, proc 文件直接从内核获取信息,而不是运用杂乱的程序搜出数据。(原始的 proc 文件体系是为了提取进程的信息而开发的)

一切的 proc 文件都寄存在/proc目录中。在这个目录中,能够发现体系中每个进程对应一个子目录。子目录的称号十分简略,便是各种进程的进程ID。ps(process status 进程状况)程序也是经过读取适宜的 proc 文件来收集所需数据的。

检查/proc目录如下

[nosee@instance-4 ~]$ ls -F /proc 1/     197/    25182/  383/  517/       devices      kpageflags    swaps 10/    198/    26/     384/  518/       diskstats    loadavg       sys/ 11/    2/      27/     395/  577/       driver/      locks         sysrq-trigger 12/    20/     28/     4/    579/       execdomains  meminfo       sysvipc/ 134/   209/    29/     400/  587/       filesystems  misc          thread-self@ 135/   21/     29053/  401/  6/         fs/          modules       timer_list 1363/  22/     2989/   403/  61/        interrupts   mounts@       tty/ 1364/  23/     3/      406/  8/         iomem        mtrr          uptime 1365/  230/    30/     413/  9/         ioports      net@          version 14/    23077/  31/     426/  acpi/      irq/         pagetypeinfo  vmallocinfo 15/    23078/  31414/  430/  buddyinfo  kallsyms     partitions    vmstat 16/    24/     32/     454/  bus/       kcore        sched_debug   zoneinfo 166/   243/    320/    458/  cgroups    key-users    schedstat 167/   25/     321/    459/  cmdline    keys         self@ 17/    25102/  32617/  49/   consoles   kmsg         slabinfo 19/    25175/  33/     50/   cpuinfo    kpagecgroup  softirqs 195/   25181/  381/    512/  crypto     kpagecount   stat

现代的 Linux 体系运用该目录来寄存许多其它伪文件,供给许多内核数据拜访功用。如文件/proc/cpuinfo显现了有关处理器的信息。

常见的 proc 文件:

proc 相关信息
/proc/xxx/ 进程#xxx
/proc/cmdline 内核选项
/proc/cpuinfo 处理器
/proc/decixes 设备
/proc/diskstats 逻辑磁盘设备
/proc/filesystems 文件体系
/proc/meminfo 内存办理
/proc/modules 内核模块
/proc/mounts 已挂载设备
/proc/partitions 磁盘分区
/proc/scsi SCSI 和 RAID 设备
/proc/swaps 交换分区
/proc/uptime 内核运转时刻(秒)和内核运转时刻(秒)
/proc/version 内核版别、分发、gcc 编辑器(用来构建内核)

一般,除非是体系办理员,否则永久不需要检查这些 proc 文件的。

例1:检查我的 Debian 云主机的内核版别信息

[nosee@instance-4 ~]$ cat /proc/version Linux version 4.19.0-18-cloud-amd64 (debian-kernel@lists.debian.org) (gcc version 8.3.0 (Debian 8.3.0-6)) #1 SMP Debian 4.19.208-1 (2021-09-29)

例2:检查我的虚拟 Ubuntu 主机的内核版别信息

nosee@nosee-virtual-machine:~/Desktop$ cat /proc/version Linux version 5.11.0-43-generic (buildd@lcy02-amd64-036) (gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0, GNU ld (GNU Binutils for Ubuntu) 2.34) #47~20.04.2-Ubuntu SMP Mon Dec 13 11:06:56 UTC 2021

例3:检查内存办理信息(榜首行的MemTotal:4040812 kB表明内存总大小约为4G)

[nosee@instance-4 ~]$ head /proc/meminfo MemTotal:        4040812 kB MemFree:         2863036 kB MemAvailable:    3232504 kB Buffers:          123204 kB Cached:           450864 kB SwapCached:            0 kB Active:           758276 kB Inactive:         252388 kB Active(anon):     443428 kB Inactive(anon):    30948 kB

七、参阅

书箱:《Unix & Linux 大学教程》第二十三章 (美)Harley Hahn 著 张杰良 译