# 六、淘汰命令和替代应用

## RHEL 9+ 运维常用命令现代化替代指南

本指南总结了 Red Hat Enterprise Linux（RHEL）9+（包括 RHEL 9.0-9.4）中运维管理员常用的已被弃用或不推荐的命令及其现代替代工具，聚焦网络管理、文件传输、服务管理、防火墙、容器和日志管理等领域。内容筛选了 `ifconfig`、`netstat` 等高频命令的替代，补充了运维核心工具（如 `journalctl`），澄清了 `mount -a` 与 `systemctl daemon-reload` 的误解，提供操作步骤、实践脚本和故障排查。指南适合 RHEL 运维工程师、RHCE 考生和系统管理员，帮助快速适应 RHEL 9+ 环境。

**目标受众**：Linux 运维工程师、RHCE 考生、系统管理员\
**适用版本**：RHEL 9+（含 CentOS Stream 9、AlmaLinux 9、Rocky Linux 9）\
**更新日期**：2025-05-16

***

### 命令速查表

| 弃用命令               | 替代命令                              | 说明          |
| ------------------ | --------------------------------- | ----------- |
| `ifconfig`         | `ip address` / `ip addr` / `ip a` | 查看/配置网络接口   |
| `netstat`          | `ss -t` / `ss -l` / `ss -tulnp`   | 查看网络连接和监听端口 |
| `netstat -r`       | `ip route show`                   | 查看路由表       |
| `netstat -i`       | `ip -s link`                      | 查看接口统计      |
| `route`            | `ip route`                        | 管理路由表       |
| `arp`              | `ip neighbor` / `ip n`            | 管理 ARP 表    |
| `scp`              | `rsync` / `sftp`                  | 安全文件传输      |
| `egrep`            | `grep -E`                         | 扩展正则表达式搜索   |
| `fgrep`            | `grep -F`                         | 固定字符串搜索     |
| `service`          | `systemctl`                       | 服务管理        |
| `chkconfig`        | `systemctl enable` / `disable`    | 服务启停配置      |
| `iptables`         | `nftables` / `firewall-cmd`       | 防火墙规则管理     |
| `docker`           | `podman`                          | 容器管理        |
| `logger`           | `journalctl`                      | 日志记录与查看     |
| `useradd -p`       | `useradd` + `passwd`              | 用户创建与密码设置   |
| `init` / `telinit` | `systemctl`                       | 系统初始化与运行级别  |

***

### 📖 目录

1. 🧰 背景与弃用原因
2. 🌐 网络管理
   * 2.1 从 `ifconfig` 到 `ip`
   * 2.2 从 `netstat` 到 `ss`
   * 2.3 从 `route` 到 `ip route`
   * 2.4 从 `arp` 到 `ip neighbor`
3. 📁 文件传输：从 `scp` 到 `rsync`/`sftp`
4. 🔍 文本搜索：从 `egrep`/`fgrep` 到 `grep -E`/`grep -F`
5. ⚙️ 服务管理：从 `service`/`chkconfig` 到 `systemctl`
6. 🔥 防火墙管理：从 `iptables` 到 `nftables`/`firewall-cmd`
7. 🐳 容器管理：从 `docker` 到 `podman`
8. 📜 日志管理：从 `logger` 到 `journalctl`
9. 👤 用户管理：从 `useradd -p` 到 `useradd` + `passwd`
10. 🔧 系统初始化：从 `init`/`telinit` 到 `systemctl`
11. ⚠️ 澄清：`mount -a` 与 `systemctl daemon-reload`
12. 🛠️ 实践实验室与每日任务
13. 🔍 故障排查
14. 💡 RHEL 9+ 运维提示

***

### 🧰 1. 背景与弃用原因

**用途**：传统命令（如 `ifconfig`、`netstat`）因功能有限、性能较低，在 RHEL 9+ 中被现代工具取代。\
**RHCE 相关性**：高（考试要求掌握 `ip`、`ss`、`nftables`、`podman`）。\
**背景**：RHEL 9 基于 CentOS Stream 9，内核 5.14，强调 NetworkManager、Systemd 和 Podman。

#### 1.1 弃用原因

