ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Kali Linux命令手册:从文件操作到渗透测试的实战指南

Kali Linux命令手册:从文件操作到渗透测试的实战指南

简介:《Kali Linux 常用命令大全》是一份面向渗透测试新手、网络安全学习者及运维人员的Linux命令速查文档,聚焦Kali系统中文件操作、系统信息查看、文本处理等高频场景,帮助用户快速掌握命令行操作,减少查找碎片化资料的时间。资源为单个docx文档,压缩包约1.96MB,轻量易用。内容按功能模块组织,涵盖目录与文件管理(ls、cd、cp、mv、touch、mkdir)、帮助命令(whatis、help、man、info)、登录与用户切换(login、last、su/sudo)、电源管理(shutdown、halt、reboot)等常用命令,并对参数含义与典型用法作了说明,同时包括df、free、top等系统资源查看命令及grep、sed、awk等文本处理技巧,适合按需检索和对照练习。目前已有633人学习使用,这套命令笔记可帮助刚接触Kali Linux的Web渗透测试人员、网络安全专业学生以及需要系统梳理Linux基础命令的开发者,在实战前快速建立命令行知识框架,作为桌面常备速查资料。

1. Kali 命令手册为什么值得翻烂:从 Web 渗透到系统维护都绕不开它

接触过几台 Kali 的从业者基本都有同感:真正卡住你的往往不是某个漏洞利用脚本,而是最基础的文件操作、权限切换和帮助文档查找。某次我在一个授权渗透项目里,需要在目标服务器上快速定位一个日志文件并统计特征行,同事盯着屏幕犹豫了十几秒,最后还是一步步 cd 加 ls 去翻目录。键盘熟练度就是效率本身。这份《Kali 常用命令大全》我反复翻过几遍,它把 ls、find、tar、man 这些高频命令的常用参数、边界行为和真实场景全部拆开讲透。对 Web 渗透新手来说,它是进入 Linux 操作系统的第一块踏板;对有经验的工程师来说,它是查漏补缺的参考索引,能帮你在现场少走不少弯路。

很多人觉得命令手册网上随便搜都有,但 Kali 这个发行版的特殊性在于:它预装了大量安全工具,而这些工具全部运行在 Linux 命令体系之上。不懂命令,Metasploit 和 Nmap 玩得再花哨也是空中楼阁。下面我按自己的使用习惯,把这本手册里最有价值的几组命令重新组织一遍,每一步都给出实际场景和参数解析。

2. 文件与目录操作:ls、cd、mkdir 到 rm 的完整闭环

2.1 ls 的常用组合:从默认输出到完整信息

ls 在 Kali 里的出现频率几乎是最高的。刚拿到一台机器或者切换到一个新目录,第一件事就是看看里面有什么。手册里对 ls 参数的整理非常实用:-a 显示隐藏文件、-l 列出详细信息、-t 按时间排序、-R 递归子目录、-h 人性化显示文件大小。尤其值得记住的是ls -l可以直接简写为ll,在 Kali 的默认 shell 配置里这个别名是生效的。

实际工作中我常用的是这三条:

# 查看当前目录下的常规文件与文件夹 ls # 查看完整信息,包括权限、属主、大小、修改时间 ls -lh # 显示全部文件,包含以 "." 开头的隐藏文件 ls -al

第一条用于快速浏览,第二条用于检查文件权限和大小,第三条在排查隐藏后门或者确认目录是否被植入文件时是必备操作。-l输出里的权限位(rwxr-xr-x 那一段)和文件类型是 Web 渗透里经常要判断的东西,比如发现一个.sh文件带着-rwxrwxrwx权限,那就需要警惕了。

2.2 cd 和 pwd:路径切换里的符号链接细节

