1. 项目概述:为什么是这20个命令?

如果你刚接触Kali Linux,面对那个黑底绿字的终端,可能会有点懵。网上命令教程千千万,但真正在渗透测试、安全审计的日常工作中,高频使用、能解决实际问题的核心命令,其实就那么一批。我整理这20个命令,不是简单的罗列,而是基于多年一线实战,筛选出的“生存必备”技能包。它们覆盖了从系统信息侦察、网络探测、文件操作到权限维持的完整链条。掌握它们,你就能像熟悉自己家一样,在Kali里快速定位、分析、行动,而不是在浩如烟海的命令中迷失方向。无论你是想入门安全领域的学生,还是需要快速上手Kali进行某项测试的工程师,这篇“保姆级”指南都会手把手带你理解每个命令背后的意图、经典使用场景以及那些容易踩坑的细节。

2. 核心命令深度解析与实战场景

2.1 系统侦察与信息收集类命令

在安全测试中,知己知彼是第一步。你需要快速了解自己所处的环境(攻击机)和目标系统的概况。

uname -a 这个命令是查看系统内核信息的瑞士军刀。 -a 参数表示显示所有信息。执行后,你会看到内核名称(如Linux)、主机名、内核发行版本、内核版本、机器硬件名称和处理器类型。为什么它重要?在后续安装特定内核模块或利用某些漏洞时,内核版本是决定成败的关键信息。例如,寻找提权漏洞时,第一步就是 uname -a 来确认目标系统内核版本,然后去搜索对应的 exploit。

whoami 与 id 这两个命令常被新手混淆。 whoami 极其简单,只返回当前登录用户的用户名。而 id 命令则提供了丰富的身份信息全景图。直接输入 id ,它会显示用户ID(UID)、所属主要组ID(GID)以及该用户所属的所有附加组。在权限提升过程中, id 命令至关重要。你需要检查当前用户是否在某些特权组中,例如 sudo 组(允许执行sudo命令)、 docker 组(可能直接获取root权限)或 adm 组(拥有读取日志文件的权限)。 id 命令的输出是你进行横向移动或垂直提权决策的基础。

dpkg -l | grep [软件包名] Kali 基于 Debian,使用 dpkg 包管理器。这个命令组合用于精确查询某个软件包是否已安装及其版本。 dpkg -l 会列出所有已安装的包,但输出冗长。通过管道 | 将结果传递给 grep 进行过滤,可以快速定位。例如, dpkg -l | grep metasploit 。知道某个工具的精确版本,有助于判断其是否存在已知漏洞,或者是否需要更新到最新版以获取新功能。

注意:在脚本中或需要精确判断时,更推荐使用 dpkg -s [软件包名] 来查询特定包的详细状态信息,如果包未安装,该命令会明确提示。

ifconfig / ip addr 网络配置信息是行动的起点。传统的 ifconfig 命令仍然可用且直观,它会显示所有网络接口的IP地址、MAC地址、收发数据包统计等。而 ip addr (或 ip a )是更现代、功能更强大的替代品,来自 iproute2 工具集。它不仅显示信息,其语法还支持更复杂的网络操作。在实际中,我习惯用 ip addr ,因为它输出的信息格式更统一,并且是未来趋势。你需要关注的是 eth0 (有线)、 wlan0 (无线)这类接口是否获得了IP地址(inet字段),以及MAC地址(link/ether字段),这对于后续的网络扫描和伪装至关重要。

2.2 网络探测与诊断类命令

信息收集之后,便是对网络环境的主动探测。这类命令帮助你发现目标、分析网络结构和服务状态。

ping 最古老也最经典的连通性测试工具。它的原理是发送ICMP回显请求包到目标主机,并等待ICMP回显应答。基本用法 ping [目标IP或域名] 。在安全测试初期,它用于快速判断目标主机是否在线(是否禁用了ICMP回应则是另一回事)。高级用法包括:

  • -c [次数] :指定发送包的数量,如 ping -c 4 192.168.1.1 ,发送4个包后自动停止。
  • -i [间隔] :设置发送包之间的时间间隔(秒),降低发送频率。
  • -s [包大小] :指定发送数据包的大小(字节),可用于简单的MTU路径探测或制造轻微网络压力。

