文件系统是Linux系统的核心组成部分。理解Linux文件系统的层次结构、文件类型和权限机制,是掌握Linux系统管理的基础。本章将深入讲解Linux文件系统的组织方式和管理方法。
Linux文件系统是树形结构,根目录为"/"。
/
│
┌───────────┼───────────┬───────────┬───────────┐
│ │ │ │ │
bin etc home usr var
│ │ │ │ │
命令 配置 用户 程序 数据
东巴文观点:Linux文件系统就像一棵倒置的树,根目录"/"是树根,所有文件和目录都从根目录分支出来。
绝对路径:从根目录开始的完整路径
/etc/passwd # 绝对路径
/home/dbw/Documents # 绝对路径
相对路径:从当前目录开始的路径
Documents/report.txt # 相对路径
../Downloads # 相对路径(上一级目录)
./test.txt # 相对路径(当前目录)
特殊目录符号:
| 符号 | 说明 |
|---|---|
| / | 根目录 |
| ~ | 用户主目录 |
| . | 当前目录 |
| .. | 上一级目录 |
| - | 上一次所在目录 |
FHS(文件系统层次标准)定义的目录结构:
/
├── bin/ # 基本命令(所有用户可用)
├── boot/ # 启动文件
├── dev/ # 设备文件
├── etc/ # 系统配置文件
├── home/ # 用户主目录
├── lib/ # 系统库文件
├── media/ # 可移动设备挂载点
├── mnt/ # 临时挂载点
├── opt/ # 可选软件包
├── proc/ # 进程信息(虚拟文件系统)
├── root/ # root用户主目录
├── run/ # 运行时数据
├── sbin/ # 系统管理命令
├── srv/ # 服务数据
├── sys/ # 系统信息(虚拟文件系统)
├── tmp/ # 临时文件
├── usr/ # 用户程序和数据
└── var/ # 可变数据
/bin - 基本命令目录
# 存放系统启动和运行所需的基本命令
/bin/ls
/bin/cat
/bin/mkdir
/bin/rm
# 所有用户都可以使用这些命令
/etc - 配置文件目录
# 系统配置文件
/etc/passwd # 用户信息
/etc/shadow # 用户密码
/etc/group # 组信息
/etc/hosts # 主机名解析
/etc/fstab # 文件系统挂载表
/etc/ssh/ # SSH配置
/etc/apt/ # APT配置(Ubuntu/Debian)
/etc/yum.repos.d/ # YUM配置(CentOS/RHEL)
东巴文提示:/etc目录是系统管理员最常访问的目录,几乎所有系统配置都在这里。
/home - 用户主目录
# 每个用户都有一个独立的主目录
/home/dbw/ # 用户dbw的主目录
/home/tom/ # 用户tom的主目录
# 用户主目录下的常见子目录
/home/dbw/Desktop/ # 桌面
/home/dbw/Documents/ # 文档
/home/dbw/Downloads/ # 下载
/home/dbw/.config/ # 应用配置(隐藏目录)
/var - 可变数据目录
# 系统运行时产生的可变数据
/var/log/ # 日志文件
/var/cache/ # 缓存数据
/var/spool/ # 队列数据
/var/lib/ # 应用数据
/var/tmp/ # 临时文件
# 常见日志文件
/var/log/syslog # 系统日志(Ubuntu/Debian)
/var/log/messages # 系统日志(CentOS/RHEL)
/var/log/auth.log # 认证日志
/var/log/apache2/ # Apache日志
/usr - 用户程序目录
# 用户程序和数据
/usr/bin/ # 用户命令
/usr/sbin/ # 系统管理命令
/usr/lib/ # 用户库文件
/usr/share/ # 共享数据
/usr/local/ # 本地安装的软件
/usr/src/ # 源代码
# 示例
/usr/bin/vim # Vim编辑器
/usr/bin/python3 # Python解释器
/dev - 设备文件目录
# 设备文件
/dev/null # 空设备(丢弃所有输入)
/dev/zero # 零设备(提供空字符)
/dev/random # 随机数设备
/dev/tty # 当前终端
/dev/sda # 第一块SCSI硬盘
/dev/sda1 # 第一块硬盘的第一个分区
/proc - 进程信息目录
# 虚拟文件系统,提供内核和进程信息
/proc/cpuinfo # CPU信息
/proc/meminfo # 内存信息
/proc/version # 内核版本
/proc/uptime # 系统运行时间
/proc/[pid]/ # 进程信息(pid为进程ID)
# 查看CPU信息
cat /proc/cpuinfo
# 查看内存信息
cat /proc/meminfo
/tmp - 临时文件目录
# 临时文件,重启后可能清空
/tmp/
# 所有用户可读写
chmod 1777 /tmp # 粘滞位,用户只能删除自己的文件
东巴文最佳实践:不要在/tmp目录存放重要文件,系统重启后可能丢失。
用户主目录:/home/用户名/
常见子目录:
| 目录 | 说明 |
|---|---|
| ~/Desktop | 桌面 |
| ~/Documents | 文档 |
| ~/Downloads | 下载 |
| ~/Music | 音乐 |
| ~/Pictures | 图片 |
| ~/Videos | 视频 |
| ~/.config | 应用配置文件 |
| ~/.local | 本地数据 |
| ~/.cache | 缓存文件 |
| ~/.ssh | SSH配置和密钥 |
以点(.)开头的文件和目录是隐藏文件。
# 查看隐藏文件
ls -a
# 输出示例:
# . .. .bashrc
# .profile .cache .config
# 常见隐藏文件
~/.bashrc # Bash配置
~/.bash_profile # Bash登录配置
~/.profile # 用户配置
~/.vimrc # Vim配置
~/.gitconfig # Git配置
东巴文提示:隐藏文件通常是配置文件,不要随意删除。
Linux中一切皆文件。
| 类型 | 标识符 | 说明 |
|---|---|---|
| 普通文件 | - | 文本文件、二进制文件等 |
| 目录 | d | 目录文件 |
| 符号链接 | l | 软链接 |
| 块设备 | b | 硬盘、U盘等 |
| 字符设备 | c | 终端、键盘等 |
| 管道 | p | 命名管道 |
| 套接字 | s | 网络套接字 |
使用ls -l查看文件类型:
ls -l
# 输出示例:
# -rw-r--r-- 1 dbw dbw 1234 Jan 1 10:00 file.txt
# drwxr-xr-x 2 dbw dbw 4096 Jan 1 10:00 dir
# lrwxrwxrwx 1 dbw dbw 4 Jan 1 10:00 link -> file
# brw-rw---- 1 root disk 8, 0 Jan 1 10:00 /dev/sda
# crw-rw-rw- 1 root tty 5, 0 Jan 1 10:00 /dev/tty
# 第一个字符表示文件类型:
# - 普通文件
# d 目录
# l 符号链接
# b 块设备
# c 字符设备
使用file命令查看文件类型:
# 查看文件类型
file file.txt
# 输出:file.txt: ASCII text
file /bin/ls
# 输出:/bin/ls: ELF 64-bit LSB executable
file /dev/sda
# 输出:/dev/sda: block special
file Pictures/
# 输出:Pictures/: directory
文本文件:以ASCII或UTF-8编码存储的文件。
# 创建文本文件
echo "Hello, World!" > hello.txt
# 查看文本文件
cat hello.txt
less hello.txt
head hello.txt
tail hello.txt
# 编辑文本文件
vim hello.txt
nano hello.txt
二进制文件:以二进制格式存储的文件。
# 可执行文件
/bin/ls
/usr/bin/vim
# 图片文件
image.jpg
image.png
# 压缩文件
archive.tar.gz
archive.zip
创建目录:
# 创建单个目录
mkdir dir1
# 创建多级目录
mkdir -p dir1/dir2/dir3
# 创建目录并设置权限
mkdir -m 755 dir1
删除目录:
# 删除空目录
rmdir dir1
# 删除非空目录
rm -r dir1
# 强制删除目录(不提示)
rm -rf dir1
东巴文警告:rm -rf命令非常危险,删除后无法恢复!
符号链接(软链接):指向另一个文件的特殊文件。
特点:
ln命令:
# 创建符号链接
ln -s 源文件 链接文件
# 示例
ln -s /usr/bin/python3 /usr/bin/python
# 创建目录的符号链接
ln -s /var/log logs
# 查看链接
ls -l logs
# 输出:lrwxrwxrwx 1 dbw dbw 8 Jan 1 10:00 logs -> /var/log
硬链接:指向相同inode的多个文件名。
特点:
# 创建硬链接
ln 源文件 硬链接文件
# 示例
ln file.txt hardlink.txt
# 查看inode号
ls -i file.txt hardlink.txt
# 输出:
# 123456 file.txt
# 123456 hardlink.txt # inode号相同
东巴文对比:
| 特性 | 符号链接 | 硬链接 |
|---|---|---|
| 跨文件系统 | 可以 | 不可以 |
| 链接目录 | 可以 | 不可以 |
| 原文件删除 | 链接失效 | 链接有效 |
| inode | 不同 | 相同 |
块设备:以块为单位读写数据的设备。
# 硬盘设备
/dev/sda # 第一块SCSI硬盘
/dev/sda1 # 第一块硬盘的第一个分区
/dev/sdb # 第二块SCSI硬盘
# 查看块设备
lsblk
# 输出示例:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sda 8:0 0 100G 0 disk
# ├─sda1 8:1 0 50G 0 part /
# └─sda2 8:2 0 50G 0 part /home
字符设备:以字符为单位读写数据的设备。
# 终端设备
/dev/tty # 当前终端
/dev/tty1 # 虚拟终端1
/dev/pts/0 # 伪终端
# 查看字符设备
ls -l /dev/tty
# 输出:crw-rw-rw- 1 root tty 5, 0 Jan 1 10:00 /dev/tty
Linux文件权限分为三类:
| 权限 | 文件 | 目录 |
|---|---|---|
| 读(r) | 查看文件内容 | 列出目录内容 |
| 写(w) | 修改文件内容 | 创建/删除文件 |
| 执行(x) | 执行文件 | 进入目录 |
符号表示法:
-rwxr-xr--
│└┬┘└┬┘└┬┘
│ │ │ └─ 其他用户权限(r--)
│ │ └──── 组权限(r-x)
│ └─────── 所有者权限(rwx)
└───────── 文件类型(-)
数字表示法:
| 权限 | 数字 | 二进制 |
|---|---|---|
| --- | 0 | 000 |
| --x | 1 | 001 |
| -w- | 2 | 010 |
| -wx | 3 | 011 |
| r-- | 4 | 100 |
| r-x | 5 | 101 |
| rw- | 6 | 110 |
| rwx | 7 | 111 |
示例:
-rwxr-xr-- = 754
-rw-r--r-- = 644
drwxr-xr-x = 755
符号模式:
# 语法
chmod [ugoa][+-=][rwx] 文件
# 参数说明
u # 所有者(user)
g # 组(group)
o # 其他用户(other)
a # 所有人(all)
+ # 添加权限
- # 移除权限
= # 设置权限
# 示例
chmod u+x script.sh # 给所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 设置其他用户只读权限
chmod a+x script.sh # 给所有人添加执行权限
chmod u=rwx,g=rx,o=r file # 设置完整权限
数字模式:
# 语法
chmod 数字 文件
# 示例
chmod 755 script.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 700 dir/ # rwx------
chmod 777 public/ # rwxrwxrwx(不推荐)
递归修改:
# 递归修改目录及其子目录
chmod -R 755 /var/www/html/
东巴文最佳实践:
修改文件所有者:
# 语法
chown 用户:组 文件
# 示例
chown dbw file.txt # 修改所有者
chown dbw:dbw file.txt # 修改所有者和组
chown :dbw file.txt # 只修改组
# 递归修改
chown -R dbw:dbw /var/www/html/
修改文件所属组:
# 语法
chgrp 组 文件
# 示例
chgrp dbw file.txt
# 递归修改
chgrp -R dbw /var/www/html/
SUID(Set User ID):执行时以文件所有者身份运行。
# 设置SUID
chmod u+s /usr/bin/passwd
# 查看SUID
ls -l /usr/bin/passwd
# 输出:-rwsr-xr-x 1 root root ... /usr/bin/passwd
# ↑ s表示SUID
# 示例:普通用户修改密码
# passwd命令以root身份运行,可以修改/etc/shadow
东巴文提示:SUID权限有安全风险,谨慎使用。
SGID(Set Group ID):
# 设置SGID
chmod g+s /shared/
# 查看SGID
ls -ld /shared/
# 输出:drwxrwsr-x 2 root dbw ... /shared/
# ↑ s表示SGID
# 在SGID目录下创建的文件自动继承目录的组
cd /shared/
touch file.txt
ls -l file.txt
# 输出:-rw-r--r-- 1 dbw dbw ... file.txt
# ↑ 组为dbw,继承自目录
粘滞位(Sticky Bit):目录中的文件只能由所有者删除。
# 设置粘滞位
chmod +t /tmp/
# 查看粘滞位
ls -ld /tmp/
# 输出:drwxrwxrwt 15 root root ... /tmp/
# ↑ t表示粘滞位
# 示例:/tmp目录
# 所有用户可写,但只能删除自己的文件
东巴文提示:粘滞位常用于公共目录,如/tmp。
挂载:将文件系统连接到目录树的过程。
挂载前:
/ (根文件系统)
├── bin/
├── etc/
└── home/
挂载后(将/dev/sdb1挂载到/mnt/usb):
/ (根文件系统)
├── bin/
├── etc/
├── home/
└── mnt/
└── usb/ ← /dev/sdb1的内容
东巴文比喻:挂载就像给硬盘分区分配一个"门牌号"(挂载点),通过这个门牌号才能访问分区内容。
挂载点:目录树中用于挂载文件系统的目录。
# 常见挂载点
/ # 根文件系统
/home # 用户主目录
/var # 可变数据
/tmp # 临时文件
/boot # 启动文件
/mnt # 临时挂载点
/media # 可移动设备挂载点
基本语法:
mount 设备 挂载点
挂载U盘:
# 查看设备
lsblk
# 创建挂载点
sudo mkdir -p /mnt/usb
# 挂载U盘
sudo mount /dev/sdb1 /mnt/usb
# 访问U盘
cd /mnt/usb
ls
挂载ISO文件:
# 挂载ISO文件
sudo mount -o loop ubuntu-20.04.iso /mnt/iso
挂载网络共享:
# 挂载NFS共享
sudo mount -t nfs 192.168.1.100:/share /mnt/nfs
# 挂载Windows共享
sudo mount -t cifs //192.168.1.100/share /mnt/smb -o username=user,password=pass
# 查看所有挂载
mount
# 查看特定设备
mount | grep sdb1
# 查看挂载点
df -h
# 输出示例:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 50G 20G 30G 40% /
# /dev/sda2 50G 10G 40G 20% /home
# 基本语法
umount 挂载点
# 或
umount 设备
# 示例
sudo umount /mnt/usb
sudo umount /dev/sdb1
# 强制卸载(设备忙时)
sudo umount -l /mnt/usb
东巴文提示:卸载前确保没有进程在使用挂载点,否则会失败。
/etc/fstab文件:定义开机自动挂载的文件系统。
设备 挂载点 文件系统类型 挂载选项 dump fsck
示例:
# /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
# 根文件系统
/dev/sda1 / ext4 errors=remount-ro 0 1
# 用户主目录
/dev/sda2 /home ext4 defaults 0 2
# 交换分区
/dev/sda3 none swap sw 0 0
# 光驱
/dev/cdrom /media/cdrom udf,iso9660 user,noauto 0 0
# 网络共享
//192.168.1.100/share /mnt/smb cifs credentials=/etc/smbpasswd 0 0
常用挂载选项:
| 选项 | 说明 |
|---|---|
| defaults | 默认选项(rw, suid, dev, exec, auto, nouser, async) |
| ro | 只读挂载 |
| rw | 读写挂载 |
| noexec | 不允许执行程序 |
| nosuid | 不允许SUID |
| noauto | 不自动挂载 |
| user | 允许普通用户挂载 |
| users | 允许所有用户挂载和卸载 |
# 编辑fstab文件
sudo vim /etc/fstab
# 添加新挂载
/dev/sdb1 /mnt/data ext4 defaults 0 2
# 测试挂载
sudo mount -a
# 验证
df -h
东巴文警告:fstab配置错误可能导致系统无法启动,修改前务必备份!
查看文件系统磁盘空间使用情况:
# 基本用法
df
# 人类可读格式
df -h
# 输出示例:
# Filesystem Size Used Avail Use% Mounted on
# /dev/sda1 50G 20G 30G 40% /
# tmpfs 2.0G 0 2.0G 0% /dev/shm
# /dev/sda2 50G 10G 40G 20% /home
# 查看inode使用情况
df -i
# 查看特定文件系统类型
df -t ext4
查看目录或文件磁盘使用情况:
# 查看当前目录大小
du
# 人类可读格式
du -h
# 查看目录总大小
du -sh
# 查看当前目录下各子目录大小
du -h --max-depth=1
# 输出示例:
# 4.0K ./dir1
# 8.0K ./dir2
# 12K .
# 按大小排序
du -h --max-depth=1 | sort -h
# 查看指定目录
du -sh /var/log
安装配额工具:
# Ubuntu/Debian
sudo apt install quota
# CentOS/RHEL
sudo yum install quota
编辑fstab启用配额:
# 编辑fstab
sudo vim /etc/fstab
# 添加配额选项
/dev/sda2 /home ext4 defaults,usrquota,grpquota 0 2
# 重新挂载
sudo mount -o remount /home
# 创建配额文件
sudo quotacheck -cug /home
# 启用配额
sudo quotaon /home
# 设置用户配额
sudo edquota -u dbw
# 设置组配额
sudo edquota -g dbw
# 查看配额
quota -u dbw
repquota /home
# Ubuntu/Debian
sudo apt clean # 清理软件包缓存
sudo apt autoclean # 清理过期的软件包缓存
sudo apt autoremove # 删除不需要的依赖包
# CentOS/RHEL
sudo yum clean all # 清理所有缓存
# 查看日志大小
du -sh /var/log/*
# 清空日志文件(保留文件)
sudo truncate -s 0 /var/log/syslog
# 删除旧日志
sudo find /var/log -type f -name "*.log.*" -mtime +30 -delete
# 使用logrotate自动管理日志
sudo logrotate -f /etc/logrotate.conf
# 查找大于100MB的文件
find / -type f -size +100M
# 查找最大的10个文件
find / -type f -exec du -h {} + | sort -rh | head -10
# 查找特定目录下的大文件
find /var -type f -size +50M
东巴文最佳实践:定期清理磁盘空间,避免磁盘满导致系统异常。
✅ Linux文件系统是树形结构,根目录为/ ✅ 理解重要目录的作用:/etc、/home、/var、/usr ✅ 掌握文件类型和权限管理 ✅ 学会挂载和卸载文件系统 ✅ 定期检查磁盘空间使用情况
完成本章学习后,请确认您能够:
东巴文(db-w.cn) - 让Linux学习更简单