ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

rarlinux命令行工具:Linux解压分卷加密与避坑实战

rarlinux命令行工具:Linux解压分卷加密与避坑实战

简介:资源是针对64位Linux平台的RAR压缩与解压工具,版本为6.1.b1测试版,适用于Ubuntu、Fedora、Debian等常见发行版,面向需要处理RAR格式、追求高压缩率或利用多卷压缩、自解压、文件修复及AES加密等特性的开发者与运维人员。资源体积仅590KB,共11个文件,主要包含rar与unrar可执行程序、Makefile编译配置、txt格式的说明与许可文档、htm帮助页面等,结构简洁,可快速部署至命令行环境使用。目前已有197人学习下载,属于较为轻量但功能完整的工具包。通过该资源,用户可以获取Linux 64位环境下的RAR命令行工具,完成压缩、解压、分卷及加密等操作,同时了解测试版的更新内容,适合需要在服务器或本地Linux系统中处理RAR档案的用户使用。

1. rarlinux-x64-6.1.b1.tar.gz:把 WinRAR 的能力搬进 Linux 命令行

运维群里丢过来一个压缩包,后缀是 .rar,你手头只有 tar、gzip 和 zip,全都不认识这个格式。Windows 同事用 WinRAR 打的包,30GB,还分了三卷,Linux 上连看都看不了。最省事的解法就是把 rarlinux 这个官方命令行工具拉下来。rarlinux-x64-6.1.b1.tar.gz 是 RAR 官方为 64 位 x86 架构 Linux 发布的命令行程序包,解开后是 rar 和 rar_static 两个可执行文件,能解压、能创建、能加密、能分卷,和 Windows 上的 WinRAR 共用同一套归档格式。这个工具适合运维、网管和所有需要和 Windows 生态交换压缩包的人;装好之后它能进脚本、进 crontab,以后见到 .rar 不用再四处求人。

2. Linux 上为什么还要装 rar:选型、架构与版本判断

2.1 现实场景:Windows 传过来的 .rar,Linux 上解不开有多痛

很多跨组织协作的默认压缩格式就是 rar。银行对账单、设计院图纸、老 ERP 的导出文件,对方 IT 随口一句“我打成压缩包发你了”,你用 Linux 一收,tar 不认识,gzip 报错,zip 工具也说不支持。这时候你才意识到,linux 常用命令清单里根本没有处理 rar 的选项。

痛点有三层。第一层是分卷:对方发来 backup.part01.rar 到 part10.rar,少了哪一卷都解不了,tar 没有这种习惯。第二层是加密:带密码的 rar 在 Windows 上是双击输密码,在 Linux 上要用命令行工具处理密码输入和文件名加密两种情况。第三层是恢复记录:rar 分卷可以带恢复记录,坏了能用 -rr 重建,这对跨网络传输来说几乎是刚需。

所以至少在需要和这类外部系统打交道的机器上,rar 不是一个“可选工具”,而是和 curl、jq 一样的基础设施。下面我把选型、装法、常用参数、翻车点一次讲完,照着敲就行。

2.2 四个常见方案对比:rar、unrar、7z、tar

工具创建 rar解 rar5加密/文件名加密分卷与恢复记录授权
rar(官方 CLI)支持支持支持支持专有,个人免费,商用购买
unrar(官方免费版)不支持支持支持分卷可解免费
7z / p7zip不支持只读、部分部分支持不支持恢复记录LGPL
tar + gzip不支持不支持不支持不支持GPL

选型结论分三种情况。只是偶尔解开别人发的包,装 unrar 就够,包小、无依赖、免费;但 unrar 只能解不能压,对方让你“处理完再打包发回来”时你就傻眼。需要双向交换的,直接装官方 rar,这也是 RAR 官方对 Linux 平台的标准答案。7z 在理论上是开源合规的选择,但面对 rar5 加密分卷经常翻车,p7zip 对 rar 的解压只是“能读”而不是“可靠”,极端情况解到一半报 unsupported method,这是我的血泪经验。

2.3 先确认架构:x64 与 arm64 的区别,别下错包