netstat / ss 这两个命令用于查看本机的网络连接、路由表、接口统计等信息。 netstat 是旧爱, ss (Socket Statistics)是新欢,它更快、更高效,并且显示了更多的TCP状态信息。

  • 查看所有监听端口 : sudo netstat -tunlp 或 sudo ss -tunlp 。参数解释: -t (TCP), -u (UDP), -n (以数字形式显示地址和端口), -l (仅显示监听套接字), -p (显示进程标识符和程序名称)。这个命令能让你知道系统上哪些服务正对外开放,以及它们对应的进程,是发现可疑后门或配置错误的第一现场。
  • 查看所有已建立的连接 : ss -t state established 。这对于排查恶意软件外连或分析正常应用流量非常有用。

traceroute / mtr 当网络不通或想了解数据包到达目标的路径时,这两个命令就派上用场了。 traceroute 通过发送TTL(生存时间)递增的UDP包或ICMP包,监听路径上每个路由器的回应,从而勾勒出网络路径。用法: traceroute [目标] 。 mtr 是 traceroute 和 ping 的结合体,它实时地、持续地测试到目标的路径,并显示每个跃点的丢包率和延迟,信息更动态、更全面。在评估网络质量或诊断网络问题时, mtr 是更强大的工具。

telnet [IP] [端口] 虽然 telnet 协议本身不安全(明文传输),但作为一款简单的TCP连接测试工具,它无可替代。它的命令格式 telnet [IP地址] [端口] 用于快速手动检查某个远程主机的特定TCP端口是否开放,以及该端口运行的是什么服务(服务通常会返回一个Banner信息)。例如, telnet 192.168.1.100 80 ,然后输入 GET / HTTP/1.0 并两次回车,你可能会看到HTTP服务器的响应头。这比单纯用扫描器更快,也更交互式。当然,对于加密或复杂协议,更推荐 nc (Netcat)或专用客户端。

2.3 文件与目录操作类命令

在Kali中,你大量时间都在与文件打交道,无论是工具脚本、配置文件还是收集的数据。

find 文件搜索的终极武器,功能极其强大但语法也相对复杂。它的基本结构是 find [路径] [表达式] 。

  • 按名称查找 : find / -name "*.txt" 2>/dev/null 。这里 / 表示从根目录开始搜索, -name 指定文件名模式, 2>/dev/null 是将所有错误信息(如权限不足)重定向到空设备,让输出更干净。
  • 按权限查找 : find / -perm -4000 2>/dev/null 。查找具有SUID权限的文件,这是常见的提权切入点。 -perm -4000 表示文件权限位中设置了SUID位。
  • 按大小查找 : find / -size +10M 。查找大于10MB的文件。
  • 按时间查找 : find / -mtime -7 。查找过去7天内修改过的文件。
  • 查找后执行操作 : find /home -name "*.log" -exec rm {} \; 。找到 /home 目录下所有 .log 文件并删除。 -exec 参数非常强大,但需谨慎使用。

grep 文本搜索过滤的核心工具,常与管道 | 联用。它使用正则表达式进行模式匹配。

  • 基本搜索 : grep "password" file.txt 在文件中搜索包含“password”的行。
  • 递归搜索 : grep -r "192.168.1" /etc/ 。在 /etc 目录及其所有子目录中递归搜索包含该IP地址字符串的文件。
  • 显示行号 : grep -n "error" logfile 。显示匹配行及其行号。
  • 反向匹配 : grep -v "#" config.conf 。显示所有不包含 # 号(注释)的行。
  • 结合正则 : grep -E "^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$" file.txt 。使用扩展正则表达式匹配IP地址格式的行。

cat , more , less , head , tail 这是一组用于查看文件内容的命令,各有侧重。

  • cat :将整个文件内容一次性输出到终端。适合查看小文件。 cat file1 file2 > combined_file 还可用于合并文件。
  • more :分页查看文件,只能向下翻页。
  • less : more 的增强版,可以上下翻页、搜索(按 / 然后输入关键词)、跳转行首( g )行尾( G )。查看日志或长文档的首选。
  • head :查看文件开头部分,默认10行。 head -n 20 file.log 查看前20行。
  • tail :查看文件末尾部分,默认10行。 tail -f file.log ( -f 参数)是神器,可以实时追踪文件新增的内容,常用于监控日志文件。

