☰
Kali常用命令按风险重排:参数、权限与踩坑对照
2026/11/2 8:09:19 网站建设 项目流程

简介:面向Kali Linux初学者与初中级安全从业者的命令速查文档,聚焦数字取证与渗透测试场景下「命令记不牢、查手册慢」的问题,将日常操作所需的高频指令按功能归类整理。整份资源为1个docx文件,压缩包约1.96MB,篇幅紧凑,适合放在本地或移动设备中随时翻阅。内容以目录结构组织,从查看目录的ls、路径切换cd、文件创建touch与目录创建mkdir,到帮助命令whatis、help、man、info,再到登录命令login、last、exit与用户切换su/sudo,以及shutdown、halt、reboot等电源管理命令,逐条给出用途与常见参数说明,并延伸至df、free、top等系统资源查看命令和grep、sed、awk等文本处理命令。读者可据此快速定位语法、理解参数含义,减少在实战中反复搜索的时间,也可作为梳理Linux基础命令体系的复习清单。目前已有633人学习下载。

1. 把 Kali 常用命令按「会不会出事」重排一遍

第一次把 Kali 当主力工作机用,我把那份 Kali 常用命令大全从头到尾抄了一遍,抄完照样翻车——一条没加交互确认的删除命令,把一整天的实验记录送走了。后来我把这张表按另一个维度重排:不看字母顺序,只看「这条命令敲错之后还救不救得回来」。ls、pwd、which 这类随便敲,shutdown、rm、tar 这类敲之前先停三秒,分清输入的是什么。

下面讲的就是这份重排后的使用逻辑:每类命令在什么场景下该选哪个参数、哪些参数组合会咬人、哪些是新手的盲区而老手默认会做的检查动作。刚接触 Linux 的可以照着顺序练手,把 Kali 当工作机的安全方向同学能拿到一份能查能抄的对照表,做 web 渗透评估的老手也能在踩坑那章找到几条对得上的血泪经验。

2. 目录与帮助:ls 打头,四级别帮助命令怎么排优先级

2.1 ls 的参数不是背出来的,是按场景挑的

ls 是使用频率最高的命令之一,默认按文件名排序,不带参数就列当前目录。真正拉开差距的不是记不记得住参数,而是知不知道该在什么时候停手。

# 最常用:看当前目录下不隐藏的文件和文件夹 ls # 详细信息:类型、权限、属主、大小、时间一次到位 ls -l # 很多发行版的默认配置里把 ls -l 别名成 ll,Kali 默认的 zsh 配置里就有 # 连隐藏文件一起看,排查配置问题必备 ls -al # 人类可读的大小 + 按修改时间倒序,找「最近动过的东西」最快 ls -lht # 递归展开子目录,只在层级浅的目录里用 ls -R

几个参数的真实用途要分清:-a是把以.开头的隐藏项也列出来,.zshrc、.bashrc、.ssh这类目录平时看不见,改配置、查密钥、找残留文件全靠它;-h单独用几乎没意义,必须跟-l搭配才能把字节数变成 K、M、G;-t按建立时间先后排,配合-l就是按时间倒序,比肉眼翻文件列表快得多。

提示:-R是我见过最容易把终端拖死的参数。在/、/usr、/var这种目录下递归展开,输出量能刷几分钟,期间终端基本没法用。要看子目录结构,用find . -maxdepth 2 -type d比ls -R可控得多。

新手常见的误用是把ls -l的输出当成权限的完整信息。它只给出rwxr-xr-x这种符号位,真正落到数字权限(比如755、644)还得靠stat。所以我的习惯是:日常看结构用ls -lh,要对权限动手之前先stat 文件名,两边对一遍再改。

2.2 whatis、help、man、info:响应速度和信息量的取舍

帮助体系是四层,不是一个命令包打天下。判断标准很简单:你只需要「这条命令是干什么的」,还是要「这个参数到底怎么填」。

命令响应速度信息量适用对象
whatis最快,一行出结果极简,一句话描述任何外部命令
help快,内置中等,只讲内置参数shell 内置命令(cd、echo 等)
man稍慢,手册页完整,含参数、示例、相关文件绝大多数命令与配置文件
info中等最详细,带节点跳转GNU 工具与项目文档