下载之前先弄清楚机器是什么架构,这就是网上经常搜到的“arm64和x64有什么区别”。x64(也叫 x86_64)是 Intel/AMD 的 64 位;arm64(aarch64)是 ARM 的 64 位。两者指令集不同,二进制不通用。rarlinux-x64 里的 x64 明确告诉你:这是给 x86_64 的构建。

# 查看当前系统架构,常见输出:x86_64 / aarch64 uname -m # 进一步确认能跑的二进制格式 file /bin/ls

输出 x86_64 就用 rarlinux-x64;输出 aarch64 说明是 arm64,要去官网找带 arm 标识的 rar 构建。国内现在的国产服务器很常见,鲲鹏、飞腾都是 arm64,下错包的结果是执行时报 cannot execute binary file: Exec format error,这条报错本身就是最明确的信号。还有一类坑在容器:有些精简镜像里 uname 返回 host 架构,但 glibc 版本很老,这个问题留到 5.1 节讲。

2.4 6.1.b1 是 beta:能不能直接用

6.1.b1 是 RAR 6.1 周期的第一个 beta。beta 的意思是功能基本定型,但可能存在边角 bug,RARLab 的习惯是 beta 与正式版相差不大,个人机器上练手完全没问题。生产环境我的建议是拉正式版,不要用 beta 当备份脚本的长期底座。

这里还有一个绕不开的历史问题。6.1.b1 所属的版本周期在解压时对符号链接的校验不够严格,公开编号 CVE-2022-30333 就是这类路径穿越问题,后续在 6.12 版本做了修复。所以如果你手里的包停在 6.1.b1,请记住两点:不要用 root 去解压来历不明的 rar;有条件就升级到 6.12 之后的正式版。这个问题在 5.5 节还会具体说。

3. 安装 rarlinux-x64-6.1.b1.tar.gz:最小命令到系统级安装

3.1 临时救急:解压直接跑

拿到这个 tar.gz 包,最简单的用法是解压后直接在当前目录跑,不需要 root,适合跳板机、别人机器、临时容器这类没有安装权限的环境。包解开后会得到一个 rar 目录,里面是 rar(动态链接版)和 rar_static(静态链接版)两个可执行文件,还有许可和说明文本。

# 解压,GNU tar 会自动识别 gzip,-z 参数可写可不写 tar -xf rarlinux-x64-6.1.b1.tar.gz # 查看目录内容,确认文件齐全 cd rar && ls -la # 不安装,直接在当前目录执行 ./rar --version

这段命令的逻辑是先解压再看再执行。tar -xf 里没有 -z,因为 GNU tar 会根据文件内容自动识别 gzip 压缩,写 -zxvf 也没错,但 -xf 更省事;ls -la 是确认 rar 和 rar_static 都在,且权限位里有 x;./rar --version 只输出版本和版权,不会做任何写操作,适合作为第一次运行的冒烟测试。如果 ls 发现权限位丢了(比如下载工具改过),先 chmod +x rar 再跑。

3.2 系统级安装:install 到 /usr/local/bin

需要长期使用,就把它装进系统 PATH。常见做法是把 rar 和 rar_static 都复制到 /usr/local/bin,而不是 /usr/bin。/usr/local/bin 是给管理员手工安装的软件准备的,发行版的包管理器不会去动它,避免某次系统更新把工具覆盖成别的版本。

# 复制到 /usr/local/bin,权限 755 保证可执行 sudo install -m 755 rar rar_static /usr/local/bin/ # 确认系统能找到命令 which rar # 如果 PATH 里没有 /usr/local/bin,再加个软链 sudo ln -s /usr/local/bin/rar /usr/bin/rar

install 命令同时做了复制和设置权限两件事,-m 755 表示所有者可读可写可执行,组和其他用户可读可执行,这是常见系统命令的权限位;which rar 验证命令是否进入 PATH。关于软链那条:大部分发行版的 PATH 都包含 /usr/local/bin,不用软链;只有个别精简系统或者你自定义过 PATH 才需要加。注意不要同时往 /usr/bin 和 /usr/local/bin 各放一份,否则会出现你改了 A 结果系统跑的是 B 的玄学问题。

3.3 验证:版本输出和小压测

