One IT Thing

IT業界を楽しむ為の学習系雑記

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

執筆者:

関連記事

Linux、Macでハードディスクが一杯になった時の対処

「いつの間にかハードディスク一杯になってた・・・」 運用側が10:0で言い訳出来ない障害の一つなんじゃないでしょうか。 怖い先輩(上役)に体育館裏(会議室)に連れていかれる恐怖を思い出します。 運管ミ …

Linuxのシェルログイン時、牛に格言を喋らせる

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

Linuxコマンドラインで英語を日本語翻訳、cowsayは日本語を話せる

サバサバしがちなIT開発現場、一服の潤いが必要ですね。以前、Linuxログインした時に牛に格言を喋らせる伝統芸能を試しました。  One IT ThingLinuxのシェルログイン時、牛に格 …

Termuxで動作が確認できたターミナルゲーム4つ

Android端末をroot化せずにLinux環境を独自構築する神アプリ「Termux」。  play.google.comTermux – Apps on Google Playhttps …

pgadmin4をCentOS7にインストールしてサーバモードで起動する手順

目次1 はじめに1.1 pgadmin3時代1.2 pgadmin4時代2 前提3 環境4 手順4.1 1.yumリポジトリ追加。pgdg(ポスグレ本家)、epel(python関連用)4.2 2.p …


shingo nakanishi。東京で消耗中の職歴20年越え中年ITエンジニアです。「生涯現役プログラマを楽しむ」ことができる働き方探しをライフワークにしています。

19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。