当前位置:首页>Linux>Linux 系统目录结构详解

Linux 系统目录结构详解

  • 2026-09-15 10:44:26
Linux 系统目录结构详解
    在 Linux 系统的世界里,“一切皆文件”,而目录则是组织这些文件的基石。理解 Linux 系统的目录结构,就像掌握了一把打开 Linux 世界大门的钥匙。

1. Linux 目录结构概述 

Linux 系统采用一种树状的目录结构,类似于一棵倒置的树,其中根目录(/)位于最顶端。所有的文件和目录都从根目录开始,通过不同的分支延伸至各个角落。

与 Windows 系统拥有多个盘符(C:, D:...)不同,Linux 只有一个根目录。这种统一的结构使得 Linux 系统具有高度的一致性和可预测性。

核心特点

  • 层次化结构:目录层级清晰,便于理解和管理。

  • 统一命名空间:所有文件、设备、进程都通过路径唯一标识。

  • 标准化 (FHS):遵循 FHS 标准,确保不同发行版(如 CentOS, Ubuntu, Debian)间的一致性。

  • 灵活性:用户可以根据需要在目录树中创建自己的子目录。

  • 万物皆文件:无论是配置文件、文档,还是硬盘、键盘等硬件设备,在 Linux 中都以文件形式存在。

2. 根目录 (/) —— 系统的起点 

根目录是整个 Linux 文件系统结构的起点,所有其他目录和文件都直接或间接地隶属于它。

  • 唯一性:每个 Linux 系统只有一个根目录。

  • 核心地位:所有文件和目录的起始点。

  • 不可删除:根目录是系统的核心部分,不能被删除或卸载。

常用命令:

# 查看根目录内容ls /# 输出示例: bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var# 查看当前工作目录pwd# 输出: / (如果在根目录下)

3. 系统核心命令与库文件

这部分目录存放系统运行所必需的二进制文件、库文件,通常只有 root 用户可写。

3.1 /bin —— 基本命令的家 

存放系统启动和运行必需的基本命令(Binaries)。这些命令在单用户模式下也能使用,是所有用户都可执行的基础工具。

  • 常见文件:

    • ls, cp, mv, rm:基础文件操作。

    • cat, grep, find:文本处理和搜索。

    • sh, bash:Shell 解释器。

  • 示例:

# 查看 ls 命令的位置which ls# 输出: /bin/ls# 查看命令详情ls -l /bin/ls

3.2 /sbin —— 系统管理员的工具箱 🛠️

存放系统管理命令(System Binaries)。这些命令通常用于系统维护、配置和故障排查,需要 root 权限才能执行。

  • 常见文件:

    • ifconfig, iptables:网络配置。

    • fdisk, mkfs:磁盘分区和格式化。

    • reboot, shutdown:系统重启和关机。

    • mount, umount:挂载和卸载文件系统。

  • 示例:

# 查看/sbin 下的命令 (前10个)ls /sbin | head -10# 输出示例: busybox, fsck, ifconfig, init, iptables...

3.3 /lib 和 /lib64 —— 系统库的家园 📦

存放系统二进制文件运行所依赖的共享库文件(Shared Libraries)。

  • /lib:主要存放 32 位共享库(在某些纯 64 位系统中可能链接到 lib64 或不存在)。

  • /lib64:主要存放 64 位共享库。

  • 关键文件:

    • libc.so.6:C 标准库,几乎所有程序都依赖它。

    • libm.so.6:数学库。

    • libpthread.so.0:线程库。

  • 示例:

# 查看 ls 命令依赖的库文件ldd /bin/ls# 输出示例: libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 ...

拓展知识:在现代 systemd 系统中,/bin 和 /sbin 往往是指向 /usr/bin 和 /usr/sbin 的符号链接,以简化目录结构。

4. 系统配置与管理

4.1 /etc —— 系统配置的中枢 📝