装完不要直接拿生产数据试,先用最小样本验证“创建”和“测试”两条链路。下面这段命令会创建一个临时目录、压成 rar、再用 rar t 验一遍完整性,整个过程不影响现有数据。

# 准备一个临时测试目录 mkdir -p /tmp/rar_test && echo "hello rar" > /tmp/rar_test/a.txt # 创建压缩包,-r 递归,-m3 标准压缩 rar a -m3 /tmp/demo.rar /tmp/rar_test/ # 测试压缩包完整性,输出 OK 即通过 rar t /tmp/demo.rar

rar a 的 a 是 add,把文件加入压缩包;-m3 是压缩级别里偏平衡的档位,取值范围从 -m0(仅存储不压缩)到 -m5(极限压缩),验证时用 -m3 最合适。rar t 的 t 是 test,它会把包内文件解压到内存做校验,不改动磁盘文件,这也是后面所有备份脚本里必须有的“后悔药”步骤——先测再删,永远不要让没测过的压缩包成为唯一副本。看到 All OK 之类的输出,安装就算通过了。

4. rar 核心命令:解压、创建、分卷与加密的参数怎么设

4.1 解压三兄弟:x、e、t

用完一个工具先学解压。rar 的解压命令主要有三个:x 保留压缩包内目录结构,e 把所有文件平铺到当前目录,t 只测试不实际解压。日常 90% 的场景用 x,因为 Windows 那边压的包普遍带目录层级,用 e 会摊出一大堆同名文件互相覆盖。

# 保留路径解压 rar x backup.rar # 全部文件解压到当前目录,不带目录 rar e backup.rar # 只测试完整性 rar t backup.rar # 解压包里的某个文件 rar x backup.rar doc/notes.txt

x 和 e 的选择是很多新手翻车的点:收到一个包,用 e 解出来,几百个文件全堆在当前目录,同名文件一个覆盖一个,事后找不到原始目录结构。rar x 按包内路径还原,出来的目录和打包方一致。解压部分文件时,rar x backup.rar doc/notes.txt 后面直接跟包内路径即可,这个能力在做日志提取时很常用。

还有两个参数务必记住:-o+ 表示遇到已存在文件直接覆盖,-o- 表示跳过不覆盖。不写这两个参数时,rar 会停下来问你 y/n,脚本里就会卡死。所以脚本里用 rar x -o+ 或者 rar x -o- 二选一,显式指定。另外 -idq 可以把横幅和进度都压掉,适合把输出喂给日志系统。

4.2 创建压缩包:a 与压缩参数

创建 rar 用 a,加到已存在的包也是同一命令。压缩级别、是否递归、是否保留绝对路径、要不要固实压缩,都是在 a 后面挂参数控制。下面是最常用的组合。

# 递归压缩整个目录,极限压缩,不保留命令行里多余的路径前缀 rar a -r -m5 -ep1 project.rar ./project/ # 文件名自动带日期时间,适合定时备份 rar a -ag backup.rar ./data/ # 固实压缩,压缩率更高,但包内任意一处损坏会影响后续文件 rar a -s -r -m5 archive.rar /data/

参数拆开说。-r 是递归子目录,不加它压缩目录时只会收到目录名;-m5 是极限压缩,耗时最长但体积最小;-m0 是仅存储,适合压缩率无所谓、要速度的场景;-ep1 表示不保存命令行里给出的基路径,比如 ./project 里的那层前缀会被去掉,解压出来直接是 project/ 目录下的内容,不会多套一层路径。用 tar 的人经常被 tar 的 -C 绕晕,rar 的 -ep1 就是干这个的。

-ag 让 rar 自动在归档名后面拼上日期时间,你不需要自己在命令行里算当前日期,生成的会是 backup20250813.rar 这类名字,配合 crontab 做每日归档非常方便。-s 固实压缩会把所有文件当作一个连续数据块处理,压缩率通常比普通模式高几个百分点,代价是包内任意一处损坏,后面的文件都受影响;分卷加固实时要格外小心,这就是 4.3 节要讲恢复记录的原因。

4.3 分卷与加密:-v、-p、-hp、-rr

