Linux 検索を色々調べてみたよ!

どうもinappeです。
今回は前回に引き続き Linux ネタです。
Linux 環境で開発しているとファイルの検索やらファイルの中身の検索やらを行いたい場面にしばしば遭遇します。
なので簡単に簡単なコマンドと利用方法を書いていきます。

ファイル


ファイル名で検索する

$ find / -name hoge.txt

2項目の/はルートディレクトリ以下を検索対象とすることを表しています。
ホームディレクトリ以下を検索する際は

$ find ~/ -name hoge.txt

ファイル名の一部から検索する

$ find ~/ -name *.txt

ファイル名の一部しか分かっていない場合や,特定の拡張子のファイルのみを探し出すときなどにはワイルド・カードを利用できます。
利用できるワイルド・カードは1文字を表す?,0文字以上の文字列を表す*,指定したいずれかの1文字を表す[...]が利用できます。

また,Photo001.jpgのような型番が3桁(けた)のファイルを探す場合は

$ find ~/ -name Photo???.jpg

とします。

ファイル種別を指定して検索する

ファイル種別を限定して検索したい場合は,「-type」判別式を用います。
ファイル種別の指定は下記の表の様になっています。

種別 内容
f ファイル
d ディレクトリ
l シンボリック・リンク
c キャラクタ・スペシャル・ファイル
b ブロック・スペシャル・ファイル
s ソケット
$ find / -name hoge -type d

高速に検索する

あらかじめ作成したデータベースを使って検索するので,findコマンドより高速に検索が行えます。
データベースはスーパーユーザー権限でupdatedbコマンドを実行して作成できます。

例:httpd.confを高速に検索する

$ locate httpd.conf
/etc/httpd/conf/httpd.conf

あらかじめファイル名がわかっていて場所どこだっけ?ってときはlocateが便利ですね!

文字列を検索する


ファイルから文字列を検索する

テキスト・ファイルから特定の文字列を含む(論理)行を抜き出すにはgrepコマンドを用います。
grepの後に検索したい文字列を指定し,さらにその後に検索対象とするファイルを指定します。

$ grep "hoge" target_file

また、-n オプションを付けることで行番号を表示してくれます。これちょーべんり。

$ grep -n "hoge" target_file

特定の文字列が記述されているファイルを検索する


先に紹介した2つのコマンドの複合になります。
例:拡張子が"txt"であるファイルについて,文字列"hoge"を探す

find . -type f -name "*.txt" | xargs grep "hoge"

うん便利。
最近、windowsとおさらばしてノートPCにLinuxを入れてしまおうかとかんがえたりしてますw
この夏休みにやってしまおうかな…
いつかブログで書きたいですね、「windowsを消してLinuxを入れるまで」とかwww
とりあえず今回はこのあたりで(*'▽')ノシ