文件系统与目录结构

最后更新: 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        # 绑定挂载

课后练习

实践任务
  1. 练习使用 ls -la 查看各种文件类型
  2. 创建目录结构 ~/projects/{src,bin,lib,docs} 并在每个目录创建测试文件
  3. 使用 find 命令搜索 /var/log 中最近7天修改的 .log 文件
  4. 创建压缩包并练习各种解压选项
  5. 使用 df -hdu -sh 分析磁盘使用情况
  6. 创建一个符号链接指向 /var/log 并观察链接行为

下一篇预告:我们将学习Linux用户与权限管理,理解如何安全地管理系统用户和文件权限。