Linux 系统目录结构

Linux系统目录结构详解

深入理解Linux文件系统层次结构标准(FHS)

本教程使用Bootstrap 5构建,详细介绍了Linux系统的目录结构,包括各目录的功能、用途和实际应用。

Linux目录结构概述

Linux系统的目录结构遵循文件系统层次结构标准(FHS),这是一种定义Linux操作系统目录和目录内容的规范。

与Windows系统不同,Linux没有驱动器盘符的概念,所有文件和设备都组织在单一的根目录(/)下。

关键概念
  • 根目录(/) - 文件系统的起点
  • FHS标准 - 定义目录结构的规范
  • 挂载点 - 其他文件系统连接到目录树的位置
  • 绝对路径 - 从根目录开始的完整路径
  • 相对路径 - 从当前目录开始的路径
Linux目录结构特点
  • 层次化结构 - 从根目录开始的树形结构
  • 标准化布局 - 遵循FHS标准
  • 一切皆文件 - 设备、进程等都以文件形式存在
  • 大小写敏感 - 文件名和目录名区分大小写
  • 路径分隔符 - 使用正斜杠(/)
示例:绝对路径和相对路径

绝对路径:/home/user/documents/file.txt

相对路径:如果当前目录是/home/user,则相对路径为documents/file.txt

文件系统层次结构标准(FHS)

FHS定义了Linux系统中主要目录的布局和内容,确保不同Linux发行版之间的一致性。

FHS的主要目标
  • 使软件和用户预测已安装文件和目录的位置
  • 使发行版、应用程序和系统管理员之间的协作更加容易
  • 统一不同Linux系统之间的目录结构
FHS目录分类
  • 静态目录 - 内容不会改变,如/bin, /usr
  • 动态目录 - 内容会改变,如/var, /home
  • 可共享目录 - 可以在不同主机间共享,如/usr, /opt
  • 不可共享目录 - 特定于主机,如/etc, /boot
FHS目录结构示意图
/ (根目录)
/bin
/boot
/dev
/etc
/home
/lib
/media
/mnt
/opt
/proc
/root
/run
/sbin
/srv
/tmp
/usr
/var
提示: FHS是一个不断发展的标准,不同版本的Linux发行版可能会有细微差异,但核心目录结构保持一致。

Linux目录树

/ (根目录)
├── bin (用户二进制文件)
├── boot (启动文件)
├── dev (设备文件)
├── etc (配置文件)
│ ├── network
│ ├── ssh
│ └── passwd
├── home (用户主目录)
│ ├── user1
│ └── user2
├── lib (库文件)
├── media (可移动媒体)
├── mnt (挂载点)
├── opt (可选软件)
├── proc (进程信息)
├── root (root用户主目录)
├── run (运行时数据)
├── sbin (系统二进制文件)
├── srv (服务数据)
├── sys (系统信息)
├── tmp (临时文件)
├── usr (用户程序)
│ ├── bin
│ ├── lib
│ ├── local
│ └── share
└── var (可变数据)
├── log
├── cache
└── spool
查看目录结构

可以使用tree命令查看目录结构:

# 安装tree命令 (如果尚未安装)
sudo apt install tree  # Ubuntu/Debian
sudo yum install tree  # CentOS/RHEL

# 查看根目录结构 (前两层)
tree -L 2 /

# 查看当前目录结构
tree
使用ls命令

使用ls命令查看目录内容:

# 查看根目录
ls /

# 查看详细信息
ls -l /

# 查看所有文件(包括隐藏文件)
ls -la ~

# 按文件大小排序
ls -lS

# 按修改时间排序
ls -lt

目录详解

/
根目录 (/)
文件系统的起点

所有文件和目录的起点,其他所有目录都是根目录的子目录。

重要内容:
  • 系统启动所需的文件和目录
  • 设备文件(/dev)
  • 系统配置文件(/etc)
  • 用户主目录(/home)
注意: 根目录通常应该单独分区,并且有足够的空间供系统运行。
/bin
基本用户二进制文件

包含系统启动和运行所需的基本命令,所有用户都可以使用。

常见命令:
  • ls - 列出目录内容
  • cp - 复制文件
  • mv - 移动文件
  • rm - 删除文件
  • cat - 查看文件内容
示例: 在单用户模式下,只有/bin/sbin中的命令可用。
/dev
设备文件

包含设备文件,这些文件代表系统中的硬件设备。