whatis 查的是手册页索引数据库,不是实时解析,所以它快。代价是如果手册页没装或者索引没更新,它会直接告诉你「nothing appropriate」,这时候mandb重建一下索引再试。help 只对 shell 内置命令有效,cd、echo、source这类能用,ls、tar这类外部程序敲help ls是查不到的,得走 man 或者--help。

man 是日常主力,手册页本体在/usr/share/man下。Kali 上默认装了一部分中文手册,但覆盖不全。想让阅读顺畅一点,可以补装中文包并配个别名:

# 先更新源,再装中文手册页包 sudo apt update sudo apt install -y manpages-zh # Kali 近几年的默认 shell 是 zsh,配置写在 ~/.zshrc;用 bash 的改成 ~/.bashrc # -M 参数用于指定手册页的搜索路径,把默认路径指到中文目录 echo 'alias cman="man -M /usr/share/man/zh_CN"' >> ~/.zshrc source ~/.zshrc # 之后用 cman ls 就是中文手册,英文原版仍然用 man ls

这个别名的价值在于「按需切换」:英文手册的术语和参数表述更准,中文版读起来快。我的习惯是先用cman扫一遍大意,遇到翻译含糊的参数再man回原版对照,两边一比对,歧义基本就消掉了。

info 则是另一条路。它默认不装,需要手动补:

# info 提供的是 GNU 项目的信息文档,支持超链接和节点跳转 sudo apt install -y info

什么时候用 info?只有在你查的是 GNU 工具,且 man 手册里明确写了「完整文档见 info」的时候。日常九成场景用不上它,装它更多是为了不留死角。

2.3 man 页面怎么读:先看 SYNOPSIS,再看 OPTIONS

很多人不是不会用 man,是打开之后不知道从哪看起,翻两屏就退出去搜网页了。手册页的结构是固定的,按顺序抓重点效率最高。

先看 NAME,一行确认是不是你要的命令;再看 SYNOPSIS,这一行是语法骨架,方括号[]里的是可选项,省略号...表示可以给多个,竖线|表示二选一;然后跳到 OPTIONS,逐个看参数;最后翻 EXAMPLES 和 SEE ALSO,EXAMPLES 里往往有直接能抄的组合用法。

在 man 里用/关键字向下搜索,n跳下一个匹配,N反向跳,q退出。查tar的时候我一般不从头读,直接/^-c或者/exclude定位到关心的参数区,省掉大量翻页。

判断顺序我固定成三步:whatis 三秒确认命令用途,man 看 SYNOPSIS 确认参数形状,实在复杂才去翻 EXAMPLES 和 info。这个顺序比「先搜网页」稳,因为手册页和你机器上装的版本是同一份,网上抄来的示例经常对不上参数。

3. 动手改文件:从 cd 到 rm,哪一步最容易留下不可逆的结果

3.1 cd 与 pwd:符号链接下你到底站在哪

cd 切目录,pwd 打绝对路径,两个命令简单到很多人不设防,但符号链接一掺和,位置判断就容易错。

cd 有两个行为模式:-L(默认)在目标是符号链接时,逻辑上停在链接这一层;-P则解析到链接真正指向的物理位置。pwd 同理,-L打印环境变量$PWD的值,-P打印物理路径。平时看不出差别,一旦你在一个软链接目录里执行删除或打包,两个视角指向的可能是完全不同的文件树,这时候「我以为我在 A 目录」就是事故的开端。

# 回到上一次所在的目录,靠的是环境变量 OLDPWD cd - # 强制按物理路径切换,进到软链接真正指向的位置 cd -P /opt/current # 打印物理路径而不是逻辑路径,确认自己到底在哪 pwd -P

cd -这个用法值得单独记。它在两个目录之间来回跳,比反复敲长路径省事,而且cd -会把你送到哪打印出来,等于顺手做了一次位置确认。我排查问题时经常cd /var/log和cd -来回切,两个目录对照着看。

3.2 创建、复制、移动、删除:touch、mkdir、cp、mv、rm 的参数取舍