* **功能限制**：`ifconfig`、`netstat` 不支持现代网络（如容器网络、IPv6）。
* **性能问题**：传统工具解析慢，输出复杂。
* **维护停滞**：`net-tools`、`iptables` 维护减少，`iproute2`、`nftables` 更活跃。
* **RHEL 9 默认**：移除 `net-tools`，优先 `iproute2`、`ss`、`podman`。

#### 1.2 替代工具优势

* **iproute2**：统一管理接口、路由、ARP，支持复杂网络。
* **ss**：高效 socket 解析，输出清晰。
* **nftables**：统一 IPv4/IPv6，规则简洁。
* **podman**：无守护进程，兼容 Docker，集成 SELinux。
* **journalctl**：集中化日志管理，适合运维。

**场景示例**：在 RHEL 9 服务器上配置网络和服务，使用 `nmcli` 和 `systemctl`。\
**每日一题**：为什么 `net-tools` 被弃用？

* **答案**：功能有限，维护停滞，`iproute2` 更高效。

***

### 🌐 2. 网络管理

#### 2.1 从 `ifconfig` 到 `ip`

**用途**：查看和配置网络接口。\
**弃用原因**：`ifconfig` 不支持 VLAN、IPv6，输出冗长。\
**替代**：`ip address`/`ip addr`/`ip a`。\
**示例**：

```bash
ip addr show
ip addr add 192.168.1.100/24 dev ens3
nmcli con add type ethernet ifname ens3 con-name ens3 ipv4.method manual ipv4.addresses 192.168.1.100/24
```

**优势**：支持复杂网络，与 `nmcli` 集成。\
**RHCE 任务**：配置静态 IP 并验证连通性。

#### 2.2 从 `netstat` 到 `ss`

**用途**：监控网络连接和监听端口。\
**弃用原因**：`netstat` 性能低，输出复杂。\
**替代**：`ss -t`/`ss -l`/`ss -tulnp`。\
**示例**：

```bash
ss -tulnp  # 列出监听端口
ss -t state established  # 查看活跃 TCP 连接
ip -s link  # 替代 netstat -i，查看接口统计
ip route show  # 替代 netstat -r，查看路由表
```

**优势**：快速解析 socket，支持过滤，输出清晰。\
**RHCE 任务**：检查 HTTP 服务（80 端口）是否监听。

#### 2.3 从 `route` 到 `ip route`

**用途**：管理路由表。\
**弃用原因**：`route` 不支持策略路由。\
**替代**：`ip route`。\
**示例**：

```bash
ip route show
ip route add default via 192.168.1.1
nmcli con mod ens3 ipv4.gateway 192.168.1.1
```

**优势**：支持动态路由，与 `nmcli` 集成。\
**RHCE 任务**：配置默认网关。

#### 2.4 从 `arp` 到 `ip neighbor`

**用途**：管理 ARP 表（IP-MAC 映射）。\
**弃用原因**：`arp` 功能单一。\
**替代**：`ip neighbor`/`ip n`。\
**示例**：

```bash
ip neighbor show
ip n add 192.168.1.100 lladdr 00:11:22:33:44:55 dev ens3
```

**优势**：统一在 `iproute2`，支持脚本化。\
**RHCE 任务**：排查 ARP 表问题。

***

### 📁 3. 文件传输：从 `scp` 到 `rsync`/`sftp`

**用途**：安全传输文件到远程服务器。\
**弃用原因**：`scp` 协议安全性较低，功能单一。\
**替代**：`rsync`/`sftp`。\
**示例**：

```bash
rsync -av /var/log/messages linuxmi@192.168.174.170:/tmp/backups/
sftp linuxmi@192.168.174.170
# 在 sftp 提示符下
put /var/log/messages /tmp/backups/
```

**优势**：`rsync` 支持增量同步，`sftp` 提供交互式安全传输。\
**RHCE 任务**：备份日志到远程服务器。

***

### 🔍 4. 文本搜索：从 `egrep`/`fgrep` 到 `grep -E`/`grep -F`

**用途**：搜索日志或配置文件中的文本。\
**弃用原因**：`egrep`/`fgrep` 是 `grep` 别名，冗余。\
**替代**：`grep -E`（扩展正则表达式）/`grep -F`（固定字符串）。\
**示例**：