cd 和 pwd 看起来简单,但手册里埋了一个不常被人注意的参数:cd -P和pwd -P用于绕过符号链接显示物理路径。Kali 里很多工具目录是通过软链接组织的,比如/usr/bin下某些工具实际指向别的目录。如果你在渗透测试中需要确认自己真实所在的物理位置,用pwd -P比直接敲pwd更可靠。

# 返回上一个工作目录 cd - # 显示物理路径,不展开符号链接 pwd -P

cd -在你在两个深层次目录之间反复切换时非常好用,省去重新输入完整路径的时间。很多人不知道这一条,还在用绝对路径来回折腾。

2.3 touch、mkdir 与时间戳的小心思

touch 最常用的功能是创建空文件,比如在测试上传漏洞时经常需要新建一个空白文件来验证路径是否可写。但手册里提到的另一个功能更有意思:更新已存在文件的时间属性。在某些 Web 渗透场景里,你需要让一个文件的时间戳看起来像刚被修改过,从而掩盖操作痕迹,touch 就是那个工具。

# 创建新的空文件 touch test.txt # 将文件时间修改为 2024 年 1 月 15 日 10:30 touch -t 202401151030 test.txt

-t参数后面跟的是[[CC]YY]MMDDhhmm[.SS]格式,注意月份在前、日期在后,这个格式非常容易记反。mkdir 的-p参数则是创建多级目录的标配:

# 递归创建多层目录 mkdir -p /tmp/test/web/logs

没有-p的话,如果/tmp/test/web不存在,命令会直接报错。这条在写自动化脚本时几乎是必带的。

2.4 文件复制、移动与删除:认真对待 rm 的破坏力

cp、mv、rm 三兄弟是文件操作的核心,但也是最容易出事故的地方。cp 的-a参数我一般用来完整复制目录结构并保留所有属性,相当于-dpR的合体。mv 在同目录下操作相当于重命名,这个很多人知道,但-u参数了解的人不多:只有当源文件比目标文件新时才覆盖,这条在编写增量同步脚本时很实用。

rm 是需要重点提醒的。Kali 里很多用户在 root 权限下操作,一条rm -rf /tmp/test/打错路径就可能删掉系统关键目录。手册里给的-i参数可以强制交互确认,-v显示详细过程。我的习惯是:先ls确认目标路径,再用rm -rf执行,并且永远不用rm -rf /这种写法。

# 显示删除过程并逐个确认 rm -riv /tmp/test/

2.5 ln 的软链接与硬链接:选错类型会踩坑

ln 命令在 Kali 里也是高频操作,尤其是软链接。手册里明确提了一句:-s创建软链接时源文件必须写绝对路径。这条非常关键,因为相对路径的软链接在跨目录使用时经常断链,导致工具找不到目标文件。

# 创建软链接,源文件使用绝对路径 ln -s /usr/share/wordlists/rockyou.txt /tmp/rockyou

硬链接和软链接的区别在于:硬链接共享同一个 inode,原文件删除后链接依然有效;软链接相当于一个指针,原文件被删链接就失效。在 Kali 里配置工具链时我几乎只用软链接,因为硬链接不能跨文件系统,而 /tmp 和 /usr/share 经常不在同一个分区上。

3. 查找与内容查看:find、which、cat、head、tail 的组合打法

3.1 find 的表达式组合:按名字、大小、类型精准定位

find 是 Kali 命令里灵活性最高的一个。手册里整理了几个核心参数:-name按文件名、-iname忽略大小写、-size按大小、-type按类型、-perm按权限。这些参数可以任意组合,实际渗透中我基本都把它当作三参数以上的复合查询来用。

# 在全盘查找所有 SUID 权限的文件 find / -type f -perm -4000 2>/dev/null # 查找 /var/www 下最近一天内被修改的 php 文件 find /var/www -name "*.php" -mtime -1 # 查找大于 100MB 的文件,常见于排查日志或备份文件 find / -type f -size +100M 2>/dev/null

