主题
Linux 目录结构
Linux 文件系统采用单一的树状层次结构,从根目录 / 开始,所有其他目录都是根目录的子目录。理解 Linux 目录结构对于高效使用和管理 Linux 系统至关重要。
文件系统层次标准 (FHS)
FHS 简介
文件系统层次标准(Filesystem Hierarchy Standard,FHS)定义了 Linux/Unix 系统中目录结构和内容的标准布局。其目的是确保不同 Linux 发行版之间的兼容性和一致性。
最新版本
- FHS 3.0 是当前最新的主要版本,发布于 2015 年
- 许多现代 Linux 发行版都遵循这一标准或其变体
主要目录详解
根目录 /
根目录是整个文件系统的起点,所有其他目录都是它的子目录。在 FHS 中,根目录的大小应保持精简,只包含必要的目录。
/bin - 基本命令
包含基本的系统命令二进制文件,这些命令在单用户模式下也可用,所有用户都可以执行。
主要内容:
- 基本的 shell 命令(如
bash,sh) - 文件操作命令(如
cp,mv,rm) - 文本处理命令(如
cat,echo) - 系统命令(如
kill,ps)
bash
# 查看 /bin 目录中的命令示例
ls -la /bin | head -10/boot - 引导文件
包含启动 Linux 系统所需的文件,如内核映像、引导加载程序配置和初始化 RAM 磁盘。
主要内容:
- 内核文件(如
vmlinuz-<version>) - 初始 RAM 磁盘(如
initrd.img-<version>或initramfs-<version>.img) - GRUB 引导加载程序配置和文件
bash
# 查看 /boot 目录内容
ls -la /boot/dev - 设备文件
包含代表系统设备的特殊文件,Linux 通过这些文件与硬件设备进行通信。
主要内容:
- 块设备(如硬盘分区
/dev/sda1) - 字符设备(如键盘
/dev/input/event0) - 伪终端(如
/dev/pts/0) - 系统设备(如随机数生成器
/dev/random)
bash
# 列出所有磁盘设备
ls -la /dev/sd*/etc - 配置文件
包含系统和应用程序的配置文件。这是系统管理的核心目录之一。
主要内容:
- 系统配置文件(如
fstab,hosts) - 服务配置(如
/etc/ssh/,/etc/apache2/) - 用户和组配置(
passwd,group) - 网络配置(
network/interfaces,resolv.conf) - 启动脚本和初始化配置
bash
# 查看重要的系统配置文件
ls -la /etc | grep -E 'fstab|hosts|passwd|group'/home - 用户主目录
包含所有普通用户的主目录,每个用户在 /home 下有一个以其用户名命名的子目录。
主要内容:
- 用户文件和目录
- 用户配置文件(如
.bashrc,.profile) - 用户数据和文档
bash
# 查看用户主目录
ls -la /home/lib 和 /lib64 - 库文件
包含系统和应用程序运行所需的共享库文件和内核模块。/lib64 专门用于 64 位库。
主要内容:
- C 标准库(如
libc.so) - 内核模块(在
/lib/modules/<kernel-version>/目录) - 应用程序依赖库
bash
# 查看内核模块目录
ls -la /lib/modules/$(uname -r)//media - 可移动媒体
用于挂载可移动媒体设备(如 CD-ROM、USB 驱动器等)的挂载点。
主要内容:
- 自动挂载的可移动设备目录
/mnt - 临时挂载
用于临时挂载文件系统的目录,通常由系统管理员手动使用。
/opt - 可选软件
用于安装第三方软件包或大型应用程序。这些软件通常不会被包管理器更新。
/proc - 进程信息
虚拟文件系统,提供关于系统和进程的实时信息,不占用实际磁盘空间。
主要内容:
- 进程信息(如
/proc/<PID>/) - 系统信息(如
cpuinfo,meminfo) - 内核参数和统计信息
bash
# 查看 CPU 信息
cat /proc/cpuinfo
# 查看内存使用情况
cat /proc/meminfo/root - 管理员主目录
root 用户的主目录,不同于普通用户的 /home 目录。
/run - 运行时数据
包含系统运行时的进程数据,如进程 ID 文件和 socket 文件。在系统重启后重新创建。
/sbin - 系统命令
包含仅供系统管理员使用的系统管理命令。
主要内容:
- 分区和格式化命令(如
fdisk,mkfs) - 文件系统维护命令(如
fsck) - 系统管理命令(如
ifconfig,route)
bash
# 查看 /sbin 目录中的命令示例
ls -la /sbin | head -10/srv - 服务数据
包含系统提供的各种服务的数据文件,如 Web 服务器的文档根目录。
/sys - 系统信息
虚拟文件系统,提供关于设备、内核模块和系统功能的信息,与 udev 结合使用。
主要内容:
- 设备信息(如
/sys/class/) - 内核参数(如
/sys/module/) - 电源管理信息
bash
# 查看块设备信息
ls -la /sys/block//tmp - 临时文件
用于存储临时文件的目录,系统重启后通常会清空。所有用户都可以在此创建文件。
/usr - 用户程序和数据
包含大多数用户工具和应用程序,是系统中最大的目录之一。
主要内容:
/usr/bin:非基本用户命令/usr/sbin:非基本系统管理命令/usr/lib:库文件/usr/include:C/C++ 头文件/usr/share:架构无关的数据文件/usr/src:源代码(如内核源码)
bash
# 查看 /usr 目录结构
ls -la /usr/var - 可变数据
包含系统运行时会改变的数据,如日志文件、缓存和数据库。
主要内容:
/var/log:日志文件/var/spool:打印和邮件队列/var/cache:应用程序缓存/var/lib:状态信息和数据库/var/run:运行时变量(部分发行版链接到/run)
bash
# 查看系统日志目录
ls -la /var/log目录结构的组织原则
静态与动态内容分离
- 静态内容:不经常变化的数据,如可执行文件、库文件(在
/bin,/sbin,/lib,/usr等) - 动态内容:经常变化的数据,如日志、缓存、临时文件(在
/var,/tmp,/run等)
可共享与不可共享资源分离
- 可共享资源:可以在网络上共享的数据,如
/usr,/srv - 不可共享资源:特定于单个系统的数据,如
/etc,/var/run
只读与读写目录分离
- 只读目录:如
/usr(可以挂载为只读以提高安全性) - 读写目录:如
/var,/home,/tmp
目录管理最佳实践
命名约定
- 避免在目录名中使用空格和特殊字符
- 使用小写字母和短横线(-)分隔单词
- 保持目录名简洁明了
权限管理
- 正确设置目录权限,遵循最小权限原则
- 对于系统目录,限制写入权限
- 为用户数据目录设置适当的所有权
bash
# 设置目录权限示例
sudo chmod 755 /some/directory # 所有者可读写执行,其他用户可读执行
sudo chown user:group /some/directory # 设置目录所有权磁盘空间管理
- 监控重要目录的磁盘使用情况
- 定期清理临时文件和旧日志
- 考虑将大型数据目录挂载到单独的分区
bash
# 查看大目录
du -h --max-depth=1 / | sort -hr自定义目录结构
在 /opt 中安装第三方软件
bash
# 示例:安装自定义应用到 /opt
sudo mkdir -p /opt/myapp
# 将应用文件复制到 /opt/myapp在 /usr/local 中安装本地编译软件
bash
# 编译安装软件时指定安装路径
./configure --prefix=/usr/local
sudo make install创建自定义挂载点
bash
# 创建数据目录
sudo mkdir -p /data
# 编辑 /etc/fstab 添加挂载配置
sudo nano /etc/fstab
# 添加类似行:/dev/sdb1 /data ext4 defaults 0 2常见问题排查
目录权限问题
bash
# 检查目录权限
ls -la /path/to/directory
# 修复权限
chmod 755 /path/to/directory磁盘空间不足
bash
# 查找占用大量空间的目录
du -h --max-depth=1 / | sort -hr | head -10
# 清理日志文件
find /var/log -name "*.log.*" -delete通过理解 Linux 的目录结构,您可以更有效地导航文件系统、管理系统配置和排查问题。遵循 FHS 标准有助于保持系统的一致性和可维护性。