三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Linux系统安装与使用rar/unrar工具:跨平台压缩文件处理指南

Linux系统安装与使用rar/unrar工具:跨平台压缩文件处理指南

1. 项目概述:为什么Linux用户需要关注RAR工具

在Linux的世界里,.tar.gz.zip是文件打包与压缩的“官方语言”,几乎所有的发行版都预装了处理它们的工具。然而,现实工作中,我们总会遇到一些来自Windows世界的“访客”——.rar格式的压缩包。无论是同事发来的项目资料、从某些资源站点下载的软件包,还是历史遗留的归档文件,.rar格式依然广泛存在。这时,如果你在Ubuntu终端里尝试用tarunzip去解压它,只会得到一个冰冷的错误提示:“无法识别的文件格式”。

这就是我们今天要解决的痛点:在Ubuntu(及其他Linux发行版)上,如何安装和使用rarunrar命令,从而无缝处理RAR格式文件。rar是一个强大的商业压缩工具,以其高压缩率(尤其是对多媒体文件)和恢复记录等高级功能著称;而unrar则是其开源免费的解压组件。对于绝大多数用户来说,安装unrar来解压文件就足够了。但如果你需要在Linux上创建RAR压缩包,或者进行分卷、加密等高级操作,那么安装完整的rar命令行工具则是必须的。

本文将从一个有多年Linux运维和开发经验的视角,带你从零开始,不仅完成安装,更深入理解这两个工具的核心参数、使用场景以及那些官方手册里不会写的“踩坑”经验。无论你是刚接触Linux的新手,还是需要处理跨平台文件的老手,这篇详解都能让你彻底掌握这门“第二语言”。

2. 核心工具解析:rar与unrar的定位与选型

在动手安装之前,我们先厘清rarunrar的区别与联系,这决定了你后续的安装策略。

2.1 rar:功能完整的商业压缩套件

rar是RARLAB公司开发的命令行压缩工具。它是一个商业软件,但在Linux下提供了免费的命令行版本供个人使用。其核心功能包括:

  • 创建压缩包:将文件/目录压缩成.rar格式。
  • 解压压缩包:解压.rar文件。
  • 高级功能:支持分卷压缩(将大文件拆分成多个小文件)、设置恢复记录(文件损坏时可修复)、添加压缩密码(AES-128加密)、锁定压缩包等。

简单来说,如果你需要在Linux上生成RAR格式的压缩包,或者对已有的RAR包进行添加文件、删除文件、修复等管理操作,你需要安装rar

2.2 unrar:专注解压的开源工具

unrar是专门用于解压RAR压缩包的工具。它是一个开源软件,遵循自己的开源协议。对于99%的用户来说,我们的需求仅仅是“打开那个.rar文件”,那么安装unrar就完全足够了。它轻量、免费且通常更容易从发行版的官方仓库中直接安装。

选型建议:

  • 仅需解压:安装unrar
  • 需要创建或管理RAR压缩包:安装rar。通常安装了rar后,其已包含解压功能,但有些人仍喜欢同时安装unrar,因为某些开源脚本可能指定调用unrar命令。

在Ubuntu的官方仓库中,通常只收录了unrar。要安装rar,我们需要添加RARLAB的官方仓库或直接下载二进制包。下面我们将分别详解两种安装方法。

3. 安装指南:两种方法详解与避坑

Ubuntu提供了灵活的安装方式,这里介绍最常用的两种:通过apt安装unrar,以及通过添加官方仓库安装完整的rar

3.1 方法一:使用APT安装Unrar(最简解压方案)

这是最快捷、最系统化的方法,适合只需要解压功能的用户。

首先,更新本地软件包列表,确保获取到最新的版本信息:

sudo apt update

然后,直接安装unrar软件包:

sudo apt install unrar

安装完成后,可以通过以下命令验证:

unrar

如果安装成功,会输出unrar的基本使用帮助信息,而不是“命令未找到”。

注意:在某些较老或最小化安装的Ubuntu系统上,可能会遇到“无法定位软件包 unrar”的错误。这是因为unrar位于universe组件中。请确保你的系统已启用universe仓库:

sudo add-apt-repository universe sudo apt update sudo apt install unrar

3.2 方法二:安装完整的Rar命令行工具

如果你需要创建RAR文件,请按照以下步骤操作。RARLAB为其Linux命令行版本维护了一个APT仓库,这是推荐的安装方式。

步骤1:下载安装密钥我们需要将RARLAB的GPG公钥添加到系统,以验证从该仓库下载的软件包。

wget -O - https://www.rarlab.com/rar/rarlab.key | sudo apt-key add -

这条命令使用wget下载密钥文件,并通过管道|将其直接传递给sudo apt-key add -命令添加到系统的可信密钥列表中。