这五个命令构成文件操作的主干,风险等级从低到高排:touch、mkdir 基本无害,cp、mv 会在无提示的情况下覆盖,rm 直接不可逆。

touch 有两个功能:创建空文件,以及更新已存在文件的时间属性。-a只改访问时间,-m只改修改时间,-t可以指定具体时间戳。这个命令在复现实验、伪造时间线做测试的场景里很好用。

mkdir 的关键参数是-p和-m:-p递归建目录,父目录不存在也一并建出来;-m建目录的同时指定权限,比建完再chmod少一步。

# 递归建多级目录,已存在不报错 mkdir -p /tmp/lab/logs/2024 # 建目录时直接给权限,避免中间态是可写状态 mkdir -m 700 /tmp/lab/private # -a 等价于 -dpR 的组合,保留属性并递归,做备份首选 cp -a /etc/skel /tmp/skel.bak

cp 的默认行为是覆盖,而且不问你。-i打开交互确认,-f强制覆盖,-b覆盖前先备份成文件名~,-u只在源文件更新时才覆盖,-p保留属性,-a是-dpR的合集,能保留符号链接、权限、时间戳,做整目录备份时用它最省心。

mv 兼具移动和重命名两个功能。同一个父目录里 mv 就是改名,跨目录 mv 就是移动。它同样默认覆盖,-i询问、-f强覆、-u更新才动、-b先备份。注意 mv 在同文件系统内是改指针,几乎瞬间完成;跨文件系统是真实的复制加删除,大目录会明显变慢,中途中断可能留下半个目录。

rm 是唯一没有后悔药的。-i逐个询问,-r递归,-f强制不提示,-v打印过程。这里有个反直觉的点:-r遇到符号链接时删的是链接本身,不是它指向的目录树,所以「删链接误删源数据」这个担心其实不成立;真正危险的是路径拼接出错,比如脚本里某个变量没取到值,删除范围就会退化到根目录附近。我现在的做法是,任何带变量的删除命令,先echo打印一遍完整路径,确认无误再执行。

注意:-i和-f同时出现时,后写的那个生效。别指望「既强制又提示」这种组合。

3.3 ln 软硬链接与 rm 的交叉地带

ln 建链接,-s是软链接(符号链接),不加就是硬链接。两者差别不是「一个能跨盘一个不能」这么简单。

硬链接指向的是同一个 inode,删掉任一链接文件内容都还在,只有链接数归零才真正释放;它不能跨文件系统,也不能给目录建。软链接是一个独立的小文件,内容就是目标路径字符串,目标删了它就变成死链,但依然存在,ls -l会显示成红色。

# 软链接:源文件建议写绝对路径,否则移动链接后容易失效 ln -s /opt/app/releases/v1.2 /opt/app/current # 查看链接指向,确认没有建歪 ls -l /opt/app/current

原资料里有一句「软链接源文件必须写成绝对路径」,这个说法偏严格但方向对:相对路径的软链接是相对于链接文件所在目录解析的,链接一旦被移动就会失效。团队协作或部署脚本里,统一写绝对路径能省掉大量「在我机器上是好的」的排查。

3.4 查内容与找文件:cat、less、head、tail、find、locate、which

内容查看这一组,选哪个取决于文件多大、你要看哪一段。

命令适用场景关键参数
cat小文件全量输出、拼接多文件-n行号,-b空行不编号,-A显示不可见字符
more只往前翻的分页查看+n从第 n 行开始,+/pattern从匹配处开始
less前后都能翻,日常首选/向下搜,?向上搜,空格翻页,q退出
head看开头,默认 10 行-n行数,-c字符数,-v显示文件名
tail看结尾,默认 10 行-n行数,-f持续跟踪

less 是这个组里最值得练熟的。它比 more 多的不只是「能往回翻」,搜索、跳转、退出都在一套键位里,看日志时Shift+G到底、g回顶、/error搜关键字、n跳下一个,比来回 grep 快。

cat 的-A参数容易被忽略,它把行尾显示成$、制表符显示成^I,排查「看起来一样但实际不一样」的配置文件时,这是定位不可见字符的直接手段。