跨网络传大包,rar 最值钱的功能是分卷和加密。分卷用 -v 加体积单位,加密用 -p 或 -hp。下面这段覆盖了分卷压缩、加密和带恢复记录三种能力。

# 每卷 100MB,分卷压缩 rar a -v100M -r backup.rar /data/ # 交互式输入密码创建加密包(推荐,密码不出现在命令行) rar a -p -r secret.rar /data/ # 加密文件名,连包内目录名都看不到 rar a -hp -r secret.rar /data/

-v100M 表示每卷 100MB,也可以写 -v1G、-v2G,生成的文件名是 backup.part01.rar、backup.part02.rar 这样。解压分卷时一定要指定第一部分:rar x backup.part01.rar,rar 会按顺序找后面的卷;指定成 backup.rar 经常会提示找不到,这个坑在 5.3 节细说。分卷配合恢复记录使用,在 a 后面加 -rr10% 或 -rr10P,意思是创建占压缩包体积 10% 的恢复记录,某一卷损坏时可以用它重建数据,跨网络场景基本是救命的。

加密要特别注意 -p 和 -hp 的区别。-p 只加密文件内容,文件名和目录结构仍然可见;-hp 连文件名一起加密,别人看到的就是一堆随机串,隐私性更强,当然没有密码时连列表都看不到。命令行里直接写 -p'密码' 最方便但最不安全,因为进程参数会被 ps aux 看到,任何能登进这台机器的人都能瞄到密码。我一般只写 -p 或 -hp 然后交互输入;脚本里没法交互时,再用 -hp'密码',并且保证这台机器只有自己能用。

5. rarlinux 安装与使用避坑:5 个常见翻车现场

5.1 动态链接库报错:error while loading shared libraries

现象:解压后运行 ./rar,shell 直接报 error while loading shared libraries: libstdc++.so.6,连版本号都不显示。

原因:rar 是动态链接版本,依赖系统的 C++ 运行库;精简容器(Alpine、distroless)或很老的发行版缺这个库。rar_static 就是为这种情况准备的。

解决:

# 查看动态依赖,确认缺哪些库 ldd rar # 用静态版绕过系统库问题 ./rar_static --version

把 rar_static 也复制到 /usr/local/bin 下面,遇到动态库缺失时它就是现成的备用:

sudo install -m 755 rar_static /usr/local/bin/ rar_static t archive.rar

提示:如果 ldd 输出里缺的不只是 libstdc++,还缺 libgcc_s 之类,说明基础库太精简,静态版是唯一靠得住的方案。

5.2 中文文件名乱码:解压出来一堆锟斤拷

现象:Windows 那边压的 rar,Linux 解压后中文文件名全乱码,文件内容正常。

原因:老式 RAR4 包的文件名用的是 Windows 本地编码(GBK/CP936),Linux 默认按 UTF-8 解码,于是一堆替换字符。RAR5 格式统一用 UTF-8,新包一般没有这个问题。

解决:先试试直接解,乱码了再换 unar,它对常见中文编码的识别比 rar 命令强:

# 用 unar 自动识别常见中文编码 unar backup.rar

如果包里文件名是 GBK,unar 会按 GBK 解出来并转成 UTF-8。新打包时,注意用 RAR5 格式,6.x 的 rar 默认就是 RAR5,不要再用 -ma4 去造老包。

5.3 分卷解压提示找不到下一卷

现象:rar x backup.part01.rar 解到一半,提示 Cannot open backup.part03.rar,但卷 3 明明就在同一目录里。

原因:常见三种。第一,你误把命令写成了 rar x backup.rar,rar 去找 backup.r00 之类,找不到很正常;第二,有人手动改过中间卷的文件名,比如加了个“-副本”;第三,下载工具把卷下载成了 .part 后缀的临时文件。分卷文件名严格的命名序列是 part01、part02……中间断了就接不上。

解决:

# 确认所有卷在同一目录,命名连续 ls -la backup.part*.rar # 从第一部分开始解,rar 自动找后续卷 rar x -o+ backup.part01.rar

上传下载大文件时,建议先比较每卷的 sha256 再拼接使用,谁也别信下载工具的“完成提示”。