第一条命令的-perm -4000是 SUID 权限的标志,这类文件在 Linux 提权测试中极其重要。第二条的-mtime -1表示最近 24 小时内修改过,在应急响应里排查 webshell 时是必备技能。第三条的2>/dev/null把权限不足的报错丢弃,避免刷屏。find 的查找速度比 locate 慢,因为它实时遍历文件系统,但结果更加准确可靠。

3.2 locate 的快与 find 的准:什么时候选哪个

locate 走的不是实时扫描,而是查询系统预建的索引数据库,所以速度极快。但它的缺点是索引可能过期,如果你刚创建的文件在几分钟内查不到,需要先执行updatedb强制重建索引。手册里提到-i忽略大小写、-n限制输出行数,这两条在日常使用中很常见。

# 更新索引数据库 sudo updatedb # 查找文件名包含 nginx 的文件,不区分大小写 locate -i nginx

我的经验是:快速定位系统自带工具或已知文件用 locate,需要精确匹配特定路径或属性的用 find,两者互补而不是替代。

3.3 which 与 PATH:确认命令真实位置的关键

which 命令看似平淡无奇,但它能告诉你当前执行的命令到底来自哪个路径。Kali 里预装工具众多,同名命令冲突并不少见。比如当你敲入python时,到底是/usr/bin/python还是/usr/local/bin/python,用 which 一查便知。

# 查看 python 命令的真实路径 which python

在渗透测试里,这个信息很重要。如果你在一台被入侵的机器上执行命令,而 which 显示某个系统命令路径异常,比如/tmp/下出现了ls的可执行文件,那大概率是被替换了。which 帮助你在第一时间发现这类异常。

3.4 cat、head、tail:日志查看的标准工作流

文件内容查看方面,cat 适合读短文件,head 和 tail 适合查日志首尾。Kali 下日志文件动辄几百 MB,直接用 cat 会刷屏甚至卡死终端,所以查看日志的标准流程是:先 tail 看最新输出,再用 head 看开头确认格式,最后 grep 做关键词筛选。

# 查看日志最后 50 行 tail -n 50 /var/log/apache2/access.log # 查看日志开头 20 行 head -n 20 /var/log/apache2/access.log # 查看日志中所有包含 "error" 的行 grep "error" /var/log/apache2/error.log

-n指定行数在文件较大时非常有用。tail 还有一个进阶用法-f,可以持续跟踪文件变化,在观察实时日志时是标配。你在做 Web 渗透时,开启一个终端跑tail -f监控访问日志,另一终端发请求,可以实时看到自己的 payload 是否命中。

3.5 less 与 more:大文件浏览的分水岭

more 只能向下翻页,less 支持前后双向浏览,这是两者最本质的差别。Kali 下看大文件或者命令输出结果,我基本只用 less。查手册时,man命令调的也是 less 作为分页器,里面的操作习惯是通用的。

# 分页浏览文件,支持前后翻页 less /usr/share/wordlists/rockyou.txt # 打开文件后直接搜索 "password" 关键字 less -p password /usr/share/wordlists/rockyou.txt

less 里/向下搜索、?向上搜索、q退出,这几个按键是必须形成肌肉记忆的。在查看超长文件时,合理使用搜索定位比手动翻页快一个数量级。

4. 帮助系统与用户切换:从 whatis 到 sudo 的权限链条

4.1 whatis、help、man、info:按需求选择帮助层级

Kali 上帮助命令分成四个层级,很多用户只会用 man,但实际上它们各有分工。whatis 用来快速了解命令的作用,一句话描述直接输出;help 只能查 shell 内置命令的帮助,比如 cd、exit 这类;man 是最完整的手册页,覆盖命令、配置文件、系统调用等;info 是 GNU 项目的信息文档,超链接跳转能力强但内容相对偏底层。

# 快速了解 ls 的作用 whatis ls # 查看 shell 内置命令 cd 的帮助 help cd # 打开 ls 的完整手册 man ls # 查看核心utils 的信息文档 info coreutils

