🤓
意外に使えるfile command
file?
file はunix系のシステムに入っているファイルタイプを判別してくれるコマンド.
macOSにも入ってる.
$ man file
NAME
file – determine file type
SYNOPSIS
file [-bcdDhiIkLnNprsvz] [--exclude-quiet] [--extension] [--mime-encoding] [--mime-type]
[-f namefile] [-m magicfiles] [-P name=value] [-M magicfiles] file
file -C [-m magicfiles]
file [--help]
usage
file <filename>
でファイルの実態がなにかを教えてくれる.
$ file a.mov
a.mov: ISO Media, Apple QuickTime movie, Apple QuickTime (.MOV/QT)
$ file a.mp4
a.mp4: ISO Media, MP4 Base Media v1 [ISO 14496-12:2003]
$ file b.png
b.png: PNG image data, 964 x 521, 8-bit/color RGBA, non-interlaced
画像系はファイルサイズや中のカラータイプなんかも表示してくれて便利.
例えば、nugetのnupkgや、androidのapkファイルは中身がzipファイルなのだけど、
fileコマンドを使うとそのことが見破れる.
$ file newtonsoft.json.13.0.1.nupkg
newtonsoft.json.13.0.1.nupkg: Zip archive data, at least v2.0 to extract, compression method=deflate
$ file /tmp/debug.apk
/tmp/debug.apk: Zip archive data, at least v0.0 to extract, compression method=deflate
あとは、ビルドした成果物が、どのアーキテクチャで実行可能なバイナリかを調べたりもできる.
iOSのビルドなんかでこの手法をよく使った.
$ file /usr/bin/c++
/usr/bin/c++: Mach-O universal binary with 2 architectures: [x86_64:Mach-O 64-bit executable x86_64] [arm64e:Mach-O 64-bit executable arm64e]
/usr/bin/c++ (for architecture x86_64): Mach-O 64-bit executable x86_64
/usr/bin/c++ (for architecture arm64e): Mach-O 64-bit executable arm64e
なんかみたことないファイル拡張子だなとか、このファイルの中身どうなってるんだろう?
って気になった時はfileコマンドを使うと便利!
Discussion