このパートでは、Solaris 環境におけるシステム資源の管理について説明します。次の章が含まれます。
ディスク割り当てシステム、アカウンティングプログラム、cron および at コマンドなどを使用して、システム資源を管理するための Solaris のコマンドとユーティリティについて説明します。 |
|
ワークステーション情報メニューなどの、一般的なシステム情報を調べたり、変更したりする手順を説明します。 |
|
使用されていないファイルや大きなディレクトリを見つけて、ディスク空間を最適化するための手順を説明します。 |
|
ディスク割り当てを設定し、管理する手順を説明します。 |
|
crontab および at を使用して、ルーチンまたは 1 度限りのシステムイベントのスケジュールを設定する手順を説明します。 |
|
アカウンティングを設定し、管理する手順を説明します。 |
|
システムアカウンティングソフトウェアについての参照情報を示します。 |
この章では、UNIX ソフトウェアと Solaris 環境が提供するシステム資源管理用の機能について説明します。ディスク割り当て、アカウンティングプログラムの使用方法、さらに、定期的に実行する必要があるコマンドを crontab と at コマンドにより自動的に実行する方法などが含まれます。
この章の内容は次のとおりです。
システム資源を管理する手順については、次の内容を参照してください。
ディスクの割り当て機能を使用することにより、システム管理者は、各ユーザーが使用できるディスク容量と i ノード数 (おおよそのファイル数に該当) を制限して UFS ファイルシステムを制御できます。これは特にユーザーのホームディレクトリがあるファイルシステム上で効果があります。(これにより公開ファイルシステムと /tmp ファイルシステムにはディスクが十分割り当てられないことがあります。)
割り当てを設定する一般的な手順は次のとおりです。
いくつかのコマンドを使用してファイルシステムにディスク割り当てを決め、システムがリブートし、そのファイルシステムがマウントされるたびに割り当てを確認することができます。/etc/vfstab ファイルにエントリを追加し、また、そのファイルシステムの一番上のディレクトリに quotas ファイルを作成する必要があります。
まず 1 人のユーザー用に割り当てを設定し、それを他のユーザー用にコピーします。
割り当てが有効になる前に、他のコマンドが現在のディスクの使用状態をチェックし、競合していないかどうかを確認します。
最後に、コマンドは 1 つ以上のファイルシステムでの割り当てを有効にします。
以上の手順により、あるファイルシステムがマウントされるたびに、そのファイルシステムのディスク割り当てが有効になるように設定できます。詳細は、第 20 章「ディスク割り当ての管理」を参照してください。
一度設定しても、割り当てを変更して、ユーザーが使用できるディスク容量と 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 によって生成される要約レポートは、月次またはその他の会計期間ベースのユーザーに対する効率的な課金手段になります。
アカウンティングソフトウェアを設定する手順については、第 22 章「アカウンティングの設定と管理作業」を参照してください。アカウンティングの機能の参照情報については、第 23 章「システムアカウンティングの参照情報」を参照してください。
この章では、最も一般的なシステム情報を確認および変更するために必要な手順を示します。
表 18-1 に、一般的なシステム情報を表示するためのコマンドを示します。
表 18-1 システム情報を表示するためのコマンド
コマンド |
表示できるシステム情報 |
---|---|
showrev(1M) |
ホスト名、ホスト ID 番号、リリース、カーネルアーキテクチャ、アプリケーションアーキテクチャ、ハードウェアプロバイダ、ドメイン、およびカーネルのバージョン |
uname(1) |
オペレーティングシステム名、リリース、バージョン、ノード名、ハードウェア名、プロセッサタイプ |
ホスト ID 番号 |
|
インストールされているメモリー量 |
|
日付と時刻 |
特定のシステムとソフトウェアのリリース情報を表示するには、showrev コマンドを使用します。
$ showrev [-a]
-a |
利用できるすべてのシステムおよびリリース情報を表示する |
次の例は、showrev コマンドの出力を示します。
$ showrev -a Hostname: pluto Hostid: 5721864d Release: 5.7 Kernel architecture: sun4m Application architecture: sparc Hardware provider: Sun_Microsystems Domain: solar.com Kernel version: SunOS 5.7 Generic September 1998 OpenWindows version: OpenWindows Version 3.7, 3 February 1998 No patches are installed $
システム情報を表示するには、uname コマンドを使用します。
$ uname[-a]
-a |
オペレーティングシステム名の他に、システムノード名、オペレーティングシステムのリリース、オペレーティングシステムのバージョン、ハードウェア名、プロセッサタイプも表示する |
次の例は、uname コマンドの出力を示します。
$ uname SunOS $ uname -a SunOS pluto 5.7 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 Feb 26 10:19:19 MST 1998 $
表 18-2 に、一般的なシステム情報を変更できるコマンドのマニュアルページと説明を示します。
表 18-2 システム情報を変更するためのコマンド
コマンド |
変更できるシステム情報 |
---|---|
日付と時刻を別のシステムの日付と時刻に合わせる |
|
日付と時刻を自分の指定に合わせる |
これらのコマンドを使用することにより、システムの日付と時刻を設定して、サーバーなどの別のシステムの日付と時刻に同期させることができます。また、新しい日付と時刻を指定して、システムの日付と時刻を変更することもできます。
その日のメッセージ (MOTD) は /etc/motd に置かれています。この機能を使用すると、ログイン時のシステムメッセージによりすべてのユーザーに通知や問い合わせを送ることができます。ただし、この機能を使用するときは、常に必要なメッセージだけを送ります。メッセージファイルは定期的に編集し、無用になったメッセージを削除するようにしてください。
/etc/system ファイルを編集することにより、次の作業が行えます。
Solaris 2.6 以降、Solaris ソフトウェアには Delaware 大学の Network Time Protocol (NTP) 公開ドメインソフトウェアが添付されています。
NTP を使用すると、ネットワーク環境における正確な時間やネットワーク時間の同期を管理できます。xntpd デーモンは、UNIX システムの時間を インターネット標準時間サーバーの時間と合うように調整し、保守します。xntpd デーモンは、RFC 1305 に規定されている Network Time Protocol バージョン 3 標準を完全に実装しています。
xntpd デーモンは、システムの起動時に /etc/inet/ntp.conf ファイルを読み取ります。構成オプションの詳細は、xntpd(1M) のマニュアルページを参照してください。NTP サーバーとクライアントの設定手順については、次の節を参照してください。
ネットワークで NTP を使用する場合、次のことを考慮してください。
xntpd デーモンは最小限のシステム資源だけしか使用しません。
NTP クライアントはブート時に自動的に同期します。同期が取れなくなった場合は、タイムサーバーにアクセスしたときに再度同期を取ります。
スーパーユーザーになります。
/etc/inet ディレクトリに移動します。
ntp.server ファイルを ntp.conf ファイルにコピーします。
# cp ntp.server ntp.conf
/etc/init.d ディレクトリに移動します。
xntpd デーモンを起動します。
# ./xntpd start
スーパーユーザーになります。
/etc/inet ディレクトリに移動します。
ntp.client ファイルを ntp.conf ファイルにコピーします。
# cp ntp.client ntp.conf
/etc/init.d ディレクトリに移動します。
xntpd デーモンを起動します。
# ./xntpd start
日付と時刻を設定し直して他のシステムと同期させるには、rdate コマンドを使用します。
# rdate other-system-name
other-system-name |
別のシステム名 |
date コマンドを使用してシステムの日付と時刻を調べ、システムの日付と時刻が正しく変更できたことを確認します。
出力は同期させたシステムの日付と時刻に一致します。
次の例は、rdate を使用してシステムの日付と時刻を別のシステムに同期させる方法を示します。次の例は、数時間遅れていたシステム neptune の日付と時刻をサーバー pluto の日付と時刻に一致させます。
neptune$ date Thu Feb 26 10:20:54 MST 1998 neptune# rdate pluto Thu Feb 26 10:20:54 MST 1998 neptune$ date Thu Feb 26 10:20:56 MST 1998
次のように新しい日付と時刻を入力します。
# date mmddHHMM[[cc]yy]
mm |
月。2 桁を使用 |
dd |
日。2 桁を使用 |
HH |
時。2 桁で 24 時間制を使用 |
MM |
分。2 桁を使用 |
cc |
世紀。2 桁を使用 |
yy |
年。2 桁を使用 |
オプションを指定せずに date コマンドを実行し、システムの日付と時刻をチェックして、システムの日付と時刻が正しくリセットされていることを確認します。
出力は、他のシステムと同じ日付と時刻を示します。
次の例は、date コマンドを使用して手作業でシステムの日付と時刻を設定する方法を示します。
# date Thu Feb 26 10:20:56 MST 1998 # date 022610221998
エディタを使って、/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.7 Generic September 1998
次の例は、編集後の /etc/motd ファイルの内容を示します。このファイルは、ログインする各ユーザーに対してシステムの利用度に関する情報を提供します。
$ cat /etc/motd The system will be down from 7:00 a.m to 2:00 p.m.on Saturday, February 28, 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 sad_cnt |
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 sad_cnt=256 set nautopush=128
次の変数を追加して、共有メモリーセグメントを増やします。
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
次の共有メモリー値は、大きなデータベースアプリケーションを実行するために、大容量のメモリー (たとえば 128M バイト) を搭載したシステムに適用されます。
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/local を除き、すべてのファイルシステムがローカルでマウントされています。/usr/local はシステム mars からリモートにマウントされているため、ローカルのディスク資源を使用しません。
$ 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
次の例は、lpsched-2 が 2 ブロックを使用していることを示します。
% cd /var/lp/logs % ls -s total 2 0 lpsched 0 lpsched.1 2 lpsched.2%
次のように入力して、ファイルのサイズをブロック単位に、最も大きいものから降順に表示します。
$ 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 183 adm 49 lp 47 uucp 37 bob 28 sys 2 mary # quot -a /dev/rdsk/c0t0d0s0 (/): 35400 bin 183 adm 49 lp 47 uucp 37 bob 28 sys 2 mary /dev/rdsk/c0t0d0s6 (/usr): 56567 bin 2000 lp 698 uucp 1 adm /dev/rdsk/c0t0d0s7 (/export/home): 617 ken
ファイルの数が非常に多くなったファイルシステムを整理する場合、最近使用されていないファイルを見つけて削除します。使用されていないファイルは ls または find コマンドを使用して見つけることができます。詳細は、ls(1) と find(1) のマニュアルページを参照してください。
ディスク容量を節約するその他の方法としては、/var/tmp または /var/spool 内にあるような一時ファイルを空にしたり、core ファイルやクラッシュダンプファイルを削除したりするなどが含まれます。これらのファイルの詳細は、第 31 章「システムクラッシュ情報の生成と保存」を参照してください。
次のように 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 ノードを使用します。ファイルデータは、データブロック内に格納されます (通常は、1K バイトブロック)。
ディレクトリがないと仮定すると、ユーザーは、ブロックを使用しなくても、すべて空のファイルを作成することによって、自分の i ノードディスク割り当てを超えることができます。また、ユーザーは単純に、ユーザーのディスク割り当て中のすべてのデータブロックを消費するぐらいの大きなファイルを 1 つだけ作成することによって、自分のブロックディスク割り当てを超えることができます。
ディスクの割り当てを設定することにより、ユーザーが利用できるディスク容量と、i ノードの数 (おおよそファイルの数に相当) を制限できます。これらの割り当ては、ファイルシステムがマウントされるたびに自動的に有効になります。この節ではファイルシステム用にディスク割り当てを構成し、設定し、有効にする手順を説明します。
ディスク割り当ての設定には、次の一般的な手順が含まれます。
システムをリブートしてファイルシステムをマウントするごとにディスク割り当てが実施されるように、一連のコマンドを使用して、ファイルシステムでディスク割り当てを利用できるようにするための準備をします。エントリは、/etc/vfstab ファイルに追加しなければなりません。また、quotas ファイルは、ファイルシステムの一番上のディレクトリで作成しなければなりません。
1 人のユーザーに対してディスク割り当てを作成した後、そのディスク割り当てをプロトタイプとして、他のユーザーのディスク割り当てを設定できます。
ディスク割り当てを実際に有効にする前に、他のコマンドを使用して、整合性をチェックします。このチェックでは、提案したディスク割り当てと現在のディスク使用率を比較して、矛盾しないことを確認します。
最後に、他のコマンドを使用して、1 つまたは複数のファイルシステム全体のディスク割り当てを有効にします。
上記の手順により、ファイルシステムがマウントされるたびに、そのファイルシステム上でディスク割り当てが自動的に有効になります。上記手順の特定の情報については、「割り当ての設定」を参照してください。
表 20-1 で、ディスク割り当てを設定するコマンドを説明します。
表 20-1 割り当てを行うコマンド
コマンド |
機能 |
---|---|
edquota(1M) |
各ユーザーに対する i ノード数とディスク容量のハード制限とソフト制限を設定する |
quotacheck(1M) |
マウントされている各 UFS ファイルシステムを調べ、ファイルシステムのディスク割り当てファイルにある情報と比較し、矛盾があれば報告する |
指定したファイルシステムの割り当てを有効にする |
|
quota(1M) |
マウントされているファイルシステムのユーザーの割り当てを表示し、割り当てが正しく設定されていることを確認する |
ユーザーの割り当てを設定する前に、各ユーザーに割り当てるディスク容量の大きさとファイル数を決定する必要があります。ファイルシステムの合計領域サイズを超えないようにする場合は、ファイルシステムの合計サイズをユーザー数に等分すればよいでしょう。たとえば、3 人のユーザーが 100M バイトのスライスを共有し、それぞれが同じディスク容量のサイズを必要とする場合は、各ユーザーに 33M バイトずつ割り当てます。すべてのユーザーがそれぞれに割り当て制限を押し上げることがないような環境では、割り当ての合計がファイルシステムの合計サイズを超えるように個々の割り当てを設定することも可能です。たとえば、3 人のユーザーが 100M バイトのスライスを共有する場合は、それぞれに 40M バイトを割り当ててもよいということです。
あるユーザーについて edquota コマンドを使用して割り当てを決定すると、同じファイルシステム上の他のユーザーにも同じ割り当てプロトタイプとして利用できます。
UFS ファイルシステムの割り当てを構成し、各ユーザーに対する割り当てを終了したら、実際に割り当てを有効にする前に、quotacheck コマンドを使用して整合性をチェックしてください。システムがリブートされる機会がそれほど多くない場合、quotacheck を定期的に実行するようお勧めします。
edquota により設定した割り当ては、quotaon コマンドを使用して有効にしなければ強制的に設定されません。割り当てファイルを正しく構成したら、システムがリブートし、そのファイルシステムがマウントされるたびに、割り当ては自動的に有効になります。
作業 |
説明 |
手順の説明 |
---|---|---|
1. ファイルシステムの割り当ての構成 |
/etc/vfstab を編集して、ファイルシステムがマウントされるたびに割り当てが有効になるようにする。また、quotas ファイルを作成する。 | |
2. 1 ユーザー用の割り当ての設定 |
edquota を使用して 1 ユーザーアカウント用にディスクと i ノードの割り当てを行う。 | |
3. 複数ユーザー用の割り当ての設定 |
オプション。edquota を使用して、その他のユーザーアカウント用にプロトタイプの割り当てを適用する。 | |
4. 整合性のチェック |
quotacheck を使用して、1 つまたは複数のファイルシステムの整合性について、現在の使用状況とディスクの割り当てを比較する。 | |
5. 割り当てを有効にする |
quotaon を使用して、1 つまたは複数のファイルシステムの割り当てを有効にする。 |
エディタを選んで /etc/vfstab ファイルを編集します。割り当てを設定しようとする各 UFS ファイルシステムに対して「mount options」フィールドに rq を追加します。
/etc/vfstab ファイルを閉じて、変更結果を保存します。
割り当てを格納しようとするファイルシステムの最上位ディレクトリに変更します。
次のように入力して、quotas というファイルを作成します。
# touch quotas
root のみ、読み取り権/書き込み権を与えます。
# chmod 600 quotas
次の例は、/etc/vfstab の 1 行は、システム pluto のディレクトリ /export/home が NFS ファイルシステムとして、割り当てを有効にしたローカルシステム上のマウントポイントにマウントされていることを示しています。
#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 | filesystem ...]
-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
ディスクとハードの割り当てを設定して有効にしたら、それらの割り当てを超過して使用しているユーザーをチェックできます。また、ファイルシステム全体の割り当て情報をチェックすることもできます。
表 20-3 でディスク割り当てをチェックするのに使用するコマンドを説明します。
表 20-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 ノード数を調整できます。または、必要に応じて各ユーザーから、あるいはファイルシステム全体から割り当てを削除できます。
表 20-4 で、割り当てを変更または削除するのに使用するコマンドを示します。
表 20-4 割り当てを変更または削除するコマンド
コマンド |
機能 |
---|---|
edquota(1M) |
各ユーザーについて i ノード数またはディスク容量の強い制限値と弱い制限値を変更する。また、任意のユーザーが弱い制限値を超えることが許される期間の長さを変更する |
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 コマンドを使用して、特定のシステムイベントを指定の時刻に実行するようにスケジュールすることもできます。表 21-1 に crontab、at の他に、これらのコマンドへのアクセスを制御できるファイルを示します。
表 21-1 システムイベントのスケジューリング用コマンド
コマンド |
スケジューリングの対象 |
ファイルの格納場所 |
アクセス制御用ファイル |
---|---|---|---|
crontab |
一定間隔で実行する複数のシステムイベント |
/var/spool/cron/crontabs |
/etc/cron.d/cron.allow /etc/cron.d/cron.deny |
at |
1 つのシステムイベント |
/var/spool/cron/atjobs |
/etc/cron.d/at.deny |
以降の各項で、crontab ファイルをどのように作成、編集、表示、削除するか、さらに、それらのファイルへのアクセスをどのように制御するかを説明します。
cron デーモンは、各 crontab ファイル内にあるコマンドに従ってシステムイベントをスケジュールします。crontab ファイルには、それぞれ一定間隔で実行されるコマンドが 1 行に 1 つずつ入っています。各行の先頭は cron デーモンが各コマンドを実行する日時情報です。
たとえば、SunOS ソフトウェアのインストール時に root という名前の crontab ファイルが提供されますが、このファイルの内容は次のとおりです。
10 3 * * 0,4 /etc/cron.d/logchecker 10 3 * * 0 /usr/lib/newsyslog 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1
最初のコマンド行は、日曜日と木曜日の午後 3 時 15 分に logchecker を実行するようシステムに指示します。2 番目のコマンド行は、毎日曜日の午前 3 時 10 分に newsyslog を実行するようにシステムをスケジュールします。3 番目のコマンド行は毎日午前 3 時 15 分に nfsfind を実行するようにシステムに指示します。4 番目のコマンド行は、夏時間をチェックして、必要であれば修正するようにシステムに指示します。RTC タイムゾーンも /etc/rtc_config ファイルもない場合、このエントリは何もしません。
crontab ファイル内のコマンド行の構文の詳細は、「crontab ファイルエントリの構文」を参照してください。
crontab ファイルは /var/spool/cron/crontabs) に格納されます。SunOS ソフトウェアのインストール時には、root 以外にもいくつかの crontab ファイルが提供されます (表 21-2 を参照してください)。
表 21-2 デフォルトの crontab ファイル
crontab ファイル |
機能 |
---|---|
adm |
アカウンティング |
lp |
印刷 |
root |
一般的なシステム機能とファイルシステムの整理 |
sys |
性能情報の収集 |
uucp |
一般的な uucp の整理 |
その他の crontab ファイルは、それらの中に作成されるユーザーのアカウントに基づいて、bob、mary、smith、jones などのように命名されます。
デフォルトの crontab ファイルの他に、ユーザーは crontab ファイルを作成してそれぞれユーザー自身のシステムイベントをスケジュールできます。root または他のユーザーが所有する crontab ファイルにアクセスするには、スーパーユーザーの特権が必要です。
crontab ファイルを作成、編集、表示、削除する手順については、「システムイベントのスケジューリング用コマンド」で説明します。
cron デーモンは crontab コマンドの自動スケジューリングを行います。このデーモンの機能は、通常 15 分おきに、/var/spool/cron/crontabs を調べて crontab ファイルがないか確認します。新しい crontab ファイルがないか、または既存の crontab が変更されていないかを確認し、いずれかがあった場合は、ファイル内のリストから実行時刻を読み取り、コマンドが正しい時刻に実行されるよう指示します。
ほとんど同様に、cron デーモンは /var/spool/cron/atjobs ディレクトリ内の at ファイルのスケジューリングを制御します。
crontab ファイルは、1 行に 1 つのコマンドが入った構成になっています。これらのコマンド行の最初の 5 つのフィールドには、コマンドが実行される時刻を指定し、それぞれスペースで区切ります。表 21-3 にこれら 5 つのフィールドを示します。
表 21-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 ファイルを作成すると、自動的に /var/spool/cron/crontabs ディレクトリ内に格納され、作成者のユーザー名が命名されます。スーパーユーザー特権があれば、他のユーザーや root の crontab ファイルを作成または編集できます。
crontab コマンドエントリは、「crontab ファイルエントリの構文」の説明に従って入力してください。
エディタを使用できることを確認します。
(省略可能) root または他のユーザーが所有する crontab ファイルを作成または編集する場合は、スーパーユーザーになります。
次のように入力して、新しい crontab ファイルを作成するか、既存の crontab ファイルを編集します。
$ crontab -e [username]
username |
他のユーザーのアカウント名。作成または編集するにはスーパーユーザーの権限が必要 |
誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの割り込みキーを押してください。割り込みキーを押すと、変更結果を保存しないでエディタを終了できます。この時点でファイルの編集を終了して変更結果を保存すると、既存の crontab ファイルが空のファイルで上書きされてしまいます。
「crontab ファイルエントリの構文」で説明している構文に従って、コマンド行を crontab ファイルに追加します。
crontab ファイルを閉じて、変更結果を保存します。
crontab ファイルは /var/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 ファイルがあるかどうかを確認するには、/var/spool/cron/crontabs ディレクトリで ls -l コマンドを使用します。たとえば、次の表示はユーザー smith と jones の crontab ファイルがあることを示しています。
$ ls -l /var/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 ファイルが入っている) /var/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.16 98/04/28 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. # 10 3 * * 0,4 /etc/cron.d/logchecker 10 3 * * 0 /usr/lib/newsyslog 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 # crontab -l jones 13 13 * * * cp /home/jones/work_files /usr/backup/. > /dev/null 2>&1
デフォルトでは、rm コマンドを使用して誤って crontab ファイルを削除してしまうことがないように、crontab ファイルは保護されています。crontab ファイルを削除する場合は、rm コマンドではなく crontab -r コマンドを使用してください。
デフォルトでは、crontab -r は、このコマンドを実行したユーザーの crontab を削除します。root またはその他のユーザーの crontab を削除するには、スーパーユーザーにならなければなりません。
このコマンドを使用するには、ディレクトリを (crontab ファイルが入っている) /var/spool/cron/crontabs に変更する必要はありません。
(省略可能) root または他のユーザーの crontab ファイルを削除するには、スーパーユーザーになります。
次のように入力して、crontab ファイルを削除します。
$ crontab -r [username]
username |
他のユーザーのアカウント名。作成または編集するにはスーパーユーザーの権限が必要 |
誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの割り込みキーを押してください。割り込みキーを押すと、変更結果を保存せずに crontab コマンドを終了できます。この時点でファイルの編集を終了して変更結果を保存すると、既存の crontab ファイルが空のファイルで上書きされてしまいます。
crontab ファイルが削除されていることを確認します。
# ls /var/spool/cron/crontabs
次の例では、ユーザー smith が crontab -r コマンドを使用して自分の crontab ファイルを削除します。
$ ls /var/spool/cron/crontabs adm jones lp root smith sys uucp $ crontab -r $ ls /var/spool/cron/crontabs adm jones lp root sys uucp
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(1) コマンドを使用してコマンドやスクリプトなどのジョブを後で特定の時刻に実行するようにスケジュールする方法、それらのジョブを削除または表示する方法、および at コマンドへのアクセスを制御する方法について説明します。
デフォルトでは、ユーザーはそれぞれ自分の at ジョブファイルを作成、表示、または削除できます。root または他のユーザーの at ファイルにアクセスするには、スーパーユーザーの権限が必要です。
at ジョブの実行を依頼すると、at ジョブにジョブ識別番号と .a 拡張子が与えられ、それがファイル名になります。
コマンド実行時刻を指定して at ユーティリティを起動します。
後で実行させるコマンドまたはスクリプトを入力します。
このコマンドまたはスクリプトからの出力が重要な場合は、後で調べられるように必ずファイルに書き込むようにしてください。
たとえば、次の at ジョブは、3 月 31 日の真夜中に Smith のユーザーアカウントから core ファイルを削除します。
$ at 11:45pm June 11 at> rm /home/smith/*core* at> Control-d キーを押します job 897543900.a at Wed Jun 10 23:45:00 1998
特定のユーザーだけがそれぞれの 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> Control-d キーを押します job 852777000.a at Wed Jan 8 19:30:00 1998
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 Jun 8, 1998 19:30 jones 897355800.a a stdin 2nd Jun 10, 1998 23:45 jones 897543900.a a stdin 3rd Jun 13, 1998 04:00 jones 897732000.a a stdin
自分の at ジョブの実行時刻に関する情報を表示するには、次のように at -l コマンドを使用します。
$ at -l [job-id]
-l job-id |
状態を確認したいジョブの識別番号 |
次の例は、at -l コマンドからの出力を示しています。このコマンドは、特定のユーザーが依頼したすべてのジョブに関する状態情報を得ることを目的としています。
$ at -l 897543900.a Wed Jun 10 23:45:00 1998 897355800.a Mon Jun 8 19:30:00 1998 897732000.a Sat Jun 13 04:00:00 1998
次の例は、at -l コマンドに 1 つのジョブを指定して表示された出力を示しています。
$ at -l 897732000.a
次のように入力して、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 897543900.a Wed Jun 10 23:45:00 1998 897355800.a Mon Jun 8 19:30:00 1998 897732000.a Sat Jun 13 04:00:00 1998 $ at -r 897732000.a $ at -l 897732000.a at: 858142000.a: No such file or directory
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 データベースファイルに追加されます。表 22-1 に、デフォルトのアカウンティング管理スクリプトを説明します。
表 22-1 デフォルトのアカウンティング管理スクリプト
アカウンティングスクリプト |
目的 |
実行方法 |
---|---|---|
ckpacct(1M) |
/usr/adm/pacct ログファイルのサイズをチェックする |
定期的 |
runacct(1M) |
接続、プロセス、ディスク、および料金のアカウンティング情報を処理する |
日次 |
monacct(1M) |
会計レポートを生成する。定期的に実行される |
会計期間に基づく |
これらのデフォルトは変更できます。上記エントリをデータベースに追加して、アカウンティングプログラムをインストールした後、アカウンティングは自動的に実行されるようになります。
スーパーユーザーになります。
必要な場合は、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.16 98/04/28 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. # 10 3 * * 0,4 /etc/cron.d/logchecker 10 3 * * 0 /usr/lib/newsyslog 15 3 * * 0 /usr/lib/fs/nfs/nfsfind 1 2 * * * [ -x /usr/sbin/rtc ] && /usr/sbin/rtc -c > /dev/null 2>&1 30 22 * * 4 /usr/lib/acct/dodisk
次に /etc/acct/holidays ファイルの例を示します。
* @(#)holidays January 1, 1998 * * 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(1M) という機能を使用してユーザーに対する課金処理を行うことができます。chargefee は、課金をファイル /var/adm/fee に記録します。次に、runacct ユーティリティが実行されるたびに、新しいエントリが拾い出されて、全体のアカウンティングレコードにマージされます。
ユーザーに提供されたサービスに対して課金するように設定します。
# chargefee username amount
username |
課金したいユーザーアカウント |
amount |
ユーザーに対する課金の単位数 |
次の例は、ユーザーがアカウント print_customer にログインするたびに 10 単位を課金します。
# chargefee print_customer 10
この節では、アカウンティング情報を保守する方法について説明します。
UNIX のアカウンティングシステムは堅固ではなく、ファイルが壊れたり失われることがあります。そのようなファイルにも、単に無視してよいものや、バックアップから復元できるものがあります。しかし、特定のファイルは、アカウンティングシステムの完全性を維持するために修復しなければなりません。
wtmp(4) ファイルは、アカウンティングシステムを日常的に運用する上で発生する大部分の問題の原因になっています。日付が変更され、システムがマルチユーザーモードになると、1 組の日付変更レコードが /var/adm/wtmp に書き込まれます。wtmpfix(1M) ユーティリティは、日付変更されたときの 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(1M) コマンドは、すべてのディスクアカウンティング情報を収集します。起動されるたびに、このコマンドは最高 3000 ユーザー分の情報を処理できます。
dodisk(1M) を実行して収集された情報は、/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 レコード内のログイン名として示されます。表 23-1 に、raw アカウンティングデータがどのように収集され、どこに格納されるかをまとめて示します。
表 23-1 raw アカウンティングデータ
/var/adm 内のファイル |
情報 |
ファイルを書くプログラム |
書式定義ヘッダ |
---|---|---|---|
login, init |
utmp.h |
||
|
date |
|
|
|
acctwtmp |
|
|
|
shutacct シェル |
|
|
プロセス数 |
カーネル (プロセス終了時) |
acct.h |
|
|
|
|
|
特別料金 |
chargefee |
acct.h |
|
使用ディスク領域 |
dodisk |
tacct.h |
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(1M) シェルスクリプトは、呼び出されるたびに基本的な 4 種類のレポートを生成します。これらのレポートは、接続アカウンティング、毎日のログイン別利用状況、日次および月次合計によって報告されるコマンド利用状況の 3 種類を対象とするレポートと、ユーザーの最後のログイン時刻のレポートです。4 つの基本レポートは次のとおりです。
表 23-2 日次アカウンティングレポート
このレポートは、使用された各端末回線に関する情報を示します。次に例を示します。
Jun 11 02:30:02 1998 DAILY REPORT FOR mercury Page 1 from Wed Jun 10 02:30:02 1998 to Thu Jun 11 02:30:02 1998 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 は、システムがどれだけの時間マルチユーザーモード (端末回線を通してアクセス可能です) であったかを示します。この部分を構成しているカラムを表 23-3 で説明します。
表 23-3 日次レポート
マシンの稼動中は、/var/adm/wtmp ファイルから接続アカウンティングが準備されるので、このファイルを監視する必要があります。wtmp ファイルが急速に大きくなる場合は、acctcon -l file < /var/adm/wtmp を実行してどの tty 回線の使用頻度が最も大きいかを調べてください。割り込みが頻繁に発生する場合は、全般的なシステムの性能が影響を受けることになります。さらに、wtmp が壊れることもあります。この問題を解決するには、「wtmp ファイルを修復する方法」を参照してください。
このレポートは、システム資源の利用状況のユーザー別の内訳を示します。次に例を示します。
Jun 11 02:30:02 1998 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
日次利用状況レポートで示される各データを表 23-4 で説明します。
表 23-4 日次利用状況レポート
このレポートはコマンド別のシステム資源の利用状況を示します。このレポートでは、最も使用率の高いコマンドがわかり、それらコマンドがどのようにシステム資源を利用しているかに基づいて、どのようにしたらシステムの最適チューニングが可能かを知ることができます。日次レポートも月次レポートも見た目には同じですが、日次要約レポートは当日だけについてのレポートであるのに対して、月次要約レポートは、会計期の初めから当日までについてのレポートです。つまり、月次レポートは、monacct が最後に実行されたときからの累積データを表します。
これらのレポートは TOTAL KCOREMIN によってソートされます。TOTAL KCOREMIN は任意の基準ですが、システムでのドレーンの計算にはすぐれた指標です。
次に日次コマンド要約レポートの例を示します。
Jun 11 02:30:02 1998 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 . . .
表 23-5 で、日次コマンド要約レポートに示されるデータをカラム別に説明します。
表 23-5 日次コマンド要約レポート
この月次コマンド要約は、次のただ 1 点の相違を除いて日次コマンド要約と同じです。つまり、月次コマンド要約は monacct が最後に起動されたときからの累積合計を示します。次に例を示します。
Jun 9 02:30:03 1998 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
各データ項目については、「日次コマンド要約」を参照してください。
このレポートは、特定のログインが最後に使用された日付を示します。この情報を使用して、使用されていないログインやログインディレクトリを見つけることができます。それらのログインやログインディレクトリは保存して削除できます。次に例を示します。
Jun 9 02:30:03 1998 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 係数
転送文字数
読み取りブロック数
表 23-6 で acctcom のオプションを説明します。
表 23-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 状態に達すると、ロックを解除して実行を終了します。各状態は表 23-7 に示すように実行されます。
表 23-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 が tmpwtmp に書き込まれる |
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) が所有します。
表 23-8 /var/adm ディレクトリ内のファイル
ファイル |
説明 |
---|---|
dtmp |
acctdusg プログラムからの出力 |
fee |
chargefee プログラムからの出力。ASCII tacct レコード |
pacct |
有効なプロセスアカウンティングファイル |
pacctn |
turnacct を使用して切り替えられたプロセスアカウンティングファイル |
Spacctn.MMDD |
runacct の実行中に生成された MMDD 日付のプロセスアカウンティングファイル |
/var/adm/acct ディレクトリには、nite、sum、fiscal の各ディレクトリが設けられ、それぞれに実際のデータ収集ファイルが格納されます。たとえば、nite ディレクトリは runacct プロシージャが毎日繰り返して使用するファイルを格納しています。表 23-9 で、/var/adm/acct/nite ディレクトリ内の各ファイルを簡単に説明します。
表 23-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 ファイルの runacct 用コピー |
sum ディレクトリは、runacct が更新し、monacct が使用する累積要約ファイルを格納します。表 23-10 に、/var/adm/acct/sum ディレクトリ内のファイルを簡単に説明します。
表 23-10 /var/adm/acct/sum ディレクトリ内のファイル
ファイル |
説明 |
---|---|
cms |
内部要約書式による、会計期の合計コマンド要約ファイル |
cmsprev |
最新の更新がなされていないコマンド要約ファイル |
daycms |
内部要約書式による、当日の利用状況を表すコマンド要約ファイル |
loginlog |
各ユーザーが最後にログインした日付のレコード。lastlogin によって作成され、prdaily プログラム内で使用される |
rprt.MMDD |
prdaily プログラムの保存出力 |
tacct |
会計期の累積合計アカウンティングファイル |
tacctprev |
最新の更新がない点を除いて tacct と同じ |
tacct.MMDD |
MMDD 日付分の合計アカウンティングファイル |
fiscal ディレクトリは monacct が作成する定期的要約ファイルを格納します。表 23-11 で、/var/adm/acct/fiscal ディレクトリ内の各ファイルを説明します。
表 23-11 /var/adm/acct/fiscal ディレクトリ内のファイル
ファイル |
説明 |
---|---|
cmsn |
内部要約書式の、会計期 n の合計コマンド要約ファイル |
fiscrptn |
会計期 n の rprtn と同じレポート |
tacctn |
会計期 n の合計アカウンティングファイル |
次に示す runacct により生成されるファイル (/var/adm/acct にあります) には特に注意する必要があります。
表 23-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/sum/daycms に格納される。このファイルの内容は毎日のコマンド要約。このファイルの ASCII バージョンは /var/adm/acct/nite/daycms |
sum/cms |
毎日のコマンド要約の累積。monacct が実行されることによって新たに累積が開始される。ASCII バージョンは nite/cms |
sum/loginlog |
runacct は lastlogin を呼び出して、/var/adm/acct/sum/loginlog のログインのうち最後にログインした日付を更新する。lastlogin は、さらにこのファイルから有効でなくなったログインを削除する |
sum/rprt.MMDD |
runacct が実行されるたびに、prdaily によって印刷された日次レポートのコピーが保存される |