yuu_nkjm blog


2009-11-28(Sat) 編集

[find][grep][xargs][command] findした検索結果に含まれるファイルに対してgrepを実行

やりたいこと(シナリオ)

/srv/www以下のファイルで,2009という語が含まれている行を抽出したい.基本的には,ファイル名に*.htmlを含むファイルを選び出し,そのファイルから2009を含む行を抽出する.

xargs

一番使う.

# 手抜き
find /srv/www -name \*.html | xargs grep -nH 2009
# 特殊文字対策
find /srv/www -name \*.html -print0 | xargs -0 grep -nH 2009
# locateは便利なんだけど,どこのどのファイルがインデックス対象になっているかを注意する必要がある.
locate /srv/www/*.html|xargs grep -nH 2009

find

  • nameにはワイルドカードが使える.ワイルドカードを使う場合は,エスケープする必要がある.
  • {}は検索で引っかかったファイル名が入る.{}と\;の間にスペースが必要なことに注意する.\;となっているのは,;をシェルに解釈させないため.
  • -printを指定しなくてもデフォルトが-printなことが多いので,面倒な時はタイプしないことも.
  • 検索対象ディレクトリは複数が可能. "find /srv/www /home/user/public_html -name \*.html" -print
  • findだけで頑張る.
    # プレースホルダ{}あたりの書き方がややこしいので,xargsを使ってしまうことが多い.
    # findの結果が多いときもxargsの方が有利.
    find /srv/www -name \*.html -exec grep -nH 2009 {} \;
    find /srv/www -name "*.html" -exec grep -nH 2009 {} \;
    

grep

  • nで行番号表示,Hでファイル名表示.
  •  ファイル名でフィルタリングしなくていいなら,これが楽.
    grep -rnH 2009 /srv/www
    

参考ページ


2011-11-28(Mon) 編集

[ssh][PuTTY] PuTTYでリモートのトンネリング

PuTTY側の設定で,SSH→トンネルで「ローカルポートは他のホストからの接続を受け入れる」「リモートポートも同様」にチェックを入れる.

接続したサーバで,"netstat -an"を実行する."源ポート"で指定したポート(例えば10000)が開いている.

  • 他ホストに公開していない場合 : TCP 127.0.0.1:10000 0.0.0.0:0 LISTENING
  • 他ホストに公開している場合 : TCP 0.0.0.0:10000 0.0.0.0:0 LISTENING

と表示される.

関連ページ


トップ «前の日(11-27) 最新 次の日(11-29)» 追記 設定
2006|01|06|12|
2007|06|09|
2008|01|03|04|06|07|08|09|10|12|
2009|01|02|05|06|07|08|10|11|12|
2010|03|04|05|06|07|08|09|10|11|
2011|01|02|03|04|05|06|07|08|09|11|12|
2012|01|02|04|06|07|08|10|11|12|
2013|01|02|03|07|08|10|11|12|
2014|01|02|04|05|06|07|08|09|10|11|
2015|01|02|07|11|12|
2016|01|03|05|07|08|09|