實用技巧,用lsof命令監控tar文件解壓進度,簡單有效!
在Linux系統中,tar命令是一個非常常用的工具,用于創建和解壓縮歸檔文件。盡管tar命令本身沒有提供直接查看解壓進度的功能,但我們可以借助lsof(List Open Files)命令來間接監控解壓進度。本文將詳細介紹如何使用lsof命令來查看tar包的解壓進度。
工具介紹
- lsof: List Open Files是一個強大的工具,用于列出系統中所有打開的文件及其相關信息。
- stat:命令用于顯示文件或文件系統的狀態信息,包括大小、權限、修改時間等。
獲取當前解壓的偏移量
tar 包已經在解壓中如何知道解壓進度?
lsof這個命令可以做到,這個命令的字面的意思,是列出打開的文件。
root@ubuntu:~# lsof -o0 -oFo test.tar.xz
p1113
o0t771962880
- o: 設置偏移量從0開始
- oFo: 格式化輸出為易于解析的形式
關注結果的最后一列,其中字母o表示文件的偏移量,0表示偏移量從零開始,t表示偏移量類型為十進制。數值 771962880表示文件已經被打開并處理的數據偏移量,單位為字節。
了解文件當前已被打開的大小后,只需將其除以文件的總大小,就可以計算出解壓的進度。
獲取文件總大小
那么如何知道當前文件的總大小呢?
可以使用stat命令打印文件的總大小,并可以字節為單位顯示。
root@ubuntu:~# stat -c %s test.tar.xz
4194314240
計算解壓進度
現在我們可以構造以下的命令進行顯示當前解壓進度:
lsof -o0 -oFo test.tar.xz \
| awk -Ft -vS=$(stat -c %s test.tar.xz) \
'/^o/{printf( "%d%%\n", 100*$2/S)}'
-vS: 定義一個變量S并賦值為當時解壓文件總大小。
使用dd命令構造一個大文件,用于測試,具體命令如下:
dd if=/dev/urandom of=test bs=4M count=1000 #構造一個4G的大文件
tar -cvf test.tar.xz test # 把當前目錄下的test文件壓縮成test.tar.xz
打開一個終端,解壓當前目錄下的test.tar.xz文件,如下圖:
tar -xvf test.tar.xz
打開另外一個終端,執行如下命令查看當前解壓的進度:
封裝命令
為了簡化操作,我們可以將這些步驟集成到一個腳本中。保存以下腳本為 ptar.sh,具體的內容如下:
ptar.sh
使用別名的方式,創建一個別名,方便后續對該腳本的調用。編輯 ~/.bashrc ,添加以下行:
alias ptar='~/ptar.sh'
重新加載配置文件:
source ~/.bashrc
使用別名運行腳本:
ptar test.tar.xz
運行結果如下:
總結
雖然tar命令本身不提供直接的解壓進度顯示,但我們可以巧妙地使用lsof命令監控tar進程打開的文件,從而間接判斷解壓進度。這種方法特別適用于處理大型tar包或包含大量文件的歸檔文件,在系統運維和日常管理中非常實用。通過掌握lsof命令的使用技巧,可以大大提高我們的工作效率和系統監控能力。