跳转至

9. 常用 Linux 命令与技巧

本章系统介绍 RHEL 9 运维场景中高频使用的命令与操作技巧,涵盖文件管理、文本处理、软件管理、服务与进程监控等核心方向。本章作为综合参考章节,供读者在后续实操中随时查阅。所有命令均在 linuxdc(RHEL 9,IP 192.168.1.100)环境下验证。


9.1 前提条件

  • RHEL 9 已完成全部基础配置(第 1 至第 8 章)。
  • 通过 SecureCRT(SSH 端口 2222)以 ops 用户、密钥认证方式登录 192.168.1.100,执行 sudo -i 切换至 root 环境。

9.2 Shell 基础

9.2.1 获取帮助

遇到不熟悉的命令,优先查阅本地文档,而非依赖搜索引擎:

man ls              # 完整手册页(按 q 退出,/ 搜索)
ls --help           # 简要帮助
info coreutils      # GNU Coreutils 详细文档

9.2.2 常用快捷键

快捷键 功能
Ctrl + C 中断当前命令
Ctrl + Z 挂起当前进程(发送到后台)
Ctrl + D 退出当前 Shell
Ctrl + L 清屏
Ctrl + R 反向搜索历史命令
Tab 自动补全命令、路径或参数
!! 重复执行上一条命令
!$ 引用上一条命令的最后一个参数
Ctrl + A 光标移到行首
Ctrl + E 光标移到行尾

9.2.3 创建与运行脚本

# 创建脚本
cat > /tmp/sysinfo.sh << 'EOF'
#!/bin/bash
echo "Hostname : $(hostname)"
echo "IP       : $(ip -4 -brief addr show ens33 | awk '{print $3}')"
echo "Date     : $(date)"
echo "Uptime   : $(uptime -p)"
EOF

chmod +x /tmp/sysinfo.sh
/tmp/sysinfo.sh

Shebang 规范

脚本第一行 #!/bin/bash 明确指定解释器。生产脚本推荐使用 #!/usr/bin/env bash 以提高可移植性,避免不同系统上 bash 路径不同导致的问题。


9.3 文件与目录管理

9.3.1 基础操作

ls -lah /etc                        # 列出目录内容(含隐藏文件,人类可读大小)
pwd                                  # 显示当前路径
mkdir -p /opt/app/conf               # 递归创建多级目录
cp -a /etc/ssh /tmp/ssh-bak          # 保留属性复制(-a 等同于 -dpR)
mv /tmp/old-name /tmp/new-name       # 重命名或移动
rm -rf /tmp/test-dir                 # 递归删除(操作前务必确认路径)
ln -s /usr/local/app /app            # 创建软链接

rm -rf 操作规范

执行前先用 ls 确认目标路径,或用 echo rm -rf <path> 预览命令再执行,养成习惯。

9.3.2 查找文件

# find:功能最强,实时扫描
find /etc -name "*.conf" -type f               # 查找所有 .conf 文件
find /var/log -mtime -1 -name "*.log"          # 查找 1 天内修改的日志
find / -perm /4000 -type f 2>/dev/null         # 查找所有 SUID 文件(安全审计必做)

# which / whereis:定位可执行文件
which python3
whereis sshd

9.3.3 文件内容查看

cat /etc/os-release                  # 查看完整文件
less /var/log/messages               # 分页查看(/ 搜索,q 退出)
head -20 /var/log/secure             # 查看前 20 行
tail -50 /var/log/messages           # 查看最后 50 行
tail -f /var/log/messages            # 实时追踪新增内容

9.4 文本处理三件套

文本处理是 Linux 运维的核心技能,是日志分析、配置提取的基础工具。

9.4.1 grep — 搜索与过滤

grep "error" /var/log/messages                       # 搜索关键词
grep -i "failed" /var/log/secure                     # 忽略大小写
grep -r "PermitRootLogin" /etc/ssh/                  # 递归搜索目录
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"    # 过滤注释和空行(查看生效配置)
grep -n "Port" /etc/ssh/sshd_config                  # 显示匹配行行号
grep -c "Failed" /var/log/secure                     # 统计匹配行数

9.4.2 awk — 字段提取与处理

# 提取 /etc/passwd 的用户名和 UID
awk -F: '{print $1, $3}' /etc/passwd

# 过滤 UID >= 1000 的普通用户
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

# 统计文件行数
awk 'END {print NR}' /var/log/messages

# 计算第 3 列的总和
awk '{sum += $3} END {print sum}' /tmp/data.txt

9.4.3 sed — 流编辑与替换

# 将文件中的字符串替换(-i.bak 备份原文件)
sed -i.bak 's/PermitRootLogin yes/PermitRootLogin no/g' /etc/ssh/sshd_config

# 删除所有注释行和空行(输出到屏幕,不修改文件)
sed '/^[[:space:]]*#/d; /^[[:space:]]*$/d' /etc/ssh/sshd_config

# 取消注释某行
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config

9.4.4 其他实用工具

cut -d: -f1,3 /etc/passwd           # 按分隔符提取字段
sort -k3 -n /tmp/data.txt           # 按第 3 字段数字排序
uniq -c /tmp/ips.txt                # 统计重复行出现次数
wc -l /var/log/messages             # 统计文件行数
tr 'a-z' 'A-Z' < /tmp/input.txt    # 字母大小写转换

9.5 软件管理(dnf)

