Solaris のシステム管理 (第 2 巻)

パート V システム資源の管理

このパートでは、Solaris 環境におけるシステム資源の管理について説明します。次の章が含まれます。

第 17 章「システム資源の管理」

ディスク割り当てシステム、アカウンティングプログラム、cron および at コマンドなどを使用して、システム資源を管理するための Solaris のコマンドとユーティリティについて説明します。

第 18 章「システム情報の確認と変更」

ワークステーション情報メニューなどの、一般的なシステム情報を調べたり、変更したりする手順を説明します。 

第 19 章「ディスク使用の管理」

使用されていないファイルや大きなディレクトリを見つけて、ディスク空間を最適化するための手順を説明します。 

第 20 章「ディスク割り当ての管理」

ディスク割り当てを設定し、管理する手順を説明します。 

第 21 章「システムイベントのスケジュール設定」

crontab および at を使用して、ルーチンまたは 1 度限りのシステムイベントのスケジュールを設定する手順を説明します。

第 22 章「アカウンティングの設定と管理作業」

アカウンティングを設定し、管理する手順を説明します。 

第 23 章「システムアカウンティングの参照情報」

システムアカウンティングソフトウェアについての参照情報を示します。 

第 17 章 システム資源の管理

この章では、UNIX ソフトウェアと Solaris 環境が提供するシステム資源管理用の機能について説明します。ディスク割り当て、アカウンティングプログラムの使用方法、さらに、定期的に実行する必要があるコマンドを crontabat コマンドにより自動的に実行する方法などが含まれます。

この章の内容は次のとおりです。

システム資源に関する作業の参照先

システム資源を管理する手順については、次の内容を参照してください。

ディスクの割り当て

ディスクの割り当て機能を使用することにより、システム管理者は、各ユーザーが使用できるディスク容量と i ノード数 (おおよそのファイル数に該当) を制限して UFS ファイルシステムを制御できます。これは特にユーザーのホームディレクトリがあるファイルシステム上で効果があります。(これにより公開ファイルシステムと /tmp ファイルシステムにはディスクが十分割り当てられないことがあります。)

割り当てを設定する一般的な手順は次のとおりです。

  1. いくつかのコマンドを使用してファイルシステムにディスク割り当てを決め、システムがリブートし、そのファイルシステムがマウントされるたびに割り当てを確認することができます。/etc/vfstab ファイルにエントリを追加し、また、そのファイルシステムの一番上のディレクトリに quotas ファイルを作成する必要があります。

  2. まず 1 人のユーザー用に割り当てを設定し、それを他のユーザー用にコピーします。

  3. 割り当てが有効になる前に、他のコマンドが現在のディスクの使用状態をチェックし、競合していないかどうかを確認します。

  4. 最後に、コマンドは 1 つ以上のファイルシステムでの割り当てを有効にします。

以上の手順により、あるファイルシステムがマウントされるたびに、そのファイルシステムのディスク割り当てが有効になるように設定できます。詳細は、第 20 章「ディスク割り当ての管理」を参照してください。

一度設定しても、割り当てを変更して、ユーザーが使用できるディスク容量と i ノード数を調整できます。また、システムに変更が必要な場合は、それに合わせて割り当てを追加または削除できます。割り当ての変更、割り当てを超えてもかまわない時間の長さの設定、各割り当てを無効または削除する方法などについては、「割り当ての変更と削除」を参照してください。

ディスク割り当てを監視できます。割り当てコマンドを使用することによりシステム管理者は、ファイルシステムでの割り当てを表示したり、割り当てを超えて使用しているユーザーを検索したりできます。これらのコマンドの使用方法については、「割り当てのチェック」を参照してください。

定型作業の自動実行

多くの定型的なシステムイベントは、自動的に実行されるように設定できます。それらの作業のなかには、定期的に実行する必要があるものがあります。その他の作業は、1 回しか実行する必要がありません。大部分は、夜間や週末などの就業時間外に実行できます。

この節では、crontabat という 2 つのコマンドについて説明します。これらのコマンドでは、ピーク時間帯を避けて、または固定スケジュールに従って繰り返し実行して、定型的なコマンドが自動的に実行されるようにスケジュールすることができます。crontab は繰り返し実行されるコマンドをスケジュールし、at は 1 回実行されるコマンドをスケジュールします。

反復ジョブのスケジューリング (crontab)

定型的なシステム管理用コマンドは、crontab コマンドを使用して、毎日、毎週、または毎月それぞれ 1 回ずつ実行するようにスケジュールできます。

毎日 1 回の crontab によるシステム管理作業には次のようなものがあります。

毎週 1 回の crontab システム管理作業には次のようなものがあります。

毎月 1 回の crontab システム管理作業には次のようなものがあります。

上記に加えて、連絡事項の通知の転送やバックアップファイルの削除や、さらに他の定型的システム作業を実行するように crontab コマンドをスケジュールすることもできます。

1 つのジョブのスケジューリング (at)

特定の 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 ファイルに入れます。

次に、アカウンティングが機能する概要を次に示します。

  1. システムを起動してからシャットダウンするまでの間に、システムの利用に関する (ユーザーログイン、実行されたプロセス、データの格納などの) raw データがアカウンティングファイルに収集されます。

  2. 定期的に (通常 1 日に 1 回)、/usr/lib/acct/runacct プログラムが各種のアカウンティングファイルを処理して、累積要約ファイルと日次アカウンティングレポートを生成します。この日次レポートは /usr/lib/acct/prdaily プログラムによって出力されます。

  3. runacct によって生成される累積要約ファイルは、monacct プログラムを実行して月に 1 回処理され出力できます。monacct によって生成される要約レポートは、月次またはその他の会計期間ベースのユーザーに対する効率的な課金手段になります。

アカウンティングソフトウェアを設定する手順については、第 22 章「アカウンティングの設定と管理作業」を参照してください。アカウンティングの機能の参照情報については、第 23 章「システムアカウンティングの参照情報」を参照してください。

第 18 章 システム情報の確認と変更

この章では、最も一般的なシステム情報を確認および変更するために必要な手順を示します。

コマンドを使用したシステム情報の表示

表 18-1 に、一般的なシステム情報を表示するためのコマンドを示します。

表 18-1 システム情報を表示するためのコマンド

コマンド 

表示できるシステム情報 

showrev(1M)

ホスト名、ホスト ID 番号、リリース、カーネルアーキテクチャ、アプリケーションアーキテクチャ、ハードウェアプロバイダ、ドメイン、およびカーネルのバージョン 

uname(1)

オペレーティングシステム名、リリース、バージョン、ノード名、ハードウェア名、プロセッサタイプ 

hostid(1)

ホスト ID 番号 

prtconf(1M)

インストールされているメモリー量 

date(1)

日付と時刻 

システムとソフトウェアのリリース情報を表示する方法

特定のシステムとソフトウェアのリリース情報を表示するには、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 コマンドを使用します。

$ uname[-a] 

-a

オペレーティングシステム名の他に、システムノード名、オペレーティングシステムのリリース、オペレーティングシステムのバージョン、ハードウェア名、プロセッサタイプも表示する 

例 - 一般的なシステム情報を表示する

次の例は、uname コマンドの出力を示します。

$ uname
SunOS
$ uname -a
SunOS pluto 5.7 Generic sun4m sparc SUNW,SPARCstation-5
$

システムのホスト ID 番号を表示する方法

ホスト ID 番号を 16 進形式で表示するには、hostid コマンドを使用します。

$ hostid

例 - システムのホスト ID 番号を表示する

次の例は、hostid コマンドの出力を示します。

$ hostid
7725ac42

システムにインストールされているメモリーを表示する方法

システムにインストールされているメモリー量を表示するには、prtconf コマンドを使用します。

$ prtconf [| grep Memory]

grep Memory

コマンド出力をメモリー情報だけに限定する 

例 - システムにインストールされているメモリーを表示する

次の例は、prtconf コマンドの出力を示します。

# prtconf | grep Memory
Memory size: 56 Megabytes

日付と時刻を表示する方法

システムクロックに従った現在の日付と時刻を表示するには、date コマンドを使用します。

$ date

例 - 日付と時刻を表示する

次の例は、date コマンドの出力を示します。

$ date
Thu Feb 26 10:19:19 MST 1998
$

コマンドを使用したシステム情報の変更

表 18-2 に、一般的なシステム情報を変更できるコマンドのマニュアルページと説明を示します。

表 18-2 システム情報を変更するためのコマンド

コマンド 

変更できるシステム情報 

rdate(1M)

日付と時刻を別のシステムの日付と時刻に合わせる 

date(1)

日付と時刻を自分の指定に合わせる 

これらのコマンドを使用することにより、システムの日付と時刻を設定して、サーバーなどの別のシステムの日付と時刻に同期させることができます。また、新しい日付と時刻を指定して、システムの日付と時刻を変更することもできます。

その日のメッセージ (MOTD) は /etc/motd に置かれています。この機能を使用すると、ログイン時のシステムメッセージによりすべてのユーザーに通知や問い合わせを送ることができます。ただし、この機能を使用するときは、常に必要なメッセージだけを送ります。メッセージファイルは定期的に編集し、無用になったメッセージを削除するようにしてください。

/etc/system ファイルを編集することにより、次の作業が行えます。

