Linux常用命令实战指南:从系统基础到服务部署与排查 在云计算运维和开发岗位中Linux 常用命令不是“会一点”就够而是要能独立完成登录、文件操作、权限调整、服务启停、日志排查这一整套动作。很多零基础同学刚开始学 Linux 时最容易陷入两个误区一是只背命令不背使用场景二是只会在本地图形界面里点鼠标不会通过终端处理问题。真正进入服务器环境后看到的往往是一个没有桌面的 Shell 窗口所有操作都靠命令完成。因此把 Linux 系统操作和核心命令当成一门可验证、可复现的工程技能来学比记住几十条孤立命令更有价值。下面按“理解系统 - 搭建环境 - 命令体系 - 小项目闭环 - 报错排查 - 面试补强 - 学习路径”的顺序展开。读完以后你可以建立一套自己的命令学习框架不管是 RHEL 系还是 Debian 系都能快速定位文件、查看进程、管理服务、分析日志并把常见报错按链路找到根因。1. 先理解 Linux 命令背后的系统模型别从死记硬背开始1.1 Linux 发行版、内核与 Shell 到底在说什么Linux 严格来说只是操作系统内核负责进程调度、内存管理、文件系统、网络协议栈等底层能力。用户平时接触到的 CentOS、Ubuntu、Rocky Linux 等其实是“Linux 发行版”在同一个内核之上打包了 GNU 工具集、包管理器、系统服务、Shell 和默认配置形成一个可以直接安装使用的操作系统。Shell 是用户与内核之间的命令解释器。你在终端里输入ls -l /etcShell 负责解析这条命令找到/usr/bin/ls这个程序并执行它再把结果打印回终端。所以学习 Linux 命令本质上是在学习“如何给操作系统下达正确指令”。不同发行版最大的差异通常集中在包管理器上常用命令本身差异很小。先理解这一点就不会因为换了一个发行版就觉得一切都要重学。系别常见发行版包管理命令服务管理RHEL 系RHEL、CentOS Stream、Rocky Linux、AlmaLinuxdnf/yumsystemctlDebian 系Debian、Ubuntu Serverapt/apt-getsystemctl其他openSUSE、Arch Linuxzypper/pacmansystemctl实际项目里如果公司使用的是兼容 RHEL 的发行版很多命令、目录结构和排错思路都可以直接复用。学习阶段先吃透一套后面迁移成本很低。1.2 命令格式和返回码是判断成败的起点大多数 Linux 命令遵循同一套格式command [选项] [参数]例如ls -l /etcls是命令-l是选项/etc是参数。短选项可以组合比如ls -lh等价于同时使用-l和-h以人类可读的方式显示文件大小。每条命令执行完成后都会返回一个退出码用变量$?查看。退出码为0表示成功非0表示失败。这是脚本编程和自动化排查的基础。ls /etc echo $?ls /nonexistent echo $?第一次执行后输出0第二次很可能输出2。写 Shell 脚本时可以通过判断退出码来决定是否继续执行。实际运维中很多自动化任务失败后没有及时检查退出码才会导致后续一连串问题。1.3 遇到不会的命令先按这个顺序找帮助Linux 自带帮助体系不需要每次都上网搜索。外部命令优先用man例如man ls。命令自带简短帮助用--help例如ls --help。Shell 内置命令用help例如help cd。查看命令类型用type例如type cd、type ls。man ls ls --help type cd help cdman手册还分章节。比如passwd既是普通用户修改密码的命令也是/etc/passwd文件的配置说明。直接输入man passwd看到的是命令手册想查文件格式要写man 5 passwd。学习阶段不需要记章节号但要形成“查文档先看章节”的意识。2. 零基础搭建 Linux 终端环境云主机、虚拟机还是 WSL2.1 学习环境方案对比学习 Linux 命令必须动手。只读教程很难建立手感至少需要一台可以随便折腾的 Linux 系统。常见环境有四种各有侧重点。环境优点缺点适合场景云服务器贴近生产环境支持 SSH 远程登录有公网 IP需要付费误操作影响范围大长期学习、部署练习、面试准备本地虚拟机免费支持快照回滚随意折腾启动占用资源网络配置略复杂零基础入门、破坏性实验WSLWindows 下启动快与本地文件交互方便与完整服务器在 systemd 等细节上有差异快速验证命令、日常开发Docker 容器秒级启动干净隔离默认不托管 systemd服务管理命令受限验证软件版本、跑最小服务零基础优先选择“本地虚拟机 云服务器”的组合。虚拟机用来做破坏性实验云服务器用来锻炼远程登录和真实部署习惯。只靠 WSL 或容器学习容易出现“本机能跑、服务器上不会”的情况。2.2 操作系统版本选择和安装配置学习阶段建议选择一个 RHEL 系发行版比如 Rocky Linux 9 或 AlmaLinux 9也可以选择 Ubuntu Server 22.04/24.04。两者都能覆盖绝大多数运维和面试场景。关键是选定一个后不要频繁切换先把一套命令体系练熟。安装时选择“最小化”安装即可不需要安装图形界面。云计算服务器本身就是无桌面环境越早习惯越有利。磁盘分区使用默认的 LVM 方案学习阶段不需要手动划分太细。网络配置在安装阶段选择自动获取地址即可。进入系统后用下面命令确认网络状态ip addr ip route show ping -c 4 223.5.5.5ip addr查看 IP 地址ip route show查看默认网关ping测试公网连通性。学习环境只要能联网安装软件包就可以继续。2.3 用 SSH 连接并确认 Shell 环境服务器安装完成后通常不会直接在屏幕上操作而是通过 SSH 从本机连接。学习阶段可以在虚拟机里直接登录但要尽早练习远程连接。ssh user192.168.1.10第一次连接会提示确认主机指纹输入yes后继续。登录成功后先做基础检查whoami pwd cat /etc/os-release hostnamectlwhoami查看当前用户pwd查看当前目录cat /etc/os-release查看发行版信息hostnamectl查看主机名和系统信息。这些命令是每次进入新服务器的“开场动作”。这里有一个重要习惯学习阶段可以创建普通用户并配合sudo提权不要始终使用 root。原因很简单生产环境通常禁止直接用 root 登录越早习惯普通用户工作流后面越不容易踩权限坑。3. Linux 核心命令体系按使用场景而不是字典顺序记忆3.1 文件和目录管理先搞清楚对象是文件还是目录Linux 遵循“一切皆文件”的设计思想目录本质也是文件。文件操作是最高频的操作类型。命令作用常见用法pwd显示当前工作目录pwdcd切换目录cd /var/logls列出目录内容ls -lhmkdir创建目录mkdir -p /data/apptouch创建空文件或更新时间戳touch file.txtcp复制文件或目录cp -a source destmv移动或重命名mv old.txt new.txtrm删除文件或目录rm -rf /tmp/testfile查看文件类型file /etc/passwdstat查看文件详细元数据stat /etc/hostname查看详细文件信息时ls -l是最常用的命令ls -l /etc/hostname输出第一列表示权限例如-rw-r--r--第一个字符-表示普通文件d表示目录l表示符号链接。后面依次是链接数、所有者、所属组、文件大小、修改时间和文件名。删除文件是非常危险的操作rm -rf一定要确认路径。建议在练习环境可以随意使用但生产环境尽量先mv到临时目录确认无误后再删除。3.2 查看文件内容日志和配置都靠这几条命令服务器上大量排错工作集中在“看文件”。配置文件要看日志文件要追大文件要翻页。命令适用场景cat查看小文件全部内容less分页查看大文件支持上下翻页head只看文件开头tail只看文件末尾支持实时追踪grep按关键字过滤行wc统计行数、单词数、字节数sort排序uniq去除相邻重复行cut按分隔符切列排查日志时最常用的是tail -f和grep的组合tail -f /var/log/messagesgrep -i error /var/log/messages | tail -20tail -f会持续输出新增内容适合观察服务启动过程或实时错误。grep -i表示忽略大小写管道|把 grep 的结果交给tail后再取最后 20 行。大文件不要直接用cat否则终端会被大量输出刷屏。应该用less按空格翻页按q退出按/搜索关键字。3.3 权限与用户Linux 系统安全的地基权限管理是 Linux 核心能力也是云服务器最容易出问题的地方。文件权限用r读、w写、x执行表示分为所有者、所属组、其他人三组。数字权限含义4r可读2w可写1x可执行chmod 750表示所有者拥有完整权限7所属组拥有读和执行权限5其他人没有权限0。用户管理常用命令sudo useradd -m -s /bin/bash zhangsan sudo passwd zhangsan sudo usermod -aG wheel zhangsan id zhangsanuseradd -m自动创建家目录-s /bin/bash设置默认 Shell。usermod -aG wheel把用户加入管理员组-aG表示追加到附加组不要省略-a否则用户可能被移出原有组。修改文件所有者和所属组使用chownsudo chown -R nginx:nginx /data/www-R表示递归修改目录下所有内容。权限和所有者错误会直接造成服务无法读写文件排查时优先用ls -l确认。修改 sudo 配置时不要直接编辑/etc/sudoers应使用visudo。该命令会检查语法错误避免把系统配置改坏。3.4 进程与系统资源看服务器是否健康服务启动后需要判断进程是否存在、系统资源是否充足。常用命令如下命令作用ps查看进程快照top动态查看进程和资源free查看内存使用uptime查看系统负载和运行时间df查看磁盘分区使用率du查看目录占用空间uname查看内核和架构信息常用示例ps -ef ps aux free -h df -h du -sh /var/log/*ps -ef和ps aux都能查看进程区别不大。ps aux会输出 CPU 和内存占用百分比排查资源占用时更直接。top是动态交互命令进入界面后按P按 CPU 排序按M按内存排序按q退出。学习初期不需要记全部参数记住打开后怎么排序即可。排查磁盘时df -h看整体使用率du -sh看具体目录大小。如果某个磁盘分区满了优先用du逐层找到大目录。3.5 网络命令不能只看 IP还要看端口和连通性云计算岗位离不开网络排查。最基础的是看 IP、测连通、查端口。命令作用ping测试网络连通性ip查看 IP 地址和路由ss查看 socket 和端口状态curl发送 HTTP 请求wget下载文件nc测试远程端口是否开放常用示例ping -c 4 223.5.5.5 ip addr show ip route show ss -tlnp curl -I http://127.0.0.1ss -tlnp是查看监听端口的首选命令。-t表示 TCP-l表示监听状态-n表示端口显示为数字-p显示对应进程。查看进程名通常需要 root 权限所以有时要加sudo。测试远程主机端口时可以这样nc -zv 192.168.1.10 22-z表示只扫描端口不发送数据-v显示详细信息。能通会返回succeeded不通会返回Connection refused或超时。3.6 软件包管理与服务管理安装和启动要能一条龙完成不同发行版安装软件的命令不同但思路一致先更新软件源再安装再启动服务。RHEL 系sudo dnf install -y nginx sudo systemctl enable --now nginx systemctl status nginxDebian 系sudo apt update sudo apt install -y nginx sudo systemctl enable --now nginxsystemctl enable --now nginx表示设置开机自启并立即启动。systemctl status nginx查看服务状态。如果服务启动失败会显示具体错误但更详细的日志要看 journaldsudo journalctl -u nginx --since today-u指定服务单元--since today只显示今天日志。服务管理是云计算运维面试高频点后面会单独展开。3.7 管道、重定向和文本三剑客命令组合才是真功夫单条命令能力有限Linux 的威力在于组合。管道|把左侧命令的标准输出交给右侧命令作为输入重定向则把输出写到文件。grep -n error /var/log/nginx/error.log awk {print $1, $9} /var/log/nginx/access.log | head sed -i s/127.0.0.1/0.0.0.0/g /tmp/test.confgrep负责按关键字找行awk负责按列切分sed负责查找替换。三者合称“文本三剑客”。重定向的几种写法echo hello /tmp/a.txt echo world /tmp/a.txt ls /nonexistent 2 /tmp/error.log覆盖写追加写2把标准错误单独重定向。脚本中如果希望同时保留标准输出和错误可以写 file 21。这里要注意一个经典坑ps -ef | grep nginx很可能会把 grep 自身也过滤出来。更稳妥的做法是使用pgrep -l nginx或者在管道后加grep -v grep。4. 用最小 Nginx 部署任务把核心命令串成完整闭环4.1 任务目标和环境假设单独学命令容易忘。建议用一个最小项目把文件、权限、进程、端口、服务、日志全部串起来。这里选择最经典的 Nginx 部署安装服务、写一个测试页面、访问并观察日志。环境假设为最小化安装的 Linux 服务器可以使用 Rocky Linux 9、AlmaLinux 9 或 Ubuntu Server。学习阶段可以在虚拟机或云服务器上操作。4.2 安装并启动 Nginx先更新软件源再安装 Nginx。RHEL 系sudo dnf install -y nginx sudo systemctl enable --now nginx systemctl status nginxDebian 系sudo apt update sudo apt install -y nginx sudo systemctl enable --now nginx systemctl status nginx如果系统启用了防火墙还需要放行 HTTP 端口。RHEL 系常用firewalldsudo firewall-cmd --add-servicehttp --permanent sudo firewall-cmd --reloadUbuntu 常用ufwsudo ufw allow 80/tcp确认端口监听状态ss -tlnp | grep :80看到LISTEN状态和 nginx 进程名说明服务已经启动。如果看不到检查安装是否成功、服务是否未启动、端口是否被占用。4.3 创建测试页面并调整权限Nginx 默认页面目录通常是/usr/share/nginx/htmlDebian 系可能是/var/www/html。这里以/usr/share/nginx/html为例。创建一个子目录和测试页面sudo mkdir -p /usr/share/nginx/html/example echo h1Linux Command Study/h1 | sudo tee /usr/share/nginx/html/example/index.html sudo chmod 755 /usr/share/nginx/html/example sudo chown -R root:root /usr/share/nginx/html/example这里使用sudo tee而不是sudo echo file。原因是sudo echo只提升 echo 的权限重定向仍然由当前 Shell 执行可能没有写权限。tee由 sudo 执行可以正常写入。chmod 755让目录所有者可读可写可执行其他人可读可执行。chown -R把目录归属设为 root避免普通用户随意修改页面。4.4 访问测试与日志观察先在本机用 curl 验证curl -I http://127.0.0.1/example/预期返回HTTP/1.1 200 OK。然后观察访问日志tail -f /var/log/nginx/access.log另开一个终端再次执行curl http://127.0.0.1/example/回到日志终端会看到一条以127.0.0.1开头的新记录。tail -f会实时输出新增日志这是排查线上问题时最常用的观察方式。统计访问日志中的 HTTP 状态码awk {print $9} /var/log/nginx/access.log | sort | uniq -c | sort -rn这条命令组合很典型awk提取第 9 列状态码sort排序uniq -c统计次数sort -rn按出现次数从大到小排列。看到大量200是正常的看到大量403或404就需要继续排查权限和路径。4.5 验证结果和清理思路完成后的验证清单可以这样写systemctl is-active nginx返回active。ss -tlnp | grep :80能看到监听端口。curl -I http://127.0.0.1/example/返回200 OK。tail -f /var/log/nginx/access.log能看到实时访问记录。浏览器访问http://服务器IP/example/能看到测试页面。如果页面返回 403优先看目录权限和 SELinux。RHEL 系默认开启 SELinux可能导致 Nginx 无法读取目录可以先用getenforce查看状态再检查上下文getenforce ls -ldZ /usr/share/nginx/html/example生产环境不要把 SELinux 直接关闭应该用正确的上下文规则解决。学习阶段如果不涉及生产可以先用命令理解现象。5. 高频报错排查现象 - 根因 - 检查 - 处理5.1 Command not found现象输入命令后提示command not found或-bash: xxx: command not found。可能原因软件没有安装、命令名拼写错误、命令所在路径不在PATH环境变量中、当前用户没有权限。检查顺序command -v nginx echo $PATH type nginx如果command -v没有输出说明系统找不到命令。先考虑安装软件包而不是手动复制二进制。比如sudo dnf install -y nginx如果是刚编译安装的程序通常放在/usr/local/bin或/opt/xxx/bin。可以先用绝对路径执行再把路径加入PATH。学习阶段不要频繁改动/etc/profile优先在用户家目录.bashrc中追加。5.2 Permission denied现象执行脚本提示Permission denied读写文件提示Permission denied。可能原因文件没有读或执行权限目录没有执行权限进程使用错误用户SELinux 或 AppArmor 拦截。检查顺序id ls -l /path/to/file mount | grep /data getenforce如果是普通脚本没有执行权限chmod x script.sh ./script.sh如果目录权限不足sudo chmod 755 /data如果确认权限但服务仍然访问失败需要检查 SELinux。学习阶段可以用getenforce查看但不要养成“关闭 SELinux”的坏习惯。5.3 端口被占用现象服务启动失败日志出现Address already in use或Bind: address already in use。可能原因端口已经被其他进程占用配置文件监听端口冲突旧服务残留。检查方式ss -tlnp | grep :80 sudo lsof -i :80找到占用端口的进程后根据业务决定是停止旧进程还是修改新服务端口。如果是自己启动的服务sudo systemctl stop old-service sudo systemctl start nginx如果 systemd 服务反复启动失败有时会进入 failed 状态sudo systemctl reset-failed nginx预防方式部署前先确认端口是否空闲特别是新接手服务器时不要盲目启动服务。5.4 磁盘空间不足现象写入文件提示No space left on device数据库或应用停止响应。可能原因磁盘分区使用率 100%inode 耗尽日志文件过大文件被删除但进程仍占用。检查顺序df -h df -i du -sh /var/log/*df -h看空间df -i看 inode。inode 满时即使空间有剩余也无法创建新文件。常见解决方式sudo journalctl --vacuum-time3d sudo apt clean sudo dnf clean all有时磁盘明明没有大目录但 df 显示满可能是文件已经被删除但仍有进程持有文件句柄。用lsof | grep deleted查找这种场景需要重启相关进程或服务才能释放空间。5.5 中文乱码和 SSH 登录慢中文乱码通常和系统语言环境有关。检查locale file /path/to/chinese.txt如果系统 locale 没有包含 UTF-8可以临时设置export LANGen_US.UTF-8如果是文件编码本身不是 UTF-8可以转换编码iconv -f GBK -t UTF-8 old.txt new.txtSSH 登录很慢时优先检查 DNS 反向解析。常见优化sudo vim /etc/ssh/sshd_config在配置中确认或加入UseDNS no GSSAPIAuthentication no修改后重启 sshdsudo systemctl restart sshd注意修改 SSH 配置前先备份并保持当前连接不要断开防止配置错误导致无法登录。6. 云计算面试和日常运维最容易考到的命令细节6.1 systemctl 要形成肌肉记忆服务管理是云计算岗位的必考点。systemctl常用子命令如下命令作用systemctl start nginx启动服务systemctl stop nginx停止服务systemctl restart nginx重启服务systemctl reload nginx重新加载配置不中断服务systemctl enable nginx设置开机自启systemctl disable nginx取消开机自启systemctl status nginx查看服务状态systemctl is-active nginx只看是否 activereload和restart的区别很关键。reload会平滑重读配置适合 Nginx、SSH 这类可以热加载的服务restart会完全停止再启动可能造成短暂业务中断。修改配置文件后应优先考虑reload。如果用户自定义 systemd 服务unit 文件通常放在/etc/systemd/system/。修改 unit 文件后必须执行sudo systemctl daemon-reload6.2 查看端口不能只会 netstat很多老教程还在讲netstat但在新系统里这个命令可能没有预装。ss是新一代 socket 查看工具命令更直接。ss -tlnp ss -tan | head -20 ss -s-s会输出当前系统 socket 统计包括 TCP 连接总数、TIME_WAIT 数量等。排查大量连接堆积时非常有用。需要看进程和端口对应关系时sudo ss -tlnp | grep :80输出最后列会显示users:((nginx,pid12345,fd6))直接给出了进程名和 PID。6.3 排查进程和负载要按顺序看面试中常见提问服务器负载很高怎么排查建议顺序是先看负载uptime