linux

各種OSでのインデックスを使用した高速ファイル名検索と全文検索【Linux編】

投稿日:2019年5月9日

目的

  • CentOS上に存在する全ての「~.java」ファイルをリストアップします。
  • 上記の内「System.out.println」が含まれているファイルを見つけます。

環境

CentOS7.5

使用コマンド

locate [探したいファイル名]
インデックス検索出来るlocateコマンドを使うことでfindコマンドよりも高速に検索します。

ファイル名検索

拡張子「java」のファイルをリストアップする為、-rで正規表現を使います。

$ locate -r "\.java$"
/etc/.java
/opt/fess-12.3.2/~/org/apache/jsp/WEB_002dINF/view/footer_jsp.java
/opt/fess-12.3.2/~/org/apache/jsp/WEB_002dINF/view/index_jsp.java
/opt/fess-12.3.2/~/org/apache/jsp/WEB_002dINF/view/searchOptions_jsp.java
    :
  (snip)

OS内の全ての~.javaファイルパスがリストアップされました。

全文検索

リストアップされた結果をxargsコマンドで一行ずつgrepに渡してやります。

$ locate -r "\.java$" | xargs grep System.out.println
grep: /etc/.java: ディレクトリです
/usr/share/~/VerifyRSAOAEPSHA2.java:        System.out.println("Exception closing files");
/usr/share/~/VerifyRSAOAEPSHA2.java:        System.out.println("Verifying OAEP with mgf1_hash: " + m_mgf1_hash + " alg_hash: " + m_alg_hash + " - "
/usr/share/~/VerifyRSAOAEPSHA2.java:        System.out.println("Vector file path: " + vector_path);
    :
  (snip)

全ての~.javaファイルの中から「System.out.println」文字列を含むjavaファイルがリストアップされました。

補足とインデックス更新

CentOSのminimalインストールではlocateコマンドは初期インストールされていないのでインストールする必要があります。パッケージ名は「mlocate」です。

# yum install mlocate

インストールしたての時はインデックスDBが出来ておらず、locateすると以下のエラーが発生します。

locate: stat () `'/var/lib/mlocate/mlocate.db' できません: そのようなファイルやディレクトリはありません

その場合は以下のコマンドでインデックスDBを作成してください。(最初の一回は時間が掛かります)

# updatedb

mlocateインストール後は以下の/etc/cron.daily/mlocateがインストールされ、一日一回、自動的にupdatedbが走るようになります。

# cat /etc/cron.daily/mlocate
#!/bin/sh
nodevs=$(awk '$1 == "nodev" && $2 != "rootfs" && $2 != "zfs" { print $2 }' < /proc/filesystems)

renice +19 -p $$ >/dev/null 2>&1
ionice -c2 -n7 -p $$ >/dev/null 2>&1
/usr/bin/updatedb -f "$nodevs"

まとめ

cron.dailyで毎日updatedbされるとは言え、直近に作成したファイルはインデックスされておらず結果に出ません。必ずupdatedbを実行してからにするか、findと併用するのが有用です。

find ./ -type f -name "*.java" | xargs grep System.out.println


-linux

執筆者:

関連記事

GitLabのIPを変更したらMattermostにログイン出来なくなった話「the redirect uri included is not valid. 」

目次1 発端2 環境3 GitLabのIP変更設定を開始4 そしてハマる5 解決6 結局どこに設定が保存されていたか7 まとめ 発端 先日オフィスの引っ越しが有りネットワークセグメントが変わる為、Gi …

Linuxのシェルログイン時、cowsayに格言を喋らせる伝統芸能

sshコマンドやteratermでLinuxにログインした時、在り来たりなプロンプトじゃなくて何か役に立つ情報が表示されたら、開発プロジェクトの雰囲気もちょっと潤うかも知れません。 Linuxコマンド …

CentOS8をVirtualBoxにインストールしてXからdnfを打つまで

2019年9月24日(米時間)CentOS8がリリースされました。 RHEL8リリースから4か月、まだかまだかとリリース進捗を眺めていた方も多かったのではないでしょうか。 「時間が出来たら入れてみよう …

podman + docker-comopseでwordpressを起動

前回podmanをdockerとして使えるようになりました。 One IT Thing  1 Pocketpodmanをdockerとして使うhttps://one-it-thing.com …

CentOS8にPostgreSQL12をインストールする手順

以前CentOS7にPostgreSQL11をインストールしてSQL実行しました。 One IT Thing  1 Pocket開発用PostgreSQLをCentOSにインストールしてSQ …

 

shingo.nakanishi
 

東京在勤、1977年生まれ、IT職歴2n年、生涯技術者として楽しく生きることを目指しています。デスマに負けず健康第一。