ネットワークでの Network Time Protocol (NTP) の使用

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 を使用する場合、次のことを考慮してください。

ネットワーク時間 (NTP) サーバーを設定する方法

  1. スーパーユーザーになります。

  2. /etc/inet ディレクトリに移動します。

  3. ntp.server ファイルを ntp.conf ファイルにコピーします。

    # cp ntp.server ntp.conf
    
  4. /etc/init.d ディレクトリに移動します。

  5. xntpd デーモンを起動します。

    # ./xntpd start
    

ネットワーク時間 (NTP) クライアントを設定する方法

  1. スーパーユーザーになります。

  2. /etc/inet ディレクトリに移動します。

  3. ntp.client ファイルを ntp.conf ファイルにコピーします。

    # cp ntp.client ntp.conf
    
  4. /etc/init.d ディレクトリに移動します。

  5. xntpd デーモンを起動します。

    # ./xntpd start
    

他のシステムの日付と時刻に同期させる方法

  1. スーパーユーザーになります。

  2. 日付と時刻を設定し直して他のシステムと同期させるには、rdate コマンドを使用します。

    # rdate other-system-name
    

    other-system-name

    別のシステム名 

  3. 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

システムの日付と時刻を手作業で設定する方法

  1. スーパーユーザーになります。

  2. 次のように新しい日付と時刻を入力します。

    # date mmddHHMM[[cc]yy]
    

    mm

    月。2 桁を使用 

    dd

    日。2 桁を使用 

    HH

    時。2 桁で 24 時間制を使用 

    MM

    分。2 桁を使用 

    cc

    世紀。2 桁を使用 

    yy

    年。2 桁を使用 

  3. オプションを指定せずに date コマンドを実行し、システムの日付と時刻をチェックして、システムの日付と時刻が正しくリセットされていることを確認します。

    出力は、他のシステムと同じ日付と時刻を示します。

例 - システムの日付と時刻を手作業で設定する

次の例は、date コマンドを使用して手作業でシステムの日付と時刻を設定する方法を示します。

# date
Thu Feb 26 10:20:56 MST 1998
# date 022610221998

その日のメッセージを設定する方法

  1. スーパーユーザーになります。

  2. エディタを使って、/etc/motd ファイルを開きます。

  3. テキストを編集して、スペース、タブ、復帰改行を含めて、ユーザーログインプロセスの一部として表示されるメッセージを挿入します。

  4. ファイルを閉じて変更結果を保存します。

  5. /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... 

ユーザー当たりのプロセス数を設定する方法

  1. エディタを使用して、/etc/system ファイルを開きます。

  2. /etc/system ファイルに次の行を追加します。

    set maxuprc=value
    

    value

    1 人のユーザーが同時に実行できるプロセス数 

  3. /etc/system ファイルを閉じて、変更結果を保存します。

  4. maxuprc の値が変更されていることを確認します。

    # grep maxuprc /etc/system
    set maxuprc=100
  5. システムをリブートします。

例 - ユーザー当たりのプロセス数を設定する

次の例は、各ユーザーが 100 プロセスを実行できるようにする場合に、/etc/system ファイルに追加する行を示します。

set maxuprc=100

疑似 tty 数を増加する方法

  1. エディタを使用して、/etc/system ファイルを開きます。

  2. /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 倍になる。

  3. /etc/system ファイルを閉じて変更結果を保存します。

  4. pt_cnt の値が変更されていることを確認します。

    # grep pt_cnt /etc/system
    set pt_cnt=256
  5. 次のように入力して、リブート時にシステムを再構成するようにします。

    $ touch /reconfigure
    
  6. システムをリブートします。

例 - 疑似 tty 数を増加する

次の例は、疑似 tty 数を 128 に増加します。

set pt_cnt=128
set npty=128
set sad_cnt=256
set nautopush=128

共有メモリーセグメント数を増加する方法

  1. エディタを使用して、/etc/system ファイルを開きます。

  2. 次の変数を追加して、共有メモリーセグメントを増やします。

    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
    
    shmsys:shminfo_shmmax

    共有メモリーセグメントの最大サイズ 

    shmsys:shminfo_shmmin 

    共有メモリーセグメントの最小サイズ 

    shmsys:shminfo_shmmni 

    共有メモリー識別子数 

    shmsys:shminfo_shmseg 

    プロセスごとのセグメント数 

    semsys:seminfo_semmap 

    セマフォマップ中のエントリ数 

    semsys:seminfo_semmni 

    セマフォ識別子数 

    semsys:seminfo_semmns

    システム中のセマフォ数 

    semsys:seminfo_semmsl

    ID ごとの最大セマフォ数 

    semsys:seminfo_semmnu 

    undo 機能を使用するプロセス数

    semsys:seminfo_semume

    プロセスごとの最大 undo 構造数

  3. /etc/system ファイルを閉じて変更結果を保存します。

  4. 共有メモリーの値が変更されていることを確認します。

    # grep shmsys /etc/system
    
  5. リブートします。

例 - 共有メモリーセグメントを増加する

次の共有メモリー値は、大きなデータベースアプリケーションを実行するために、大容量のメモリー (たとえば 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

第 19 章 ディスク使用の管理

この章では、使用していないファイルや大きなディレクトリを見つけることにより、ディスク容量を最適化する方法を示します。この章で説明する手順は次のとおりです。

使用されているブロックとファイルの表示

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) のマニュアルページを参照してください。

ファイルサイズを表示する方法

  1. 確認したいファイルがあるディレクトリに移動します。

  2. 次のように入力して、ファイルのサイズを表示します。

    $ ls [-l] [-s]

    -l

    長形式でファイルとディレクトリのリストを表示し、それぞれのサイズをバイト単位で示す 

    -s

    ファイルとディレクトリのリストを表示し、それぞれのサイズをブロック単位で示す 

例 - ファイルサイズを表示する

次の例は、lastlogwtmpwtmpx/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%

サイズの大きなファイルを見つける方法

  1. サイズの大きなファイルを探したいディレクトリに移動します。

  2. 次のように入力して、ファイルのサイズをブロック単位に、最も大きいものから降順に表示します。

    $ ls -s | sort -nr | more
    

    sort -nr

    ファイルのリストをブロックサイズの最も大きなものから降順に並べる 

例 - サイズの大きなファイルを見つける

次の例では、wtmpxlastlog/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

ローカル UFS ファイルシステムのユーザー割り当てを表示する方法

  1. スーパーユーザーになります。

  2. 次のように入力して、ユーザー、ディレクトリまたはファイルシステム、1024 バイト単位のブロック数を表示します。

    # quot [-a] [filesystem]

    -a

    マウントされている各 UFS ファイルシステムの全ユーザーと 1024 バイト単位のブロック数を表示する 

    filesystem

    UFS ファイルシステム。ユーザーと使用されているブロック数が表示される 


    注 -

    quot コマンドは、ローカル UFS ファイルシステムに対してだけ使用できます。


例 - ローカル 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 ディレクトリ内の最新のファイルを見つけるかを示しています。sulogmessagesutmpxwtmpxutmplastlog が最も最近に作成または変更されたファイルです。これは、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

古いファイルと使用されていないファイルを見つけて削除する方法

  1. スーパーユーザーになります。

  2. 次のように入力して、指定した日数の間アクセスのないファイルを見つけて、ファイルにそれらのリストを書き込みます。

    # find directory  -type f [-atime +nnn] [-mtime +nnn] -print > filename
    

    directory

    ファイルを調べたいディレクトリ。この下のディレクトリも調べられる 

    -atime +nnn

    指定した日数の間アクセスのないファイルを見つける 

    -mtime +nnn

    指定した日数の間変更のないファイルを見つける 

    filename

    使用されていないファイルのリストが書き込まれるファイル名

  3. 上の手順でリストに書き込んだ使用されていないファイルを削除します。

    # 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`

一時ディレクトリを一度にクリアする方法

  1. スーパーユーザーになります。

  2. 次のように入力して、/var/tmp ディレクトリに移動します。

    # cd /var/tmp
    

    注意 - 注意 -

    次の手順を実行する前に、正しいディレクトリにいることを確認してください。次の手順はカレントディレクトリ内のすべてのファイルを削除します。


  3. カレントディレクトリ内のファイルとサブディレクトリを削除します。

    # rm -r *
    
  4. 一時サブディレクトリやファイル、または古いサブディレクトリやファイル (たとえば、maillost+foundquotas など) が入っている他のディレクトリに変更し、上の手順 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 ファイルを見つけて削除する方法

  1. スーパーユーザーになります。

  2. core ファイルの探索を始めたいディレクトリに移動します。

  3. 次のように入力して、ディレクトリとサブディレクトリ内のすべての core ファイルを見つけて削除します。

    # find . -name core -exec rm {} ¥;
    

例 - core ファイルを見つけて削除する

次の例は、どのように find コマンドを使用して jones のユーザーアカウントから core ファイルを見つけて削除するかを示します。

# cd /home/jones
# find . -name core -exec rm {} ¥;

クラッシュダンプファイルを削除する方法

