第一部分Linux 文件系统的哲学与基础1.1 “一切皆文件”在 Linux/Unix 世界中最核心的设计哲学便是“一切皆文件”。普通文件文本、二进制、数据。目录特殊文件用于存储文件名及其inode的映射表。设备文件硬件设备如/dev/sda/dev/null被抽象为文件通过读写文件来控制硬件。进程与网络进程信息存放在/proc网络 socket 也通过文件描述符操作。1.2 文件系统层次结构标准Linux 没有 Windows 的 C盘、D盘概念只有一个根目录/。/根目录文件系统的起点。/bin/sbin系统启动和基础操作所需的二进制文件。/boot内核vmlinuz、引导加载程序GRUB。/dev设备文件。/etc系统配置文件文本文件为主如passwd,fstab。/home普通用户的家目录。/root超级用户的家目录。/var可变数据日志/var/log 邮件/var/mail 缓存。/tmp临时文件重启通常清空。/usr用户级应用程序和文件类似 Windows 的 Program Files。/proc虚拟文件系统反映内核状态和进程信息。第二部分核心命令详解2.1 目录操作pwd(Print Working Directory)显示当前工作目录的绝对路径。bash$ pwd /home/username/Documentscd(Change Directory)切换目录。bashcd /etc # 绝对路径 cd ../.. # 相对路径向上两级 cd ~ # 切换到当前用户的家目录 cd - # 切换到上一次所在的目录相当于后退ls(List)列出目录内容。这是最常用的命令之一参数组合至关重要。bashls # 简单列出名称 ls -l # 长格式权限、链接数、所有者、大小、时间 ls -a # 显示所有文件包括以.开头的隐藏文件 ls -lh # 人类可读的大小K, M, G ls -ltr # 按时间倒序排列最新的在最后适合看最近修改的文件 ls -R # 递归列出子目录 ls -i # 显示文件的 inode 号mkdir(Make Directory)创建目录。bashmkdir dir1 # 创建单个目录 mkdir -p project/src/utils # 递归创建多层目录即使父目录不存在 mkdir -m 755 secure_dir # 创建时直接指定权限忽略 umaskrmdir(Remove Directory)删除空目录。如果目录非空会报错。通常用rm -r替代。2.2 文件操作touch如果文件不存在创建一个空的文件。如果文件存在更新文件的访问和修改时间戳。bashtouch newfile.txt touch -t 202312311200 file.txt # 修改时间戳为 2023-12-31 12:00cp(Copy)bashcp source.txt dest.txt # 复制文件 cp -r source_dir/ dest_dir/ # 递归复制目录 cp -i file.txt /target/ # 交互模式覆盖前询问 cp -u source.txt dest.txt # 更新模式源文件更新或目标不存在时才复制 cp -a dir1 dir2 # 归档模式保留权限、时间戳、递归常用于备份 cp -l file.txt hard_link.txt # 创建硬链接而非复制数据 cp -s file.txt sym_link.txt # 创建符号链接软链接mv(Move)移动文件或重命名。bashmv oldname.txt newname.txt # 重命名 mv file.txt /some/other/path/ # 移动 mv -i source dest # 交互模式rm(Remove)删除文件或目录危险命令。bashrm file.txt # 删除文件 rm -f file.txt # 强制删除忽略不存在的文件不提示 rm -r directory/ # 递归删除目录 rm -rf directory/ # 强制递归删除慎用极易误删安全提示建议在~/.bashrc中定义别名alias rmrm -i或养成使用trash-cli的习惯。2.3 查看文件内容命令用途特点cat显示整个文件适合小文件大文件刷屏tac反向显示从最后一行开始与 cat 相反more分页显示空格翻页不支持向上翻less更强大的分页显示支持上下键、搜索/关键词、q退出head显示文件开头head -n 20 file显示前20行tail显示文件结尾tail -f file实时跟踪日志输出极其常用nl显示行号类似cat -n第三部分深入理解文件属性与权限3.1 文件类型与权限ls -l 详解执行ls -l输出示例-rw-r--r-- 1 root root 1024 Jan 1 12:00 file.txt第一段文件类型-普通文件d目录l符号链接b块设备如硬盘c字符设备如终端s套接字p管道第二段权限位共9位分三组rw-r--r--所有者 (User)rw-表示读写无执行。组 (Group)r--只读。其他 (Other)r--只读。权限数值表示八进制r 4w 2x 1- 0rwxr-xr-x 7 (421) 5 (401) 5 (401) 755第三段链接数对于目录指其子目录的数量包括.和..。对于文件硬链接的数量。第四、五段所有者和组第六段文件大小默认字节第七至九段修改时间第十段文件名3.2 权限管理命令chmod(Change Mode)修改权限。bash# 符号模式 chmod ux script.sh # 给所有者增加执行权限 chmod g-w file.txt # 剥夺组的写权限 chmod ar readme.md # 给所有用户所有者、组、其他读权限 chmod urwx,grx,or file # 数字模式 chmod 755 script.sh # 所有者全权组和其他只读执行 chmod 600 secret.txt # 只有所有者可读写常用私钥权限 chmod -R 755 folder/ # 递归修改chown(Change Owner)更改文件所有者。bashchown user1 file.txt # 更改所有者 chown user1:group1 file.txt # 同时更改所有者和组 chown :group1 file.txt # 仅更改组 chown -R user1:group1 folder/ # 递归umask(User File Creation Mask)决定新创建文件和目录的默认权限。公式默认权限 最大值 - umask文件最大值 666 (默认没有执行权限防止恶意代码)目录最大值 777 (需要有x权限才能进入)查看umask(通常为 0022)022意味着新建文件 666 - 022 644 (rw-r--r--)新建目录 777 - 022 755 (rwxr-xr-x)3.3 特殊权限SUID, SGID, Sticky BitSUID (Set User ID)chmod us file。执行文件时进程拥有文件所有者的权限而不是执行者的权限。典型例子/usr/bin/passwd普通用户执行时临时获得 root 权限修改/etc/shadow。权限显示rws(原 x 位置显示 s)。SGID (Set Group ID)chmod gs file/dir。作用于文件继承文件所属组的权限。作用于目录在该目录下新建的文件自动继承该目录的所属组。常用于团队协作目录。Sticky Bitchmod t dir。通常用于/tmp。如果目录设置了 sticky bit只有文件所有者、目录所有者或 root 才能删除该目录下的文件其他人即使有写权限也不能删别人的文件。权限显示/tmp权限为drwxrwxrwt。第四部分链接Links4.1 硬链接 (Hard Link)原理多个文件名指向同一个inode数据块。特点删除原文件链接文件依然存在因为 inode 引用计数减少未归零。不能跨文件系统不能跨分区。不能链接目录防止循环引用。操作ln source.txt hard_link.txt4.2 软链接 (Symbolic Link / Soft Link)原理相当于 Windows 的快捷方式是一个特殊文件内容指向目标文件的路径。特点可以跨文件系统。可以链接目录。如果原文件删除链接文件失效“断裂”。操作ln -s /absolute/path/target soft_link第五部分文件查找与管理5.1find—— 最强大的查找工具find功能极其强大可以按名称、时间、大小、权限、类型进行查找并执行操作。基本语法find [路径] [条件] [动作]按名称查找bashfind / -name nginx.conf # 精确匹配 find /home -iname *.jpg # 忽略大小写 find . -name *.py -type f # 只找文件不找目录按大小查找bashfind /var -size 100M # 大于 100M find . -size -1k # 小于 1KB find . -size 0 # 空文件按时间查找-mtime修改时间天-atime访问时间-ctime状态改变时间-mmin分钟bashfind logs -mtime 7 # 7天前修改过的文件 find . -mtime -1 # 最近24小时内修改 find . -mmin -30 # 最近30分钟修改按权限查找bashfind . -perm 755 # 精确权限 find . -perm -us # 查找 SUID 文件安全审计执行动作关键bashfind . -name *.tmp -delete # 删除找到的文件 find . -name *.log -exec rm {} \; # 传统执行每匹配一个执行一次命令 find . -name *.jpg -exec cp {} /backup/ \; # 复制 find . -name *.txt -exec grep error {} \; # 搜索内容 find . -name *.sh -exec chmod x {} \ # 批量加执行权限 号表示合并执行效率高5.2locate利用数据库updatedb快速查找速度极快但非实时。bashlocate nginx.conf # 搜素包含该字符串的路径刚创建的文件可能需要执行sudo updatedb后才能被搜到。5.3which与whereiswhich在$PATH环境变量中查找可执行文件的位置。which pythonwhereis定位二进制文件、源码和 man 手册。whereis nginx5.4grep(Global Regular Expression Print)文本搜索工具常与管道或 find 配合。bashgrep error /var/log/messages # 查找包含 error 的行 grep -r TODO src/ # 递归搜索目录 grep -v debug log.txt # 反向匹配排除 debug grep -n main main.py # 显示行号 grep -E error|warning log.txt # 扩展正则egrep ps aux | grep nginx # 查看进程并过滤第六部分文件系统管理与磁盘6.1 查看磁盘空间df(Disk Free)查看文件系统整体磁盘使用情况。bashdf -h # 人类可读GB, MB df -i # 查看 inode 使用率当磁盘有空间但无法创建文件时往往是 inode 满了 df -T # 显示文件系统类型ext4, xfs, nfsdu(Disk Usage)查看目录或文件的大小。bashdu -sh /home/user # 查看总大小 du -h --max-depth1 / # 查看根目录下各一级目录的大小排查磁盘爆满常用 du -sh * # 列出当前目录下所有文件/目录的大小并排序 du -sh * | sort -rh # 排序显示最大的在前6.2 磁盘与分区操作基础lsblk以树状结构列出所有块设备。fdisk -l查看分区表。mount挂载设备到目录。bashmount /dev/sdb1 /mnt/data umount /mnt/data/etc/fstab开机自动挂载配置文件。第七部分文件压缩与归档7.1tar(Tape Archive)最通用的打包工具通常配合压缩算法。参数含义c创建归档x解压归档v显示详细过程f指定文件名z通过 gzip 压缩/解压 (.tar.gz)j通过 bzip2 压缩/解压 (.tar.bz2)J通过 xz 压缩/解压 (.tar.xz)示例bash# 打包 tar -czvf backup.tar.gz /home/user/data # 解包 tar -xzvf backup.tar.gz -C /target/dir # 查看包内容不解压 tar -tvf backup.tar.gz7.2 其他压缩工具gzip/gunzip单个文件压缩后缀.gz。zip/unzip跨平台兼容性好。bashzip -r archive.zip folder/ unzip archive.zip -d /dest/第八部分输入输出重定向与管道8.1 标准流stdin(0)标准输入stdout(1)标准输出stderr(2)标准错误8.2 重定向操作符bash# 覆盖 ls files.txt # 标准输出覆盖到文件 ls 2 error.log # 标准错误覆盖 ls output.txt # 所有输出覆盖 # 追加 ls files.txt # 追加到文件末尾 # 输入重定向 cat file.txt # 将文件内容作为输入 # 黑洞 command /dev/null 21 # 丢弃所有输出静默执行8.3 管道 (|)将一个命令的标准输出作为下一个命令的标准输入。bashps aux | grep ssh | wc -l cat access.log | awk {print $1} | sort | uniq -c | sort -nr第九部分高级文件管理技巧9.1rsync—— 远程/本地同步神器rsync比scp或cp更高效支持增量传输、断点续传、权限保留。语法rsync [选项] 源 目标常用选项-a归档模式保留权限、时间戳、递归等同于-rlptgoD-v详细输出-z传输时压缩-P显示进度并支持断点续传--delete删除目标目录中源目录没有的文件实现镜像同步--exclude排除文件bash# 本地同步 rsync -av /source/ /dest/ # 注意结尾 / 的差异表示同步目录内容而非目录本身 # 远程推送 rsync -avz -e ssh local_dir/ userremote:/backup/ # 远程拉取 rsync -avz userremote:/data/ /local/data/9.2inotify与实时监控结合inotify-tools如inotifywait可以实现实时监控文件变化并触发脚本常用于热加载配置、自动备份。bashwhile inotifywait -e modify /etc/nginx/nginx.conf; do systemctl reload nginx done9.3 文件系统权限高级特性ACL传统的chmod只能控制“所有者、组、其他人”三类。ACL (Access Control List) 允许为特定用户或特定组设置权限。bash# 安装 acl 支持通常默认支持 getfacl file.txt # 查看 ACL setfacl -m u:username:rw file.txt # 给特定用户读写权限 setfacl -m g:groupname:rx file.txt setfacl -b file.txt # 移除所有扩展 ACL9.4 文件属性chattr在 ext2/ext3/ext4 文件系统上chattr可以设置比权限更底层的属性。i(immutable)不可修改不可删除不可重命名即使是 root。chattr i /etc/passwda(append only)只能追加写入不能删除。常用于日志。查看lsattr file.txt第十部分实战场景与故障排查10.1 场景一磁盘空间已满无法写入使用df -h确认哪个分区满了。使用du -sh /* | sort -rh找到大目录。进入大目录排查大文件bashfind /var/log -type f -size 100M -exec ls -lh {} \;处理日志清空日志 /var/log/large.log不要直接rm若进程仍持有文件句柄空间不会释放需重启服务或lsof | grep deleted杀进程。10.2 场景二删除了文件但空间未释放现象df显示磁盘满du统计总和很小。原因某个进程正在写入该文件虽然目录项已删除但文件句柄未释放。解决bashlsof | grep deleted # 找到被删除但仍占用的文件PID kill -9 PID # 杀掉进程空间释放 # 或者重启对应服务10.3 场景三备份策略结合 tar 与 cronbash#!/bin/bash BACKUP_DIR/backup DATE$(date %Y%m%d) tar -czf $BACKUP_DIR/home_$DATE.tar.gz /home find $BACKUP_DIR -name *.tar.gz -mtime 30 -delete写入crontab -e0 2 * * * /root/backup.sh(每天凌晨2点执行)。10.4 场景四批量重命名使用rename命令Perl 版功能强大。bash# 将所有 .htm 改为 .html rename s/\.htm$/\.html/ *.htm # 文件名大写转小写 rename y/A-Z/a-z/ *10.5 场景五恢复误删文件如果未覆盖立即卸载分区umount或挂载为只读mount -o remount,ro。工具extundelete(ext3/ext4)、testdisk、PhotoRec。注意Linux 下恢复难度大预防胜于治疗备份 版本控制。第十一部分文件系统监控与调优11.1lsof(List Open Files)列出当前系统打开的文件。在 Linux 中几乎一切都是文件因此lsof非常强大。bashlsof /path/to/file # 查看哪个进程在使用该文件卸载时提示设备忙很有用 lsof -i :80 # 查看谁在使用 80 端口 lsof -u username # 查看某个用户打开的文件 lsof -p PID # 查看进程打开的文件描述符11.2strace跟踪进程的系统调用和信号用于诊断文件访问问题。bashstrace -e openat ls # 查看 ls 命令打开了哪些文件第十二部分安全与最佳实践权限最小化原则不要随意使用chmod 777。通常目录755文件644。敏感文件如 SSH 私钥 (~/.ssh/id_rsa) 必须设置为600。路径中的空格处理包含空格的文件名时务必使用引号或转义符\。rm的替代方案使用mkdir ~/.trash并编写脚本trash移动文件到该目录定期清理。绝对路径 vs 相对路径在脚本中尽量使用绝对路径或基于$(dirname $0)动态计算避免路径错误。文件系统选择ext4通用稳定。XFS适合大文件、高性能CentOS 7 默认。Btrfs支持快照、校验和适合容器化环境。结语Linux 文件与目录的管理不仅仅是记忆命令更是理解数据在磁盘上的组织方式、权限模型的哲学以及各种工具组合使用的艺术。掌握上述内容你不仅能够高效地管理个人 Linux 环境也能胜任企业级服务器运维、故障排查和自动化脚本编写工作。持续练习建议在日常终端操作中刻意避免使用图形化文件管理器。尝试编写 Shell 脚本来自动化每日的文件整理、备份任务。深入理解/proc和/sys这两个虚拟文件系统它们是理解 Linux 内核行为的最佳入口。