步骤2:添加软件仓库接下来,将RARLAB的APT仓库源添加到系统的软件源列表。

sudo add-apt-repository 'deb https://rar.if.ua/rar/debian/ stable main'

这里的仓库地址https://rar.if.ua/是RARLAB官方指定的镜像之一。stable main指明了发行版和组件。

步骤3:更新并安装添加仓库后,更新软件包列表并安装rar

sudo apt update sudo apt install rar

安装验证:安装完成后,输入rar命令,你会看到详细的命令帮助菜单,这证明安装成功。

实操心得:网络问题与替代方案在某些网络环境下,访问上述官方仓库地址rar.if.ua可能速度缓慢或不可用。如果你在执行sudo apt update时遇到连接错误,可以尝试以下方案:

  1. 更换镜像源:查找其他可用的镜像。有时仓库地址中的国家代码会变,可以搜索“rarlab apt repository mirror”寻找当前可用的地址。
  2. 手动下载DEB包安装:作为备选方案,你可以直接访问 RARLAB 官网(www.rarlab.com)的下载页面,找到对应系统架构(通常是 amd64)的.deb格式包,下载后使用sudo dpkg -i rar.deb命令安装。但请注意,这种方式无法自动获取更新。
  3. 编译安装:官网也提供.tar.gz源码包,你可以下载后解压,进入目录执行makesudo make install进行编译安装。这对喜欢从源码构建的用户是个选择,但步骤稍显繁琐。

4. 核心命令使用详解与场景实战

安装只是第一步,真正发挥工具威力在于命令行参数。下面我们以实际场景为例,分解最常用的命令。

4.1 Unrar 命令实战:解压的多种姿势

unrar的基本命令格式是:unrar <command> [options] <archive.rar> [files...] [path_to_extract]

最常用命令ex

  • unrar e archive.rar:这是“解压到当前目录”(Extract)。它会将压缩包里的所有文件平铺到当前目录下,忽略压缩包内的目录结构。如果压缩包里有doc/file.txt,执行后file.txt会直接出现在当前文件夹。

    • 场景:当你确定压缩包内没有子目录,或者你只想要所有文件都放在一起时使用。
    • 风险:如果压缩包内文件有重名,会被覆盖;目录结构丢失可能导致文件混乱。
  • unrar x archive.rar:这是“解压并保持路径”(eXtract with paths)。它会严格按照压缩包内的目录结构解压文件。如果压缩包里有doc/file.txt,执行后会在当前目录下创建doc/文件夹,然后将file.txt放入其中。

    • 场景绝大多数情况下推荐使用此命令,它能完美还原打包时的状态,避免文件混乱。

示例与进阶选项:

# 1. 基本解压(保持结构)到当前目录 unrar x myfiles.rar # 2. 解压到指定目录 unrar x myfiles.rar /home/user/target/ # 或者先进入目标目录 cd /home/user/target && unrar x /path/to/myfiles.rar # 3. 仅查看压缩包内容,不解压 unrar l myfiles.rar # `l`(小写L)命令会列出压缩包内文件的详细信息,包括大小、压缩后大小、日期和完整路径。 # 4. 测试压缩包完整性 unrar t myfiles.rar # `t`(test)命令会校验压缩包内的所有文件是否有错误,在解压大文件或重要文件前做一次检查是个好习惯。 # 5. 解压特定文件或使用通配符 unrar x myfiles.rar readme.txt # 只解压readme.txt unrar x myfiles.rar *.pdf # 只解压所有pdf文件 unrar x myfiles.rar doc/ # 只解压doc目录下的所有文件(保持结构) # 6. 解压带密码的压缩包 unrar x -ppassword encrypted.rar # `-p` 参数后面直接跟密码(注意没有空格)。如果密码包含特殊字符,最好用单引号包裹:`-p‘MyP@ss!‘`

4.2 Rar 命令实战:从压缩到高级管理

rar的功能丰富得多,其格式为:rar <command> [options] <archive.rar> [files...] [path_to_extract]

核心压缩命令aa(Add)是创建压缩包的核心命令。

# 1. 基本压缩:将file1和dir1压缩成archive.rar rar a archive.rar file1.txt dir1/ # 2. 使用通配符压缩 rar a pics.rar *.jpg *.png # 3. 递归压缩目录下的所有内容 rar a -r project.rar myproject/ # `-r`(recurse)选项至关重要,它会递归地将`myproject/`目录下的所有子目录和文件都加入压缩包。没有它,只会压缩空目录本身。 # 4. 创建分卷压缩(每卷100M) rar a -v100m archive.part.rar bigfile.iso # `-v[size]`用于分卷。完成后会生成 archive.part1.rar, archive.part2.rar 等。`size`可以是`k`(千字节),`m`(兆字节),`g`(吉字节)。 # 5. 创建加密压缩包(设置密码) rar a -p mysecret.rar sensitive.doc # 执行命令后,会交互式地提示你输入两次密码。密码会使用AES-128加密,安全性很高。