クラッシュダンプファイルは非常に大きくなる可能性があります。したがって、必要以上に長期間保存しないでください。

  1. スーパーユーザーになります。

  2. 次のように入力して、クラッシュダンプファイルが格納されているディレクトリに変更します。

    # cd /var/crash/system
    

    system

    クラッシュダンプファイルを生成したシステム 


    注意 - 注意 -

    次の手順を実行する前に、正しいディレクトリにいることを確認してください。次の手順はカレントディレクトリ内のすべてのファイルを削除します。


  3. クラッシュダンプファイルを削除します。

    # rm *
    
  4. クラッシュダンプファイルが削除されていることを確認します。

    # ls
    

例 - クラッシュダンプファイルを削除する

次の例は、システム venus からどのようにクラッシュダンプファイルを削除するかと、クラッシュダンプファイルが削除されているかを確認する方法を示します。

# cd /var/crash/venus
# rm *
# ls
#

第 20 章 ディスク割り当ての管理

この章では、ディスクの割り当てを設定し管理する方法を示します。この章で説明する手順は次のとおりです。

ディスク割り当ての使用

ディスク割り当てを使用することによって、システム管理者は、個々のユーザーが使用できるディスク容量と i ノード数 (おおよそファイルの数に相当) を制限して、UFS ファイルシステムのサイズを制御できます。このため、ディスク割り当ては、特に、ユーザーのホームディレクトリが存在するファイルシステムで便利です。

設定後、ディスク割り当ては、ユーザーが使用するディスク容量や i ノード数に合わせて変更できます。さらに、ディスク割り当ては、システムの要求の変化に応じて、追加または削除できます。ディスク割り当て、またはディスク割り当てを超えることができる時間を変更する手順、個々のディスク割り当てを無効にする手順、あるいはディスク割り当てをファイルシステムから削除する手順については、「割り当ての変更と削除」を参照してください。

ディスク割り当ての状態を監視できます。ディスク割り当てコマンドを使用すると、管理者は、ファイルシステム上のディスク割り当てについての情報を表示したり、ディスク割り当てを超えているユーザーを検索したりできます。これらのコマンドの使い方については、「割り当てのチェック」を参照してください。

弱い制限値と強い制限値

弱い制限値と強い制限値の両方を設定できます。システムは、ユーザーが自分の強い制限値を超えることを許可しません。しかし、システム管理者は、ユーザーが一時的に超えることができる、弱い制限値 (「ディスク割り当て」と呼ぶこともある) を設定できます。弱い制限値は、強い制限値より小さくなければなりません。

いったんユーザーが弱い制限値を超えると、タイマーが起動します。タイマーが動いている間、ユーザーは弱い制限値を超えて操作できます。しかし、強い制限値は超えることができません。再びユーザーが弱い制限値を下回ると、タイマーはリセットされます。しかし、タイマーが期限切れになったときに、まだユーザーの使用率が弱い制限値を超えていた場合、弱い制限値は、強い制限値として実施されます。デフォルトでは、弱い制限値のタイマーは 7 日です。

タイマーの値は、repquota コマンドと quota コマンドを実行したときの timeleft フィールドに示されています。

たとえば、あるユーザーの弱い制限値が 10,000 ブロックで、強い制限値が 12,000 ブロックであると仮定します。そのユーザーのブロック使用率が 10,000 ブロックを超えて、タイマーも期限切れになった (7 日を超えた) 場合、そのユーザーは自分の使用率が弱い制限値を下回るまで、それ以上のディスクブロックをそのファイルシステム上に割り当てることはできません。

ディスクブロックとファイル制限の相違

ファイルシステムがユーザーに提供する資源は、2 つあります。(データの) ブロックと (ファイルの) i ノードです。各ファイルは、1 つの i ノードを使用します。ファイルデータは、データブロック内に格納されます (通常は、1K バイトブロック)。

ディレクトリがないと仮定すると、ユーザーは、ブロックを使用しなくても、すべて空のファイルを作成することによって、自分の i ノードディスク割り当てを超えることができます。また、ユーザーは単純に、ユーザーのディスク割り当て中のすべてのデータブロックを消費するぐらいの大きなファイルを 1 つだけ作成することによって、自分のブロックディスク割り当てを超えることができます。

ディスク割り当ての設定

ディスクの割り当てを設定することにより、ユーザーが利用できるディスク容量と、i ノードの数 (おおよそファイルの数に相当) を制限できます。これらの割り当ては、ファイルシステムがマウントされるたびに自動的に有効になります。この節ではファイルシステム用にディスク割り当てを構成し、設定し、有効にする手順を説明します。

ディスク割り当ての設定には、次の一般的な手順が含まれます。

  1. システムをリブートしてファイルシステムをマウントするごとにディスク割り当てが実施されるように、一連のコマンドを使用して、ファイルシステムでディスク割り当てを利用できるようにするための準備をします。エントリは、/etc/vfstab ファイルに追加しなければなりません。また、quotas ファイルは、ファイルシステムの一番上のディレクトリで作成しなければなりません。

  2. 1 人のユーザーに対してディスク割り当てを作成した後、そのディスク割り当てをプロトタイプとして、他のユーザーのディスク割り当てを設定できます。

  3. ディスク割り当てを実際に有効にする前に、他のコマンドを使用して、整合性をチェックします。このチェックでは、提案したディスク割り当てと現在のディスク使用率を比較して、矛盾しないことを確認します。

  4. 最後に、他のコマンドを使用して、1 つまたは複数のファイルシステム全体のディスク割り当てを有効にします。

上記の手順により、ファイルシステムがマウントされるたびに、そのファイルシステム上でディスク割り当てが自動的に有効になります。上記手順の特定の情報については、「割り当ての設定」を参照してください。

表 20-1 で、ディスク割り当てを設定するコマンドを説明します。

表 20-1 割り当てを行うコマンド

コマンド 

機能 

edquota(1M)

各ユーザーに対する i ノード数とディスク容量のハード制限とソフト制限を設定する 

quotacheck(1M)

マウントされている各 UFS ファイルシステムを調べ、ファイルシステムのディスク割り当てファイルにある情報と比較し、矛盾があれば報告する 

quotaon(1M)

指定したファイルシステムの割り当てを有効にする 

quota(1M)

マウントされているファイルシステムのユーザーの割り当てを表示し、割り当てが正しく設定されていることを確認する 

割り当て設定のガイドライン

ユーザーの割り当てを設定する前に、各ユーザーに割り当てるディスク容量の大きさとファイル数を決定する必要があります。ファイルシステムの合計領域サイズを超えないようにする場合は、ファイルシステムの合計サイズをユーザー数に等分すればよいでしょう。たとえば、3 人のユーザーが 100M バイトのスライスを共有し、それぞれが同じディスク容量のサイズを必要とする場合は、各ユーザーに 33M バイトずつ割り当てます。すべてのユーザーがそれぞれに割り当て制限を押し上げることがないような環境では、割り当ての合計がファイルシステムの合計サイズを超えるように個々の割り当てを設定することも可能です。たとえば、3 人のユーザーが 100M バイトのスライスを共有する場合は、それぞれに 40M バイトを割り当ててもよいということです。

あるユーザーについて edquota コマンドを使用して割り当てを決定すると、同じファイルシステム上の他のユーザーにも同じ割り当てプロトタイプとして利用できます。

UFS ファイルシステムの割り当てを構成し、各ユーザーに対する割り当てを終了したら、実際に割り当てを有効にする前に、quotacheck コマンドを使用して整合性をチェックしてください。システムがリブートされる機会がそれほど多くない場合、quotacheck を定期的に実行するようお勧めします。

edquota により設定した割り当ては、quotaon コマンドを使用して有効にしなければ強制的に設定されません。割り当てファイルを正しく構成したら、システムがリブートし、そのファイルシステムがマウントされるたびに、割り当ては自動的に有効になります。

割り当ての設定

表 20-2 作業マップ: 割り当ての設定

作業 

説明 

手順の説明 

1. ファイルシステムの割り当ての構成 

/etc/vfstab を編集して、ファイルシステムがマウントされるたびに割り当てが有効になるようにする。また、quotas ファイルを作成する。

「割り当て用にファイルシステムを構成する方法」

2. 1 ユーザー用の割り当ての設定 

edquota を使用して 1 ユーザーアカウント用にディスクと i ノードの割り当てを行う。

「1 ユーザー用の割り当てを設定する方法」

3. 複数ユーザー用の割り当ての設定 

オプション。edquota を使用して、その他のユーザーアカウント用にプロトタイプの割り当てを適用する。

「複数ユーザーに対して割り当てを設定する方法」

4. 整合性のチェック 

quotacheck を使用して、1 つまたは複数のファイルシステムの整合性について、現在の使用状況とディスクの割り当てを比較する。

「割り当ての整合性を確認する方法」

5. 割り当てを有効にする 

quotaon を使用して、1 つまたは複数のファイルシステムの割り当てを有効にする。

「割り当てを有効にする方法」

割り当て用にファイルシステムを構成する方法

  1. スーパーユーザーになります。

  2. エディタを選んで /etc/vfstab ファイルを編集します。割り当てを設定しようとする各 UFS ファイルシステムに対して「mount options」フィールドに rq を追加します。

  3. /etc/vfstab ファイルを閉じて、変更結果を保存します。

  4. 割り当てを格納しようとするファイルシステムの最上位ディレクトリに変更します。

  5. 次のように入力して、quotas というファイルを作成します。

    # touch quotas
    
  6. 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

