Linuxの検索方法:findとlocateの使い方

linuxの検索方法
  • このエントリーをはてなブックマークに追加
  • Pocket

Linuxの中にあるファイル構成をすべて覚えておいたり、必要なディレクトリをすぐに見つけたり、というのはなかなか大変なことだ。

また、自動生成したファイルや他の人が作ったファイルを探したいというときもあるだろう。

そういうときは、Linuxの検索機能を使っていく。

このページではLinuxの検索について大まかにまとめている。参考にしてほしい。

Linuxの検索について

linuxに限らずOSは膨大な量のバイナリやテキスト、デバイスファイルなどのファイルの種類を問わず管理することになる。そこで重要になってくるのが「ファイルの検索」だ。

「ファイル名がわかるがどこにそのファイルがあるかわからない」「変更した日付はわかるが、名前がわからない」「とあるパーミッション情報をもっているファイルを列挙したい」など、そんな断片的な情報からファイルを検索してくれる。

Windowsの場合、右上の検索欄に検索したいファイル名などを入力すればよい。Google Desktopなども有用だ。

しかしLinuxの場合は検索欄などはなく、検索もコマンドを使用して行うことになる。コマンドとしては「find」や「locate」などが代表として名前があがる。

検索を実行するfindコマンドの使い方

findコマンドについては下記で詳しいが、一通りこのページでもお伝えしておこう。

findは素直にディレクトリ内を再帰的にたどり、検索していくコマンドである。ファイル名を始め、SUID、GUIDなどのパーミッションを条件としてファイルを列挙させたりすることが出来る。Linuxにおいて検索の最も使われる方法だろう。

書式: find パス 検索条件 アクション

では、実際にやってみよう。名前を指定してファイルをみつけたい場合。「/」ディレクトリを基準にして検索をかけたい場合は、

$ find / -name "<ファイル名>"

となる。探したいファイルはフルネームで記述すること、また「"」でかこむことを忘れないようにしよう。名前が曖昧でおもいだせない時は「*」ワイルドカードを使用するとよい。

ワイルドカードは「任意の長さの文字0文字以上」という条件だ。

例えば

$ find /home/ken -name "file.*"

と命令をするとfile.txtやfile.py、file.htmlなどfile.のあとがなんであれfile.を含むファイルが軒並ヒットすることになる。

ただし検索の起点として「/」を指定すると一般ユーザは読み込みできないファイルなどが多数存在するのでもう少し条件をしぼった方がいいだろう、大概は「/etc」「/usr」などある程度ディレクトリを指定したほうが効率的だろう。

ディレクトリやファイルのみを指定する。

ディレクトリのみ表示 -d

ファイルのみ表示 -f

例 ディレクトリを指定して表示する。

$ find /home/ken -type -d

サイズを指定する

サイズ指定 -size

-を指定するとそのsize未満のものを列挙してくれる

+を指定するとそのsizeより大きいものを列挙してくれる

単位は「c」指定でバイト 「k」指定でキロバイト 「M」指定でメガバイト 「G」指定でギガバイト

を指定できる。

例 300kバイトより大きいものや小さいものを表示する。

$ find /home/ken -size +300k

$ find /home/ken -size -300k

パーミッション指定

-permを指定するとパーミッションを指定して検索ができる。

$ find /home/ken -perm -644

SUIDを指定する場合

$ find /usr/bin -perm -4000

SGIDを指定する場合

$ find /usr/bin -perm -2000

アクセス日時指定

-amin 最終アクセス時刻を分単位で指定

-atime 最終アクセス時刻を日単位で指定

-cmin 最終ステータス更新時刻を分単位で指定

-ctime 最終ステータス更新時刻を日単位で指定

-mmin 最終変更時刻を分単位で指定

-mtime 最終変更時刻を日単位で指定

これらを指定するとファイルを変更した日時を指定してファイルを検索できる。

例 変更日時が2時間以前のものを列挙するには

$ find /home/ken -mmin -120

とする。

ユーザを指定してディレクトリやファイルを検索する。

-user

$ find /home/ken -user ken

これらのパラメータは複数指定可能となっている

例えば

$ find /home/ken -user ken -perm -644 -name “file.*”

などとして絞り込みが可能となっている。

locateコマンドの使い方

findコマンドは非常に素直にファイルやディレクトリに検索をかける。しかしHDDなどの媒体だと、検索する時間が膨大になることがある。

そのため、ときと場合によっては「locate」コマンドを使用したほうがよいことがある。

locateコマンドはあらかじめファイルのデータベースを作成して、そのデータベースを参照して検索をかけるので非常に高速に動作する、

しかしデータベースを更新しないと、新しいファイルは反映されないので注意しよう。1日に一度程度でデータベースを更新しておくとよい。

実際に実行してみよう

操作自体は難しくない。まずデータベースを作成しよう

# updatedb

後に例えば

$ locate *.txt

などとすれば検索が出来る、findほど強力ではないが、検索が非常に高速なので、ぱっとファイルを検索したい時などに重宝するコマンドである。

精密にファイルを探したい場合、ある程度場所に見当をつけてからfindでしぼりだしするとよい。たいして漠然とファイル名の欠片が頭にあるのならばlocateを使用してぱっと探すというのがよいだろう。

まとめ

このページではLinux内のファイル検索についてまとめてお伝えした。それぞれのコマンドについてはコマンド集のページで詳しいので、詳細を知りたければそちらも参考にしてほしい。

  • このエントリーをはてなブックマークに追加
  • Pocket

このページの続きや関連ページは下記から一覧で確認できる。

短期間でエンジニアになる方法

・「まったくの初心者だけどエンジニアになりたい!」

・「プログラマーとして転職をしたい!」

という方はリナックスアカデミーの資料を見てみてください。短期間で未経験からエンジニアになることができるスクールとして15年間選ばれ続けてきた理由やノウハウが載った資料です。

エンジニアの入り口に立つために必要な勉強技術の最新動向本当に使えるIT資格学習に役立つ国からの奨励金などの情報が詰まっています。

無料で2,3日中にお手元にお届けします。


資料を見てみる

SNSでもご購読できます。

コメントを残す

*