chmod , chown 管理文件权限和所有权的关键命令。

  • chmod :修改文件权限。权限可以用数字(八进制)或符号表示。
    • 数字表示 : chmod 755 script.sh 。755表示:所有者(7=读+写+执行),所属组(5=读+执行),其他人(5=读+执行)。这是可执行脚本的常见权限。
    • 符号表示 : chmod u+x script.sh 。给文件所有者(u)增加执行(x)权限。 chmod go-w file.conf 。移除所属组(g)和其他人(o)的写(w)权限。
  • chown :改变文件所有者和所属组。 sudo chown user:group file.txt 。通常需要 sudo 权限。在部署Web应用时,经常需要将网站目录的所有者改为Web服务器用户(如 www-data )。

2.4 进程管理与系统控制类命令

了解和控制系统中运行的程序,是维持操作稳定性和进行深入分析的基础。

ps 报告当前进程状态的快照。最常用的组合是 ps aux 。

  • a :显示所有用户的进程。
  • u :以用户为主的格式显示。
  • x :显示没有控制终端的进程(通常是后台服务)。 ps aux 的输出列包括:USER(所有者), PID(进程ID), %CPU(CPU占用), %MEM(内存占用), VSZ/RSS(虚拟/常驻内存大小), TTY(终端), STAT(进程状态,如S睡眠、R运行、Z僵尸), START(启动时间), TIME(累计CPU时间), COMMAND(命令及参数)。通过 grep 过滤,可以快速找到目标进程: ps aux | grep sshd 。

top / htop 动态、实时地查看系统进程状态和资源使用情况。

  • top :经典工具。启动后,头部显示系统概要(负载、任务数、CPU使用率、内存使用率),下部是进程列表。在 top 界面中,可以按 P (按CPU排序)、 M (按内存排序)、 k (杀死进程,需输入PID)、 q (退出)。
  • htop : top 的现代化、增强版。它提供了彩色界面、鼠标支持、垂直和水平滚动、更直观的进程树视图,以及更便捷的进程操作(如杀进程、调整优先级)。如果系统没有预装,可以通过 sudo apt install htop 安装。在需要持续监控系统资源消耗时, htop 是更佳选择。

kill 与 pkill 用于向进程发送信号,最常用的信号是终止进程。

  • kill :通过进程ID(PID)来操作。 kill [PID] 发送默认的 TERM(15)信号,请求进程正常终止。如果进程不响应,可以使用 kill -9 [PID] 发送 KILL(9)信号,强制立即终止进程。 -9 信号不可被进程捕获或忽略,是“必杀技”,但可能导致数据丢失或状态不一致,应谨慎使用。
  • pkill :通过进程名来操作。 pkill firefox 会终止所有名为“firefox”的进程。它比先 ps aux | grep firefox 再 kill 更方便,但也更危险,可能误杀同名进程。可以使用 pkill -f [模式] 来匹配完整的命令行。

systemctl 现代Linux系统(使用Systemd)中管理服务(守护进程)的核心命令。Kali Linux 也使用 Systemd。

  • 启动/停止/重启服务 : sudo systemctl start [服务名] , sudo systemctl stop [服务名] , sudo systemctl restart [服务名] 。例如管理SSH服务: sudo systemctl restart ssh 。
  • 查看服务状态 : sudo systemctl status [服务名] 。这个命令输出非常详细,包括服务是否活跃、运行了多久、最近的日志片段等,是排查服务问题的第一入口。
  • 设置开机自启/禁用 : sudo systemctl enable [服务名] , sudo systemctl disable [服务名] 。
  • 查看所有服务 : systemctl list-unit-files --type=service 。

2.5 归档、压缩与下载类命令

在渗透测试中,经常需要打包数据、传输工具或下载资源。