5.4 解压出来的脚本没有执行权限

现象:解压完一个部署包,里面的 install.sh 或二进制没有 x 权限,直接 ./install.sh 报 Permission denied。

原因:压缩包在创建时没有保留 Unix 权限位,或创建方是 Windows 侧工具,打包后脚本权限被存成了 0644。

解决:解压后统一设置执行权限:

# 给整个目录下的 .sh 都加执行位 find . -name "*.sh" -exec chmod +x {} \; # 单个文件直接加 chmod +x install.sh

创建端反过来要保住权限位,rar a 时用 -ol 保存符号链接为链接,-or 把符号链接内容当普通文件保存,这两者行为不同,按预期选。

5.5 安全:永远别在 root 下解压来历不明的 rar

现象:测试环境里用 root 解了一个外部发来的 rar,事后发现 /root/.bashrc 内容被改了,多了一段反弹 shell。

原因:这是老版本 RAR 的路径穿越与符号链接校验问题(公开编号 CVE-2022-30333),恶意包可以在解压时把文件写到预期目录之外;6.12 版本修复了这一类问题。6.1.b1 明显处于受影响区间。

解决:第一,解包前先 rar t,损坏的包直接拒收;第二,用非特权账户解压,目录放在 /tmp 或普通用户家目录,绝不 root;第三,生产环境的 rar 升级到 6.12 之后的版本。这个点在 linux 面试题里也经常被拿来问,本质是“永远不要信任一个需要解压的输入文件”。

6. 进阶:用 rar 写自动归档脚本,和 tar 互补

6.1 带日期、加密、恢复记录的分卷备份脚本

装完 rar 之后,我一般不会让它只当解压工具用,而是把“给外部系统发包”这件事固化成脚本。下面这个脚本把 /data 打成带日期、加密、带恢复记录、每卷 2GB 的 rar,输出到挂载好的 NAS 目录,并在完成后自动测试完整性。

#!/bin/bash # 每日 rar 分卷备份:/data -> /mnt/nas/backup set -euo pipefail DAY=$(date +%Y%m%d) BACKUP_DIR=/mnt/nas/backup RAR_PASS="$(cat /etc/rar_backup.key)" # 创建:-m3 平衡速度与体积;-rr10% 恢复记录;-v2G 分卷 rar a -r -m3 -rr10% -v2G -hp"${RAR_PASS}" \ "${BACKUP_DIR}/data_${DAY}.rar" /data/ | tee /tmp/rar_backup.log # 验证:测第一卷就能触发全卷校验,失败即退出并告警 rar t "${BACKUP_DIR}/data_${DAY}.part01.rar"

脚本里的 -rr10% 表示恢复记录占 10%,NAS 这类网络存储偶尔会有扇区级损坏,恢复记录能挽回一部分;-v2G 把大包切成 2GB 一卷,方便后续刻盘或上传;密码写在 /etc/rar_backup.key 这个 600 权限的文件里,脚本与密码分离,避免密钥混在脚本里被误读。需要说明的是,-hp 带密码时进程参数仍可见,所以这台机器的用户权限要管好。tee 把输出同时写日志和终端,rar t 放在脚本末尾,失败时 set -e 会直接让脚本退出并触发外部告警。

6.2 验证习惯与 tar/rar 分工

tar 和 rar 不是替代关系,我自己的分工是:本机快照、权限敏感的源码包,用 tar + gzip,保留 unix 权限和符号链接最省事;要发给外部单位、要加密、要分卷、要恢复记录的,用 rar。验证习惯上,所有备份脚本必须把 rar t 或 tar -tf 放在最后一步,不通过就当备份失败,这个习惯帮我拦下过好几次“压缩包其实已经损坏”的事故。

最后提醒一句,6.1.b1 的使命是让你低门槛上手,真正跑生产前,还是去官网拿新版本替换它。我自己当年就是拿 beta 包在跳板机上救过一次急,后来把所有服务器的 rar 都换成了正式版,从那以后没有再为符号链接漏洞提心吊胆过。希望这个方向对你有用,也希望帮到你少踩一次坑。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进