Linux 下"一切皆文件",但文件擴展名不可靠(可任意修改)。file 命令通過讀取文件頭部**魔數**並匹配 /usr/share/misc/magic.mgc 數據庫,準確識別文件真實類型,是系統管理、安全審計、數據恢復的基礎工具。
file [-bchikLlNnprsvzZ] [-f namefile] [-m magicfiles] [-P param=value] file...
# 常用組合
file -b file # 簡潔模式,僅輸出類型,不顯示文件名
file -i file # 輸出 MIME 類型 (text/plain; charset=us-ascii)
file -z file # 解壓縮後檢測內部類型
file -Z file # 僅檢測壓縮容器類型
file -s /dev/sda1 # 讀取塊設備(需 root),識別文件系統類型
file -f list.txt # 批量處理文件列表
file -C # 編譯 magic 數據庫(修改 /usr/share/misc/magic 後)
$ file /bin/bash
/bin/bash: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=xxx, for GNU/Linux 3.2.0, stripped
# 關鍵字段:
# ELF 64-bit LSB - 格式/位數/字節序
# shared object - 類型:可執行/共享庫/核心轉儲/重定向文件
# x86-64 - 架構
# dynamically linked - 動態鏈接
# interpreter ... - 動態鏈接器路徑
# stripped - 符號表已剝離(調試信息缺失)
$ file /etc/passwd
/etc/passwd: ASCII text
$ file /usr/bin/python3
/usr/bin/python3: a /usr/bin/python3.8 script, ASCII text executable
$ file script.sh
script.sh: Bourne-Again shell script, ASCII text executable
# 檢測依據:shebang #!/bin/bash + 執行權限位
$ file backup.tar.gz
backup.tar.gz: gzip compressed data, from Unix, last modified: Mon Jan 1 00:00:00 2024, max compression
$ file -z backup.tar.gz
backup.tar.gz: POSIX tar archive (GNU)
# -z 穿透壓縮層識別內容
$ file photo.jpg
photo.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, progressive, precision 8, 1920x1080, components 3
$ file document.pdf
document.pdf: PDF document, version 1.7, 10 pages
$ file audio.mp3
audio.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 128 kbps, 44.1 kHz, JointStereo
$ file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext4 filesystem data, UUID=xxxx, volume name "/boot", needs journal recovery
$ file -s /dev/sdb
/dev/sdb: DOS/MBR boot sector; partition 1 : ID=0x83, active, starthead 32, startsector 2048, 1000000 sectors
# 識別分區表類型、分區信息
/usr/share/misc/magic.mgc # 編譯後二進制數據庫(運行時加載)
/usr/share/misc/magic/ # 源碼目錄(分類文件)
/etc/magic # 用戶自定義擴展(優先級高)
# /etc/magic
0 string MYCOMPANY_V1 MyCompany Custom Format
>4 lelong >0 Version %ld
>8 string >\0 Description: %s
# 編譯生效
file -C
# 測試
echo -ne "MYCOMPANY_V1\x01\x00\x00\x00Test" | file -
# 輸出: /dev/stdin: MyCompany Custom Format, Version 1, Description: Test
find /home -type f -perm /111 -exec file {} + | grep -v "text\|script" | grep ELF
# 發現用戶目錄下的非文本可執行文件(潛在木馬/挖礦程序)
# dd 恢復的裸數據文件
file recovered_001
# 輸出: PNG image data, 800x600, 8-bit/color RGB, non-interlaced
# 重命名為 recovered_001.png 即可查看
file -f download_list.txt | grep -E "HTML|text" | awk -F: '{print $1}' | xargs rm -f
# 刪除偽裝成圖片/視頻實為 HTML 錯誤頁的文件
file layer.tar
layer.tar: POSIX tar archive
# 解壓後 file 各文件可分析鏡像組成
| 工具 | 特點 | 適用場景 |
|---|---|---|
| file | 標準、輕量、魔數匹配 | 通用類型識別、腳本集成 |
| mimetype (shared-mime-info) | 基於 FreeDesktop 規範、擴展名+內容雙重檢測 | 桌面環境、GUI 文件管理器 |
| trid | 簽名數據庫豐富、支持更多冷門格式 | 數據取證、逆向分析 |
| binwalk | 固件/嵌入式文件系統掃描、嵌入文件提取 | IoT 固件分析、隱藏文件提取 |