```bash
grep -E "error|warn" /var/log/messages
grep -F "kernel" /var/log/messages
```

**优势**：统一 `grep` 工具，减少学习成本。\
**RHCE 任务**：分析服务日志中的错误信息。

***

### ⚙️ 5. 服务管理：从 `service`/`chkconfig` 到 `systemctl`

**用途**：管理服务启停和开机自启。\
**弃用原因**：`service`/`chkconfig` 基于 SysVinit，不适应 Systemd。\
**替代**：`systemctl`。\
**示例**：

```bash
systemctl start httpd
systemctl enable httpd
systemctl status httpd
```

**优势**：Systemd 提供强大服务管理和依赖处理。\
**RHCE 任务**：配置服务开机自启。

***

### 🔥 6. 防火墙管理：从 `iptables` 到 `nftables`/`firewall-cmd`

**用途**：配置防火墙规则，控制网络访问。\
**弃用原因**：`iptables` 性能低，规则复杂。\
**替代**：`nftables`（推荐）或 `firewall-cmd`（firewalld 管理）。\
**示例**：

```bash
# 使用 nftables
nft add table inet my_table
nft add chain inet my_table my_chain
nft add rule inet my_table my_chain tcp dport 80 accept
# 使用 firewalld
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
```

**优势**：`nftables` 统一 IPv4/IPv6，`firewall-cmd` 简化管理。\
**RHCE 任务**：开放服务端口。\
**注意**：RHEL 9 支持 `iptables` 兼容模式，但推荐 `nftables`。

***

### 🐳 7. 容器管理：从 `docker` 到 `podman`

**用途**：部署和管理容器化应用。\
**弃用原因**：`docker` 需守护进程，RHEL 9 默认不支持。\
**替代**：`podman` 4.x。\
**示例**：

```bash
podman run -d -p 8080:80 nginx
podman ps
```

**优势**：无守护进程，兼容 Docker，集成 SELinux。\
**RHCE 任务**：部署 Nginx 容器。

***

### 📜 8. 日志管理：从 `logger` 到 `journalctl`

**用途**：记录和查看系统/服务日志。\
**弃用原因**：`logger` 仅记录，功能单一，Systemd 日志更全面。\
**替代**：`journalctl`。\
**示例**：

```bash
journalctl -u httpd
journalctl --since "2025-05-16"
```

**优势**：集中化日志管理，支持过滤和持久化。\
**RHCE 任务**：排查服务日志。

***

### 👤 9. 用户管理：从 `useradd -p` 到 `useradd` + `passwd`

**用途**：创建用户并设置密码。\
**弃用原因**：`useradd -p` 使用明文密码，不安全。\
**替代**：`useradd` + `passwd`。\
**示例**：

```bash
useradd -m -s /bin/bash newuser
passwd newuser
```

**优势**：更安全，符合运维规范。\
**RHCE 任务**：创建用户并配置登录。

***

### 🔧 10. 系统初始化：从 `init`/`telinit` 到 `systemctl`

**用途**：管理系统初始化和运行级别。\
**弃用原因**：`init`/`telinit` 是 System V 工具，RHEL 9 使用 Systemd。\
**替代**：`systemctl`。\
**示例**：

```bash
systemctl reboot
systemctl get-default
systemctl set-default multi-user.target
```

**advantage**：Systemd 提供现代初始化和运行级别管理。\
**RHCE 任务**：更改系统运行级别。

***

### ⚠️ 11. 澄清：`mount -a` 与 `systemctl daemon-reload`

**误解**：`systemctl daemon-reload` 不替代 `mount -a`。\
**功能**：

* `mount -a`：挂载 `/etc/fstab` 中定义的所有文件系统。

  ```bash
  mount -a
  df -h
  ```
* `systemctl daemon-reload`：重新加载 Systemd 配置文件。

  ```bash
  systemctl daemon-reload
  systemctl restart httpd
  ```

  **用途**：`mount -a` 用于验证 `fstab`，`systemctl daemon-reload` 用于更新服务配置。\
  **RHCE 任务**：验证挂载点或重载服务。

***

### 🛠️ 12. 实践实验室与每日任务