这是 Linux 系统的配置文件集中地。这里存放着几乎所有系统和服务的配置文件,是系统管理和维护的关键区域。这些文件通常是纯文本格式。

  • 关键文件/目录:

    • passwd:用户账户信息(不含密码)。

    • shadow:用户加密密码信息(仅 root 可读)。

    • group:用户组信息。

    • fstab:文件系统挂载表(开机自动挂载配置)。

    • hosts:主机名和 IP 地址映射。

    • crontab / cron.d/:定时任务配置。

    • init.d/ 或 systemd/system/:服务启动脚本和管理单元。

    • ssh/:SSH 服务配置 (sshd_config)。

    • nginx/, mysql/:特定服务的配置目录。

  • 示例:

# 查看用户信息head -5 /etc/passwd# 输出: root:x:0:0:root:/root:/bin/bash# 查找特定配置grep "^root:" /etc/passwd

4.2 /boot —— 系统启动的起点 🚀

包含系统启动所需的文件。如果这个目录损坏,系统将无法启动。

  • 关键文件:

    • vmlinuz-*:Linux 内核镜像。

    • initrd.img-* 或 initramfs-*:初始 RAM 磁盘,包含启动内核所需的临时文件系统。

    • grub/ 或 grub2/:GRUB 引导加载程序的配置文件。

    • config-*:当前内核的编译配置。

  • 示例:

# 查看当前内核版本uname -r# 输出: 5.4.0-42-generic# 查看对应的内核文件ls -l /boot/vmlinuz-$(uname -r)

4.3 /root —— 超级管理员的家 🏠

  • 注意:这是 root 用户的主目录,不是根目录 /。

  • 普通用户无法访问此目录,除非拥有 sudo 权限。

  • 存放 root 用户的个人配置(如 .bashrc, .ssh)和临时管理文件。

5. 用户与应用程序数据

5.1 /home —— 用户的私人天地 🏠

普通用户的主目录存放位置。每个用户都有一个独立的子目录(如 /home/username)。

  • 特点:

    • 用户隔离:默认情况下,用户只能访问自己的主目录。

    • 个性化配置:存放用户的 Shell 配置 (.bashrc, .profile)、SSH 密钥 (.ssh)、桌面设置等。

    • 数据备份重点:重装系统时,通常建议保留 /home 分区以防数据丢失。

  • 示例:

# 查看当前用户主目录echo $HOME# 输出: /home/username# 查看主目录内容 (包括隐藏文件)ls -la ~

5.2 /usr —— 用户程序的宝库 📚

这是 Linux 系统中最大的目录之一,存放已安装的应用程序、库文件、文档和帮助文件。类似于 Windows 的 C:\Program Files。

  • 重要子目录:

    • /usr/bin:绝大多数用户可执行命令(非启动必需)。

    • /usr/sbin:非启动必需的系统管理命令。

    • /usr/lib & /usr/lib64:应用程序使用的库文件。

    • /usr/share:架构无关的共享数据(如文档、图标、字体、man 手册)。

    • /usr/include:C/C++ 程序开发所需的头文件。

    • /usr/local:本地安装的软件。通常用于手动编译安装(make install)的软件,避免覆盖包管理器安装的文件。

    • /usr/src:存放内核源代码。

  • 示例:

# 查看已安装的 python 版本ls -l /usr/bin/python*

5.3 /opt —— 可选软件包的安装地 📦

用于安装第三方大型软件或商业软件。

  • 特点:

    • 独立性:软件通常安装在 /opt/软件名 下,自包含所有文件,不分散到系统目录中。

    • 易于卸载:删除整个目录即可卸载软件。

    • 常见用例:Oracle 数据库、Google Chrome、JetBrains IDEs (IntelliJ, PyCharm)。

  • 示例:

# 查看/opt 下的软件ls /opt# 输出示例: google, java, mysql

5.4 /srv —— 服务数据的存放地 📂