tar 经典的归档工具,常与压缩工具联用。它的参数顺序有时让人困惑,一个助记口诀是“ c reate, x tract, f ile, z ip”。

  • 创建归档(不压缩) : tar -cvf archive.tar /path/to/folder/ 。 -c 创建, -v 显示过程, -f 指定文件名。
  • 创建并压缩(gzip) : tar -czvf archive.tar.gz /path/to/folder/ 。 -z 表示使用gzip压缩。
  • 创建并压缩(bzip2) : tar -cjvf archive.tar.bz2 /path/to/folder/ 。 -j 表示使用bzip2压缩,压缩率通常更高。
  • 解压 .tar.gz 文件 : tar -xzvf archive.tar.gz 。 -x 解压。
  • 解压到指定目录 : tar -xzvf archive.tar.gz -C /target/directory/ 。 -C 参数指定目标目录。

wget 与 curl 两者都是强大的命令行下载工具,但设计哲学不同。

  • wget :更专注于“下载”。它是非交互式的,支持递归下载(整个网站)、断点续传、后台下载。用法简单直接: wget [URL] 。对于从互联网下载工具、脚本或漏洞利用代码, wget 是首选。
    • 递归下载: wget -r -l 2 http://example.com 。 -r 递归, -l 指定递归深度。
    • 后台下载: wget -b [URL] 。
  • curl :更专注于“传输”。它支持海量的协议(HTTP, HTTPS, FTP, SCP, SFTP等),并且更擅长与API交互、测试Web端点、发送自定义请求。它默认将下载内容输出到标准输出(屏幕)。
    • 下载文件: curl -O [URL] 。 -O 选项表示使用远程文件的名称保存。
    • 发送POST请求: curl -X POST -d "param1=value1¶m2=value2" http://example.com/api 。
    • 测试HTTP状态: curl -I http://example.com 。 -I 只获取HTTP头部信息。
    • 在脚本中, curl 因其灵活性和丰富的输出处理选项(如 -s 静默模式, -o 输出到文件, -w 自定义输出格式)而更受青睐。

3. 高级组合技与自动化脚本思路

单个命令是武器,组合起来才能形成战术。这里分享几个我常用的命令组合模式,它们能极大提升效率。

1. 管道( | )与重定向( > , >> )的魔法 这是Linux命令行的精髓。管道将一个命令的输出作为另一个命令的输入。

  • 统计当前目录下文件数量 : ls -l | wc -l 。 wc -l 统计行数。
  • 查找包含特定内容的文件,并高亮显示关键词 : grep -r "secret_key" /etc/ --color=auto | less -R 。 less -R 会正确显示 grep 的颜色高亮。
  • 将命令输出保存到文件 : ps aux > process_list.txt (覆盖), date >> logfile.txt (追加)。
  • 将错误信息和正常输出分别处理 : some_command 2> errors.log 1> output.log 。 2> 重定向标准错误, 1> 重定向标准输出。

2. 后台运行与作业控制 让长时间运行的任务在后台执行,不阻塞当前终端。

  • 在命令末尾加 & : ./long_running_script.sh & 。脚本会在后台启动,并返回一个作业号(如 [1] 12345 ),其中12345是PID。
  • 使用 nohup 防止任务因退出终端而终止 : nohup ./script.sh > script.log 2>&1 & 。这个组合拳非常经典: nohup 忽略挂断信号, > 将标准输出重定向到 script.log , 2>&1 将标准错误也合并到标准输出(即同一个日志文件),最后的 & 放到后台运行。这样即使你关闭SSH连接,脚本也会继续执行。
  • 管理后台作业 :
    • jobs :查看当前终端后台的作业列表。
    • fg %1 :将1号作业调到前台运行。
    • bg %1 :将暂停的1号作业在后台继续运行。
    • kill %1 :终止1号作业。

3. 利用 alias 创建快捷命令 将复杂的常用命令序列简化为一个短命令。 编辑 ~/.bashrc 文件(针对当前用户)或 /etc/bash.bashrc (全局),在末尾添加:

alias ll='ls -alF'
alias update='sudo apt update && sudo apt upgrade -y'
alias myip='curl -s ifconfig.me'
alias ports='sudo netstat -tunlp'

