一、file命令簡介
在Linux系統中,我們使用file命令來對文件類型進行識別和分類。file命令可以讀取文件的數據,並基於讀取的數據和一些算法來判斷文件的類型。file命令可以幫助我們快速識別某個文件的類型,無需依賴文件名後綴或者文件的內容進行猜測。
file命令的基本語法如下:
$ file [OPTION]... [FILE]...
file命令常見的參數如下:
- -b, –brief:只顯示文件類型,不包含其它描述信息。
- -i, –mime:以MIME格式輸出文件類型。
- -k, –keep-going:即使在多個文件的識別過程中出現錯誤,仍然繼續執行,不會停止。
- -s, –special-files:僅針對特殊類型的文件進行識別。
- -z, –uncompress:在讀取壓縮文件時,首先解壓縮後再讀取。
二、file命令的基本使用
我們先創建一些測試文件,並使用file命令來識別它們的類型:
$ touch test.txt test.jpg test.gz $ file test.txt test.txt: empty $ file test.jpg test.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, Exif Standard: [TIFF image data, little-endian, direntries=3, manufacturer=EASTMAN KODAK COMPANY, model=KODAK EASYSHARE C743 ZOOM DIGITAL CAMERA, orientation=upper-left, xresolution=113, yresolution=121, resolutionunit=2, software=Adobe Photoshop CS3 Windows, datetime=2015:01:12 12:16:10], baseline, precision 8, 2592x1944, frames 3 $ file test.gz test.gz: gzip compressed data, was "test", last modified: Fri Sep 14 10:52:11 2018, max compression, from Unix
從上面的測試結果可以看出,file命令可以識別文本文件、圖片和壓縮文件等多種類型。
三、file命令的高級使用
1. 使用-m參數加載自定義識別庫
默認情況下,file命令會根據系統庫中的識別規則進行文件識別。我們也可以使用-m參數,在file命令中加載自定義的識別規則。例如:
$ touch test.csv $ file test.csv test.csv: empty $ echo "text/csv" > /tmp/magic $ file -m /tmp/magic test.csv test.csv: text/csv
2. 對目錄進行文件類型識別
在實際應用中,我們經常需要對一個目錄中的文件進行類型識別。此時可以使用find命令來查找所有文件,然後再使用xargs命令來對每個文件執行file命令。例如,在當前目錄下進行如下操作:
$ mkdir testdir $ touch testdir/test1.txt testdir/test2.jpg testdir/test3.gz $ find testdir -type f -print0 | xargs -0 file testdir/test1.txt: empty testdir/test2.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), density 72x72, segment length 16, Exif Standard: [TIFF image data, little-endian, direntries=3, manufacturer=EASTMAN KODAK COMPANY, model=KODAK EASYSHARE C743 ZOOM DIGITAL CAMERA, orientation=upper-left, xresolution=113, yresolution=121, resolutionunit=2, software=Adobe Photoshop CS3 Windows, datetime=2015:01:12 12:16:10], baseline, precision 8, 2592x1944, frames 3 testdir/test3.gz: gzip compressed data, was "test", last modified: Fri Sep 14 10:52:11 2018, max compression, from Unix
上述操作可以對testdir目錄下的所有文件進行類型識別,並輸出文件類型。
3. 使用file命令進行安全檢查
有些惡意文件可能會利用文件類型欺騙用戶,執行惡意代碼等。為了防止此類攻擊,我們可以在系統中設置白名單,只允許特定類型的文件運行。我們可以使用file命令對系統中所有文件進行類型識別,然後與白名單比對,篩選出非法文件。例如,我們在/etc/profile中添加如下命令:
for file in $(find / -type f -print0 | xargs -0 file | grep -v "ASCII text" | awk -F: '{print $1}'); do if ! grep -q -f /etc/whitelist.txt <(file -b "$file"); then echo "非法文件類型:" "$file" rm "$file" fi done
上述命令會查找系統中所有非文本類型的文件,並對其進行類型識別。然後與/etc/whitelist.txt文件中的文件類型進行比對,篩選出非法文件,並直接刪除。
四、總結
file命令是Linux系統中一個非常實用的文件類型識別工具,可以幫助我們快速準確地識別各種類型的文件。它支持多種參數,可以自定義識別規則,也可以對目錄進行文件類型識別。在安全檢查方面,它也有很好的應用價值。作為Linux系統管理員,學習使用file命令必不可少。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/254151.html