用于存放特定服务提供的数据。这是一个可选目录,但在规范的管理中很有用。

  • 用途:

    • /srv/www:Web 服务器的网站数据(有时也用 /var/www)。

    • /srv/ftp:FTP 服务器的数据。

    • /srv/rsync:rsync 服务数据。

  • 最佳实践:将服务数据与系统数据分离,便于备份和迁移。

6. 变化数据与日志

6.1 /var —— 变化的数据中心 🔄

存放经常变化的文件。如果将 /var 单独分区,可以防止日志或缓存填满根分区导致系统崩溃。

关键子目录:

  • /var/log:系统日志。包含syslog, auth.log, kern.log, messages, yum.log/dnf.log 等。运维排查问题的第一站。

  • /var/spool:排队等待处理的任务(如邮件队列 /var/spool/mail,打印任务 /var/spool/cups)。

  • /var/lib:持久化的状态数据。例如:

        • /var/lib/mysql 或 /var/lib/pgsql:数据库文件。

        • /var/lib/docker:Docker 的镜像和容器数据。

        • /var/lib/rpm:RPM 包数据库。

  • /var/cache:应用程序缓存数据(如 yum/dnf 缓存)。

  • /var/tmp:临时文件,比 /tmp 更持久,重启后不会被清除。

示例:

# 查看最近的登录日志tail -n 20 /var/log/auth.log# 或 CentOS/RHELtail -n 20 /var/log/secure# 查看磁盘占用最大的目录du -sh /var/* | sort -hr | head -10

7. 设备、进程与虚拟文件系统

这些目录通常存在于内存中,不占用磁盘空间,由内核动态生成。

7.1 /dev —— 设备的入口 🖥️

