2.1.1、文件系统、文件命名规则、文件类型

2.1.1、文件系统、文件命名规则、文件类型文件系统 文件命名规则 文件类型 每个驱动器都有自己的根目录结构

关注公众号 “融码一生”,领取全套 PDF / 电子书

1、文件系统的层次结构

  • windows 平台下打开“计算机”看到的是一个个的驱动器盘符:

  • 每个驱动器都有自己的根目录结构,这样形成了多个树并列的情形:

  • Linux 下看不到这些驱动器盘符,看到的是文件夹(目录):

  • Linux 操作系统没有盘符这个概念,所有的文件和目录都被组织成以一个根节点/开始的倒置的树状结构:

  • 目录就相当于 Windows 中的文件夹,目录中存放的既可以是文件,也可以是子目录;文件中存储的是真正的信息。
  • 文件系统的最顶层由根目录(用/表示)开始,根目录下既可以是目录,也可以是文件,而每一个目录中又可以包含(子)目录或文件。如此反复就可以构成一个庞大的文件系统。
  • 使用这种树状、具有层次的文件结构主要目的是方便文件系统的管理和维护;如果所有文件都放在一个目录下,其文件系统的管理和维护将变成一场噩梦。
  • 现实中也有许多类似例子,例如在整个行政管理体制中,村民就相当于文件,他们住在一个村庄中,村庄就是存储村民的目录。许多村又组成了个乡,这个乡就相当于存储村的目录,依此类推,最终就构建出了一个庞大的行政区域管理结构图。
  • 注意:目录名或文件名均区分大小写,如 dog、DOG 和 Dog 为 3 个不同的目录或文件。完整的目录或文件路径是由一连串的目录名所组成的,其中每一个目录由/来分隔。如 cat 的完整路径是/home/cat
  • 在文件系统中,有两个特殊的目录:
    • 用户所在的工作目录,即当前目录(用一个点.表示)
    • 当前目录的上一层目录,也叫父目录(用两个点..表示)
  • 如果一个目录/文件名是以一个点开始,就表示这个目录/文件是一个隐藏目录/文件。即以默认方式査找时,不显示该目录或文件。
  • 为了方便管理和维护,Linux 系统采用了文件系统层次标准(FHS 标准),它规定根目录下各个目录应该存在哪些类型的文件(或子目录),比如在/bin/sbin目录中存放的应该是可执行文件。

2、文件目录结构一览表

  • 通过命令行输入ls -l /可以看到 Linux 根目录(/)下包含很多的子目录(称为一级目录),如 bin、boot、dev 等。同时,各一级目录下还含有很多子目录(称为二级目录),比如/bin/bash/bin/ed等。Linux 文件系统目录总体呈现树形结构,/根目录就相当于树根。
  • Linux 系统免费开源,发行版本有很多,利用 Linux 开发产品的团队也有很多,如果任由每个人都按照自己的想法来配置 Linux 系统文件目录,后期可能会产生诸多的管理问题。为了避免诸多使用者对 Linux 系统目录结构天马行空,Linux 基金会发布了 FHS 标准。多数 Linux 发行版系统都遵循这一标准。
  • FHS(Filesystem Hierarchy Standard,文件系统层次化标准)规定了 Linux 系统中所有一级目录以及部分二级目录(/usr/var)的用途。发布此标准的主要是为了让用户清楚地了解每个目录应该存放什么类型的文件。