其他实用管理命令:

# 1. 查看压缩包(类似unrar l) rar l archive.rar # 2. 测试压缩包 rar t archive.rar # 3. 向已存在的压缩包添加文件 rar a archive.rar newfile.txt # 4. 从压缩包中删除文件 rar d archive.rar file-to-delete.txt # 5. 修复损坏的压缩包 rar r broken.rar # 如果压缩时添加了恢复记录(使用 `-rr` 选项),此命令尝试修复。修复后会生成 `rebuilt.broken.rar`。 # 6. 锁定压缩包(防止修改) rar k archive.rar

5. 高级技巧与参数深度解析

掌握了基础命令,我们来看看一些能提升效率、保障安全的高级用法和关键参数。

5.1 压缩效率与选项权衡

rar提供了多种压缩级别和算法选项,理解它们有助于在速度、压缩比和资源占用间取得平衡。

  • 压缩级别 (-m<n>)

    • -m0:仅存储,不压缩。最快,用于打包已压缩的文件(如.jpg, .zip)。
    • -m1:最快压缩。速度优先,压缩比最低。
    • -m2:较快压缩。
    • -m3:标准压缩(默认)。平衡了速度和压缩比。
    • -m4:较好压缩。
    • -m5:最大压缩。能获得最高的压缩率,但速度最慢,CPU和内存占用最高。
    rar a -m5 high_compress.rar large_database.bak
  • **恢复记录 (-rr<n>%)**: 这是RAR格式的一大特色。恢复记录是额外添加到压缩包中的数据,允许在压缩包部分损坏时恢复文件。n`是添加的恢复记录占压缩包大小的百分比(通常3%-10%就足够了)。

    rar a -rr5% important_backup.rar critical_data/ # 添加5%的恢复记录,为重要备份加上一道保险。
  • 固实压缩 (-s): 启用固实模式后,RAR会将所有文件视为一个连续的数据流进行压缩。这通常能获得更高的压缩比(尤其是大量小文件时),但代价是:解压任意一个文件都需要从开头读取,且损坏一个点可能影响后续文件。对于需要频繁单独访问其中部分文件的压缩包,不建议使用

    rar a -s solid_archive.rar thousands_of_small_files/

5.2 路径处理与排除文件

处理复杂目录结构时,控制文件的包含与排除是关键。

  • 排除文件 (-x<file>)

    # 压缩当前目录,但排除所有的.log文件和tmp目录 rar a -r -x*.log -x*/tmp/* project.rar ./ # `-x` 可以使用通配符,并且可以多次使用。
  • 工作目录与路径存储: 默认情况下,rar a命令会存储文件的相对路径。你执行命令时的当前目录(工作目录)会影响存储的路径。

    # 假设目录结构:/home/user/project/src/file.c cd /home/user rar a proj.rar project/ # 压缩包内路径为:project/src/file.c cd /home/user/project rar a ../proj2.rar src/ # 压缩包内路径为:src/file.c

    使用-ep选项可以排除路径前缀,-ep1会从名称中排除基目录,这在打包时非常有用。

5.3 自动化与脚本集成

在Shell脚本中自动化处理RAR文件是常见需求。

#!/bin/bash # 一个简单的备份脚本示例 BACKUP_SRC="/var/www/html" BACKUP_DST="/backups" PASSWORD="StrongPass123!" # 实际生产中应从安全的地方获取 DATE=$(date +%Y%m%d_%H%M%S) ARCHIVE_NAME="website_backup_${DATE}.rar" # 使用最大压缩比、添加恢复记录并加密,递归压缩整个目录 rar a -m5 -rr3% -hp${PASSWORD} -r "${BACKUP_DST}/${ARCHIVE_NAME}" "${BACKUP_SRC}" # 检查上一条命令是否成功执行 if [ $? -eq 0 ]; then echo "[$(date)] 备份成功: ${ARCHIVE_NAME}" else echo "[$(date)] 备份失败!" >&2 exit 1 fi

重要安全警告:如上所示,在脚本中硬编码密码是极不安全的。密码会出现在进程列表(ps aux)和脚本文件中。更安全的做法是:1)使用-p不跟参数,让rar交互式提示(不适用于全自动脚本);2)从加密的凭据管理器读取;3)至少确保脚本文件权限为600且仅限必要用户访问。

6. 常见问题排查与实战经验录

即使命令正确,在实际操作中也可能遇到各种问题。下面是我在多年使用中积累的一些典型问题及解决方案。

6.1 安装与依赖问题

问题1:执行rarunrar命令时提示“命令未找到”(Command not found)。

  • 排查:首先确认是否安装成功。用which rarwhich unrar查看命令路径。如果没输出,说明未安装。
  • 解决:按照本文第3节重新安装。对于rar,确保已成功添加RARLAB仓库并更新。

问题2:安装unrar时提示“E: 无法定位软件包 unrar”。

  • 排查:Ubuntu的universe组件未启用。
  • 解决
    sudo add-apt-repository universe sudo apt update sudo apt install unrar

问题3:从RARLAB仓库安装rarapt update失败,提示GPG错误或连接超时。

  • 排查:GPG密钥过期或仓库地址网络不通。
  • 解决
    1. 更新GPG密钥:可以尝试重新下载并添加密钥(见3.2节)。
    2. 更换仓库镜像:编辑/etc/apt/sources.list.d/下关于rar的源文件,将deb https://rar.if.ua/rar/debian/ stable main中的域名部分替换为其他已知镜像,如deb https://rar.centos.org/rar/debian/ stable main(请以RARLAB官网信息为准)。
    3. 手动安装DEB包:作为最终手段,从官网下载对应架构的.deb包手动安装。

6.2 解压与压缩过程中的报错

问题4:解压时提示“CRC校验失败”或“文件头损坏”。

  • 原因:压缩包在下载或传输过程中数据损坏。
  • 解决
    1. 如果压缩包有恢复记录(用rar l archive.rar查看是否有RR标记),使用rar r archive.rar尝试修复。
    2. 如果没有恢复记录,尝试重新下载或获取完整的压缩包。对于分卷压缩,确保所有.partX.rar文件都在同一目录且未损坏。

问题5:解压加密压缩包时密码错误,但确认密码正确。

  • 排查
    • 空格与大小写:在命令行输入密码时,确保没有多余空格,并注意大小写。
    • 特殊字符转义:如果密码包含!$\等Shell特殊字符,在命令行中使用时需要用单引号包裹-p‘P@ss!Word$‘,否则Shell会先解释这些字符导致密码错误。
    • 编码问题:在Windows上用中文密码创建的压缩包,在Linux终端(UTF-8环境)下可能因编码问题导致密码不对。尝试在图形界面解压工具(如file-roller)中输入密码。

问题6:压缩大文件时内存不足,进程被杀死。

  • 原因:使用高压缩级别(如-m5)或固实压缩(-s)时,rar需要大量内存来构建压缩字典。
  • 解决
    1. 降低压缩级别,使用-m3-m2
    2. 禁用固实压缩(移除-s选项)。
    3. 增加系统交换空间(Swap)。
    4. 对于超大文件,考虑使用分卷压缩(-v)将其拆分成小块处理。

6.3 性能与兼容性优化建议

经验1:处理大量小文件时,先打包再压缩。直接使用rar a -r archive.rar many_small_files/可能会很慢,因为每个文件都要单独打开和处理。一个优化技巧是先用tar打包成一个文件,再对这个tar包进行RAR压缩。

tar -cf - many_small_files/ | rar a -si archive.rar # `-si` 选项告诉rar从标准输入读取数据,这里接收tar的数据流。

这样能显著提升压缩速度,因为RAR只需要处理一个大的数据流。

经验2:跨平台传递压缩包时注意文件名编码。在Windows(默认GBK编码)创建的包含中文文件名的RAR包,在Linux(默认UTF-8)下解压可能会出现乱码。unrar命令本身不自动转换编码。解决方法:

  1. 在Linux上,尝试设置环境变量指定编码(不一定总是有效):UNRAR_OPTS="-charset utf8" unrar x gbk_file.rar
  2. 更可靠的方法是,在Windows端压缩时,使用支持Unicode的现代压缩工具(如7-Zip),或确保文件名为英文。
  3. 在Linux端,使用图形化解压工具如file-roller,它们通常有更好的编码自动检测能力。

经验3:脚本中检查命令是否存在。在自动化脚本中使用rarunrar前,先检查命令是否可用,可以使脚本更健壮。

#!/bin/bash if ! command -v unrar &> /dev/null; then echo "错误:未找到unrar命令,请先安装。" echo "在Ubuntu/Debian上可以运行: sudo apt install unrar" exit 1 fi # 后续解压逻辑... unrar x "$1"

掌握这些排查技巧,你就能从容应对大多数与RAR文件相关的挑战。归根结底,在Linux上使用rarunrar,核心在于理解它们是你工具箱中用于处理特定格式的“专用扳手”。对于日常的压缩打包,targzip/bzip2/xz的组合依然是更原生、更通用的选择。但当需求来自外界时,拥有处理RAR的能力,无疑让你在跨平台协作中更加游刃有余。

← 返回列表