1 ユーザー用の割り当てを設定する方法

  1. スーパーユーザーになります。

  2. 次のように入力して割り当てエディタを使用して、quotas ファイルが最上位ディレクトリにある各マウント済み UFS ファイルシステムに対して、1 行の割り当て情報を含む一時ファイルを作成します。

    # edquota username
    

    username

    割り当てを設定しようとするユーザー名 

  3. 1K バイトディスクブロック数の弱い制限値と強い制限値、および i ノード数の弱い制限値と強い制限値を、それぞれ 0 (デフォルト) から各ファイルシステム用に指定されている割り当て値に変更します。

  4. エディタを終了して、変更結果を保存します。

  5. ユーザーの割り当てを設定できたかどうかを確認するには、次のように quota コマンドを使用します。

    # quota -v username
    

    -v

    ディスク割り当てがある、マウント済みのファイルシステム上の、ユーザーのディスク割り当て情報を表示する 

    username

    ディスク割り当て制限を表示するユーザー名を指定する 

例 - 1 ユーザー用の割り当てを設定する

次の例は、/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)

複数ユーザーに対して割り当てを設定する方法

  1. スーパーユーザーになります。

  2. 次のように割り当てエディタを使用して、すでにプロトタイプユーザー用に設定した割り当てを指定するその他のユーザーに適用します。

    # edquota -p prototype-user username ...
    

    prototype-user

    すでに割り当てを設定してあるアカウントのユーザー名 

    username ..

    1 人以上の追加アカウントのユーザー名を指定する 

例 - 複数ユーザーに対してプロトタイプ割り当てを設定する

次の例は、ユーザー bob に対して設定されている割り当てをユーザー maryjohn に適用します。

# edquota -p bob mary john

割り当ての整合性を確認する方法


注 -

ディスクのデータの正確さを保つには、quotacheck コマンドを実行するとき、チェックするファイルシステムが他のユーザーによって使用できないようにしてください。システムをリブートするとき、quotacheck コマンドが自動的に実行されます。


  1. スーパーユーザーになります。

  2. 次のように 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)

割り当てを有効にする方法

  1. スーパーユーザーになります。

  2. 次のように 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 コマンドを使用して、割り当てが適用されているファイルシステム上の個々のユーザーの割り当てとディスク使用量を表示できます。

  1. スーパーユーザーになります。

  2. 次のように入力して、割り当てが有効にされているマウント済みファイルシステムのユーザー割り当てを表示します。

    # 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. スーパーユーザーになります。

  2. ディスクがまったく使用されていなくても、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 コマンドを使用すると、この割り当ての期間制限を変更できます。

  1. スーパーユーザーになります。

  2. 次のように割り当てエディタを使用して、期間の弱い制限値を含む一時ファイルを作成します。

    # edquota -t
    
  3. 期間制限を、0 (デフォルト) から数値とキーワード monthweekdayhourmin、または sec を使用して指定する値に変更します。

  4. 一時ファイルを閉じて、変更結果を保存します。


    注 -

    この手順は、現在のディスク割り当て違反者には影響しません。


例 - 期間の弱い制限値のデフォルトを変更する

次の例は、/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

1 ユーザーの割り当てを変更する方法

  1. スーパーユーザーになります。

  2. 次のように割り当てエディタを使用して、quotas ファイルがそれぞれの最上位ディレクトリにある各マウント済みファイルシステムに対して 1 行ずつエントリが入っている一時ファイルを開きます。

    # edquota username
    

    username

    割り当てが変更されるユーザー名 


    注意 - 注意 -

    edquota コマンドの引数として複数のユーザーを指定できますが、表示される情報にはどのユーザーのものなのか示されないので、混乱を招く恐れがあります。


  3. 1K バイトディスクブロック数の弱い制限値と強い制限値、および i ノード数の弱い制限値と強い制限値を入力します。

  4. エディタを終了して、変更結果を保存します。

  5. ユーザーの割り当てが正しく変更できたかどうかを確認するには、次のように quota コマンドを使用します。

    # quota -v username
    

    -v

    ディスク割り当てが有効にされている、すべてのマウント済みのファイルシステムについて、ユーザーのディスク割り当て情報を表示します 

    username

    割り当てを確認したいユーザー名 

例 - 1 ユーザーの割り当てを変更する

次の例は、/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

1 ユーザーの割り当てを無効にする方法

  1. スーパーユーザーになります。

  2. 次のように割り当てエディタを使用して、quotas ファイルがその最上位ディレクトリにある各マウント済みファイルシステムに対して 1 行の割り当て情報を含む一時ファイルを作成します。

    # edquota username
    

    username

    割り当てを無効にしようとするユーザー名 


    注意 - 注意 -

    edquota コマンドの引数として複数のユーザーを指定できますが、表示される情報にはどのユーザーのものなのか示されないので、混乱を招く恐れがあります。


  3. 1K バイトディスクブロック数の弱い制限値と強い制限値、および i ノード数の弱い制限値と強い制限値を 0 (ゼロ) に変更します。


    注 -

    必ずこれらの値を 0 (ゼロ) に変更してください。テキストファイルから行を削除してはいけません。


  4. 割り当てエディタを終了して、変更結果を保存します。

  5. ユーザーの割り当てを無効にできたかどうかを確認するには、次のように quota コマンドを使用します。

    # quota -v username
    

    -v

    ディスク割り当てが有効にされている、すべてのマウント済みのファイルシステムについて、ユーザーのディスク割り当て情報を表示します 

    username

    割り当てを確認しようとするユーザー名またはユーザー識別番号 (UID) 

例 - 1 ユーザーの割り当てを無効にする

次の例は、/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)

割り当てを無効にする方法

  1. スーパーユーザーになります。

  2. 次のように入力して、割り当てを無効にします。

    # quotaoff [ -v ] -a | filesystem ...
    

    -v

    (省略可能) 詳細形式オプション 

    -a

    全ファイルシステムの割り当てを無効にする 

    filesystem1, 2, 3 ...

    指定する 1 つ以上のファイルシステムの割り当てを無効にする 

例 - 割り当てを無効にする

次の例は、/export/home ファイルシステムの割り当てを無効にします。

# quotaoff -v /export/home
/export/home: quotas turned off

第 21 章 システムイベントのスケジュール設定

この章では、crontab および at コマンドを使用して、ルーチンまたは 1 度限りのシステムイベントをスケジュールする方法を示します。さらに、cron.denycron.allowat.deny の各ファイルを使用して、これらのコマンドへのアクセスを制御する方法も説明します。

この章で説明する手順は次のとおりです。

システムイベントのスケジューリング用コマンド

システムイベントは、crontab コマンドを使用して定期的に繰り返し実行するようにスケジュールできます。また、at コマンドを使用して、特定のシステムイベントを指定の時刻に実行するようにスケジュールすることもできます。表 21-1crontabat の他に、これらのコマンドへのアクセスを制御できるファイルを示します。

表 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

繰り返されるシステムイベントのスケジューリング (cron)

以降の各項で、crontab ファイルをどのように作成、編集、表示、削除するか、さらに、それらのファイルへのアクセスをどのように制御するかを説明します。

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 ファイルは、それらの中に作成されるユーザーのアカウントに基づいて、bobmarysmithjones などのように命名されます。

デフォルトの crontab ファイルの他に、ユーザーは crontab ファイルを作成してそれぞれユーザー自身のシステムイベントをスケジュールできます。root または他のユーザーが所有する crontab ファイルにアクセスするには、スーパーユーザーの特権が必要です。

crontab ファイルを作成、編集、表示、削除する手順については、「システムイベントのスケジューリング用コマンド」で説明します。

cron デーモンのスケジューリング

cron デーモンは crontab コマンドの自動スケジューリングを行います。このデーモンの機能は、通常 15 分おきに、/var/spool/cron/crontabs を調べて crontab ファイルがないか確認します。新しい crontab ファイルがないか、または既存の crontab が変更されていないかを確認し、いずれかがあった場合は、ファイル内のリストから実行時刻を読み取り、コマンドが正しい時刻に実行されるよう指示します。

ほとんど同様に、cron デーモンは /var/spool/cron/atjobs ディレクトリ内の at ファイルのスケジューリングを制御します。

crontab ファイルエントリの構文

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 ファイルの最も単純な作成方法は、crontab -e コマンドを使用して、EDITOR 環境変数によって定義されているテキストエディタを呼び出すものです。この変数を設定していない場合は、crontab はデフォルトのエディタ ed を使用します。EDITOR 環境変数に使い慣れたエディタを定義します。次の例は、エディタが定義されているかどうかを確認する方法と、vi をデフォルトとして設定する方法を示しています。

$ which $EDITOR
$ 
$ EDITOR=vi
$ export EDITOR

crontab ファイルを作成すると、自動的に /var/spool/cron/crontabs ディレクトリ内に格納され、作成者のユーザー名が命名されます。スーパーユーザー特権があれば、他のユーザーや root の crontab ファイルを作成または編集できます。

crontab コマンドエントリは、crontab ファイルエントリの構文」の説明に従って入力してください。

