Linuxコマンドfileの使い方と4つのオプション

Linuxコマンドfileは、ファイルの種類を確認する際に非常に便利です。例えば、拡張子のないファイルがある場合、そのファイルがテキストファイルなのか、実行ファイルなのか、または別の形式のファイルなのかを確認することが重要です。この記事では、fileコマンドの基本的な使い方とさまざまなオプション、そして実際にどのように活用できるかについて説明します。

fileコマンドとは?

fileコマンドは、Linuxでファイルの種類を確認できるコマンドです。ファイルの内容を分析して、そのファイルがテキストファイルなのか、バイナリファイルなのか、スクリプトファイルなのかなど、さまざまなファイルタイプを判別できます。このコマンドは、ファイルの拡張子や名前ではなく、実際のデータを基に判断するため、より正確な情報を提供できます。

基本的な使い方

fileコマンドの使い方は非常に簡単です。ターミナルでfileコマンドの後にファイル名を入力するだけです。

file ファイル名
ShellScript

例えば、「example.txt」というファイルがある場合、そのファイルの種類を確認するには次のように入力します。

file example.txt
ShellScript

すると、fileコマンドはこのファイルがASCIIテキストファイルであることを知らせてくれます。もしファイルが実行ファイルであれば、そのことも知らせてくれます。以下の結果から、オーディオファイル、ビデオファイル、テキストファイル、圧縮ファイル、PDF、PPT、JSONなど、さまざまなファイルの種類を確認できます。

図1. Linuxコマンドfile: 実行結果
図1. Linuxコマンドfile: 実行結果

fileコマンドの主要オプション

fileコマンドにはさまざまなオプションがあり、それを活用することでより詳細なファイル情報を得ることができます。以下によく使用されるオプションを紹介します。

-iオプション: MIMEタイプの確認

-iオプションは、ファイルのMIMEタイプを出力します。MIMEタイプは、インターネット上でファイルの形式を表現する際に使用される標準フォーマットです。このオプションを使用すると、ファイルがテキストファイルなのか、画像ファイルなのか、または他の形式のファイルなのかを確認できます。

file -i example.txt
ShellScript

このコマンドを実行すると、「example.txt」ファイルのMIMEタイプが「text/plain; charset=us-ascii」として表示されます。ここで「text/plain」は、ファイルが一般的なテキストファイルであることを意味し、「charset=us-ascii」は、そのファイルがASCIIエンコーディングを使用していることを示しています。

図2. Linuxコマンドfile: -iオプションによるMIMEタイプの確認
図2. Linuxコマンドfile: -iオプションによるMIMEタイプの確認

-bオプション: ファイル名の省略

デフォルトでは、fileコマンドは出力時にファイル名を含みます。しかし、-bオプションを使用すると、ファイル名を省略してファイルタイプのみを出力できます。

file -b example.txt
ShellScript

以下の図のように、このコマンドは単にファイルの種類だけを出力します。複数のファイルの種類を一度に確認したいとき、出力結果をすっきりさせるのに便利です。

図3. Linuxコマンドfile: -bオプションでファイル名省略
図3. Linuxコマンドfile: -bオプションでファイル名省略

-fオプション: ファイルリストからファイルの種類を確認

-fオプションは、複数のファイルの種類を一度に確認する際に便利です。このオプションを使用すると、ファイルリストを含むファイルを指定し、そのリストに含まれる各ファイルの種類を確認できます。

file -f ファイルリスト.txt
ShellScript

「ファイルリスト.txt」ファイルに複数のファイル名が一覧されている場合、それぞれのファイルの種類が順に表示されます。以下の図では、ファイルリストが「list.txt」に保存されており、-fオプションを利用してリスト内のファイルを確認する様子がわかります。

図4. Linuxコマンドfile: -fオプションでファイルリストの種類を確認
図4. Linuxコマンドfile: -fオプションでファイルリストの種類を確認

-Lオプション: シンボリックリンクの処理

シンボリックリンクは、他のファイルやディレクトリを指す特別なファイルです。fileコマンドでシンボリックリンクのファイルタイプを確認する際、デフォルトではリンク自体の種類が表示されますが、リンクが指すファイルの種類を確認したい場合は、-Lオプションを使用できます。

file -L リンク名
ShellScript

以下の図のように、このオプションを使用すると、シンボリックリンクが指す実際のファイルの種類が表示されます。

図5. Linuxコマンドfile: -Lオプションでシンボリックリンクの元ファイルの種類を確認
図5. Linuxコマンドfile: -Lオプションでシンボリックリンクの元ファイルの種類を確認

fileコマンドの活用方法

ファイル確認の自動化

システム管理やスクリプト作成時にfileコマンドを活用して、特定の種類のファイルだけを処理するように自動化できます。例えば、テキストファイルだけを処理するスクリプトを作成する場合、fileコマンドを使用してファイルの種類を判別し、その後、条件文を通じて特定の作業を実行できます。

#!/bin/bash

for file in *; do
  if file "$file" | grep -q "text"; then
    echo "$file はテキストファイルです."
  fi
done
ShellScript

このスクリプトは、現在のディレクトリにあるすべてのファイルを対象にfileコマンドを実行し、テキストファイルの場合にメッセージを出力します。

図6. Linuxコマンドfile: スクリプトを使用してファイルの種類に応じて処理
図6. Linuxコマンドfile: スクリプトを使用してファイルの種類に応じて処理

マルウェアの検出

特定のファイルが疑わしい場合、fileコマンドを使用して予期しないファイルタイプを検出できます。例えば、拡張子が.jpgでも、実際には実行ファイルである可能性のあるファイルを簡単に検出できます。このようにして、ファイルを事前にチェックし、セキュリティを強化できます。

fileコマンド使用時の注意事項

  • ファイル拡張子と実際のファイルタイプが異なることがある: fileコマンドはファイルの拡張子を無視し、実際のファイルデータを分析するため、ファイル名だけでファイルの種類を判断するよりも信頼性があります。拡張子が.txtであっても、実際にはバイナリファイルである可能性があります。
  • 大容量ファイルに注意: 大容量ファイルに対してfileコマンドを実行すると、処理に時間がかかることがあります。特にネットワークドライブにあるファイルを検査する場合、ネットワークの状態によって時間がさらにかかることがあります。
  • 正確でない場合がある: 一部のケースでは、fileコマンドがファイルの種類を誤って判断することがあります。例えば、複雑なフォーマットや圧縮されたファイルの場合、予期しない結果が表示されることがあるため、結果を100%信頼するのではなく、追加の検証手順を踏むことが推奨されます。

まとめ

Linuxでファイルの種類を確認することは、システム管理やセキュリティ管理において非常に重要な作業の一つです。Linuxコマンドfileは、シンプルでありながら強力なツールで、ファイルの内容を分析してその種類を正確に判断できます。さまざまなオプションを活用することで、より詳細な情報を得ることができ、これによりスクリプトを自動化したり、セキュリティを強化するのにも役立ちます。

ファイルの種類を確認する必要があるときには、Linuxコマンドfileを積極的に活用してください。小さな違いが大きな問題を予防する手助けとなるでしょう。

リファレンス

関連ポスト

コメントする