(1)根目录(/

  • FHS 认为 Linux 系统的根目录(/)最为重要(没有之一),因为:
    • 所有目录都是由根目录衍生出来的
    • 根目录与系统的开机、修复、还原密切相关
    • 一般根目录下只存放目录,Linux 下有且只有一个根目录。所有东西都是从这里开始
  • 当在终端里输入/home,其实是在告诉电脑,先从/(根目录)开始,再进入到home目录。
  • 根目录必须包含开机软件、核心文件、开机所需程序、函数库、修复系统程序等文件:

一级目录

功能(作用)

/bin/

  • 存放系统可执行二进制文件(如 ls、tar、mv、cat ),普通用户和 root 都可执行
  • 在单用户模式下也可以执行

/boot/

  • 放置 linux 系统启动时用到的一些文件,如内核文件(/boot/vmlinuz)和启动引导程序文件(/boot/grub)等

/dev/

  • 存放 linux 系统下的设备文件,访问该目录下某个文件相当于访问某个设备
  • 挂载光驱:mount /dev/cdrom /mnt

/etc/

  • 系统配置文件存放的目录(不建议在此目录下存放可执行文件)。系统内所有采用默认安装方式(rpm 安装)的服务配置文件全保存在此目录中,如用户信息、服务的启动脚本、常用服务的配置文件等。重要配置文件有:
    • /etc/inittab
    • /etc/fstab
    • /etc/init.d
    • /etc/X11
    • /etc/sysconfig
    • /etc/xinetd.d

/home/

  • 普通用户的主目录(家目录);创建用户时每个用户要有一个默认登录和保存自己数据的位置,即用户的主目录,所有普通用户的主目录是在/home/下建立一个和用户名相同的目录。如用户liming的主目录就是/home/liming
  • ~:当前用户的家目录
  • ~liming:用户liming的家目录

/lib/

  • 系统调用的函数库的保存位置;程序在执行过程中需调用一些额外的参数时需要函数库的协助

/media/

  • 挂载目录;系统建议用来挂载媒体设备,如软盘和光盘

/mnt/

  • 挂载目录;早期 Linux 中只有这一个挂载目录,并没有细分。系统建议这个目录用来挂载额外的设备,如 U 盘、移动硬盘和其他操作系统的分区
  • 通常光盘挂载于/mnt/cdrom下(可选择任意位置进行挂载)

/misc/

  • 挂载目录;系统建议用来挂载 NFS 服务的共享目录
  • 虽然系统准备了三个默认挂载目录:/media//mnt//misc/,但到底在哪个目录中挂载什么设备可以由管理员自己决定

/opt/

  • 第三方安装的软件的保存位置(放置和安装其它软件的位置,手工安装的源码包软件都可以安装到这个目录中)
  • 也可把软件放到/usr/local/目录中

/root/

  • 系统管理员 root 的家目录(主目录)
  • 普通用户主目录在/home/下,root 主目录直接在/

/sbin/

  • 放置系统管理员使用的可执行命令,如fdiskshutdownmount
  • /bin不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能查看而不能设置和使用

/srv/

  • 服务启动之后需要访问的数据目录;一些系统服务启动后,可以在这个目录保存所需要的数据。如 www 服务需要访问的网页数据存放在/srv/www

/tmp/

  • 临时目录。系统存放临时文件的目录,该目录下的所有用户都可以访问和写入
  • 重要数据不可放置在此目录下,最好每次开机都把该目录清空
  • 除此之外,Linux 系统根目录下通常还包含几个一级目录

一级目录

功能(作用)

/lost+found/

  • 系统异常产生错误时,产生的一些文件碎片会存放在这里
  • 系统启动的过程中,fsck工具会检查这里,并修复已经损坏的文件系统
  • 该目录只在每个分区中出现,例如:
    • /lost+found是根分区的备份恢复目录
    • /boot/lost+found/boot分区的备份恢复目录

/proc/

  • 虚拟文件系统;该目录的数据(如系统核心、外部设备、网络状态)并不保存在硬盘(不占用磁盘空间),而是保存到内存中。主要保存系统的内核、进程、外部设备状态和网络状态等。如:
    • /proc/cpuinfo:保存 CPU 信息的
    • /proc/devices:保存设备驱动的列表
    • /proc/filesystems:保存文件系统列表
    • /proc/interrupts
    • /proc/dma
    • /proc/ioports
    • /proc/net/*:保存网络协议信息

/sys/

  • 虚拟文件系统;和/proc/目录相似,该目录中的数据都保存在内存中,主要保存与内核相关的信息

(2)/usr 目录

  • usr(Unix Software Resource,注意不是 user)目录用于存储系统软件资源。FHS 建议所有开发者应把软件产品的数据合理的放置在/usr目录下的各子目录中,而不是为他们的产品创建单独的目录。
  • Linux 系统中所有系统默认的软件都存储在/usr目录下,类似 Windows 系统中C:\Windows\C:\Program files\两个目录的综合体。
  • FHS 建议/usr目录应具备的子目录:

子目录

功能(作用)

/usr/bin/

  • 存放系统命令,普通用户和超级用户都可以执行;这些命令和系统启动无关
  • 在单用户模式下不能执行

/usr/sbin/

  • 放置系统管理员使用的可执行命令,如fdiskshutdownmount
  • /bin不同的是,这几个目录是给系统管理员 root 使用的命令,一般用户只能查看而不能设置和使用

/usr/lib/

  • 应用程序调用的函数库保存位置
  • 程序在执行过程中需调用一些额外的参数时需要函数库的协助

/usr/XllR6/

  • 图形界面系统保存位置

/usr/local/

  • 手工安装的软件保存位置(存放软件升级包)

/usr/local/lib

  • 系统使用的函数库的目录
  • 程序在执行过程中,需要调用一些额外的参数时需要函数库的协助

/usr/local/sbin

  • /usr/sbin//sbin/

/usr/share/

  • 存放共享数据;应用程序的资源文件保存位置,如帮助文档、说明文档和字体目录

/usr/share/doc

  • 系统说明文件存放目录

/usr/share/man

  • 程序说明文件存放目录

/usr/src/

  • 源码包保存位置;手工下载的源码包和内核源码包都可以保存到这里
  • 习惯把手工下载的源码包保存到/usr/local/src/目录中,把内核源码保存到/usr/src/linux/目录中

/usr/include

  • C/C++ 等编程语言头文件的放置目录

(3)/var 目录

  • /var目录用于存储动态数据,如缓存、日志文件、软件运行过程中产生的文件等(放置系统执行过程中经常变化的文件)。此目录下建议包含的子目录:

/var 子目录

功能(作用)

/var/lib/

  • 程序运行中需要调用或改变的数据保存位置;如 MySQL 的数据库保存在/var/lib/mysql/目录中

/var/log/

  • 日志文件;比较重要的文件:
    • /var/log/message:所有的登录文件存放目录
    • /var/log/wtmp

/var/run/

  • 一些服务和程序运行后,它们的 PID(进程 ID)保存位置

/var/spool/

  • 主要是一些临时存放、随时会被用户所调用的数据,如:
    • /var/spool/mail/:存放新收到的邮件
    • /var/spool/cron/:存放系统定时任务

/var/www/

  • RPM 包安装的 Apache 的网页主目录

/var/nis

/var/yp

  • NIS 服务机制所使用的目录,主要记录所有网络中每一个 client 的连接信息
  • yp 是 linux 的 nis 服务的日志文件存放的目录

/var/tmp

  • 一些应用程序在安装或执行时,需要在重启后使用的某些文件,此目录能将该类文件暂时存放起来,完成后再删除
  • 如果要做一些实验和练习,需要创建一些临时文件,应保存在用户的主目录或/tmp/临时目录。但有些目录中不能直接修改和保存数据(如/proc/fn/sys/目录),因为它们是保存在内存中的,如果在这里写入数据,则你的内存会越来越小,直至死机;/boot/目录也不能保存额外数据,因为/boot/目录会单独分区作为启动分区,如果没有空闲空间,则会导致系统不能正常启动。
  • 总之,Linux 要在合理的目录下进行操作和修改。

(4)相对路径和绝对路径

  • 绝对路径
    • /目录开始描述的路径为绝对路径;例如,使用绝对路径的表示方式指明bin文件所在的位置应写为/usr/bin
    • 绝对路径是相对于根路径/的,只要文件不移动位置,则它的绝对路径不变
  • 相对路径
    • 每个目录下都有...
      • .表示当前目录
      • ..表示上一级目录(父目录)
      • 根目录下的...都表示当前目录
    • 相对路径是相对于当前所在目录而言的,随着程序的执行,当前所在目录可能会改变,因此文件的相对路径不是固定不变的。
  • 如果以 root 身份登录 Linux 系统,并实现将当前工作目录由/root转换为/usr目录,有以下 2 种方式:
    • 使用绝对路径
      pwd(显示当前所在的工作路径/root
      cd /usr
      pwd(显示当前所在的工作路径/usr
    • 使用相对路径
      pwd(显示当前所在的工作路径/root
      cd ../usr(相对 root,usr 位于其父目录/,因此用到..
      pwd(显示当前所在的工作路径/usr

2、文件系统到底有什么用处

  • 在 Linux下能看到类似/usr/home的目录,在 Windows 下能看到 C 盘、D 盘等,同时可以很轻松地在这些系统下添加、删除文件,这就是文件系统提供的功能。如果没有文件系统支持,看似很简单的操作将变得异常复杂。
  • 使用文件系统是和使用裸设备相对而言的。裸设备是一种没有格式化的磁盘或磁盘分区,也就是让操作系统或程序直接操作磁盘设备。通过文件系统的方式来组织磁盘存储和数据管理的好处:
    • 数据的读取、管理操作变得简单
      • 文件系统给用户提供了一个简单的操作界面,用户可以通过对文件系统的简单操作实现对磁盘的管理。虽然 Linux 系统下也可以直接使用裸设备,但在读取性能上,裸设备并不比文件系统高出多少,同时管理与维护麻烦,普通用户是无法接受的。
    • 磁盘分区管理灵活
      • 在文件系统下提供了很多的磁盘分区管理工具,如 LVM 等,通过这些工具可以灵活对磁盘分区进行大小的修改,而裸设备下必须预先规划好磁盘空间,可能造成空间的不足或浪费。
    • 支持数据容错机制,数据安全能得到保障
      • 一个好的文件系统提供了对于数据读取和写入的各种容错和保护机制,很好地保障了数据的安全,而裸设备没有这种灵活的管理机制,对于数据安全只能通过手工备份方式来实现。
      • 文件系统是操作系统和磁盘之间的一个桥梁,因此对磁盘的任何写操作都要经过文件系统,然后才到磁盘。这可以说是优点,也可以说是个缺点,通过文件系统可以合理简单地组织磁盘数据,但在大量写操作下,文件系统本身也会产生开销,例如对数据的维护、文件系统缓存等,这个桥梁就成了一个障碍。
      • 不过,现在很多类型的文件系统都在做写入性能的改进,因而相对于文件系统提供的这些优点,缺点基本可以忽略。

关注公众号 “融码一生”,领取全套 PDF / 电子书

今天的文章 2.1.1、文件系统、文件命名规则、文件类型分享到此就结束了,感谢您的阅读。
编程小号
上一篇 2024-12-10 10:51
下一篇 2024-12-10 10:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/82772.html