Linux命令行实战:20个核心命令助力网络安全与系统运维
1. 项目概述为什么是这20个命令如果你刚接触“黑客”或网络安全这个领域或者只是对Linux系统感到好奇听到“Linux命令”这个词第一反应可能是头大。满屏幕的黑底白字敲错一个字母就报错感觉无从下手。我刚开始学的时候也是这种感觉觉得这玩意儿太“极客”了离自己很远。但干了这么多年我可以很负责任地告诉你所谓的“黑客技术”或者安全研究其基础操作有80%都离不开对Linux命令行的熟练使用。它不是什么高深魔法而是一套极其高效、精准的工具集。网上动辄“Linux命令大全”列出几百个命令对新手来说不仅记不住更不知道从何用起。这正是我写这篇内容的初衷我不给你列清单我带你“用”起来。我筛选出的这20个命令是经过无数次实际渗透测试、应急响应、系统排查后总结出的最高频、最核心、最实用的命令。它们就像木匠的锤子、锯子和尺子是你踏入这个领域必须握在手里的基础工具。记住我们的目标不是成为命令的复读机而是理解每个命令背后的意图知道在什么场景下该用什么工具去解决问题。接下来我会把这些命令分成几大类结合真实的应用场景告诉你它们到底怎么用以及为什么这么用。2. 核心命令分类与场景化解析我把这20个高频命令分为五个核心功能类别信息搜集、文件操作、进程与网络、权限提升与维持、以及文本处理与日志分析。这个分类法不是按字母顺序而是按实际攻防或运维排查的工作流来设计的。你从一个外部视角开始探查到深入系统内部操作基本就是沿着这个路径。2.1 信息搜集类命令你的“侦察兵”在接触一个陌生系统时你首先得知道“我在哪”、“这里有什么”、“谁在管”。这几个命令就是你的眼睛和耳朵。whoamiid确认当前身份这是你登录后应该敲的第一个命令。whoami简单直接告诉你当前登录的用户名。但id命令更强大它会显示用户IDUID、所属组IDGID以及所属的所有附加组。$ whoami alice $ id uid1001(alice) gid1001(alice) groups1001(alice), 27(sudo)注意看到用户属于sudo组如上方例子这是一个重要信号意味着该用户可能有权通过sudo命令执行管理员操作。这是权限提升的关键切入点。pwd打印当前工作目录告诉你当前所在的绝对路径。在复杂的目录跳转后特别是通过符号链接进入的目录用pwd -P显示物理路径而非链接路径可以避免混淆。$ pwd /home/alice/projects $ pwd -P # 如果当前目录是通过链接进入的这个命令会显示实际位置uname -a系统信息一览这个命令会输出内核名称、主机名、内核发行版、内核版本、处理器架构等信息。在漏洞利用前确定系统架构x86_64, arm等和内核版本是必不可少的一步。$ uname -a Linux target-server 5.4.0-100-generic #113-Ubuntu SMP Thu Feb 3 18:43:29 UTC 2022 x86_64 x86_64 x86_64 GNU/Linuxls列出目录内容这可能是你用得最多的命令之一。但别只会用ls关键在参数ls -la以长格式列出所有文件包括隐藏文件以.开头的显示权限、所有者、大小、时间。ls -lh-h参数让文件大小以人类可读的形式K, M, G显示结合-l使用非常直观。 查看文件权限和所有者信息是寻找错误配置如全局可写目录、敏感文件权限过松的第一步。2.2 文件操作类命令你的“手术刀”找到目标后你需要查看、编辑、移动、复制或删除文件。对文件的精准操作是渗透测试的基础。cat查看文件内容最直接的文本文件查看工具。适合查看小文件。cat /etc/passwd查看系统用户列表是信息搜集的经典命令。cat /etc/shadow查看用户密码哈希通常需要root权限是密码破解的目标文件。实操心得对于大文件用cat会刷屏。此时应用less或more命令分页查看。less/more分页查看大文件less比more更强大支持前后翻页、搜索。$ less /var/log/auth.log # 查看认证日志按 q 退出在less中你可以用/后跟关键词进行搜索用n跳转到下一个匹配项N上一个。这在分析长达数万行的日志时是救命功能。cp/mv/rm复制、移动/重命名、删除cp source.txt dest.txt复制。cp -r directory/ backup/递归复制整个目录。mv oldname newname重命名或移动文件。rm file.txt删除文件。极度危险的命令是rm -rf /递归强制删除根目录永远不要尝试。重要警告使用rm前尤其是带-r递归和-f强制参数时务必双重确认路径。一个常见的悲剧是在rm -rf ./ tmp./和tmp之间多了一个空格中它变成了删除当前目录所有内容并删除tmp目录。建议先使用ls命令列出要删除的内容确认无误后再执行rm。find强大的文件搜索工具这是文件操作中的“瑞士军刀”功能极其强大。按名称查找find / -name *.conf 2/dev/null在根目录查找所有.conf文件将错误信息丢弃到/dev/null。按权限查找find / -perm -ow -type f 2/dev/null查找全局可写的文件。按用户查找find / -user root -type f 2/dev/null查找所有属于root的文件。组合查找并执行操作find /var/log -name *.log -mtime -7 -exec ls -lh {} \;查找/var/log下7天内修改过的.log文件并列出详情。find命令的-exec参数允许你对找到的每个文件执行任意命令这为自动化操作打开了大门。grep文本搜索利器在文件或输出流中搜索特定模式。它是日志分析、配置审查的核心。grep Failed password /var/log/auth.log在认证日志中搜索登录失败记录。grep -r password /etc/ 2/dev/null递归地在/etc目录下所有文件中搜索“password”字符串。grep -i error logfile | head -20忽略大小写搜索“error”并只显示前20行。ps aux | grep sshd结合管道在进程列表中查找sshd进程。grep支持正则表达式用-E参数启用扩展正则功能更强大。2.3 进程与网络类命令洞察系统动态系统正在运行什么程序开放了哪些端口网络连接状况如何这些命令让你对系统的实时状态了如指掌。ps查看进程状态ps aux最常用的组合显示所有用户的详细进程信息。输出包括USER用户、PID进程ID、%CPU、%MEM、COMMAND命令路径等。ps -ef另一种常用格式显示父进程IDPPID。 当你怀疑系统被植入后门时仔细查看ps aux的输出寻找异常进程、陌生路径的命令是关键。top/htop动态进程监控top提供实时动态的进程和系统资源CPU、内存使用情况视图。按P按CPU排序M按内存排序。htop是top的增强版界面更友好支持鼠标操作和垂直/水平滚动强烈建议安装使用。netstat/ss网络连接统计netstat是传统工具sssocket statistics是其更快速、更现代的替代品。ss -tulnp查看所有监听-l的TCP-t和UDP-u端口并显示进程名-p和数字格式-n。$ ss -tulnp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:((sshd,pid1234,fd3)) tcp LISTEN 0 128 127.0.0.1:3306 0.0.0.0:* users:((mysqld,pid5678,fd30))这条命令能立刻告诉你系统上SSH服务22端口和MySQL数据库3306端口但只监听在本地正在运行。发现未预期的开放端口往往是存在脆弱服务或后门的迹象。lsof列出打开的文件在Linux中“一切皆文件”包括网络连接、设备等。lsof可以列出被进程打开的所有文件。lsof -i :80查看哪个进程在使用80端口。lsof -p PID查看指定PID进程打开的所有文件。lsof /var/log/syslog查看谁正在读写syslog文件。 当某个端口被占用但你不知道是哪个程序时lsof比netstat/ss更能精确关联到进程。2.4 权限提升与维持类命令这类命令通常与系统管理和漏洞利用相关理解它们有助于你理解攻击者的思路从而更好地进行防御。sudo以超级用户身份执行命令这不是一个“黑客命令”但却是权限提升中最常被利用的机制。如果当前用户被配置了无需密码即可执行特定命令的sudo权限攻击者就能直接获取root权限。sudo -l列出当前用户可以执行的sudo命令。这是信息搜集的关键一步$ sudo -l User alice may run the following commands on target-server: (ALL) NOPASSWD: /usr/bin/vim, /usr/bin/find上面输出显示用户alice可以无需密码使用root权限运行vim和find。这可以通过sudo vim进入vim后用:!bash或:shell命令轻松启动一个root shell或者利用find的-exec参数执行命令。su切换用户su -或su - root切换到root用户需要输入root密码。su - username切换到其他用户。 在渗透测试中如果获取了某个用户的密码或密钥就会使用su来切换身份。chmod/chown修改文件权限和所有者chmod 755 script.sh给文件所有者读、写、执行权限同组用户和其他用户读和执行权限。chmod x script.sh给文件添加执行权限。chown root:root file将文件所有者和所属组都改为root。 攻击者可能会修改某些关键脚本的权限为其添加执行权或者修改文件所有者以隐藏行踪。2.5 文本处理与日志分析类命令安全分析离不开处理大量的文本数据如日志、配置、数据包等。这几个命令能让你像处理数据一样处理文本。awk文本处理编程语言功能极其强大可以单独写一本书。对于新手掌握几个经典用法就受益无穷。打印特定列ps aux | awk {print $1, $2, $11}打印进程列表的用户、PID和命令。条件过滤awk -F: $3 1000 {print $1} /etc/passwd以冒号分隔打印UID大于等于1000的用户名通常是普通用户。统计awk {sum$3} END {print sum} data.txt计算第三列的总和。awk的-F参数指定分隔符$1, $2...代表分割后的字段。sed流编辑器主要用于对文本进行过滤和转换。替换文本sed s/foo/bar/g file.txt将文件中所有的foo替换为bar。删除行sed /pattern/d file.txt删除包含pattern的行。打印特定行sed -n 10,20p file.txt只打印文件的第10到20行。sed常被用于自动化脚本中批量修改配置文件。cut按列切割文本cut -d: -f1 /etc/passwd以冒号为分隔符提取/etc/passwd文件的第一列用户名。echo hello:world:test | cut -d: -f2输出world。sort/uniq排序与去重这两个命令经常结合使用。cat logfile | grep ERROR | cut -d -f4 | sort | uniq -c | sort -rn这是一个经典的管道组合。它从日志中提取ERROR行用cut取出第4个字段假设是错误代码然后排序接着用uniq -c统计每个错误码出现的次数最后再用sort -rn按出现次数反向数字排序。结果就是一张错误码频率统计表一眼就能看出哪个错误最频繁。tail/head查看文件首尾tail -f /var/log/syslog实时追踪日志文件的新增内容。在调试服务或监控入侵行为时这个命令会一直运行并显示新写入的日志行按CtrlC退出。head -n 50 file.txt查看文件前50行。3. 实战场景串联一次简单的入侵迹象排查现在让我们把这20个命令串起来模拟一个简单的应急响应场景你怀疑服务器可能被入侵了。初步定位信息搜集whoami # 我是谁是不是被切换了用户 id # 我属于哪些组有没有sudo权限 pwd # 我现在在哪个目录是不是一个奇怪的位置 uname -a # 系统版本是什么有没有已知漏洞检查异常进程进程与网络ps aux | grep -E (crypt|miner|backdoor) # 查找挖矿程序或后门关键词 top # 动态查看有没有CPU或内存占用异常的进程 ss -tulnp # 有没有奇怪的端口在监听比如陌生的高端口。 lsof -i :6666 # 如果发现6666端口开放查是哪个进程开的。搜索可疑文件文件操作find / -name *.sh -mtime -1 2/dev/null # 查找过去一天内修改过的脚本 find / -type f -perm -4000 2/dev/null # 查找SUID文件可能是提权点 grep -r 192.168.1.100 /etc/ 2/dev/null # 在配置里搜索可疑IP分析日志文本处理tail -100 /var/log/auth.log | grep Failed password # 查看最近100条失败登录 cat /var/log/auth.log | grep Accepted password | awk {print $11} | sort | uniq -c | sort -rn # 统计成功登录的源IP并排序 tail -f /var/log/syslog # 实时监控系统日志看有没有新动静通过这一套组合拳你就能对系统状态有一个快速而全面的了解。命令本身是简单的但将它们有机组合起来解决实际问题的思路才是真正的价值所在。4. 命令学习与练习的独家心得看了这么多命令和参数是不是觉得有点懵别急我分享几个我用了十几年的学习方法保证你事半功倍。第一不要死记硬背参数。Linux命令最人性化也最让人头疼的就是参数多。我的方法是记住“骨架命令核心参数”。比如find记住find [路径] [选项] [动作]这个结构。常用的选项就几个-name按名、-type按类型、-perm按权限、-exec执行。用到的时候用man find查一下具体语法多用几次就熟了。grep记住-i忽略大小写、-r递归、-v反向匹配、-E扩展正则这几个最常用的就够了。第二善用--help和man。任何命令后面跟上--help或-h都会输出简洁的帮助信息。想了解更详细、官方的说明就用man命令比如man grep。在man页面里你可以用/搜索关键词用n和N上下翻找。第三在安全环境里大胆试错。最好的学习方式就是动手。强烈建议你在自己的虚拟机里搭建一个Linux环境比如Ubuntu Server随便折腾。删了文件、搞崩了服务大不了重装一遍虚拟机。对于rm、chmod、chown这种危险命令可以先在/tmp目录下创建一些测试文件来练习感受一下效果。第四掌握管道|和重定向、的魔力。这是Linux命令行的精髓。管道能把上一个命令的输出作为下一个命令的输入。比如ps aux | grep python。重定向会覆盖文件会追加到文件末尾。比如echo hello test.txt或者dmesg boot_errors.log。学会组合小命令完成复杂任务才是高手的标志。第五使用命令别名alias和历史history。如果你经常输入一长串命令可以给它设一个别名。编辑~/.bashrc文件加入一行alias mycheckps aux | grep -v grep | grep -E \(ssh|nginx)\然后执行source ~/.bashrc。以后输入mycheck就能快速检查相关进程了。history命令可以查看你输入过的历史命令用!编号可以快速执行历史命令。最后也是最重要的一点永远保持好奇心并理解命令在做什么。不要盲目复制粘贴网上看到的命令尤其是那些带着sudo或者从不明来源下载脚本然后直接执行的命令。在按下回车前试着拆解一下这个命令看看每个部分是什么意思。这份谨慎不仅能保护你的系统更能让你真正理解技术背后的原理走得更远。这20个命令是你的起点熟练运用它们你就能在Linux的世界里乃至在安全研究的道路上站稳脚跟。剩下的就是在不断的实践中去探索和积累了。