NCEPUwiki NCEPUwiki
首页
分类
  • 常用账号与默认密码
  • 常用网站
  • 常用电话
  • 教室借用
  • 常用公众号
  • 学生组织与社团名单
  • 电动自行车管理
学习资料 (opens new window)
GitHub (opens new window)
首页
分类
  • 常用账号与默认密码
  • 常用网站
  • 常用电话
  • 教室借用
  • 常用公众号
  • 学生组织与社团名单
  • 电动自行车管理
学习资料 (opens new window)
GitHub (opens new window)
  • Python配置
  • VisualStudio安装与卸载
  • Git教程
  • GNU⧸Linux文件系统层级结构
    • GNU/Linux 文件系统层级结构 (FHS)
      • 根目录概览
      • 根目录下各文件夹详细介绍
    • XDG 基本目录规范
      • XDG基本目录规范(XDG Base Directory Specification)
      • XDG用户目录规范(User Directories)
  • 计算机知识专题
NCEPUwiki-Group
2026-05-01
目录

GNU⧸Linux文件系统层级结构

GNU⧸Linux文件系统层级结构

GNU/Linux 文件系统层级结构 (FHS)

文件系统层级结构标准(Filesystem Hierarchy Standard,FHS) 是 Linux 及类 Unix 操作系统中用于定义主要目录和其内容的规范。其目的是通过统一的目录布局,使用户和软件开发者能够轻松预知系统软件、数据文件、配置信息等的位置,从而提高跨发行版的兼容性。

FHS设计原则

  • 独立于发行版:提供发行版之间共享的基准布局

  • 可共享文件与不可共享文件分离:/usr、/opt 可以跨网络共享;而 /etc、/var 等为本地或运行态数据

  • 可变文件与静态文件分离:静态文件(程序、库)位于 /usr,可变文件(日志、缓存、队列)位于 /var

发展历史:FHS 最初由 Linux 社区制定,曾经由Linux基金会维护,自2025年底起,其维护工作已转移至 FreeDesktop.org (opens new window),但标准内容本身未变。当前的最新版本是 FHS 3.0(2015 年发布),但大多数主流发行版(如 Debian、ubuntu、Fedora、Red Hat等)在遵循其核心原则的同时,也存在一定的实现差异。

官方文档:https://refspecs.linuxfoundation.org/fhs (opens new window)

FHS3.0规范:https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html (opens new window)

根目录概览

/
├── boot
│ ├── efi(ESP分区挂载点)
│ │ └── EFI
│ │ ├── Boot
│ │ │ └── bootx64.efi
│ │ ├── GRUB
│ │ │ └── grubx64.efi
│ │ ├── log
│ │ │ ├── A.bin
│ │ │ └── log.bin
│ │ └── Microsoft
│ │ ├── Boot
│ │ └── Recovery
│ ├── grub
│ ├── amd-ucode.img
│ ├── initramfs-linux-fallback.img
│ ├── initramfs-linux.img
│ └── vmlinuz-linux
├── usr
│ ├── bin
│ ├── sbin -> bin
│ ├── lib
│ ├── lib64 -> lib
│ ├── lib32
│ ├── local
│ ├── include
│ ├── share
│ └── src
├── opt
├── etc
├── home
│ └── Remilia
├── root
├── media
├── mnt
├── var
│ ├── cache
│ ├── db
│ ├── empty
│ ├── games
│ ├── lib
│ ├── local
│ ├── lock -> /run/lock
│ ├── log
│ ├── mail -> spool/mail
│ ├── opt
│ ├── run -> /run
│ ├── spool
│ └── tmp
├── srv
├── dev
├── sys
├── proc
├── run
├── tmp
├── lib64 -> usr/lib
├── lib -> usr/lib
├── sbin -> usr/bin
└── bin -> usr/bin

发展变更

  1. 历史遗留问题+兼容性考虑:根目录下的bin,sbin目录分别软链接到/usr/bin和/usr/sbin
  • /bin -> /usr/bin

  • /sbin -> /usr/sbin

原本bin目录用于存放对所有用户都可执行的文件,sbin目录用于存放root用户可执行的文件

较为激进且主要面向单用户的发行版Fedora和ArchLinux还将/usr/bin和/usr/sbin进行了合并,最终结果如下

  • /bin -> /usr/bin
  • /sbin -> /usr/bin
  • /usr/sbin -> /usr/sbin
  1. 历史遗留问题+兼容性考虑:其余lib,lib64目录软链接到/usr/lib
  • /lib -> /usr/lib
  • /lib64 -> usr/lib
  • /usr/lib64 -> /usr/lib

