在云计算运维和开发岗位中,Linux 常用命令不是“会一点”就够,而是要能独立完成登录、文件操作、权限调整、服务启停、日志排查这一整套动作。很多零基础同学刚开始学 Linux 时,最容易陷入两个误区:一是只背命令不背使用场景,二是只会在本地图形界面里点鼠标,不会通过终端处理问题。真正进入服务器环境后,看到的往往是一个没有桌面的 Shell 窗口,所有操作都靠命令完成。因此,把 Linux 系统操作和核心命令当成一门可验证、可复现的工程技能来学,比记住几十条孤立命令更有价值。
下面按“理解系统 -> 搭建环境 -> 命令体系 -> 小项目闭环 -> 报错排查 -> 面试补强 -> 学习路径”的顺序展开。读完以后,你可以建立一套自己的命令学习框架:不管是 RHEL 系还是 Debian 系,都能快速定位文件、查看进程、管理服务、分析日志,并把常见报错按链路找到根因。
1. 先理解 Linux 命令背后的系统模型,别从死记硬背开始
1.1 Linux 发行版、内核与 Shell 到底在说什么
Linux 严格来说只是操作系统内核,负责进程调度、内存管理、文件系统、网络协议栈等底层能力。用户平时接触到的 CentOS、Ubuntu、Rocky Linux 等,其实是“Linux 发行版”:在同一个内核之上,打包了 GNU 工具集、包管理器、系统服务、Shell 和默认配置,形成一个可以直接安装使用的操作系统。
Shell 是用户与内核之间的命令解释器。你在终端里输入ls -l /etc,Shell 负责解析这条命令,找到/usr/bin/ls这个程序并执行它,再把结果打印回终端。所以学习 Linux 命令,本质上是在学习“如何给操作系统下达正确指令”。
不同发行版最大的差异通常集中在包管理器上,常用命令本身差异很小。先理解这一点,就不会因为换了一个发行版就觉得一切都要重学。
| 系别 | 常见发行版 | 包管理命令 | 服务管理 |
|---|---|---|---|
| RHEL 系 | RHEL、CentOS Stream、Rocky Linux、AlmaLinux | dnf/yum | systemctl |
| Debian 系 | Debian、Ubuntu Server | apt/apt-get | systemctl |
| 其他 | openSUSE、Arch Linux | zypper/pacman | systemctl |
实际项目里,如果公司使用的是兼容 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 终端环境:云主机、虚拟机还是 WSL
2.1 学习环境方案对比
学习 Linux 命令必须动手。只读教程很难建立手感,至少需要一台可以随便折腾的 Linux 系统。常见环境有四种,各有侧重点。
| 环境 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| 云服务器 | 贴近生产环境,支持 SSH 远程登录,有公网 IP | 需要付费,误操作影响范围大 | 长期学习、部署练习、面试准备 |
| 本地虚拟机 | 免费,支持快照回滚,随意折腾 | 启动占用资源,网络配置略复杂 | 零基础入门、破坏性实验 |
| WSL | Windows 下启动快,与本地文件交互方便 | 与完整服务器在 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 user@192.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 | 显示当前工作目录 | pwd |
cd | 切换目录 | cd /var/log |
ls | 列出目录内容 | ls -lh |
mkdir | 创建目录 | mkdir -p /data/app |
touch | 创建空文件或更新时间戳 | touch file.txt |
cp | 复制文件或目录 | cp -a source dest |
mv | 移动或重命名 | mv old.txt new.txt |
rm | 删除文件或目录 | rm -rf /tmp/test |
file | 查看文件类型 | file /etc/passwd |
stat | 查看文件详细元数据 | 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(执行)表示,分为所有者、所属组、其他人三组。
| 数字 | 权限 | 含义 |
|---|---|---|
| 4 | r | 可读 |
| 2 | w | 可写 |
| 1 | x | 可执行 |
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,否则用户可能被移出原有组。
修改文件所有者和所属组使用chown:
sudo 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查看服务状态。如果服务启动失败,会显示具体错误,但更详细的日志要看 journald:
sudo 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 2>&1。
这里要注意一个经典坑: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 系常用firewalld:
sudo firewall-cmd --add-service=http --permanent sudo firewall-cmd --reloadUbuntu 常用ufw:
sudo ufw allow 80/tcp确认端口监听状态:
ss -tlnp | grep :80看到LISTEN状态和 nginx 进程名,说明服务已经启动。如果看不到,检查安装是否成功、服务是否未启动、端口是否被占用。
4.3 创建测试页面并调整权限
Nginx 默认页面目录通常是/usr/share/nginx/html,Debian 系可能是/var/www/html。这里以/usr/share/nginx/html为例。
创建一个子目录和测试页面:
sudo mkdir -p /usr/share/nginx/html/example echo '<h1>Linux 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-time=3d sudo apt clean sudo dnf clean all有时磁盘明明没有大目录,但 df 显示满,可能是文件已经被删除,但仍有进程持有文件句柄。用lsof | grep deleted查找,这种场景需要重启相关进程或服务才能释放空间。
5.5 中文乱码和 SSH 登录慢
中文乱码通常和系统语言环境有关。检查:
locale file /path/to/chinese.txt如果系统 locale 没有包含 UTF-8,可以临时设置:
export LANG=en_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修改后重启 sshd:
sudo 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 | 只看是否 active |
reload和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",pid=12345,fd=6)),直接给出了进程名和 PID。
6.3 排查进程和负载要按顺序看
面试中常见提问:服务器负载很高,怎么排查?
建议顺序是:
- 先看负载:`uptime