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

執筆者:

関連記事

VirtualBoxにUbuntu18.04をインストール(SSH接続するまで)

2019年も変わらずLinuxディストリシェアトップをキープしたUbuntuをVirtualBoxでインストールします。  マイナビニュース  7 usersDebian …

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

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

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

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

テキストファイル内の改行コード差異を見つけるワンライナー

こんなケースを想定。 ファイル内容は同じなのにdiffで違いが出るWeb上でソースレビューする時に同じ内容の行なのに差分が出て紛らわしい これらの原因はWindows、Mac、Linuxが入り混じった …

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

Android端末をroot化せずにLinux環境を独自構築する神アプリ「Termux」。  play.google.comhttps://play.google.com/store/app …

 

shingo.7k24
 

東京在勤、職歴20年越え中年ITエンジニアです。まだ開発現場で頑張っています。

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

私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。