根目录下各文件夹详细介绍

  • /boot 存放操作系统内核,启动引导器;(多系统通常共用)

  • /usr [Unix System Resource]

    • /usr/bin 可执行文件(包括二进制文件(和CPU架构强相关)和脚本文件)

    • /usr/lib 64位库文件

    • /usr/lib32 32位库文件

    • /usr/local 系统管理员手动编译安装的软件

    • /usr/include C/C++头文件

    • /usr/src 源代码

    • /usr/share 非代码资源,许多软件会在这里创建自己的子目录来存放资源

      • /usr/share/man 手册默认存放位置
      • /usr/share/doc 软件的详细文档、FAQ、示例配置文件、版权信息
      • /usr/share/info GNU Info 系统文件
      • /usr/share/licenses Application licenses
      • /usr/share/fonts 系统全局字体
      • /usr/share/icons 系统全局图标
      • /usr/share/pixmaps 系统全局图标
      • /usr/share/applications 存放.desktop 文件(这些文件定义了如何在图形化菜单中显示应用程序的启动器)
      • /usr/share/metainfo 存储软件的元数据文件(用于向软件中心、包管理器和其他系统工具描述一个应用程序的详细信息;文件扩展名通常是.metainfo.xml或.appdata.xml)
      • /usr/share/themes 桌面主题和窗口管理器主题
      • /usr/share/sounds 系统音效(如提示音、通知声)
      • /usr/share/wallpapers 系统自带的桌面壁纸
      • /usr/share/mime MIME 类型数据库,定义如何根据文件内容和扩展名识别文件类型及其关联的应用程序
  • /opt [option] 可选的额外软件(如大型商业软件)

  • /etc [et cetera]系统级配置文件

  • /home 普通用户家目录文件夹

  • /root root用户家目录

  • /media 自动挂载可移动介质

  • /mnt [mount] 挂载点(手动在此目录下创建子目录,用于挂载硬盘分区或网络共享等)

  • /var [variable] 日志、缓存等可变数据

    • /var/cache 应用程序缓存数据(可再生,主要用于提高性能)
    • /var/log 日志文件
    • /var/lib 应用程序状态信息
    • /var/spool 任务队列数据
    • /var/tmp 在多次重启之间保留的临时文件
  • /srv [service] 本机作为服务器,由系统提供服务的数据

  • /dev [device] 设备文件 (Virtual Filesystem)

  • /sys [system] 硬件设备、驱动、内核参数的接口 (Virtual Filesystem)

  • /proc [process] 内核和进程信息 (Virtual Filesystem)

  • /run 进程运行时数据 (临时内存文件系统tmpfs)

  • /tmp [temporary]临时文件 (临时内存文件系统tmpfs)

注:/tmp和/var/tmp文件夹权限drwxrwxrwt:任何用户都可读写,但只能删除自己创建的文件

文件系统层级和磁盘分区的对应关系(示例)

NAME SIZE TYPE MOUNTPOINTS
nvme0n1 1.9T disk
├─nvme0n1p1 1G part /boot/efi
├─nvme0n1p4 40G part /
├─nvme0n1p5 260G part /home
└─nvme0n1p6 16G part [SWAP]

XDG 基本目录规范

freedesktop.org制定XDG 基本目录规范,提供一个标准化的、有组织的方式来存储用户特定的数据。

XDG(X Desktop Group)

背景:随着桌面环境的发展,用户家目录 (~/) 变得非常混乱,充满了数以百计的以点号 (.) 开头的“隐藏”目录(如 .config, .vim, .cache),这些是应用程序存储其设置和数据的目录。这种混乱被称为“点文件瘟疫”(Dotfile Clutter)。

核心思想: 将用户文件按用途(配置、数据、缓存等)进行分类,并通过环境变量来指定这些文件的位置。

Question:XDG文件目录规范,通常用形如$XDG_CONFIG_DIR的变量表示,而不用固定的如~/.config的原因