find 是文件系统级的实时遍历,条件可以叠加:-name按名匹配,-iname忽略大小写,-user、-group按属主属组,-size按大小(c字节、k、G),-type按类型(f普通文件、d目录、l链接),-perm按权限,-path匹配完整路径。

# 在 /var/log 下找 7 天内修改过、大于 10M 的普通文件 # -mtime -7 表示 7 天内,+7 则是 7 天前 find /var/log -type f -size +10M -mtime -7 # 按权限精确匹配,查出所有 777 的文件 find /var/www -type f -perm 0777

locate 走的是索引数据库,速度比 find 快一个量级,代价是结果可能过期。索引由系统定期更新,也可以手动updatedb强制刷新。-i忽略大小写,-n限制输出行数。判断标准很直接:要实时准确用 find,要大范围快速定位用 locate,用完发现结果不对就先updatedb。

which 解决的是另一个问题——命令到底从哪来。它沿$PATH逐个目录查找,返回第一个匹配的绝对路径。同名命令装了两份、或者某个目录被塞进 PATH 前面,which一眼就能看出来。echo $PATH配合which一起用,比猜要快得多。

4. 系统级操作:登录痕迹、身份切换和关机三件套

4.1 login、last、exit:谁在什么时候进来过

login 给出登录界面,可用于重新登录或切换身份。命令行模式下登录 Linux,看到的第一个命令就是它。多用户操作系统允许多人同时登录,也允许同一个人多次登录,靠的是虚拟控制台,Alt+F1到F6在几个控制台之间切换,每个都相当于一个独立工作台。

last 查的是登录历史,读的是/var/log/wtmp。参数不多但每个都有明确用途:

参数作用
-a把登录来源的主机名或 IP 显示在最后一行
-n指定输出条数
-d把 IP 反解成主机名
-R不显示登录来源的主机名和 IP
# 看最近 10 条登录记录,并把来源 IP 显示在行尾 last -n 10 -a # 只看来源地址,不看主机名 last -R -n 20

从安全运维的角度看,last 的价值在于它是原始记录,不依赖任何上层日志系统。系统被异常重启、某个账号在非工作时间登录、来源地址不在预期网段,这些都能从这里第一眼发现。-d在纯内网环境里能读出主机名,但反解失败时会拖慢输出,赶时间就直接-R。

exit 退出当前 shell,回到登录界面或上一层 shell。它没有参数。嵌套 shell 的时候要留意,exit一次只退一层,连按几次才是真正登出。

4.2 su 与 sudo:差的不只是权限

这两个命令经常被混为一谈,实际上解决的问题完全不同。

su 是切换用户身份,切换时需要输入目标账号的密码。不带任何参数的su默认切到 root,但环境变量和 PATH 仍然是原来那套——这就是「明明切了 root,敲ifconfig却说找不到命令」的根因,因为/usr/sbin不在当前 PATH 里。正确做法是su -,破折号表示重新开一个登录 shell,完整加载目标用户的环境。

su 的主要参数:-重新登录并加载环境;-m保留原环境变量;-c执行完指定命令后恢复原身份;-s指定要用的 shell。

# 不带 - 的切换:身份变了,环境没变 su # 带 - 的切换:完整加载目标用户环境,PATH 也一起换 su - # 换身份只跑一条命令,跑完自动退回,不在 root 环境里停留 su -c "whoami" root

sudo 走的是另一条路:普通用户不需要知道 root 密码,只要自己在 sudoers 名单里,就能以管理员权限执行指定命令,而且每条都有审计记录。这两者的取舍不在于谁权限大,而在于可追溯性和停留时间。

维度susudo
需要的凭据目标账号密码当前账号密码
环境变量默认不切换,需加-保持当前用户环境
停留时间进入目标身份后一直停留单条命令,执行完即退
审计弱,只记录切换行为强,逐条记录执行内容
多人协作需要共享密码各自用自己账号,按需授权

我的习惯是:一次性操作一律用 sudo,必须连续做一串 root 级操作才用su -,而且做完立刻 exit。长期停在 root shell 里,一是所有命令都没有单独审计,二是手滑的代价被放大,三是环境变量残留导致的诡异问题最难查。