dnf 是 RHEL 9 的官方包管理器,支持模块化安装与事务回滚。

# 搜索与查询
dnf search nginx                    # 搜索软件包
dnf info nginx                      # 查看详细信息
dnf provides /usr/sbin/sshd         # 查询哪个包提供了某个文件
dnf list installed                  # 列出所有已安装包
dnf list updates                    # 列出可用更新

# 安装与卸载
dnf install -y nginx                # 安装(-y 自动确认)
dnf remove -y nginx                 # 卸载
dnf autoremove                      # 移除孤立依赖包

# 更新
dnf check-update                    # 检查可用更新(不安装)
dnf update -y                       # 更新所有包
dnf update -y --security            # 仅安装安全更新(推荐生产环境)

# 事务历史与回滚
dnf history                         # 查看操作历史
dnf history info <ID>               # 查看某次操作详情
dnf history undo <ID>               # 回滚某次操作

# AppStream 模块流
dnf module list                     # 列出所有模块
dnf module list nodejs              # 查看 nodejs 可用版本
dnf module install nodejs:20        # 安装指定模块流版本

9.6 服务管理(systemctl)

systemctl start sshd                # 启动服务
systemctl stop sshd                 # 停止服务
systemctl restart sshd              # 重启服务
systemctl reload sshd               # 重新加载配置(不重启进程)
systemctl enable sshd               # 设置开机自启
systemctl disable sshd              # 禁用开机自启
systemctl enable --now sshd         # 启用并立即启动(最常用)
systemctl status sshd               # 查看详细状态
systemctl is-active sshd            # 查询是否运行(脚本中使用)
systemctl list-units --state=failed # 列出所有失败的 unit

9.7 进程管理

ps aux                              # 查看所有进程快照
ps -ef --forest                     # 树形显示进程关系
pgrep -l sshd                       # 按名称查找进程 PID
top                                 # 交互式监控(M 按内存排序,q 退出)

# 终止进程
kill <PID>                          # 发送 SIGTERM(优雅停止)
kill -9 <PID>                       # 发送 SIGKILL(强制终止,谨慎使用)
pkill -f "python3 /opt/app"         # 按命令模式终止进程

# 后台执行
nohup /opt/app/run.sh &             # 后台运行,不受 Shell 退出影响
jobs                                # 查看后台任务列表

9.8 系统状态监控

# 磁盘
df -hT                              # 文件系统使用情况(含类型)
du -sh /var/log/*                   # 各子目录大小
lsblk                               # 块设备与挂载关系

# 内存
free -h                             # 内存使用(含 swap)
vmstat 1 5                          # 每秒采样 5 次,观察内存与 CPU 压力

# CPU / 负载
uptime                              # 运行时间与 1/5/15 分钟负载
nproc                               # 逻辑 CPU 核心数

# 系统信息
uname -r                            # 内核版本
hostnamectl                         # 主机名、OS、内核详细信息
timedatectl                         # 时区与时间同步状态

9.9 日志查看(journalctl)

journalctl -u sshd                  # 查看 sshd 的全部日志
journalctl -u sshd -f               # 实时追踪 sshd 日志
journalctl --since "1 hour ago"     # 最近 1 小时的系统日志
journalctl -p err -b                # 本次启动的 error 级别日志
journalctl --disk-usage             # 日志占用磁盘空间

# 传统日志文件
tail -f /var/log/secure             # 认证与安全日志(实时)
tail -f /var/log/messages           # 系统通用日志(实时)

9.10 实践任务

  1. 登录 linuxdc(SecureCRT 端口 2222,ops 用户,密钥认证,sudo -i 切换 root)。
  2. 执行系统状态全览:

    hostnamectl
    ip addr show ens33
    df -hT
    free -h
    uptime
    timedatectl
    
  3. 使用 grep 提取 /etc/ssh/sshd_config 的生效配置(去除注释和空行):

    grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"
    
  4. 使用 awk 提取 /etc/passwd 中 UID ≥ 1000 的用户名:

    awk -F: '$3 >= 1000 {print $1}' /etc/passwd
    
  5. 安装 tree 并查看 /etc/ssh/ 目录结构:

    dnf install -y tree
    tree /etc/ssh/
    
  6. 查看 sshd 服务状态,并查看最近 20 条日志:

    systemctl status sshd
    journalctl -u sshd -n 20
    

9.11 自测问题

Q1:如何查看一个已安装命令来自哪个 RPM 包?

rpm -qf $(which sshd)
# 或
dnf provides /usr/sbin/sshd

Q2:tail -fjournalctl -f 有什么区别?

tail -f 追踪传统文本文件的新增内容;journalctl -f 追踪 systemd journal(结构化日志),支持按服务名、优先级、时间范围等过滤,是 RHEL 9 推荐的日志查看方式。

Q3:dnf update -ydnf update -y --security 有什么区别?

dnf update -y 更新所有可用包(含功能更新);dnf update -y --security 仅安装标记为安全修复的更新,变更范围更小、风险更低,是生产环境的推荐方式。


9.12 章节总结

本章构建了 Linux 命令行运维的核心工具集:文件管理、文本处理三件套(grep / awk / sed)、软件管理(dnf)、服务管理(systemctl)、进程监控与日志查看(journalctl)。这些命令将贯穿后续所有运维操作,是每位 Linux 运维工程师的基础技能库。