1. Linux文件系统基础认知
刚接触Linux时,文件系统就像个迷宫。与Windows的盘符划分不同,Linux采用单一的树状结构,所有存储设备都挂载在这个目录树的某个节点上。我在第一次操作服务器时就犯过错误——以为插入U盘会自动出现D盘、E盘,结果在图形界面找了半天。实际上需要先用lsblk查看设备标识,再手动挂载到/mnt目录。
最顶层的根目录(/)下有十几个标准子目录,每个都有特定用途。比如/bin存放基础命令二进制文件,/etc放系统配置文件,/home是用户主目录。有次我误删了/lib下的动态链接库,直接导致系统命令集体罢工。后来才知道这些目录不能随意改动,特别是/usr和/var这种关键目录。
文件路径分为绝对路径和相对路径。新手常犯的错误是在脚本里混用这两种路径,导致程序在不同目录执行时结果异常。比如./script.sh表示当前目录下的脚本,而/home/user/script.sh则是固定位置。我建议在自动化脚本中始终使用绝对路径,避免因工作目录变化引发的故障。
2. 文件系统挂载机制详解
2.1 手动挂载操作实践
挂载存储设备是运维的基本功。假设插入一个USB设备,系统通常识别为/dev/sdb1。正确的挂载步骤是:
bash复制mkdir -p /mnt/usb # 创建挂载点
mount /dev/sdb1 /mnt/usb # 执行挂载
ls /mnt/usb # 验证内容
我曾遇到过NTFS格式的移动硬盘无法挂载的情况,后来发现需要先安装ntfs-3g驱动包。对于Windows共享文件夹,则要用cifs协议:
bash复制mount -t cifs //192.168.1.100/share /mnt/share -o username=user
2.2 自动挂载配置技巧
/etc/fstab文件控制开机自动挂载。一个典型的条目包含六个字段:
code复制UUID=xxxx /mnt/data ext4 defaults 0 0
这里有个血泪教训:如果修改fstab后系统无法启动,可以进入救援模式,用nano /etc/fstab修复错误。建议每次修改前先备份:
bash复制cp /etc/fstab /etc/fstab.bak
对于网络存储,可以添加_netdev选项避免启动超时:
code复制//nas/share /mnt/share cifs credentials=/root/.smbcred,_netdev 0 0
3. 文件权限深度解析
3.1 权限模型实战
Linux的rwx权限看似简单,但组合起来很灵活。查看权限用ls -l,修改用chmod。数字模式777表示全开放,755适合可执行程序。我常用这个命令给脚本添加执行权限:
bash复制chmod +x backup.sh
特殊权限位需要特别注意:
- SetUID(4):程序运行时以所有者身份执行,比如
passwd命令 - SetGID(2):新建文件继承目录的组ID,适合团队协作目录
- Sticky Bit(1):只有文件所有者能删除/tmp目录下的文件
3.2 ACL高级权限控制
当基础权限不够时,访问控制列表(ACL)提供了更精细的控制。查看ACL用getfacl,设置用setfacl。例如允许开发组读写日志文件:
bash复制setfacl -m g:dev:rw /var/log/app.log
我在管理Web服务器时,经常用ACL解决nginx用户需要读取静态资源的问题:
bash复制setfacl -R -m u:nginx:rx /var/www
4. 文件查找与管理技巧
4.1 高效查找命令组合
find命令功能强大但语法复杂。我常用的几个组合:
bash复制# 找修改时间在7天内的日志
find /var/log -name "*.log" -mtime -7
# 找大于100MB的文件
find / -type f -size +100M -exec ls -lh {} \;
# 找所有权限777的危险文件
find / -perm 777 -exec chmod 755 {} \;
有一次磁盘爆满,我用find配合du快速定位到某个容器日志占用了50GB空间。
4.2 文件链接妙用
硬链接和软链接的区别经常被考到。创建命令分别是ln source target和ln -s source target。实际应用中:
- 硬链接适合同一分区内的文件镜像,删除原文件不影响链接
- 软链接可以跨设备,类似Windows快捷方式
我习惯用软链接管理多版本软件:
bash复制ln -s /opt/jdk-17/bin/java /usr/bin/java
这样切换JDK版本时只需修改链接目标。
5. 存储空间管理实战
5.1 磁盘配额配置
在多用户系统中,磁盘配额能防止某个用户占满空间。配置步骤:
- 编辑
/etc/fstab添加usrquota,grpquota选项 - 重新挂载分区
mount -o remount /home - 初始化配额数据库
quotacheck -cugm /home - 为用户设置限制
edquota -u username
我曾经管理过一台教学服务器,通过配额成功避免了学生滥用存储的问题。
5.2 LVM基础操作
逻辑卷管理(LVM)提供了灵活的存储方案。基本操作流程:
bash复制pvcreate /dev/sdb1 # 创建物理卷
vgcreate vg_data /dev/sdb1 # 创建卷组
lvcreate -L 100G -n lv_www vg_data # 创建逻辑卷
mkfs.ext4 /dev/vg_data/lv_www # 格式化
mount /dev/vg_data/lv_www /var/www # 挂载
当空间不足时,LVM的优势就显现出来了:
bash复制lvextend -L +50G /dev/vg_data/lv_www # 扩展逻辑卷
resize2fs /dev/vg_data/lv_www # 调整文件系统
6. 文件系统故障处理
6.1 修复损坏的文件系统
突然断电可能导致文件系统损坏。修复ext4文件系统的步骤:
bash复制umount /dev/sdb1 # 先卸载
fsck -y /dev/sdb1 # 自动修复错误
mount /dev/sdb1 /mnt # 重新挂载
如果根文件系统损坏,需要从LiveCD启动执行修复。我遇到过XFS文件系统损坏的情况,需要用xfs_repair工具处理。
6.2 恢复误删文件
当重要文件被误删时,extundelete可以尝试恢复ext文件系统的文件:
bash复制extundelete /dev/sdb1 --restore-file /home/user/docs/report.txt
成功率取决于文件被删除后是否被新数据覆盖。建议重要数据立即备份,不要完全依赖恢复工具。
7. 性能监控与优化
7.1 磁盘I/O监控
iostat工具可以查看磁盘负载情况:
bash复制iostat -x 1 # 每秒刷新一次扩展信息
关键指标:
- %util:设备利用率,超过80%说明瓶颈
- await:平均I/O等待时间(ms)
- svctm:平均服务时间(ms)
发现性能问题时,可以用iotop定位具体进程:
bash复制iotop -o # 只显示有I/O操作的进程
7.2 文件系统调优
对于SSD设备,可以在/etc/fstab添加这些挂载选项提升性能:
code复制discard,noatime,nobarrier
数据库服务器建议使用XFS文件系统,并调整日志大小:
bash复制mkfs.xfs -l size=128m -d agcount=16 /dev/sdb1
对于频繁读写的小文件场景,可以调整inode数量:
bash复制mkfs.ext4 -N 500000 /dev/sdb1