findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
生徒
「Linuxでファイルを探したいときって、どうすればいいですか?」
先生
「Linuxではfindコマンドを使うことで、ファイルやディレクトリを検索できますよ。」
生徒
「それって難しい操作じゃないですか?初心者でも使えますか?」
先生
「大丈夫!簡単な例から説明していきます。一緒に覚えていきましょう。」
1. findコマンドとは?
findコマンドは、Linuxでファイルやディレクトリを探すための基本的なコマンドです。「どこに保存したかわからないファイルを見つけたい」「特定の名前をもつファイルを探したい」「最近更新されたファイルだけを探したい」といったときに非常に役立ちます。
Windowsの「検索ボックス」のようなイメージですが、findはターミナル(黒い画面)で使う文字だけの命令です。その代わり、とても速くて正確です。
2. 基本の書き方
findコマンドの基本的な書き方は、以下のようになります。
find [検索する場所] [検索条件]
たとえば、「現在のフォルダから名前がmemo.txtのファイルを探す」場合は、以下のようになります。
find . -name "memo.txt"
./Documents/memo.txt
ここで.は「今いる場所(カレントディレクトリ)」を意味します。-nameは「名前で検索する」という意味のオプションです。
3. Linuxにおけるテキスト処理とコマンド操作の重要性
プログラミング未経験の方にとって、「なぜわざわざ文字を打ち込んで操作するのか?」という疑問は当然のものです。普段使っているWindowsやMacであれば、マウスでアイコンをクリックしたり、検索窓に文字を入れたりするだけで済みます。しかし、エンジニアやITのプロの世界でLinuxが愛用されるのには、明確な理由があります。
Linuxにおけるテキスト処理とは、ファイルの中身を検索したり、特定の文字列を書き換えたり、不要な行を削除したりする作業を指します。これを「コマンド」で行う最大のメリットは、「自動化」と「大量処理」にあります。例えば、1000個あるテキストファイルの中から「特定の単語」が含まれているファイルだけを抜き出し、その単語を別の言葉に一括で書き換えるといった作業、マウス操作では日が暮れてしまいます。しかし、Linuxのコマンドを使えば、たった一行の命令を打ち込むだけで、数秒で完了させることができるのです。
また、Linuxはサーバー(インターネット上のサービスを動かすためのコンピュータ)として使われることが多いため、画面(GUI)がない環境も珍しくありません。そのような場所では、文字(CLI:コマンドラインインターフェース)だけで指示を出す技術が必須となります。テキスト処理コマンドを覚えることは、コンピュータと直接対話するための「魔法の言葉」を覚えるようなものなのです。
4. ファイル名の一部で検索する「ワイルドカード」
「ファイル名は正確に覚えていないけれど、たしか『report』という文字が入っていたはず……」という場面はよくあります。そんな時に役立つのが「ワイルドカード」という記号です。アスタリスク(*)を使うことで、「どんな文字が入っていてもいい」という指定ができます。
例えば、拡張子が.jpgの画像ファイルだけをすべて探し出したいときは、以下のように入力します。
find . -name "*.jpg"
./Pictures/vacation.jpg
./Pictures/dog.jpg
./Downloads/background.jpg
このように、*を上手に使うことで、曖昧な記憶からでも目的のファイルにたどり着くことができます。ただし、ワイルドカードを使うときは、条件をダブルクォーテーション(" ")で囲むのが基本のルールです。これによって、コンピュータが「ここから先は検索する名前のパターンだよ」と正しく認識してくれます。
5. ファイルの種類やサイズで絞り込む
findコマンドの凄さは、名前以外でも検索できる点にあります。パソコンを使っていると、「大きなファイルが容量を圧迫しているけれど、どこにあるかわからない」といった状況になりがちです。そんな時は、ファイルサイズを指定して検索してみましょう。以下の例では、100メガバイト以上の大きなファイルを探しています。
find /home/user -size +100M
/home/user/Downloads/large_video.mp4
ここで使った-sizeはサイズを指定するオプションで、+100Mは「100MBより大きい」という意味になります。逆に、空のファイル(サイズが0のファイル)を探して整理したいときは、-emptyという便利なオプションも存在します。また、ファイルなのかディレクトリ(フォルダ)なのかを区別して探したいときは、-typeオプションを使います。-type fと書けばファイルだけを、-type dと書けばディレクトリだけを対象に検索してくれます。このように複数の条件を組み合わせることで、膨大なデータの中からお目当てのものをピンポイントで抽出できるのです。
6. 日付や時間を使って「最近のファイル」を探す
「昨日編集したはずのファイル、どこに置いたっけ?」というミスも、findコマンドがあれば怖くありません。更新日時を条件にして検索することができます。例えば、「過去24時間以内に更新されたファイル」を探すには-mtimeや-mminというオプションを使います。
以下のコマンドは、現在から「10分以内」に更新されたファイルを表示する命令です。作業中に保存場所を忘れてしまった直後のレスキューに最適です。
find . -mmin -10
./work/project_notes.txt
./config.json
-mmin -10のマイナス記号は「以内」を表し、プラス記号(+10)にすると「10分以上前」という意味になります。日付単位で探したい場合は-mtimeを使い、-mtime -1とすれば1日以内に編集されたものを探せます。バックアップが正しく取れているか確認したり、システムトラブルの原因となった「直近に変更された設定ファイル」を特定したりする際に、プロの現場でも多用される非常に強力な機能です。
7. 他のコマンドとの組み合わせ(パイプの活用)
Linuxの真骨頂は、一つのコマンドの結果を別のコマンドに渡す「パイプ(|)」という仕組みにあります。findコマンドで見つけたファイルに対して、さらに別の処理を加えたい場合に活用します。例えば、「特定の名前のファイルを探し、その中身に特定の文字列が含まれているか調べる」といった連携が可能です。
以下の例では、まずfindでテキストファイルを探し、その結果に対して、中身を検索するgrepというコマンドを繋いでいます。
find . -name "*.txt" | xargs grep "エラー"
./logs/system.txt:エラーが発生しました
./logs/app.txt:重大なエラー
ここでは、xargsという「前のコマンドの結果を引き継いで、次のコマンドの引数(材料)にする」ための便利なツールも登場しています。このように、複数の小さなコマンドをパズルのように組み合わせることで、複雑な業務を一つの命令で片付けることができます。プログラミング未経験の方には少し難しく感じるかもしれませんが、「単機能の道具を繋いで大きな仕事をする」というLinuxの哲学を知る第一歩となります。
8. 管理者権限が必要な場合の検索(rootユーザー)
Linuxには、一般のユーザーでは立ち入ることができない「聖域」のような場所があります。システム全体の設定が保存されているディレクトリなどです。こうした場所を検索しようとすると「Permission denied(許可がありません)」というエラーが出てしまいます。そんな時は、管理者権限(root権限)を使って検索を行う必要があります。コマンドの先頭にsudoをつけることで、「一時的に管理者として実行する」という意味になります。
find /etc -name "ssh_config"
/etc/ssh/ssh_config
システム全体を管理する立場になると、どこに設定ファイルがあるのかを把握するために、このようにルート権限でfindを実行することがよくあります。ただし、管理者権限は何でもできてしまう強力な力なので、ファイルの中身を書き換えたり削除したりするコマンドを組み合わせる際は、細心の注意が必要です。まずはfindで「探すだけ」から練習を始めて、徐々にLinuxの構造に慣れていきましょう。
9. findコマンドとlocateコマンドの違い
Linuxでファイルを検索するコマンドには、findの他にもlocate(ロケート)というものがあります。初心者の方はどちらを使うべきか迷うかもしれません。findは「今この瞬間に、実際に部屋の中(ディスク)を隅々まで探し回る」方法です。そのため、常に最新の情報が得られますが、ファイルがたくさんあると少し時間がかかることがあります。
対してlocateは、「あらかじめ作成しておいた持ち物リスト(データベース)を見て、どこにあるか答える」方法です。リストを見るだけなので一瞬で結果が出ますが、さっき作ったばかりのファイルはリストに載っていないため、見つけることができません。どちらも一長一短ありますが、まずは「どんな条件でも細かく探せる万能なfind」をマスターすることをおすすめします。findを使いこなせるようになれば、Linuxでのファイル管理において困ることはほとんどなくなるはずです。