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