Linux文件系统
Linux文件系统结构
1. 文件系统层次结构 (FHS)
根目录 (/)
# Linux文件系统是一个倒置的树形结构
# 所有文件和目录都从根目录 / 开始
ls -la / # 查看根目录内容
主要目录说明
/bin # 基本命令二进制文件
/boot # 启动文件 (内核、引导程序)
/dev # 设备文件
/etc # 系统配置文件
/home # 用户家目录
/lib # 共享库文件
/media # 可移动媒体挂载点
/mnt # 临时挂载点
/opt # 可选软件包
/proc # 进程和系统信息 (虚拟文件系统)
/root # root用户家目录
/run # 运行时数据
/sbin # 系统管理命令
/srv # 服务数据
/sys # 系统信息 (虚拟文件系统)
/tmp # 临时文件
/usr # 用户程序和数据
/var # 可变数据 (日志、缓存等)
2. 重要目录详解
/etc - 配置文件目录
/etc/passwd # 用户账户信息
/etc/group # 组信息
/etc/shadow # 用户密码 (加密)
/etc/fstab # 文件系统挂载配置
/etc/hosts # 主机名解析
/etc/resolv.conf # DNS配置
/etc/crontab # 定时任务配置
/etc/ssh/ # SSH配置目录
/etc/nginx/ # Nginx配置目录
/etc/apache2/ # Apache配置目录
/var - 可变数据目录
/var/log/ # 系统日志
/var/cache/ # 应用程序缓存
/var/lib/ # 应用程序状态信息
/var/spool/ # 队列数据 (邮件、打印等)
/var/tmp/ # 临时文件 (重启后保留)
/var/www/ # Web服务器文档根目录
/usr - 用户程序目录
/usr/bin/ # 用户命令
/usr/sbin/ # 系统管理命令
/usr/lib/ # 库文件
/usr/share/ # 共享数据
/usr/local/ # 本地安装的软件
/usr/src/ # 源代码
/proc - 进程信息目录 (虚拟)
/proc/cpuinfo # CPU信息
/proc/meminfo # 内存信息
/proc/version # 内核版本
/proc/mounts # 挂载信息
/proc/[PID]/ # 进程信息目录
文件类型
1. 文件类型标识
ls -l 输出中的文件类型
-rw-r--r-- # 普通文件 (-)
drwxr-xr-x # 目录 (d)
lrwxrwxrwx # 符号链接 (l)
crw-rw-rw- # 字符设备 (c)
brw-rw---- # 块设备 (b)
prw-r--r-- # 命名管道 (p)
srwxrwxrwx # 套接字 (s)
file命令查看文件类型
file /bin/ls # ELF 64-bit LSB executable
file /etc/passwd # ASCII text
file /dev/sda1 # block special
file /home # directory
2. 特殊文件
设备文件
ls -l /dev/ # 查看设备文件
/dev/sda # 第一个SATA硬盘
/dev/sda1 # 第一个分区
/dev/tty1 # 第一个虚拟终端
/dev/null # 空设备 (数据黑洞)
/dev/zero # 零设备 (产生零字节)
/dev/random # 随机数设备
虚拟文件系统
# /proc 文件系统
cat /proc/cpuinfo # 查看CPU信息
cat /proc/meminfo # 查看内存信息
cat /proc/version # 查看内核版本
# /sys 文件系统
ls /sys/class/net/ # 查看网络接口
cat /sys/class/thermal/thermal_zone0/temp # 查看温度
文件权限
1. 权限基础
权限表示
# 权限位组成
-rwxrwxrwx
│││││││││
│││││││└┴┴─ 其他用户权限 (other)
│││└┴┴──── 组权限 (group)
│└┴─────── 所有者权限 (owner)
└────────── 文件类型
# 权限含义
r (read) = 4 # 读权限
w (write) = 2 # 写权限
x (execute) = 1 # 执行权限
数字权限表示
# 权限计算
rwx = 4+2+1 = 7 # 读写执行
rw- = 4+2+0 = 6 # 读写
r-x = 4+0+1 = 5 # 读执行
r-- = 4+0+0 = 4 # 只读
-wx = 0+2+1 = 3 # 写执行
-w- = 0+2+0 = 2 # 只写
--x = 0+0+1 = 1 # 只执行
--- = 0+0+0 = 0 # 无权限
# 常见权限组合
755 = rwxr-xr-x # 所有者全权限,其他读执行
644 = rw-r--r-- # 所有者读写,其他只读
600 = rw------- # 所有者读写,其他无权限
2. 权限管理命令
chmod - 修改权限
# 数字模式
chmod 755 file.txt # 设置权限为755
chmod 644 *.txt # 设置所有txt文件权限为644
chmod -R 755 directory # 递归设置目录权限
# 符号模式
chmod u+x file.txt # 给所有者添加执行权限
chmod g-w file.txt # 移除组的写权限
chmod o=r file.txt # 设置其他用户只有读权限
chmod a+r file.txt # 给所有用户添加读权限
# 符号说明
u = user (所有者)
g = group (组)
o = other (其他)
a = all (所有)
+ = 添加权限
- = 移除权限
= = 设置权限
chown - 修改所有者
chown user file.txt # 修改文件所有者
chown user:group file.txt # 修改所有者和组
chown :group file.txt # 只修改组
chown -R user:group directory # 递归修改目录
# 示例
sudo chown root:root /etc/passwd
sudo chown www-data:www-data /var/www/html/
chgrp - 修改组
chgrp group file.txt # 修改文件所属组
chgrp -R group directory # 递归修改目录组
3. 特殊权限
SUID (Set User ID)
# SUID权限 (4000)
chmod 4755 file # 设置SUID权限
ls -l /usr/bin/passwd # 查看passwd命令的SUID权限
-rwsr-xr-x # s表示SUID权限
# SUID作用:以文件所有者身份执行
SGID (Set Group ID)
# SGID权限 (2000)
chmod 2755 directory # 设置目录SGID权限
ls -ld /var/mail # 查看邮件目录的SGID权限
drwxrwsr-x # s表示SGID权限
# SGID作用:
# - 文件:以文件所属组身份执行
# - 目录:新建文件继承目录的组
Sticky Bit
# Sticky权限 (1000)
chmod 1777 directory # 设置Sticky权限
ls -ld /tmp # 查看/tmp目录的Sticky权限
drwxrwxrwt # t表示Sticky权限
# Sticky作用:只有文件所有者才能删除自己的文件
文件链接
1. 硬链接 (Hard Link)
创建硬链接
ln source.txt hardlink.txt # 创建硬链接
ls -li source.txt hardlink.txt # 查看inode号 (相同)
# 硬链接特点
# 1. 共享相同的inode
# 2. 删除原文件不影响硬链接
# 3. 不能跨文件系统
# 4. 不能链接目录
查看链接数
ls -l file.txt # 第二列显示链接数
stat file.txt # 查看详细信息包括链接数
2. 符号链接 (Symbolic Link)
创建符号链接
ln -s source.txt symlink.txt # 创建符号链接
ln -s /path/to/source /path/to/link
# 符号链接特点
# 1. 有独立的inode
# 2. 可以跨文件系统
# 3. 可以链接目录
# 4. 删除原文件会导致链接失效
查看符号链接
ls -l symlink.txt # 显示链接目标
lrwxrwxrwx 1 user user 10 Dec 20 10:30 symlink.txt -> source.txt
readlink symlink.txt # 显示链接目标
file symlink.txt # 显示链接信息
3. 链接管理
查找链接
find / -samefile source.txt # 查找所有硬链接
find / -lname "*pattern*" # 查找符号链接
删除链接
rm hardlink.txt # 删除硬链接
rm symlink.txt # 删除符号链接
unlink link.txt # 删除链接 (另一种方法)
文件系统类型
1. 常见文件系统
Linux原生文件系统
ext4 # 第四代扩展文件系统 (默认)
ext3 # 第三代扩展文件系统
ext2 # 第二代扩展文件系统
xfs # 高性能文件系统
btrfs # B-tree文件系统 (写时复制)
zfs # Z文件系统 (需要额外安装)
其他文件系统
ntfs # Windows NT文件系统
fat32 # FAT32文件系统
exfat # 扩展FAT文件系统
iso9660 # CD-ROM文件系统
nfs # 网络文件系统
cifs/smb # Windows共享文件系统
2. 查看文件系统信息
查看挂载的文件系统
df -T # 显示文件系统类型
mount # 显示所有挂载点
cat /proc/mounts # 查看内核挂载信息
findmnt # 树形显示挂载信息
查看文件系统详细信息
# ext4文件系统
tune2fs -l /dev/sda1 # 查看ext4文件系统信息
dumpe2fs /dev/sda1 # 详细的ext4信息
# xfs文件系统
xfs_info /dev/sda1 # 查看xfs文件系统信息
# 通用方法
blkid # 显示所有块设备信息
lsblk -f # 显示块设备和文件系统
文件系统挂载
1. 挂载基础
mount命令
# 基本挂载
sudo mount /dev/sda1 /mnt # 挂载分区到/mnt
sudo mount -t ext4 /dev/sda1 /mnt # 指定文件系统类型
# 挂载选项
sudo mount -o ro /dev/sda1 /mnt # 只读挂载
sudo mount -o rw /dev/sda1 /mnt # 读写挂载
sudo mount -o noexec /dev/sda1 /mnt # 禁止执行
sudo mount -o nosuid /dev/sda1 /mnt # 禁止SUID
umount命令
sudo umount /mnt # 卸载挂载点
sudo umount /dev/sda1 # 卸载设备
sudo umount -f /mnt # 强制卸载
sudo umount -l /mnt # 懒卸载 (稍后卸载)
2. 自动挂载配置
/etc/fstab文件
# 查看fstab文件
cat /etc/fstab
# fstab格式
# <设备> <挂载点> <文件系统> <选项> <dump> <fsck>
/dev/sda1 / ext4 defaults 0 1
/dev/sda2 /home ext4 defaults 0 2
/dev/sda3 none swap sw 0 0
UUID=xxx-xxx /boot/efi vfat defaults 0 1
# 字段说明
# 设备:设备文件或UUID
# 挂载点:挂载目录
# 文件系统:文件系统类型
# 选项:挂载选项
# dump:备份标志 (0=不备份, 1=备份)
# fsck:检查顺序 (0=不检查, 1=根分区, 2=其他分区)
常用挂载选项
defaults # 默认选项 (rw,suid,dev,exec,auto,nouser,async)
ro # 只读
rw # 读写
noexec # 禁止执行
nosuid # 禁止SUID
nodev # 禁止设备文件
auto # 启动时自动挂载
noauto # 不自动挂载
user # 允许普通用户挂载
nouser # 只允许root挂载
3. 特殊挂载
挂载ISO文件
sudo mount -o loop image.iso /mnt/iso
挂载网络文件系统
# NFS挂载
sudo mount -t nfs server:/path /mnt/nfs
# CIFS/SMB挂载
sudo mount -t cifs //server/share /mnt/smb -o username=user,password=pass
绑定挂载
sudo mount --bind /source /target # 绑定挂载
sudo mount --rbind /source /target # 递归绑定挂载
磁盘管理
1. 磁盘分区
查看磁盘信息
lsblk # 列出块设备
fdisk -l # 列出所有磁盘分区
parted -l # 使用parted查看分区
分区工具
# fdisk (MBR分区)
sudo fdisk /dev/sda # 对sda进行分区
# parted (GPT分区)
sudo parted /dev/sda # 使用parted分区
# cfdisk (图形界面)
sudo cfdisk /dev/sda # 图形化分区工具
2. 文件系统创建
格式化分区
# 创建ext4文件系统
sudo mkfs.ext4 /dev/sda1
# 创建xfs文件系统
sudo mkfs.xfs /dev/sda1
# 创建fat32文件系统
sudo mkfs.fat -F32 /dev/sda1
# 创建swap分区
sudo mkswap /dev/sda2
sudo swapon /dev/sda2
实用技巧
1. 文件查找技巧
按大小查找文件
find / -size +100M # 查找大于100MB的文件
find / -size -1k # 查找小于1KB的文件
du -sh /* | sort -hr # 按大小排序显示目录
按时间查找文件
find / -mtime -7 # 7天内修改的文件
find / -atime +30 # 30天前访问的文件
find / -ctime -1 # 1天内状态改变的文件
2. 权限管理技巧
批量权限设置
# 设置目录和文件不同权限
find /path -type d -exec chmod 755 {} \; # 目录755
find /path -type f -exec chmod 644 {} \; # 文件644
# 使用chmod的X选项
chmod -R u+X /path # 只给目录添加执行权限
3. 磁盘空间管理
清理磁盘空间
# 查找大文件
find / -size +1G -ls 2>/dev/null
# 清理临时文件
sudo rm -rf /tmp/*
sudo rm -rf /var/tmp/*
# 清理日志文件
sudo journalctl --vacuum-time=7d # 保留7天日志
sudo find /var/log -name "*.log" -mtime +30 -delete
总结
Linux文件系统要点:
- 目录结构:理解FHS标准,熟悉重要目录的作用
- 文件权限:掌握rwx权限和特殊权限的使用
- 文件链接:了解硬链接和符号链接的区别
- 文件系统:熟悉常见文件系统类型和特点
- 挂载管理:掌握手动挂载和自动挂载配置
下一课预告
在下一课中,我们将学习用户和权限管理,包括:
- 用户账户管理
- 组管理
- sudo权限配置
- 用户环境配置
💡 小贴士:文件权限是Linux安全的基础。建议在实际操作中多练习权限设置,理解不同权限对文件和目录的影响。
📚 文章对你有帮助?请关注我的公众号,万分感谢!
获取更多优质技术文章,第一时间掌握最新技术动态

关注公众号
第一时间获取最新技术文章

添加微信
技术交流 · 问题答疑 · 学习指导
评论讨论
欢迎留下你的想法和建议