**用途**：通过实践巩固 RHEL 9 常用工具。\
**RHCE 相关性**：高（模拟考试场景）。

#### 12.1 实践实验室

* **任务 1：网络与防火墙**：
  * 使用 `nmcli` 配置静态 IP。
  * 使用 `firewall-cmd` 开放 80 端口。
* **任务 2：服务与容器**：
  * 使用 `systemctl` 配置 `httpd` 开机自启。
  * 使用 `podman` 运行 Nginx 容器。
* **任务 3：日志与用户**：
  * 使用 `journalctl` 排查 `httpd` 日志。
  * 使用 `useradd` 和 `passwd` 创建用户。

#### 12.2 每日任务

* **Day 1**：
  * 运行 `ip addr` 和 `ss -tulnp`，替换 `ifconfig` 和 `netstat`。
* **Day 2**：
  * 使用 `podman` 部署容器，检查日志：`journalctl -u podman`。
* **每日一题**：如何查看服务日志？
  * **答案**：`journalctl -u <service>`。

**实践脚本**：

```bash
#!/bin/bash
# 网络配置
nmcli con add type ethernet ifname ens3 con-name ens3 ipv4.method manual ipv4.addresses 192.168.1.100/24
ip route show
ss -tulnp
# 防火墙
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --reload
# 服务管理
systemctl enable httpd
systemctl start httpd
# 容器
podman run -d -p 8080:80 nginx
# 日志
journalctl -u httpd --since "2025-05-16"
# 用户
useradd -m -s /bin/bash newuser
passwd newuser
```

***

### 🔍 13. 故障排查

**用途**：解决 RHEL 9 运维常见问题。\
**RHCE 相关性**：高（考试排障）。

* **问题 1：`ip addr` 无输出**：
  * **排查**：检查 NetworkManager。

    ```bash
    nmcli con show
    systemctl status NetworkManager
    ```
  * **解决**：重启服务。

    ```bash
    systemctl restart NetworkManager
    ```
* **问题 2：防火墙规则未生效**：
  * **排查**：检查规则。

    ```bash
    nft list ruleset
    firewall-cmd --list-all
    ```
  * **解决**：重新加载。

    ```bash
    nft flush ruleset
    nft -f /etc/nftables.conf
    firewall-cmd --reload
    ```
* **问题 3：`podman` 容器启动失败**：
  * **排查**：检查日志。

    ```bash
    podman logs <container>
    journalctl -u podman
    ```
  * **解决**：检查 SELinux（临时）。

    ```bash
    setenforce 0
    ```

**场景示例**：`ss` 未显示 80 端口，检查 `httpd` 服务。\
**每日一题**：如何调试 SSH 连接？

* **答案**：`ssh -v user@host`。

***

### 💡 14. RHEL 9+ 运维提示

**用途**：提升 RHEL 9 运维效率。\
**RHCE 相关性**：高（实战能力）。

* **NetworkManager 集成**：

  ```bash
  nmcli con mod ens3 ipv4.dns "8.8.8.8"
  nmcli con up ens3
  ```
* **实时监控**：

  ```bash
  watch -n 1 "ss -tulnp"
  ```
* **Ansible 自动化**：

  ```yaml
  - name: Configure IP
    nmcli:
      conn_name: ens3
      ifname: ens3
      type: ethernet
      ip4: 192.168.1.100/24
      state: present
  ```
* **SELinux 兼容**：

  ```bash
  semanage port -a -t http_port_t -p tcp 8080
  ```

**场景示例**：自动化配置网络和服务。\
**每日一题**：如何开放防火墙端口？

* **答案**：`firewall-cmd --add-port=80/tcp --permanent; firewall-cmd --reload`。

***

### 使用说明

* **下载**：保存为 `rhel9-common-commands-guide.md`。
* **查看**：使用 VS Code、Typora 或文本编辑器。
* **实践**：在 RHEL 9 虚拟机上运行脚本，替换传统命令。
* **RHCE 提示**：重点掌握 `nmcli`、`ss`、`nftables`、`podman`，考试高频。
* **备注**：如需旧工具，安装：

  ```bash
  dnf install -y net-tools iptables
  ```
