bekkou68 の日記

Gogengo! や IT 技術など。

サーバをメンテする時に便利な Linux コマンド 3つ

はじめに

サーバを運用したり環境を構築したりしていて「あれ。あのプロセスで吐いてるログどこだっけ・・」など困るときがあります。
そんなときに頼りになるかもしれないコマンドを 3つご紹介します。
@madeth 師匠に教えていただきました。

1. proc でプロセスが使っているファイルを見る

困ったこと

プロセスの吐くログのパスがどうしても分からない・・。

解決法 (編集 2014/09/10)

知りたいプロセスの ID を調べます。

$ ps aux | grep unicorn
deploy    3335  xxx  xxx xxx xxx X       XX   15:14   0:07 unicorn master -c /var/www/myproject/unicorn/staging.rb -E staging -D

プロセスID (この場合は 3335) をもとに root 権限でファイルディスクリプタをのぞきます。

$ sudo ls -l /proc/3335/fd
-wx------ 1 deploy deploy 64 Jun 26 16:56 X -> /hard/to/find/log/unicorn.log
-wx------ 1 deploy deploy 64 Jun 26 16:56 Y -> /hard/to/find/log/unicorn_err.log
...

おお。こんなところにログがありました!

他にもソケット・パイプ・実行ファイルといった情報を見られるようです。

2. mlocate でファイルを検索する (2014年06月30日更新)

困ったこと

あの設定ファイルどこ置いたっけ・・。

解決法

mlocate を使います。インデックスを元に高速でファイルを検索するツールです。別途インストールが必要です。

$ sudo yum -y install mlocate

# インデックスを作成。ファイル構成が変わったら都度実行するのを忘れずに!
# 負荷がかかる操作なので注意
$ sudo updatedb 

検索したいファイル名でコマンドを実行してみましょう。

$ locate nginx.conf
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default
/this/path/is/abnormal/nginx.conf

おお。いろいろな場所から見つけることができました。

パスで絞り込むこともできます。

$ locate "/nginx/nginx.conf"
/etc/nginx/nginx.conf
/etc/nginx/nginx.conf.default

3. プロセスに関する情報をいろいろ知る

困ったこと

プロセスの情報をスマートに知りたい。

解決法

top コマンドの便利な使い方をご紹介します。

  • ユーザで絞り込みたい: u を打ってユーザ名を入力すると絞り込める
  • コマンドラインを見たい: c を打つ
  • CPUを喰ってる順に並べ替えたい: Shift+P を打つ
  • メモリを喰ってる順に並べ替えたい: Shift+M を打つ
  • コア数を確認したい: 1 を打つ

他のオプションが気になる方はこちらをご覧ください。

top には htop といった派生ツールが色々あるようです。

おわりに

知りたいことをスマートに知れるように練度を高めたいなあ (感想)。