findコマンドの使い方を完全ガイド!初心者でもわかるLinuxのファイル検索の基本
生徒
「Linuxでファイルを探したいときって、どうすればいいですか?」
先生
「Linuxではfindコマンドを使うことで、ファイルやディレクトリを検索できますよ。」
生徒
「それって難しい操作じゃないですか?初心者でも使えますか?」
先生
「大丈夫!簡単な例から説明していきます。一緒に覚えていきましょう。」
生徒
「あの、そもそも『コマンド』とか『シェル』とか、言葉の意味がよくわからなくて不安です…。」
先生
「なるほど。ではfindコマンドの詳しい使い方の前に、まずはLinuxを操作する上で欠かせない『シェル』と『コマンド』の違いについて、身近な例えを使って整理しましょう!」
1. シェルとコマンドの違いを初心者向けに解説
パソコンを触ったことがない方にとって、「シェル(Shell)」や「コマンド(Command)」という言葉は、まるで魔法の呪文のように聞こえるかもしれません。しかし、これらは私たちが普段スマートフォンやパソコンで行っている操作を、文字の世界に置き換えただけのものです。
イメージしやすいように、「レストラン」に例えてみましょう。
- ユーザー(あなた): お客さん
- シェル: 注文を聞いてくれる店員さん(窓口)
- コマンド: 料理の注文メニュー(具体的な命令)
- カーネル(OSの核): 実際に料理を作るシェフ(中身)
あなたが「ハンバーグをください」と注文するとき、直接厨房に入って調理を始めることはありませんよね。まずは店員さんに注文を伝えます。店員さんはあなたの要望を聞き取り、それをシェフがわかる言葉で伝えてくれます。そしてシェフが料理を作り、店員さんがあなたのテーブルに運んできてくれます。
Linuxの世界も同じです。あなたが文字で「ファイルを探して(find)」と入力すると、シェルという店員さんがその命令を解釈し、コンピュータの心臓部であるカーネルに伝えてくれます。その結果を、再びシェルが画面に表示してくれるのです。つまり、シェルは人間とコンピュータの「仲介役」なのです。
2. ターミナルとシェルの関係性とは?
「黒い画面」のことをよくターミナル(端末)と呼びますが、これとシェルも厳密には別物です。ターミナルは、文字を入力するための「入力欄」や「表示画面」という「箱」のようなものです。その箱の中で動いているプログラムが「シェル」です。
WindowsやMacでアイコンをマウスでクリックして操作する方法を「GUI(グラフィカル・ユーザー・インターフェース)」と呼びます。これに対し、文字だけで操作する方法を「CLI(コマンド・ライン・インターフェース)」と呼びます。プログラミングやサーバーの管理では、このCLIを使って操作するのが一般的です。
3. findコマンドとは?
findコマンドは、Linuxでファイルやディレクトリを探すための基本的なコマンドです。「どこに保存したかわからないファイルを見つけたい」「特定の名前をもつファイルを探したい」「最近更新されたファイルだけを探したい」といったときに非常に役立ちます。
Windowsの「検索ボックス」のようなイメージですが、findはターミナル(黒い画面)で使う文字だけの命令です。その代わり、とても速くて正確です。さらに、名前だけでなく、ファイルの種類やサイズ、作成された日時など、非常に細かい条件を指定して検索できるのが大きな特徴です。
4. 基本の書き方と実行例
findコマンドの基本的な書き方は、以下のようになります。まずはこの形を覚えましょう。
find [検索する場所] [検索条件]
たとえば、「今いる場所(カレントディレクトリ)」から、memo.txtという名前のファイルを探す場合は、以下のように入力します。
find . -name "memo.txt"
./Documents/memo.txt
ここで使われている記号や言葉を解説します。
- find: 「探して!」という命令(コマンド名)。
- .(ドット): 「今私がいる場所」という意味。Linuxでは今の場所をドット一つで表します。
- -name: 「名前で探して」という条件(オプション)。
- "memo.txt": 探したい具体的なファイル名。
5. 便利なオプション:ワイルドカードで曖昧検索
正確なファイル名が思い出せないこともありますよね。そんな時は、「ワイルドカード(*)」を使いましょう。アスタリスク * は「どんな文字が何文字入ってもいいよ」という意味です。
例えば、拡張子が .jpg(写真ファイル)のものをすべて探したい場合は、次のように書きます。
find . -name "*.jpg"
./Pictures/cat.jpg
./Pictures/travel/sea.jpg
このように、特定の文字が含まれるファイルを一気に探し出すことができます。初心者の方は、まずこの -name オプションと * の組み合わせを覚えるのがおすすめです。なお、名前の検索では大文字と小文字が区別されるので注意しましょう。区別せずに検索したい場合は -iname を使います。
6. ファイルの種類で絞り込む「-type」オプション
検索結果にフォルダ(ディレクトリ)は含めたくない、ファイルだけを表示したいという時には -type オプションを使います。Linuxではファイルもディレクトリも同じように扱われることが多いですが、明確に区別して探したい時に便利です。
- -type f: 通常のファイルを探す
- -type d: ディレクトリ(フォルダ)を探す
以下は、カレントディレクトリ内にある「config」という名前の「ディレクトリ」だけを探すコマンドです。
find . -name "config" -type d
./settings/config
もし -type d を付けなければ、config.txt という名前のファイルなども一緒に表示されてしまう可能性がありますが、このオプションを使えば目的のフォルダに最短でたどり着けます。
7. 管理者権限での検索:ルートディレクトリ全体を探す
自分のフォルダ以外、つまりシステム全体からファイルを探したい場合は、検索場所に /(ルートディレクトリ)を指定します。ルートディレクトリはパソコンの「一番上の階層」です。ただし、システムの中身を見るには管理者権限(root権限)が必要な場合があります。
初心者のうちはあまり使う機会がありませんが、システムの設定ファイルなどを探すときは、コマンドの先頭に sudo を付けて実行することがあります。ここでは管理者(ルートユーザー)として実行した時の様子を見てみましょう。
find /etc -name "ssh_config"
/etc/ssh/ssh_config
このように、システムの大事な設定が保存されている /etc フォルダの中からも、目的のファイルを一瞬で見つけ出すことができます。
8. 他のコマンドとの違い(lsコマンドやlocateコマンド)
ファイルを一覧表示するコマンドには ls があります。しかし、ls は「今見ている場所」の中身を表示するだけです。一方で find は、今いる場所から下の階層(サブディレクトリ)まで潜って、全ての場所を根こそぎ探しに行ってくれます。これが大きな違いです。
また、locate という検索コマンドもあります。これは事前に作られたデータベースからファイルを探すため、find よりもさらに高速です。しかし、新しく作成したばかりのファイルはデータベースに登録されていないため見つけることができません。対して find は「今、現在のリアルな状態」を直接ディスクに探しに行くため、いつでも最新の結果が得られます。確実性を求めるなら find コマンド一択です。
9. エラーを無視して見やすくするテクニック
広い範囲を検索すると、権限がないために「許可がありません(Permission denied)」というエラーメッセージがたくさん表示されてしまい、肝心の検索結果が埋もれてしまうことがあります。そんな時に便利な呪文があります。
find / -name "target.txt" 2>/dev/null
/home/user/target.txt
コマンドの最後にある 2>/dev/null は、「エラーメッセージだけをごみ箱に捨ててください」という意味の特殊な命令です。これを使うことで、権限エラーに邪魔されず、見つかったファイルだけを綺麗に表示させることができます。初心者を脱却するための第一歩として、この「おまじない」もセットで覚えておくと非常に役立ちます。難しい用語で「標準エラー出力のリダイレクト」と呼びますが、今は「エラーを隠す魔法」だと思っておけば大丈夫です。