4.3 shutdown、halt、reboot:三种关机方式的风险对照

这三个命令都能让机器停下来,机制完全不同。

shutdown 是最安全的路径,它会通知所有登录用户、冻结新的登录、逐项关闭服务,再切断电源。参数:-c取消已安排的关机,-h关机,-r重启,-k只发通知不真关,-f重启时跳过 fsck,-F重启时强制执行 fsck。-h和-r都支持指定时间并附带通知消息。

# 5 分钟后关机,并给所有在线用户广播一条消息 shutdown +5 "System will shut down after 5 minutes" # 取消上面那条安排 shutdown -c

halt 不走这套流程,直接执行硬件关机。-p是默认行为,关机时调用 poweroff;-n关机前不做 sync 同步;-d不把记录写进/var/log/wtmp;-i关机前关掉所有网络接口;-w只写 wtmp 记录、不真正关机。shutdown 会逐项关服务,然后再调 halt,这是两者最大的差别。

reboot 的参数集和 halt 基本一致,-w、-n、-d、-i含义相同,作用是把机器重新拉起来。

注意:直接断电源关闭 Linux 是非常危险的操作。后台还有大量进程在跑,强制断电可能导致数据没落盘、文件系统不一致,极端情况下会损伤硬件。任何时候都优先用 shutdown,让系统自己按顺序收尾。

-f和-F这对参数要慎用。正常重启时内核会检查文件系统是否需要 fsck,-f是明确跳过,-F是强制执行。机器出现过异常掉电、怀疑文件系统有损坏时,-F是必要的;只是在做性能测试、想缩短重启时间时,跳过检查反而埋雷。

4.4 gzip 与 tar:打包顺序和参数顺序决定成败

gzip 负责单个文件的压缩,压缩后文件名后面多出.gz。参数:-d解压,-f强制压缩(不理会文件名冲突和符号链接),-r递归处理目录下所有文件,-l显示压缩信息,-v显示执行过程。

tar 负责把一堆文件和目录打成一个包,这是备份和跨机传输的基础操作。参数:-c新建归档,-x从归档中提取,-z用 gzip 算法压缩或解压,-v显示过程,-f指定归档文件名。这四个字母的组合基本覆盖了九成使用场景:

# 打包并压缩:-c 创建 -z 走 gzip -v 显示过程 -f 指定文件名 tar -czvf backup.tar.gz /tmp/lab # 解包:-x 提取,顺序和打包时对应 tar -xzvf backup.tar.gz # 只看包里有什么,不落地 tar -tzf backup.tar.gz

-f后面必须紧跟文件名,这是 tar 的参数顺序规则,写成tar -czvf backup.tar.gz是对的,写成tar -czf -v backup.tar.gz会被解析成把-v当成文件名。这个细节单独拎出来说,是因为它是新手报错频率最高的一处。

打包前先想清楚要不要排除缓存和日志目录。整目录打包时把运行时产生的临时文件也塞进去,包体积能翻好几倍,解包时还要额外清理。--exclude参数配合通配符能过滤掉这些噪音,具体写法取决于 tar 版本,动手前先tar --help | grep exclude确认一下。

5. 踩坑排查:五条我真实撞过的命令陷阱

5.1 tar 解包没加 -C,文件散落一地还覆盖了同名文件

现象:在项目根目录执行tar -xzf backup.tar.gz,包里的文件直接铺到当前目录,和已有文件同名的地方被静默覆盖,事后才发现配置文件被换成了旧版本。

原因:tar 默认解到当前工作目录,覆盖行为不提示。包内路径如果是相对路径,展开后就是一堆散落的文件。

解决:解包前先tar -tzf 包名看一眼内部结构,确认顶层目录名;解包时用-C指定目标目录,并且目标目录事先建好。跨机器传输的包,我现在的固定动作是先解到一个临时目录,核对完再往正式位置搬。

5.2 rm 路径拼接出错,删除范围比预期大了一圈

现象:脚本里删临时目录,某次变量没取到值,删除范围退化到了意料之外的层级,幸好当天有备份。

原因:变量展开为空字符串后,命令的实际参数和目标完全不是一回事。加不加引号、有没有做空值判断,结果差别极大。

