CentOSシステムではどのようにテキスト検索の効率を高めますか?
システム管理者やプログラマーにとって、複雑な構成のディレクトリや大規模なソースツリーで特定のテキストやモードを検索する必要がある場合、grepタイプのツールが最も人気があります。
grepがあなたの大好きなツールの一つであれば、ackがもっと好きになるかもしれません。ackはPerlベースのgrepに似たコマンドラインツールですが、検索速度が速く、grepよりも能力が優れています。特にプログラマーの場合、grepの代わりにackを使うことを強くお勧めします。
ackの使い方はコード検索に非常に適しているため、プログラマはソースツリーで複雑なクエリーを行うことができ、ボタンを少なくするだけで済みます。
ackの特性ackのいくつかの非常に強力な特性:
現在の作業ディレクトリのデフォルト検索
デフォルトの再帰検索サブディレクトリ
メタデータディレクトリを無視する例:svn,.git,CSV等のディレクトリ
バイナリファイル(pdf,image,coredumpsなど)とバックアップファイル(foo~,*.swpなど)を無視
検索結果に行番号を印刷すると、ターゲットコードが見つかります。
Perl、C++、Makefileなどの特定のファイルタイプを検索できます。このファイルタイプには複数のファイル接尾辞があります。
検索結果をハイライト
Perlをサポートする高度な正規表現は、grepで使用されるGNU正規表現よりも表現力があります。
検索速度に比べてackはgrepより全体的に速い。ackの速度は、内蔵のファイルタイプフィルタに表示される限りです。検索中、ackは承認されたファイルタイプのリストを維持し、未知または不要なファイルタイプをスキップします。同様に、余分なメタデータ・ディレクトリのチェックを回避します。
Linuxにackを取り付けるほとんどのLinuxリリースではackが標準パッケージであるにもかかわらず、簡単に入手できる(例えばdebianベースのシステムではack-grepパッケージであり、Redhatベースのシステムではackパッケージである)が、リリース版に縛られたackバージョンは依然として1である.x,ack 2.0はすでにリリースされており、より多くの機能を備えています。
そこで公式サイトでダウンロードしてackをインストールするつもりです。
便利なことに、ackは公式サイトで単独のPerlスクリプトとして取得され、依存するモジュールがすべて統合されています。そのため、このスクリプトを実行するためにPerlモジュールを追加インストールする必要はありません。
あなたのLinuxシステムにackをインストールするために、公式サイトに最新バージョンのackをダウンロードします。本文を書く時、最新のバージョンは2.12です。
$ wget http://beyondgrep.com/ack-2.12-single-file $ sudo mv ack-2.12-single-file /usr/local/bin/ack $ sudo chmod 0755 /usr/local/bin/ack
Debianベースのシステムでは、ack(漢符号変換器)と呼ばれる独立したパケットがあることに注意してください。たまたまそのパッケージを使用している場合は、名前の競合を避けるためにackの名前を変更する必要があります。
ackの使用例1.現在のディレクトリで単語「eat」を再帰的に検索します。「feature」または「eating」のような文字列に一致しません。
$ ack -w eat
2.特殊文字の文字列'$path=.'を検索し、すべてのメタ文字('$','.')は、文字列で一致する必要があります。
$ ack -Q '$path=.' /etc
3.dowloadsディレクトリを除いて、すべてのディレクトリで「about」という単語を検索します。
$ ack about --ignore-dir=downloads
4.「protected」の単語を含むPHPファイルのみを検索し、ファイル名で検索結果を統合し、各ファイルに対応する検索結果を印刷します。
$ ack --php --group protected
5.「CFLAG」キーを含むMakefileのファイル名を取得します。ファイル名は*.mk,makefile,Makefile,GNUmakefileはすべて考慮の範囲内にある:
$ ack --make -l CFLAG
6.ログ・ファイル全体を表示するときにハイライト一致する文字列:
$ tail -f /var/log/syslog | ack --passthru 192.168.1.10
7.ackでサポートされているファイルフィルタタイプを交換するには、次の手順に従います。
$ ack --help-type