Kali Linux 对刚入门安全方向的朋友来说,往往是从一个看着就高深莫测的终端开始的。很多人把最新版Kali装进虚拟机,打开终端却不知道第一行命令该敲什么。我见过太多人一上来就急着学各种大型工具,结果连最基本的文件导航和权限都搞不定,后面全是坑。这篇文章我就挑出20个日常在Kali上使用频率最高的核心命令,从文件操作、内容检索、权限控制,到网络诊断、远程连接、系统监控和包管理,挨个过一遍。每个命令我都会说清楚它解决什么问题、怎么用、有哪些容易踩的坑,以及我在实验环境里总结的实操习惯。无论你是第一次装好Kali,还是已经用了一阵子想补基础,都能在这里找到可以直接照抄的用法。
1. 内容整体设计与命令选型思路
1.1 不是越全越好:20个命令的筛选逻辑
Linux命令有几百个,但日常干活真正高频使用的其实不多。对我来说,80%的操作就集中在20个命令上,这二十个更像是“操作系统的手脚”。Kali虽然内置六百多个安全工具,但每个工具的启动和调试,都逃不开Shell基础:目录要定位、文件要复制、权限要调整、进程要看、网络要测。你把这些基础命令吃透,再去看那些大工具,会发现底层思路全都通。
另外需要说明,像metasploit、burpsuite这类属于“工具箱”,有自己独立的交互界面,不是这次要聊的命令。这次只聊Shell里直接敲的那些基础命令。选择标准就三句话:高频、通用、能解决实际问题。这20个命令覆盖了文件操作、文本处理、权限修改、压缩解压、网络诊断、远程连接、进程管理和软件包管理,基本覆盖了你日常操作一台Linux机器的所有需求。
1.2 准备你的Kali环境:终端、Shell与帮助命令的妙用
新版Kali默认登录用户是普通用户kali,需要用管理员权限时敲sudo加命令。我建议日常就用普通用户,需要装软件、看系统日志、管理服务时才用sudo,这样即使误操作,也不会因为root最高权限把整个系统搞垮。终端打开之后,第一件事要养成两个习惯:Tab键自动补全,以及用man命令查帮助。
man ls # 查看ls的完整手册 ls --help # 查看简洁帮助信息很多新手卡住,就是不知道某个参数什么意思,其实man手册全都有。另外Shell里有几个隐藏技能,比如按上下方向键翻历史命令,输入history查看所有历史记录。先用好这些基础能力,后面的命令才顺利。一个小技巧:不小心敲错一条很长的命令,不要慌,按Ctrl+A跳到行首,Ctrl+E跳到行尾,改一下回车就行。
2. 文件操作与内容检索:5个命令走遍目录
2.1 pwd:每一步都要知道自己在哪
pwd是print working directory的缩写,就是打印当前所在目录。听着太简单,但实际用的时候你才知道它有多重要。尤其Kali里多个终端窗口来回切换,很容易忘记自己到底在哪个路径,结果把文件复制错了地方,甚至删错东西。
pwd # 输出类似 /home/kali还有一个少有人提但很有用的参数:pwd -P。如果当前目录是通过符号链接访问的,普通pwd显示的是链接路径,加上-P之后会显示真实物理路径。我自己的习惯是,在执行rm删除重要目录、或者执行会覆盖文件的命令之前,先敲一下pwd,确认自己不在根目录或家目录误删了东西。这步花不了一秒,却能避免大事故。
2.2 ls:一个参数看穿目录所有细节
ls用来列出目录内容,是进入任何一个目录后第一个要敲的命令。但如果你只敲ls,看到的就是一堆文件名,很多隐藏文件根本不会显示。Kali大量工具和配置都放在隐藏目录里,比如/home/kali/.bashrc、/home/kali/.ssh,所以日常我基本都用组合参数。
ls -lah-l表示长格式,显示权限、属主、大小、修改时间;-a表示显示所有文件包括隐藏的(.开头的文件);-h表示把文件大小显示成人类可读的K、M、G。比如ls -lah /etc能看到所有配置文件,ls -l /etc/passwd则能顺带看清文件权限。这些都是后面chmod的基础,因为你要先会看权限,才谈得上改权限。
2.3 cd:在Kali的目录树里自由穿梭
cd是切换目录的命令,配合pwd和ls,就是你操作整个文件系统的双脚。这里有几个点新手容易绕晕:绝对路径和相对路径。绝对路径从/开始写,比如cd /usr/share/wordlists,意思是不管你现在在哪,直接跳到那个目录;相对路径则是基于当前目录计算,比如当前在/home/kali,输入cd tools,就进入/home/kali/tools。
cd ~ # 回到家目录 cd .. # 回到上一级目录 cd - # 回到上一个访问过的目录 cd ../.. # 向上跳两级我特别推荐cd -这个用法,在Kali里经常需要在工具目录和配置文件目录之间来回切换,一条cd -直接弹回去,比重复敲完整路径快很多。另外一定养成按Tab补全的习惯,cd /us然后按Tab,自动补全成/usr,既省时间又能避免手滑敲错路径。
2.4 find:精确制导的文件搜索
在Kali里找文件,用find是最稳妥的。比如你想找出系统里某个目录下所有配置文件,或者找某个你忘记放哪的脚本,都可以靠它。
find /etc -name "*.conf" 2>/dev/null find . -name "config*" -type f第一条命令在/etc下查找所有以.conf结尾的文件,2>/dev/null把没有权限访问的目录报错信息扔掉,这样屏幕干净很多。第二条命令在当前目录查找所有名字以config开头的普通文件,-type f限定只找文件,不找目录。
很多人不知道find还能按时间、大小、权限筛选。比如find / -mtime -1 -type f,查找最近一天内修改过的文件,排查异常文件时特别好用。不过我要提醒一点:全盘find /非常慢,还可能有权限报错,尽量把搜索范围缩小到可能的目录。另外千万别写find / -name "*.log" -exec rm {} \;这种组合,批量删除很容易误删,风险极高,宁可手动确认几遍。
2.5 grep:一把筛子捞进所有想要的文本
grep是文本搜索界的王者,能从一堆字符串里精确捞出你想要的那几行。单独用它不如把它和管道符|一起用更爽。管道的含义很简单:把左边命令的输出,塞给右边命令当输入。
grep -i "error" /var/log/syslog | head -20 ps aux | grep -v grep | grep java第一条在系统日志里搜error,-i忽略大小写,head -20只显示前20行,避免刷屏。第二条先ps aux列出所有进程,再用grep -v grep排除掉grep命令本身,最后筛选出Java相关进程。这一串配合是排查进程的标准操作。
grep还有一些高频参数:-r递归搜索目录、-n显示匹配行号、-v反向选择,也就是排除匹配项。比如你想快速找出Kali所有配置文件里哪些提到过某个IP地址,直接grep -rn "192.168.1.1" /home/kali/就能定位到具体文件和行号。日志排查、工具配置调整,基本都离不开grep。
3. 文件管理与权限控制:5个命令守住数据安全
3.1 cp:复制文件也要懂策略
cp用来复制文件或目录。听起来简单,但有几个参数不记住真会翻车。复制目录必须加-r,否则报错cp: omitting directory;覆盖同名文件默认直接覆盖,想要安全一点加上-i让它每次覆盖前询问你;想保留文件属性比如时间戳、属主信息,加-p。
cp -r /home/kali/notes /home/kali/notes_backup cp -i /etc/hosts ~/hosts.bak我的实际体验是,复制目录最容易漏了-r,特别是从Windows习惯转过来的朋友。另外有一点容易被忽略:从U盘或远程挂载目录复制文件到本地时,文件属主、权限可能不是你想要的,复制完顺手用ls -l确认一下。在Kali里拷贝可执行脚本到/usr/local/bin后,如果提示没有权限,通常还需要再补一个chmod +x。
3.2 mv:移动和重命名是两兄弟
mv既用来移动文件,也用来重命名。其实重命名就是把文件移动到一个新名字,本质相同。mv用法比cp野得多,有个特别坑的细节:如果目标路径是一个不存在的目录,mv会把文件直接重命名成那个名字,而不是移动进去。
mv a.txt /tmp/b.txt # 把a.txt移动到/tmp并改名为b.txt mv a.txt /tmp/ # 把a.txt移动到/tmp,保持原名第二种写法我强烈建议保留最后的斜杠,这样一看就知道是移动目录,不会误判。当你跨文件系统移动时,mv底层其实是先复制再删除,遇到大文件会慢一些,而且需要目标分区有足够空间。如果你在Kali里想移动一个正在被进程使用的日志文件,建议先备份而不是盲目移动,否则会影响服务写入。
3.3 rm:删除命令的悬崖勒马技巧
rm是大杀器,Kali因为是安全测试系统,操作对象经常是重要配置文件、靶场隔离环境,一旦误删,恢复成本极高。Linux没有回收站,rm删除就是直接清掉,很多恢复工具也不保证能找回来。
rm file.txt # 删除单个文件 rm -r dir/ # 递归删除整个目录 rm -rf dir/ # 递归强制删除,不提示我的建议是:第一,日常使用给rm设置一个别名,在~/.bashrc里加一行alias rm='rm -i',让它每次删除前都问一句。第二,删除前先pwd加ls,看到当前目录确实没错了再动手。第三,像rm -rf这种组合别轻易跟星号通配符一起用,比如rm -rf *,一个不留神就把当前目录全清了。
还有一个更稳的方案:装一个trash-cli工具,把rm替换成trash-put,删除的文件会进回收站,还能恢复。虽然多一层保障,但也要注意它本质还是在占用磁盘空间,定期清理回收站。
3.4 chmod:权限数字化,别再被Permission Denied卡住
在Kali里,几乎所有“Permission denied”报错都和权限有关。chmod就是用来修改文件权限的。Linux权限分三组:属主、属组、其他用户;每组又分读(r=4)、写(w=2)、执行(x=1),三个数字加起来就能表达一组权限。
chmod 755 script.sh # 属主全部权限,属组和其他用户只读+执行 chmod 644 config.conf # 属主读写,其他只读 chmod +x shell.sh # 给所有用户增加执行权限数字模式含义是:设置权限时每个用户组的权限用一个数字表示,比如7=4+2+1,就是读写执行;5=4+1,就是读和执行;6=4+2,就是读写。chmod 755是Kali里最常用的脚本权限,相当于给自己全权限,别人只能读和执行。我特别提醒一点:SSH私钥文件权限必须设成600,也就是只有属主可读写,否则ssh客户端会直接拒绝加载,报UNPROTECTED PRIVATE KEY FILE。如果你用chmod -R一次改整个目录,要格外小心,会把目录里不该改权限的系统文件也改了。
3.5 tar:打包压缩一步到位
Kali里很多工具、脚本、靶场镜像都以.tar.gz格式分发,tar命令就是来处理这些的。tar最早是磁带归档工具,现在成了Linux下最常用的打包压缩方式。
tar -czvf archive.tar.gz /home/kali/tools # 打包并压缩 tar -xzvf archive.tar.gz # 解压到当前目录 tar -tzvf archive.tar.gz # 查看压缩包内容,不解压参数拆开看:c创建、x解压、z使用gzip压缩、v显示过程、f指定文件名。创建和查看的顺序一定要记牢,尤其是最后的f,必须紧跟压缩包名字。实际经验是,解压之前先用tar -tzvf看看包内结构,可别一股脑解压,结果文件散落在当前目录覆盖了一批同名文件。还有一个冷门但实用的技巧:解压时加-C指定目标目录,比如tar -xzvf archive.tar.gz -C /tmp,可以把文件解压到指定目录,保持工作区整洁。
4. 网络诊断与远程操作:5个命令搞定连接问题
4.1 ping:网络通不通,先问它一句
ping用来测试和目标主机之间的网络连通性,是排查网络问题的第一命令。它会发送ICMP回显请求,如果对方回包,说明链路是通的。
ping -c 4 192.168.1.1 ping -i 2 example.com不加-c的话,ping会一直发下去,直到你按Ctrl+C才停,很多新手第一次敲ping就懵了,怎么一直刷屏。所以日常建议加-c限定次数,比如-c 4就是发4个包后自动结束。另外TTL值可以粗略判断对端系统类型,Linux一般TTL 64,Windows一般128,不算精准但能参考。
还有一个重要认知:ping不通不代表目标一定离线。很多服务器、防火墙出于安全策略禁掉了ICMP,直接丢弃ping包,但HTTP、SSH等端口可能照样提供服务。所以在Kali里做网络探测,不要单凭ping判断目标死活,后面配合端口检查才靠谱。
4.2 curl:和接口对话的瑞士军刀
curl是个多功能网络传输工具,支持HTTP、HTTPS、FTP等一堆协议。在Kali里,测试Web服务、调用API接口、查看响应头,curl都是首选。
curl -I http://example.com # 只看HTTP响应头 curl -O http://example.com/file.iso # 下载文件,保持远程文件名 curl -X POST -d "name=kali" http://localhost:8080/api-I发的是HEAD请求,只拿响应头,适合快速看服务状态、服务器软件版本、返回码是200还是404。-X指定请求方法,-d传数据,非常适合本地起个Web服务自测接口。我经常用curl -I检查Kali本机开的Web服务,如果返回200,说明服务正常;如果返回000或者超时,基本就是服务的锅,跟网络没关系。
注意curl下载文件时是大写-O,小写-o是指定保存成自定义文件名,别记混,否则要么不保存,要么保存到一个奇怪的名字。另外如果你只想看响应内容除去HTTP头,可以加-s静默模式,避免进度条干扰。
4.3 wget:把远程文件稳稳拉回本地
wget和curl有点像,但定位更偏向文件下载。Kali里装工具、拉靶场镜像、下载字典文件,我更喜欢用wget,因为它的下载体验更友好,支持断点续传。
wget -c https://example.com/bigfile.iso wget -O mylist.txt https://example.com/wordlist.txt-c断点续传是最实用的功能,下载大文件断开了,重新执行一遍能从断点继续,不用重跑。-O可以把远程文件保存成指定名字。还有一个-r递归下载整个站点,但我警告你别随便用,会把目标站整站拉下来,既可能触发法律问题,也会让磁盘爆满。
wget在Kali里的另一个常用场景是配合靶场环境,下载一些训练专用的镜像或脚本。下载完成后,建议先校验一下哈希值或者文件大小,避免传到一半文件损坏。
4.4 ssh:安全远程登录的正确姿势
ssh是连接到远程Linux服务器的标准方式,Kali本身也内置了OpenSSH客户端和服务器。远程登录、传输管理命令、调试靶机,全靠它。
ssh kali@192.168.1.10 ssh -p 2222 root@192.168.1.10 ssh -i ~/.ssh/id_ed25519 user@remote默认情况下,ssh连接使用22端口,前面加-p指定端口。再配合-i指定私钥文件,就能实现免密登录。第一次连接时,ssh会提示确认主机指纹,输入yes后就把这台主机加入~/.ssh/known_hosts,以后不会再问。我习惯把常用连接配置写到~/.ssh/config文件里,比如这样:
Host lab HostName 192.168.1.10 User kali Port 22配置完之后,直接敲ssh lab就能连上,比敲一长串命令方便太多。还有一点必须强调:私钥文件权限必须chmod 600,否则ssh会拒绝加载。
4.5 netstat:一眼看尽本机端口和连接
netstat用来查看网络连接、监听端口和路由表。在Kali里排查“我这个服务起来了没”“这个端口是不是被占了”“谁连到我的机器”,靠它就够了。
netstat -tulnp ss -tulnp-t表示TCP,-u表示UDP,-l只看监听中的,-n显示数字地址和端口而不是解析域名,-p显示对应进程的PID和名称。组合起来-tulnp就能把本机所有监听端口列得清清楚楚。比如你想确认8080端口有没有监听,就执行:
netstat -tulnp | grep 8080新版Kali里netstat可能没装,缺省推荐用ss命令,参数几乎一样。如果你要排查“某个服务启动失败”,先看端口是否被其他进程占用,这种情况最常见。
5. 系统监控与包管理:5个命令掌控运行状态
5.1 ps:找出进程的身份证
ps用来查看当前进程快照,类似给系统拍一张照片,记录下这个瞬间所有进程的状态。参数用得最多的是ps aux,它会显示所有用户的进程详情,包括CPU占用、内存占用、进程状态。
ps aux ps aux | grep python3第一行会看到类似kali 12345 0.5 1.2 123456 7890 ? S 10:00 0:01 python3的输出,分别说明用户、PID、CPU占用、内存占用、启动时间、运行命令等。我最常用的就是ps aux | grep 关键词,迅速定位某个进程是否存在。排查问题时还会配合ps -ef看父子进程关系,判断这个进程是谁启的。
有一个坑:直接grep python3会把自己的grep进程也算进去,网上公认的写法是再加一个grep -v grep,把grep进程本身排除掉。前文已经提到了,这里再强调一下,因为真有人在这里卡半天。
5.2 top:动态监督系统的每一个动作
top是动态的,它会持续刷新系统资源使用情况。进入Kali之后如果觉得系统卡顿,或者风扇狂转,我习惯先敲top看看是谁在抢资源。
top进入top界面后,上部显示系统负载、CPU使用率、内存总量和剩余量;下面是一个动态刷新的进程列表,按CPU占用从高到低排。在交互模式里,按P键按CPU排序,按M键按内存排序,按K键可以直接输入PID杀掉进程,按q退出。我建议新手先在top界面里多按几次P和M熟悉排序,再按q退出,这样对系统运行状况会有一个直观感觉。
top最大的价值是看负载均衡和卡顿源头。如果某个进程CPU占用接近100%,大概率是它在捣鬼。但top快照刷新频率偏高,如果你更习惯可视化界面,可以后续装一个htop,操作更友好。
5.3 kill:按需终止进程,但别用蛮力
kill命令用于向进程发送信号,最常见的就是终止它。要注意,kill的默认行为是发送SIGTERM信号,进程收到后可以执行清理然后退出;如果进程卡死,就需要用kill -9发送SIGKILL强制杀掉。
kill 1234 # 默认发送SIGTERM,正常终止 kill -9 1234 # 强制终止进程使用kill之前,必须先用ps aux | grep 关键词查到准确的PID。我见过有人盲猜PID,结果杀掉了系统关键进程,导致桌面崩溃。PID是数字,每次启动都不一样,一定要现查现用。另外,如果有进程在固化数据、写日志,先用默认kill让它安全退出,不要一上来就-9弄死它,否则容易造成文件损坏。实在没反应,-9再上。
5.4 apt:Kali软件装的快与好
apt是Debian系Linux的包管理工具,Kali基于Debian,装软件、卸载软件、更新系统全靠它。
sudo apt update # 更新软件源索引 sudo apt upgrade # 升级所有可升级的软件包 sudo apt install nmap # 安装nmap sudo apt remove nmap # 卸载nmap顺序上,装任何新软件之前先apt update,否则容易碰到“找不到包”的报错。Kali是一个滚动更新的系统,软件版本比较激进,我习惯隔一段时间就更新一次,但大面积升级前要确保网络稳定,不然中断后可能出现依赖问题。另外,有些包在官方源里不存在,也不要硬搜,先想想是不是名字有变化,或者需要第三方源。
我个人的实操心得是:安装压倒性的工具集合时,比如apt install kali-tools-top10,会一下装很多组件,磁盘占用和安装时间都要预留好。如果你只是临时用一下某个小软件,用完及时卸载,别把系统搞成一锅粥。
5.5 systemctl:把服务安排得明明白白
systemctl管理系统服务,在Kali里主要用来启动、停止、开机自启服务。比如你本地需要跑一个Web服务,或者想让数据库开机自动启动,都要和systemctl打交道。
sudo systemctl start apache2 sudo systemctl stop apache2 sudo systemctl enable --now postgresql sudo systemctl status apache2start和stop分别启动、停止服务,status查看服务状态,看到active (running)说明正在跑,inactive (dead)说明没启动。enable --now postgresql意思是设置开机自启,同时立刻启动。很多人记不住enable和start的顺序,其实enable --now是联合操作,一步搞定。
Kali里有些服务默认没有开放开机自启,比如postgresql、metasploit用的数据库,如果你在某个工具里遇到“数据库连不上”,先看看systemctl status,很可能就是没启动。这里也提醒,旧系统的service命令在很多环境仍可用,但新脚本尽量用systemctl。
6. 常见问题与避坑经验:跟着踩过坑的人少走弯路
6.1 命令执行报错 “command not found”
最常见的报错之一,原因无非这么几种:软件没装、命令拼错、当前用户不在PATH路径里。比如敲ifconfig报找不到,因为新版Kali默认没有ifconfig,需要装net-tools或用ip addr代替。解决思路是看这东西装没装,没装就用apt补上;装了但敲不对,就检查拼写和大小写。Linux命令区分大小写,LS和ls完全两回事。
如果你手动下载了一个工具,放到某个目录后直接输名字报找不到,说明这个目录不在PATH环境变量里。要么把工具放到/usr/local/bin这种PATH目录,要么用./tool加路径方式运行。刚入门时遇到这个问题很容易怀疑人生,其实只是路径没找对。
6.2 权限拒绝 Permission denied
权限问题简直是新手劝退第一名。你访问/root目录,普通用户就会报Permission denied,解决办法是加sudo或者切换用户。但你执行一个脚本,报Permission denied,不一定是因为管理员权限,也可能是脚本没有执行权限。检查一下ls -l,如果权限位里没有x,就需要chmod +x script.sh。
还有一个容易忽视的场景:从Windows复制过来的脚本文件,可能带了DOS换行符,导致执行时报bad interpreter,甚至无法运行。可以先执行sed -i 's/\r$//' script.sh把回车符清掉。权限问题看着烦,其实都是规则清晰的小事,养成ls -l检查文件的习惯就好。
6.3 误删文件的急救与预防
Linux没有回收站,rm删了就删了,这个观念一定要前置。我早期在实验机上跑过一条带星号的rm,瞬间少了一堆配置文件,那种冷汗直流的感觉记忆犹新。所以现在我的策略是三层保险。
第一层,给rm加别名,让系统先问一句是不是真的要删。第二层,安装并使用trash-cli,删除的文件可以恢复。第三层,删除重要目录之前,先备份成tar包,比如tar -czvf backup.tar.gz /important/dir。有了这层保险,误删概率会降到很低。如果你不小心已经误删了,立即停止对那块磁盘的写入操作,然后试试ext4文件系统的恢复工具,但成功率并不是100%,所以预防远比抢救重要。
6.4 网络命令卡住或超时的排查思路
ping一直刷屏、curl长时间无响应、wget下载速度为零,这类问题我几乎每周都会遇到。第一步,先确认目标地址能不能解析,用ping -c 4快速验证基本连通性,基础通了再试具体端口。第二步,检查是不是防火墙拦截,Kali自带防火墙有时会拦截本地访问,临时关掉试试。第三步,注意命令本身是不是没有设置超时。
curl可以加-m 10设置最多等10秒,wget可以用--timeout=10,这样就不会无限期卡住。ping则可以永远加-c。网络问题的排查思路,永远是从底层往上走:先看链路通不通,再看端口通不通,最后看服务本身有没有问题。别一上来就怀疑服务器,往往问题出在自己这边的小配置上。
最后再分享一个我自己一直在用的习惯:每次在Kali上下载或操作重要文件之前,先把命令完整写在草稿里检查一遍,尤其看清路径和有没有-rf这类危险参数。这些基础命令,熟练之后不需要背,但一定要形成肌肉记忆,因为后面所有安全工具的使用,都是在这些简单命令上叠起来的。把地基打扎实,Kali用起来才会越来越顺手。