crontab ファイルを作成または編集する方法

  1. エディタを使用できることを確認します。

  2. (省略可能) root または他のユーザーが所有する crontab ファイルを作成または編集する場合は、スーパーユーザーになります。

  3. 次のように入力して、新しい crontab ファイルを作成するか、既存の crontab ファイルを編集します。

    $ crontab -e [username]

    username

    他のユーザーのアカウント名。作成または編集するにはスーパーユーザーの権限が必要 


    注意 - 注意 -

    誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの割り込みキーを押してください。割り込みキーを押すと、変更結果を保存しないでエディタを終了できます。この時点でファイルの編集を終了して変更結果を保存すると、既存の crontab ファイルが空のファイルで上書きされてしまいます。


  4. crontab ファイルエントリの構文」で説明している構文に従って、コマンド行を crontab ファイルに追加します。

  5. crontab ファイルを閉じて、変更結果を保存します。

    crontab ファイルは /var/spool/cron/crontabs に格納されます。

  6. crontab -l コマンドを使用して、crontab ファイルを確認します。

    # crontab -l [username]

例 - crontab ファイルを作成または編集する

次の例は、他のユーザーのための 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 ファイルを確認する方法

特定のユーザーの crontab ファイルがあるかどうかを確認するには、/var/spool/cron/crontabs ディレクトリで ls -l コマンドを使用します。たとえば、次の表示はユーザー smithjonescrontab ファイルがあることを示しています。

$ 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 ファイルの表示

crontab -l コマンドは、cat コマンドが他のファイルタイプの内容を表示するのとまったく同様に、使用しているユーザーの crontab ファイルの内容を表示します。このコマンドを使用するために、ディレクトリを (crontab ファイルが入っている) /var/spool/cron/crontabs に変更する必要はありません。

デフォルトでは、crontab -l コマンドは自分自身の crontab ファイルを表示します。他のユーザーの crontab ファイルは、スーパーユーザーでなければ表示できません。

crontab ファイルを表示する方法

  1. (省略可能) root または他のユーザーの crontab ファイルを表示する場合は、スーパーユーザーになります。

  2. 次のように入力して、crontab ファイルを表示します。

    $ crontab -l [username]

    username

    他のユーザーのアカウント名。作成または編集するにはスーパーユーザーの権限が必要 


    注意 - 注意 -

    誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの割り込みキーを押してください。割り込みキーを押すと、変更結果を保存せずに 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

crontab ファイルの削除

デフォルトでは、rm コマンドを使用して誤って crontab ファイルを削除してしまうことがないように、crontab ファイルは保護されています。crontab ファイルを削除する場合は、rm コマンドではなく crontab -r コマンドを使用してください。

デフォルトでは、crontab -r は、このコマンドを実行したユーザーの crontab を削除します。root またはその他のユーザーの crontab を削除するには、スーパーユーザーにならなければなりません。

このコマンドを使用するには、ディレクトリを (crontab ファイルが入っている) /var/spool/cron/crontabs に変更する必要はありません。

crontab ファイルを削除する方法

  1. (省略可能) root または他のユーザーの crontab ファイルを削除するには、スーパーユーザーになります。

  2. 次のように入力して、crontab ファイルを削除します。

    $ crontab -r [username]

    username

    他のユーザーのアカウント名。作成または編集するにはスーパーユーザーの権限が必要 


    注意 - 注意 -

    誤ってオプションを指定しないで crontab コマンドを入力した場合は、使用しているエディタの割り込みキーを押してください。割り込みキーを押すと、変更結果を保存せずに crontab コマンドを終了できます。この時点でファイルの編集を終了して変更結果を保存すると、既存の crontab ファイルが空のファイルで上書きされてしまいます。


  3. crontab ファイルが削除されていることを確認します。

    # ls /var/spool/cron/crontabs
    

例 - crontab ファイルを削除する

次の例では、ユーザー smithcrontab -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

crontab へのアクセスの制御

cron.denycron.allow という /etc/cron.d ディレクトリ内の 2 つのファイルを使用して、crontab へのアクセスを制御できます。これらのファイルによって、指定したユーザーだけが、それぞれ自分の crontab ファイルの作成、編集、表示、または削除などの crontab 関連操作を実行できるようにします。

cron.deny および cron.allow ファイルは、それぞれ 1 行に 1 ユーザー名が入ったリストからなります。これらのアクセス制御用ファイルは、次のように連携して機能を果たします。

cron.denycron.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 コマンドにアクセスできます。

crontab へのアクセスを拒否する方法

  1. スーパーユーザーになります。

  2. エディタを使用して /etc/cron.d/cron.deny ファイルを編集し、crontab コマンドを使用させないユーザー名を次のように 1 行に 1 つずつ追加します。

    daemon
    bin
    smtp
    nuucp
    listen
    nobody
    noaccess
    username1
    username2
    username3
    .
    .
    .
  3. /etc/cron.d/cron.deny ファイルを閉じて、変更結果を保存します。

  4. /etc/cron.d/cron.deny ファイルを確認します。

    # cat /etc/cron.d/cron.deny
    

crontab へのアクセスを特定のユーザーに限定する方法

  1. スーパーユーザーになります。

  2. エディタを使用して /etc/cron.d/cron.allow ファイルを作成します。

  3. 次のように、crontab コマンドの使用を許可するユーザー名を 1 行に 1 つずつ入力します。

    root
    username1
    username2
    username3
    .
    .
    .
    

    このリストには必ず root を追加してください。追加しなければ、スーパーユーザーからの crontab コマンドへのアクセスが拒否されてしまいます。

  4. /etc/cron.d/cron.allow ファイルを閉じて、変更結果を保存します。

例 - crontab へのアクセスを特定のユーザーに限定する

次は、ユーザー visitorjonestempcrontab をアクセスさせない cron.deny ファイルの例です。

$ cat /etc/cron.d/cron.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
jones
temp
visitor

次は cron.allow ファイルの例です。ユーザー smithjoneslproot だけが crontab にアクセスできます。

$ cat /etc/cron.d/cron.allow
root
jones
lp
smith

制限された crontab のアクセスを確認する方法

特定のユーザーが crontab にアクセスできるかどうかを確認するには、そのユーザーのアカウントにログインして、crontab -l コマンドを実行します。

$ crontab -l

そのユーザーが crontab にアクセスできて、すでに crontab ファイルを作成している場合は、その crontab ファイルが表示されます。そのユーザーが crontab にアクセスできるが、crontab ファイルがない場合は、次のようなメッセージが表示されます。

(crontab: crontab ファイルを開けません)

このユーザーは、cron.allow (が存在する場合) に含まれているか、cron.deny に含まれていません。

ユーザーが crontab にアクセスできない場合は、上記の crontab ファイルの有無に関わらず、次のメッセージが表示されます。

(crontab: cron を使用許可されていません)

これは、ユーザーが cron.allow (が存在する場合) に含まれていないか、cron.deny ファイルに含まれていることを意味します。

1 つのシステムイベントのスケジューリング (at)

以降の項では、at(1) コマンドを使用してコマンドやスクリプトなどのジョブを後で特定の時刻に実行するようにスケジュールする方法、それらのジョブを削除または表示する方法、および at コマンドへのアクセスを制御する方法について説明します。

デフォルトでは、ユーザーはそれぞれ自分の at ジョブファイルを作成、表示、または削除できます。root または他のユーザーの at ファイルにアクセスするには、スーパーユーザーの権限が必要です。

at ジョブの実行を依頼すると、at ジョブにジョブ識別番号と .a 拡張子が与えられ、それがファイル名になります。

at コマンドの説明

at ジョブファイルを実行するには、次の手順に従います。

  1. コマンド実行時刻を指定して at ユーティリティを起動します。

  2. 後で実行させるコマンドまたはスクリプトを入力します。


    注 -

    このコマンドまたはスクリプトからの出力が重要な場合は、後で調べられるように必ずファイルに書き込むようにしてください。


たとえば、次の 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 コマンドへのアクセスを制御するファイルを設定できます。at へのアクセスを制御するファイルは /etc/cron.d/at.deny です。ここにはユーザー名が列挙 (1 行に 1 人) されています。このファイルに列挙されているユーザーは、at コマンドにアクセスできません。

Solaris ソフトウェアのインストール時に作成される at.deny ファイルには、次のユーザー名が含まれます。

daemon
bin
smtp
nuucp
listen
nobody
noaccess

スーパーユーザーの特権があれば、このファイルを編集して、at へのアクセスを制限したい他のユーザー名を追加できます。

at ジョブを作成する方法

  1. 次のように、自分のジョブを実行したい時刻を指定して at コマンドを入力し、Return キーを押します。

    $ at [-m] time [date] 

    -m

    ジョブ終了後にメールを送る 

    time

    ジョブをスケジュールしたい時刻の時単位の値。24 時間制を使用しない場合は、am または pm を追加する。midnightnoonnow はキーワードとして使用可能。分単位の値の指定は省略可能

    date

    月または曜日の名前の最初の 3 英字以上、またはキーワード today または tomorrow

  2. at プロンプトに、実行したいコマンドまたはスクリプトを 1 行に 1 つずつ入力します。各行の終わりで Return キーを押すことにより、複数のコマンドを入力できます。

  3. at ユーティリティを終了し、Control-d キーを押して at ジョブを保存します。

    作成できた 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 待ち行列を表示する方法

at 待ち行列で実行を待っているジョブを確認するには、次に示すように atq コマンドを使用します。このコマンドは、その使用者が作成した at ジョブに関する状態情報を表示します。

$ atq

