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内のファイル検索についてまとめてお伝えした。それぞれのコマンドについてはコマンド集のページで詳しいので、詳細を知りたければそちらも参考にしてほしい。
きょう初めて貴サイトにたどり着きました。おかげさまで必要な情報をいただき、トラブルが解決できました。御礼申しあげます。
また、この総合サイトを拝見させていただき、これから種々お力になっていただけると思い有り難くおもっております。貴重なサイトを公開/運営されておられることに敬意を表します。
当方、趣味の独学でLinuxを楽しんでいる者です。経歴は長いのですが、なかなかレベルがあがりません。拙ブログです。
http://madahiru.blog81.fc2.com/blog-entry-805.html
以上、御礼まで
お役に立てたようで何よりです。
引き続きご愛読の程宜しくお願いいたします。