解决:涉及变量的删除,先echo出完整路径看一眼;脚本里对变量做判空,为空直接退出;再给 rm 加上-i或者用带回收站性质的中间目录过渡。经过一次之后,我的习惯固定成「先打印、再执行」,多花两秒钟。

5.3 locate 查不到刚创建的文件

现象:刚部署的配置文件,locate 文件名返回空,怀疑文件没建成功,实际用find一搜就在。

原因:locate 查的是索引数据库,不是实时文件系统。新建的文件要等updatedb跑过才进索引。

解决:先sudo updatedb刷新索引再查;或者直接切 find。我现在的判断标准是:找已知位置附近的文件用 find,做大范围模糊搜索用 locate,而且用完发现结果可疑就刷一次索引。

5.4 su 切到 root 后,常用命令提示 command not found

现象:su切到 root,敲ifconfig、useradd这类命令提示找不到,明明刚才在普通用户下还能用。

原因:不带-的 su 只切换身份,不加载目标用户的登录环境,$PATH还是原来那套,/usr/sbin、/sbin这些目录不在搜索范围内。

解决:用su -重新登录式切换,环境变量和 PATH 一起换过来。临时验证可以用echo $PATH对比切换前后的差异,确认后就知道是环境问题而不是命令没装。

5.5 last 看不到近期的登录记录

现象:怀疑有人异常登录,last输出里却只有零星几条,最近的记录缺失。

原因:/var/log/wtmp是按大小轮转的,记录量上来之后旧记录会被覆盖;另外有些操作会明确不写入 wtmp,比如 halt 的-d参数。

解决:先last -n 50看条数上限是不是卡住了;再确认 wtmp 文件的修改时间和大小;要长期留存登录记录,得提前把 wtmp 纳入归档策略或接入集中日志。这类事属于「平时不觉得,出事才发现没留证据」,提前做比事后查省事得多。

6. 上手顺序与三条铁律:把命令表练成肌肉记忆

命令表最大的问题是按字母排序,练出来的顺序是散的。我按「出错代价」重新排了一个七天顺序,每天只练一组,练到不查资料也能敲出来再往下走。

阶段命令组练到什么程度算过
第 1 天ls、cd、pwd、which不看说明能说清当前在哪、命令从哪来
第 2 天whatis、help、man、info遇到陌生命令先查手册而不是搜网页
第 3 天touch、mkdir、cp、mv、ln知道哪些默认覆盖、怎么留备份
第 4 天cat、less、head、tail、find大文件定位不用完整打开
第 5 天gzip、tar、locate打包解包不散落、不覆盖原文件
第 6 天su、sudo、exit分得清什么时候该用哪个
第 7 天shutdown、reboot、last知道关机不是断电源、登录痕迹从哪看

三条铁律是我从几次翻车里固下来的,跟具体命令无关,但管住了九成事故。

第一条,任何删除、覆盖、格式化相关的操作,执行前先让路径可见。echo打印、ls确认、tar -tzf预览,动作都是几秒钟,省的是不可逆的损失。

第二条,权限提升要短。能用sudo单条执行的,不要开一个长期挂着的 root shell。停留时间越短,被环境变量残留坑到的概率越低,审计记录也越干净。

第三条,新命令先在临时目录里试。/tmp下建个沙盒,参数怎么组合、输出长什么样,全部在沙盒里趟一遍,再用到真实目录。这条听起来笨,但它是我在 web 渗透评估和日常网络安全运维里唯一没翻过车的习惯。

回过头看,那份命令大全真正有用的地方不是收录了多少条,而是它把每条命令的参数摊开摆在那里,让你知道有哪些选择。选哪个、什么时候停手,得自己拿事故换。从那以后我每次要敲 rm、tar、shutdown 之前,都会强制走一遍「打印路径、确认范围、再执行」这三步,慢是慢了点,但再也没丢过东西。希望帮到你。

这份《Kali 常用命令大全.docx》按目录组织,从目录查看到帮助体系、登录命令、电源命令、路径与文件操作、内容查看到压缩打包,参数说明都跟着命令走,适合放在手边当查表用。需要的话自取。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询