
我带过不少刚接触 Linux 的同事也帮人处理过各种“连上了却动不了”的诡异场景。先说个最常见的用 CRT 这类终端工具连上了一台设备界面也出来了但敲键盘就是没反应或者是能敲字但回车没效果。很多人第一反应是“软件坏了”“网线有问题”实际上十有八九是会话没真正进入交互状态或者 Shell 环境没起来。这种问题一旦见过一次往后排查就是几秒钟的事但没见过的人可能折腾一晚上。这篇文章我不会搞那种“从入门到放弃”的大而全清单而是把我在日常运维、项目部署、面试辅导中真正高频使用的 Linux 操作指令按照“思路 → 实操 → 排错 → 提效”的逻辑重新梳理一遍。适合刚入行或者准备运维、开发岗位面试的朋友也适合那些已经会用一些命令但缺乏系统组织的从业者。你会发现记命令不如懂场景懂场景不如会排查。1. 内容整体设计与思路拆解1.1 为什么 Linux 指令总是“记不住”很多人学 Linux 命令最大的痛点就是“背了忘、忘了背”。我见过不少新人拿着命令大全文档啃了一周结果上了生产环境还是只会ls和cd。问题不是记性差而是没有建立“场景 → 命令 → 输出 → 动作”的闭环。举个例子ps -ef | grep java这条命令几乎是每个运维都会用的。但如果你只是死记它而不理解ps是在“快照当前进程状态”grep是“按关键字过滤”|是“把前一个命令的输出交给后一个命令处理”那你永远没法在遇到“Java 进程假死但端口还在监听”这种问题时想到jstack、netstat -tunlp这些后续手段。所以这篇文章的核心思路不是堆命令而是用场景把命令串起来。1.2 指令学习的最佳路径按生命周期组织我个人的经验是Linux 指令要按“系统生命周期”来学而不是按字母表或者按功能分类死记。什么是系统生命周期就是一台服务器从你登录进去到你看懂它在跑什么到你想改动它的配置再到它出了问题你要定位最后到它负载高了你要采样分析这整条链路。这样做的好处是符合大脑的记忆习惯。你不需要在脑子里维护一张巨大的命令表只需要记住“我现在处于哪个阶段”“这个阶段我关心哪些问题”命令自然会顺着场景浮现出来。比如登录之后第一步永远是看状态那uptime、free -h、df -h、top就是四板斧谁也不会记错。1.3 选型避坑免费工具与生产环境的边界关于 Linux 环境本身我多说一句。很多人纠结“哪个发行版最好”其实脱离场景谈发行版没有意义。CentOS 停止维护之后Rocky Linux、AlmaLinux、Ubuntu LTS 是目前服务器端最常见的替代选择如果你是在国产化背景下做项目那么适配国内主流处理器架构的 Linux 发行版也越来越常见生态已经比前几年成熟很多。个人学习的话虚拟机里装一个最小化的服务器版本再加一个桌面环境用于日常体验就够了千万不要在生产环境用滚动更新的发行版。另外提一句有些教程喜欢推荐“一键脚本装 Docker”“一行命令装 MySQL”省事是真省事但出了问题你也难搞清楚系统被改成什么样了。我建议至少手动装过一次 MySQL 和 Nginx踩过依赖、权限、配置路径的坑再回头用脚本或容器方案你会舒服得多。2. 核心细节解析与实操要点2.1 文件与目录指令不只是 ls 和 cd这是 Linux 的根基但很多人只会最基础的用法。我挑几个容易忽略但极其高频的细节说。路径理解的三个要点绝对路径从/开始相对路径不从/开始这个不解释。./表示当前目录../表示上级目录但要注意../是可以连续用的比如../../表示上上级很多人写脚本时路径搞错就是这里没想清楚。~表示当前用户的家目录。注意在脚本和交互环境下~的行为一致但在sudo su -切换用户后~指向的是目标用户的家目录不是你自己原来的目录。高频指令细节ls -l输出的第一列是文件类型加权限比如drwxr-xr-x中的d表示目录-表示普通文件l表示软链接。这一列后面九位每三位一组分别对应属主、属组、其他用户的权限顺序永远是rwx。cp -a常用于完整保留属性地复制目录它等价于cp -dpR。如果你只是用cp -r那么文件的权限、时间戳、软链接都会出问题。rm -rf永远不要在不确定路径时使用。我见过有人把变量写错导致删除根目录的极端案例安全做法是先用echo $变量名确认路径再执行删除。查找文件的思路find是必须熟练的。一个非常实用的组合是按时间过滤比如找最近一天内修改过的配置文件find /etc -name *.conf -mtime -1还有按大小找大文件这是磁盘告警时第一反应find / -type f -size 1G -exec ls -lh {} \;注意-exec {} \;的语法结构{}是前面找到的文件名占位符\;表示命令结束。很多人写成\;不转义或者漏掉分号直接报错。2.2 系统状态查看登录后第一件事拿到一台新服务器我习惯按这个顺序看一圈uptime free -h df -h top -bn1 | head -30uptime看负载和运行时间free -h看内存注意 buff/cache 是可用资源的一部分不要看到 used 高就以为内存不足df -h看磁盘top看 CPU 和进程。关于top我要多讲一句。很多人看一眼 CPU 百分比没事就走了实际上更关键的是load average后面的三个数字。它们分别代表 1 分钟、5 分钟、15 分钟的平均负载。判断负载是否过高不能只看数字大小要结合 CPU 核数。比如 8 核机器负载到 8 是满负荷到 16 就是明显过载了而 4 核机器负载到 6 就已经有点危险了。如果 1 分钟负载远高于 15 分钟负载说明系统正在经历突发流量或某个任务正在密集计算反过来如果 15 分钟负载高但 1 分钟低说明高峰已过正在恢复。2.3 网络指令排查“连不上”的第一利器回到开头说的 CRT 连上设备但无法输入命令的问题。在 Linux 系统上类比场景就是你 SSH 到一台服务器敲命令没反应。这时候大概率不是网络问题因为会话本身已经建立了。常见的隐藏原因有第一Shell 环境异常。比如.bashrc或.bash_profile里有一条卡住的初始化命令或者被改坏了导致 Shell 无法正常加载。这种情况下你会看到提示符要么不出来要么出来了但方向键、Tab 补全都没反应。可以在连接后用bash --noprofile --norc强行启动一个干净 Shell 试试。第二终端进入了某种特殊模式。比如有人按了CtrlS这在终端里是暂停输出XOFF看起来像卡死了按CtrlQ恢复。这个小坑我见过不少人踩包括一些经验丰富的工程师也会偶尔被它糊弄几秒。第三CRT 或终端软件的编码问题。如果中文环境乱码或者字符集设置不对命令看起来是输进去了但回显错乱。这个问题在 Linux 服务器上可以检查locale如果是LANG设置了不存在的编码Shell 也会出现异常表现。网络层面排查四件套ping -c 4 目标IP telnet 目标IP 端口 nc -vz 目标IP 端口 ss -tunlp | grep 端口ping通不代表端口通端口通不代表服务正常服务正常不代表业务可用这个递进关系一定要建立起来。很多人报障就一句“网络不通”其实链路可能断在任何一层。2.4 用户与权限提权和授权的边界热词里反复出现“linux新建用户”“linux提权”我统一说一下。新建用户的规范做法useradd -m -s /bin/bash devuser passwd devuser-m自动创建家目录-s指定登录 Shell。如果你不给 Shell默认可能是/bin/sh或者 nologin用户会碰到“能建但不能正常登录”的怪问题。生产环境建议用visudo修改 sudoers 文件而不是直接编辑/etc/sudoers。关于“提权”很多人以为提权就是拿到 root。实际上运维场景中说的提权更多是指“从普通用户切换到有权限的身份完成操作”最常见的就是sudo -i切换到 root shell或者su -切换用户。这里面有个安全原则能用 sudo 就别直接 su root因为 sudo 的所有操作都会被记录在/var/log/secure或/var/log/auth.log里出问题时有账可查。这也是为什么面试官经常问“普通用户如何执行只有 root 能执行的命令”背后的真实诉求——不是教你绕过权限而是教你合理地使用受控的权限提升通道。3. 实操过程与核心环节实现3.1 快速了解系统“是什么版本、什么架构”拿到陌生环境第一步永远是确认系统信息cat /etc/os-release uname -a arch不同发行版的包管理器和软件安装方式差异很大。比如 Debian/Ubuntu 用aptRed Hat/Rocky/Fedora 用dnf或yumArch 系用pacman。我在帮别人处理问题时如果对方一上来就问“为什么我的 Linux 装软件报错”我第一个问题永远是“你用的什么发行版什么版本”。指令本身没有绝对的好与坏适配才有意义。3.2 查找和定位文件从名字到内容全搞定文件查找分三个层次# 按名字找 find /data -name app*.log # 按类型和大小找 find /var -type f -size 500M # 按内容找 grep -rn ERROR /data/logs/grep是我使用频率最高的指令之一。-r递归目录、-n显示行号、-i忽略大小写这三个参数基本是黄金组合。再进阶一点-l只显示包含匹配内容的文件名-c统计匹配行数。日志排查时我经常这么干grep -n Exception app.log | tail -100注意先过滤再tail比tail -100 | grep能避免漏掉关键错误。3.3 查看日志定位异常的经典手法日志是 Linux 运维的半条命。不管系统服务还是业务应用出了问题第一件事就是看日志。系统级日志在/var/log/下面常见的有/var/log/messages或/var/log/syslog系统通用日志/var/log/secure或/var/log/auth.log认证与安全日志/var/log/dmesg内核环形缓冲区信息硬件和驱动问题看这个业务应用的日志各有不同但排查顺序是通用的先确定时间窗口再按关键字过滤最后按级别聚合。比如看某应用在 20:15 到 20:30 之间发生了什么sed -n /2026-01-15 20:15/,/2026-01-15 20:30/p app.log | grep -i error | head -50这里sed的地址范围匹配很实用。但要注意如果日志量特别大这种文本方式会慢。生产环境更推荐把日志接入集中式平台但那是另一个话题了。单机排错时这套完全够用。3.4 进程管理看、杀、查进程相关的指令是面试和实战的高频区。最常用的是一套组合拳ps -ef ps aux pgrep -f java top -p PID kill -9 PIDps -ef和ps aux输出内容基本一样只是格式和字段名的差异。实际工作中我更喜欢ps aux因为能看到%CPU和%MEM。关于kill多说一句。kill -9是强制终止但不要一上来就kill -9。程序可能需要在退出前释放资源、保存状态或者完成事务回滚。正规顺序是先kill PID默认发送 TERM 信号等几秒看进程是否退出不行再kill -9。很多新手一看到进程卡住就-9这在某些数据库类应用上可能直接把数据搞坏。3.5 磁盘与存储空间告警的完整处置流程磁盘满是最常见的告警之一。处理流程我总结为四步# 第一步确认哪个挂载点满了 df -h # 第二步找到大文件或大目录 du -sh /home/*/* du -sh * | sort -rh | head -20 # 第三步清理注意先确认再删 rm -rf /data/logs/old/*.log # 第四步验证空间是否回落到安全水位 df -h | grep /data有一个坑必须提醒du和df的结果有时候不一致。df看到的是文件系统使用情况du统计的是目录下文件占用。如果你删除了文件但相关进程还在保持文件句柄空间不会立刻释放。这时候用lsof | grep deleted找出占用已删除文件的进程是重启进程还是让应用重新打开日志文件由你自己权衡。3.6 软链接与压缩部署时离不开的细节项目发布时最常用的两个东西ln -s创建软链接tar打包压缩。ln -s /data/app/releases/v2.3.1 /data/app/current tar -czvf app-backup.tar.gz /data/app/config tar -xzvf app-backup.tar.gz -C /data/app软链接做版本切换很顺手回滚时只要把current指向旧版本目录就行比复制文件快得多。但注意tar解压到指定目录时必须先确保目标目录存在否则它会原样解到当前路径。我曾经见过有人把备份包解错位置结果目录结构全乱最后只能重新恢复。3.7 网络配置IP、路由、DNS 排查如果你用的是 Rocky Linux 这类 RHEL 系系统网卡配置文件在/etc/sysconfig/network-scripts/或/etc/NetworkManager/system-connections/下具体的文件名取决于实际环境。这里我不详细展开配置内容只说最关键的排查指令ip addr show ip route show cat /etc/resolv.conf ss -tunlpss是netstat的现代替代品输出更快、信息更全。-t看 TCP-u看 UDP-n不解析主机名-l只看监听状态的端口-p显示进程信息。组合起来就是ss -tunlp | grep 3306查看谁在监听 MySQL 端口。3.8 远程操作与文件传输工作中总有需要把本地文件传到服务器或者从服务器拉文件的场景。最常用的是scp和rsync。scp ./app.jar root192.168.1.10:/data/app/ scp root192.168.1.10:/data/logs/app.log ./ rsync -avz --progress /data/app/ root192.168.1.10:/data/app/rsync比scp强在增量同步第二次同步会快很多。在发布版本、同步配置的场景下rsync是我的首选。不过要注意源目录后面带不带斜杠结果完全不同rsync -avz /data/app/表示同步目录里面的内容rsync -avz /data/app表示连app这个目录本身一起同步。细节虽小但效果差异很大。4. 常见问题与排查技巧实录4.1 命令提示符卡住、键盘无响应的原因分析我帮人排查过很多“终端连上了但不能操作”的情况总结起来几个高频原因第一Shell 等待输入但进程不是交互模式。比如设备启动后进入的是某个扩展程序的管理界面而不是 Linux Shell。这种时候不是指令问题而是你需要按特定快捷键切换到 Shell 控制台或者用其他串口波特率重新连接。第二终端软件会话的流控制被触发。前面说的CtrlS暂停输出就是典型。按下CtrlQ恢复这是先手测试。第三当前命令在前台卡住。你看到光标在闪但按什么键都没反应其实是因为前台进程占用了输入常见于tail -f大日志文件或某些阻塞式命令。按CtrlC中断或者CtrlZ把进程放到后台再kill。第四SSH 会话因为网络抖动掉线了但客户端没检测到。敲几个字符没回应等一下看是否报Connection reset by peer。如果是重新连接即可。4.2 权限不够怎么办Permission Denied 的常规解法看到Permission denied别慌。先判断是文件权限不够还是执行权限不够ls -l /path/to/file如果是普通文件但没有读权限用sudo cat或通过chmod调整权限。如果是脚本不能执行检查是否有x权限没有就chmod x。如果是在某个目录下无法创建文件检查目录写权限以及是否被 SELinux 上下文阻塞。检查 SELinux 的最快方式是查看/var/log/audit/audit.log或者直接用setenforce 0临时关闭试试仅用于排查不要在生产环境中这么干。如果是 SELinux 导致的正确做法是调整策略或文件上下文而不是暴力关掉。4.3 端口被占用启动服务失败的经典场景“端口被占用”是我见过最多的服务启动报错之一。处理套路非常固定# 查看谁在占用端口 ss -tunlp | grep 8080 # 如果有 PID查看进程详情 ps -ef | grep PID # 确认确实是废弃进程后终止 kill PID不要一听说端口被占就感觉是天大的问题很多情况是上一次服务没正常退出进程变成了僵尸或孤儿进程。找到占用 PID 后再检查一下这个进程到底是不是真的该杀因为生产环境上同端口可能绑着别的服务。4.4 密码过期和登录受限热词里有“linux密码过期提醒通知”实际工作中确实会遇到。默认策略下有的发行版安装系统时会设置密码有效期为 99999 天有的则会启用密码过期策略。如果你登录时被告知密码已过期系统会强制要求先改密码再进入 Shell。检查当前用户的过期策略chage -l 用户名修改策略为永不过期chage -M 99999 用户名这里有个注意事项如果你管理的是自动化脚本使用的服务账户一旦密码过期会导致任务中断。规范做法是服务账户要么配置密钥认证要么设置合理的密码有效期并在过期前提醒。手动执行定时提醒可以用chage配合date计算剩余天数再通过 cron 发告警。4.5 中文输入法与其他环境问题之前热搜里有“linux chinese ime”也就是 Linux 中文输入法问题。桌面环境装好后中文输入法不出不来大概率是环境变量和输入法框架没配对。目前常见的框架有ibus和fcitx5。如果用了 KDE Plasma 桌面我一般推荐fcitx5GNOME 桌面则ibus更顺些。配置完成后要确认echo $GTK_IM_MODULE echo $QT_IM_MODULE echo $XMODIFIERS这三个环境变量都需要与输入法框架对应。如果没有输出对应的值会话是加载不了输入法的。登录桌面后如果验证没问题但依然不能打字可以试试killall fcitx5或者ibus restart等重启输入法进程的操作。4.6 日志文件查不到内容权限与磁盘双因素我遇到过“日志一直在写但文件看起来没有更新”的情况。排查顺序先用ls -l看文件大小是否在变再用tail -f看是否持续输出然后看磁盘是否已满——iNode 耗尽的情况也时有发生df -i如果 inode 使用率达到 100%即使磁盘还有空间系统也无法创建新文件日志自然写不进去。这种情况常见于小文件特别多的目录比如邮件队列、临时文件目录。清理时需要先把进程停掉再清理否则文件被占用删了也不会释放空间。5. 从指令到思路一套高效的日常巡检动作日常巡检不要求多花哨关键是点要覆盖全。我个人习惯的巡检命令组是uptime free -h df -h df -i这是一条组合命令一屏看到系统负载、内存、磁盘与 inode 四个核心指标。之后根据告警情况决定是否深入负载高top -bn1加ps aux --sort-%cpu | head -15内存紧张free -h再ps aux --sort-%mem | head -15磁盘告警du -sh /var /home /tmp 2/dev/null | sort -rh网络异常sar -n DEV 1 5或netstat -itop太适合交互式观察但用脚本巡检还是top -bn1好因为-b是批处理模式避免动态刷新导致输出混乱。关于性能采样还有一个容易被忽视但极其实用的命令sar。很多发行版默认装了sysstat工具包sar可以看历史负载、CPU、内存、网络等数据。比如sar -u 1 3 sar -r 1 3 sar -n DEV 1 3这组命令每秒采样一次连续三次输出 CPU 使用率、内存使用率、网卡流量。在生产环境的性能问题定位中sar的价值在于“历史回溯”。如果系统现在负载已经恢复了你想了解之前的高峰时刻发生了什么用sar翻历史数据比任何实时工具都靠谱。6. 学习路径与面试题背后的真实考察点热词里有一组是“linux面试题”和“linux面试题测试”我顺带讲一下面试官真正想考什么。网上那些题库里的题比如“如何查看系统负载”“如何查找大文件”“如何查看端口占用”“如何统计文件行数”表面是考指令实际是考排查思路和理解深度。举例如何统计某个目录下所有 Java 进程数量如果回答ps -ef | grep java | wc -l其实不算完整grep java会把grep 进程本身也算进去更严谨的是pgrep -c java或者ps -ef | grep [j]ava | wc -l用方括号技巧避免匹配到 grep 自身。类似的小细节体现的是对指令背后处理流程的理解而不是单纯的背参数。再看一道常问的如何发现 Linux 上的大文件很多人的第一反应是ls -lhS但ls只能看当前目录。正确打开方式是结合findfind / -xdev -type f -size 100M -exec ls -lh {} \;-xdev的意思是不要跨文件系统避免去扫/proc、/sys这类虚拟目录既慢了也没意义。如果你不加-xdev一台机器可能扫到你怀疑人生。我不建议把面试题当背诵材料更好的方式是每道题问自己三个问题这个指令的输出是什么我为什么要用它它的典型坑在哪里能答出这三层基本就过关了。7. 实战心得与经验总结回到开头提到的 CRT 连上设备但无法输入命令那个问题我后来去看其实是会话没有正确进入到命令行模式设备停留在某个状态界面上。这种情况在网工和运维交接的场景中非常多见不是软件问题也不是设备坏了。处理方法很简单检查终端类型设置、确认会话协议和端口再看设备当前处于什么界面。把这些基本点搞清楚了绝大多数“不能操作”都能在你还没有搬救兵之前解决。我在实际使用中还有个习惯就是每到一个新环境先建一套自己的“环境感知命令序列”。比如登录后自动打印系统版本、当前用户、当前目录、开机时间、内存和磁盘使用率。你可以把这些写成一个函数放到.bashrc里sysinfo() { echo System Info uname -a echo ---- Uptime ---- uptime echo ---- Memory ---- free -h echo ---- Disk ---- df -h 2/dev/null | grep -vE tmpfs|devtmpfs echo ---- Current User ---- whoami }这样登录任何一台机器后输入sysinfo十秒内就能建立对系统的基本认知效率提高明显。在管理大量服务器时这个方法尤其好用。最后再分享一个小技巧。不管指令收集了多少本地最好维护一个cheatsheet按使用频率排序用 Markdown 记录每条命令的“应用场景 参数示例 常见坑”。不是让你去抄网上的命令大全而是每遇到一次真实排错就把它写下来。我自己的笔记里就有不少冷门但救过命的组合命令比如用时间戳重命名备份文件、用xargs -n1批量压缩目录等。这些从实战里积累的经验远胜过任何现成的大全文档。Linux 指令的学习没有终点但核心思路是固定的看见现象 → 定位层级 → 选择工具 → 验证结果。把这条链路练成肌肉记忆你手上有什么系统都不慌。