at ジョブを確認する方法

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 ジョブの実行時刻に関する情報を表示するには、次のように at -l コマンドを使用します。

$ at -l [job-id]
-l job-id

状態を確認したいジョブの識別番号 

例 - at ジョブを表示する

次の例は、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 ジョブを削除する方法

  1. (省略可能) root または他のユーザーの at ジョブを削除する場合は、スーパーユーザーになります。

  2. 次のように入力して、at ジョブを実行される前に待ち行列から削除します。

    $ at -r [job-id]
    -r job-id
    

    削除したいジョブの識別番号 

  3. at ジョブを削除できたかどうかを確認するには、at -l (または atq) コマンドを使用して at 待ち行列に残っているジョブを表示します。識別番号を指定したジョブは、このリストに現れてはなりません。

    $ at -l [job-id]

例 - at ジョブを削除する

次の例では、ユーザーが 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 へのアクセスの制御

at.deny ファイルに含まれているユーザーは、at を使用してジョブをスケジュールすることも、at 待ち行列の状態を調べることもできません。

at.deny ファイルは、Solaris ソフトウェアのインストール時にディレクトリ /etc/cron.d に格納されます。そのときに、同じユーザーがこのファイルとデフォルトの cron.deny ファイルの両方に含まれます。

daemon
bin
smtp
nuucp
listen
nobody
noaccess

このファイルを編集するには、スーパーユーザー特権が必要です。

at へのアクセスを拒否する方法

  1. スーパーユーザーになります。

  2. エディタを使用して、/etc/cron.d/at.deny ファイルを開きます。

  3. たとえば次のように、at コマンドを使用させないようにするユーザー名を 1 行に 1 つずつ追加または削除します。

    daemon
    bin
    smtp
    nuucp
    listen
    nobody
    noaccess
    username1
    username2
    username3
    .
    .
    .
  4. /etc/cron.d/at.deny ファイルを閉じて、変更結果を保存します。

例 - at へのアクセスを拒否する

次は、ユーザー smithjonesat にアクセスできないように編集された at.deny ファイルの例です。

$ cat at.deny
daemon
bin
smtp
nuucp
listen
nobody
noaccess
jones
smith

at アクセスの拒否を確認する方法

特定のユーザー名が正しく /etc/cron.d/at.deny に追加されているかどうかを確認するには、そのユーザー名でログインして、at -l コマンドを使用します。そのユーザーが at コマンドにアクセスできない場合は、次のメッセージが表示されます。

# su smith
Password:
$ at -l
at: 使用許可されていません

同様に、そのユーザーが at ジョブの実行を依頼しようとした場合は、次のメッセージが表示されます。

$ at 2:30pm
at: 使用許可されていません

これで、そのユーザーが at.deny ファイルに含まれていることが確認されます。

第 22 章 アカウンティングの設定と管理作業

この章ではアカウンティングを設定し、管理する手順について説明します。

この章で説明する手順は次のとおりです。

システムアカウンティングの設定

システムアカウンティングは、システムがマルチユーザーモード (システム状態 2) のときに実行されるように設定できます。システムアカウンティングには、次の内容が含まれます。

  1. /etc/rc0.d/K22acct および /etc/rc2.d/S22acct ファイルの作成

  2. /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)

会計レポートを生成する。定期的に実行される 

会計期間に基づく 

これらのデフォルトは変更できます。上記エントリをデータベースに追加して、アカウンティングプログラムをインストールした後、アカウンティングは自動的に実行されるようになります。

システムアカウンティングを設定する方法

  1. スーパーユーザーになります。

  2. 必要な場合は、pkgadd または admintool コマンドを使用して、システムに SUNWaccrSUNWaccu パッケージをインストールします。

  3. 次のように入力して、/etc/init.d/acct を実行レベル 2 の起動スクリプトとしてインストールします。

    # ln /etc/init.d/acct /etc/rc2.d/S22acct
    
  4. /etc/init.d/acct を実行レベル 0 の停止スクリプトとしてインストールします。

    # ln /etc/init.d/acct /etc/rc0.d/K22acct
    
  5. プログラム ckpacctrunacct、および monacct が自動的に起動するように、ユーザー admcrontab ファイルを変更します。

    # 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
    
  6. プログラム dodisk が自動的に起動するように、root crontab ファイルを変更します。

    # crontab -e 
    30 22 * * 4 /usr/lib/acct/dodisk
    
  7. エディタを使用して、/etc/acct/holidays を編集して祭日と休日を取り入れます。

  8. システムをリブートするか、次のように入力します。

    # /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 ユーティリティが実行されるたびに、新しいエントリが拾い出されて、全体のアカウンティングレコードにマージされます。

ユーザーに課金する方法

  1. スーパーユーザーになります。

  2. ユーザーに提供されたサービスに対して課金するように設定します。

    # chargefee username amount
    

    username

    課金したいユーザーアカウント 

    amount

    ユーザーに対する課金の単位数 

例 - ユーザーに課金する

次の例は、ユーザーがアカウント print_customer にログインするたびに 10 単位を課金します。

# chargefee print_customer 10

アカウンティング情報の管理

この節では、アカウンティング情報を保守する方法について説明します。

壊れたファイルと wtmp エラーを修復する

UNIX のアカウンティングシステムは堅固ではなく、ファイルが壊れたり失われることがあります。そのようなファイルにも、単に無視してよいものや、バックアップから復元できるものがあります。しかし、特定のファイルは、アカウンティングシステムの完全性を維持するために修復しなければなりません。

wtmp(4) ファイルは、アカウンティングシステムを日常的に運用する上で発生する大部分の問題の原因になっています。日付が変更され、システムがマルチユーザーモードになると、1 組の日付変更レコードが /var/adm/wtmp に書き込まれます。wtmpfix(1M) ユーティリティは、日付変更されたときの wtmp レコード内のタイムスタンプの調整用として用意されています。ただし、日付変更とリブートとの組み合わせによっては、wtmpfix のチェックから漏れて、acctcon の処理を失敗させることがあります。wtmp の問題を解決する手順については、wtmp ファイルを修復する方法」を参照してください。

wtmp ファイルを修復する方法

  1. スーパーユーザーになります

  2. ディレクトリ /var/adm/acct/nite に変更します。

  3. 次のように、バイナリファイル wtmp.MMDD を ASCII ファイル xwtmp に変換します。

    # fwtmp wtmp.MMDD xwtmp
    

    MMDD

    2 桁の数値で指定される月日 

  4. xwtmp を編集します。壊れたファイルを削除するか、始めから日付変更までのすべてのレコードを削除します。

  5. ASCII ファイル xwtmp をバイナリファイルに変換し、壊れたファイルを上書きします。

    # fwtmp -ic xwtmp wtmp.MMDD
    

tacct エラーを修復する

/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 ファイルを作成し直してください。次の手順は、簡単な修復手順の概要を説明しています。

tacct エラーを修復する方法

  1. スーパーユーザーになります。

  2. ディレクトリ /var/adm/acct/sum に変更します。

  3. 次のように、tacct.MMDD の内容をバイナリから ASCII 形式に変換します。

    # acctmerg -v tacct.MMDD xtacct
    

    MMDD

    2 桁の数字で指定される月日 

  4. xtacct ファイルを編集して、不良レコードを削除し、重複レコードを別のファイルに書き込みます。

  5. xtacct ファイルを ASCII 形式からバイナリに変換します。

    # acctmerg -i xtacct tacct.MMDD
    

    MMDD

    2 桁の数字で指定される月日 

  6. ファイル tacct.prvtacct.MMDD をマージしてファイル tacct を生成します。

    # acctmerg tacctprv tacct.MMDD tacct
    

runacct を再起動する

runacct プログラムはいろいろな原因で失敗することがあります。一番多い原因は、システムがクラッシュする、/var がディスク容量を使い果たす、wtmp ファイルが壊れたなどです。active.MMDD ファイルが存在する場合、まずエラーメッセージがないか調べます。active ファイルとロックファイルが存在する場合、異常なメッセージがないかどうか fd2log ファイルを調べます。

runacct は、引数を指定しないで実行すると、その日の最初の起動とみなします。runacct を起動し直し、もう一度 runacct にアカウンティングをやり直させる月日を指定する場合は、引数 MMDD が必要です。処理のエントリポイントは statefile の内容に基づきます。statefile を無効にするには、次のように処理を開始したい状態をコマンド行に指定します。


注意 - 注意 -

runacct プログラムを手動で実行するときは、ユーザー adm として実行していることを確認してください。


runacct を再起動する方法

  1. lastdate ファイルと lock* ファイル (もしあれば) を削除します。

    $ cd /var/adm/acct/nite
    $ rm lastdate lock*
    
  2. runacct プログラムを再起動します。

    $ runacct MMDD [state] 2> /var/adm/acct/nite/fd2log &
    

    MMDD

    月日を数値で指定する 

    state

    runacct 処理を開始させたい状態または開始点を指定する

システムアカウンティングの停止と無効

システムアカウンティングは、一時的に停止することも、永久に無効にすることもできます。

一時的にシステムアカウンティングを停止する方法

  1. スーパーユーザーになります。

  2. 適切な行をコメントアウトすることによって、プログラム ckpacctrunacct、および monacct の実行が停止するように、ユーザー admcrontab ファイルを変更します。

    # 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
  3. 適切な行をコメントアウトすることによって、プログラム dodisk の実行が停止するように、ユーザー rootcrontab ファイルを変更します。

    # crontab -e 
    #30 22 * * 4 /usr/lib/acct/dodisk
  4. 次のように入力して、アカウンティングを停止します。

    # /etc/init.d/acct stop
    

