文件与目录管理¶
概述¶
文件和目录管理是 Linux 最日常的操作,也是安全测试中进行信息收集和权限分析的核心技能。本文系统介绍了 Linux 文件系统的操作命令,包括文件复制、查找、移动、删除,以及挂载和链接等高级操作。
命令格式规范¶
Linux命令遵循统一的格式:
示例:
-rm:命令(remove)
- -rf:选项(递归r + 强制f)
- /*:参数(根目录下的所有内容)
安全提示:
rm -rf /*是经典的"删库跑路"命令,会强制递归删除系统根目录下的所有文件,切勿执行!
命令书写规范¶
| 规范 | 说明 |
|---|---|
| 命令 | 必须是系统存在的命令或程序 |
| 空格 | 命令、选项、参数之间必须用空格分隔 |
| 大小写 | Linux命令严格区分大小写,Ls 和 ls 是不同的 |
| 顺序 | 多数情况下选项和参数的顺序不影响执行,但有例外 |
命令选项详细参考资料: - https://wangchujiang.com/linux-command - https://www.linuxcool.com
文件与目录管理命令¶
ls - 列出目录内容和属性¶
全称:list
格式:ls [选项] [文件名/目录名]
常用示例:
ls # 列出当前目录内容
ls -a # 列出所有文件,包括隐藏文件(以.开头的文件)
ls -l # 以长格式列出(详细信息)
ls -la # 组合使用:长格式+显示隐藏文件
ll # 在CentOS中,ll是ls -l的别名
ll --block-size=M # 以MB为单位显示文件大小
专业解读:
ls -l输出的第一列如-rw-r--r--表示文件类型和权限,第三、四列是属主和属组,第五列是文件大小,第六列是修改时间。
pwd - 打印工作路径¶
全称:print working directory
格式:pwd
专业解读:在Shell脚本中常用
$(pwd)获取当前路径,用于构建绝对路径。
cd - 切换工作目录¶
全称:change directory
格式:cd [相对路径或绝对路径]
路径符号:
| 符号 | 指代 |
|---|---|
/ |
根目录 |
. |
当前目录 |
~ |
用户主目录(home directory) |
../ |
上一级目录 |
../../ |
上上级目录,以此类推 |
file - 查看文件类型¶
格式:file [选项] 文件或目录
专业解读:Linux不通过后缀名判断文件类型,而是通过文件头(magic number)。
file命令读取文件头部信息来判断真实类型。
cp - 复制文件或目录¶
全称:copy
格式:cp [选项] 源文件 目标文件
常用选项:
| 选项 | 说明 |
|---|---|
-R / -r |
递归处理,将指定目录下的所有文件与子目录一并处理 |
-f |
强行复制,不论目标文件或目录是否已存在,直接覆盖 |
-i |
覆盖前询问确认(interactive) |
-p |
保留原文件的属性(修改时间、权限等) |
-v |
显示复制过程(verbose) |
find - 查找文件或目录¶
格式:find [目录] [选项] [名字或模式]
常用选项:
| 选项 | 说明 | 示例 |
|---|---|---|
-name |
按名字查找(区分大小写) | find /etc -name "a*" |
-iname |
按名字查找(不区分大小写) | find / -iname "AAA" |
-type |
按类型查找 | f普通文件,d目录,l链接 |
-size |
按大小查找 | find /root -type f -size +10M |
-exec |
对找到的文件执行命令 | find . -name "*.txt" -exec rm -rf {} \; |
find /etc -name "a*" # 在/etc下查找以a开头的文件
find / -name "aaa" 2>/dev/null # 在整盘查找,丢弃错误信息
find /root -type f # 查找/root下的所有普通文件
find /root -type f -size +10M # 查找大于10M的文件
find . -name "*.txt" -exec rm -rf {} \; # 找到所有txt并删除
专业解读: -
{}代表find找到的每个文件 -\;表示-exec命令结束(注意反斜杠转义分号) -2>/dev/null非常重要,因为普通用户查找某些系统目录会报权限错误,此写法可屏蔽
其他查找命令:
| 命令 | 作用 | 特点 |
|---|---|---|
whereis |
查找二进制程序、源代码、man手册 | 速度快,只查标准路径 |
which |
查找并显示给定命令的绝对路径 | 从PATH环境变量中查找 |
locate |
从数据库中查找文件 | 速度极快,但数据库每天更新一次(updatedb),新文件可能找不到 |
mkdir - 创建目录¶
全称:make directory
格式:mkdir [选项] 目录名
专业解读:
-p选项非常常用,当父目录不存在时自动创建,不会因为目录已存在而报错。
mv - 移动或重命名¶
全称:move
格式:mv [选项] 原文件 新文件
专业解读:mv在同一个文件系统内操作非常快,因为只是修改inode的指向,不需要实际复制数据。跨文件系统则实际是复制+删除。
rm - 删除文件或目录¶
全称:remove
格式:rm [选项] (多个)文件名
| 选项 | 说明 |
|---|---|
-r |
递归删除(目录必须加此选项) |
-f |
强制删除,不提示确认 |
-i |
删除前询问确认 |
rm file.txt # 删除文件
rm -r dir/ # 删除目录及内容
rm -rf dir/ # 强制递归删除(慎用!)
find . -name "a.json" -exec rm -rf {} \; # 配合find批量删除
删除空目录:
专业解读:
rm删除的文件不会进入回收站,恢复非常困难。删除前建议用ls先确认目标,尤其是使用通配符时。
touch - 创建空文件或修改时间戳¶
格式:touch [选项] 文件名
挂载和链接¶
mount - 挂载文件系统¶
问题:一个目录树怎么使用多个磁盘?
答案:通过挂载(mount),将额外的存储设备连接到文件系统的某个目录下。
挂载后:访问 /sdb-u 目录,实际就是访问 /dev/sdb1 磁盘的内容。
专业解读: -
/etc/fstab文件配置了开机自动挂载的设备和参数 - 卸载用umount /sdb-u(注意不是unmount) - 如果设备正被占用,卸载会失败,可用lsof /sdb-u查看占用进程
ln - 链接文件¶
全称:link
Linux支持两种链接:
硬链接 (Hard Link)¶
特点: - 硬链接和原文件指向同一个inode(索引节点),共享相同的数据块 - 修改其中一个,另一个也会变化 - 删除原文件,硬链接仍然可以访问数据(因为inode的引用计数不为0)
限制: 1. 不能给目录创建硬链接(防止目录环路) 2. 只有在相同的文件系统内才能创建硬链接(不同分区inode不互通)
专业解读:硬链接本质上是给文件起别名,inode中的链接数(link count)会相应增加。只有当链接数降为0时,系统才会真正释放磁盘空间。
软链接 (Symbolic Link / Soft Link)¶
类似Windows的快捷方式。
# 创建软链接
ln -s /usr/local/phpstudy/system/phpstudyctl /usr/bin/study
# 使用
study # 直接运行软链接,实际执行的是原文件
# 查看软链接
ll /usr/bin/nc # 显示箭头指向的目标
特点: - 软链接是一个独立的文件,有自己的inode,文件内容是指向目标文件的路径 - 可以跨文件系统创建 - 可以给目录创建软链接 - 源文件删除,软链接失效(变成"死链接",显示红色)
硬链接 vs 软链接对比:
| 特性 | 硬链接 | 软链接 |
|---|---|---|
| inode | 与原文件相同 | 独立inode |
| 跨文件系统 | ❌ 不支持 | ✅ 支持 |
| 链接目录 | ❌ 不支持 | ✅ 支持 |
| 原文件删除 | ✅ 仍可访问 | ❌ 失效(死链接) |
| 文件大小 | 与原文件相同 | 很小(只存路径) |
安全测试视角:敏感文件查找 在 Linux 渗透测试中,快速定位敏感文件是信息收集的关键:
# 查找包含密码关键词的文件 grep -r -i "password\|passwd\|pwd" /etc/ /var/www/ 2>/dev/null # 查找 SUID/SGID 文件(权限提升的关键) find / -perm -4000 -type f 2>/dev/null find / -perm -2000 -type f 2>/dev/null # 查找可写的配置文件 find /etc -writable -type f 2>/dev/null # 查找历史命令文件(可能包含密码) find /home -name ".bash_history" -readable 2>/dev/null安全测试视角:硬链接与数据恢复 在安全取证中,硬链接的特性可用于数据恢复: - 即使原始文件被删除,只要存在硬链接,数据仍然可访问 -
lsof +L1可以查找已删除但仍被进程占用的文件,攻击者可能利用这种方式隐藏恶意文件 - 在入侵取证中,检查 inode 引用计数可以帮助发现隐藏的数据安全测试视角:路径遍历漏洞
../路径穿越是 Web 安全中最常见的漏洞之一。攻击者利用此技术访问服务器上的任意文件:防御方法:严格校验用户输入的路径,使用http://example.com/download?file=../../../etc/passwd http://example.com/view?path=../../../etc/shadowrealpath或getcwd规范化路径,限制访问范围。