このパートでは、Solaris 環境におけるシステム資源の管理について説明します。次の章が含まれます。
ディスク割り当てシステム、アカウンティングプログラム、cron および at コマンドなどを使用して、システム資源を管理するための Solaris のコマンドとユーティリティについて説明します。 |
|
ワークステーション情報メニューなどの、一般的なシステム情報を調べたり、変更したりする手順を説明します。 |
|
使用されていないファイルや大きなディレクトリを見つけて、ディスク空間を最適化するための手順を説明します。 |
|
ディスク割り当てを設定し、管理する手順を説明します。 |
|
crontab および at を使用して、ルーチンまたは 1 度限りのシステムイベントのスケジュールを設定する手順を説明します。 |
|
アカウンティングを設定し、管理する手順を説明します。 |
|
システムアカウンティングソフトウェアについての参照情報を示します。 |
この章では、UNIX ソフトウェアと Solaris 環境が提供するシステム資源管理用の機能について説明します。ディスク割り当て、アカウンティングプログラムの使用方法、さらに、定期的に実行する必要があるコマンドを crontab と at コマンドにより自動的に実行する方法などが含まれます。
この章の内容は次のとおりです。
システム資源を管理する手順については、次の内容を参照してください。
ディスクの割り当て機能を使用することにより、システム管理者は、各ユーザーが使用できるディスク容量と i ノード数 (おおよそのファイル数に該当) を制限して UFS ファイルシステムを制御できます。これは特にユーザーのホームディレクトリがあるファイルシステム上で効果があります。(これにより公開ファイルシステムと /tmp ファイルシステムにはディスクが十分割り当てられないことがあります。)
割り当てを設定する一般的な手順は次のとおりです。
いくつかのコマンドを使用してファイルシステムにディスク割り当てを決め、システムがリブートし、そのファイルシステムがマウントされるたびに割り当てを確認することができます。/etc/vfstab ファイルにエントリを追加し、また、そのファイルシステムの一番上のディレクトリに quotas ファイルを作成する必要があります。
まず 1 人のユーザー用に割り当てを設定し、それを他のユーザー用にコピーします。
割り当てが有効になる前に、他のコマンドが現在のディスクの使用状態をチェックし、競合していないかどうかを確認します。
最後に、コマンドは 1 つ以上のファイルシステムでの割り当てを有効にします。
以上の手順により、あるファイルシステムがマウントされるたびに、そのファイルシステムのディスク割り当てが有効になるように設定できます。詳細は、第 58 章「ディスク割り当ての管理」を参照してください。
一度設定しても、割り当てを変更して、ユーザーが使用できるディスク容量と i ノード数を調整できます。また、システムに変更が必要な場合は、それに合わせて割り当てを追加したり、削除したりできます。割り当ての変更、割り当てを超えてもかまわない時間の長さの設定、各割り当てを無効にしたり削除したりする方法などについては、「割り当ての変更と削除」を参照してください。
さらに、ディスク割り当てを監視することができます。割り当てコマンドを使用することによりシステム管理者は、ファイルシステムでの割り当てを表示したり、割り当てを超えて使用しているユーザーを検索できます。これらのコマンドの使用方法については、「割り当てのチェック」を参照してください。
多くの定型的なシステムイベントは、自動的に実行されるように設定できます。それらの作業のなかには、定期的に実行する必要があるものがあります。その他の作業は、1 回しか実行する必要がありません。大部分は、夜間や週末などの就業時間外に実行できます。
この節では、crontab と at という 2 つのコマンドについて説明します。これらのコマンドでは、ピーク時間帯を避けて、または固定スケジュールに従って繰り返し実行して、定型的なコマンドが自動的に実行されるようにスケジュールすることができます。crontab は繰り返し実行されるコマンドをスケジュールし、at は 1 回実行されるコマンドをスケジュールします。
定型的なシステム管理用コマンドは、crontab コマンドを使用して、毎日、毎週、または毎月それぞれ 1 回ずつ実行するようにスケジュールすることができます。
毎日 1 回の crontab によるシステム管理作業には次のようなものがあります。
作成後、数日以上経過した不要なファイルを一時ディレクトリから削除する
アカウンティング要約コマンドを実行する
df および ps コマンドを使用してシステムのスナップショットを取る
日常のセキュリティ監視を実行する
システムのバックアップを実行する
毎週 1 回の crontab システム管理作業には次のようなものがあります。
毎月 1 回の crontab システム管理作業には次のようなものがあります。
当月使用されなかったファイルのリストを表示する
月次アカウンティングレポートを生成する
上記に加えて、連絡事項の通知の転送やバックアップファイルの削除や、さらに他の定型的システム作業を実行するように crontab コマンドをスケジュールすることもできます。
特定の 1 つのジョブを後で実行するように at コマンドを使用してスケジュールできます。
crontab と同様、at でも定型的コマンドの自動実行をスケジュールできます。しかし、crontab ファイルとは異なって、at ファイルはそれぞれのコマンドを 1 回実行して、その後はディレクトリから削除されてしまいます。したがって、at はそれぞれ 1 つのコマンドまたはスクリプトを実行して、後で調べられるようにそれらの出力を別々のファイルに送るのが最も効果的です。
at ジョブの実行を依頼するには、単にコマンド構文に従って at オプションで実行時刻を指定してください。at ジョブの実行依頼の詳細については、「at コマンドの説明」を参照してください。
at コマンドは、入力されたコマンドまたはスクリプトを、現在の環境変数のコピーと一緒に /usr/spool/cron/atjobs か /var/spool/cron/atjobs に格納します。作成された at ジョブには、ファイル名として、at 待ち行列内での位置を指定する長い数値と .a 拡張子からなる、たとえば 793962000.a のような文字列が与えられます。
cron デーモンは、通常 15 分間隔で定期的に atrun プログラムを実行します。atrun は次に、それぞれのスケジュールされた時刻に各 at ジョブを実行します。at ジョブが実行し終わると、それぞれのファイルが atjobs ディレクトリから削除されます。
SunOS 5.x のシステムアカウンティングソフトウェアは、ユーザー接続時間、プロセスに使用された CPU 時間、およびディスク使用率についてのデータを収集および記録できる、プログラムセットです。一度このデータを収集すると、レポートを生成して、システム使用率に対して料金を請求できます。
アカウンティングプログラムは、次のような目的に使用できます。
システム使用率の監視
問題発生時の対処
性能上の問題の追跡と解決
システムセキュリティの管理
システムアカウンティングプログラムは、設定が済むと、ほとんどの場合自動的に実行されます。
アカウンティングユーティリティは、データから要約ファイルとレポートを生成する C 言語プログラムとシェルスクリプトを提供します。これらのプログラムは、ディレクトリ /usr/adm/acct と /usr/lib/acct にあります。
日次アカウンティングによって、次の 4 種類のアカウンティングを簡単に実行できます。
接続
プロセス
ディスク
料金計算
自動アカウンティングを設定するには、cron で自動的に起動できるように、それらのスクリプトを crontab ファイルに入れます。
次に、アカウンティングが機能する概要を次に示します。
システムを起動してからシャットダウンするまでの間に、システムの利用に関する (ユーザーログイン、実行されたプロセス、データの格納などの) raw データがアカウンティングファイルに収集されます。
定期的に (通常 1 日に 1 回)、/usr/lib/acct/runacct プログラムが各種のアカウンティングファイルを処理して、累積要約ファイルと日次アカウンティングレポートを生成します。この日次レポートは /usr/lib/acct/prdaily プログラムによって出力されます。
runacct によって生成される累積要約ファイルは、monacct プログラムを実行して月に 1 回処理され出力できます。monacct によって生成される要約レポートは、月次またはその他の会計期間ベースのユーザーに対する効率的な課金手段になります。
アカウンティングソフトウェアを設定する手順については、第 60 章「アカウンティングの設定と管理作業」を参照してください。アカウンティングの機能の参照情報については、第 61 章「システムアカウンティングの参照情報」を参照してください。
この章では、最も一般的なシステム情報を確認および変更するために必要な手順を示します。
表 56-1 で、一般システム情報を表示できるコマンドのマニュアルページと説明を示します。
表 56-1 システム情報表示用コマンド
コマンド |
表示できるシステム情報 |
---|---|
showrev(1M) |
ホスト名、ホスト ID 番号、リリース、カーネルアーキテクチャ、アプリケーションアーキテクチャ、ハードウェアプロバイダ、ドメイン、およびカーネルのバージョン。 |
uname(1) |
オペレーティングシステム名、リリース、バージョン、ノード名、ハードウェア名、プロセッサタイプ |
ホスト ID 番号 |
|
インストールされているメモリー量 |
|
日時 |
特定のシステムとソフトウェアのリリース情報を表示するには、showrev コマンドを使用します。
$ showrev [-a]
-a |
利用できるすべてのシステムのリリース情報を表示する。 |
次の例は、showrev コマンドの出力を示しています。
$ showrev -a Hostname: pluto Hostid: 5721864d Release: 5.6 Kernel architecture: sun4cm Application architecture: sparc Hardware provider: Sun_Microsystems Domain: solar.com Kernel version: SunOS 5.6 Generic August 1997 OpenWindows version: OpenWindows Version 3.6 January 1997 No patches are installed $
システム情報を表示するには、uname コマンドを次のように入力します。
$ uname[-a]
-a |
オペレーティングシステム名の他に、システムノード名、オペレーティングシステムのリリース、オペレーティングシステムのバージョン、ハードウェア名、プロセッサタイプも表示する。 |
次は uname コマンドからの出力例です。
$ uname SunOS $ uname -a SunOS pluto 5.6 Generic sun4m sparc SUNW,SPARCstation-5 $
ホスト ID 番号を 16 進形式で表示するには、次のように hostid コマンドを使用します。
$ hostid
次は hostid コマンドからの出力例です。
$ hostid 7725ac42
システムにインストールされているメモリー量を表示するには、次のように prtconf コマンドを使用します。
$ prtconf [| grep Memory]
grep Memory |
このコマンドからの出力の表示をメモリー情報だけに限定する。 |
# prtconf | grep Memory Memory size: 56 Megabytes
システムクロックに従った現在の日時を表示するには、次のように date コマンドを使用します。
$ date
次は date コマンドからの出力例です。
$ date Thu Mar 6 09:06:52 MST 1997 $
表 56-2 で、一般システム情報を変更できるコマンドのマニュアルページと説明を示します。
表 56-2 システム情報変更用コマンド
コマンド |
対象システム情報とコマンドの機能 |
---|---|
日時を別のシステムの日時に合わせる |
|
日時を自分の指定に合わせる |
これらのコマンドを使用することにより、システムの日時を設定して、サーバーなど別のシステムの日時と同期させることができます。または、新しい日時を指定して、システムの日時を変更できます。
本日のメッセージ (MOTD) 機能のメッセージは /etc/motd にありますが、それらのメッセージを使用して、システムのすべてのユーザーにログイン時に通知や問い合わせを送ることができます。ただし、この機能の利用は控え目にして、このファイルを定期的に編集して無用になったメッセージを削除するようにしてください。
/etc/system ファイルを編集することにより、次のことが可能です。
日時を設定し直して別のシステムに同期させるには、次のように rdate コマンドを使用します。
# rdate other-system-name
other-system-name |
別のシステム名 |
rdate を使用してシステムの日時の設定が変更できたことを確認するには、date コマンドを使用してシステムの日時を調べます。
出力は同期させた別のシステムの日時に一致するはずです。
次の例は、どのように rdate を使用してシステムの日時を別のシステムに同期させるかを示しています。この例では、数時間遅れていたシステム neptune の日時の設定が変更されてサーバー pluto の日時と一致しています。
neptune$ date Thu Mar 6 09:07:34 MST 1997 neptune$ rdate pluto Thu Mar 6 09:08:29 1997 neptune$ date Thu Mar 6 09:08:32 MST 1997
次のように新しい日時を入力します。
# date mmddHHMM[[cc]yy]
mm |
月。2 桁を使用。 |
dd |
日。2 桁を使用。 |
HH |
時。2 桁で 24 時間制を使用。 |
MM |
分。2 桁を使用。 |
cc |
世紀。2 桁を使用。 |
yy |
年。2 桁を使用。 |
オプションを指定しないで date コマンドを使用してシステムの日時をチェックすることによって、システムの日付が正しくリセットされていることを確認します。
出力は、他のシステムと同じ日時を示すはずです。
次の例は、どのように date を手作業で使用してシステムの日時を設定するかを示しています。
# date Thu Mar 6 09:10:20 MST 1997 # date 030609121997 Thu Mar 6 09:12:00 MST 1997
エディタを使って、/etc/motd ファイルをオープンします。
テキストを編集して、スペース、タブ、復帰改行を含めて、ユーザーログインプロセスの一部として表示されるメッセージを挿入します。
ファイルをクローズして変更結果を保存します。
/etc/motd の内容を表示することによって、変更を確認します。
$ cat /etc/motd Welcome to the UNIX Universe. Have a nice day.
デフォルトの本日のメッセージは、Solaris ソフトウェアのインストール時に提供されます。メッセージの内容は次のような SunOS バージョン情報です。
$ cat /etc/motd Sun Microsystems Inc SunOS 5.6 Generic August 1997
次に編集後の /etc/motd ファイルの例を示します。このファイルは、ログインする各ユーザーに対してシステムの利用度に関する情報を提供します。
$ cat /etc/motdThe system will be down from 7:00 a.m to 2:00 p.m.on Saturday, August 5, for upgrades and maintenance. Do not try to access the system during those hours. Thank you...
/etc/system ファイルに次の行を追加します。
set maxuprc=value
value |
1 人のユーザーが同時に実行できるプロセス数 |
/etc/system ファイルをクローズして、変更結果を保存します。
maxuprc 値の変更を確認します。
# grep maxuprc /etc/system set maxuprc=100
システムをリブートします。
次の例は、各ユーザーが 100 プロセスを実行できるようにする場合に /etc/system ファイルに追加する行を示しています。
set maxuprc=100
/etc/system ファイルに次の行を追加します。
set pt_cnt=value set npty=same_value_as_pt_cnt set sad_cnt=2_times_pt_cnt valueset nautopush=same_value_as_ pt_cnt
set pt_cnt |
System V の疑似 tty 数を設定する。 |
set npty |
BSD の疑似 tty 数を設定する。 |
set sadcnt |
STREAMS のアドレス可能デバイス数を設定する。 |
set nautopush |
STREAMS の自動プッシュエントリ数を設定する。この数は、sadcnt の値の 2 倍になる。 |
/etc/system ファイルをクローズして変更結果を保存します。
pt_cnt 値の変更を確認します。
# grep pt_cnt /etc/system set pt_cnt=256
次のように入力して、リブート時にシステムを再構成するようにシステムに指示します。
$ touch /reconfigure
システムをリブートします。
次の例は、疑似 tty 数を 128 に増加しています。
set pt_cnt=128 set npty=128 set sadcnt=256 set nautopush=128
デフォルトでは、同時に発生する可能性のあるロック要求数は、512 です。ログアウトするとき、ユーザーは、ファイル (utmp を含む) をロックします。512 人より多いユーザーが同時に (数秒のうちに) ログアウトする場合、許可されるファイルロック数を増やさなければなりません。
/etc/system ファイルに次の行を追加して、ロック要求の数を増やします (デフォルトは 512)。
set tune_t_flckrec=value
/etc/system ファイルをクローズして変更結果を保存します。
tune_t_flckrec 値の変更を確認します。
# grep tune_t_flckrec /etc/system set tune_t_flckrec=value
次の例は、ロック要求数を 1024 に増加させます。
set tune_t_flckrec=1024
次の変数を追加して、共有メモリーセグメントを増やします。
set shmsys:shminfo_shmmax=value set shmsys:shminfo_shmmin=value set shmsys:shminfo_shmmni=value set shmsys:shminfo_shmseg=value set semsys:seminfo_semmap=value set semsys:seminfo_semmni=value set semsys:seminfo_semmns=value set semsys:seminfo_semmsl=value set semsys:seminfo_semmnu=value set semsys:seminfo_semume=value
/etc/system ファイルをクローズして変更結果を保存します。
共有メモリー値の変更を確認します。
# grep shmsys /etc/system
次の共有メモリー値は、大きなデータベースアプリケーションを実行する、多量のメモリー (たとえば 128 M バイト) を持つシステムに対応させます。
set shmsys:shminfo_shmmax=268435456 set shmsys:shminfo_shmmin=200 set shmsys:shminfo_shmmni=200 set shmsys:shminfo_shmseg=200 set semsys:seminfo_semmap=250 set semsys:seminfo_semmni=500 set semsys:seminfo_semmns=500 set semsys:seminfo_semmsl=500 set semsys:seminfo_semmnu=500 set semsys:seminfo_semume=100
この章では、使用していないファイルや大きなディレクトリを見つけることにより、ディスク容量を最適化する方法を示します。この章で説明する手順は次のとおりです。
df コマンドとそのオプションを使用して、空きディスクブロック数とファイル数のレポートを得ることができます。詳細については、df(1M) のマニュアルページを参照してください。
次のように df コマンドを入力して、ディスク容量の利用状況に関する情報を表示します。
$ df [directory] [-F fstype] [-g] [-k] [-t]
df |
オプションを指定しない場合、マウントされている全ファイルシステム、それらの装置名、使用されている 512 バイトのブロックの合計数、ファイル数のリストを表示する。 |
directory |
ファイルシステムを確認したいディレクトリ。装置名、使用ブロック数、ファイル数を表示する。 |
-F fstype |
マウントされていないファイルシステム、それらの装置名、使用されている 512 バイトのブロック数、タイプ fstype のファイルシステム上のファイル数のリストを表示する。 |
-g |
マウントされている全ファイルシステムの statvfs 構造を表示する。 |
-k |
ファイルシステム、使用されている K バイト数、空き K バイト数、容量の利用率、マウントポイントのリストを表示する。 |
-t |
マウントされている全ファイルシステムの合計ブロック数と使用されているブロック数を表示する。 |
リモートでマウントされているファイルシステムに対しては、ファイル数の代わりに 「-1 files」 が表示されます。
次の例では、ローカルディスク上にファイルシステムルート (/)、/usr、/proc、/export/home、/export/root、/export/swap、 /opt、/tmp があります。その他のファイルシステムは NFS マウントであり、ローカルディスク資源は使用しません。
$ df / (/dev/dsk/c0t3d0s0 ): 30374 blocks 14002 files /usr (/dev/dsk/c0t3d0s6 ): 40714 blocks 80522 files /proc (/proc ): 0 blocks 429 files /dev/fd (fd ): 0 blocks 0 files /export/home (/dev/dsk/c0t3d0s7 ): 10712 blocks 10564 files /export/root (/dev/dsk/c0t3d0s3 ): 69180 blocks 18812 files /export/swap (/dev/dsk/c0t3d0s4 ): 61804 blocks 29563 files /opt (/dev/dsk/c0t3d0s5 ): 15722 blocks 13147 files /tmp (swap ): 57104 blocks 5653 files /usr/local (mars:/usr/local ): 435040 blocks -1 files $
次の例では、ファイルシステム、合計 K バイト数、使用されている K バイト数、使用可能な K バイト数、容量の利用率、マウントポイントが表示されています。
$ df -k Filesystem kbytes used avail capacity Mounted on /dev/dsk/c0t3d0s0 30991 15812 12089 57% / /dev/dsk/c0t3d0s6 185303 164946 1827 99% /usr /proc 0 0 0 0% /proc fd 0 0 0 0% /dev/fd /dev/dsk/c0t3d0s7 19095 13739 3456 80% /export/home /dev/dsk/c0t3d0s3 34599 9 31140 1% /export/root /dev/dsk/c0t3d0s4 55511 24609 25352 50% /export/swap /dev/dsk/c0t3d0s5 23063 15202 5561 74% /opt swap 29564 976 28588 4% /tmp mars:/usr/local 5353093 5135591 163972 97% /usr/local $
次の例は、上の例と同じシステムに関する情報を示していますが、表示されているのは UFS ファイルシステムの情報だけです。
$ df -F ufs / (/dev/dsk/c0t3d0s0 ): 30358 blocks 14002 files /usr (/dev/dsk/c0t3d0s6 ): 40714 blocks 80522 files /export/home (/dev/dsk/c0t3d0s7 ): 10712 blocks 10564 files /export/root (/dev/dsk/c0t3d0s3 ): 69180 blocks 18812 files /export/swap (/dev/dsk/c0t3d0s4 ): 61804 blocks 29563 files /opt (/dev/dsk/c0t3d0s5 ): 15722 blocks 13147 files $
/proc と /tmp はローカルファイルシステムですが、UFS ファイルシステムではありません (/proc は PROCFS ファイルシステムであり、/tmp は TMPFS ファイルシステムです)。
次の例は、マウントされているすべてのファイルシステム、装置名、使用されている 512 バイトブロックの合計数、ファイル数を示しています。2 行構成の各エントリの 2 行目は、それぞれのファイルシステムに割り当てられているブロックの合計数とファイルの合計数を示します。
$ df -t / (/dev/dsk/c0t3d0s0 ): 30358 blocks 14002 files total: 61982 blocks 16128 files /usr (/dev/dsk/c0t3d0s6 ): 40714 blocks 80522 files total: 370606 blocks 94080 files /proc (/proc ): 0 blocks 429 files total: 0 blocks 492 files /dev/fd (fd ): 0 blocks 0 files total: 0 blocks 26 files /export/home (/dev/dsk/c0t3d0s7 ): 10712 blocks 10564 files total: 38190 blocks 10752 files /export/root (/dev/dsk/c0t3d0s3 ): 69180 blocks 18812 files total: 69198 blocks 18816 files /export/swap (/dev/dsk/c0t3d0s4 ): 61804 blocks 29563 files total: 111022 blocks 29568 files /opt (/dev/dsk/c0t3d0s5 ): 15722 blocks 13147 files total: 46126 blocks 13440 files /tmp (swap ): 57144 blocks 5653 files total: 59096 blocks 5768 files /usr/local (mars:/usr/local ): 435008 blocks -1 files total: 10706186 blocks -1 files $
ls コマンドを使用して、ファイルサイズを調べたりソートしたりすることができます。また、find コマンドを使用して、サイズの制限を超えているファイルを探すことができます。詳細については、ls(1) と find(1) のマニュアルページを参照してください。
次のように入力して、ファイルのサイズを表示します。
$ ls [-l] [-s]
-l |
長形式でファイルとディレクトリのリストを表示し、それぞれのサイズをバイト単位で示す。 |
-s |
ファイルとディレクトリのリストを表示し、それぞれのサイズをブロック単位で示す。 |
次の例は、lastlog、wtmp、wtmpx が /var/adm ディレクトリ内のその他のファイルよりも相当大きいことを示しています。
venus% cd /var/adm venus% ls -l total 434 -r--r--r-- 1 root other 585872 Jan 28 14:53 lastlog drwxrwxr-x 2 adm adm 512 Dec 1 16:35 log -rw-r--r-- 1 root other 408 Jan 28 14:15 messages -rw-r--r-- 1 root other 177 Jan 24 16:56 messages.0 -rw-r--r-- 1 root other 177 Jan 17 16:13 messages.1 -rw-r--r-- 1 root other 0 Jan 4 04:05 messages.2 -rw-r--r-- 1 root other 562 Jan 2 13:13 messages.3 drwxrwxr-x 2 adm adm 512 Dec 1 16:35 passwd drwxrwxr-x 2 adm sys 512 Jan 28 11:38 sa -rw-rw-rw- 1 bin bin 0 Nov 26 10:56 spellhist -rw------- 1 root root 1319 Jan 28 14:58 sulog -rw-r--r-- 1 root bin 288 Jan 28 14:53 utmp -rw-r--r-- 1 root bin 2976 Jan 28 14:53 utmpx -rw-rw-r-- 1 adm adm 12168 Jan 28 14:53 wtmp -rw-rw-r-- 1 adm adm 125736 Jan 28 14:53 wtmpx
次の例は、lpNet が 8 ブロックを使用し、lpsched、lpsched-1 と lpsched-2 がそれぞれ 2 ブロックを使用していることを示しています。
% cd /var/lp/logs % ls -s total 14 2 lpsched-1 0 lpsched-4 0 requests-2 8 lpNet 2 lpsched-2 0 requests 2 lpsched 0 lpsched-3 0 requests-1 %
次のように入力して、ファイルのサイズをブロック単位に、最も大きいものから降順に表示します。
$ ls -s | sort -nr | more
sort -nr |
ファイルのリストをブロックサイズの最も大きなものから降順に並べる。 |
次の例では、wtmpx と lastlog が /var/adm ディレクトリ内で最も大きなファイルです。
$ cd /var/adm $ ls -s | sort -nr | more 320 wtmpx 128 lastlog 74 pacct 56 messages 30 wtmp 6 utmpx 2 utmp 2 sulog 2 sa 2 passwd 2 log 0 spellhist total 624
次のように find コマンドを使用して、指定したサイズを超えるファイルを見つけて、それらのファイル名を表示します。
$ find directory -size +nnn
directory |
ファイルを探したいディレクトリ |
-size +nnn |
512 バイトブロック数。指定したサイズを超えるファイルがリストに表示される。 |
次の例は、作業中のカレントディレクトリ内の 400 ブロックを超えるファイルをどのように見つけるかを示しています。
$ find . -size +400 -print ./Howto/howto.doc ./Howto/howto.doc.backup ./Howto/howtotest.doc ./Routine/routineBackupconcepts.doc ./Routine/routineIntro.doc ./Routine/routineTroublefsck.doc ./.record ./Mail/pagination ./Config/configPrintadmin.doc ./Config/configPrintsetup.doc ./Config/configMailappx.doc ./Config/configMailconcepts.doc ./snapshot.rs
du コマンドとそのオプションを使用してディレクトリのサイズを表示できます。さらに、quot コマンドを使用すれば、ユーザーアカウントによって占められるローカル UFS ファイルシステム上のディスク容量のサイズを知ることができます。これらのコマンドの詳細については、du(1M) と quot(1M) のマニュアルページを参照してください。
次のように du コマンドを入力して、1 つ以上のディレクトリ、サブディレクトリ、ファイルのサイズを表示します。サイズは 512 バイトブロック単位で表示されます。
$ du [-as] [directory ...]
du |
指定した各ディレクトリとそれらの下の各サブディレクトリのサイズを合わせて表示する。 |
-a |
指定したディレクトリ内の各ファイルと各サブディレクトリのサイズと合計ブロック数を表示する。 |
-s |
指定したディレクトリ内の合計ブロック数を表示する。 |
directory ... |
調べたい 1 つ以上のディレクトリを指定する。 |
次の例は、2 つのディレクトリとそれらのすべてのサブディレクトリのサイズを表示します。
$ du /var/log /var/cron 4 /var/log 3250 /var/cron
次の例は、2 つのディレクトリとそれらのすべてのサブディレクトリとファイルのサイズ、および各ディレクトリ内の合計ブロック数を表示します。
$ du -a /var/log /var/cron 0 /var/log/authlog 0 /var/log/syslog 2 /var/log/sysidconfig.log 4 /var/log 3248 /var/cron/log 3250 /var/cron
次の例は 2 つのディレクトリの合計サイズを表示します。
$ du -s /var/log /var/cron 4 /var/log 3250 /var/cron
次のように入力して、ユーザー、ディレクトリまたはファイルシステム、1024 バイト単位のブロック数を表示します。
# quot [-a] [filesystem]
-a |
マウントされている各 UFS ファイルシステムの全ユーザーと 1024 バイト単位のブロック数を表示する。 |
filesystem |
UFS ファイルシステム。ユーザーと使用されているブロック数が表示される。 |
quot コマンドは、ローカル UFS ファイルシステムに対してだけ使用できます。
次の例では、ルート (/) ファイルシステムのユーザーが表示され、次にマウントされているすべての UFS ファイルシステムのユーザーが表示されます。
# quot / /dev/rdsk/c0t0d0s0: 35400 bin 14312 smtp 183 adm 49 lp 47 uucp 37 bob 28 sys 2 mary # quot -a /dev/rdsk/c0t0d0s0 (/): 35400 bin 14312 smtp 183 adm 49 lp 47 uucp 37 bob 28 sys 2 mary /dev/rdsk/c0t0d0s6 (/usr): 104276 smtp 56567 bin 2000 lp 698 uucp 1 adm /dev/rdsk/c0t0d0s7 (/export/home): 617 smtp
ファイルの数が非常に多くなったファイルシステムを整理する場合、最近使用されていないファイルを見つけて削除します。使用されていないファイルは ls または find コマンドを使用して見つけることができます。詳細については、ls(1) と find(1) のマニュアルページを参照してください。
ディスク容量を節約するその他の方法としては、/var/tmp または /var/spool 内にあるような一時ファイルを空にしたり、core ファイルやクラッシュダンプファイルを削除するなどが含まれます。これらのファイルの詳細については、第 69 章「システムクラッシュ情報の生成と保存」を参照してください。
次のように ls -t コマンドを使用して、最も最近に作成または変更されたファイルから順番にファイルのリストを表示します。
$ ls -t [directory]
-t |
最新タイムスタンプをリストの最初としてソートする。 |
directory |
ファイルを探したいディレクトリ |
次の例は、ls -t をどのように使用して /var/adm ディレクトリ内の最新のファイルを見つけるかを示しています。sulog、messages、utmpx、wtmpx、utmp、lastlog が最も最近に作成または変更されたファイルです。これは、ls -l からの出力を使用して確認できます。この出力では、それら 6 つのファイルは 3 月に作成または変更されているのに対して、/var/spool 内のその他のファイルは 3 月よりも前に作成または変更されています。
$ ls -t /var/adm sulog wtmpx wtmp messages.1 vold.log spellhist messages utmp sa messages.2 log aculog utmpx lastlog messages.0 messages.3 acct passwd $ ls -l /var/adm total 686 drwxr-xr-x 5 adm adm 512 Feb 13 16:20 acct -rw------- 1 uucp bin 0 Feb 13 16:04 aculog -r--r--r-- 1 root other 8456 Mar 27 10:34 lastlog drwxr-xr-x 2 adm adm 512 Feb 13 16:36 log -rw-r--r-- 1 root other 117376 Mar 27 13:11 messages -rw-r--r-- 1 root other 4620 Jan 30 08:30 messages.0 -rw-r--r-- 1 root other 11176 Jan 23 04:30 messages.1 -rw-r--r-- 1 root other 60 Jan 13 09:45 messages.2 -rw-r--r-- 1 root other 0 Jan 31 04:05 messages.3 drwxr-xr-x 2 adm adm 512 Feb 13 16:03 passwd drwxr-xr-x 2 adm sys 512 Mar 20 06:59 sa -rw-rw-rw- 1 bin bin 0 Feb 13 16:04 spellhist -rw------- 1 root root 1647 Mar 27 13:28 sulog -rw-r--r-- 1 root bin 504 Mar 27 10:34 utmp -rw-r--r-- 1 root bin 5208 Mar 27 10:34 utmpx -rw-rw-rw- 1 root root 500 Jan 11 14:40 vold.log -rw-rw-r-- 1 adm adm 14724 Mar 27 10:34 wtmp -rw-rw-r-- 1 adm adm 151404 Mar 27 10:34 wtmpx
スーパーユーザーになります。
次のように入力して、指定した日数の間アクセスのないファイルを見つけて、ファイルにそれらのリストを書き込みます。
# find directory -type f [-atime +nnn] [-mtime +nnn] -print > filename
directory |
ファイルを調べたいディレクトリ。この下のディレクトリも調べられる。 |
-atime +nnn |
指定した日数の間アクセスのないファイルを見つける。 |
-mtime +nnn |
指定した日数の間変更のないファイルを見つける。 |
filename |
上の手順でリストに書き込んだ使用されていないファイルを削除します。
# rm `cat filename`
filename |
このコマンドで作成されるファイルで、使用されていないファイルのリストを含むファイル名 |
次の例では、/var/adm 内の通常のファイルと、最近 60 日間アクセスされていないディレクトリを見つけ、使用されていないファイルのリストを /var/tmp/deadfiles に保存しています。それらのファイルはその後 rm コマンドで削除されます。
# find /var/adm -type f -atime +60 -print > /var/tmp/deadfiles & # more /var/tmp/deadfiles /var/adm/log/asppp.log /var/adm/aculog /var/adm/spellhist /var/adm/wtmp /var/adm/wtmpx /var/adm/sa/sa13 /var/adm/sa/sa27 /var/adm/sa/sa11 /var/adm/sa/sa23 /var/adm/sulog /var/adm/vold.log /var/adm/messages.1 /var/adm/messages.2 /var/adm/messages.3 # rm `cat /var/tmp/deadfiles`
次のように入力して、/var/tmp ディレクトリに変更します。
# cd /var/tmp
次の手順を実行する前に、正しいディレクトリにいることを確認してください。次の手順はカレントディレクトリ内のすべてのファイルを削除します。
カレントディレクトリ内のファイルとサブディレクトリを削除します。
# rm -r *
一時サブディレクトリやファイル、または古いサブディレクトリやファイル (たとえば、mail、lost+found、quotas など) が入っている他のディレクトリに変更し、上の手順 3 を繰り返してそれらを削除します。
次の例は、どのように /var/tmp ディレクトリを整理するかを示し、すべてのファイルとサブディレクトリが削除されたことを確認しています。
# cd /var/tmp # ls deadfiles wxconAAAa0003r:0.0 wxconAAAa000NA:0.0 test_dir wxconAAAa0003u:0.0 wxconAAAa000cc:0.0 wxconAAAa000zs:0.0 # rm -r * # ls #
core ファイルの探索を始めたいディレクトリに変更します。
次のように入力して、ディレクトリとサブディレクトリ内のすべての core ファイルを見つけて削除します。
# find . -name core -exec rm {} ¥;
次の例は、どのように find コマンドを使用して jones のユーザーアカウントから core ファイルを見つけて削除するかを示します。
# cd /home/jones # find . -name core -exec rm {} ¥;
クラッシュダンプファイルは非常に大きくなる可能性があります。したがって、必要以上に長期間保存しないでください。
次のように入力して、クラッシュダンプファイルが格納されているディレクトリに変更します。
# cd /var/crash/system
system |
クラッシュダンプファイルを生成したシステム |
次の手順を実行する前に、正しいディレクトリにいることを確認してください。次の手順はカレントディレクトリ内のすべてのファイルを削除します。
クラッシュダンプファイルを削除します。
# rm *
クラッシュダンプファイルが削除されていることを確認します。
# ls
次の例は、システム venus からどのようにクラッシュダンプファイルを削除するか、およびクラッシュダンプファイルが削除されていることを確認する方法を示します。
# cd /var/crash/venus # rm * # ls #
この章では、ディスクの割り当てを設定し管理する方法を示します。この章で説明する手順は次のとおりです。
ディスク割り当てを使用することによって、システム管理者は、個々のユーザーが使用できるディスク容量と i ノード数 (おおよそファイルの数に相当) を制限して、UFS ファイルシステムのサイズを制御できます。このため、ディスク割り当ては、特に、ユーザーのホームディレクトリが存在するファイルシステムで便利です。
設定後、ディスク割り当ては、ユーザーが使用するディスク容量や i ノード数に合わせて変更できます。さらに、ディスク割り当ては、システムの要求の変化に応じて、追加または削除できます。ディスク割り当て、またはディスク割り当てを超えることができる時間を変更する手順、個々のディスク割り当てを無効にする手順、あるいは、ディスク割り当てをファイルシステムから削除する手順については、「割り当ての変更と削除」を参照してください。
また、ディスク割り当ての状態を監視できます。ディスク割り当てコマンドを使用すると、管理者は、ファイルシステム上のディスク割り当てについての情報を表示したり、ディスク割り当てを超えているユーザーを検索したりできます。これらのコマンドの使い方については、「割り当てのチェック」を参照してください。
弱い制限値と強い制限値の両方を設定できます。システムは、ユーザーが自分の強い制限値を超えることを許可しません。しかし、システム管理者は、ユーザーが一時的に超えることができる、弱い制限値 (「ディスク割り当て」と呼ぶこともある) を設定できます。弱い制限値は、強い制限値より小さくなければなりません。
いったんユーザーが弱い制限値を超えると、タイマーが起動します。タイマーが動いている間、ユーザーは弱い制限値を超えて操作できます。しかし、強い制限値は超えることができません。再びユーザーが弱い制限値を下回ると、タイマーはリセットされます。しかし、タイマーが期限切れになったときに、まだ、ユーザーの使用率が弱い制限値を超えていた場合、弱い制限値は、強い制限値として実施されます。デフォルトでは、弱い制限値のタイマーは、7 日です。
タイマーの値は、repquota コマンドと quota コマンドを実行したときの timeleft フィールドに示されています。
たとえば、あるユーザーの弱い制限値が 10,000 ブロックで、強い制限値が 12,000 ブロックであると仮定します。そのユーザーのブロック使用率が 10,000 ブロックを超えて、タイマーも期限切れになった (7 日を超えた) 場合、そのユーザーは、自分の使用率が弱い制限値を下回るまで、それ以上のディスクブロックをそのファイルシステム上に割り当てることはできません。
ファイルシステムがユーザーに提供する資源は、2 つあります。(データの) ブロックと (ファイルの) i ノードです。各ファイルは、1 つの i ノードを使用します。ファイルデータは、データブロック内に格納されます (通常は、1 K バイトブロック)。
ディレクトリがないと仮定すると、ユーザーは、ブロックを使用しなくても、すべて空のファイルを作成することによって、自分の i ノードディスク割り当てを超えることができます。また、ユーザーは、単純に、ユーザーのディスク割り当て中のすべてのデータブロックを消費するぐらいの大きなファイルを 1 つだけ作成することによって、自分のブロックディスク割り当てを超えることができます。
ディスクの割り当てを設定することにより、ユーザーが利用できるディスク容量と、i ノードの数 (おおよそファイルの数に相当) を制限できます。これらの割り当ては、ファイルシステムがマウントされるたびに自動的に有効になります。この節ではファイルシステム用にディスク割り当てを構成し、設定し、有効にする手順を説明します。
ディスク割り当ての設定には、次の一般的な手順が含まれます。
システムをリブートしてファイルシステムをマウントするごとにディスク割り当てが実施されるように、一連のコマンドを使用して、ファイルシステムでディスク割り当てを利用できるようにするための準備をします。エントリは、/etc/vfstab ファイルに追加しなければなりません。また、quotas ファイルは、ファイルシステムの一番上のディレクトリで作成しなければなりません。
1 人のユーザーに対してディスク割り当てを作成した後、そのディスク割り当てをプロトタイプとして、他のユーザーのディスク割り当てを設定できます。
ディスク割り当てを実際に有効にする前に、他のコマンドを使用して、整合性をチェックします。このチェックでは、提案したディスク割り当てと現在のディスク使用率を比較して、衝突がないことを確認します。
最後に、他のコマンドを使用して、1 つまたは複数のファイルシステム全体のディスク割り当てを有効にします。
上記の手順により、ファイルシステムがマウントされるたびに、そのファイルシステム上でディスク割り当てが自動的に有効になります。上記手順の特定の情報については、「割り当ての設定」を参照してください。
表 58-1 で、ディスク割り当てを設定するコマンドを説明します。
表 58-1 割り当てを行うコマンド
コマンド |
機能 |
---|---|
edquota(1M) |
各ユーザーに対する i ノード数とディスク容量のハード制限とソフト制限を設定する。 |
quotacheck(1M) |
マウントされている各 UFS ファイルシステムを調べ、ファイルシステムのディスク割り当てファイルにある情報と比較し、矛盾があれば報告する。 |
指定したファイルシステムの割り当てを有効にする。 |
|
quota(1M) |
マウントされているファイルシステムのユーザーの割り当てを表示し、割り当てが正しく設定されていることを確認する。 |
ユーザーの割り当てを設定する前に、各ユーザーに割り当てるディスク容量の大きさとファイル数を決定する必要があります。ファイルシステムの合計領域サイズを決して超えないようにする場合は、ファイルシステムの合計サイズをユーザーの数に等分すればよいでしょう。たとえば、3 人のユーザーが 100M バイトのスライスを共有し、それぞれが同じディスク容量のサイズを必要とする場合は、各ユーザーに 33M バイトずつ割り当てます。すべてのユーザーがそれぞれに割り当て制限を押し上げることがないような環境では、割り当ての合計がファイルシステムの合計サイズを超えるように個々の割り当てを設定することも可能です。たとえば、3 人のユーザーが 100M バイトのスライスを共有する場合は、それぞれに 40M バイトを割り当ててもよいということです。
あるユーザーについて edquota コマンドを使用して割り当てを決定すると、同じファイルシステム上の他のユーザーにも同じ割り当てプロトタイプとして利用できます。
UFS ファイルシステムの割り当てを構成し、各ユーザーに対する割り当てを終了したら、実際に割り当てを有効にする前に、quotacheck コマンドを使用して整合性をチェックしてください。システムがリブートされる機会がそれほど多くない場合、quotacheck を定期的に実行するようお勧めします。
edquota により設定した割り当ては、quotaon コマンドを使用して有効にしなければ強制的に設定されません。割り当てファイルを正しく構成したら、システムがリブートし、そのファイルシステムがマウントされるたびに、割り当ては自動的に有効になります。
作業 | 説明 | 手順の説明 | |||||
---|---|---|---|---|---|---|---|
ファイルシステムの割り当ての構成 |
/etc/vfstab を編集して、ファイルシステムがマウントされるたびに割り当てが有効になるようにする。また、quotas ファイルを作成する。 | ||||||
1 ユーザー用の割り当ての設定 |
edquota を使用して 1 ユーザーアカウント用にディスクと i ノードの割り当てを行う。 | ||||||
| |||||||
複数ユーザー用の割り当ての設定 |
オプション。edquota を使用して、その他のユーザーアカウント用にプロトタイプの割り当てを適用する。 | ||||||
| |||||||
整合性のチェック |
quotacheck を使用して、1 つまたは複数のファイルシステムの整合性について、現在の使用状況とディスクの割り当てを比較する。 | ||||||
| |||||||
割り当てを有効にする |
quotaon を使用して、1 つまたは複数のファイルシステムの割り当てを有効にする。 | ||||||
|
エディタを選んで /etc/vfstab ファイルを編集します。割り当てを設定しようとする各 UFS ファイルシステムに対して「mount options」フィールドに rq を追加します。
/etc/vfstab ファイルをクローズして、変更結果を保存します。
割り当てを格納しようとするファイルシステムの最上位ディレクトリに変更します。
次のように入力して、quotas というファイルを作成します。
# touch quotas
root のみ、読み取り/書き込み権を与えます。
# chmod 600 quotas
次の例は、/etc/vfstab の 1 行は、システム pluto のディレクトリ /export/home が NFS ファイルシステムとして、割り当てを有効にしたローカルシステム上のマウントポイント /usr/home にマウントされていることを示しています。
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # pluto:/export/home - /export/home nfs - yes rq
次の例は、/etc/vfstab の行です。ディスク割り当てが有効であるローカル UFS ファイルシステムが /work ディレクトリにマウントされていることを示しています。
#device device mount FS fsck mount mount #to mount to fsck point type pass at boot options # /dev/dsk/c0t4d0s0 /dev/rdsk/c0t4d0s0 /work ufs 3 yes rq
次のように入力して割り当てエディタを使用して、quotas ファイルが最上位ディレクトリにある各マウント済み UFS ファイルシステムに対して、1 行の割り当て情報を含む一時ファイルを作成します。
# edquota username
username |
割り当てを設定しようとするユーザー名 |
1K バイトディスクブロック数の弱い制限値と強い制限値、および i ノード数の弱い制限値と強い制限値を、それぞれ 0 (デフォルト) から各ファイルシステム用に指定されている割り当て値に変更します。
エディタを終了して、変更結果を保存します。
ユーザーの割り当てを設定できたかどうかを確認するには、次のように quota コマンドを使用します。
# quota -v username
-v |
ディスク割り当てがある、マウント済みのファイルシステム上の、ユーザーのディスク割り当て情報を表示する。 |
username |
ディスク割り当て制限を表示するユーザー名を指定する。 |
次の例は、/files だけがマウント済みファイルシステムで、edquota によってオープンされた一時ファイルの内容を示しています。このファイルシステムの最上位ディレクトリに quotas ファイルが含まれています。
fs /files blocks (soft = 0, hard = 0) inodes (soft = 0, hard = 0)
次の例は、割り当て設定後の一時ファイルの上と同じ行を示しています。
fs /files blocks (soft = 50, hard = 60) inodes (soft = 90, hard = 100)
次のように割り当てエディタを使用して、すでにプロトタイプユーザー用に設定した割り当てを指定するその他のユーザーに適用します。
# edquota -p prototype-user username ...
prototype-user |
すでに割り当てを設定してあるアカウントのユーザー名 |
username .. |
1 人以上の追加アカウントのユーザー名を指定する |
次の例は、ユーザー bob に対して設定されている割り当てをユーザー mary と john に適用します。
# edquota -p bob mary john
ディスクのデータの正確さを保つには、quotacheck コマンドを実行するとき、チェックするファイルシステムが他のユーザーによって使用できないようにしてください。システムをリブートするとき、quotacheck コマンドが自動的に実行されます。
次のように UFS ファイルシステム上の整合性チェックを実行し、ファイルシステムに正しい初期値を割り当てます。
# quotacheck [ -v ] -a | filesystem
-v |
(省略可能) 特定のファイルシステム上の各ユーザーのディスク割り当てを示す。 |
-a |
/etc/vfstab ファイルに rq エントリがある全ファイルシステムをチェックする。 |
filesystem |
チェックするファイルシステムを指定する。 |
次の例は、スライス /dev/rdsk/c0t0d0s7 上の /export/home ファイルシステムのディスク割り当てをチェックしています。/export/home ファイルシステムは、/etc/vfstab ファイルに rq エントリを持つ、唯一のファイルシステムです。
# quotacheck -va *** Checking quotas for /dev/rdsk/c0t0d0s7 (/export/home)
次のように quotaon コマンドを使用して、ファイルシステムの割り当てを有効にします。
# quotaon [-v] -a | ffilesystem ...]
-v |
(省略可能) 詳細形式オプション。 |
-a |
/etc/vfstab ファイル内に rq エントリがある全ファイルシステムの割り当てを有効にする。 |
filesystem ... |
指定する 1 つ以上のファイルシステムの割り当てを有効にする。 |
次の例は、スライス /dev/dsk/c0t4d0s2 と /dev/dsk/c0t3d0s2 上のファイルシステムのディスク割り当てを有効にしています。
# quotaon -v /dev/dsk/c0t4d0s2 /dev/dsk/c0t3d0s2/dev/dsk/c0t4d0s2: quotas turned on /dev/dsk/c0t3d0s2: quotas turned on
ディスクとハードの割り当てを設定して有効にしたら、それらの割り当てを超過して使用しているユーザーをチェックできます。また、ファイルシステム全体の割り当て情報をチェックすることもできます。
表 58-3 でディスク割り当てをチェックするのに使用するコマンドを説明します。
表 58-3 割り当てチェック用コマンド
コマンド |
作業 |
---|---|
quota(1M) |
ユーザー割り当てと現在のディスク使用量を表示する。ユーザーの割り当て超過使用量も表示可能。 |
repquota(1M) |
指定されたファイルシステムの割り当て、ファイル、所有しているディスク容量を表示する。 |
quota コマンドを使用して、割り当てが適用されているファイルシステム上の個々のユーザーの割り当てとディスク使用量を表示できます。
スーパーユーザーになります。
次のように入力して、割り当てが有効にされているマウント済みファイルシステムのユーザー割り当てを表示します。
# quota [-v] username
-v |
(省略可能) 割り当てが設定されているすべてのマウント済みファイルシステムに対するユーザー割り当てを表示する。 |
username |
ユーザーアカウントのユーザー名またはユーザー識別番号 (UID)。 |
次の例は、UID 301 によって識別されるユーザーアカウントに 1K バイトの割り当てが設定されているが、ディスク容量をまったく使用していないことを示しています。
# quota -v 301 Disk quotas for bob (uid 301): Filesystem usage quota limit timeleft files quota limit timeleft /export/home 0 1 2 0 2 3
Filesystem |
ファイルシステムのマウントポイント。 |
usage |
現在のブロック使用数。 |
quota |
弱いブロック制限値。 |
limit |
強いブロック制限値。 |
timeleft |
ディスク割り当てタイマーの残り時間 (日単位)。 |
files |
現在の i ノード使用数。 |
quota |
弱い i ノード制限値。 |
limit |
強い i ノード制限値。 |
timeleft |
ディスク割り当てタイマーの残り時間 (日単位)。 |
repquota コマンドを使用して 1 つ以上のファイルシステム上のすべてのユーザーの割り当てとディスク使用量を表示します。
スーパーユーザーになります。
ディスクがまったく使用されていなくても、1 つまたはすべてのファイルシステムのすべての割り当てを表示します。
# repquota [-v] -a | filesystem
-v |
(省略可能) 資源を消費していないユーザーも含めて、すべてのユーザーのディスク割り当てを報告する (冗長モード)。 |
-a |
すべてのファイルシステムについて報告する。 |
filesystem |
指定したファイルシステムについて報告する。 |
次の例は、割り当てが 1 つのファイルシステム (/export/home) だけに対して有効なシステムでの repquota コマンドからの出力を示しています。
# repquota -va /dev/dsk/c0t3d0s7 (/export/home): Block limits File limits User used soft hard timeleft used soft hard timeleft #301 -- 0 1 2.0 days 0 2 3 #341 -- 57 50 60 7.0 days 2 90 100
Block Limits |
|
used |
現在のブロック使用数。 |
soft |
弱いブロック制限値。 |
hard |
強いブロック制限値。 |
timeleft |
ディスク割り当てタイマーの残り時間 (日単位)。 |
File Limits |
|
used |
現在の i ノード使用数。 |
soft |
弱い i ノード制限値。 |
hard |
強い i ノード制限値。 |
timeleft |
ディスク割り当てタイマーの残り時間 (日単位)。 |
割り当てを変更して、ユーザーが使用するディスク容量と i ノード数を調整できます。または、必要に応じて各ユーザーから、あるいはファイルシステム全体から割り当てを削除できます。
表 58-4 で、割り当てを変更または削除するのに使用するコマンドを示します。
表 58-4 割り当てを変更または削除するコマンド
コマンド |
機能 |
---|---|
edquota(1M) |
各ユーザーについて i ノード数またはディスク容量の強い制限値と弱い制限値を変更する。また、任意のユーザーが弱い制限値を超えることが許される期間の長さを変更する。 |
quotaoff(1M) |
指定したファイルシステムの割り当てを無効にする。詳細は、quotaoff(1M) のマニュアルページを参照。 |
デフォルトでは、ユーザーは 1 週間、割り当ての期間の弱い制限値を超えることができます。1 週間以上期間の弱い制限値を超えると、システムはそのユーザーに対し、i ノードとディスクブロックの使用を禁止します。
edquota コマンドを使用すると、この割り当ての期間制限を変更できます。
次のように割り当てエディタを使用して、期間の弱い制限値を含む一時ファイルを作成します。
# edquota -t
期間制限を、0 (デフォルト) から数値とキーワード month、week、day、hour、min、または sec を使用して指定する値に変更します。
一時ファイルをクローズして、変更結果を保存します。
この手順は、現在のディスク割り当て違反者には影響しません。
次の例は、/export/home がただ 1 つのマウント済みファイルシステムであるシステムで edquota によってオープンされた一時ファイルの内容を示しています。値 0 (デフォルト) は、デフォルトで、1 週間の期間制限値が使用されることを意味します。
fs /export/home blocks time limit = 0 (default), files time limit = 0 (default)
次の例は、ブロック割り当ての超過に対する期間制限値が 1 週間に変更され、ファイル数の超過に対する期間制限値が 10 日に変更された後の、上の例と同じ一時ファイルの内容を示しています。
fs /export/home blocks time limit = 2 weeks, files time limit = 16 days
次のように割り当てエディタを使用して、quotas ファイルがそれぞれの最上位ディレクトリにある各マウント済みファイルシステムに対して 1 行ずつエントリが入っている一時ファイルをオープンします。
# edquota username
username |
割り当てが変更されるユーザー名 |
edquota コマンドの引数として複数のユーザーを指定できますが、表示される情報にはどのユーザーのものなのか示されないので、混乱を招く恐れがあります。
1K バイトディスクブロック数の弱い制限値と強い制限値、および i ノード数の弱い制限値と強い制限値を入力します。
ユーザーの割り当てが正しく変更できたかどうかを確認するには、次のように quota コマンドを使用します。
# quota -v username
-v |
ディスク割り当てが有効にされている、すべてのマウント済みのファイルシステムについて、ユーザーのディスク割り当て情報を表示します。 |
username |
割り当てを確認したいユーザー名 |
次の例は、/files だけがマウント済みファイルシステムで、edquota によってオープンされた一時ファイルの内容を示しています。このファイルシステムの最上位ディレクトリに quotas ファイルが含まれています。
fs /files blocks (soft = 0, hard = 0) inodes (soft = 0, hard = 0)
次の例は、上と同じ一時ファイルの割り当て変更後の内容を示しています。
fs /files blocks (soft = 0, hard = 500) inodes (soft = 0, hard = 100)
次の例は、ユーザー smith の強い制限値の変更結果を確認する方法と、1K バイトブロック数と i ノード数の強い制限値がそれぞれ 500 と 100 に変更されていることを示しています。
# quota -v smith Disk quotas for smith (uid 12): Filesystem usage quota limit timeleft files quota limit timeleft /files 1 0 500 1 0 100
次のように割り当てエディタを使用して、quotas ファイルがその最上位ディレクトリにある各マウント済みファイルシステムに対して 1 行の割り当て情報を含む一時ファイルを作成します。
# edquota username
username |
割り当てを無効にしようとするユーザー名 |
edquota コマンドの引数として複数のユーザーを指定できますが、表示される情報にはどのユーザーのものなのか示されないので、混乱を招く恐れがあります。
1K バイトディスクブロック数の弱い制限値と強い制限値、および i ノード数の弱い制限値と強い制限値を 0 (ゼロ) に変更します。
必ずこれらの値を 0 (ゼロ) に変更してください。テキストファイルから行を削除してはいけません。
割り当てエディタを終了して、変更結果を保存します。
ユーザーの割り当てを無効にできたかどうかを確認するには、次のように quota コマンドを使用します。
# quota -v username
-v |
ディスク割り当てが有効にされている、すべてのマウント済みのファイルシステムについて、ユーザーのディスク割り当て情報を表示します。 |
username |
割り当てを確認しようとするユーザー名またはユーザー識別番号 (UID) |
次の例は、/files だけがマウント済みファイルシステムで、edquota によってオープンされた一時ファイルの内容を示しています。このファイルシステムの最上位ディレクトリに quotas ファイルが含まれています。
fs /files blocks (soft = 50, hard = 60) inodes (soft = 90, hard = 100)
次の例は、割り当てを無効にした後の上と同じ一時ファイルの内容を示しています。
fs /files blocks (soft = 0, hard = 0) inodes (soft = 0, hard = 10)
次のように入力して、割り当てを無効にします。
# quotaoff [ -v ] -a | filesystem ...
-v |
(省略可能) 詳細形式オプション |
-a |
全ファイルシステムの割り当てを無効にする。 |
filesystem1, 2, 3 ... |
指定する 1 つ以上のファイルシステムの割り当てを無効にする。 |
次の例は、/export/home ファイルシステムの割り当てを無効にします。
# quotaoff -v /export/home /export/home: quotas turned off
この章では、crontab および at コマンドを使用して、ルーチンまたは 1 度限りのシステムイベントをスケジュールする方法を示します。さらに、cron.deny、cron.allow、at.deny の各ファイルを使用して、これらのコマンドへのアクセスを制御する方法も説明します。
この章で説明する手順は次のとおりです。
システムイベントは、crontab コマンドを使用して定期的に繰り返し実行するようにスケジュールできます。また、at コマンドを使用して、特定のシステムイベントを指定の時刻に実行するようにスケジュールすることもできます。表 59-1 に crontab、at の他に、これらのコマンドへのアクセスを制御できるファイルを示します。
表 59-1 システムイベントのスケジューリング用コマンド
コマンド |
スケジューリングの対象 |
ファイルの格納場所 |
アクセス制御用ファイル |
---|---|---|---|
crontab |
一定間隔で実行する複数のシステムイベント |
/usr/spool/cron/crontabs または /var/spool/cron/crontabs |
/etc/cron.d/cron.allow と /etc/cron.d/cron.deny |
at |
1 つのシステムイベント |
/usr/spool/cron/atjobs または /var/spool/cron/atjobs |
/etc/cron.d/at.deny |
以降の各項で、crontab ファイルをどのように作成、編集、表示、削除するか、さらに、それらのファイルへのアクセスをどのように制御するかを説明します。
cron デーモンは、各 crontab ファイル内にあるコマンドに従ってシステムイベントをスケジュールします。crontab ファイルには、それぞれ一定間隔で実行されるコマンドが 1 行に 1 つずつ入っています。各行の先頭は cron デーモンが各コマンドを実行する日時情報です。
たとえば、SunOS ソフトウェアのインストール時に root という名前の crontab ファイルが提供されますが、このファイルの内容は次のとおりです。
0 20 * * 0,4 /etc/cron.d/logchecker 5 4 * * 0 /usr/lib/newsyslog 15 3 * * * /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
最初のコマンド行は、日曜日と木曜日の午後 10 時に logchecker を実行するようシステムに指示します。2 番目のコマンド行は、毎日曜日の午前 4 時 5 分に newsyslog を実行するようにシステムをスケジュールします。3 番目のコマンド行は毎日午前 3 時 15 分に nfsfind を実行するようにシステムに指示します。4 番目のコマンド行は、夏時間をチェックして、必要であれば修正するようにシステムに指示します。RTC タイムゾーンも /etc/rtc_config ファイルもない場合、このエントリは何もしません。
crontab ファイル内のコマンド行の構文の詳細については、「crontab ファイルエントリの構文」を参照してください。
crontab ファイルは /usr/spool/cron/crontabs (または、/var/spool/cron/crontabs) に格納されます。SunOS ソフトウェアのインストール時には、root 以外にもいくつかの crontab ファイルが提供されます (表 59-2 を参照してください)。
表 59-2 デフォルトの crontab ファイル
crontab ファイル |
機能 |
---|---|
adm |
アカウンティング |
lp |
印刷 |
root |
一般的システム機能と ファイルシステムの整理 |
sys |
性能情報の収集 |
その他の crontab ファイルは、それらの中に作成されるユーザーのアカウントに基づいて、bob、mary、smith、jones などのように命名されます。
デフォルトの crontab ファイルの他に、ユーザーは crontab ファイルを作成してそれぞれユーザー自身のシステムイベントをスケジュールできます。root または他のユーザーが所有する crontab ファイルにアクセスするには、スーパーユーザーの特権が必要です。
crontab ファイルを作成、編集、表示、削除する手順については、「システムイベントのスケジューリング用コマンド」で説明します。
cron デーモンは crontab コマンドの自動スケジューリングを行います。このデーモンの機能は、通常 15 分おきに、/usr/spool/cron/crontabs ディレクトリ (または、システム構成によっては /var/spool/cron/crontabs ディレクトリ) を調べて crontab ファイルがないか確認します。新しい crontab ファイルがないか、既存の crontab が変更されていないかを確認し、いずれかがあった場合は、ファイル内のリストから実行時刻を読み取り、コマンドが正しい時刻に実行されるよう指示します。
ほとんど同様に、cron デーモンは /usr/spool/cron/atjobs ディレクトリ内の at ファイルのスケジューリングを制御します。
crontab ファイルは、1 行に 1 つのコマンドが入った構成になっています。これらのコマンド行の最初の 5 つのフィールドには、コマンドが実行される時刻を指定し、それぞれスペースで区切ります。表 59-3 にこれら 5 つのフィールドを示します。
表 59-3 crontab 時刻フィールドの値
時刻フィールド |
値 |
---|---|
分 |
0-59 |
時 |
0-23 |
日 |
1-31 |
月 |
1-12 |
曜日 |
0 - 6 (0 は日曜日) |
次に、crontab 時刻フィールドで特殊文字を使用する際のガイドラインを示します。
各フィールドはスペースで区切る。
複数の値の間はカンマで区切る。
値の範囲はハイフンを使用して指定する。
たとえば、次の crontab コマンドエントリの例は、毎月 1 日と 15 日の午後 4 時に、ユーザーのコンソールウィンドウに注意を促すメッセージを表示します。
0 16 1,15 * * echo Timesheets Due > /dev/console
crontab ファイル内の各コマンドは、長くても 1 行内に入れなければなりません。それは、crontab が 2 番目以降のキャリッジリターンを認識しないからです。(つまり、複数行とした場合は、同じコマンドとはみなされないということです。) crontab のエントリとコマンドオプションの詳細については、crontab(1) のマニュアルページを参照してください。
crontab ファイルの最も単純な作成方法は、crontab -e コマンドを使用して、EDITOR 環境変数によって定義されているテキストエディタを呼び出すものです。この変数を設定していない場合は、crontab はデフォルトのエディタ ed を使用します。EDITOR 環境変数に使い慣れたエディタを定義します。次の例は、エディタが定義されているかどうかを確認する方法と、vi をデフォルトとして設定する方法を示しています。
$ which $EDITOR $ $ EDITOR=vi $ export EDITOR
crontab ファイルを作成すると、自動的に /usr/spool/cron/crontabs ディレクトリ内に格納され、作成者のユーザー名が命名されます。スーパーユーザー特権があれば、他のユーザーや root の crontab ファイルを作成したり編集できます。
crontab コマンドエントリは、「crontab ファイルエントリの構文」の説明に従って入力してください。
エディタを使用できることを確認します。
(省略可能) root または他のユーザーが所有する crontab ファイルを作成または編集する場合は、スーパーユーザーになります。
次のように入力して、新しい crontab ファイルを作成するか、既存の crontab ファイルを編集します。
$ crontab -e [username]
username |
他のユーザーのアカウント名。作成したり編集するにはスーパーユーザー特権が必要。 |
誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの割り込み文字キーを押してください。これで、変更結果を保存しないでエディタを終了できます。この時点でファイルをクローズして変更結果を保存すると、既存の crontab ファイルを空のファイルで上書きしてしまいます。
「crontab ファイルエントリの構文」で説明している構文に従って、コマンド行を crontab ファイルに追加します。
crontab ファイルをクローズして、変更結果を保存します。
crontab ファイルは /usr/spool/cron/crontabs に格納されます。
crontab -l コマンドを使用して、crontab ファイルを確認します。
# crontab -l [username]
次の例は、他のユーザーのための crontab ファイルをどのように作成するかを示します。
# crontab -e jones
新しい crontab ファイルに次のコマンドエントリを追加すると、毎日曜日の午前 1 時に、ユーザー jones のホームディレクトリから、すべてのログファイルが自動的に削除されます。このコマンドエントリは出力先を変更しないので、出力先変更文字がコマンド行の *.log の後に追加されて、そのコマンドが正しく実行されるようにしています。
# This command helps clean up user accounts. 1 0 * * 0 rm /home/jones/*.log > /dev/null 2>&1
特定のユーザーの crontab ファイルがあるかどうかを確認するには、/usr/spool/cron/crontabs ディレクトリで ls -l コマンドを使用します。たとえば、次の表示は、ユーザー smith と jones の crontab ファイルがあることを示しています。
$ ls -l /usr/spool/cron/crontabs -rw-r--r-- 1 root sys 190 Feb 26 16:23 adm -rw------- 1 root staff 225 Mar 1 9:19 jones -rw-r--r-- 1 root root 1063 Feb 26 16:23 lp -rw-r--r-- 1 root sys 441 Feb 26 16:25 root -rw------- 1 root staff 60 Mar 1 9:15 smith -rw-r--r-- 1 root sys 308 Feb 26 16:23 sys
ユーザーの crontab ファイルの内容を確認するには、crontab -l を使用します。「crontab ファイルを表示する方法」を参照してください。
crontab -l コマンドは、cat コマンドが他のファイルタイプの内容を表示するのとまったく同様に、使用しているユーザーの crontab ファイルの内容を表示します。このコマンドを使用するために、ディレクトリを (crontab ファイルが入っている) /usr/spool/cron/crontabs に変更する必要はありません。
デフォルトでは、crontab -l コマンドは自分自身の crontab ファイルを表示します。他のユーザーの crontab ファイルは、スーパーユーザーでなければ表示できません。
(省略可能) root または他のユーザーの crontab ファイルを表示する場合は、スーパーユーザーになります。
次のように入力して、crontab ファイルを表示します。
$ crontab -l [username]
username |
他のユーザーのアカウント名。作成したり編集するにはスーパーユーザー特権が必要。 |
誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの割り込み文字キーを押してください。これで、変更結果を保存せずに crontab コマンドを終了できます。この時点でファイルを終了して変更結果を保存すると、既存の crontab ファイルが空のファイルで上書きされてしまいます。
次の例で、どのように crontab -l を使用してデフォルトユーザー、デフォルト root、他のユーザーの crontab ファイルを表示するかを示します。
$ crontab -l 13 13 * * * chmod g+w /usr/documents/*.book > /dev/null 2>&1 $ su Password: # crontab -l #ident "@(#)root 1.12 94/03/24 SMI" /* SVr4.0 1.1.3.1 */ # # The root crontab should be used to perform accounting data # collection. # # The rtc command is run to adjust the real time clock if and when # daylight savings time changes. # 0 2 * * 0,4 /etc/cron.d/logchecker 5 4 * * 6 /usr/lib/newsyslog 15 3 * * * /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 20 * * * * [ -x /usr/lib/inet/ntpdate ] && /usr/lib/inet/ntpdate -m 224.0.1.1 >/dev/null 2>&1 # crontab -l jones 13 13 * * * cp /home/jones/work_files /usr/backup/. > /dev/null 2>&1
デフォルトでは、誤って rm コマンドを使用して crontab ファイルを削除してしまうことがないように、crontab ファイルは保護されています。crontab ファイルを削除する場合は、crontab -r コマンドを使用してください。
デフォルトでは、crontab -r は自分自身の crontab を削除します。root またはその他のユーザーの crontab を削除するにはスーパーユーザーにならなければなりません。
このコマンドを使用するには、ディレクトリを (crontab ファイルが入っている) /usr/spool/cron/crontabs に変更する必要はありません。
(省略可能) root または他のユーザーの crontab ファイルを削除する場合は、スーパーユーザーになります。
次のように入力して、crontab ファイルを削除します。
$ crontab -r [username]
username |
他のユーザーのアカウント名。作成したり編集するにはスーパーユーザー特権が必要。 |
誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの割り込み文字キーを押してください。それによって、変更結果を保存せずに crontab コマンドを終了できます。この時点でファイルを終了して変更結果を保存すると、既存の crontab ファイルが空のファイルで上書きされてしまいます。
crontab ファイルが削除されていることを確認します。
# ls /usr/spool/cron/crontabs
次の例で、crontab -r を使用してデフォルトユーザーの crontab ファイル、root、他のユーザーの各 crontab ファイルを削除する方法を示します。ls は正しい crontab ファイルが削除できたかどうかを確認します。
$ ls /usr/spool/cron/crontabs adm jones lp root smith sys $ crontab -r $ ls /usr/spool/cron/crontabs adm jones lp root sys $ su Password: # crontab -r # ls /usr/spool/cron/crontabs adm jones lp sys # crontab -r jones # ls /usr/spool/cron/crontabs adm lp sys
cron.deny と cron.allow という /etc/cron.d ディレクトリ内の 2 つのファイルを使用して、crontab へのアクセスを制御できます。これらのファイルによって、指定したユーザーだけが、それぞれ自分の crontab ファイルの作成、編集、表示、または削除などの crontab 関連操作を行うことができるようにします。
cron.deny および cron.allow ファイルは、それぞれ 1 行 に 1 ユーザー名が入ったリストからなります。これらのアクセス制御用ファイルは、次のように連携して機能を果たします。
cron.allow が存在しない場合は、cron.deny にリストされているユーザーを除くすべてのユーザーが crontab ファイルの実行を依頼できます。
cron.allow も cron.deny も存在しない場合は、root 以外は crontab を実行できません。
cron.deny と cron.allow を編集または作成するには、スーパーユーザーの特権が必要です。
Solaris ソフトウェアのインストール時に、デフォルトで次の cron.deny ファイルが提供されます。
$ cat /etc/cron.d/cron.deny daemon bin smtp nuucp listen nobody noaccess
上記のすべてのユーザーが、crontab コマンドにアクセスできません。このファイルを編集すれば、crontab コマンドへのアクセスを拒否したいユーザーの名前を追加できます。
デフォルトでは、cron.allow ファイルは提供されません。つまり、Solaris ソフトウェアのインストール後には、デフォルトの cron.deny ファイルにリストされているユーザー以外のユーザーすべてが crontab にアクセスできます。cron.allow ファイルを作成した場合、そのユーザーだけが crontab コマンドにアクセスできます。
スーパーユーザーになります。
エディタを使用して /etc/cron.d/cron.deny ファイルを編集し、crontab コマンドを使用させないユーザー名を次のように 1 行に 1 つずつ追加します。
daemon bin smtp nuucp listen nobody noaccess username1 username2 username3 . . .
/etc/cron.d/cron.deny ファイルを確認します。
# cat /etc/cron.d/cron.deny
エディタを使用して /etc/cron.d/cron.allow ファイルを作成します。
次のように、crontab コマンドの使用を許可するユーザー名を 1 行に 1 つずつ入力します。
root username1 username2 username3 . . .
このリストには必ず root を追加してください。追加しなければ、スーパーユーザーからの crontab コマンドへのアクセスが拒否されてしまいます。
/etc/cron.d/cron.allow ファイルをクローズして、変更結果を保存します。
次は、ユーザー visitor、jones、temp に crontab をアクセスさせない cron.deny ファイルの例です。
$ cat /etc/cron.d/cron.deny daemon bin smtp nuucp listen nobody noaccess jones temp visitor
次は cron.allow ファイルの例です。ユーザー smith、jones、lp、root だけが crontab にアクセスできます。
$ cat /etc/cron.d/cron.allow root jones lp smith
特定のユーザーが crontab にアクセスできるかどうかを確認するには、そのユーザーのアカウントにログインして、crontab -l コマンドを実行します。
$ crontab -l
そのユーザーが crontab にアクセスできて、すでに crontab ファイルを作成している場合は、その crontab ファイルが表示されます。そのユーザーが crontab にアクセスできるが、crontab ファイルがない場合は、次のようなメッセージが表示されます。
(crontab: crontab ファイルをオープンできません)
このユーザーは、cron.allow (が存在する場合) に含まれているか、または cron.deny に含まれていません。
ユーザーが crontab にアクセスできない場合は、上記の crontab ファイルがあってもなくても、次のメッセージが表示されます。
(crontab: cron を使用許可されていません)
これは、ユーザーが cron.allow (が存在する場合) に含まれていないか、または cron.deny ファイルに含まれていることを意味します。
以降で、at を使用してコマンドやスクリプトなどのジョブを後で特定の時刻に実行するようにスケジュールする方法と、それらのジョブを削除する方法、at へのアクセスを制御する方法を示します。
デフォルトでは、ユーザーはそれぞれ自分の at ジョブファイルを作成、表示、削除できます。root または他のユーザーの at ファイルにアクセスするには、スーパーユーザー特権が必要です。
at ジョブの実行を依頼すると、at ジョブにジョブ識別番号と .a 拡張子が与えられ、そのファイル名になります。
コマンド実行時刻を指定して at ユーティリティを起動します。
後で実行させるコマンドまたはスクリプトを入力します。
このコマンドまたはスクリプトからの出力が重要な場合は、後で調べられるように必ずファイルに書き込むようにしてください。
たとえば、次の at ジョブは、3 月 31 日の真夜中に Smith のユーザーアカウントから core ファイルを削除します。
$ at 11:45pm January 31 at> rm /home/smith/*core* at> Press Control-d job 852755100.a at Wed Jan 8 13:25:00 1997
特定のユーザーだけがそれぞれの at ジョブに関する待ち行列情報を作成、削除、または表示できるように、at コマンドへのアクセスを制御するファイルを設定できます。at へのアクセスを制御するファイルは /etc/cron.d/at.deny です。ここにはユーザー名が列挙 (1 行に 1 人) されています。このファイルに列挙されているユーザーは、at コマンドにアクセスできません。
Solaris ソフトウェアのインストール時に作成される at.deny ファイルには、次のユーザー名が含まれます。
daemon bin smtp nuucp listen nobody noaccess
スーパーユーザーの特権があれば、このファイルを編集して、at へのアクセスを制限したい他のユーザー名を追加できます。
次のように、自分のジョブを実行したい時刻を指定して at コマンドを入力し、Return キーを押します。
$ at [-m] time [date]
-m |
ジョブ終了後にメールを送る。 |
time |
ジョブをスケジュールしたい時刻の時単位の値。24 時間制を使用しない場合は、am または pm を追加する。midnight、noon、now はキーワードとして使用可能。分単位の値の指定は省略可能。 |
date |
月または曜日の名前の最初の 3 英字以上、またはキーワード today または tomorrow。 |
at プロンプトに、実行したいコマンドまたはスクリプトを 1 行に 1 つずつ入力します。各行の終わりで Return キーを押すことにより、複数のコマンドを入力できます。
at ユーティリティを終了し、Control-d を押して at ジョブを保存します。
作成できた at ジョブは待ち行列番号を割り当てられ、それがそのファイル名にもなります。この番号は at ユーティリティの終了時に表示されます。
次の例は、ユーザー jones が彼女のバックアップファイルを 7:30 pm に削除するように作成した at ジョブを示しています。彼女は、ジョブが終了した後にメールメッセージを受け取れるように、-m オプションを使用しています。
$ at -m 1930 at> rm /home/jones/*.backup at> Press Control-d job 852777000.a at Wed Jan 8 19:30:00 1997
jones は次のメールメッセージを受け取りました。このメッセージは at ジョブが終了したことを確認しています。
Your "at" job "rm /home/jones/*.backup" completed.
次の例は、jones が大きな at ジョブをどのように土曜日の朝 4:00 にスケジュールしているかを示します。その出力は、big.file に送られます。
$ at 4 am Saturday at> sort -r /usr/dict/words > /export/home/jones/big.file
at 待ち行列で実行を待っているジョブを確認するには、次に示すように atq コマンドを使用します。このコマンドは、その使用者が作成した at ジョブに関する状態情報を表示します。
$ atq
at ジョブが作成できたかどうかを確認するには、atq コマンドを使用します。次の atq コマンドは、jones に属する at ジョブが待ち行列に入っていることを確認しています。
$ atq Rank Execution Date Owner Job Queue Job Name 1st Jan 8, 1997 13:25 jones 852755100.a a stdin 2nd Jan 8, 1997 19:30 jones 852777000.a a stdin 3rd Jan 11, 1997 04:00 jones 858142000.a a stdin
自分の at ジョブの実行時刻に関する情報を表示するには、次のように at -l コマンドを使用します。
$ at -l [job-id]
-l job-id |
状態を確認したいジョブの識別番号 |
次の例は、at -l コマンドからの出力を示しています。このコマンドは、特定のユーザーが依頼したすべてのジョブに関する状態情報を得ることを目的としています。
$ at -l 852755100.a Wed Jan 8 13:25:00 1997 852777000.a Wed Jan 8 19:30:00 1997 858142000.a Sat Jan 11 04:00:00 1997
次の例は、at -l コマンドに 1 つのジョブを指定して表示された出力を示しています。
$ at -l 858142000.a 858142000.a Sat Jan 11 04:00:00 1996
次のように入力して、at ジョブを実行される前に待ち行列から削除します。
$ at -r [job-id]
-r job-id |
削除したいジョブの識別番号 |
at ジョブを削除できたかどうかを確認するには、at -l (または atq) コマンドを使用して at 待ち行列に残っているジョブを表示します。識別番号を指定したジョブは、このリストに現れてはなりません。
$ at -l [job-id]
次の例では、ユーザーが 3 月 1 日の正午に実行されるようにスケジュールした at ジョブを削除しようとしています。まず、このユーザーは at 待ち行列を表示してそのジョブの識別番号を探します。次に、そのジョブを at 待ち行列から削除します。最後に、at 待ち行列をもう一度表示して上記のジョブが削除されていることを確認します。
$ at -l 852755100.a Wed Jan 8 13:25:00 1997 852777000.a Wed Jan 8 19:30:00 1997 858142000.a Sat Jan 11 04:00:00 1997 $ at -r 858142000.a $ at -l 858142000.a at: 858142000.a does not exist
at.deny ファイルに含まれているユーザーは、at を使用してジョブをスケジュールすることも、at 待ち行列の状態を調べることもできません。
at.deny ファイルは、Solaris ソフトウェアのインストール時にディレクトリ /etc/cron.d に格納されます。そのときに、同じユーザーがこのファイルとデフォルトの cron.deny ファイルの両方に含まれます。
daemon bin smtp nuucp listen nobody noaccess
このファイルを編集するにはスーパーユーザー特権が必要です。
スーパーユーザーになります。
エディタを使用して、/etc/cron.d/at.deny ファイルをオープンします。
たとえば次のように、at コマンドを使用させないようにするユーザー名を 1 行に 1 つずつ追加または削除します。
daemon bin smtp nuucp listen nobody noaccess username1 username2 username3 . . .
/etc/cron.d/at.deny ファイルをクローズして、変更結果を保存します。
次は、ユーザー smith と jones が at にアクセスできないように編集された at.deny ファイルの例です。
$ cat at.deny daemon bin smtp nuucp listen nobody noaccess jones smith
特定のユーザー名が正しく /etc/cron.d/at.deny に追加されているかどうかを確認するには、そのユーザー名でログインして、at -l コマンドを使用します。そのユーザーが at コマンドにアクセスできない場合は、次のメッセージが表示されます。
# su smith Password: $ at -l at: 使用許可されていません
同様に、そのユーザーが at ジョブの実行を依頼しようとした場合は、次のメッセージが表示されます。
$ at 2:30pm at: 使用許可されていません
これで、そのユーザーが at.deny ファイルに含まれていることが確認されます。
この章ではアカウンティングを設定し、管理する手順について説明します。
この章で説明する手順は次のとおりです。
システムアカウンティングは、システムがマルチユーザーモード (システム状態 2) のときに実行されるように設定できます。それには、次のことが含まれます。
/etc/rc0.d/K22acct および /etc/rc2.d/S22acct ファイルの作成
/var/spool/cron/crontabs/adm および /var/spool/cron/crontabs/root ファイルの変更。
アカウント用スクリプトのほとんどは、/var/spool/cron/crontabs/adm データベースファイルに追加されます。表 60-1 に、デフォルトのアカウンティング管理スクリプトを説明します。
表 60-1 デフォルトのアカウンティング管理スクリプト
アカウンティングスクリプト |
目的 |
実行方法 |
---|---|---|
ckpacct |
/usr/adm/pacct ログファイルのサイズをチェックする。 |
定期的 |
runacct |
接続、プロセス、ディスク、および料金のアカウンティング情報を処理する。 |
日次 |
monacct |
会計レポートを生成する。定期的に実行される。 |
会計期間に基づく。 |
これらのデフォルトは変更できます。上記エントリをデータベースに追加して、アカウンティングプログラムをインストールした後、アカウンティングは自動的に実行されるようになります。
スーパーユーザーになります。
必要な場合は、pkgadd または admintool コマンドを使用して、システムに SUNWaccr、SUNWaccu パッケージをインストールします。
次のように入力して、/etc/init.d/acct を実行レベル 2 の起動スクリプトとしてインストールします。
# ln /etc/init.d/acct /etc/rc2.d/S22acct
/etc/init.d/acct を実行レベル 0 の停止スクリプトとしてインストールします。
# ln /etc/init.d/acct /etc/rc0.d/K22acct
プログラム ckpacct、runacct、および monacct が自動的に起動するように、ユーザー adm の crontab ファイルを変更します。
# EDITOR=vi; export EDITOR # crontab -e adm 0 * * * * /usr/lib/acct/ckpacct 30 2 * * * /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log 30 7 1 * * /usr/lib/acct/monacct
プログラム dodisk が自動的に起動するように、root crontab ファイルを変更します。
# crontab -e 30 22 * * 4 /usr/lib/acct/dodisk
システムをリブートするか、または、次のように入力します。
# /etc/init.d/acct start
次の例は、/usr/lib/acct/ckpacct、/usr/lib/acct/runacct、 /usr/lib/acct/monacct を実行する crontab エントリを /var/spool/cron/crontabs/adm に追加する方法を示します。
#ident "@(#)adm 1.5 92/07/14 SMI" /* SVr4.0 1.2 */ # # The adm crontab file should contain startup of performance collection if # the profiling and performance feature has been installed. # 0 * * * * /usr/lib/acct/ckpacct 30 2 * * * /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log 30 7 1 * * /usr/lib/acct/monacct
次の例は、/usr/lib/acct/dodisk を実行する crontab エントリを /var/spool/cron/crontabs/root に追加する方法を示します。
#ident "@(#)root 1.12 94/03/24 SMI" /* SVr4.0 1.1.3.1 */ # # The root crontab should be used to perform accounting data collection. # # The rtc command is run to adjust the real time clock if and when # daylight savings time changes. # 0 2 * * 0,4 /etc/cron.d/logchecker 5 4 * * 6 /usr/lib/newsyslog 15 3 * * * /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 20 * * * * [ -x /usr/lib/inet/ntpdate ] && /usr/lib/inet/ntpdate -m 224.0.1.1 >/dev/null 2>&1 30 22 * * 4 /usr/lib/acct/dodisk
次に /etc/acct/holidays ファイルの例を示します。
* @(#)holidays January 1, 1997 * * Prime/Nonprime Table for UNIX Accounting System * * Curr Prime Non-Prime * Year Start Start * 1997 0800 1800 * * only the first column (month/day) is significiant. * * month/day Company * Holiday * 1/1 New Years Day 1/20 Martin Luther King's Day 2/17 President's Day 5/26 Memorial Day 7/3 Day before Indep. Day 7/4 Indep. Day 9/1 Labor Day 11/27 Thanksgiving 11/28 Day after Thanksgiving 12/25 Christmas 12/26 Winter Break 12/29 Winter Break 12/30 Winter Break 12/31 Winter Break
ファイルの復元、リモート印刷などの特別なユーザーサービスを要求時に提供する場合は、chargefee という機能を使用してユーザーに対する課金処理を行うことができます。chargefee は、課金をファイル /var/adm/fee に記録します。そして、runacct ユーティリティが実行されるたびに、新しいエントリが拾い出されて、全体のアカウンティングレコードにマージされます。
ユーザーに提供されたサービスに対して課金するように設定します。
# chargefee username amount
username |
課金したいユーザーアカウント |
amount |
ユーザーに対する課金の単位数 |
次の例は、ユーザーがアカウント print_customer にログインするたびに 10 単位を課金します。
# chargefee print_customer 10
この節では、アカウンティング情報を保守する方法について説明します。
UNIX のアカウンティングシステムは堅固ではなく、ファイルが壊れたり失われることがあります。そのようなファイルにも、単に無視してよいものや、バックアップから復元できるものがあります。しかし、特定のファイルは、アカウンティングシステムの完全性を維持するために修復しなければなりません。
wtmp ファイルは、アカウンティングシステムを日常的に運用する上で発生する大部分の問題の原因になっています。日付が変更され、システムがマルチユーザーモードになると、1 組の日付変更レコードが /var/adm/wtmp に書き込まれます。wtmpfix ユーティリティは、日付変更が現れたときの wtmp レコード内のタイムスタンプの調整用として用意されています。ただし、日付変更とリブートとの組み合わせによっては、wtmpfix のチェックから漏れて、acctcon の処理を失敗させることがあります。wtmp の問題を解決する手順については、「wtmp ファイルを修復する方法」を参照してください。
スーパーユーザーになります
ディレクトリ /var/adm/acct/nite に変更します。
次のように、バイナリファイル wtmp.MMDD を ASCII ファイル xwtmp に変換します。
# fwtmp wtmp.MMDD xwtmp
MMDD |
2 桁の数値で指定される月日 |
xwtmp を編集します。壊れたファイルを削除するか、始めから日付変更までのすべてのレコードを削除します。
ASCII ファイル xwtmp をバイナリファイルに変換し、壊れたファイルを上書きします。
# fwtmp -ic xwtmp wtmp.MMDD
/var/adm/acct/sum/tacct の完全性は、システム資源に対してユーザーに課金している場合は重要です。負の番号、重複したユーザー ID、または 65535 のユーザー ID など、不可思議な tacct レコードが現れることがありますが、その場合、まず prtacct で、/var/adm/acct/sum/tacctprev を印刷して、チェックしてください。内容が大丈夫であるような場合は、最新の /var/adm/acct/sum/tacct.MMDD ファイルを使用して、/var/adm/acct/sum/tacct ファイルを作成し直してください。次の手順は、簡単な修復手順の概要を説明しています。
スーパーユーザーになります。
ディレクトリ /var/adm/acct/sum に変更します。
次のように、tacct.MMDD の内容をバイナリから ASCII 形式に変換します。
# acctmerg -v tacct.MMDD xtacct
MMDD |
2 桁の数字で指定される月日 |
xtacct ファイルを ASCII 形式からバイナリに変換します。
# acctmerg -i xtacct tacct.MMDD
MMDD |
2 桁の数字で指定される月日 |
ファイル tacct.prv と tacct.MMDD をマージしてファイル tacct を生成します。
# acctmerg tacctprv tacct.MMDD tacct
runacct プログラムはいろいろな原因で失敗することがあります。一番多い原因は、システムがクラッシュする、/var がディスク容量を使い果たす、wtmp ファイルが壊れた、などです。active.MMDD ファイルが存在する場合、まずエラーメッセージがないか調べます。active ファイルとロックファイルが存在する場合、異常なメッセージがないかどうか fd2log ファイルを調べます。
runacct は、引数を指定しないで実行すると、その日の最初の起動とみなします。runacct を起動し直し、もう一度 runacct にアカウンティングをやり直させる月日を指定する場合は、引数 MMDD が必要です。処理のエントリポイントは statefile の内容に基づきます。statefile を無効にするには、次のように、処理を開始したい状態をコマンド行に指定します。
runacct プログラムを手動で実行するときは、ユーザー adm として実行していることを確認してください。
lastdate ファイルと lock* ファイル (もしあれば) を削除します。
$ cd /var/adm/acct/nite $ rm lastdate lock*
runacct プログラムを再起動します。
$ runacct MMDD [state] 2> /var/adm/acct/nite/fd2log &
MMDD |
月日を数値で指定する。 |
state |
システムアカウンティングは、一時的に停止することも、永久に無効にすることもできます。
スーパーユーザーになります。
適切な行をコメントアウトすることによって、プログラム ckpacct、runacct、および monacct の実行が停止するように、ユーザー adm の crontab ファイルを変更します。
# EDITOR=vi; export EDITOR # crontab -e adm #0 * * * * /usr/lib/acct/ckpacct #30 2 * * * /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log #30 7 1 * * /usr/lib/acct/monacct
適切な行をコメントアウトすることによって、プログラム dodisk の実行が停止するように、ユーザー root の crontab ファイルを変更します。
# crontab -e #30 22 * * 4 /usr/lib/acct/dodisk
次のように入力して、アカウンディングを停止します。
# /etc/init.d/acct stop
システムアカウンティングを再び有効にするには、新たに追加したコメント記号を crontab ファイルから削除して、次のように入力します。
# /etc/init.d/acct start
スーパーユーザーになります。
ユーザー adm の crontab ファイルを変更して、プログラム ckpacct、runacct、および monacct 用のエントリを削除します。
# EDITOR=vi; export EDITOR # crontab -e adm
ユーザー root の crontab ファイルを変更して、プログラム dodisk 用のエントリを削除します。
# crontab -e
実行レベル 2 用の起動スクリプトを取り外します。
# unlink /etc/rc2.d/S22acct
実行レベル 0 用の停止スクリプトを取り外します。
# unlink /etc/rc0.d/K22acct
次のように入力して、アカウンティングを停止します。
# /etc/init.d/acct stop
この章のリファレンス情報の内容は、次のとおりです。
日次アカウンティングによって、「接続アカウンティング」、「プロセスアカウンティング」、「ディスクアカウンティング」、「料金計算」という 4 種類のアカウンティングを簡単に実行できます。
接続アカウンティングでは、次のデータを調べることができます。
特定のユーザーがログインしていた時間
tty 回線の利用状況
システムのリブート回数
アカウンティングソフトウェアが有効または無効に設定された頻度
これらの情報を提供するために、システムは期間調整、リブート回数、アカウンティングソフトウェアが有効または無効に設定された回数、実行レベルの変更回数、ユーザープロセス (login プロセスと init プロセス) の作成、プロセスの消滅といった情報のレコードを格納します。これらのレコード (date、init、login、ttymon、acctwtmp などのシステムプログラムの出力によって生成されます。) は /var/adm/wtmp ファイルに格納されます。wtmp ファイルのエントリには、ユーザーのログイン名、装置名、プロセス ID、エントリタイプ、エントリがいつ作られたかを示すタイムスタンプといった情報を含めることができます。
プロセスアカウンティングでは、システムで実行される各プロセスに関する次のようなデータを追跡できます。
プロセスを使用するユーザーおよびグループのそれぞれユーザー ID とグループ ID
プロセスの開始時刻と経過時間
プロセスの CPU 時間 (ユーザー時間とシステム時間)
使用されるメモリーの量
実行されるコマンド
プロセスを制御する tty
プロセスが終了するたびに、exit プログラムは上記のデータを収集し、/var/adm/pacct ファイルに書き込みます。
ディスクアカウンティングでは、各ユーザーがディスク上にもっているファイルについて次のデータを収集し、それらの書式を指定できます。
ユーザーの名前と ID
ユーザーのファイルが使用しているブロック数
これらのデータはシェルスクリプト /usr/lib/acct/dodisk によって収集されますが、収集周期は /var/spool/cron/crontabs/root ファイルに追加する cron コマンドによって決定されます。dodisk は、acctdusg および diskusg コマンドを起動して、システム内の各ファイルについての情報を収集させます。
dodisk の設定の詳細については、「システムアカウンティングを設定する方法」を参照してください。
acctdusg コマンドはすべてのディスクアカウンティング情報を収集します。起動されるたびに、このコマンドは最高 3000 ユーザー分の情報を処理できます。
dodisk を実行して収集された情報は /var/adm/acct/nite/disktacct ファイルに格納されます。これらの情報は、次に dodisk を実行したときに上書きされます。したがって、dodisk は同じ日に 2 回以上実行しないようにしてください。
ランダムなアクセスにより書き込まれ、その結果ディスク上で連続していないファイルに対して diskusg コマンドは、多く課金します。それは、diskusg がファイルのサイズを判定するときにファイルの間接ブロックを読み取らないためです。このコマンドは、i ノードの di_size の値を調べてファイルのサイズを判定します。
chargefee ユーティリティは、ユーザーに提供した特別なサービス (ファイルの復元など) に対する課金を、ファイル /var/adm/fee に格納します。このファイルの各エントリは、ユーザーのログイン名、ユーザー ID、および料金から構成されています。このファイルは、runacct プログラムによって毎日チェックされて、新しいエントリが全体のアカウンティングレコードにマージされます。chargefee を実行してユーザーに課金する命令については、「ユーザーに課金する方法」を参照してください。
次に、SunOS の日次アカウンティング機能がどのように動作するかを要約して示します。
システムをマルチユーザーモードに切り替えると、/usr/lib/acct/startup プログラムが実行されます。この startup プログラムは、それぞれアカウンティング機能を呼び出す他のプログラムを実行します。
acctwtmp プログラムは /var/adm/wtmp に「ブート」レコードを追加します。このレコードには、システム名が wtmp レコード内のログイン名として示されます。表 61-1 に、raw アカウンティングデータがどのように収集され、どこに格納されるかをまとめて示します。
表 61-1 raw アカウンティングデータ
turnacct プログラムが -on オプションで起動されて、プロセスアカウンティングを開始します。turnacct は、特に /var/adm/pacct 引数を使用して accton プログラムを実行します。
remove シェルスクリプトが、runacct によって sum ディレクトリに保存されている pacct および wtmp ファイルを「整理」します。
login および init プログラムが、/var/adm/wtmp にレコードを書き込み、接続セッションを記録します。すべての日付変更 (引数を指定して date を使用) も /var/adm/wtmp に書き込まれます。acctwtmp を使用したリブートとシャットダウンも /var/adm/wtmp に記録されます。
プロセスが終了すると、カーネルが /var/adm/pacct ファイルにプロセスごとに 1 レコードを acct.h 形式で書き込みます。
cron は、1 時間ごとに ckpacct プログラムを実行して /var/adm/pacct のサイズを調べます。このファイルが 500 ブロック (デフォルト) よりも大きくなった場合は、turnacct による切り替えが実行されます。(このプログラムは今までの pacct ファイルを他に移して新しいファイルを作成します。) pacct ファイルを小さく分けることの利点は、それらのアカウントレコードを処理するときに障害が発生し、runacct を起動し直そうとしたときに明らかになります。
runacct が毎晩 cron によって実行されます。runacct は /var/adm/pacctn、/var/adm/wtmp、/var/adm/fee、 /var/adm/acct/nite/disktacct などのアカウンティングファイルを処理して、ログイン別のコマンド要約と利用状況要約を生成します。
/usr/lib/acct/prdaily プログラムが runacct によって 1 日に 1 回実行され、runacct が収集した日次アカウンティング情報 (ASCII 形式) を /var/adm/acct/sum/rprt.MMDD に書き込みます。
monacct プログラムが月に 1 回 (または毎会計期の終わりなど、ユーザーが決めた周期で) 実行されます。monacct プログラムは、sum ディレクトリに格納されているデータに基づいてレポートを作成します。これらのデータは runacct によって毎日更新されています。このレポートを作成した後、monacct は sum ディレクトリを「整理」して、新しい runacct データを格納するためのファイルを準備します。
shutdown を使用してシステムをシャットダウンした場合は、shutacct プログラムが自動的に実行されます。shutacct プログラムは /var/adm/wtmp に理由レコードを書き、アカウンティングプロセスを無効に設定します。
この節では、アカウンティングソフトウェアによって生成されるさまざまなレポートについて説明します。
runacct シェルスクリプトは、呼び出されるたびに基本的な 4 種類のレポートを生成します。これらのレポートは、接続アカウンティング、毎日のログイン別利用状況、日次および月次合計によって報告されるコマンド利用状況の 3 種類を対象とするレポートと、ユーザーの最後のログイン時刻のレポートです。4 つの基本レポートは次のとおりです。
表 61-2 日次アカウンティングレポート
このレポートは、使用された各端末回線に関する情報を示します。次に例を示します。
Feb 27 12:25 1997 DAILY REPORT FOR mercury Page 1 from Wed Feb 26 13:21:58 1997 to Thu Feb 27 12:25:33 1997 1 system boot 1 run-level 3 1 acctg on 1 runacct 1 acctcon TOTAL DURATION IS 1384 MINUTES LINE MINUTES PERCENT # SESS # ON # OFF /dev/pts/5 0 0 0 0 0 /dev/pts/6 0 0 0 0 1 /dev/pts/7 0 0 0 0 0 console 1337 97 1 1 1 pts/3 0 0 0 0 1 pts/4 0 0 0 0 1 pts/5 3 0 2 2 3 pts/6 232 17 5 5 5 pts/7 54 4 1 1 2 pts/8 0 0 0 0 1 pts/9 0 0 0 0 1 TOTALS 1625 -- 9 9 16
from および to 行はこのレポートで反映される時間帯、つまりこの前のアカウンティングレポートが生成されてから現在のアカウンティングレポートが生成されるまでの時間を指定します。その次はシステムのリブート、シャットダウン、電源異常からの回復と、acctwtmp プログラムによって /var/adm/wtmp にダンプされたその他のすべてのレコードです。詳細については、acct(1M) のマニュアルページを参照してください。
このレポートの第 2 部は回線利用状況の内訳です。TOTAL DURATION は、システムがどれだけの時間マルチユーザーモード (端末回線を通してアクセス可能です) であったかを示します。この部分を構成しているカラムを表 61-3 で説明します。
表 61-3 日次レポート
マシンの稼動中は、/var/adm/wtmp ファイルから接続アカウンティングが準備されるので、このファイルを監視する必要があります。wtmp ファイルが急速に大きくなる場合は、acctcon -l < /var/adm/wtmp を実行してどの tty 回線の使用頻度が最も大きいかを調べてください。割り込みが頻繁に発生する場合は、全般的なシステムの性能が影響を受けることになります。さらに、wtmp が壊れることもあります。この問題を解決するには、「wtmp ファイルを修復する方法」を参照してください。
このレポートは、システム資源の利用状況のユーザー別の内訳を示します。次に例を示します。
Feb 27 12:25 1997 DAILY USAGE REPORT FOR mercury Page 1 LOGIN CPU (MINS) KCORE-MINS CONNECT (MINS) DISK # OF # OF # DISK FEE UID NAME PRIME NPRIME PRIME NPRIME PRIME NPRIME BLOCKS PROCS SESS SAMPLES 0 TOTAL 1 1 2017 717 785 840 660361 1067 9 7 20 0 root 1 1 1833 499 550 840 400443 408 2 1 0 1 daemon 0 0 0 0 0 0 400 0 0 1 0 2 bin 0 0 0 0 0 0 253942 0 0 1 0 3 sys 0 0 0 0 0 0 2 0 0 1 0 4 adm 0 0 46 83 0 0 104 280 0 1 0 5 uucp 0 0 74 133 0 0 1672 316 0 1 0 71 lp 0 0 0 2 0 0 3798 1 0 1 0 8198 ksm 0 0 8 0 0 0 0 6 1 0 0 52171 pjm 0 0 56 0 234 0 0 56 6 0 20
日次利用状況レポートで示される各データを表 61-4 で説明します。
表 61-4 日次利用状況レポート
このレポートはコマンド別のシステム資源の利用状況を示します。このレポートでは、最も使用率の高いコマンドがわかり、それらコマンドがどのようにシステム資源を利用しているかに基づいて、どのようにしたらシステムの最適チューニングが可能かを知ることができます。日次レポートも月次レポートも見た目には同じですが、日次要約レポートは当日だけについてのレポートであるのに対して、月次要約レポートは、会計期の初めから当日までについてのレポートです。つまり、月次レポートは、monacct が最後に実行されたときからの累積データを表します。
これらのレポートは TOTAL KCOREMIN によってソートされます。TOTAL KCOREMIN は任意の基準ですが、システムでのドレーンの計算にはすぐれた指標です。
次に日次コマンド要約レポートの例を示します。
Feb 27 12:25 1997 DAILY COMMAND SUMMARY Page 1 TOTAL COMMAND SUMMARY COMMAND NUMBER TOTAL TOTAL TOTAL MEAN MEAN HOG CHARS BLOCKS NAME CMDS KCOREMIN CPU-MIN REAL-MIN SIZE-K CPU-MIN FACTOR TRNSFD READ TOTALS 1067 2730.99 2.01 1649.38 1361.41 0.00 0.00 6253571 2305 sendmail 28 1085.87 0.05 0.24 23865.20 0.00 0.19 101544 39 admintoo 3 397.68 0.12 1132.96 3443.12 0.04 0.00 680220 83 sh 166 204.78 0.31 161.13 651.80 0.00 0.00 598158 20 nroff 12 167.17 0.14 0.24 1205.55 0.01 0.59 709048 22 find 10 151.27 0.27 2.72 563.40 0.03 0.10 877971 1580 acctdusg 3 87.40 0.13 2.74 698.29 0.04 0.05 883845 203 lp 10 74.29 0.05 0.22 1397.38 0.01 0.24 136460 57 expr 20 67.48 0.02 0.06 3213.24 0.00 0.34 6380 1 mail.loc 3 65.83 0.01 0.04 11285.60 0.00 0.15 24709 15 cmdtool 1 37.65 0.02 20.13 2091.56 0.02 0.00 151296 1 uudemon. 105 37.38 0.09 0.32 435.46 0.00 0.27 62130 17 csh 6 35.17 0.05 57.28 756.30 0.01 0.00 209560 13 col 12 31.12 0.06 0.26 523.00 0.00 0.23 309932 0 ntpdate 22 27.55 0.05 11.18 599.00 0.00 0.00 22419 0 uuxqt 44 18.66 0.04 0.06 417.79 0.00 0.74 32604 3 man 12 15.11 0.03 7.05 503.67 0.00 0.00 85266 47 . . .
表 61-5 で、日次コマンド要約レポートに示されるデータをカラム別に説明します。
表 61-5 日次コマンド要約レポート
この月次コマンド要約は、次のただ 1 点の相違を除いて日次コマンド要約と同じです。つまり、月次コマンド要約は monacct が最後に起動されたときからの累積合計を示します。次に例を示します。
Mar 4 02:30 1997 MONTHLY TOTAL COMMAND SUMMARY Page 1 TOTAL COMMAND SUMMARY COMMAND NUMBER TOTAL TOTAL TOTAL MEAN MEAN HOG CHARS BLOCKS NAME CMDS KCOREMIN CPU-MIN REAL-MIN SIZE-K CPU-MIN FACTOR TRNSFD READ TOTALS 771 483.70 0.94 8984.09 515.12 0.00 0.00 2248299 179 sh 105 155.41 0.23 429.58 667.94 0.00 0.00 491870 1 uudemon. 85 29.39 0.07 0.29 434.28 0.00 0.23 49630 14 acctcms 5 27.21 0.04 0.04 752.41 0.01 0.90 218880 1 ntpdate 17 21.30 0.04 14.10 605.73 0.00 0.00 18192 0 dtpad 1 19.69 0.01 10.87 2072.70 0.01 0.00 46992 8 sendmail 17 16.75 0.02 0.02 859.04 0.00 0.91 1965 0 acctprc 1 14.92 0.03 0.03 552.69 0.03 0.95 115584 0 uuxqt 34 14.78 0.03 0.04 426.29 0.00 0.92 25194 0 uusched 34 10.96 0.03 0.03 363.25 0.00 0.91 25194 0 sed 40 10.15 0.03 0.09 315.50 0.00 0.36 64162 2 man 5 10.08 0.02 57.58 555.05 0.00 0.00 25773 2 getent 1 7.68 0.01 0.02 921.60 0.01 0.40 20136 0 in.rlogi 5 7.65 0.01 4331.67 611.73 0.00 0.00 87440 0 cp 37 7.28 0.03 0.05 280.08 0.00 0.50 1739 36 date 27 7.24 0.02 0.03 329.12 0.00 0.65 23443 1 ls 15 7.05 0.01 0.02 503.33 0.00 0.79 14123 0 awk 19 6.94 0.02 0.06 372.04 0.00 0.32 666 0 rm 29 6.83 0.02 0.04 301.32 0.00 0.60 2348 17
各データ項目については、「日次コマンド要約」の説明を参照してください。
このレポートは、特定のログインが最後に使用された日付を示します。この情報を使用して、使用されていないログインやログインディレクトリを見つけることができます。それらのログイン、ログインディレクトリは保存して削除できます。次に例を示します。
Feb 27 12:25 1997 LAST LOGIN Page 1 . . . 00-00-00 rebecca 00-00-00 sjwolf 97-02-27 klw 00-00-00 reception 00-00-00 smithey 97-02-27 lou 00-00-00 release 00-00-00 smsc 97-02-27 root 00-00-00 resch 00-00-00 smtp
/var/adm/pacctn ファイル、または acct.h 形式の任意のファイルの内容は、acctcom プログラムを使用していつでも調べることができます。このコマンドを実行するときに、ファイルも標準入力も指定しなければ、acctcom は pacct ファイルを読み取ります。acctcom は、終了したプロセスに関する情報を示します (実行中のプロセスは ps コマンドで調べることができます)。acctcom のデフォルト出力は次に示す情報を示します。
コマンド名 (スーパーユーザー特権を使用して実行された場合は # 記号)
ユーザー
tty 名 (未知の場合は ? として表示)
開始時刻
終了時刻
実時間 (秒単位)
CPU 時間 (秒単位)
平均サイズ (K バイト単位)
acctcom にオプションを使用することにより、次の情報を得ることができます。
fork/exec フラグの状態 (exec を使用しない fork の場合は 1)
システム終了状態
hog 係数
合計 kcore 分
CPU 係数
転送文字数
読み取りブロック数
表 61-6 で acctcom のオプションを説明します。
オプション |
説明 |
---|---|
-a |
選択したプロセスに関する特定の平均統計を表示する (統計は出力が記録された後に表示される)。 |
-b
|
ファイルを逆読みし、最後のコマンドから先に表示する (標準入力の読み込みには関係しない)。 |
-f |
fork/exec フラグおよびシステム終了状態カラムを出力する (出力は 8 進数)。 |
-h |
平均メモリーサイズに代えて hog 係数を表示する。hog 係数は、経過時間とプロセスが実行中に消費した合計 CPU 利用可能時間との比 (合計 CPU 利用時間/経過時間)。 |
-i |
入出力カウントを含むカラムを出力する。 |
-k |
メモリーサイズの代わりに、キロバイト/分ごとのコアサイズの合計値を表示する。 |
-m |
平均コアサイズ (デフォルト) を表示する。 |
-q |
出力レコードは出力しない。平均統計だけを出力する。 |
-r |
CPU 係数 (システム使用時間 / (システム使用時間 + ユーザー使用時間) を表示する。 |
-t |
システムおよびユーザー CPU 時間を表示する。 |
-v |
出力からカラム見出しを除外する。 |
-C sec |
合計 (システム + ユーザー) CPU 時間が sec 秒を超えたプロセスだけを表示する。 |
-e time |
time 以前に存在したプロセスを hr[:min[:sec]] の書式で表示する |
-E time |
time 以前に開始されたプロセスを hr[:min[:sec]] の書式で表示する。同じ time を -S と -E の両方に使用すれば、そのときに存在していたプロセスを表示する。 |
-g group |
group に属しているプロセスだけを表示する。 |
-H factor |
factor を超えるプロセスだけを表示する。ただし、factor は「hog 係数」(-h オプションを参照)。 |
-I chars |
chars によって指定されるカットオフ数を超える文字数を転送したプロセスだけを表示する。 |
-l line |
端末 /dev/line に属しているプロセスだけを表示する。 |
-n pattern |
pattern 「+」が 1 回以上現れることを意味する以外は、一般的な正規表現に一致するコマンドだけを表示する。 |
-o ofile |
レコードを出力しないで、レコードを acct.h 形式で ofile にコピーする。 |
-O sec |
CPU システム時間が sec 秒を超えるプロセスだけを表示する。 |
-s time |
time 以後に存在したプロセスを hr[:min[:sec]] の書式で表示する。 |
-S time |
time 以後に開始されたプロセスを hr[:min[:sec]] の書式で表示する。 |
-u user |
user に属しているプロセスだけを表示する。 |
メインの日次アカウンティングシェルスクリプトである runacct は、通常、プライムタイムつまり最も忙しい時間帯を避けて cron により起動されます。この runacct シェルスクリプトは、接続、料金、ディスク、プロセス用の各アカウンティングファイルを処理します。さらに、課金目的で prdaily と monacct が使用する日次および累積要約ファイルも準備します。
runacct シェルスクリプトは、エラーが発生した場合、ファイルを壊さないよう注意します。一連の保護機構により、エラーを認識し、インテリジェント診断を提供し、最小のユーザー介入で runacct が起動し直せるように処理を完了しようとします。runacct は、説明メッセージを active というファイルに書き込み、進捗状況を記録します。(runacct が使用するファイルは、特にことわりのないかぎり、ディレクトリ /var/adm/acct/nite にあります。) runacct の実行中、すべての診断出力は fd2log に書き込まれます。
runacct は起動されると lock と lock1 というファイルを作成します。これらのファイルは、runacct が同時に実行されるのを防ぐものです。runacct プログラムは、起動時にこれらのファイルが存在すれば、エラーメッセージを出力します。lastdate ファイルには runacct が最後に起動されたときの月日が入っており、このファイルは runacct を 1 日に 1 回しか実行できないようにするために使用されます。runacct がエラーを検出した場合は、エラーメッセージがコンソールに出力され、メールが root と adm に送られ、ロックが解除され、診断ファイルが保存され、実行が終了されます。runacct を再び起動する手順については、「runacct を再起動する方法」を参照してください。
runacct を再起動可能にするために、処理は再入可能な別々の状態に分割されます。statefile というファイルを使用して、最後に終了した状態が追跡されます。各状態が終了するたびに、statefile は更新されて次の状態に反映されます。1 つの状態の処理が終了すると、statefile が読み取られて次の状態が処理されます。runacct は、CLEANUP 状態に達すると、ロックを解除して実行を終了します。各状態は表 61-7 に示すように実行されます。
表 61-7 runacct 状態
状態 |
説明 |
---|---|
SETUP |
turnacct switch コマンドが実行されて新しい pacct ファイルが作成される。/var/adm/pacctn 内の (pacct ファイル以外の) プロセスアカウンティングファイルが /var/adm/Spacctn.MMDD に移される。/var/adm/wtmp ファイルは (最後に現在時のレコードが追加されて) /var/adm/acct/nite/wtmp.MMDD に移され、新しい /var/adm/wtmp が作成される。closewtmp と utmp2wtmp は、現在ログインしているユーザーに課金処理を行うため、wtmp.MMDD と新しい wtmp にレコードを追加する。 |
WTMPFIX |
wtmpfix プログラムが nite ディレクトリ内の wtmp.MMDD ファイルを調べて誤りがないか確認する。データの変更によっては、acctcon を失敗させることがあるので、wtmp ファイルに日付変更のレコードが現れた場合は、wtmpfix は関係するタイムスタンプを調整しようとする。さらに、wtmp ファイルからのエントリが壊れていた場合、壊れたエントリをすべて削除する。問題が解決された後のバージョンの wtmp.MMDD が tmpwtmpp に書き込まれる。 |
CONNECT |
acctcon プログラムが使用されて、ctacct.MMDD ファイルに接続アカウントレコードが記録される。これらのレコードは tacct.h 形式になっている。acctcon は、さらに、lineuse および reboots ファイルを作成する。reboots ファイルは、wtmp ファイルで見つかったすべてのブートレコードを記録する。 |
PROCESS |
acctprc プログラムを使用して、プロセス課金ファイル /var/adm/Spacctn.MMDD が ptacctn.MMDD の合計アカウントレコードに変換される。runacct が失敗した場合に、Spacct ファイルが処理されないように、Spacct ファイルと ptacct ファイルは番号で照合される。 |
MERGE |
MERGE プログラムが、プロセスアカウントレコードを接続アカウントレコードとマージして daytacct を作成する。 |
FEES |
MERGE プログラムが、fee ファイルからの ASCII tacct レコードを daytacct にマージする。 |
DISK |
dodisk プロシージャが実行されて disktacct ファイルが生成されている場合は、DISK プログラムがこのファイルを daytacct にマージし、disktacct を /tmp/disktacct.MMDD に移す。 |
MERGETACCT |
MERGETACCT が、daytacct を累積合計課金ファイルである sum/tacct とマージする。daytacct が毎日 sum/tacct.MMDD に保存される。したがって、sum/tacct は壊れたり失われても、作成し直すことができる。 |
CMS |
acctcms プログラムが数回実行される。acctcms は、まず Spacctn ファイルを使用してコマンド要約を生成し、sum/daycms にそれを書き込む。次に、sum/daycms を累積コマンド要約ファイル sum/cms とマージする。そして、最後に、sum/daycms および sum/cms ファイルからそれぞれ ASCII のコマンド要約ファイル nite/daycms と nite/cms を生成する。lastlogin プログラムを使用してログファイル /var/adm/acct/sum/loginlog が作成される。これは、各ユーザーが最後にログインした時刻を示すレポートである。(runacct が真夜中を過ぎてから実行された場合は、いずれかのユーザーが最後にログインした時刻を示す日付が 1 日分狂うことになる。) |
USEREXIT |
インストールに依存しない任意の (ローカル) 課金プログラムをこの時点で取り入れることができる。runacct はそのプログラムを /usr/lib/acct/runacct.local と想定する。 |
CLEANUP |
一時ファイルが整理され、prdaily が実行され、その出力が sum/rpt.MMDD に保存され、ロックが解除され終了する。 |
runacct を CLEANUP 状態で起動し直すときは、最後の ptacct ファイルが不完全であるため、このファイルを削除してください。
/var/adm ディレクトリ構造は、使用中のデータ収集ファイルを格納し、adm ログイン (現在のユーザー ID は 4) が所有します。
表 61-8 /var/adm ディレクトリ内のファイル
ファイル |
説明 |
---|---|
dtmp |
acctdusg プログラムからの出力 |
fee |
chargefee プログラムからの出力。ASCII tacct レコード。 |
pacct |
有効なプロセスアカウンティングファイル |
pacctn |
turnacct を使用して切り替えられたプロセスアカウンティングファイル |
Spacctn.MMDD |
runacct の実行中に生成された MMDD 日付のプロセスアカウンティングファイル |
/var/adm/acct ディレクトリには、nite、sum、fiscal の各ディレクトリが設けられ、それぞれに実際のデータ収集ファイルが格納されます。たとえば、nite ディレクトリは runacct プロシージャが毎日繰り返して使用するファイルを格納しています。次の表で、/var/adm/acct/nite ディレクトリ内の各ファイルを簡単に説明します。
表 61-9 /var/adm/acct/nite ディレクトリ内のファイル
ファイル |
説明 |
---|---|
active |
runacct が進捗状況の記録用、警告メッセージ、エラーメッセージの出力用として使用する。 |
activeMMDD |
runacct がエラーを検出した後の active と同じ |
cms |
prdaily が使用する ASCII の合計コマンド要約 |
ctacct.MMDD |
tacct.h 形式の接続アカウンティングレコード |
ctmp |
acctcon1 プログラムの出力。ctmp.h 形式の接続セッションレコード (acctcon1 と acctcon2 は互換性を保証するために用意) |
daycms |
prdaily が使用する ASCII 日次コマンド要約 |
daytacct |
tacct.h 形式の 1 日分の合計アカウンティングレコード |
disktacct |
tacct.h 形式のディスクアカウンティングレコード。dodisk プロシージャが作成する。 |
fd2log |
runacct の実行中の診断出力 |
lastdate |
runacct が最後に実行された日 (date +%m%d 書式) |
lock |
runacct の逐次使用の制御用に使用 |
lineuse |
prdaily が使用する tty 回線利用状況レポート |
log |
acctcon からの診断出力 |
log.MMDD |
runacct がエラーを検出後の log と同じ |
owtmp |
前日の wtmp ファイル |
reboots |
wtmp からの開始および終了日付とリブートのリスト |
statefile |
runacct の実行中の現在状態の記録用に使用 |
tmpwtmp |
wtmpfix が修復した結果の wtmp ファイル |
wtmperror |
wtmpfix エラーメッセージの格納用の場所 |
wtmperror.MMDD |
runacct がエラーを検出した後の wtmperror と同じ |
wtmp ファイルの runacctt 用コピー |
sum ディレクトリは、runacct が更新し、monacct が使用する累積要約ファイルを格納します。表 61-10 に、/var/adm/acct/sum ディレクトリ内のファイルを簡単に説明します。
表 61-10 /var/adm/acct/sum ディレクトリ内のファイル
ファイル |
説明 |
---|---|
cms |
内部要約書式による、会計期の合計コマンド要約ファイル |
cmsprev |
最新の更新がなされていないコマンド要約ファイル |
daycms |
内部要約書式による、当日の利用状況を表すコマンド要約ファイル |
loginlog |
各ユーザーが最後にログインした日付のレコード。lastlogin によって作成され、prdaily プログラム内で使用される。 |
rprt.MMDD |
prdaily プログラムの保存出力 |
tacct |
会計期の累積合計アカウンティングファイル |
tacctprev |
最新の更新がない点を除いて tacct と同じ |
tacct.MMDD |
MMDD 日付分の合計アカウンティングファイル |
fiscal ディレクトリは monacct が作成する定期的要約ファイルを格納します。表 61-11 で、/var/adm/acct/fiscal ディレクトリ内の各ファイルを説明します。
表 61-11 /var/adm/acct/fiscal ディレクトリ内のファイル
ファイル |
説明 |
---|---|
cmsn |
内部要約書式の、会計期 n の合計コマンド要約ファイル |
fiscrptn |
会計期 n の rprtn と同じレポート |
tacctn |
会計期 n の合計アカウンティングファイル |
次に示す、runacct により生成されるファイル (/var/adm/acct にあります) には特に注意する必要があります。
表 61-12 runacct が生成するファイル
ファイル |
説明 |
---|---|
nite/lineuse |
runacct は acctcon を呼び出して、/var/adm/acct/nite/tmpwtmp から端末回線の利用状況に関するデータを収集し、それらのデータを /var/adm/acct/nite/lineuse に書き込む。prdaily はこれらのデータを使用して回線利用状況を報告する。このレポートは特に不良回線の検出に有効となる。ログアウト回数とログイン回数との比率が 3:1 を超える場合は、回線に障害がある確率が大きい。 |
nite/daytacct |
tacct.h 形式の当日の合計課金ファイル |
sum/tacct |
このファイルは、毎日の nite/daytacct の累積であり、課金の目的に使用できる。このファイルは、毎月または毎会計期ごとに monacct プロシージャによって新たに累積が開始される。 |
sum/daycms |
runacct は acctcms を呼び出して、当日に使用されたコマンドに関するデータを処理する。これらの情報は /var/adm/acct/nite/daycms に格納される。このファイルの内容は毎日のコマンド要約。このファイルの ASCII バージョンは /var/adm/acct/sum/daycms。 |
sum/cms |
毎日のコマンド要約の累積。monacct が実行されることによって新たに累積が開始される。ASCII バージョンは nite/cms。 |
sum/loginlog |
runacct は lastlogin を呼び出して、/var/adm/acct/sum/loginlog のログインのうち最後にログインした日付を更新する。lastlogin は、さらに、このファイルから有効でなくなったログインを削除する。 |
sum/rprt.MMDD |
runacct が実行されるたびに、prdaily によって印刷された日次レポートのコピーが保存される。 |