whatis 的输出只有一行,适合在记不清命令作用时快速唤起记忆。man 的优先级高于 info,因为 man 覆盖面更广且 Kali 自带。

4.2 中文 man 包的安装:Kali 实测有效

Kali 自带的是英文 man,对英语一般的用户来说阅读成本偏高。手册里给了一个中文 man 的安装方案,我在 Kali 上实测可行,这里放完整流程:

# 第一步:更新软件源 sudo apt update # 第二步:安装中文手册页 sudo apt install manpages-zh # 第三步:配置别名,让 cman 命令使用中文 man echo 'alias cman="man -M/usr/share/man/zh_CN"' >> ~/.zshrc # 第四步:重新加载 shell 配置 source ~/.zshrc

这段脚本的核心逻辑是:通过 apt 安装 manpages-zh 包,把中文手册安装到/usr/share/man/zh_CN目录,然后用 alias 让 cman 命令自动指向该目录读取手册。注意 Kali 默认 shell 是 zsh,所以写入的是~/.zshrc,如果你用的是 bash 就改成~/.bashrc。安装后输入cman ls就能看到中文版的 ls 手册,对新手非常友好。

4.3 su 与 sudo 的核心差异:环境变量是分水岭

su 和 sudo 的差别是 Kali 使用中绕不开的话题。su 切换用户后环境变量仍然是原用户的,这就是为什么很多人切到 root 后执行命令报错——因为 PATH 路径没有跟着切换。sudo 则不同,它只临时赋予指定用户某个命令的执行权限,当前 shell 环境不变。

# 切换到 root 用户,使用登录 Shell su - # 以 root 身份执行单条命令 sudo apt update # 指定其他用户执行命令 sudo -u www-data cat /var/www/html/config.php

-参数很关键,它会重新开启一个登录 Shell 并加载目标用户的完整环境变量,避免切到 root 后出现“命令找不到”的诡异情况。第三条命令在检查 Web 目录时特别有用,可以模拟 Web 服务用户身份读取文件,避免权限误判。

4.4 login、exit、last:登录会话的三件套

login 在命令行模式下用于重新登录或切换用户身份,但日常使用频率不高,因为 su 和 sudo 已经覆盖了绝大多数场景。exit 用来退出当前 Shell,如果你在 su 切换后的环境里,需要多敲几次 exit 才能完全退出到初始登录状态。last 命令在安全排查中非常有价值,它记录所有登录记录和来源 IP。

# 显示最近 10 条登录记录 last -n 10 # 显示登录来源 IP 但不显示主机名 last -a

在应急响应场景里,用 last 检查是否有异常 IP 登录过系统是标准动作之一。配合-d参数还能把 IP 反查为主机名,不过内网环境下这个功能基本失效。

5. 压缩打包与电源管理:tar、gzip 与 shutdown 的避坑实录

5.1 tar 与 gzip:先打包再压缩才是正确顺序

很多新手在 Kali 里直接敲gzip压缩文件夹,结果发现 gzip 只能压缩单个文件,无法处理目录。正确的做法是先 tar 打包,再用 gzip 压缩,或者用 tar 的-z参数一步完成。

# 打包并压缩整个目录 tar -czvf web_backup.tar.gz /var/www/html/ # 解压并拆包 tar -xzvf web_backup.tar.gz -C /tmp/

参数拆解:-c建立新打包文件,-z调用 gzip 算法压缩,-v显示过程,-f指定文件名。解压时-x替代-c,-C指定解压目标目录。这条命令在备份站点目录、迁移工具集时是标配。注意-f后面一定要紧跟文件名,放在最后是 tar 的老规矩。

5.2 gzip 与 gunzip 的单文件压缩

gzip 单独使用场景较少,但在压缩单个文件时依然高效。压缩后原文件消失,生成以.gz结尾的新文件,如果用-k参数可以保留原文件。