Answer:

  • 灵活与偏好:不是所有人都想把配置放在家目录。有人可能为了多系统共享配置,专门划一个独立分区挂载;或者想把所有缓存扔到内存盘来减少SSD磨损。变量让用户可以自由重定向,而不是被动接受。
  • 整洁与隔离:用固定路径会导致家目录被.appname、.appnamerc这类点文件塞满,很难管理。更进阶的场景是多实例隔离,比如同时运行稳定版和测试版,可以通过临时改变量让它们读写不同配置,互不干扰。
  • 系统级管理:在多用户服务器或嵌入式系统上,家目录可能根本不存在,甚至/home都是只读的。软件读取$XDG_CONFIG_DIRS,管理员就能把配置放在/etc/xdg/或/usr/share/这类全局位置,让软件在没有家目录的环境下依然可用。
  • 符合Unix哲学:它遵循“机制,而非策略”的原则。软件只负责“去$XDG_CONFIG_DIR里找文件”这个机制,至于这个目录具体是~/.config还是/mnt/ssd/configs,那是用户的策略,软件不越俎代庖。

参考资料

官方文档:https://specifications.freedesktop.org/basedir/latest/ (opens new window)

视频资料1:https://www.bilibili.com/video/BV1W6cKzVE4L/ (opens new window)

视频资料2:https://www.bilibili.com/video/BV19Rgzz5Ev1/ (opens new window)

XDG基本目录规范(XDG Base Directory Specification)

XDG环境变量 默认路径 功能
$XDG_CONFIG_HOME $HOME/.config 用户专属配置文件目录(备份)
$XDG_CACHE_HOME $HOME/.cache 用户非必要的缓存数据(可以放心删除)
$XDG_DATA_HOME $HOME/.local/share 用户专属数据文件,应用运行中产生和使用的核心数据
(可以在不同电脑之间迁移)
$XDG_STATE_HOME $HOME/.local/state 记录应用的当前状态,方便下次打开时恢复原样
$XDG_DATA_DIRS /etc/xdg 定义按优先级排列的目录列表,用来查找系统级配置文件
(优先级:用户配置文件>系统配置文件)
$XDG_CONFIG_DIRS /usr/local/share:
/usr/share
用于查找系统级数据文件
$XDG_RUNTIME_DIR 无默认值
必须设置且符合特定权限
存放特定用户的运行时文件及其他文件对象
(如socket文件,pipe文件等用于进程之间通信文件)
(权限0700,仅用户本人拥有,必须在本地文件系统中)
(仅用户登录存在,当用户登出时,该目录及其中的所有文件都会被清空)

说明

  • $HOME/.local/bin 存储可执行文件(XDG推荐规范)
    没有对应的XDG环境变量,但建议将用户自行安装的可执行文件置于此
    很多发行默认将该路径加入系统的$PATH环境变量中,使放入的脚本和程序可以直接运行
  • 当上述变量未定义时,应用程序直接使用默认路径;只有需要自定义覆盖默认路径时才需要定义环境变量
    使用env命令查找环境变量不出现时,反而说明系统遵循了“保持干净”的原则

参考资料

  • Archwiki:https://wiki.archlinux.org/title/XDG_Base_Directory (opens new window)

XDG用户目录规范(User Directories)

由xdg-user-dirs软件包实现

系统级配置文件

  • /etc/xdg/user-dirs.conf
  • /etc/xdg/user-dirs.defaults #定义系统的默认目录名称

用户级配置文件(推荐使用xdg-user-dirs-update创建/修改)

  • $XDG_CONFIG_HOME/user-dirs.dirs
  • $XDG_CONFIG_HOME/user-dirs.locale
环境变量 默认目录名 中文名 说明
$XDG_DESKTOP_DIR Desktop 桌面 桌面上显示的文件和快捷方式
$XDG_DOWNLOAD_DIR Downloads 下载 软件的默认下载位置
$XDG_DOCUMENTS_DIR Documents 文档
$XDG_MUSIC_DIR Music 音乐
$XDG_PICTURES_DIR Pictures 图片
$XDG_VIDEOS_DIR Videos 视频
$XDG_TEMPLATES_DIR Templates 模板 存放文件模板
供文件管理器在新建文件菜单中调用
$XDG_PUBLICSHARE_DIR Public 公共 在局域网内分享文件

登陆时自动执行xdg-user-dirs-update(根据语言修改文件夹名称)
/etc/xdg/autostart/xdg-user-dirs.desktop

参考资料

  • 主项目与用户维基:freedesktop.org Wiki (opens new window)
  • ArchWiki:XDG user directories (opens new window)(中文:XDG 用户目录 (opens new window))
  • 代码仓库:xdg/xdg-user-dirs on freedesktop.org (opens new window)
#Linux
上次更新: 2026/05/01, 09:28:28
Git教程

← Git教程

最近更新
01
电气本科就业
05-01
02
Git教程
05-01
03
我们该如何度过研究生生活?
04-22
更多文章>
Theme by Vdoing | Copyright © 2025-2026 NCEPUwiki-Group | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式