拡張子のないファイルの正体をfileコマンドで知る

Linux
https://pixabay.com/images/id-2488093/

Linuxを扱っていると時々遭遇するのがtextのような拡張子のないファイル。

拡張子の役割はアプリがなんのファイルであるか判別する目印のようなものなので、これがないとなんのアプリで使うファイルかを人が判別できないということにもなってしまいます。

一体何なんだこのファイルは?という疑問を解消するコマンドがfileコマンドです。

前回学んだLinux基礎コマンド

touchコマンドってファイル作成コマンドと思い込んでいました
こんにちは、AWSが面白いので基礎となるLinuxを学び直しているねこだくさんです。今回はファイルを作成するときになんとなく使っているtouchコマンドについて学びます。コマンド操作についてはいつもの通りEnvaderで実行しています。...

fileコマンドとは

file ファイル名とコマンドを打つことででそのファイルの情報が出力されます。

めちゃくちゃ細かいことを言うと

  1. ファイルシステムテスト
  2. マジックナンバーテスト
  3. 言語テスト

という順番で判定を行い最初に該当したものを表示する仕組みなのだそうです。意味がわかりませんね。

ファイルの種類

大きく分けて2つあります。

  1. 人が読めるtextファイル
  2. 人にはほぼ読めないバイナリファイル

fileコマンドでは該当のファイルが

  1. テキストファイルかどうか
  2. 実行可能ファイルか
  3. それ以外のバイナリファイルなどか

を知ることができます。

使い方

ここからはEnvaderの仮想環境を使います。

まずは普通にtext.txtの中身を見てみましょう。
file ファイル名です。

file text.txt
text.txt: Unicode text, UTF-8 text, with no line terminators

先程の謎ファイルfileも見てみるとすると

file file
file: JPEG image data, Exif standard: [TIFF image data, big-endian, direntries=6, orientation=upper-left, xresolution=86, yresolution=94, resolutionunit=2], baseline, precision 8, 4032x3024, components 3

まさかのjpeg画像ファイルでした。

オプション

OptionDescription
-b出力行の最初にファイル名を表示しない(簡易モード)
-f調べるファイルの一覧を指定する
-Lシンボリックリンクの参照先を調べる
-N出力を整列するためのファイル名への空白の追加を行わない
-n1つのファイルをチェックするごとに標準出力に出力する

引用:基本的なコマンドの練習(file編)

偽装ファイルを見破る事も

いかにも怪しげなファイルがあります。

file ayashigena.txt
ayashigena.txt: PNG image data, 9999 x 9999, 8-bit/color RGBA, non-interlaced

中身はpngファイルでした。

学んだこと

ファイルの正体なんか知ってどうするんだと思いましたが、セキュリティ観点から使用できるというのは目からウロコでした。
何も考えずにファイル実行というのは考えもののようです。
まあLinuxなんでうっかりダブルクリックなんてことはないのですがw

猫たちはそこらへんで転がってます。

参考資料

fileコマンドでファイルの種類を調べる方法
HowtoForgeに11月20日(米国時間)に掲載された記事が、ファイルのデータ種類を判別するfileコマンドの使い方を伝えた。fileコマンドを利用することで、拡張子に関係なくそのファイルがどのような種類のデータであるかを判断することができる。
Ubuntu Manpage: file - ファイルタイプを判定する
IBM Documentation
IBM Documentation.
コース一覧 | エンベーダー
コース一覧に関するページです。Linuxを学べるLinux基礎・応用コースを始めとして、エンジニア必須の知識であるデータベースやセキュリティのコースもあります。

コメント