# 压缩单文件,保留原文件 gzip -k access.log # 查看压缩文件内容,不解压 gzip -l access.log.gz # 解压 gunzip access.log.gz

gzip -l显示压缩比和原始大小,在决定是否清理日志文件时可以作为判断依据。-r参数可以递归压缩目录下的所有文件,但不会打包目录结构,所以应用场景有限。

5.3 shutdown 与 halt 的区别:安全关机不是直接断电

Linux 后台运行大量进程,强制断电可能导致数据丢失或文件系统损坏。shutdown 会先通知所有登录用户,冻结新的登录请求,然后逐步关闭服务,最终停机。halt 则不会逐项关闭服务,直接执行硬件关机操作。reboot 和 halt 参数类似,执行重启。

# 5 分钟后关机,并广播消息给所有用户 shutdown -h +5 "System will shut down after 5 minutes" # 立即重启 shutdown -r now # 取消已经排定的关机计划 shutdown -c

+5是延迟 5 分钟,now是立即执行。在生产环境或测试环境里,我习惯用shutdown -h +5而不是拔电源,给其他终端会话留出保存时间。-k参数特别值得注意:它只发送警告消息但不会真的关机,适合测试广播通知流程。

5.4 避坑实录:三条最常踩的坑

坑一:gzip 直接压文件夹报错

现象:gzip /etc/passwd/提示 Is a directory。原因:gzip 本质上只能压缩单个文件流,不支持目录打包操作。解决:先tar -cf打包目录,再 gzip,或者直接使用tar -czf一步到位。

坑二:rm -rf 删错路径

现象:本想删除/tmp/test,结果写成了/tmp/test /,系统文件被连带删除。原因:rm 支持多参数,空格后面的路径会被当成独立目标。解决:删除前先ls确认路径,使用rm -i开启交互确认,删除操作不用通配符配合绝对路径书写。

坑三:su 切到 root 后命令找不到

现象:su切换后执行ifconfig提示 command not found。原因:没有加-参数,当前 Shell 的环境变量仍是原用户的 PATH,缺失/sbin路径。解决:使用su -重新开启登录 Shell,或者直接用sudo执行命令。

6. 命令速查的落地验证:把手册内容变成肌肉记忆

翻阅手册是一回事,真正提升效率是另一回事。我拿到新环境后的第一件事是验证基础命令是否可用,然后按自己的使用习惯建一组别名,让复杂的组合命令变成单个单词。

# 定义常用别名,写入 shell 配置文件 echo 'alias ll="ls -lh"' >> ~/.zshrc echo 'alias la="ls -A"' >> ~/.zshrc echo 'alias grep="grep --color=auto"' >> ~/.zshrc echo 'alias cman="man -M/usr/share/man/zh_CN"' >> ~/.zshrc source ~/.zshrc

第二个验证动作是确认 man 手册路径是否完整。执行man ls如果能正常打开,说明基本手册没问题;执行cman ls能打开中文版,说明 manpages-zh 安装成功。第三个验证是测试 find 的核心表达式是否按预期工作:

# 验证 find 按类型和大小组合查找 find /etc -type f -size -10k | head -20

这条正确执行说明 find 的参数解析正常。最后用 tar 做一次备份与恢复的完整循环,确认压缩、解压、权限保留都没问题:

# 备份指定目录 tar -czvf /tmp/config_backup.tar.gz /etc/nginx/ # 恢复到指定位置 tar -xzvf /tmp/config_backup.tar.gz -C /tmp/restore/

这一连串操作走完,说明手册里的核心命令在这台 Kali 上是可用的,后面的渗透工作才有底气。从那以后,我每换一台新的 Kali 环境,都会先花十分钟把这几组命令过一遍,确认别名、帮助文档、find 表达式、tar 备份链路全部正常,再开始正式工作。这个习惯帮我避免过好几次“关键时刻命令不好使”的尴尬,希望也能帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进