コマンド

ファイル数を数える方法

とある仕事でメールが受信できないトラブルが発生し調査したことがあったのですが、
なぜかトラブルのある人だけ毎回通信がタイムアウトしていることがありました。

その際にメールの受信件数を把握するためメールボックス(Maildir形式)内の
ファイル数を数えてみることにしました。
今回はメール件数を把握するために使っていますが汎用的に使えますので
備忘録として記録しておこうと思います。

例) /var/mail/aaa にあるファイル数を確認する場合

find /var/mail/aaa -type f | wc -l

これだけです。

findはファイルを検索するコマンドで、この出力(検索結果)をwcコマンドで受けることで
ファイル数が分かるという仕組みですね。

ちなみに、上記の方法ですとfindでファイル形式を指定していませんので全ての
ファイルが検索対象となり、純粋なメール件数だけでなく設定ファイルなども
含まれますが、それはまぁ誤差ということで^^;

# 余談ですがメールが受信できなかった人はなんと2万件もメールがありました(O_O)

ディスクの利用状況を確認する方法

はじめは十分に空きのあったはずのディスクも
いつの間にかいっぱいになって慌てたことはありませんか?
今回はこんな時のスマートな解決方法を紹介します。

まずはディスク全体の確認
これにはdfコマンドを利用します。

df -h

    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sda2            1012M  362M  599M  38% /
    /dev/sda1              99M   26M   69M  27% /boot
    /dev/sda7              88G  1.6G   82G   2% /home
    none                  503M     0  503M   0% /dev/shm
    /dev/sda5             9.9G  2.2G  7.3G  23% /usr
    /dev/sda6             9.9G  2.2G  7.2G  24% /var

こんな感じになって使用状態が一目で分かります。

 ここでUse%のところに注目し、100%に近づいているところが
危険領域です。(ディスクを多く使っている)

では次に、その多く使っている領域の何がディスクを圧迫させているかを調べます。

例) /usr の利用状況を調べる

du -s /usr/*/ |sort -rn

    678248  /usr/local
    390796  /usr/share
    346412  /usr/lib
    194780  /usr/src
    94332   /usr/java
    54788   /usr/bin
    15072   /usr/sbin
    14048   /usr/include
    12780   /usr/kerberos
    8768    /usr/X11R6
    3132    /usr/libexec
    4       /usr/games
    4       /usr/etc
    4       /usr/dict
    0       /usr/tmp

こんな感じにディレクトリ毎に使用している容量が分かります。

使用量の多いディレクトリをチェックして
余分なファイルを削除する等することでディスクを空けましょう。
これで解決です。

Linuxのデーモン起動制御

Linux系OSをご利用になる場合
クライアント用途よりもサーバ用途でご利用になる方は多いでしょう。

そこで利用する様々なサービスではそれぞれデーモンがあるわけですが、
その起動についてはデーモンのインストール時に自動的に設定されます。
(ランレベル毎OSの起動に合わせてそのデーモンを起動するか否かですね)

人によっては必要のないサービスも立ち上がっている方は多いのではないでしょうか?
手動で毎回不要なデーモンを止めることもありでしょうが、
どうせならスマートに起動しないようにしておきたいところですよね?
今回はその方法のご紹介です。

まずは状態の確認。
chkconfigコマンドを使いましょう。

# chkconfig --list

netfs           0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
apache2         0:off   1:off   2:on    3:on    4:on    5:on    6:off
 ・
 ・
 ・
fam             0:off   1:off   2:off   3:off   4:off   5:off   6:off
named9          0:off   1:off   2:off   3:off   4:off   5:off   6:off
courier-imap    0:off   1:off   2:on    3:on    4:on    5:on    6:off

例えばこの中のapache2デーモンの起動をやめたいとします。
その場合

chkconfig apache2 off

とすると、次回以降のOS起動ではapache2デーモンは立ち上がらなくなります。
やっぱり元に戻したいという場合は、

chkconfig apache2 on

とすると次回以降のOS起動でデーモンが起動するようになります。

もう少し詳細に制御したい場合はランレベルを指定することでピンポイントで
ON/OFF出来ます。

chkconfig --level=2345 apache2 off

こんな感じです。

これで無駄なメモリ消費もなくなりますので、一度チューニングしてみてはいかがでしょうか?

Cronの結果出力の制御方法

cron という Unix/Linux系のOSで定期的な処理を実施するためのデーモンがありますが、
このコマンドを実行した結果(標準出力やエラー出力)は通常メールで通知されます。
1日毎の時刻の修正やアップデータのチェックなど
結構使う機会が多いので便利なコマンドですが、毎回毎回メールが来ると
正直ウザくなったりしますよね。

今回はこのメールを来ないようにする方法を紹介します。

通常
 * * * * * command 1> /dev/nul

エラーメッセージのみメールが来るようにする
 * * * * * command 1> /dev/null

絶対にメールが来ないようにする
 * * * * * command >/dev/null 2>&1

アスタリスク(*)の部分は実行間隔に合わせ適時設定下さい。
(それぞれ 分 時間 日 月 曜日 です)

command は実行させる定期処理です。お使いになる処理に合わせて変更下さい。

1 は 標準出力、2 は エラー出力を表しています。
/dev/null に出力させることで出力をなかったことにします。

以上

hosts.allow / hosts.deny の設定確認

各種デーモンのアクセス制限にinetdでtcpwrapperを使っている場合は

/etc/hosts.allow
/etc/hosts.deny

にその制限内容を書くわけですが
その内容に間違いや問題がないかどうかをチェックするためのコマンドがあります。

  1. 書式の間違いなどをチェックする(tcpdchk)

    これにはtcp_wrappersパッケージに入っているtcpdchkコマンドを利用します。

    % /usr/sbin/tcpdchk

    この結果何も表示されなければOKです。
    問題がある場合はここでエラーメッセージが表示されます。

  2. 制限内容に問題がないか確認する(tcpdmatch)

    tcpdchkと同じくtcp_wrappersパッケージに入っているtcpdmatchコマンドを利用します。

    例) sshdへのアクセス制限を確認(192.168.1.1のみ許可しそれ以外は禁止)

       /etc/hosts.allowの内容
       ----------------------
       sshd: 192.168.1.1
       ----------------------

       /etc/hosts.denyの内容
       ----------------------
       ALL: ALL
       ----------------------

      192.168.1.1が許可されていることを確認する

      % /usr/sbin/tcpdmatch sshd 192.168.1.1

      client:   address  192.168.1.1
      server:   process  sshd
      matched:  hosts.allow line 1
      access:   granted

      accessがgrantedとなっていればアクセスが許可されていることになります。

      192.168.1.2が許可されていないことを確認する

      % /usr/sbin/tcpdmatch sshd 192.168.1.2

      client:   address  192.168.1.2
      server:   process  sshd
      matched:  hosts.deny line 1
      access:   denied

      accessがdenidとなっていればアクセスが拒否されていることになります。

inetd+tcpwrapperを使っている場合は設定したら必ず確認しましょうね。

今主流(?)のxinetdではどうやるのだろうか。。。
多分別の何かがあるのでしょうが分かっていません^^;

コンテンツの配信