保存后,执行 source ~/.bashrc 使别名立即生效。之后,输入 ll 就等于输入 ls -alF , 输入 update 就会执行更新系统。

4. 常见问题与排错实录

即使掌握了命令,在实际操作中也会遇到各种“坑”。这里记录了几个高频问题及其解决方法。

问题1:执行命令提示“Command not found”

  • 原因 :该命令对应的软件包没有安装,或命令不在 $PATH 环境变量指定的目录中。
  • 排查 :
    1. 首先确认命令是否拼写错误。
    2. 使用 which [命令名] 或 type [命令名] 查看命令的位置。如果没输出,说明未安装。
    3. 对于Kali/Debian系,使用 apt search [关键词] 搜索可能包含该命令的软件包,然后用 sudo apt install [包名] 安装。例如, ss 命令在 iproute2 包中, htop 需要单独安装。

问题2:操作文件时提示“Permission denied”

  • 原因 :当前用户对目标文件或目录没有足够的权限(读、写、执行)。
  • 解决思路 :
    1. 检查权限 :使用 ls -l file 查看文件权限和所有者。
    2. 提升权限 :如果该操作需要root权限,在命令前加 sudo 。但需谨慎,确保你理解该命令的作用。
    3. 更改文件所有者/权限 :如果你是该文件的所有者,可以用 chmod 增加权限。如果不是,可能需要 sudo 来执行 chown 或 chmod 。
    4. 使用正确的用户 :有些操作(如修改某些系统服务配置)需要切换到特定用户,如 sudo -u www-data cat /var/log/apache2/error.log 。

问题3: apt update 或 apt install 失败,提示“无法定位软件包”或“GPG错误”

  • 原因 :软件源列表配置错误、网络问题或软件源密钥过期。
  • 解决步骤 :
    1. 检查网络 : ping 8.8.8.8 测试外网连通性。
    2. 检查源列表 : cat /etc/apt/sources.list 查看主源配置。Kali Rolling 用户应使用官方源或可靠的国内镜像源。
    3. 更新软件源缓存 :有时只是缓存问题, sudo apt update 本身出错信息会给出线索。常见的GPG密钥错误,可以尝试 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [缺失的密钥ID] 来导入密钥,密钥ID在错误信息中会显示。
    4. 更换镜像源 :如果官方源速度慢,可以更换为国内镜像源(如阿里云、中科大镜像)。但需注意,渗透测试工具更新极快,镜像源可能有延迟。

问题4: systemctl status 显示服务“failed”或“inactive”

  • 排查方法 :
    1. 查看详细日志 : sudo journalctl -u [服务名] -xe 。 journalctl 是Systemd的日志工具, -u 指定单元(服务), -x 提供更多解释信息, -e 跳转到日志末尾。这是最有效的排错手段,通常会直接打印出错误原因(如配置文件语法错误、端口被占用、依赖服务未启动)。
    2. 检查配置文件 :服务配置文件通常位于 /etc/systemd/system/ 或 /lib/systemd/system/ 。使用 systemctl cat [服务名] 可以查看当前加载的完整配置。
    3. 测试配置文件语法 :对于像Apache、Nginx等服务,它们有自己的配置测试命令,如 sudo nginx -t 。

问题5:使用 rm 、 chmod 等命令误操作

  • 预防重于治疗 :
    1. 使用 -i (交互式)参数 : rm -i file 会在删除前询问。可以设置别名 alias rm='rm -i' ,但注意这可能会影响某些脚本。
    2. 使用 trash-cli :安装 trash-cli 工具,使用 trash-put file 将文件移到“回收站”(通常是 ~/.local/share/Trash ),而不是永久删除。
    3. 对 chmod 和 chown 操作保持敬畏 :在递归修改( -R )整个系统目录(如 / , /usr )的权限前,务必再三确认路径。一个错误的 sudo chmod -R 777 / 足以让系统崩溃。最佳实践是,先在目标目录下的一个测试子目录中操作,确认无误后再应用到整个目录。
    4. 备份!备份!备份! :在对重要配置文件进行修改前,先复制一份: sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak 。
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