器RAR工具部署與命令行實戰(zhàn)指南)
簡介這是一款面向Linux 64位x86_64系統(tǒng)的RAR壓縮工具測試版對應(yīng)版本6.1.b1主要解決在純命令行環(huán)境中創(chuàng)建、解壓、修復(fù)RAR檔案的需求適合系統(tǒng)管理員、運維工程師以及經(jīng)常處理跨平臺壓縮包的開發(fā)者。包內(nèi)共11個文件體積僅590KB以rar與unrar兩個可執(zhí)行文件為核心另有txt說明文檔、htm離線幫助、makefile構(gòu)建腳本、sfx自解壓模板及l(fā)st列表文件結(jié)構(gòu)完整解壓后即可直接使用。已有197人學(xué)習(xí)瀏覽。除了常規(guī)壓縮解壓該工具還支持多卷分割、自解壓包生成、損壞檔案修復(fù)和AES-128/AES-256加密可在Shell腳本中批量調(diào)用完成日志歸檔、備份文件加密、分包傳輸?shù)热蝿?wù)由于是測試版核心功能完整但個別邊界情況仍需留意。與圖形界面工具相比這款命令行版本更輕量便于在無桌面環(huán)境的服務(wù)器上集成到自動化運維流程中。1. rarlinux-x64-6.1.b1Linux 服務(wù)器處理 RAR 交付物的兜底方案rarlinux-x64-6.1.b1 這個包是我在 x64 Linux 服務(wù)器上處理 .rar 交付物時的兜底選項。Windows 那邊發(fā)過來的壓縮包拿到服務(wù)器上一敲 tar 就報錯gzip 也解不動——這不是命令寫錯而是 RAR 格式必須由 RAR 自己的程序來解。系統(tǒng)倉庫里的 unrar-free 勉強能解卻不支持壓縮和加密回傳折騰 7z 又要在每個環(huán)境里陪跑依賴。rarlinux-x64-6.1 的 b1 是 beta 1雖是測試版本命令行功能一個不少解壓、打包、加密、多卷拆分都有。適合定期處理 Windows 交付物的運維、需要在服務(wù)器上歸檔日志與數(shù)據(jù)庫備份的工程師、經(jīng)常在 Linux 下打開網(wǎng)盤數(shù)據(jù)的分析崗。這套包使用門檻不高但部署位置、參數(shù)細(xì)節(jié)和邊界條件值得一步步理清楚。2. 安裝與部署tar.gz 解壓、二進(jìn)制落位與 PATH 配置2.1 為什么不用系統(tǒng)自帶的 unrar選型與架構(gòu)確認(rèn)先回答一個常見疑問為什么不直接用 yum install unrar 或 apt install unrar原因是大多數(shù)發(fā)行版?zhèn)}庫里的 unrar 是 unrar-free它是一個裁剪過的讀取器能解壓一部分 RAR但缺少壓縮、加密、分卷等寫入類子命令p7zip 對 RAR 的支持也到不了官方實現(xiàn)的完整度某些新版本格式會落后一拍。而這個包是 RAR 官方發(fā)布的 Linux 版本把 rar 和 unrar 兩個程序都帶上了rar 負(fù)責(zé)壓縮unrar 專注解壓功能閉環(huán)。選型定下來之后再談架構(gòu)。別急著解壓。先跑 uname -m 確認(rèn)架構(gòu)是 x86_64。我見過有人在 ARM 服務(wù)器上硬解 x64 包最終報 Exec format error白白折騰半小時。如果你確實在 ARM 環(huán)境需要找對應(yīng)的 arm 版本安裝步驟一樣只是二進(jìn)制架構(gòu)不通用。確認(rèn)無誤后再解開包uname -m # 輸出 x86_64 就對了然后解包 tar -xzvf rarlinux-x64-6.1.b1.tar.gz ls -la rar/tar 的參數(shù)拆開講-x 是解壓動作-z 表示處理的是 gzip 壓縮的包-v 把解壓過程打印到終端-f 后面跟文件名這四個字母在實際運維里幾乎綁定出現(xiàn)。解開后目錄名通常不是 rarlinux-x64-6.1.b1而是 rar/這一點經(jīng)常被腳本里的路徑踩到稍后配置時要注意。2.2 二進(jìn)制落位復(fù)制法還是軟鏈接法把二進(jìn)制放哪里直接決定后續(xù)升級和卸載的體驗。我見過有人把解壓目錄留在 /root然后用絕對路徑到處寫結(jié)果清理磁盤時誤刪整個服務(wù)器再也找不到 rar 命令。常用做法是二選一把可執(zhí)行文件復(fù)制到 /usr/local/bin或把整個 rar 目錄放到 /opt再用軟鏈接暴露命令。# 方案一把兩個可執(zhí)行文件復(fù)制到 /usr/local/bin sudo cp -a rar/rar rar/unrar /usr/local/bin/ sudo chmod x /usr/local/bin/rar /usr/local/bin/unrar # 方案二把 rar 目錄整體放到 /opt軟鏈接到命令目錄 sudo cp -a rar /opt/rar sudo ln -sf /opt/rar/rar /usr/local/bin/rar sudo ln -sf /opt/rar/unrar /usr/local/bin/unrar兩種做法都可以但我傾向方案二。理由和踩過的坑相關(guān)rar 運行時需要依賴同目錄下的輔助文件單獨把 rar 二進(jìn)制復(fù)制出去一旦運行時要讀取這些文件卻找不到就會表現(xiàn)出一些反常行為比如某些參數(shù)不生效或命令直接退出。整個目錄保留在 /opt升級時只需要替換 /opt/rar 里面的內(nèi)容軟鏈接不用動。方案一適合臨時機幾分鐘內(nèi)啟用的場景沒問題方案二適合長期使用的生產(chǎn)機卸載時刪掉 /opt/rar 和兩條軟鏈接干凈利落。2.3 全局 PATHprofile、bashrc 與定時任務(wù)的差異命令放好后核心問題就是 PATH。用戶的 .bashrc 只在交互式登錄時加載cron、systemd、CGI 類程序一概不讀它。把 rar 目錄寫進(jìn)全局 profile比寫入某個用戶的 bashrc 更可靠echo export PATH/opt/rar:$PATH /etc/profile.d/rar.sh source /etc/profile.d/rar.sh which rar # 輸出 /opt/rar/rar 才算成功用 /etc/profile.d/rar.sh 而不是直接改 /etc/profile好處是職責(zé)單一卸載時刪除這個小文件即可。加進(jìn) PATH 后root 和普通用戶登錄時都能找到 rar。但要注意一個邊界Web 面板定時任務(wù)、CI 流水線這類腳本通常在非登錄非交互 shell 下執(zhí)行profile 也不一定被讀取。所以到了腳本內(nèi)部我一般不會靠 PATH而是直接在腳本頂部聲明RAR/usr/local/bin/rar # 或者 RAR/opt/rar/rar $RAR t /data/backup/weekly.rar這種做法相當(dāng)于給命令上了雙保險交互終端靠 PATH 用腳本用顯式變量用。前面說過的 command not found 問題絕大多數(shù)是這一步?jīng)]做到位。2.4 權(quán)限與掛載選項普通用戶調(diào)用的隱藏門檻權(quán)限問題比 PATH 更隱蔽。軟鏈接指向 /opt/rar 后root 能跑nginx 或 www 用戶跑卻報權(quán)限錯誤。原因有兩類一是 /opt/rar/rar 的可執(zhí)行位在復(fù)制過程中丟失二是目錄和文件本身的訪問權(quán)限不足。先按下面順序補權(quán)限sudo chmod 755 /opt/rar sudo chmod 755 /opt/rar/rar sudo chmod 755 /opt/rar/unrar ls -l /opt/rar/rar # 確認(rèn)輸出 -rwxr-xr-xrarlinux 包解出來通常自帶執(zhí)行權(quán)限但從 Windows 轉(zhuǎn)過來的文件或某些壓縮傳輸工具會把這些權(quán)限抹掉。另一個容易忽略的點是掛載選項如果 /tmp 或 /opt 所在分區(qū)用 noexec 掛載就算文件有執(zhí)行位內(nèi)核也會直接拒絕運行報錯往往是 Permission denied。排查時先 df -h /opt 看掛載點再用 mount -o remount,exec /opt 臨時放行長期方案是把 rar 放到非 noexec 的分區(qū)。這兩條加起來能避免許多「明明按教程裝了卻跑不起來」的玄學(xué)困擾。3. 高頻命令實戰(zhàn)解壓、壓縮、加密與多卷拆分3.1 解壓命令 x 與 e保留目錄 vs 全部拍平RAR 命令行最常用的是 x 和 e 兩個子命令。x 解壓時保留壓縮包里的目錄結(jié)構(gòu)e 則把全部文件平鋪到目標(biāo)目錄。二者的區(qū)別不只是目錄結(jié)構(gòu)大量同名文件在 e 方式下會互相覆蓋這才是真正的翻車點。# x按原目錄結(jié)構(gòu)解壓到 /data/restore rar x /data/backup/backup.rar /data/restore/ # e舍棄目錄結(jié)構(gòu)把文件全部攤平 rar e /data/backup/backup.rar /data/restore/x 適合遷移和完整還原它能保留原打包者在 Windows 下建的路徑e 適合從包里撈一個文件、或者包內(nèi)只有一層結(jié)構(gòu)的場景。目標(biāo)目錄不存在時 rar 會自動創(chuàng)建省去 mkdir 一步。自動化腳本里我?guī)缀醣丶觾蓚€參數(shù)-o 表示覆蓋已存在文件-y 跳過所有確認(rèn)提示。不加 -y 時批量解壓遇到同名文件會停下來問你腳本就此掛住——這個細(xì)節(jié)最容易忽視也是 cron 任務(wù)卡死的一大來源。補充一個習(xí)慣解壓前先 rar l 或 rar t 預(yù)覽一遍。x 在遇到包內(nèi)路徑名帶危險層級時可能給你解出一堆意想不到的目錄結(jié)構(gòu)先看內(nèi)容再解壓是我處理未知壓縮包的鐵律。3.2 壓縮命令 a常用參數(shù)與壓縮級別創(chuàng)建 RAR 用 a 子命令追加文件到已有包也是 a。壓縮時最常用的開關(guān)是壓縮級別 -m、固實模式 -s、遞歸 -r 和排除基礎(chǔ)路徑 -ep1。# 把 /var/log/app 遞歸壓縮最大壓縮級、固實模式、去掉根路徑 rar a -r -m5 -s -ep1 /data/backup/app_$(date %F).rar /var/log/app參數(shù)逐個拆解-r 遞歸進(jìn)子目錄壓縮目錄時建議帶上避免有的版本只把目錄本身加進(jìn)去-m5 是最大壓縮級別壓縮時間最長但體積最小-m0 只打包不壓縮速度最快-m1 到 -m3 是日常檔位-s 開啟固實模式把包內(nèi)文件作為一個整體數(shù)據(jù)流壓縮壓縮率更高代價是損壞后恢復(fù)難度和隨機讀取成本增加-ep1 表示排除命令行傳入的根目錄路徑解壓出來直接是 app 下的相對路徑而不是 /var/log/app/xxx 一層套一層。備份日志這類重復(fù)內(nèi)容時用 -m5 -s 能壓掉大部分重復(fù)字節(jié)如果備份的是已經(jīng)壓縮過的視頻、圖片、數(shù)據(jù)庫導(dǎo)出文件-m0 反而更合理能省掉大量 CPU 時間。表格化的選擇邏輯大概是-m0 存儲級適合已壓縮內(nèi)容-m1 快速檔適合臨時打包-m3 標(biāo)準(zhǔn)檔日常均衡-m5 最大壓縮適合日志和文本類。整體沒有絕對正確答案按內(nèi)容類型決定就好。3.3 加密與多卷拆分-p、-hp 與 -vRAR 的加密分兩個層級很多人壓完發(fā)給對方對方還是能在壓縮包里看到文件名列表原因就是只用了 -p 沒加 -hp。單獨 -p 只對文件內(nèi)容加密文件名和目錄結(jié)構(gòu)仍然可見-hp 加密文件頭把文件名列表一起藏住。交付敏感資料時我用的是文件頭加密# -hp 同時加密數(shù)據(jù)與文件頭文件名列表不會暴露 rar a -hpPssw0rd2024 secret.rar /data/secret/ # 每 100M 拆一個分卷 rar a -v100M /data/backup/large_$(date %F).rar /data/backup/dump/密碼直接寫在命令行里會留在 shell 歷史中生產(chǎn)腳本里建議用環(huán)境變量傳入密碼或者運行時交互式輸入演示寫法只是為了讓你看清參數(shù)結(jié)構(gòu)。多卷參數(shù) -v 支持 k、m、g 單位-v100M 就是每卷 100MB。拆分后文件名會自動帶 part01、part02 后綴。解壓多卷包時只要指定第一個分卷rar 會自動找后續(xù)分卷前提是它們都在同一個目錄且命名沒被改動。如果有人單獨下載了 part02 想解壓rar 會提示缺少第一個分卷這不是命令寫錯是分卷規(guī)則如此。3.4 查看與校驗l、t 子命令的排錯價值l 列出壓縮包內(nèi)容t 測試壓縮包完整性。這兩個子命令在排錯場景里使用頻率最高。接別人壓縮包的第一件事我會先 rar l 把文件路徑、大小、日期看一遍確認(rèn)里面沒有詭異路徑再解壓。rar l backup.rar rar t backup.rar echo $?l 的輸出包含原始路徑、體積、壓縮率和日期能快速判斷文件名編碼是否正常、體積是否合理也會提前暴露包內(nèi)是否有危險路徑。t 會把整個包在內(nèi)部解壓并比對 CRC 校驗值完整無誤才返回 0。在腳本里rar t 是承接下一步解壓的可靠閘門只有 t 通過才允許 rar x 落地。對多卷包執(zhí)行 t 同樣只需指定第一個分卷rar 會自動遍歷其余分卷。我還會在 t 之后順手看一遍 $?因為有的腳本環(huán)境會把 rar 的非 0 退出碼吞掉顯式 echo 一下更穩(wěn)。4. 進(jìn)階用法日志歸檔、Web 面板集成與自動清理4.1 把日志目錄寫成按期歸檔的備份腳本「壓縮完馬上校驗」是我寫備份腳本時的固定動作。把日志目錄遞歸打包、做最大壓縮、去掉根路徑再立刻跑一趟 rar t兩步串聯(lián)保證落到磁盤的備份文件一定是完整可用的。腳本模板如下#!/usr/bin/env bash set -euo pipefail RAR/usr/local/bin/rar LOG_DIR/var/log/app BACKUP_DIR/data/backup DATE$(date %Y%m%d_%H%M%S) TARGET${BACKUP_DIR}/app_${DATE}.rar mkdir -p $BACKUP_DIR $RAR a -r -m5 -s -ep1 $TARGET $LOG_DIR $RAR t $TARGET || exit 1 echo backup finished: $TARGETset -euo pipefail 三個開關(guān)各司其職遇到錯誤立即退出、變量未定義報錯、管道中間環(huán)節(jié)失敗也退出$RAR 指向 rar 絕對路徑避開了 cron 環(huán)境沒有 PATH 的坑帶時間戳的文件名讓同名文件不會互相覆蓋。t 校驗失敗時 exit 1腳本調(diào)用方可以通過退出碼知道備份沒成功。我還會把清理動作從壓縮腳本里拆出去不推薦在壓縮腳本里順手刪老包避免腳本中途失敗連帶把文件刪了。4.2 在 Web 面板與 CI 腳本中調(diào)用 rar寶塔、AMH、GitLab CI 這類環(huán)境定時任務(wù)默認(rèn)用的可能是 sh 而不是 bash環(huán)境變量極簡。面板里填 rar 開頭大概率 command not found根源不是 rar 沒裝而是執(zhí)行環(huán)境不讀 /etc/profile。處理辦法只有兩條路腳本里顯式寫絕對路徑或者開頭先把 PATH 鋪好。#!/usr/bin/env bash PATH/usr/local/bin:/usr/bin:/bin export PATH # 面板任務(wù)里填這個腳本路徑用 bash 執(zhí)行 if /usr/local/bin/rar t /data/backup/weekly.rar; then rm -f /data/backup/tmp_*.rar fi這里有一個甄別技巧面板默認(rèn)用哪個 shell 解析腳本決定了 $(date %F) 這類語法能不能用。dash 對某些 bash 擴展語法支持有限最好在面板的任務(wù)設(shè)置里顯式寫 bash /path/script.sh或者讓任務(wù)調(diào)用一個以 #!/usr/bin/env bash 開頭的腳本文件。另一個隱藏問題是執(zhí)行用戶很多面板用 www 用戶跑任務(wù)備份目錄的寫權(quán)限、rar 可執(zhí)行文件的讀權(quán)限都要提前放好。我遇到過腳本在 root 終端正常、面板定時任務(wù)一直報 Permission denied最后發(fā)現(xiàn)是 www 用戶對 /data/backup 沒有寫權(quán)限chown 給 www 之后立刻恢復(fù)。4.3 與 find、crontab 組合保留最近 N 份備份歸檔文件越積越多手動清理不現(xiàn)實。把 crontab 與 find 組合起來保留最近 30 天更早的自動刪除。我的習(xí)慣是把刪除動作和備份動作分開兩個定時任務(wù)之間留出足夠間隔避免備份還沒生成完就被清掉。# 每天 2 點執(zhí)行備份腳本凌晨 4 點半清理過期文件 0 2 * * * /usr/local/scripts/backup_app.sh 30 4 * * * find /data/backup -maxdepth 1 -name app_*.rar -mtime 30 -deletefind 的 -maxdepth 1 防止遞歸掃描子目錄-mtime 30 按修改時間過濾超過 30 天的文件才會被刪除。如果你不想讓清理行為不可逆把 -delete 換成 mv 到 /data/backup/archive 再定期處理相當(dāng)于多留一道后悔藥。結(jié)合前面的 rar t 校驗可以認(rèn)為磁盤上的每個備份包都是經(jīng)過驗證的清理流程才敢放心跑。順序記住一句話先壓縮、再校驗、后清理任何一步失敗都停住不自動進(jìn)入下一步。5. 避坑復(fù)盤Linux 下 RAR 工具的四個典型翻車現(xiàn)場這一章把我在不同服務(wù)器上實際遇到過的坑逐一拆開每條按現(xiàn)象、原因、解決的順序?qū)懛奖銓φ张挪?。四個問題相互獨立但都容易和上面的部署步驟混在一起出現(xiàn)。5.1 command not foundPATH 沒刷進(jìn)去現(xiàn)象裝完執(zhí)行 rar 提示 rar: command not found但切到 /opt/rar 目錄用 ./rar 又能跑。原因二進(jìn)制可能不在 PATH 覆蓋的目錄里也可能是當(dāng)前 shell 的 PATH 緩存還沒刷新。cron 和 Web 面板里出現(xiàn)這個提示則幾乎一定是執(zhí)行環(huán)境沒有加載 profile 或 bashrc而不是路徑本身沒設(shè)好。解決先用 which rar 或 ls /usr/local/bin/rar 確認(rèn)文件在不在。文件存在但命令找不到說明是 PATH 沒生效改用絕對路徑調(diào)用最省心。我把 /usr/local/bin 和 /opt/rar 都寫進(jìn) /etc/profile.d/再在腳本里用 $RAR 變量雙保險之后 command not found 就很少出現(xiàn)了。5.2 Exec format errorx64 包裝到了 ARM 服務(wù)器現(xiàn)象執(zhí)行 rar 時提示 bash: /usr/local/bin/rar: cannot execute binary file: Exec format error文件明明存在權(quán)限也是 755。原因標(biāo)題里寫著 x64對應(yīng)的是 x86_64 指令集。ARM 服務(wù)器、蘋果 M 系列云主機上跑 x64 二進(jìn)制內(nèi)核直接拒絕加載跟文件權(quán)限無關(guān)。解決先 uname -m 確認(rèn)架構(gòu)再下載匹配的版本。用 file 命令驗證一下是最穩(wěn)的file /usr/local/bin/rar # 期望輸出 ELF 64-bit LSB executable, x86-64 ...我在一臺 ARM 云主機上硬裝過 x64 包折騰半小時才發(fā)現(xiàn)方向錯了。從那以后拿到任何二進(jìn)制我都會先跑 file 確認(rèn)格式再考慮怎么部署。5.3 中文文件名亂碼先看 l 的輸出再決定怎么解現(xiàn)象rar x 解壓后目錄和文件名變成亂碼或者是一串問號用 ls 看完全認(rèn)不出。原因壓縮包在 Windows 上生成時文件名用的是本地編碼比如 GBKLinux 側(cè)按 UTF-8 解碼就錯位。RAR 6.x 版本對編碼的兼容性好了一些但老包、第三方工具打的包仍然很容易踩。解決解壓前先 rar l 看看包內(nèi)文件名在終端是否正常。如果 l 階段就亂碼說明是源包編碼問題解壓后用 convmv 轉(zhuǎn)碼文件名# 發(fā)行版先安裝 convmv再對解壓后的目錄做文件名轉(zhuǎn)碼 convmv -f gbk -t utf8 --notest /data/restore/注意是轉(zhuǎn)文件名不是轉(zhuǎn)文件內(nèi)容千萬別對文件內(nèi)容做同樣操作。亂碼目錄里文件多了之后手工 mv 會非常累convmv 一條命令就能把整個目錄樹的文件名重寫掉。這個經(jīng)驗幫我處理過好幾份 Windows 交付物價值很高。5.4 unrar-free 冒充 unrar只能解不能壓現(xiàn)象執(zhí)行 unrar a archive.rar dir 時報 unknown option或者說不支持該操作但解壓卻能正常用。原因系統(tǒng)發(fā)行版自帶的 unrar-free 只是 RAR 讀取器功能被裁剪到只能解壓不支持 a、c 這類寫入子命令。命令名字一樣能力完全是兩個東西。解決在服務(wù)器上同時存在兩套 unrar 時我一般不會去卸載系統(tǒng)包而是統(tǒng)一用 rar 前綴調(diào)用完整版。腳本里寫 /usr/local/bin/rar a從不用 unrar 去壓縮這樣系統(tǒng)里的 unrar-free 是什么版本都不會被誤用。如果你確認(rèn) unrar 指向的是本包拷過去的二進(jìn)制那它也是完整版但為了消除歧義全路徑 rar 是最省心的寫法也方便團隊其他成員接手時一眼看懂。6. 驗證與排錯陌生 RAR 也值得先過一遍 rar t 再解壓收到一份幾十 GB 的交付 RAR第一反應(yīng)直接 x 解壓很容易在十分鐘后才發(fā)現(xiàn)有文件損壞。壓縮包損壞不會在解壓一開始就全部暴露而是解到某個文件時才報 CRC 錯誤前面花的時間全部白費。我的固定流程是三步先 l 看內(nèi)容、再 t 驗完整性、最后 x 解壓。腳本化之后大概是這樣的#!/usr/bin/env bash set -euo pipefail ARCHIVE/data/delivery/xxx.part01.rar OUTDIR/data/extracted /usr/local/bin/rar l $ARCHIVE if /usr/local/bin/rar t $ARCHIVE; then /usr/local/bin/rar x -o- -y $ARCHIVE $OUTDIR else echo integrity check failed: $ARCHIVE exit 1 firar l 先輸出包內(nèi)文件清單看看路徑和數(shù)據(jù)量是否符合預(yù)期rar t 校驗整個包失敗立即停住任何文件都不落地rar x 用 -o- 跳過已有文件避免覆蓋服務(wù)器上的同名文件-y 自動應(yīng)答所有確認(rèn)提示。多卷包同樣適用把 part01 傳給 l、t、x 即可后續(xù)分卷會按序號自動續(xù)上。這套流程還能順便排查三類問題密碼錯誤時 t 階段就會停下分卷缺失時 t 階段會報缺卷文件名編碼問題在 l 階段就能發(fā)現(xiàn)。相比直接解壓多花的時間只是先跑一遍 CRC對幾十 GB 的包也就幾分鐘。我在處理數(shù)據(jù)庫邏輯備份、外部交付包時幾乎每份都強制走這個流程。解壓完成后我會再抽查兩個關(guān)鍵文件的 md5和交付方發(fā)來的校驗值比對一下確認(rèn)磁盤層面沒有靜默損壞。這一步是強迫自己在交付前做的畢竟服務(wù)器上出了錯最后背鍋的還是自己。從那以后我不管處理誰的 RAR 壓縮包都強制先走 rar l、rar t、rar x 這個順序已經(jīng)養(yǎng)成肌肉記憶幾乎沒再因為解壓翻過車。希望幫到你。本文還有配套的精品資源點擊獲取