文件系统与目录结构
最后更新: 2026-01-04
作者: Linux Team
页面目录
目录
Linux文件系统概述
什么是文件系统?
文件系统是操作系统用于组织、存储和管理数据的方法。它定义了文件在存储设备上的存储格式和访问方式。
┌─────────────────────────────────────────────────────────────┐
│ 文件系统架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 用户程序 ──→ 文件系统API ──→ VFS(虚拟文件系统) │
│ │ │
│ ┌──────────┼──────────┐ │
│ ▼ ▼ ▼ │
│ ext4 XFS Btrfs │
│ │ │ │ │
│ └──────────┴──────────┘ │
│ │ │
│ ┌──────────┴──────────┐ │
│ ▼ ▼ │
│ 磁盘分区 内存 │
│ │
└─────────────────────────────────────────────────────────────┘
Linux文件系统特点
核心特性
- 一切皆文件:设备、进程、套接字都作为文件处理
- 大小写敏感:File.txt 和 file.txt 是不同文件
- 无文件扩展名强制:扩展名仅用于提示,Linux不依赖扩展名
- 长文件名支持:支持最多255个字符的文件名
常见Linux文件系统类型
| 文件系统 | 特点 | 适用场景 |
|---|---|---|
| ext4 | 稳定可靠,日志功能 | 通用场景 |
| XFS | 大文件高性能 | 大型企业存储 |
| Btrfs | 快照、压缩、校验 | 现代桌面/服务器 |
| ZFS | 企业级特性,完整数据保护 | 存储服务器 |
| swap | 交换空间 | 内存扩展 |
| vfat | Windows兼容 | U盘、移动存储 |
FHS文件系统层次结构
Linux遵循**Filesystem Hierarchy Standard (FHS)**标准,定义了目录结构和内容。
┌─────────────────────────────────────────────────────────────┐
│ Linux 根目录结构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ / │
│ ├── bin/ ── Essential command binaries │
│ ├── boot/ ── Boot loader files │
│ ├── dev/ ── Device files │
│ ├── etc/ ── Configuration files │
│ ├── home/ ── User home directories │
│ ├── lib/ ── Essential shared libraries │
│ ├── media/ ── Removable media mount points │
│ ├── mnt/ ── Temporary mount points │
│ ├── opt/ ── Optional add-on packages │
│ ├── proc/ ── Virtual filesystem (process info) │
│ ├── root/ ── Root user's home directory │
│ ├── run/ ── Runtime data │
│ ├── sbin/ ── System binaries │
│ ├── srv/ ── Service data │
│ ├── sys/ ── Virtual filesystem (kernel info) │
│ ├── tmp/ ── Temporary files │
│ ├── usr/ ── User utilities and applications │
│ └── var/ ── Variable data (logs, caches) │
│ │
└─────────────────────────────────────────────────────────────┘
核心目录详解
/bin - 基本命令
存放所有用户都可以执行的二进制命令文件。
# 常用命令
/bin/ls # 列出目录
/bin/cp # 复制
/bin/mv # 移动
/bin/rm # 删除
/bin/cat # 查看文件
/bin/mkdir # 创建目录
/bin/rmdir # 删除目录
/bin/chmod # 改变权限
/bin/chown # 改变所有者
/bin/ping # 网络测试
/sbin - 系统管理命令
存放只有系统管理员(root)才能执行的系统管理命令。
# 常用命令
/sbin/ifconfig # 网络配置
/sbin/fsck # 文件系统检查
/sbin/mkfs # 创建文件系统
/sbin/iptables # 防火墙
/sbin/reboot # 重启
/sbin/shutdown # 关机
/sbin/partition # 分区工具
/etc - 系统配置
存放系统和应用程序的配置文件。
# 重要配置目录
/etc/passwd # 用户账户信息
/etc/shadow # 用户密码(加密)
/etc/group # 用户组信息
/etc/fstab # 文件系统挂载表
/etc/hosts # 主机名解析
/etc/resolv.conf # DNS配置
/etc/network/ # 网络配置
/etc/nginx/ # Nginx配置
/etc/apache2/ # Apache配置
/etc/ssh/ # SSH配置
谨慎操作
/etc目录下的配置文件直接控制系统行为。修改前务必备份!
/home - 用户主目录
存放普通用户的主目录,每个用户有一个以用户名命名的子目录。
/home/
├── user1/
│ ├── Desktop/
│ ├── Documents/
│ ├── Downloads/
│ ├── Music/
│ ├── Pictures/
│ ├── Videos/
│ └── .config/ # 用户配置
├── user2/
└── ...
/root - root主目录
root用户(系统管理员)的主目录,与普通用户分离。
/var - 变量数据
存放经常变化的文件,如日志、缓存、数据库等。
/var/
├── log/ # 系统日志
│ ├── syslog # 系统日志
│ ├── auth.log # 认证日志
│ ├── dmesg # 启动信息
│ └── apache2/ # Apache日志
├── cache/ # 应用缓存
├── lib/ # 状态信息
├── spool/ # 打印队列
└── www/html/ # Web根目录
/tmp - 临时文件
存放临时文件,系统重启后可能清空。
tmpfs
很多系统将 /tmp 挂载为 tmpfs(内存文件系统),提供极速读写性能。
/usr - 用户程序
存放用户安装的应用程序和库文件。
/usr/
├── bin/ # 用户命令
├── sbin/ # 用户系统管理命令
├── lib/ # 库文件
├── include/ # 头文件(C/C++)
├── share/ # 架构无关数据
│ ├── man/ # 手册页
│ └── doc/ # 文档
├── local/ # 本地安装程序
└── src/ # 源代码
/proc - 虚拟文件系统
提供内核和进程信息的虚拟文件系统。
# 内核参数
/proc/sys/net/ipv4/ip_forward # IP转发
/proc/cpuinfo # CPU信息
/proc/meminfo # 内存信息
/proc/diskstats # 磁盘统计
/proc/loadavg # 系统负载
# 进程信息
/proc/1234/ # PID 1234的进程信息
/proc/1234/cmdline # 启动命令
/proc/1234/environ # 环境变量
/proc/1234/fd/ # 打开的文件描述符
/dev - 设备文件
存放设备文件,Linux将硬件设备映射为文件。
# 设备类型
/dev/sda # 第一块SATA硬盘
/dev/sda1 # 第一块硬盘的第一个分区
/dev/nvme0n1 # NVMe SSD
/dev/null # 空设备(丢弃所有数据)
/dev/zero # 零字节生成器
/dev/random # 随机数生成器
/dev/tty # 当前终端
/dev/pts/0 # 伪终端
# 设备类型标识
brw-rw---- 1 root disk # 块设备(b)
crw-rw---- 1 root video # 字符设备(c)
lrwxrwxrwx 1 root root # 符号链接(l)
/boot - 启动文件
存放内核和启动加载器文件。
/boot/
├── vmlinuz-5.15.0-generic # Linux内核
├── initrd.img-5.15.0-generic # 初始化RAM磁盘
├── config-5.15.0-generic # 内核配置
├── grub/ # GRUB启动引导器
│ └── grub.cfg # 启动菜单配置
└── System.map-5.15.0-generic # 内核符号表
/media 和 /mnt - 挂载点
# /media - 自动挂载的可移动设备
/media/cdrom/ # 光盘
/media/usb/ # U盘
# /mnt - 手动挂载的临时挂载点
/mnt/backup/ # 备份盘挂载点
/mnt/win/ # Windows分区挂载点
文件类型
Linux中有七种文件类型:
┌─────────────────────────────────────────┐
│ 文件类型标识 │
├─────────────────────────────────────────┤
│ │
│ - 普通文件 (regular file) │
│ d 目录文件 (directory) │
│ l 符号链接 (symbolic link) │
│ c 字符设备 (character device)│
│ b 块设备 (block device) │
│ p 管道文件 (pipe) │
│ s 套接字 (socket) │
│ │
└─────────────────────────────────────────┘
文件类型示例
$ ls -la /dev/
total 0
crw-rw---- 1 root video 226, 0 Jan 15 09:00 card0 # c: 字符设备
crw-rw---- 1 root video 226, 1 Jan 15 09:00 card1 # c: 字符设备
brw-rw---- 1 root disk 8, 0 Jan 15 09:00 sda # b: 块设备
brw-rw---- 1 root disk 8, 1 Jan 15 09:00 sda1 # b: 块设备
crw-rw-rw- 1 root root 1, 7 Jan 15 09:00 full # c: 字符设备
prw-r--r-- 1 root root 0 Jan 15 09:00 initctl # p: 管道
srw-rw-rw- 1 root root 0 Jan 15 09:00 rw-rw-rw- # s: 套接字
lrwxrwxrwx 1 root root 12 Jan 15 09:00 fd -> /proc/self/fd # l: 符号链接
文件路径
绝对路径与相对路径
# 绝对路径 - 从根目录开始的完整路径
/etc/nginx/nginx.conf
/home/user/Documents/report.pdf
# 相对路径 - 从当前目录开始的路径
./scripts/backup.sh # 当前目录下的scripts目录
../config/settings.ini # 上级目录的config目录
../../var/log/syslog # 上级目录的上级目录
路径快捷方式
| 符号 | 说明 | 示例 |
|---|---|---|
~ |
用户主目录 | ~/Documents = /home/user/Documents |
. |
当前目录 | ./script.sh |
.. |
上级目录 | cd .. |
- |
上次目录 | cd - |
文件操作命令
ls - 列出目录内容
# 基本用法
ls # 列出当前目录
ls /etc # 列出指定目录
ls -l # 详细信息
ls -a # 包含隐藏文件
ls -lh # 人类可读大小
ls -lt # 按修改时间排序
ls -lS # 按文件大小排序
ls -R # 递归列出子目录
# 高级用法
ls -la --sort=size # 按大小排序
ls -la --time=atime # 按访问时间排序
ls -d */ # 只列目录
ls -i # 显示inode号
# 颜色标识(自动)
# 蓝色: 目录 绿色: 可执行文件 白色: 普通文件
# 青色: 符号链接 红色: 压缩文件 黄色: 设备文件
cd - 切换目录
cd # 返回主目录
cd /etc/nginx # 切换到绝对路径
cd ./projects # 切换到相对路径
cd .. # 返回上级目录
cd - # 返回上次目录
cd ~user # 切换到指定用户主目录
# pushd/popd - 带记忆的目录切换
pushd /var/log # 切换并记住当前位置
popd # 返回上一个位置
dirs # 显示记住的目录栈
pwd - 显示当前目录
pwd # 显示当前绝对路径
pwd -P # 显示物理路径(解析符号链接)
mkdir - 创建目录
# 基本用法
mkdir newdir # 创建单个目录
mkdir dir1 dir2 dir3 # 创建多个目录
mkdir -p project/src/lib # 递归创建(父目录不存在时自动创建)
# 设置权限
mkdir -m 755 mydir # 指定权限
mkdir -p ~/backup/$(date +%Y%m%d) # 使用命令替换
rm - 删除文件/目录
# 删除文件
rm file.txt # 删除单个文件
rm -f file.txt # 强制删除(不提示)
rm -i file.txt # 删除前确认
# 删除目录
rm -r mydir # 递归删除目录
rm -rf mydir # 强制递归删除(危险!)
rm -r directory1 directory2 # 删除多个目录
# 示例
rm -rf /tmp/* # 清空临时目录(常用)
危险操作
rm -rf 删除操作不可恢复!务必确认路径后再执行!
cp - 复制文件/目录
# 基本语法
cp source destination
# 复制文件
cp file.txt /backup/ # 复制到目录
cp file1.txt file2.txt # 复制并重命名
cp -i file.txt /backup/ # 覆盖前确认
# 复制目录
cp -r mydir /backup/ # 递归复制目录
cp -ra /home /backup/home # 归档复制(保留属性)
# 高级选项
cp -u source destination # 只复制更新的文件
cp -v source destination # 显示详细信息
cp -p source destination # 保留文件属性
mv - 移动/重命名文件
# 移动文件
mv file.txt /new/location/ # 移动到目录
mv file1.txt file2.txt # 重命名
# 移动目录
mv olddir newdir # 重命名目录
mv mydir /other/location/ # 移动目录
# 选项
mv -i file.txt /backup/ # 覆盖前确认
mv -n file.txt /backup/ # 不覆盖已存在的文件
mv -v file.txt /backup/ # 显示详细信息
mv -f file.txt /backup/ # 强制覆盖
ln - 创建链接
# 符号链接(软链接)
ln -s target link_name # 创建软链接
ln -s /etc/nginx nginx.conf # 常用写法
ln -sf /new/target link # 强制覆盖
# 硬链接
ln target hardlink # 创建硬链接
# 查看链接
ls -la link_name # 查看链接属性
readlink link_name # 查看链接目标
软链接 vs 硬链接
| 特性 | 软链接 | 硬链接 |
|---|---|---|
| 本质 | 指向原文件的路径 | 指向同一个inode |
| 跨分区 | 支持 | 不支持 |
| 目录 | 可以链接目录 | 不可以链接目录 |
| 原文件删除 | 链接断开 | 仍可访问 |
touch - 创建空文件
# 创建空文件
touch newfile.txt # 创建单个文件
touch file1.txt file2.txt # 创建多个文件
# 更新时间戳
touch -a file.txt # 只更新访问时间
touch -m file.txt # 只更新修改时间
touch -t 202601011200 file.txt # 指定时间戳
touch -r reference.txt file.txt # 使用参考文件的时间戳
file - 判断文件类型
file document.txt # 查看文件类型
file -z archive.tar.gz # 查看压缩包内容
file -i filename # MIME类型输出
stat - 显示文件详细信息
stat filename
# 输出:
# File: filename
# Size: 4096 Blocks: 8 IO Block: 4096 regular file
# Device: 801h/2049d Inode: 131081 Links: 1
# Access: (0644/-rw-r--r--) Uid: ( 1000/ user) Gid: ( 1000/ user)
# Access: 2026-01-04 10:00:00.000000000 +0800
# Modify: 2026-01-04 10:00:00.000000000 +0800
# Change: 2026-01-04 10:00:00.000000000 +0800
查找文件
find - 强大的文件搜索工具
# 基本语法
find [路径] [选项] [表达式]
# 按名称查找
find /home -name "*.txt" # 查找所有txt文件
find /home -iname "*.TXT" # 忽略大小写
find . -name "file*" # 通配符搜索
# 按类型查找
find /home -type f # 普通文件
find /home -type d # 目录
find /home -type l # 符号链接
find /home -type b # 块设备
find /home -type c # 字符设备
# 按大小查找
find /home -size +100M # 大于100MB
find /home -size -1k # 小于1KB
find /home -size 10M # 正好10MB
# 按时间查找
find /home -mtime -7 # 7天内修改
find /home -atime +30 # 30天前访问
find /home -ctime -1 # 今天属性改变
find /home -mmin -30 # 30分钟内修改
# 按权限查找
find /home -perm 755 # 精确权限
find /home -perm -u+x # 包含执行权限
find /home -perm /222 # 任何写权限
# 按所有者查找
find /home -user username # 指定用户
find /home -group groupname # 指定组
find /home -uid 1000 # 指定UID
find /home -nouser # 无效用户
# 执行动作
find /home -name "*.log" -delete # 删除找到的文件
find /home -name "*.txt" -exec cat {} \; # 执行命令
find /home -name "*.txt" -exec cat {} + # 批量执行(高效)
find /home -name "*.txt" -print -o -name "*.doc" -print
# 组合条件
find /home -type f -name "*.txt" -size +1M -mtime -7
locate - 快速文件搜索
# 安装并更新数据库
sudo apt install mlocate
sudo updatedb
# 使用
locate filename
locate -i filename # 忽略大小写
locate -c filename # 显示数量
locate -l 10 filename # 限制数量
locate -r "regex_pattern" # 正则表达式
locate vs find
locate依赖数据库,搜索速度快但需定期更新数据库 find实时搜索,精确但较慢
which - 查找命令位置
which python # 查找python命令
which -a python # 查找所有同名命令
which -s python # 只返回状态码
whereis - 查找命令及源码
whereis python
# 输出:python: /usr/bin/python /usr/bin/python3.10 /usr/lib/python3.10 /usr/include/python3.10 /usr/share/man/man1/python.1.gz
压缩与归档
tar - 归档工具
# 创建归档
tar -cvf archive.tar file1 file2 dir1/ # 创建.tar归档
tar -czvf archive.tar.gz dir1/ # 创建.tar.gz压缩
tar -cjvf archive.tar.bz2 dir1/ # 创建.tar.bz2压缩
tar -cJvf archive.tar.xz dir1/ # 创建.tar.xz压缩
# 查看归档内容
tar -tvf archive.tar # 列出文件
tar -tvf archive.tar.gz # 列出.tar.gz内容
# 解压归档
tar -xvf archive.tar # 解压.tar
tar -xzvf archive.tar.gz # 解压.tar.gz
tar -xjvf archive.tar.bz2 # 解压.tar.bz2
tar -xJvf archive.tar.xz # 解压.tar.xz
# 解压到指定目录
tar -xzvf archive.tar.gz -C /target/dir/
# 追加文件
tar -rvf archive.tar newfile.txt
# 常用选项
-c, --create # 创建归档
-x, --extract # 解压归档
-t, --list # 列出内容
-v, --verbose # 详细输出
-f, --file=FILE # 指定文件名
-z, --gzip # gzip压缩
-j, --bzip2 # bzip2压缩
-J, --xz # xz压缩
-C, --directory # 切换目录
-p, --preserve-permissions # 保留权限
--exclude=PATTERN # 排除文件
zip - ZIP压缩
# 压缩
zip archive.zip file1 file2 # 压缩文件
zip -r archive.zip directory/ # 递归压缩
zip -q archive.zip *.txt # 静默模式
zip -e archive.zip sensitive/ # 加密压缩
# 解压
unzip archive.zip # 解压到当前目录
unzip archive.zip -d /target/ # 解压到指定目录
unzip -l archive.zip # 列出内容
unzip -o archive.zip # 覆盖已存在的文件
# 常用选项
-r, --recursive # 递归处理
-q, --quiet # 静默模式
-d, --dest # 指定目标目录
-e, --encrypt # 加密
-p, --password # 指定密码
其他压缩工具
# gzip - 最常用
gzip file.txt # 压缩
gunzip file.txt.gz # 解压
gzip -k file.txt # 压缩并保留原文件
gzip -d file.txt.gz # 解压
gzip -9 file.txt # 最大压缩率
gzip -1 file.txt # 最快速度
# bzip2 - 更高压缩率
bzip2 file.txt
bunzip2 file.txt.bz2
# xz - 最高压缩率
xz file.txt
unxz file.txt.xz
# 7z
7z a archive.7z files/ # 压缩
7z x archive.7z # 解压
磁盘管理
df - 磁盘空间使用
# 基本用法
df # 显示所有文件系统
df -h # 人类可读格式
df -T # 显示文件系统类型
df -i # 显示inode使用情况
df -a # 显示所有文件系统
df -h /home # 显示指定挂载点
# 示例输出
$ df -h
Filesystem Size Used Avail Use% Mounted on
tmpfs 1.6G 1.3M 1.6G 1% /dev/shm
/dev/sda1 100G 50G 45G 53% /
tmpfs 1.6G 80K 1.6G 1% /dev
tmpfs 320M 1.5M 319M 1% /run
du - 目录空间使用
# 基本用法
du # 显示当前目录及子目录大小
du -h # 人类可读格式
du -sh # 只显示总大小
du -sh * # 显示各子项大小
du -h --max-depth=1 # 限制深度
du -c # 显示总计
du -a # 显示所有文件
du -m # 以MB为单位
# 实用示例
du -sh /var/log # 查看日志目录大小
du -h /home | sort -h # 按大小排序
find /home -type f -exec du -h {} + | sort -h
mount/umount - 挂载管理
# 查看挂载
mount # 显示所有挂载
mount | grep /dev/sda # 查看特定设备
findmnt # 树形显示挂载关系
findmnt /dev/sdb1 # 查看特定挂载
# 挂载设备
sudo mount /dev/sdb1 /mnt/usb
sudo mount -o ro /dev/sdb1 /mnt/usb # 只读挂载
sudo mount -t ntfs /dev/sdb1 /mnt/win # 指定文件系统
sudo mount -a # 挂载fstab中的所有设备
# 卸载设备
sudo umount /mnt/usb
sudo umount -l /mnt/usb # 懒卸载
sudo umount -f /mnt/usb # 强制卸载
# 常用挂载选项
ro # 只读
rw # 读写
remount # 重新挂载
bind # 绑定挂载
课后练习
实践任务
- 练习使用
ls -la查看各种文件类型 - 创建目录结构
~/projects/{src,bin,lib,docs}并在每个目录创建测试文件 - 使用
find命令搜索/var/log中最近7天修改的.log文件 - 创建压缩包并练习各种解压选项
- 使用
df -h和du -sh分析磁盘使用情况 - 创建一个符号链接指向
/var/log并观察链接行为
下一篇预告:我们将学习Linux用户与权限管理,理解如何安全地管理系统用户和文件权限。