# 5. fdupes 检测和删除重复文件

## RHEL 8 使用 fdupes 处理 Samba 共享盘重复文件

### fdupes 简介

`fdupes` 是一个轻量、强大的命令行工具，用于在 Linux 系统（如 RHEL 8）上查找和删除重复文件。它通过哈希校验（默认 MD5，可选 SHA1）比较文件内容，确保准确识别重复文件，避免误删。特点包括：

* **高效**：多线程扫描，适合处理 Samba 共享盘上的海量文件。
* **灵活**：支持递归扫描、交互删除、硬链接替换。
* **简单**：无需复杂配置，开源免费，RHEL 8 兼容。

### 注册 RHEL 8 系统

在 RHEL 8 上安装软件（如 `fdupes`）需先注册系统以访问 Red Hat 和 EPEL 仓库。

#### 步骤

1. **注册系统**：

   ```bash
   sudo subscription-manager register --name="Server-01-Prod" --username=your_username --password=your_password
   ```

   * `--name`：设置唯一系统名称，便于在 Red Hat Customer Portal（[https://access.redhat.com/management/systems）仪表盘区分多台机器。](https://access.redhat.com/management/systems%EF%BC%89%E4%BB%AA%E8%A1%A8%E7%9B%98%E5%8C%BA%E5%88%86%E5%A4%9A%E5%8F%B0%E6%9C%BA%E5%99%A8%E3%80%82)
   * 替代方法（企业用户）：使用激活密钥：

     ```bash
     sudo subscription-manager register --org=ORG_ID --activationkey=KEY_NAME
     ```
   * 验证：`sudo subscription-manager identity`。
2. **附加订阅**：

   ```bash
   sudo subscription-manager attach --auto
   ```

   * 验证：`sudo subscription-manager list --consumed`。
3. **启用仓库**：

   ```bash
   sudo subscription-manager repos --enable=rhel-8-for-x86_64-baseos-rpms
   sudo subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms
   ```
4. **故障排除**：
   * 网络问题：检查 `ping google.com` 或设置代理 `export http_proxy=http://proxy:port`。
   * 未注册：清理 `sudo subscription-manager clean` 后重试。
   * 仪表盘未显示：运行 `sudo subscription-manager refresh`。

### 安装 fdupes

启用 EPEL 仓库并安装 `fdupes`：

```bash
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm -y
sudo dnf install fdupes -y
```

* 验证：`fdupes --version`。

### fdupes 操作方法

在 Samba 共享盘（例如 `/path/to/samba/share`）中查找和删除重复文件。

#### 步骤

1. **进入共享目录**：

   ```bash
   cd /path/to/samba/share
   ```
2. **预览重复文件**：

   ```bash
   fdupes -r .
   ```

   * `-r`：递归扫描目录。
   * 输出：列出重复文件组（基于哈希）。
3. **交互删除**：

   ```bash
   fdupes -rd .
   ```

   * `-d`：提示选择保留的文件（每组保留一个）。
   * 按数字选择（如 `1` 保留第一个）或 `0` 跳过。
4. **自动删除**（谨慎）：

   ```bash
   fdupes -rdN .
   ```

   * `-N`：自动保留每组第一个文件，删除其余。
   * **建议**：先备份或在小目录测试。
5. **高级选项**：
   * 硬链接替换（节省空间）：`fdupes -rH .`。
   * 按大小预过滤（加速）：`fdupes -rS .`。

#### 注意事项

* **备份**：操作前备份重要数据。
* **权限**：确保对 Samba 路径有读写权限（`ls -l` 检查）。
* **性能**：大目录扫描可能耗时，视文件量和硬件。

### 仪表盘管理多台 RHEL 系统

* 登录 [https://access.redhat.com/management/systems。](https://access.redhat.com/management/systems%E3%80%82)
* 查看系统列表，包含：
  * **系统名称**：注册时的 `--name` 或默认主机名。
  * **系统 ID**：唯一 UUID。
  * **订阅状态**、硬件事实（CPU、内存）。
* 搜索/导出 CSV 区分机器，启用 Insights（`insights-client --register`）增强管理。