包含系统中所有设备文件的入口。Linux 遵循“一切皆文件”,硬件设备也表现为文件。

  • 常见设备文件:

    • /dev/sda, /dev/sdb:物理硬盘。

    • /dev/sda1:硬盘分区。

    • /dev/tty, /dev/pts/*:终端设备。

    • /dev/null:空设备(黑洞),写入的数据会被丢弃。

    • /dev/zero:提供无限的零字节流。

    • /dev/random & /dev/urandom:随机数生成器。

    • /dev/cdrom 或 /dev/sr0:光驱。

  • 示例:

# 列出块设备(硬盘)ls /dev/sd*# 测试空设备 (不产生任何输出)echo "Hello" > /dev/null

7.2 /proc —— 进程的虚拟文件系统 🧠

一个虚拟文件系统,不占用磁盘空间,内容存在于内存中。它提供了关于系统进程和内核状态的实时视图。

  • 关键内容:

      • /proc/cpuinfo:CPU 详细信息。

      • /proc/meminfo:内存使用情况。

      • /proc/partitions:分区信息。

      • /proc/[pid]:特定进程的信息目录(如 /proc/1 是 init/systemd 进程)。

          • cmdline:启动命令。

          • environ:环境变量。

          • fd/:打开的文件描述符。

      • /proc/self:指向当前进程目录的符号链接。

    • 示例:

    # 查看 CPU 型号cat /proc/cpuinfo | grep "model name"# 查看内存总量cat /proc/meminfo | grep MemTotal# 查看当前进程的命令行cat /proc/$$/cmdline

    7.3 /sys —— 系统信息的虚拟文件系统 🧩

    类似于 /proc,但更侧重于设备、驱动和内核子系统的结构化信息。由 sysfs 文件系统提供支持。

    • 关键内容:

      • /sys/class:设备类信息(如 net, block, sound)。

      • /sys/devices:物理设备的层级结构。

      • /sys/block:块设备信息。

      • /sys/bus:总线信息(usb, pci)。

    • 示例:

    # 查看网卡设备ls /sys/class/net/# 查看硬盘型号cat /sys/block/sda/device/model

    7.4 /run —— 运行时状态信息 🔄

    存放系统自上次启动以来产生的运行时数据。

    • 特点:存储在内存中(tmpfs),重启后清空。

    • 用途:替代了旧的 /var/run 和 /var/lock。

    • 内容:

      • PID 文件(.pid):记录服务进程 ID。

      • Socket 文件:进程间通信套接字。

      • systemd/:systemd 相关的运行时数据。

    • 示例:

    ls /run/systemd/

    8. 临时文件与挂载点

    8.1 /tmp —— 临时文件的暂存地 🗑️

    用于存放用户和程序产生的临时文件。

    • 特点:

      • 权限:通常设置为 1777 (sticky bit),所有用户可写,但只能删除自己的文件。

      • 生命周期:大多数发行版配置为重启后自动清除(通过 systemd-tmpfiles 或 init 脚本)。

      • 安全:不适合存放敏感数据。

    • 对比 /var/tmp:/var/tmp 中的文件在重启后保留,适合需要跨重启周期的临时数据。

    8.2 /mnt 和/media —— 挂载点的临时家 

    用于挂载外部文件系统。

    • /mnt:

      • 用途:传统上供管理员手动挂载临时文件系统(如 mount /dev/sdb1 /mnt)。

      • 特点:通常为空,管理员按需创建子目录。

    • /media:

      • 用途:桌面环境自动挂载可移动介质(U 盘、光盘、手机)。

      • 特点:系统会自动在此目录下创建以设备名或卷标命名的子目录(如 /media/username/USB_DRIVE)。

    9. 常用操作命令速查 🛠️

    10. 最佳实践与建议 📝

    为了保持 Linux 系统的稳定、高效和安全,建议遵循以下最佳实践:

    1. 严格遵守 FHS 标准:

      • 不要随意将个人文件存放在 /bin, /etc, /usr 等系统目录中。

      • 第三方软件优先安装在 /opt 或通过包管理器(yum/apt)安装到 /usr。

      • 手动编译的软件建议安装到 /usr/local。

    2. 合理的分区策略(生产环境):

      • 分离 /home:防止用户数据填满根分区,方便重装系统时保留数据。

      • 分离 /var:防止日志(/var/log)或数据库文件无限增长导致系统崩溃。

      • 分离 /tmp:防止临时文件耗尽磁盘空间,并可设置 noexec 挂载选项增强安全。

    3. 日志管理与监控:

      • 配置 Logrotate:确保 /var/log 下的日志文件定期轮转、压缩和清理,避免磁盘爆满。

      • 定期监控:使用脚本或监控工具(如 Prometheus + Node Exporter)监控 /var 和 /home 的磁盘使用率。

    4. 数据安全与备份:

      • 备份 /etc:这是系统的“大脑”。在进行重大更改前,务必备份整个 /etc 目录(例如使用 tar -czvf etc_backup.tar.gz /etc)。

      • 保护 /home:用户数据是最宝贵的资产,需制定定期异地备份策略。

      • 权限控制:严格限制 /etc/shadow, /root, /boot 等关键目录的访问权限。

    5. 谨慎操作系统目录:

      • 严禁随意删除或修改 /bin, /sbin, /lib, /lib64 下的文件,否则可能导致系统无法启动或命令失效。

      • 修改 /etc 下的配置文件前,先备份(如 cp config.conf config.conf.bak)。

    6. 善用符号链接:

      • 当需要迁移数据目录(如将 MySQL 数据从 /var/lib/mysql 迁移到大容量磁盘)时,使用软链接(ln -s)可以保持原有路径不变,兼容应用程序配置,无需修改代码或配置文件。

    11. 总结

    • 系统启动与核心运行:依赖 /bin, /sbin, /lib, /boot, /etc。

    • 用户交互与应用程序:集中在 /home, /usr, /opt。

    • 动态数据与日志:存储在 /var, /run, /tmp。

    • 硬件与状态监控:通过 /dev, /proc, /sys 实现。

    • 外部设备接入:通过 /mnt, /media 挂载。

    最新文章

    随机文章