システムアカウンティングを再び有効にするには、新たに追加したコメント記号を crontab ファイルから削除して、次のように入力します。

# /etc/init.d/acct start

システムアカウンティングを永久に無効にする方法

  1. スーパーユーザーになります。

  2. ユーザー admcrontab ファイルを変更して、プログラム ckpacctrunacct、および monacct 用のエントリを削除します。

    # EDITOR=vi; export EDITOR
    # crontab -e adm
    
  3. ユーザー rootcrontab ファイルを変更して、プログラム dodisk 用のエントリを削除します。

    # crontab -e
    
  4. 実行レベル 2 用の起動スクリプトのリンクを取り外します。

    # unlink /etc/rc2.d/S22acct
    
  5. 実行レベル 0 用の停止スクリプトのリンクを取り外します。

    # unlink /etc/rc0.d/K22acct
    
  6. 次のように入力して、アカウンティングを停止します。

    # /etc/init.d/acct stop
    

第 23 章 システムアカウンティングの参照情報

この章のリファレンス情報の内容は、次のとおりです。

日次アカウンティングの種類

日次アカウンティングによって、「接続アカウンティング」、「プロセスアカウンティング」、「ディスクアカウンティング」、「料金計算」の 4 種類のアカウンティングを簡単に実行できます。

接続アカウンティング

接続アカウンティングでは、次のデータを調べることができます。

これらの情報を提供するために、システムは期間調整、リブート回数、アカウンティングソフトウェアが有効または無効に設定された回数、実行レベルの変更回数、ユーザープロセス (login プロセスと init プロセス) の作成、プロセスの消滅などの情報のレコードを格納します。これらのレコード (dateinitloginttymonacctwtmp などのシステムプログラムの出力によって生成されます) は /var/adm/wtmp ファイルに格納されます。wtmp ファイルのエントリには、ユーザーのログイン名、装置名、プロセス ID、エントリタイプ、エントリがいつ作られたかを示すタイムスタンプなどの情報を含めることができます。

プロセスアカウンティング

プロセスアカウンティングでは、システムで実行される各プロセスに関する次のようなデータを追跡できます。

プロセスが終了するたびに、exit プログラムは上記のデータを収集し、/var/adm/pacct ファイルに書き込みます。

ディスクアカウンティング

ディスクアカウンティングでは、各ユーザーがディスク上にもっているファイルについて次のデータを収集し、それらの書式を指定できます。

これらのデータはシェルスクリプト /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 の日次アカウンティング機能がどのように動作するかを要約して示します。

  1. システムをマルチユーザーモードに切り替えると、/usr/lib/acct/startup プログラムが実行されます。この startup プログラムは、それぞれアカウンティング機能を呼び出す他のプログラムを実行します。

  2. acctwtmp プログラムは /var/adm/wtmp に「ブート」レコードを追加します。このレコードには、システム名が wtmp レコード内のログイン名として示されます。表 23-1 に、raw アカウンティングデータがどのように収集され、どこに格納されるかをまとめて示します。

    表 23-1 raw アカウンティングデータ

    /var/adm 内のファイル

    情報 

    ファイルを書くプログラム 

    書式定義ヘッダ 

    wtmp

    接続セッション数

    login, init

    utmp.h

     

    日付変更回数

    date

     

    リブート回数

    acctwtmp

     

    シャットダウン回数

    shutacct シェル

    pacctn

    プロセス数 

    カーネル (プロセス終了時) 

    acct.h

     

     

    turnacct switch (古いファイルの内容が 500 ブロックに達すると、新しいファイルが作成される)

     

    fee

    特別料金 

    chargefee

    acct.h

    acct/nite/disktacct

    使用ディスク領域 

    dodisk

    tacct.h

  3. turnacct プログラムが -on オプションで起動されて、プロセスアカウンティングを開始します。turnacct は、特に /var/adm/pacct 引数を使用して accton プログラムを実行します。

  4. remove シェルスクリプトが、runacct によって sum ディレクトリに保存されている pacct および wtmp ファイルを「整理」します。

  5. login および init プログラムが、/var/adm/wtmp にレコードを書き込み、接続セッションを記録します。すべての日付変更 (引数を指定して date を使用) も /var/adm/wtmp に書き込まれます。acctwtmp を使用したリブートとシャットダウンも /var/adm/wtmp に記録されます。

  6. プロセスが終了すると、カーネルが /var/adm/pacct ファイルにプロセスごとに 1 レコードを acct.h 形式で書き込みます。

    cron は、1 時間ごとに ckpacct プログラムを実行して /var/adm/pacct のサイズを調べます。このファイルが 500 ブロック (デフォルト) よりも大きくなった場合は、turnacct による切り替えが実行されます。(このプログラムは今までの pacct ファイルを他に移して新しいファイルを作成します。) pacct ファイルを小さく分けることの利点は、それらのアカウントレコードを処理するときに障害が発生し、runacct を起動し直そうとしたときに明らかになります。

  7. runacct が毎晩 cron によって実行されます。runacct/var/adm/pacctn/var/adm/wtmp/var/adm/fee/var/adm/acct/nite/disktacct などのアカウンティングファイルを処理して、ログイン別のコマンド要約と利用状況要約を生成します。

  8. /usr/lib/acct/prdaily プログラムが runacct によって 1 日に 1 回実行され、runacct が収集した日次アカウンティング情報 (ASCII 形式) を /var/adm/acct/sum/rprt.MMDD に書き込みます。

  9. monacct プログラムが月に 1 回 (または毎会計期の終わりなど、ユーザーが決めた周期で) 実行されます。monacct プログラムは、sum ディレクトリに格納されているデータに基づいてレポートを作成します。これらのデータは runacct によって毎日更新されています。このレポートを作成後、monacctsum ディレクトリを「整理」して、新しい runacct データを格納するためのファイルを準備します。

システムがシャットダウンしたときの動作

shutdown を使用してシステムをシャットダウンした場合は、shutacct プログラムが自動的に実行されます。shutacct プログラムは /var/adm/wtmp に理由レコードを書き、アカウンティングプロセスを無効に設定します。

アカウンティングレポート

この節では、アカウンティングソフトウェアによって生成される様々なレポートについて説明します。

日次アカウンティングレポート

runacct(1M) シェルスクリプトは、呼び出されるたびに基本的な 4 種類のレポートを生成します。これらのレポートは、接続アカウンティング、毎日のログイン別利用状況、日次および月次合計によって報告されるコマンド利用状況の 3 種類を対象とするレポートと、ユーザーの最後のログイン時刻のレポートです。4 つの基本レポートは次のとおりです。

表 23-2 日次アカウンティングレポート

レポートの種類 

説明 

日次レポート 

tty 番号別の回線の利用状況を示します

日次利用状況レポート 

ユーザー別のシステム資源の利用状況を示します。UID 順に表示されます 

日次コマンド要約 

コマンド別のシステム資源の利用状況を示します。使用したメモリーの大きさの降順に、つまりメモリーを最も多く使用したコマンドから先に表示されます。これらと同じ情報が月次コマンド要約では 1 ヶ月分について報告されます

最終ログインレポート 

各ユーザーが最後にログインした日付を示します。日付順に表示されます 

日次レポート

このレポートは、使用された各端末回線に関する情報を示します。次に例を示します。

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 日次レポート

カラム 

説明 

LINE

回線。端末回線またはアクセスポート 

MINUTES

回線使用分。アカウンティング期間を通じてこの回線が使用中であった合計分 

PERCENT

回線利用率。この回線が使用中であった MINUTES の合計値を TOTAL DURATION で割ったパーセント値

# SESS

セッション数。このポートが login セッション向けにアクセスされた回数 

# ON

ログイン回数。SESS と同じ。(このカラムにはそれ以上の意味はなし。ポートがユーザーのログインに使用された回数を表示する)

# OFF

ログアウト回数。このカラムは、この回線でユーザーがログアウトした回数と発生した割り込みを表す。割り込みは一般にシステムがマルチユーザーモードにされてから ttymon が初めて起動されたときに発生する。# OFF が大きな割合で # ON を上回る場合は、マルチプレクサ、モデム、ケーブルに障害があるか、どこかに接触の問題がある可能性がある。一番考えられる原因は、マルチプレクサからのケーブルの接続が外れたままになっていることである

マシンの稼動中は、/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 日次利用状況レポート

カラム 

説明 

UID

ユーザー ID 番号 

LOGIN NAME

ユーザーのログイン名。複数のログイン名をもつユーザーを識別する 

CPU-MINS

CPU 使用時間 (分単位)。ユーザーのプロセスが CPU を使用した時間を表す。このカテゴリの情報は、PRIME (プライムタイム時間帯) と NPRIME (プライムタイム時間帯外) に分けられる。アカウンティングシステムのこれらのデータのバージョンは、/etc/acct/holidays ファイルに格納されている

KCORE-MINS

プロセスが実行中に使用する累積メモリー量を表す。表示される値は、毎分当たりに使用される K バイトメモリーセグメント数を表す。この計量値も PRIMENPRIME に分けられる

