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