重要设备文件:
  • /dev/sda - 第一个SATA硬盘
  • /dev/null - 空设备,写入的数据被丢弃
  • /dev/zero - 零设备,提供无限的零字节
  • /dev/tty - 当前终端
  • /dev/random - 随机数生成器
提示: 在Linux中,一切皆文件,包括硬件设备。
/etc
配置文件

包含系统和应用程序的配置文件,通常是文本文件。

重要配置文件:
  • /etc/passwd - 用户账户信息
  • /etc/group - 用户组信息
  • /etc/fstab - 文件系统表
  • /etc/hosts - 主机名解析
  • /etc/ssh/sshd_config - SSH服务器配置
注意: 修改/etc中的文件需要管理员权限,错误的配置可能导致系统问题。
/home
用户主目录

包含所有普通用户的主目录,每个用户有一个以其用户名命名的子目录。

用户目录内容:
  • ~/Desktop - 桌面文件
  • ~/Documents - 文档
  • ~/Downloads - 下载文件
  • ~/.bashrc - Bash shell配置
  • ~/.ssh - SSH密钥和配置
提示: ~符号代表当前用户的主目录。
/root
root用户主目录

超级用户(root)的主目录,不是/home的子目录。

特点:
  • 只有root用户可以访问
  • 包含root用户的个人文件和配置
  • 通常用于存储系统管理脚本和工具
注意: 普通用户无法访问/root目录,这是出于安全考虑。
/usr
用户程序和数据

包含用户应用程序、库文件、文档等,是系统中最大的目录之一。

重要子目录:
  • /usr/bin - 用户命令
  • /usr/lib - 库文件
  • /usr/local - 本地安装的软件
  • /usr/share - 架构无关的数据文件
  • /usr/src - 源代码
提示: 大多数用户安装的应用程序都位于/usr目录下。
/opt
可选应用程序

用于安装第三方或可选应用程序,每个应用程序通常有自己的子目录。

常见内容:
  • Google Chrome
  • Oracle Java
  • Adobe Reader
  • 大型商业软件
示例: Google Chrome可能安装在/opt/google/chrome目录中。
/var
可变数据

包含经常变化的文件,如日志、缓存、假脱机文件等。

重要子目录:
  • /var/log - 系统日志
  • /var/cache - 应用程序缓存
  • /var/spool - 排队任务(打印、邮件等)
  • /var/www - Web服务器文件
  • /var/lib - 状态信息
提示: /var目录通常应该单独分区,防止日志文件填满根分区。
/tmp
临时文件

用于存储临时文件,所有用户都可以读写,但通常只能删除自己创建的文件。

特点:
  • 系统重启时可能被清空
  • 用于应用程序临时存储
  • 用于进程间通信
示例: 文本编辑器可能在/tmp中创建文件的临时副本。
/proc
进程信息

虚拟文件系统,提供关于系统和进程的信息。

重要文件:
  • /proc/cpuinfo - CPU信息
  • /proc/meminfo - 内存信息
  • /proc/version - 内核版本
  • /proc/[pid] - 特定进程的信息
提示: /proc中的文件不是真正的磁盘文件,而是在访问时动态生成的。
/mnt 和 /media
挂载点

用于临时挂载文件系统。

区别:
  • /media - 用于可移动媒体(USB、CD-ROM)
  • /mnt - 用于临时挂载其他文件系统
示例:
# 挂载USB驱动器
sudo mount /dev/sdb1 /media/usb

# 挂载网络共享
sudo mount -t nfs 192.168.1.100:/share /mnt/nfs

相关命令

导航和查看命令
命令 说明 示例
pwd 显示当前工作目录 pwd
cd 更改目录 cd /home/user
ls 列出目录内容 ls -la
tree 以树状图列出目录 tree -L 2
find 查找文件 find / -name "*.conf"
目录操作命令
命令 说明 示例
mkdir 创建目录 mkdir newdir
rmdir 删除空目录 rmdir emptydir
rm -r 递归删除目录 rm -r olddir
cp -r 递归复制目录 cp -r dir1 dir2
mv 移动/重命名目录 mv oldname newname
实用命令示例
查看磁盘使用情况
# 查看各目录磁盘使用情况
du -h --max-depth=1 /

# 以易读格式显示磁盘空间
df -h

# 查看当前目录大小
du -sh
查找特定文件
# 查找所有.conf文件
find /etc -name "*.conf"

# 查找大于100MB的文件
find / -size +100M

# 查找最近修改的文件
find /home -mtime -7