原文链接信创系统统信、麒麟等到底是怎么识别文件类型的今天终于弄明白了前几天有粉丝问我一个问题他说“如果我把test.jpg改成test.png它会不会就变成PNG图片”我把文件拖到Linux里执行了一个file test.png系统告诉我JPEG image data那一刻他才明白原来Linux根本不看文件后缀那么Linux到底怎么看文件1.最常用file命令file 文件名例如pdsywpdsyw1024:~/桌面$ file test.png ​ test.png: PNG image data, 330 x 224, 8-bit/color RGB, non-interlaced其中PNG image data便是file识别到的文件类型详细的参考值可查看附表一。2.查看MIME类型file -i 文件名示例pdsywpdsyw1024:~/桌面$ file -i test.png ​ test.png: image/png; charsetbinary其中image/png; charsetbinary便是file -i识别到的文件类型详细的参考值可查看附表二。3.查看文件头内容有些文件格式可以通过文件开头判断pdsywpdsyw1024:~/桌面$ sudo apt install xxd ​ pdsywpdsyw1024:~/桌面$ head -c 16 test.png | xxd ​ 00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR其中8950 4e47便是识别到的文件格式详细的参考值可查看附表三。附表一常见file可以识别的文件类型分类常见文件格式常见后缀file 典型识别结果普通文本ASCII 文本.txt .log .confASCII text普通文本UTF-8 文本.txt .md .csvUTF-8 Unicode text普通文本空文件无固定后缀empty脚本文件Shell 脚本.shBourne-Again shell script脚本文件Python 脚本.pyPython script脚本文件Perl 脚本.plPerl script脚本文件PHP 脚本.phpPHP script网页文件HTML 文件.html .htmHTML document网页文件XML 文件.xmlXML document text数据文件JSON 文件.jsonJSON text data数据文件CSV 文件.csvCSV text 或 ASCII text图片文件PNG 图片.pngPNG image data图片文件JPEG 图片.jpg .jpegJPEG image data图片文件GIF 图片.gifGIF image data图片文件BMP 图片.bmpPC bitmap图片文件TIFF 图片.tif .tiffTIFF image data图片文件WebP 图片.webpRIFF ... Web/P image图片文件SVG 矢量图.svgSVG Scalable Vector Graphics image文档文件PDF 文档.pdfPDF documentOffice 文档Word 旧版文档.docComposite Document File V2 DocumentOffice 文档Excel 旧版表格.xlsComposite Document File V2 DocumentOffice 文档PowerPoint 旧版演示.pptComposite Document File V2 DocumentOffice 文档Word 新版文档.docxMicrosoft Word 2007Office 文档Excel 新版表格.xlsxMicrosoft Excel 2007Office 文档PowerPoint 新版演示.pptxMicrosoft PowerPoint 2007开放文档ODT 文档.odtOpenDocument Text开放文档ODS 表格.odsOpenDocument Spreadsheet开放文档ODP 演示.odpOpenDocument Presentation压缩文件ZIP 压缩包.zipZip archive data压缩文件Gzip 压缩文件.gzgzip compressed data压缩文件Bzip2 压缩文件.bz2bzip2 compressed data压缩文件XZ 压缩文件.xzXZ compressed data压缩文件7z 压缩包.7z7-zip archive data压缩文件RAR 压缩包.rarRAR archive data归档文件Tar 归档包.tarPOSIX tar archive归档压缩Tar.gz 包.tar.gz .tgzgzip compressed data归档压缩Tar.xz 包.tar.xzXZ compressed dataLinux 程序ELF 可执行文件无固定后缀ELF 64-bit LSB executableLinux 程序ELF 共享库.soELF 64-bit LSB shared objectLinux 程序内核模块.koELF 64-bit LSB relocatableWindows 程序EXE 可执行文件.exePE32 executableWindows 程序DLL 动态库.dllPE32 executable DLLmacOS 程序Mach-O 可执行文件无固定后缀Mach-O executable音频文件MP3 音频.mp3Audio file with ID3 或 MPEG ADTS音频文件WAV 音频.wavRIFF ... WAVE audio音频文件FLAC 音频.flacFLAC audio bitstream data音频文件OGG 音频.oggOgg data视频文件MP4 视频.mp4ISO Media, MP4视频文件AVI 视频.aviRIFF ... AVI视频文件MKV 视频.mkvMatroska data视频文件MOV 视频.movQuickTime movie字体文件TrueType 字体.ttfTrueType Font data字体文件OpenType 字体.otfOpenType font data字体文件WOFF 字体.woffWeb Open Font Format镜像文件ISO 镜像.isoISO 9660 CD-ROM filesystem data镜像文件SquashFS 镜像.squashfsSquashfs filesystem镜像文件ext 文件系统镜像.imgLinux rev ... ext filesystem data磁盘/引导MBR 引导扇区.img .binDOS/MBR boot sector数据库SQLite 数据库.db .sqliteSQLite 3.x database数据库Berkeley DB.dbBerkeley DB证书密钥PEM 证书.pem .crtPEM certificate证书密钥OpenSSH 私钥无固定后缀OpenSSH private key证书密钥PGP 公钥.asc .gpgPGP public key block软件包Debian 安装包.debDebian binary package软件包RPM 安装包.rpmRPM软件包AppImage 程序.AppImageELF ... executable配置文件INI/配置文本.ini .confASCII text 或 UTF-8 Unicode text日志文件系统日志.logASCII text 或 UTF-8 Unicode text附表二常见的MIME类型识别结果分类文件格式常见后缀file -i 典型识别结果文本文件普通文本.txt .log .conftext/plain; charsetus-ascii文本文件UTF-8 文本.txt .md .csvtext/plain; charsetutf-8文本文件GBK/中文文本.txt .csvtext/plain; charsetiso-8859-1 或其他编码文本文件空文件无固定后缀inode/x-empty; charsetbinary脚本文件Shell 脚本.shtext/x-shellscript; charsetus-ascii脚本文件Python 脚本.pytext/x-script.python; charsetus-ascii脚本文件Perl 脚本.pltext/x-perl; charsetus-ascii脚本文件PHP 脚本.phptext/x-php; charsetus-ascii网页文件HTML 文件.html .htmtext/html; charsetus-ascii网页文件XML 文件.xmltext/xml; charsetus-ascii数据文件JSON 文件.jsonapplication/json; charsetus-ascii数据文件CSV 文件.csvtext/csv; charsetus-ascii 或 text/plain图片文件PNG 图片.pngimage/png; charsetbinary图片文件JPEG 图片.jpg .jpegimage/jpeg; charsetbinary图片文件GIF 图片.gifimage/gif; charsetbinary图片文件BMP 图片.bmpimage/bmp; charsetbinary图片文件TIFF 图片.tif .tiffimage/tiff; charsetbinary图片文件WebP 图片.webpimage/webp; charsetbinary图片文件SVG 图片.svgimage/svgxml; charsetus-ascii文档文件PDF 文档.pdfapplication/pdf; charsetbinaryOffice 文档Word 旧版文档.docapplication/msword; charsetbinaryOffice 文档Excel 旧版表格.xlsapplication/vnd.ms-excel; charsetbinaryOffice 文档PowerPoint 旧版演示.pptapplication/vnd.ms-powerpoint; charsetbinaryOffice 文档Word 新版文档.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document; charsetbinaryOffice 文档Excel 新版表格.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charsetbinaryOffice 文档PowerPoint 新版演示.pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation; charsetbinary开放文档ODT 文档.odtapplication/vnd.oasis.opendocument.text; charsetbinary开放文档ODS 表格.odsapplication/vnd.oasis.opendocument.spreadsheet; charsetbinary开放文档ODP 演示.odpapplication/vnd.oasis.opendocument.presentation; charsetbinary压缩文件ZIP 压缩包.zipapplication/zip; charsetbinary压缩文件Gzip 压缩文件.gzapplication/gzip; charsetbinary压缩文件Bzip2 压缩文件.bz2application/x-bzip2; charsetbinary压缩文件XZ 压缩文件.xzapplication/x-xz; charsetbinary压缩文件7z 压缩包.7zapplication/x-7z-compressed; charsetbinary压缩文件RAR 压缩包.rarapplication/vnd.rar; charsetbinary 或 application/x-rar归档文件Tar 包.tarapplication/x-tar; charsetbinaryLinux 程序ELF 可执行文件无固定后缀application/x-executable; charsetbinaryLinux 程序ELF 共享库.soapplication/x-sharedlib; charsetbinaryLinux 程序内核模块.koapplication/x-object; charsetbinaryWindows 程序EXE 文件.exeapplication/vnd.microsoft.portable-executable; charsetbinaryWindows 程序DLL 文件.dllapplication/vnd.microsoft.portable-executable; charsetbinary音频文件MP3 音频.mp3audio/mpeg; charsetbinary音频文件WAV 音频.wavaudio/x-wav; charsetbinary 或 audio/vnd.wave音频文件FLAC 音频.flacaudio/flac; charsetbinary音频文件OGG 音频.oggaudio/ogg; charsetbinary视频文件MP4 视频.mp4video/mp4; charsetbinary视频文件AVI 视频.avivideo/x-msvideo; charsetbinary视频文件MKV 视频.mkvvideo/x-matroska; charsetbinary视频文件MOV 视频.movvideo/quicktime; charsetbinary字体文件TTF 字体.ttffont/sfnt; charsetbinary 或 application/x-font-ttf字体文件OTF 字体.otffont/sfnt; charsetbinary 或 application/vnd.ms-opentype字体文件WOFF 字体.wofffont/woff; charsetbinary字体文件WOFF2 字体.woff2font/woff2; charsetbinary镜像文件ISO 镜像.isoapplication/x-iso9660-image; charsetbinary镜像文件SquashFS 镜像.squashfsapplication/octet-stream; charsetbinary镜像文件IMG 镜像.imgapplication/octet-stream; charsetbinary数据库SQLite 数据库.db .sqliteapplication/vnd.sqlite3; charsetbinary证书密钥PEM 证书.pem .crttext/plain; charsetus-ascii证书密钥OpenSSH 私钥无固定后缀text/plain; charsetus-ascii证书密钥DER 证书.der .cerapplication/octet-stream; charsetbinary软件包Debian 安装包.debapplication/vnd.debian.binary-package; charsetbinary软件包RPM 安装包.rpmapplication/x-rpm; charsetbinary软件包AppImage 程序.AppImageapplication/x-executable; charsetbinary附表三常见文件头识别表分类文件类型常见后缀文件头特征十六进制特征说明文档PDF.pdf%PDF25 50 44 46PDF 文档图片PNG.png.PNG89 50 4E 47 0D 0A 1A 0APNG 图片图片JPEG / JPG.jpg .jpeg无明显文本FF D8 FFJPG 图片开头通常是 FF D8 FF图片GIF87a.gifGIF87a47 49 46 38 37 61GIF 图片图片GIF89a.gifGIF89a47 49 46 38 39 61GIF 图片图片BMP.bmpBM42 4DWindows 位图图片TIFF小端.tif .tiffII*49 49 2A 00TIFF 图片图片TIFF大端.tif .tiffMM*4D 4D 00 2ATIFF 图片图片WebP.webpRIFF....WEBP52 49 46 46 ... 57 45 42 50WebP 图片图片ICO 图标.ico无明显文本00 00 01 00Windows 图标文件图片SVG.svgsvg 或 XML3C 73 76 67 / 3C 3F 78 6D 6CSVG 本质是 XML 文本压缩ZIP.zip .docx .xlsx .pptx .jarPK50 4B 03 04ZIP 及基于 ZIP 的格式压缩空 ZIP.zipPK50 4B 05 06空 ZIP 包压缩分卷 ZIP.zipPK50 4B 07 08ZIP 分卷或流式压缩压缩Gzip.gz .tar.gz无明显文本1F 8Bgzip 压缩文件压缩Bzip2.bz2BZh42 5A 68bzip2 压缩文件压缩XZ.xz .tar.xz无明显文本FD 37 7A 58 5A 00xz 压缩文件压缩7-Zip.7z7z37 7A BC AF 27 1C7z 压缩包压缩RAR 旧版.rarRar!52 61 72 21 1A 07 00RAR 1.5-4.x压缩RAR 5.rarRar!52 61 72 21 1A 07 01 00RAR 5.x归档TAR.tarustar偏移 257 处75 73 74 61 72TAR 标识不在文件最开头可执行Linux ELF无固定后缀 .so .ko.ELF7F 45 4C 46Linux 可执行文件、动态库、内核模块可执行Windows EXE / DLL.exe .dllMZ4D 5AWindows PE 文件可执行Java Class.class无明显文本CA FE BA BEJava 字节码文件可执行Mach-O 32 位无固定后缀无明显文本FE ED FA CEmacOS 可执行文件可执行Mach-O 64 位无固定后缀无明显文本FE ED FA CFmacOS 64 位可执行文件可执行Mach-O 反向字节序无固定后缀无明显文本CE FA ED FE / CF FA ED FEmacOS 可执行文件脚本Shell 脚本.sh#!23 21通常第一行是 #!/bin/bash脚本Python 脚本.py#! 或文本23 21可能以 #!/usr/bin/python3 开头脚本Perl 脚本.pl#! 或文本23 21可能以 #!/usr/bin/perl 开头音频MP3带 ID3.mp3ID349 44 33常见 MP3 文件头音频MP3无 ID3.mp3无明显文本FF FB / FF F3 / FF F2MPEG 音频帧音频WAV.wavRIFF....WAVE52 49 46 46 ... 57 41 56 45WAV 音频音频FLAC.flacfLaC66 4C 61 43FLAC 无损音频音频/视频OGG.ogg .oga .ogvOggS4F 67 67 53OGG 容器视频MP4.mp4ftyp通常偏移 4 处66 74 79 70MP4 容器视频MOV.movftyp / moov常见偏移 4 处66 74 79 70QuickTime / MOV视频AVI.aviRIFF....AVI52 49 46 46 ... 41 56 49 20AVI 视频视频MKV / WebM.mkv .webmEBML1A 45 DF A3Matroska / WebM 容器字体TrueType 字体.ttf无明显文本00 01 00 00TTF 字体字体OpenType 字体.otfOTTO4F 54 54 4FOTF 字体字体WOFF.woffwOFF77 4F 46 46Web 字体字体WOFF2.woff2wOF277 4F 46 32Web 字体数据库SQLite.db .sqliteSQLite format 353 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33 00SQLite 数据库镜像ISO 9660.isoCD001偏移 32769 处43 44 30 30 31光盘 ISO 镜像镜像SquashFS.squashfshsqs / sqsh68 73 71 73 或 73 71 73 68Linux 压缩文件系统文件系统EXT 文件系统镜像.img无固定开头偏移 1080 处53 EFext2/ext3/ext4 超级块标识文件系统NTFS.imgNTFS偏移 3 处4E 54 46 53NTFS 文件系统文件系统FAT32.imgFAT32偏移 82 处46 41 54 33 32FAT32 文件系统证书PEM 证书.pem .crt-----BEGIN CERTIFICATE-----文本内容PEM 是文本格式密钥OpenSSH 私钥无固定后缀-----BEGIN OPENSSH PRIVATE KEY-----文本内容OpenSSH 私钥密钥RSA 私钥.key .pem-----BEGIN RSA PRIVATE KEY-----文本内容RSA 私钥软件包Debian 包.deb!arch21 3C 61 72 63 68 3Edeb 本质是 ar 归档软件包RPM 包.rpm无明显文本ED AB EE DBRPM 软件包虚拟磁盘VMDK.vmdkKDMV 或文本描述4B 44 4D 56VMware 虚拟磁盘虚拟磁盘QCOW2.qcow2QFI51 46 49 FBQEMU/KVM 虚拟磁盘文本XML.xml?xml3C 3F 78 6D 6CXML 文档文本HTML.html .htm!DOCTYPE / html3C 21 44 4F 43 / 3C 68 74 6D 6CHTML 页面文本JSON.json{ 或 [7B / 5B仅靠文件头不一定可靠文本CSV.csv普通文本无固定文件头需要结合内容判断文本UTF-8 BOM 文本.txt .csvBOMEF BB BF带 BOM 的 UTF-8 文本文本UTF-16 LE 文本.txtBOMFF FE小端 UTF-16文本UTF-16 BE 文本.txtBOMFE FF大端 UTF-16