サーバのログを確認する時に、
「catやlessはテキストを全部読み込んでしまい余計なサーバリソースを使うからheadやtailで削って確認して」
と指示されたのですが、そういうものなのでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
たしかに cat を工夫せず大きいファイルに使うと、たまに痛い目に遭います。
ファイルを全部読み込む負担だけでなく、そのままではコンソールに丸ごと吐き出すので、そちらの負担が問題になりやすいです。
cat は他のコマンドとの連携でなければ、あんまり使いどころはないと思います。
しかし less はお勧めです。
大きいファイルを開いても、ファイル全体を読み込むことはありません。出力量もコンソールのサイズに限定されます。
確認(閲覧)目的で head や tail を使っても、一発で適切な結果が得られるとは限りません。
less なら必要なだけスクロールして、想定外の状況なら任意で終了(小文字の q)させることもできますので、むしろ安全です。
さすがに行番号指定や単語検索を行うと head/tail 以上の負担にはなりますが、類似のコマンドと(grep や wc) に比べれば大差ありませんし、必要を感じてから実行でき、実行結果に応じて次操作をできる点で優位です。
小難しい話はさておき、とりあえず以下だけ覚えとけば、それなりに使えるかと思います。
head の代わりは
less ファイルのパス
tail の代わりは、上記のコマンドのあと以下をタイプ
G ※Shift+g
特定行への移動は
:行番号
grep の代わりは、less で開いたあと
/検索したい単語 ※先頭に半角スラッシュ。特殊文字の扱いなどはマニュアルを参照
画面外の行にスクロールしたければ
下=j 上=k
終了するときは
q
操作ミスって訳が分からなくなったときは
ctrl+c や q を連打
投稿2014/10/05 16:44
総合スコア19
0
ベストアンサー
ログファイルが 10万行 あったとします。その 9万行目に 問題となるログが出力されていたとします。
それを cat ,less で見ても 問題発生箇所の行を見つけだすのはほとんど 無理ゲー です。
grep で 絞り込み (時間や キーワードで) をしてから、その行付近の前後を見るという風にしないと。
500 行ほどのログですが、そのログから 特定箇所を表示させる操作例を示してみます。
$ wc /usr/local/var/apache2/log/error_log 541 5443 56385 /usr/local/var/apache2/log/error_log
ログが 541 行あることがわかります。
ここでは エラー の行を探すことにします。(Error とか error を含む行)
$ grep -i error /usr/local/var/apache2/log/error_log | wc 108 1298 12807
108 行がヒットしました。
ヒットした行の後ろ 10 行 を見てみます。行番号を合わせ表示させています。
$ grep -i -n error /usr/local/var/apache2/log/error_log | tail 435:App 97559 stdout: Error loading ~/.pryrc: cannot load such file -- hirb 444:App 97559 stdout: 13: result = catch(PG::Error) do 457:App 97592 stdout: Error loading ~/.pryrc: cannot load such file -- hirb 465:App 97592 stdout: 13: result = catch(PG::Error) do 478:App 97645 stdout: Error loading ~/.pryrc: cannot load such file -- hirb 486:App 97645 stdout: 13: result = catch(PG::Error) do 499:App 97651 stdout: Error loading ~/.pryrc: cannot load such file -- hirb 507:App 97651 stdout: 13: result = catch(PG::Error) do 520:App 97661 stdout: Error loading ~/.pryrc: cannot load such file -- hirb 528:App 97661 stdout: 13: result = catch(PG::Error) do
499 行目付近 (495 行目 から 10 行分) を見ることにします。
$ tail -n +495 /usr/local/var/apache2/log/error_log | head App 97645 stdout: 22: end App 97645 stdout: App 97645 stdout: [1] pry(#<MyMiddleware>)> App 97651 stdout: App 97651 stdout: Error loading ~/.pryrc: cannot load such file -- hirb App 97651 stdout: /Users/katoy/.rbenv/versions/1.9.3-p484/lib/ruby/gems/1.9.1/gems/activesupport-3.2.13/lib/active_support/dependencies.rb:251:in `require' App 97651 stdout: App 97651 stdout: App 97651 stdout: From: /Users/katoy/github/apas/ServiceCenter/app/middlewares/my_middleware.rb @ line 12 MyMiddleware#call: App 97651 stdout:
投稿2014/10/05 01:07
総合スコア22324
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。