CONNECT-MINS

ユーザーがシステムにログインしていた時間を表す。「実時間」とも呼ぶ。PRIMENPRIME に分けられる。たとえば、この時間の値が大きく # OF PROCS の数値が小さい場合は、ログインの所有者がまず朝にログインし、その後はその日の終わりまで端末にほとんど触れていないと考えられる

DISK BLOCKS

ディスクブロック数。ディスクアカウンティングプログラムが実行された後は、出力が合計アカウンティングレコード (daytacct) にマージされ、このカラムに表示される。このディスクアカウンティングは acctdusg プログラムによってなされる。アカウンティングの目的ではブロックは 512 バイト

# OF PROCS

ユーザーが起動したプロセス数を表す。数値が大きい場合は、ユーザーのシェルプロシージャが制御できなくなった可能性がある 

# OF SESS

ユーザーがシステムにログインした回数 

# DISK SAMPLES

平均ディスクブロック数 (DISK BLOCKS) を得るためにディスクアカウンティングが何回実行されたかを示す

FEE

chargefee によってユーザーに課金される累積合計額を表す。使用されない場合が多い

日次コマンド要約

このレポートはコマンド別のシステム資源の利用状況を示します。このレポートでは、最も使用率の高いコマンドがわかり、それらコマンドがどのようにシステム資源を利用しているかに基づいて、どのようにしたらシステムの最適チューニングが可能かを知ることができます。日次レポートも月次レポートも見た目には同じですが、日次要約レポートは当日だけについてのレポートであるのに対して、月次要約レポートは、会計期の初めから当日までについてのレポートです。つまり、月次レポートは、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 日次コマンド要約レポート

カラム 

説明 

COMMAND NAME

コマンド名。プロセスアカウンティングシステムではオブジェクトモジュールしか報告されないので、シェルプロシージャはすべて sh という名前で取り扱われる。 a.out または core と呼ばれるプログラム、またはその他の、適切とは思われない名前のプログラムの使用頻度を監視すると良い。acctcom を使用して、名前に疑問があるコマンドを誰が実行したか、スーパーユーザー特権が使用されたかどうかを知ることができる

NUMBER CMNDS

プライムタイム時間帯にこのコマンドが呼び出された回数 

TOTAL KCOREMIN

実行時の毎分当たりにプロセスが使用した K バイトメモリーセグメント数という計量値の累積合計 

TOTAL CPU-MIN:

このプログラムのプライムタイム時間帯の累積合計処理時間 

TOTAL REAL-MIN

このプログラムのプライムタイム時間帯の累積合計実時間 (壁掛け時計)。分単位 

MEAN SIZE-K

NUMBER CMDS で表される呼び出し回数に対する TOTAL KCOREMIN の平均

MEAN CPU-MIN

NUMBER CMDS に対する TOTAL CPU-MIN の平均

HOG FACTOR

合計 CPU 時間を経過時間で割った値。システム利用可能時間とシステム使用時間との比であり、プロセスがその実行中に消費する合計利用可能 CPU 時間の相対値を示す 

CHARS TRNSFD

読み取りおよび書き込みシステムコールによってプッシュされた文字数の合計カウント。オーバフローのために負の値になることがある 

BLOCKS READ

プロセスが実行した物理ブロックの読み取りおよび書き込みの合計カウント

月次コマンド要約

この月次コマンド要約は、次のただ 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

acctcom による pacct ファイルの確認

/var/adm/pacctn ファイル、または acct.h 形式の任意のファイルの内容は、acctcom プログラムを使用していつでも調べることができます。このコマンドを実行するときに、ファイルも標準入力も指定しなければ、acctcompacct ファイルを読み取ります。acctcom は、終了したプロセスに関する情報を示します (実行中のプロセスは ps コマンドで調べることができます)。acctcom のデフォルト出力は次に示す情報を示します。

acctcom にオプションを使用することにより、次の情報を得ることができます。

表 23-6acctcom のオプションを説明します。

表 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 プログラム

メインの日次アカウンティングシェルスクリプトである runacct は、通常はプライムタイムつまり最も忙しい時間帯を避けて cron により起動されます。この runacct シェルスクリプトは、接続、料金、ディスク、プロセス用の各アカウンティングファイルを処理します。さらに、課金目的で prdailymonacct が使用する日次および累積要約ファイルも準備します。

runacct シェルスクリプトは、エラーが発生した場合、ファイルを壊さないよう注意します。一連の保護機構により、エラーを認識し、インテリジェント診断を提供し、最小のユーザー介入で runacct が起動し直せるように処理を完了しようとします。runacct は、説明メッセージを active というファイルに書き込み、進捗状況を記録します。(runacct が使用するファイルは、特にことわりのないかぎり、ディレクトリ /var/adm/acct/nite にあります。) runacct の実行中、すべての診断出力は fd2log に書き込まれます。

runacct は起動されると locklock1 というファイルを作成します。これらのファイルは、runacct が同時に実行されるのを防ぎます。runacct プログラムは、起動時にこれらのファイルが存在すれば、エラーメッセージを出力します。lastdate ファイルには runacct が最後に起動されたときの月日が入っており、このファイルは runacct を 1 日に 1 回しか実行できないようにするために使用されます。runacct がエラーを検出した場合は、エラーメッセージがコンソールに出力され、メールが rootadm に送られ、ロックが解除され、診断ファイルが保存され、実行が終了されます。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 が作成される。closewtmputmp2wtmp は、現在ログインしているユーザーに課金処理を行うため、wtmp.MMDD と新しい wtmp にレコードを追加する

WTMPFIX

wtmpfix プログラムが nite ディレクトリ内の wtmp.MMDD ファイルを調べて誤りがないか確認する。データの変更によっては、acctcon を失敗させることがあるので、wtmp ファイルに日付変更のレコードが現れた場合は、wtmpfix は関係するタイムスタンプを調整しようとする。さらに、wtmp ファイルからのエントリが壊れていた場合、壊れたエントリをすべて削除する。問題が解決された後のバージョンの wtmp.MMDDtmpwtmp に書き込まれる

CONNECT

acctcon プログラムが使用されて、ctacct.MMDD ファイルに接続アカウントレコードが記録される。これらのレコードは tacct.h 形式になっている。acctcon は、さらに lineuse および reboots ファイルを作成する。reboots ファイルは、wtmp ファイルで見つかったすべてのブートレコードを記録する

PROCESS

acctprc プログラムを使用して、プロセス課金ファイル /var/adm/Spacctn.MMDDptacctn.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/daycmsnite/cms を生成する。lastlogin プログラムを使用してログファイル /var/adm/acct/sum/loginlog が作成される。これは、各ユーザーが最後にログインした時刻を示すレポートである。(runacct が真夜中を過ぎてから実行された場合は、いずれかのユーザーが最後にログインした時刻を示す日付が 1 日分狂うことになる)

USEREXIT

インストールに依存しない任意の (ローカル) 課金プログラムをこの時点で取り入れることができる。runacct はそのプログラムを /usr/lib/acct/runacct.local と想定する

CLEANUP

一時ファイルが整理され、prdaily が実行され、その出力が sum/rpt.MMDD に保存され、ロックが解除され終了する


注意 - 注意 -

runacctCLEANUP 状態で起動し直すときは、最後の 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 ディレクトリには、nitesumfiscal の各ディレクトリが設けられ、それぞれに実際のデータ収集ファイルが格納されます。たとえば、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 形式の接続セッションレコード (acctcon1acctcon2 は互換性を保証するために用意)

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.MMDD

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

会計期 nrprtn と同じレポート

tacctn

会計期 n の合計アカウンティングファイル

runacct が生成するファイル

次に示す runacct により生成されるファイル (/var/adm/acct にあります) には特に注意する必要があります。

表 23-12 runacct が生成するファイル

ファイル 

説明 

nite/lineuse

runacctacctcon を呼び出して、/var/adm/acct/nite/tmpwtmp から端末回線の利用状況に関するデータを収集し、それらのデータを /var/adm/acct/nite/lineuse に書き込む。prdaily はこれらのデータを使用して回線利用状況を報告する。このレポートは特に不良回線の検出に有効となる。ログアウト回数とログイン回数との比率が 3:1 を超える場合は、回線に障害がある確率が大きい

nite/daytacct

tacct.h 形式の当日の合計課金ファイル

sum/tacct

このファイルは、毎日の nite/daytacct の累積であり、課金の目的に使用できる。このファイルは、毎月または毎会計期ごとに monacct プロシージャによって新たに累積が開始される

sum/daycms

runacctacctcms を呼び出して、当日に使用されたコマンドに関するデータを処理する。これらの情報は /var/adm/acct/sum/daycms に格納される。このファイルの内容は毎日のコマンド要約。このファイルの ASCII バージョンは /var/adm/acct/nite/daycms

sum/cms

毎日のコマンド要約の累積。monacct が実行されることによって新たに累積が開始される。ASCII バージョンは nite/cms

sum/loginlog

runacctlastlogin を呼び出して、/var/adm/acct/sum/loginlog のログインのうち最後にログインした日付を更新する。lastlogin は、さらにこのファイルから有効でなくなったログインを削除する

sum/rprt.MMDD

runacct が実行されるたびに、prdaily によって印刷された日次レポートのコピーが保存される