假設你的 Linux 伺服器上有一個超大的 ISO 鏡像文件,你想要打開它,然後提取或複製其中的一個文件。你會怎麼做呢?
其實在 Linux 系統裡,有很多方法可以實現這個要求。
比如說,你可以使用傳統的 mount 指令以唯讀方式把 ISO 鏡像檔載入為 loop 設備,然後再把檔案複製到另一個目錄。
在Linux 系統下提取ISO 鏡像檔案
為了完成該測試,你得有一個ISO 鏡像檔案(我使用ubuntu-16.10-server-amd64.iso 系統鏡像檔案)以及用於掛載和提取ISO 鏡像檔案的目錄。
首先,使用以下指令建立一個掛載目錄來掛載ISO 鏡像檔:
$ sudo mkdir /mnt/iso
目錄建立完成後,你就可以執行以下指令很容易掛載ubuntu-16.10-server-amd64.iso 系統鏡像檔,並查看其中的內容。
$ sudo mount -o loop ubuntu-16.10-server-amd64.iso /mnt/iso $ ls /mnt/iso/
在 Linux 系統裡掛載 ISO 鏡像
現在你就可以進入到掛載目錄 /mnt/iso 裡,檢視檔案或使用 cp 指令把檔案複製到 /tmp 目錄了。
$ cd /mnt/iso $ sudo cp md5sum.txt /tmp/ $ sudo cp -r ubuntu /tmp/
在 Linux 系統中複製 ISO 鏡像裡的檔案
注意:-r 選項用於遞歸複製目錄裡的內容。如有必要,你也可以監控複製指令的完成進度。
使用7zip 指令來擷取ISO 鏡像裡的內容
如果不想掛載ISO 鏡像,你可以簡單地安裝一個7zip 工具,這是一個自由而開源的解壓縮軟體,用於壓縮或解壓縮不同類型格式的文件,包括TAR、XZ、GZIP、ZIP、BZIP2 等等。
$ sudo apt-get install p7zip-full p7zip-rar [On Debian/Ubuntu systems] $ sudo yum install p7zip p7zip-plugins [On CentOS/RHEL systems]
7zip 軟體安裝完成後,你就可以使用7z 指令來擷取 ISO 鏡像檔裡的內容了。
$ 7z x ubuntu-16.10-server-amd64.iso
使用 7zip 工具在 Linux 系統下提取 ISO 鏡像裡的檔案
注意:跟 Linux 的 mount 命令相比起來,7zip 在壓縮和解壓縮任何格式的檔案時速度更快,更聰明。
使用 isoinfo 指令來提取 ISO 鏡像檔案內容
雖然 isoinfo 指令是用來以目錄的形式列出 iso9660 鏡像檔案的內容,但你也可以使用該程式來擷取檔案。
我說過,isoinfo 程式會顯示目錄列表,因此先列出 ISO 鏡像檔的內容。
$ isoinfo -i ubuntu-16.10-server-amd64.iso -l
Linux 裡列出ISO 檔案的內容
現在你可以如下的方式從ISO 鏡像檔中擷取單一檔案:
$ isoinfo -i ubuntu-16.10-server-amd64.iso -x MD5SUM.TXT > MD5SUM.TXT
注意:因為-x 解壓縮到標準輸出,必須使用重新導向來提取指定檔案。
從 ISO 鏡像檔案中提取單一檔案