1. ホーム
  2. コース一覧
  3. Linux入門コース
  4. Linuxコマンド [file編]

Linux入門コース6/8

Linuxコマンド [file編]

ファイルの種類を調べることができるfileコマンドについて解説します。

ファイルの種類

コンピュータでは、テキストファイル・画像ファイル・音声ファイルなど色々な種類のファイルを扱いますが、これらは大きく2種類に分けることができます。

  • テキストファイル:中身を開いたときに文字だけで構成されるファイル
  • バイナリファイル:テキストファイル以外の人間が読むことのできないファイル

拡張子とファイルシグネチャの違い

ファイル中身を判断するものとして、拡張子(.txt)とファイルシグネチャというものがあります。

拡張子は、お馴染みのようにファイルの種類を識別するためにファイル名の後につけられたドットから始まる文字列のことです。例えば、「hogehoge.txt」というファイルの場合、「.txt」がテキストファイルを表す拡張子になります。

.txtテキストファイル
.jpeg画像ファイル
.mp3音声ファイル
.zip圧縮ファイル

拡張子はOSが、拡張子をもとに起動するプログラムを変更したり、人間が一目見てファイルの種類を識別するために付けられます。つまり、拡張子はファイルの種類を人間や起動するアプリケーションが判定するためのものであり、実際のファイルの中身とは別物なのです。そこで、ファイルシグネチャが存在します。

ファイルシグネチャとは、各ファイルの先頭数バイトの決められた文字列のことです。ファイルフォーマット・マジックナンバーと呼ぶこともあります。OSは、ファイルの先頭数バイトを確認することによりファイルの種類を判別するのです。

https://en.wikipedia.org/wiki/List_of_file_signatures

拡張子でファイルの種類を判断できない場合は?

拡張子は使用者によって変更が可能です。画像ファイルの拡張子「.jpeg」を、テキストファイルの拡張子「.txt」に変えることもできます。(あくまでファイル名のみの変更であるため、テキストファイルとして開いても正しく表示されません。)

fileコマンド

上記のような要因の場合、ファイル名を見ただけではテキストファイルなのかバイナリファイルなのか判断できませんが、fileコマンドを使用することでファイルの中身を調べることができます。

基本的な使い方

file ファイル名

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

file sample.jpeg
sample.jpeg: 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

fileコマンドではファイルの内容をテストし、ファイルの種類を特定しています。

テスト結果から下記いずれかの内容を表示します。

  • text:テキストファイル
  • executable:実行可能ファイル
  • data:それ以外のファイル(通常はバイナリファイル、または表示不能なファイル)
# 「index.html」の拡張子を「.txt」に変更した場合

file index.txt
index.txt: HTML document text, ASCII text

ファイルの内容をテストしてから種類を特定するため、拡張子は「.txt」ですが、中身はHTML形式であることがわかります。

複数のファイルを同時に指定する

fileコマンドの後に複数のファイルを同時に指定することもできます。

file ファイル名1 ファイル名2

# 例
file test.txt index.html
test.txt:   Unicode text, UTF-8 text, with no line terminators
index.html: HTML document text, ASCII text

圧縮されているファイルを調べる

「-z」オプションで、圧縮されているファイルの元の形式を調べることができます。

file -z ファイル名

# 例1:「-z」オプションがない場合(ファイル形式がわからない)
file test.txt.gz
test.txt.gz: gzip compressed data, was "test.txt", last modified: Sat Jan  8 00:36:35 2022, from Unix, truncated

# 例2:「-z」オプションがある場合(テキストファイルとわかる)
file -z test.txt.gz
test.txt.gz: Unicode text, UTF-8 text, with no line terminators (gzip compressed data, was "test.txt", last modified: Sat Jan  8 00:36:35 2022, from Unix)

主なオプション

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

まとめ

今回はfileコマンドについて解説しました。

fileコマンドを利用することでファイル名から確認できない情報を調べることができます。

問題を解くためには、十分な画面サイズのPC環境をご利用下さい。