サーバ管理

プロセス状態表示(ps)

Windowsのタスクマネージャのプロセス一覧のようなもの。 オプションには (1) UNIXオプション、(2) BSDオプション、(3) GNU ロングオプションの3種がある。(1) は前にハイフンを1個、(3) は前にハイフンを2個置き、(2) は前にハイフンは置かない。(1) と (2) はまとめて記すことが可能。

【書式】
ps オプション

オプション

-A, -e
全てのプロセスを表示する。
-a
セッションリーダと端末を持たないプロセスを除く全てのプロセスを表示する。
a
自分以外が所有するプロセスも表示する。
-C コマンド
実行ファイル名がコマンドに含まれるプロセスを選択する。
	$ ps -C httpd
	  PID TTY          TIME CMD
	  9339 ?        00:00:00 httpd
	  9363 ?        00:00:03 httpd
	  9364 ?        00:00:00 httpd
	  9365 ?        00:00:00 httpd
	  9366 ?        00:00:00 httpd
      
-f
完全フォーマットで出力する。
--forest
プロセスの親子関係も表示する。
o 書式, -o 書式
結果の出力書式を指定する。 出力内容に指定できる値は以下の通り。標準の表示項目は「PID,TTY,TIME,CMD」、完全フォーマット(-fオプション指定時)は「UID,PID PPID,C,STIME,TTY,TIME,CMD」
コード ヘッダ 説明
%cpu, pcpu / c %CPU / C プロセスcpu 使用率。書式は "##.#"(小数第一位まで表示)。現在のところ c (C) と同じくプロセスが生存期間中に実行で使用したcpuの割合を返す。
%mem, pmem %MEM プロセスがシステムに常駐して使っているメモリ量が、マシン物理メモリの何パーセントを占めているかを示す値。
args, command / cmd COMMAND / CMD コマンド名。
bsdtime TIME ユーザーとシステムの cpu 時間の合計。表示フォーマットは通常は "MMM:SS" であるが、プロセスが cpu 時間を 999 分より多く使っている場合は、右側へシフトする。
bsdstart START (STIME) コマンドが起動した時刻。プロセスが 24 時間以内に起動されていた場合、出力フォーマットは " HH:MM" であり、 24 時間以前の場合は "mmm dd" である。 (ここで mmm は月の名前の 3 文字である)。
euid / uid EUID / UID ユーザID。
pid PID プロセスのプロセス ID 番号。
ppid PPID 親プロセスのプロセス ID 番号。
tname, tt, tty TTY 制御端末名。
time, cputime TIME 累積 CPU 使用時間。"[dd-]hh:mm:ss" フォーマットで表示される。
p プロセスID
-p プロセスID
--pid プロセスID
指定したプロセスIDを持つプロセスを表示する。
--ppid 親プロセスID
指定した親プロセスIDを持つプロセスを表示する。
x
制御端末を持たないプロセスも表示。
shell> ps
  PID  TT  STAT      TIME COMMAND
 4788  p1  S      0:00.05 -bash
shell> ps l
  UID   PID  PPID CPU PRI NI      VSZ    RSS WCHAN  STAT TT       TIME COMMAND
  501  4788  4787   0  31  0    27808    920 -      S    p1    0:00.05 -bash
PID
プロセスID
STAT
プロセス状態
  • R:実行中、実行可能
  • S:スリープ
  • I:アイドル
  • T:停止
  • Z:ゾンビ
TIME
CPU使用時間

継続監視する例:

※ユーザ「user」が実行しているプロセス情報を5秒ごとに表示する。
$ while true; do echo;echo;echo "------ `date`;ps efww | grep user; sleep 5;done"
--------2010年 11月  1日 月曜日 16:44:54 JST
user  3514 27761  0 16:44 ?        00:00:00 /usr/bin/perl -w /home/user/hoge.pl
user  3548  3514  0 16:44 ?        00:00:00 /usr/bin/perl /home/user/hoge_sub.pl
user  3552 21053  0 16:44 pts/1    00:00:00 ps -efww
user  3553 21053  0 16:44 pts/1    00:00:00 grep user


...

CPUやメモリの使用率が高いプロセスを探す方法[4]

【CPU使用率が高い順】(3番目の項目で降順ソート)
ps auxw | sort -k3 -nr
【メモリ使用率が高い順】(4番目の項目で降順ソート)
ps auxw | sort -k4 -nr

参考文献・サイト

稼働時間、負荷などの表示(uptime)

shell> uptime
11:15  up  2:19, 2 users, load averages: 2.82 2.58 2.40
現在時刻→11:15
起動してからの経過時間→2:19
システム上のユーザ数→2
直近1分の平均負荷→2.82
直近5分の平均負荷→2.58
直近15分の平均負荷→2.40

平均負荷は通常2程度とのこと。

参考文献・サイト

タスクリスト表示(top)

top コマンドは実行中のタスクリストを表示する。

【書式】
top オプション 数値

【例】リアルタイムでプロセス状況を表示する
top
数値
-b
バッチモードでtopコマンドを起動する。-nオプションで指定された回数に達するか、プロセスがkillされるまで実行を続ける。
[Mac Darwin]-a
-c a(積算モードで表示)と同じ。
[Mac Darwin]-c モード
カウントモードの設定を行う。設定可能なモードと指定値は以下の通り。
a
積算モード。イベントのカウント値はtopコマンド起動時から積算されていく。CPU使用率とCPU時間はtopコマンド起動時から通算して計算される。
d
デルタモード。前回イベント採取時との相対値でカウントされる。CPU使用率は前回イベント採取時から計算される。このモードの場合、デフォルトではメモリオブジェクトマップのレポートはOFFになっている。メモリオブジェクトマップの表示は-rオプションで再び有効にするかまたはrで対話的モードにする。
e
絶対モード。絶対値を使ってカウントされる。
n
非イベントモード(既定値)。CPU使用率は前回のイベント採取時から計算される。
[RHEL]-d 表示回数
[Mac Darwin]-d
-c d(デルタモードで表示)と同じ。
-e
-c e(絶対モードで表示)と同じ。
-i
-I
[Mac Darwin]-n 整数
出力先が端末であっても、ロギングモードを用いて整数回表示する。0 を指定すると無限回を指定したものとみなされる。出力は書き直しをせず、原型のまま再出力される。なお、各採取サンプル間の情報を表示するため、初回の各プロセスのCPU使用率は有効な値ではないことに注意。
-mio|cpu
-n 自然数
[RHEL]top が終了するまでの繰り返し回数またはフレームの最大数を自然数回に指定する。 [Mac Darwin]CPU使用率上位自然数個のみ表示する。
-ofield
-q
-s時間
-S
-u
-t
-v

ジョブ・プロセスにシグナルを送る

kill コマンドはジョブ・プロセス類に終了などのシグナルを送信する。

【書式1】指定したプロセスIDにシグナルを送る
kill -s シグナル プロセスID プロセスID...
kill -シグナル プロセスID プロセスID...
【書式2】指定可能なシグナル値・番号一覧を出力
kill -l シグナル
シグナル
書式1では、プロセスに送るシグナル名または番号。kill -l で指定できる値の一覧が閲覧できる。「SIGHUP」(1) なら通常終了、「SIGKILL」(9) なら強制終了など。
書式2ではシグナル名またはシグナル番号を指定。シグナル名を指定すればシグナル番号が、シグナル番号を指定すればシグナル名が返る。指定を行わない場合は、指定可能なシグナル名、シグナル番号の一覧が出力される。
      $ kill -l 9
      KILL
      $ kill -l KILL
      9
      $ kill -l
       1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
	5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
	9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
	13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGSTKFLT
	17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
	21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU
	25) SIGXFSZ     26) SIGVTALRM   27) SIGPROF     28) SIGWINCH
	29) SIGIO       30) SIGPWR      31) SIGSYS      34) SIGRTMIN
	35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4
	39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
	43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
	47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
	51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
	55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
	59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
	63) SIGRTMAX-1  64) SIGRTMAX
    
プロセスID
以下の5通りの方法で指定が可能。
  • 正の整数→指定値のプロセスIDを持つプロセスにシグナルを送る。プロセスIDはps コマンドで確認できる。
  • 0→現在のプロセスグループ配下の全プロセスにシグナルを送る。
  • -1→プロセスIDが1より大きい全プロセスにシグナルを送る。
  • 負の整数→指定値の絶対値と等しいプロセスグループに属する全プロセスにシグナルを送る。なお、最初の引数としてこの指定を行うと、送信するシグナルの指定として解釈されてしまう。これを防ぐには、先にシグナルの指定を行うか、あるいはプロセスIDの指定の後に「--」オプションを指定する。
  • コマンド名→この名前で起動された全プロセスにシグナルを送る。
【例】hoge.sh を強制終了する
$ ps -ef | grep hoge.sh
user    10002 10003  0 10:30 pts/5    00:00:00 grep hoge.sh
user    10000 10001 99 10:00 pts/5    01:30:00 /bin/sh ./hoge.sh
$ kill -9 10000
$ ps -ef | grep hoge.sh
user    10004 10005  0 10:30 pts/5    00:00:00 grep hoge.sh

【例】hoge.sh のシグナルグループに属する全プロセスを

子プロセスも含めてkillする方法[1]

# プロセスを階層表示(--forest)、対象プロセスおよびその1行後を抽出
$ ps -ef --forest | grep -A 1 'hoge.sh' 
user     12345     1 0 10:00 pts/1    00:10:00 /bin/sh ./hoge.sh
user     23456 12345 0 10:00 pts/1    00:05:00  \_ /bin/sh ./hoge_child.sh
# 親プロセス(hoge.sh)のプロセスIDは 12345、その子プロセス(hoge_child.sh)のプロセスIDは 23456
[killrec.sh]
#!/bin/sh
PATTERN=${1}
#- 親プロセスのID取得
PPID=`ps -ef | grep -v grep | grep "${1}" | gawk '{print $2}'`
echo "PPID: "$PPID
echo "Child(ren):"
for child in $(ps -o pid,ppid ax | gawk '{if ($2 == $PPID) {print $1}}')
do
  echo "  "$child
  kill $child
done

$ chmod +x killrec.sh
$ ./killrec.sh

killallを使うと指定したコマンドを実行している全てのプロセスにシグナルを送る。シグナルの内容指定がない場合の既定シグナルは「SIGTERM」

【例】
killall /usr/bin/hoge

参考文献・サイト

  1. 子プロセスもkillする方法 - (旧) koba206の開発WIKI

一定時間経過したら強制的にプロセスを終了させる(timeout)

timeoutコマンドはプログラムに実行時間の制限をかけることができる[3]。CentOS 6系で既定のRPMレポジトリからインストールできるcoreutilsのバージョン8系にはtimeoutコマンドが付随していたが、CentOS 5系で既定のRPMレポジトリからインストールできるcoreutilsのバージョンは5系。これにはtimeoutコマンドは付随していない。RPM pboneにはtimeout単独のRPMパッケージがあった。これを使ってインストールすると、CentOS 5系でもtimeoutコマンドが使えるようになった。

シグナル捕捉(trap)

trap コマンドは指定されたシグナルを受信した時、指定のコマンドを実行する。コマンド指定を省略し単一のシグナルを指定した場合、またはコマンドに"-"を指定した場合、シグナルはリセットされる。コマンド指定がヌル文字列であった場合、シグナルは無視される。コマンドを指定し、-pオプションも指定した場合、各シグナルと同時にコマンドも表示される。引数指定がないか、-pオプションだけを指定した場合、各シグナルに関連するコマンド一覧を表示する。-lオプションを指定するとシグナル名および対応する番号の一覧を出力する。各シグナル指定は<signal.h>で定義されているシグナル名またはシグナル番号です。シグナル名は場合に依存せず、SIG接頭辞はオプションです。シグナルに EXIT(0) を指定した場合、指定コマンドは終了時にシェルから実行されます。DEBUG をして利した場合、指定コマンドは各単一コマンド、forコマンド、caseコマンド、selectコマンド、算術的forコマンドの前に実行され、しかも最初のコマンドはシェル機能によって先に実行されます。 Refer to the description of the extdebug option to the shopt builtin for details of its effect on the DEBUG trap. If a sigspec is ERR, the command arg is executed whenever a simple command has a non-zero exit status, subject to the following conditions. The ERR trap is not executed if the failed command is part of the command list immediately following a while or until keyword, part of the test in an if statement, part of a && or ││ list, or if the command’s return value is being inverted via !. These are the same conditions obeyed by the errexit option. If a sigspec is RETURN, the command arg is executed each time a shell function or a script executed with the . or source builtins fin- ishes executing. Signals ignored upon entry to the shell cannot be trapped or reset. Trapped signals that are not being ignored are reset to their original values in a child process when it is created. The return status is false if any sigspec is invalid; otherwise trap returns true.

【書式】
trap オプション コマンド シグナル

【例】
$ trap 'echo "Interrupt was occurred."' 2
$ Interrupt was occurred. # <- Ctrl+C を入力すると表示される

$ 

参考文献・サイト

システムデバッグ情報生成(sosreport)

技術サポートに送るためのシステムデバッグ情報の圧縮tarballを生成する。

sosreport オプション
-a
--alloptions
ロードされたプラグインについて全てのオプションを有効にする。
--batch
実行時に質問を行わない(バッチモード)。
--help
ヘルプを表示して終了する。
-k プラグイン名=オプション名
プラグインのオプションを指定する。
-l
--list-plugin
プラグインおよび有効なオプションの一覧を表示する。
-n プラグイン名
--skip-plugins プラグイン名
--name=顧客名
レポートに使用される名前。
-o プラグイン名
--only-plugins プラグイン名
--ticket-number=チケット番号
レポートに使用されるチケット番号。
-v
--verbose
--no-multithread
--no-progressbar

参考文献・サイト

  1. sosreport --help

シャットダウン・再起動

shutdownシステムの停止や再起動を行う。

shutdown -t  オプション 時間 警告メッセージ
【システム停止】
/sbin/halt
【再起動】(shutdown -r now と同じ)
/sbin/reboot
【電源を切る】
/sbin/poweroff
※reboot, poweroff は haltのリンクで、どの名前で起動したかによって動作が決まる
オプション、指定値 内容
-t 他のランレベルに移行する際、警告シグナルを送ってから kill シグナルを送るまでに sec 秒間待つよう init(8) に伝える。
-k 警告メッセージを各プロセス、ユーザに送るだけで、実際にはシャットダウンしない。
-r システムを再起動(reboot)する。
-h システムを停止する。now を後に付けると直ちに。
時間 シャットダウンする時間を指定する。時刻(YYYYMMDD?)または何分後(+ )で指定?

例:直ちにシャットダウンする。

shutdown -h now

下記コマンドでもシャットダウンできるよう。

halt

シャットダウンするサーバがNFS exportを行っていた場合、あらかじめNFSクライアントでマウント解除を行っておいた方がよさそう。NFSクライアントがNFSサーバ応答待ち状態に陥るのを防ぐため。

参考サイト:

自動スクリプト処理(cron)

決まった日時に何らかのアプリケーション、スクリプトなどを自動実行するcronの設定はcrontabコマンドを用いて行う。ユーザ毎にcrontabエントリーが登録される。メールの受信をトリガにして何かを実行する方法については、転送 - メール(クライアント)参照。

【書式1】ファイルからの登録
crontab -u ユーザ名 ファイル名

【例1】ファイルmycronの内容を現在のユーザに対して登録する。
crontab mycron

ファイル名で指定したファイルに記述された内容をcronエントリーとして登録する。 ユーザ名を指定しなければ操作を行っているユーザ名に対する処理とみなされる。 この処理による登録は既存エントリーを消去して上書きするため、 必要に応じて既存エントリーの内容をファイルの記述に含める必要がある。

【書式2】直接編集、閲覧、削除
crontab -u ユーザ名 -e|-l|-ri

【例2】現在のcrontabエントリーを編集する
crontab -e
【例3】crontabエントリーを削除する
crontab -r
【例4】現在のcronエントリーを表示する
crontab -l

ユーザ名に関する指定は書式1と同じ。 オプション-eはエントリーの編集、-lは現在のエントリー表示、-rはエントリー削除。 -riとすると削除の前に確認のプロンプトが表示される。 オプション-eで実際編集されるファイルは /var/spool/cron/ユーザ名 というファイル(RedHat系の場合)

crontabファイルの書式は以下の通り。

分 時 日 月 曜日 コマンド
【例】毎日4時に/bin/shで/usr/local/etc/test.shを実行、結果は/var/log/test.logに出力追記
0 4 * * * /bin/sh /usr/local/etc/test.sh 2>&1 >>/var/log/test.log

各項目間は空白で区切る。各項目内はコンマ(,)で区切って複数併記可能。「全て」の時間を示すにはアスタリスク(*)を、区間を示すにはハイフン(-)を用いる。行頭にシャープ(#)を記すとその行はコメントとみなされて自動実行は行われない。時間は0-23、曜日は0-6(日曜が0)。コマンドの実行結果は、最後に何もつけなければ登録ユーザにメールで送られる。破棄するなら>/dev/nullを、ファイルに出力するなら>ファイル名を記す。エラーも出力するなら2>&1 >ファイル名のように記す。

cronの実行ログはCentOS 5.3の場合/var/log/cron

なお、NIS(Network Infomation Service)を用いてユーザ認証情報を一括管理している場合、NISユーザ情報を更新した後はcronデーモンを再起動しないと更新されたNIS情報を参照しに行かないらしい(そんなユーザはないとして、蹴られてしまったりする)。

crontab の設定が実際に書かれているファイルは以下の通り[5]

パス・ファイル名 利用者 内容
/var/spool/cron/ユーザ名 ユーザ名 ユーザごとのcron設定(crontab -u ユーザ名 -lで表示される内容)
/etc/crontab root 毎時、毎日、毎週、毎月実行するタスクの実行タイミング設定
/etc/cron.hourly root 毎時実行するタスクの設定ファイル置き場
/etc/cron.daily root 毎日実行するタスクの設定ファイル置き場
/etc/cron.weekly root 毎週実行するタスクの設定ファイル置き場
/etc/cron.monthly root 毎月実行するタスクの設定ファイル置き場
/etc/cron.d root その他のタイミングで実行されるタスクの設定ファイル置き場

RHEL/CentOS 6以降、既定のcron.{hourly,daily,weekly,monthly}の実行スケジュール管理はanacronという実行時間をランダム化する仕組みを含んだものに変わり、設定ファイルも/etc/crontabから/etc/anacrontabに変わっている[6]

crontab -e でcrontabを編集するときに使われるエディタを編集するには、編集プログラムのパスを格納したEDITOR環境変数を変更する。

エディタをvimに変更する
$  EDITOR=/usr/bin/vim;export EDITOR

参考文献・サイト:

ルートディレクトリを変更してコマンド実行(chroot)

chrootはルートディレクトリを指定してコマンドを実行する。多くのシステムにおいて、これができるのはスーパーユーザのみである。

通常、ファイル名はディレクトリ構造の一番根元(ルート root=根)、つまり ‘/’ を起点として調べられる。chroot はこのルートを指定したディレクトリに変更して、コマンドを実行する。 ディレクトリはオプション コマンド引数を指定することもできる。 command が指定されないと、デフォルトは SHELL 環境変数の値となる。

chroot jail から起動されたプロセスがシステムライブラリにアクセスできないという状況は、非常にありがちなので注意すること。

【書式】
chroot ディレクトリ コマンド コマンド引数... 
ディレクトリ
ここに指定したディレクトリにルートディレクトリを変更してコマンドを実行する。指定するディレクトリは実在するディレクトリでなければならない。
コマンド
実行するコマンドを指定する。指定がない場合の既定値はSHELL 環境変数の値。変数が設定されていなければ、‘/bin/sh’ を ‘-i’ オプションを指定して実行する。
コマンド引数
実行するコマンドの引数を指定する。

ホーム領域の外に行けなくする(sftp)

sftpでログイン直後のホームディレクトリの外に行けなくするchrootを実施する方法について[20]。sshの場合はホーム領域の外に行けなくする(ssh)参照。

1. chrootディレクトリの準備
chroot先とするディレクトリを準備し、所有者はroot、root以外は書き込みできないようにする。
# mkdir /chroot
# chmod 755 /chroot
# chown root:root /chroot
# ls -ld /chroot
drwxr-xr-x 2 root root 4096  7月  1 11:00 /chroot
所有権などに問題があるとアクセスできない[21]
【例】
[user@local ~]$ sftp sftp.hoge.org
Connecting to sftp.hoge.org...
Password: 
Read from remote host sftp.hoge.org: Connection reset by peer
Connection closed

[root@server ~]# ls -l /chroot
drwxrwxrwx 2 user user 4096  7月  1 11:00 /chroot
[root@server ~]# cat /var/log/messages
...
Jul  1 12:00:00 server sshd[2142]: fatal: bad ownership or modes for chroot directory "/chroot"

# 所有者、アクセスモードを修正すると問題解消
[root@server ~]# chmod 755 /chroot
[root@server ~]# chown root:root /chroot

[user@local ~]$ sftp sftp.hoge.org
Connecting to sftp.hoge.org...
Password: 
sftp> 
2. sshの設定
sshの設定(/etc/ssh/sshd_config)の設定を変更し、sshdサービスを再起動する。
【例】特定ユーザに対する設定
# 内部プロセスを使用するようにする
Subsystem       sftp    internal-sftp
# 特定ユーザに対する設定
Match User user
  ChrootDirectory /chroot

ホーム領域の外に行けなくする(ssh)

sshでログイン直後のホームディレクトリの外に行けなくするchrootを実施する方法について。

sshの場合は、必要なプログラム、ライブラリ、デバイスなどをchrootディレクトリ配下に作成するなどsftpでのchrootに比べるとより繁雑[16][17][18][21]

1. sshの設定を変更
sshの設定ファイル(/etc/ssh/sshd_config)の末尾に以下の設定を追記。
【例】hogeというユーザに対し、/chroot をシステムルートとなるようにする
Match User hoge           # hogeというユーザにchrootの適用する
  ChrootDirectory /chroot # chrootされたユーザにはこのディレクトリがシステムルート(/)に見える
2. chrootディレクトリを作成(なければ)
所有者はroot:rootにしておく。
【例】/chroot がシステムルートとなるようにする
# ls -ld /chroot
drwxr-xr-x 10 root root 4096 11月  6 11:36 /chroot
3. 必要なプログラム等をコピーする
【例】RHEL5.8、x86_64アーキテクチャ環境、bash、ls、rsync、NIS環境使用
# ディレクトリ作成
# mkdir /chroot/{bin,dev,lib64}
# mkdir -p /chroot/home/hoge
# mkdir -p /chroot/usr/lib64

# コマンドプログラムをコピー
# which bash
/bin/bash
# cp /bin/bash /chroot/bin/bash           # シェル
# which ls
alias ls='ls --color=tty'
	/bin/ls
# cp /bin/ls /chroot/bin/ls               # lsコマンド
# which rsync
/usr/bin/rsync
# cp /usr/bin/rsync /chroot/usr/bin/rsync # rsyncコマンド
# NISを使わないローカルユーザ管理環境では/etc/passwd、/etc/groupがchroot環境下にも必要?
  (必要ユーザ情報のみ)

# デバイスを作成
# MAKEDEV -d /chroot/dev -x null random zero
# /chroot/dev が既に存在すると「MAKEDEV: mkdir: File exists」という警告が出るが問題なさそう

# 必要ライブラリを調べてコピー
# ldd /bin/bash
  libtermcap.so.2 => /lib64/libtermcap.so.2 (0x000000352d200000)
  libdl.so.2 => /lib64/libdl.so.2 (0x000000352a200000)
  libc.so.6 => /lib64/libc.so.6 (0x0000003529a00000)
  /lib64/ld-linux-x86-64.so.2 (0x0000003529600000)
# cp /lib64/{libtermcap.so.2,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /chroot/lib64
# ldd /usr/bin/rsync
  libacl.so.1 => /lib64/libacl.so.1 (0x0000003537c00000)
  libpopt.so.0 => /usr/lib64/libpopt.so.0 (0x0000003537000000)
  libc.so.6 => /lib64/libc.so.6 (0x0000003529a00000)
  libattr.so.1 => /lib64/libattr.so.1 (0x0000003535c00000)
  /lib64/ld-linux-x86-64.so.2 (0x0000003529600000)
# cp /lib64/{libacl.so.1,libattr.so.1} /chroot/lib64
# cp /usr/lib64/libpopt.so.0 /chroot/usr/lib64
# ldd /bin/ls
  librt.so.1 => /lib64/librt.so.1 (0x000000352d200000)
  libacl.so.1 => /lib64/libacl.so.1 (0x0000003537c00000)
  libselinux.so.1 => /lib64/libselinux.so.1 (0x0000003530200000)
  libc.so.6 => /lib64/libc.so.6 (0x0000003529a00000)
  libpthread.so.0 => /lib64/libpthread.so.0 (0x000000352aa00000)
  /lib64/ld-linux-x86-64.so.2 (0x0000003529600000)
  libattr.so.1 => /lib64/libattr.so.1 (0x0000003535c00000)
  libdl.so.2 => /lib64/libdl.so.2 (0x000000352a200000)
  libsepol.so.1 => /lib64/libsepol.so.1 (0x000000352fa00000)
# cp /lib64/{librt.so.1,libselinux.so.1,libpthread.so.0,libsepol.so.1} /chroot/lib64
4. シェルの初期設定ファイルを作る
必要に応じて。
5. sshdの再起動
# /etc/init.d/sshd restart
6. ユーザ設定の確認
ユーザホームディレクトリ、ログインシェルの設定を確認し、必要に応じ修正。
※ローカルユーザ認証の場合
# grep user /etc/passwd 
user:x:12345:12345::/chroot:/bin/false
※ログインシェルを/bin/falseに設定しているとsshログイン不可(sftpはOK)

# usermod -d /home/user -s /bin/bash user
# grep user /etc/passwd 
user:x:12345:12345::/home/user:/bin/bash
※実際には
 /chroot/home/userがホームディレクトリに、
 /chroot/bin/bash がログインシェルとして使われる

ログイン履歴の参照(last)

shell> last ユーザ名
  
ユーザ名
情報を表示するユーザを指定する。空白で区切って複数記述可能。指定しなければ全てのログイン・ログアウト情報を表示する。

参考文献・サイト

ログイン時にメッセージを表示

ユーザがログインした時、/etc/motdに記載した内容が表示される[4]

システムログ参照(dmesg)

dmesg によりシステム起動などのログが参照できる。less コマンドと併用すると参照しやすいかもしれない。

$ dmesg | less

共有ライブラリの依存関係を調べる(ldd)

【書式】
ldd オプション... プログラム名

オプション

--version
lddのバージョンを表示
-v--verbose
シンボルのバージョン情報などを含めた全ての情報を表示する。
-u--unused
使用されていない直接の依存関係を表示する。
-d--data-relocs
リロケーションを実行し、足りないオブジェクトについてレポートする(ELF のみ)。
-r--function-relocs
足りないオブジェクトや関数についてレポートする(ELF のみ)。
--help
使用法を表示する。

参考文献・サイト:

コマンドのリンク先指定(alternatives)

コマンドを実行する際、実際に呼び出すプログラムを指定する。

【書式】
alternatives オプション --install リンク コマンド名 パス 優先度 --slave リンク コマンド名 パス... --initscript サービス
alternatives オプション --remove コマンド名 パス
alternatives オプション --set コマンド名 パス
alternatives オプション --auto コマンド名
alternatives オプション --display コマンド名
alternatives オプション --config コマンド名

このコマンドは、代替システムで構成されるシンボリックリンクについての設定の作成、削除、維持、表示を行う。

参考:UNIXヘルプ(man alternatives)

管理者権限でコマンド実行(sudo)

コマンドの前にsudo を付ければ、管理者権限のないユーザでも管理者権限の必要なコマンドを実行できる。実行の際、そのユーザのパスワードが聞かれ、正しいパスワードが入力されれば実行される。なお、sudoユーザとして/etc/sudoersに登録されていなければ、sudoは実行できない。sudoユーザ情報の編集は、このファイルを直接編集するのではなく、visudoコマンドを用いる。なおvisudoコマンドを使うにはrootでログインする必要がある(別ユーザでログインし、suコマンドでスーパーユーザに昇格しても使えない)。

/etc/sudoersファイルは、初期状態ではrootのみがsudoerに属する設定になっていて、その他のユーザはsudoコマンドが使えない。そこで以下の作業を行えば、指定ユーザでsudoコマンドが使えるようになる。

1. rootでvisudoを実行
[root@server ~]# visudo ←/usr/sbin/にパスが通っていないなら絶対パス(/usr/sbin/visudo)で指定。

2. sudoを許可するユーザの所属するグループの設定(wheelグループを許可する場合)
## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
↓
## Allows people in group wheel to run all commands
%wheel        ALL=(ALL)       ALL
%wheel ALL=(ALL) ...の行の先頭にある # を取り除く(コメントアウト解除)。
※他のグループにsudoを許可するにはwheelを希望のグループ名に変更(追記)する。

3. 保存してvisudoを終了(:wq)

4. 目的のユーザをwheelグループに追加
[root@server ~]# gpasswd -a ユーザ名 グループ名
# root ユーザで実行
sudo コマンド

# root 以外のユーザで実行
sudo -u ユーザ名 コマンド

ユーザ名の代わりにuidで指定することもできるが、その際はuidの頭にシャープ(#)を付ける。但し、多くのシェルにおいてシャープはコメントと解釈されてしまうため、その更に前にバックスラッシュ(\)を記してエスケープする必要があるかもしれない。

参考文献・サイト:

自動インストール(apt)

【インストール】
apt-get install パッケージ名
【パッケージ検索】
apt-cache search キーワード
【最新のパッケージリスト取得】
apt-get update

参考文献・サイト:

ディスクの二重化(ソフトウェアRAID)

MDADM…Ubuntu 9.10日本語Remixのヘルプより

名前
mdadm 〜 MDデバイスaka Linux ソフトウェア RAIDを制御する
書式
	mdadm モード RAIDデバイス名 オプション 構成デバイス名
      
概要

RAIDデバイスは2つ以上の実在するブロックデバイスから作られる仮想的なデバイスです。これによって複数のデバイス(通常はディスクデバイスやパーティション)をつなげて1つのデバイスにすることができます。またRAIDのレベルによってはデバイスの故障による障害をある程度回避するための冗長性を持たせることもできます。

LinuxのソフトウェアRAIDデバイスはMD(Multiple Devices、複数ドライブ)デバイスドライバを通して実装されます。

現在、LinuxではLINEAR mdデバイス、つまりRAID0(ストライピング)、RAID1(ミラーリング)、RAID4、RAID5、RAID6、マルチパス、FAULTYに対応しています。

マルチパス(MULTIPATH)はソフトウェアRAIDの仕組みではありませんが、複数のデバイスに関係しています。各デバイスは1つの共通物理ストレージデバイスへのパスとなっています。

FAULTYも本当のRAIDではありません。そしてこれは1つのデバイスだけに関係します。 この機能は障害を取り出すのに使える実際のデバイス上のレイヤーを提供します。

モード
mdadmにはいくつかの操作モードがあります。
  • Assemble
    以前に作ったディスクアレイの構成要素をアクティブなアレイに統合します。要素は明示することも検索させることもできます。mdadmは要素が正規のアレイを作るかをチェックし、また要求すればスーパーブロック情報を操作して不完全なアレイを統合することもできます。
  • Build
    デバイスごとのスーパーブロックを持たないアレイを作ります。この種のアレイにおいてmdadmは最初に作ったものと後でアレイに追加するものの間で違いをつけることはできません。
  • Create
    デバイスごとのスーパーブロックによる新たなアレイを作ります。
  • Follow or Monitor
    1つ以上のmdデバイスの監視や状態変更を行います。これはraid1, 4, 5, 6, 10またはマルチパスアレイでのみ意味を持ち、raid0または直列のアレイでは意味を持ちません。
  • Grow
    アレイの拡張や縮小、または何らかの方法による変更を行います。現在、構成デバイスのアクティブサイズの変更、RAIDレベル1/4/5/6、におけるアクティブデバイス数の変更(書き込みを意図したビットマップの追加と削除も含む)を含む拡張オプションを利用することができます。
  • Incremental Assembly
    適切なアレイにデバイスを1つ追加します。もしデバイスの追加によってアレイが動作可能であれば、アレイは自動的に動作し始めます。これによりホットプラグな(動作したまま着脱できる)便利なインタフェースが利用できるようになります。各デバイスが検出されると、mdadmは然るべきアレイにその検出デバイスを追加する変更を行います。
  • Manage
    新たなスペアデバイスの追加や、故障したデバイスの取り外しを行う際、特定の構成デバイスの操作を行うのに使います。
  • Misc
    アクティブなアレイの「その他全て」の操作を行うモードです。古いスーパーブロックを消去したり、操作に関する情報を集めたりします。
  • Auto-detect
    このモードはデバイスやアレイを指定して操作するのではなく、Linuxカーネルに自動検出されたアレイを活性化するよう要求するモードです。

ディストリビューション情報表示

LSB(Linux Standard Base)およびディストリビューションに関する情報を表示する。

lsb_release オプション
-a, --all
全ての情報を表示する。
-h, --help
ヘルプメッセージを表示する。

参考文献・サイト:

自動起動の設定

Linux系システムは何種類かのランレベル(動作状態、run level)があり、ランレベルを切り替えることで起動、シャットダウン、再起動などを行っている。どのランレベルでどのデーモンを自動起動するのかの設定は /etc/inittab ファイルに記されている。

各ランレベルで起動するスクリプトは /etc/rc.d/rc?.d/ 以下にある(?は0〜6の数字)。そしてその各スクリプトは、/etc/rc.d/init.d/以下にあるスクリプトからのシンボリックリンクとなっている。シンボリックリンクファイル名の命名規則は以下の通り。

位置 内容
1文字目 S → 開始/K → 停止
2〜3文字目 実行順序(2桁の数値)
4文字目以降 実行サービスの名前

例えば「/etc/rc.d/rc5.d/S85httpd」があるということは、「ランレベル5の場合」「85番目に」「httpdというサービス名で」「起動する」ということを意味する。

CentOS5.3では、メニューの[システム][管理][サーバー設定][サービス]を開き、「バックグラウンドのサービス(B)」タブで、サービス名の左にあるチェックボックスをOFFにする。そしてダイアログを閉じる際「保存」。

あるいはchkconfigコマンドを使う1。但し、パスが通っていないとパスも含めてコマンド指定しないと使えない(CentOS 5.3、RHEL5.3では /sbin/chkconfig2)。UbuntuなどDebian系ではchkconfigがなく代わりにsysv-rc-confを用いる。

【書式】
chkconfig --list サービス名
chkconfig --add サービス名
chkconfig --del サービス名
chkconfig --level レベル サービス名 on|off|reset|resetpriorities
--add サービス名
指定したサービスをchkconfigの管理リストに登録する。これにより、各ランレベルでの動作がchkconfigによって管理されるようになる。
【例1】postfixの状態を表示
shell> /sbin/chkconfig --list | grep postfix ←全サービスの状態一覧をgrep postfixでフィルタリング
postfix         0:off   1:off   2:on    3:on    4:on    5:on    6:off ←runレベル2〜5でOS起動した時自動起動する
【例2】chkconfigの管理リストにpostfixを登録する
shell> /sbin/chkconfig --add postfix
【例3】postfixの自動起動状態をONにする
shell> /sbin/chkconfig postfix on ←(管理者権限必要、必要に応じ前にsudoを付ける)
※ランレベルの指定をしない場合、既定の2〜5が対象となる。
【例4】postfixのランレベル3と5での自動起動状態をONにする
shell> /sbin/chkconfig --level 35 postfix on

chkconfigコマンドは/etc/init.d/配下の起動スクリプトの冒頭コメント行にある以下の記述を見ている。これがないと、chkconfig管理サービスに追加しようとしても「サービス nanigashi は、chkconfig をサポートしていません」のように表示され追加できない[10]

#!/bin/sh
# chkconfig: ランレベル 起動優先度 停止優先度

【例】
# vsftpd      This shell script takes care of starting and stopping
#             standalone vsftpd.
#
# chkconfig: - 60 50
# description: Vsftpd is a ftp daemon, which is the program \
#              that answers incoming ftp service requests.
# processname: vsftpd
# config: /etc/vsftpd/vsftpd.conf
ランレベル
0〜6のランレベル番号を空白を開けず列挙する(例:2345)。どのランレベルでも自動起動しない場合はハイフン(-)を記す。
起動優先度
起動優先度を示す値。小さい程優先度が上。範囲は01〜99?
終了優先度
終了優先度を示す値。小さい程優先度が上。範囲は01〜99?

なお、chkconfigコマンドはUbuntuにはなく、代わりにsysv-rc-confなるものがあるらしい3

元のデバイス名はdfコマンドで確認できる。ラベル名を省略すれば現在値を表示し、指定すればその値にラベル名を設定する。

各ユーザのcrontab設定とは別に、/etc/crontab で設定されている 実際cronで実行されるタスクは、crontab で設定した内容も含め全体では以下のものがある。

[root@server ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly # 毎時01分にこのディレクトリ配下にあるスクリプトが実行される
02 4 * * * root run-parts /etc/cron.daily # 毎日4:02にこのディレクトリ配下にあるスクリプトが実行される
02
22 4 * * 0 root run-parts /etc/cron.weekly # 毎週日曜の4:22にこのディレクトリ配下にあるスクリプトが実行される
42 4 1 * * root run-parts /etc/cron.monthly # 毎月1日 4:42にこのディレクトリ配下にあるスクリプトが実行される

/etc/cron.d/配下に存在するテキスト内容も cronエントリー の内容として解釈され、定期実行されるようであるが、プログラムによって生成された定義内容のよう?(mailman では、このファイルを直接編集しないようにというコメントがあった) 実行される点では crontab に記述するのと同じ?

参考文献・サイト

  1. 北アラバ公国 Linuxでのデーモン自動起動設定
  2. No.1200 chkconfigが使えない。。 - Web Patio - Fedoraで自宅サーバー構築
  3. SE奮闘記: Ubuntuでサービス一覧表示(chkconfigがないから)
  4. エンタープライズ: - 起動スクリプトを知って基礎を理解しよう
  5. UNIXマニュアル(man chkconfig

リモートからのアクセス

vncserveを起動しておけば、リモートのVNCクライアントからデスクトップにアクセスし操作することができる。$HOMER/.vnc/xstartup を編集することにより、起動時に自動起動するアプリケーションを変更することができます(但しこの修正は既存のデスクトップに対しては反映されません)。

【書式】
$ vncserver ディスプレイ番号
【例】
$ vncserver :13

クライアント側はRealVNC Free Editionを使う。但し、この無料版が使えるプラットフォームはWindowsとLinux。Macで使うには有料のEnterprise Editionが必要。

Windowsの場合、Xming+Xmingフォントでも同等のことが可能らしい[*]。

リモートからのサーバ管理

IPMI(Intelligent Platform Management Interface)メインのOSとは独立で動作して本体を監視・管理する仕組み。OSにIPMIのドライバを組み込んでおく必要がある。このドライバはLinuxではOpenIPMI、SolarisではBMCと呼ばれている。ipmitoolはこのIPMIを制御するコマンド。

【書式】ヘルプ表示
impitool -h
【書式】バージョン表示
impitool -V
【書式】
impitool -H ホスト名 -p 接続先ポート番号 -U ユーザ名 コマンド
-H ホスト名
接続先機器のホスト名(またはIPアドレス?)
接続先機器のホスト名(またはIPアドレス?)
-p 接続先ポート番号
接続先ポート番号。指定がない場合の既定値は623。
-U ユーザ名
接続に用いるユーザのユーザ名。
コマンド
bmc | mc resetbmc | mc

Dellサーバをリモート制御するコマンドにracadmがある[8]。ただ、実際試してみても応答が返らず。サーバ側で応答をONにするなどの操作が必要?

racadm -r 制御対象サーバのIPアドレス -u ユーザID -p パスワード サブコマンド オプション
-r 制御対象サーバのIPアドレス
-u ユーザID
制御対象サーバへのアクセスに用いるユーザのユーザID
-p パスワード
制御対象サーバへのアクセスに用いるユーザのパスワード
サブコマンド
指定できるサブコマンドと動作内容は以下の通り。
サブコマンド 内容
help サブコマンド サブコマンドの利用方法についての概要を表示する。

プロセス間通信(IPC)に関する情報取得

ipcsコマンドは、プロセス間通信( InterProcess Communication、IPC)に関する情報を提供する[22]、[23]

【書式1】
ipcs [ -asmq ] [ -tclup ]
【書式2】
ipcs [ -smq ] -i id
【書式3】ヘルプ表示
ipcs -h

-iオプションを使って指定したidのリソースに関する情報だけを表示することができます。

リソース指定

-m
共有メモリセグメント
-q
メッセージキュー
-s
セマフォ配列
-a
全て出力(これが既定値)

出力指定

-t
時間
-p
プロセスid(pid)
-c
作成者
-l
制限
-u
概要

起動カーネルを変更

yum updateでkernelを更新したところ、OS起動時にKernel Panicを起こし起動できなくなった。CentOS起動時に起動メニューを開き最新の一つ前のKernelを選択して起動させる方法もあるがそれだと起動時に操作が必要。デフォルト起動Kernelを変更するには起動設定を変更する[9]

具体的には、/boot/grub/grub.confdefault=数値の値を変更する。

[root@server ~]# cat /boot/grub/grub.conf
...
#boot=/dev/sda
default=0  ←デフォルトで起動するKernelを番号で指定
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-573.22.1.el6.x86_64) ←これが0番
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.22.1.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root nomodeset 
          rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=128M  KEYBOARDTYPE=pc KEYTABLE=jp106 
          rd_LVM_LV=VolGroup/lv_root LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet nouveau.modeset=0 rd.driver.blacklist=nouveau 
          video=vesa:off vga=normal
title CentOS (2.6.32-573.18.1.el6.x86_64) ←これが1番
        root (hd0,0)
        kernel /vmlinuz-2.6.32-573.18.1.el6.x86_64 ro root=/dev/mapper/VolGroup-lv_root nomodeset 
          rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap crashkernel=128M  KEYBOARDTYPE=pc KEYTABLE=jp106 
          rd_LVM_LV=VolGroup/lv_root LANG=ja_JP.UTF-8 rd_NO_DM rhgb quiet nouveau.modeset=0 rd.driver.blacklist=nouveau 
          video=vesa:off vga=normal
        initrd /initramfs-2.6.32-573.18.1.el6.x86_64.img
...

プロセス間通信(IPC)オブジェクトを消去

ipcrmコマンドは、プロセス間通信(IPC)オブジェクトを消去する[24]

ipcrm [ -M key | -m id | -Q key | -q id | -S key | -s id ] ...

外部からの呼び出し対応(リモートプロシージャコール)の状態を表示する(rpcinfo)

rpcinfoはRPC サーバに対して RPC 呼び出しを行い、得られた情報を表示する。

【書式1】RPCプログラム一覧
rpcinfo -p ホスト名
-p

ホスト名に登録されているRPCプログラムの一覧を表示する。ホスト名を指定しなかった場合の初期値は自身(=hostnameコマンドの返り値)となる。

【例】
$ rpcinfo -p
   プログラム バージョン プロトコル ポート
    100000    2   tcp    111  portmapper
    100000    2   udp    111  portmapper
    100021    1   udp  51661  nlockmgr
    100021    3   udp  51661  nlockmgr
    100021    4   udp  51661  nlockmgr
    100021    1   tcp  59782  nlockmgr
    100021    3   tcp  59782  nlockmgr
    100021    4   tcp  59782  nlockmgr
    100009    1   udp    940  yppasswdd
    100024    1   udp    900  status
    100024    1   tcp    903  status
    100007    2   udp    995  ypbind
    100007    1   udp    995  ypbind
    100007    2   tcp    998  ypbind
    100007    1   tcp    998  ypbind
    100004    2   udp    945  ypserv
    100004    1   udp    945  ypserv
    100004    2   tcp    949  ypserv
    100004    1   tcp    949  ypserv
【書式】
rpcinfo [-n portnum] -u host program [version] 
rpcinfo [-n portnum] -t host program [version] 
rpcinfo -b program version 
rpcinfo -d program version

ファイルシステム関係

システム全体のディスク容量状況を知るにはdfコマンドを、ディレクトリやユーザを限定して使用状況を知りたい場合はduコマンドを用いる。NFSマウントする際の設定ファイル(/etc/fstab)内などで用いるデバイス名の別名をつけるにはe2labelを用いる。

デバイスごとのディスク情報

df ブロックサイズ指定 オプション ファイル名 | ファイルシステム ...

ブロックサイズ指定:0〜1個選択(指定がない場合は環境変数の BLOCKSIZE 指定が用いられる)

-b
ブロックサイズを 512 バイトとして容量を表示(環境変数の BLOCKSIZE 指定より優先する)。
-g
ブロックサイズを 1073741824 バイト(1Gバイト)として容量を表示(環境変数の BLOCKSIZE 指定より優先する)。
-H
人が読みやすい形式で出力する。数値が4桁以下になるよう、表示に適当な単位サフィックス(バイト(B)、キロバイト(K)、メガバイト(M)、ギガバイト(G)、テラバイト(T)、ペタバイト(P))を使う。1KB=1000Bとして表示(他のサフィックスも同等)。
-h
-Hと同様。但し1KB=1024Bとして表示(他のサフィックスも同等)
-k
ブロックサイズを 1024 バイト(1Kバイト)として容量を表示(環境変数の BLOCKSIZE 指定より優先する)。
-m
ブロックサイズを 1048576 バイト(1Mバイト)として容量を表示(環境変数の BLOCKSIZE 指定より優先する)。
-P
ブロックサイズを POSIX 準拠の 512 バイトとして容量を表示(環境変数の BLOCKSIZE 指定より優先する)。

オプション:任意数選択(引数のないオプションはハイフンの後にまとめて指定可能)

-a
全マウントポイント表示(MNT_IGNOREフラグ付きでマウントされたものも含む)
-i
フリーな inode の情報も表示。
-l
ローカルにマウントされたファイルシステムの情報のみを表示。
-n
コマンド実行時にファイルシステムに統計情報を要求せず、以前にファイルシステムから取得しておいた統計情報を表示する。統計情報の取り出しに長時間を要する状態にあるファイルシステムがある場合に有効。但し、情報が現在のものとは異なる可能性がある。
-t ファイルシステムの型
--type ファイルシステムの型
指示した型のファイルシステムに関する情報のみを表示する。
Mac OS X 10.4.11のterminal(BSD May 8, 1995)の場合
コンマで区切って複数の型を指定することもできる。ファイルシステムの型名の前に "no" を付けて、そのファイルシステム型を表示対象から除外する指定も可能。システムで利用可能なファイルシステム型はlsvfsコマンドで知ることができる。
【例】NFS,NULLFSを除くファイルシステムを表示
df -t nonfs,nullfs
RHEL5.5のterminal(GNU fileutils 4.1 18 June 2002)の場合
このオプションを複数記述することで複数の型を指定することもできる。
【例】NFS,NULLFSを除くファイルシステムを表示
df -t nonfs,nullfs
[RHEL5]-T
ファイルシステムの型も表示する。
[Mac Darwin]-T ファイルシステムの型
指定した型のファイルシステムについてのみ情報を表示する。ファイルシステムの型はコンマ区切りで複数指定できる。型名の前に「no」を付けるとそのファイルシステム以外の情報を表示する。システムで利用可能なファイルシステムの型はlsvfsコマンドで得られる。
-x ファイルシステムの型
--exclude-type ファイルシステムの型
RHEL5.5のterminal(GNU fileutils 4.1 18 June 2002)のオプション。 指定した型のファイルシステムに関する情報を除外する。このオプションを複数記述することで複数の型を除外することもできる。

あるファイルを削除した時、duコマンドの返り値は更新されるのに、dfコマンドの返り値は更新されない場合がある。これはファイルが使用中である時、dfの結果は更新されないことが原因らしい[2]

rootユーザでGNOMEが起動している(=デスクトップでログインしている)時、一般ユーザでdfコマンドを実行すると「df: `/root/.gvfs': 許可がありません」と表示される。rootユーザがデスクトップからログアウト(または強制ログアウト)すれば出なくなった。

$ df -h
df: `/root/.gvfs': 許可がありません
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       211G   31G  170G  16% /
tmpfs            32G  228K   32G   1% /dev/shm
/dev/sda2      1008M  108M  849M  12% /boot
/dev/sda1       128M  262K  128M   1% /boot/efi
/dev/sdb2        13T  9.7T  2.1T  83% /data
/dev/sdb1       2.0T   77G  1.8T   5% /home
$ w
 13:08:16 up 222 days, 23:55,  2 users,  load average: 17.13, 16.01, 15.78
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1     :0               25May17 222days  5:57   5:57  /usr/bin/Xorg :0 -br -verbose -audit 4 -auth /var/run/g
kudou    pts/1    client        13:07    0.00s  0.01s  0.00s w
$ ps -ef | grep tty1
root       860   777  0 13:08 pts/6    00:00:00 grep tty1
root     48610 48608  0 Apr17 tty1     00:05:57 /usr/bin/Xorg :0 -br -verbose -audit 4
 -auth /var/run/gdm/auth-for-gdm-5EWJXt/database -nolisten tcp vt1
$ sudo kill 48610
$ w
 13:09:18 up 222 days, 23:56,  2 users,  load average: 17.09, 16.10, 15.82
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
kudou    pts/1    pdbjif1-p        13:07    0.00s  0.03s  0.06s sshd: kudou [priv]
$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda4       211G   30G  170G  16% /
tmpfs            32G  228K   32G   1% /dev/shm
/dev/sda2      1008M  108M  849M  12% /boot
/dev/sda1       128M  262K  128M   1% /boot/efi
/dev/sdb2        13T  9.7T  2.1T  83% /data
/dev/sdb1       2.0T   77G  1.8T   5% /home

ユーザごとディスク情報

du シンボリックリンクの扱い -I フィルタ 表示階層 表示単位 ファイル・ディレクトリ名

シンボリックリンクの扱い任意で1つ選択(選択しない場合の既定の動作は-P

-H
コマンドで指定されたシンボリックリンクファイルのみリンク元の情報を返す。階層内を調べている途中で見つかったシンボリックリンクファイルのリンク元はたどらない(リンクファイル自身の占める大きさを返す)。
-L
コマンドで指定されたシンボリックリンクファイル、および階層内を調べている途中で見つかったシンボリックリンクファイルともにリンク元をたどってリンク先の情報を返す。
-P
リンクは全くたどらず、リンクファイルそのものの占める大きさを返す(既定の動作)。

表示階層任意で1つ選択

-a
指定階層内の各ファイルの情報も表示
-s
指定したファイル・ディレクトリの情報のみ表示(-d 0と同じ意味)。
【Mac Darwin】-d 階層数
【RHEL5】--max-depth=階層数
階層数で指定した深さまでの全ファイル・ディレクトリの情報を表示。自己階層が0で、直下の階層が1。

表示単位任意で1つ選択

-h
人が読みやすい形式で出力。適当な単位( Byte, Kilobyte, Megabyte, Gigabyte, Terabyte, Petabyte )で表示。
-k
1024バイト(1キロバイト)単位で表示。
【例】/bin 配下全ての使用量を表示
shell> du -h /bin
5.6M    /bin

デバイスのラベル名を設定・表示

【書式】
e2label デバイス名 ラベル名
※パスが通っていない場合は /sbin/e2label とフルパスで指定する必要あり。"su -" でrootになれば通常不要。

【例】
shell> df df はディスクの使用状況を表示する
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda2             10154020    765776   8864124   8% /
/dev/sdb5             10157368   8285392   1347688  87% /var
/dev/sdb4             10157368    154304   9478776   2% /tmp
/dev/sdb2             20314748   5716548  13549624  30% /usr
/dev/sdb1             20314748    415176  18850996   3% /opt
/dev/sda1               505604     28526    450974   6% /boot
tmpfs                  4121292         0   4121292   0% /dev/shm
pdbjkf:/home         7687342592 373099968 6923748000   6% /home
shell> e2label /dev/sdb5 ←/dev/sdb5 の状況を表示
/var
shell> e2label /dev/sdb6 /var/ftp←/dev/sdb6 の設定を追加・変更

ファイルシステムをマウント(mount)

mount コマンドは指定した内容をファイルシステムにマウントし、使えるようにする[1]

【書式1】情報表示のみ
mount オプション1
【書式2】ファイルシステムリスト表示
mount -l -t ファイルシステムタイプ
【書式3】fstabに記載されている(指定タイプの)ファイルシステムを全てマウントする
mount -a オプション2 -t vfstype -O オプション3
【書式4】
mount オプション2 -o オプション4,... デバイス名 | ディレクトリ名
【書式5】
mount オプション2 -t ファイルシステムタイプ -o オプション4 デバイス名 | ディレクトリ名
【書式6】ファイル階層の一部をどこか別の場所に再マウントする
mount --bind 元となるマウントポイント 新マウントポイント
※この呼び出しの後、同じ内容を 2 つの場所でアクセスできる。 1 つのファイルを (1 つのファイル上に) 再マウントすることもできる。[26]

オプション1(情報表示のみ)

-h
簡単な使い方を表示して終了する。
-V
バージョン情報を表示して終了する。

書式2(ファイルシステムリスト表示)オプション

-l
ext2、ext3、XFS のラベルリストをリストに追加して表示。
-t ファイルシステムタイプ
ファイルシステムタイプが指定したものであるもののみ表示。

オプション2

-f
強制的にアンマウントする(到達不可能なNFSシステムの場合、カーネル 2.1.116以降が必要)
-F
(書式3のみ)
-n
-r
-s
-v
情報を詳細に表示する(verbose)。
-w

オプション4

-o オプション指定
マウント時のオプションを指定。オプション指定で指定できる値はファイルシステムのタイプによって異なる。
async
atime
noatime
auto
noauto
context=コンテキスト
fscontext=コンテキスト
defcontext=コンテキスト
rootcontext=コンテキスト
default
オプションの既定値(rw,suid,dev,exec,auto,nouser,async)を指定するのと同じ。

参考文献・サイト

  1. man mount (Linux 2.6 mount(8), 2004-12-16)

ファイルシステムのマウントを解除(umount)

umount コマンドは指定したファイルシステムのマウントを解除する[1]

【書式1】情報表示のみ
umount オプション1
【書式2】/etc/mtab に記述されている全ファイルシステムをアンマウント
umount -a オプション2 -t vfstype -o オプション3
【書式3】
umount オプション2 ディレクトリ名 | デバイス名...

オプション1(情報表示のみ)

-h
簡単な使い方を表示して終了する。
-V
バージョン情報を表示して終了する。

オプション2

-d
アンマウント対象のデバイスが loop デバイスの場合、loop デバイスの解放も行う。
-f
強制的にアンマウントする(到達不可能なNFSシステムの場合、カーネル 2.1.116以降が必要)
-l
指定されたファイルシステムをシステムから切り離し、ファイルシステムへの参照全てが busy でなくなった時点ですぐに整理する(カーネル 2.4.11 以降対象、lazy アンマウント)
-n
アンマウントの際、/etc/mtab への書き込みを行わない。
-r
アンマウントに失敗した場合、読み取り専用モードで再びマウントを試みる。
-t vfstype
指定したタイプのファイルシステムのみを対象とする。コンマで区切って複数の値を指定することもできる。また最初に "no" を記せば対象と「しない」ファイルシステムのタイプを指定したことになる。
-v
情報を詳細に表示する(verbose)。

参考文献・サイト

  1. man umount (Linux 2.0 umount(8), 26 July 1997)

永続的なファイルシステム情報の設定(fstab)

fstabファイルには様々なファイルシステムに関する情報が記述されます。fstabはプログラムによって読み取られることはありますが、書き込まれることはありません。システム管理者はこのファイルに適切な情報を記述し、管理しておく必要があります。各ファイルシステムの情報はそれぞれ別々の行に記載されます。行内の項目はタブか空白で区切られます。シャープ(#)で始まる行はコメントとして処理され、空白行は無視されます。記述する順序は重要です。なぜならfsck、mount、umountは記述された順に処理されるからです。そうでないとOS起動時、mountallはファイルを壊れたものとして処理します(そうするのが安全であると考えられる時は)[1]

第1項目
マウント対象とするブロックデバイスやリモートファイルシステムを指定します。
第2項目
ファイルシステムのマウント先となるマウントポイントを指定します。
第3項目
ファイルシステムの種類を指定します。Linuxは以下に挙げる様々なファイルシステムをサポートしています。adfs、affs、autofs、coda、coherent、cramfs、devpts、efs、ext2、ext3、hfs、iso9660、jfs、minix、msdos、ncpfs、nfs、ntfs、proc、qnx4、reiserfs、romfs、smbfs、sysv、tmpfs、udf、ufs、umsdos、vfat、xenix、xfsなど。現在稼働しているカーネルがサポートするファイルシステムは、/proc/filesystemsで参照できます。
第4項目
ファイルシステムに関係するマウントオプションを指定します。複数のオプションはコンマで区切って記します。ファイルシステムに依存しない基本的なオプションは以下の通り。
defaults
既定のオプション(rw,suid,dev,exec,auto,nouser,async)を指定する。
noauto
OS起動時などmount -aが実行された時でもマウントを行わない。
user
一般ユーザにマウントを許可する。
owner
デバイスの所有者がマウントすることを許可する。
comment
fstabを管理するプログラムだけが使います。
nofail
デバイスが存在しなかった場合でもエラー通知を行わない。
第5項目
dumpコマンドがファイルシステムをdump対象とするのかどうかをを決める。 指定がない場合、または0が指定された場合、そのファイルシステムはdump対象には含まれません。
第6項目
OS再起動時、fsckプログラムがファイルシステムのチェックを行う順序を指定します。

クラスタリング関係

クラスタリング状況確認(clustat)

【書式】
clustat オプション

【例】
# clustat
Cluster Status for ftp.pdbj.org @ Wed May 18 11:10:12 2011
Member Status: Quorate

 Member Name                                       ID   Status
 ------ ----                                       ---- ------
 server1.pdbj.org                                      1 Online, rgmanager
 server2.pdbj.org                                      2 Online, Local, rgmanager

 Service Name                      Owner (Last)                             State         
 ------- ----                      ----- ------                             -----         
 service:vsftpd                    server1.pdbj.org                         started       
 service:named                     server1.pdbj.org                         started       

-I
現在のクラスタリングメンバーのメンバーIDを表示する。
【例】
# clustat -I
0x00000001
-i 更新間隔
クラスタリング状況を指定した更新間隔秒ごとに更新して表示する。-x オプションとは排他。
-Q
-s サービス
指定したサービスのクラスタリング状況を表示する。指定がない場合はクラスタリング対象となっている全てのサービスについて表示する。
-x
クラスター設定・状況をXML形式で表示する。-i オプションとは排他。
-v
バージョン情報を出力して終了する。
【例】
# clustat -v
clustat version DEVEL

クラスタリング状況管理(clusvcadm)

【書式】
clusvcadm オプション
-d クラスタサービス名
指定したクラスタサービスを停止して無効化する(Disable)。
-e クラスタサービス名 -F
指定したクラスタサービスを開始して有効化する(Enable)。通常rgmanagerはローカルでサービスを開始するが、-F オプションを指定すると、どのサーバでサービスを開始させるかを決めるのにフェールオーバードメインルールを用いる。あるいは-mオプションを使ってどのサーバでサービスを開始するのか指定することもできる。
-r クラスタサービス名
指定したクラスタサービスを実行するサーバを別のクラスタメンバーに変更する(Relocate)。-mオプションを併用し、どのサーバでサービスを開始するのか指定することもできる。
-m クラスタメンバー名
どのサーバでサービスを開始するのか指定する。-eオプションまたは-rオプションと一緒に指定して用いる。

UPS関係

apcupsdはAPC社UPSを管理する。apcupsd.conf(通常/etc/apcupsd配下)で設定を行う(apcupsd.conf v3.14.6 Jan 10, 2009)。

UPSTYPEとDEVICE
UPSとの接続状態に応じ以下の設定を記述する。
UPSTYPE DEVICE 備考
apcsmart /dev/tty** 新型のシリアルキャラクターデバイスを利用している場合の指定。USBではなくシリアルケーブルを使ってSmartUPSの各モデルに応じたものを指定する。
usb (空白) 最近のUPSの場合、USBで接続することがほとんどでしょう。この場合、DEVICEには何も指定しません。接続の検出は自動で行われます。
net ホスト名:ポート番号 UPSと機器がネットワークを介して接続されている場合、apcupsdのネットワーク情報サーバと通信して情報を得ることになります。そのapcupsdサーバのホスト名と接続先ポート番号を指定します。
UPSとシリアルなどで直接自身に接続されていない場合、情報を提供している接続先機器を指定する。この場合、合わせて「UPSTYPE net」の指定が必要。
UPSTYPE タイプ
UPSNAME UPS名
ログファイルやステータス報告で用いられるUPS名を指定する。
UPSCABLE ケーブル名
UPSとコンピュータを接続しているケーブルの種類を記述する。指定できる値は以下の通り。
  • simple
  • smart
  • ether
  • usb
  • 940-0119A
  • 940-0127A
  • 940-0128A
  • 940-0020B
  • 940-0020C
  • 940-0023A
  • 940-0024B
  • 940-0024C

SNMP関係

以下のメッセージが繰り返しSNMPのログに出力され、ログが肥大化する現象への対応策について[15]

[/var/log/snmpd.log]
[smux_accept] accepted fd 11 from 127.0.0.1:xxxxx
refused smux peer: oid SNMPv2-SMI::enterprises.674.10892.1, descr Systems Management SNMP MIB Plug-in Manager

以下はRHEL 5.7にて、実際行った措置。

1. SNMPD設定ファイルを編集
[/etc/snmp/snmpd.conf]
##smuxpeer .1.3.6.1.4.1.674.10892.1
↓
smuxpeer .1.3.6.1.4.1.674.10892.1 パスワード
2. OSMAにパスワードを設定
# /opt/dell/srvadmin/dataeng/bin/dcecfg32 command=setsmuxpassword password=パスワード
3. OSMAにパスワードを設定
# srvadmin-services.sh restart

Shutting down DSM SA Shared Services:                      [  OK  ]


Shutting down DSM SA Connection Service:                   [  OK  ]


Stopping Systems Management Data Engine:
Stopping dsm_sa_snmp32d:                                   [  OK  ]
Stopping dsm_sa_eventmgr32d:                               [  OK  ]
Stopping dsm_sa_datamgr32d:                                [  OK  ]
Stopping Systems Management Device Drivers:
Stopping dell_rbu:                                         [  OK  ]
Starting mptctl:
Waiting for mptctl driver registration to complete:
                                                           [  OK  ]

Starting Systems Management Device Drivers:
Starting dell_rbu:                                         [  OK  ]
Starting ipmi driver: Already started                      [  OK  ]
Starting Systems Management Data Engine:
Starting dsm_sa_datamgr32d:                                [  OK  ]
Starting dsm_sa_eventmgr32d:                               [  OK  ]
Starting dsm_sa_snmp32d:                                   [  OK  ]
Starting DSM SA Shared Services:                           [  OK  ]

Starting DSM SA Connection Service:                        [  OK  ]
4. SNMPDを再起動
# /etc/init.d/snmpd restart
snmpd を停止中:                                            [  OK  ]
snmpd を起動中:                                            [  OK  ]

上記措置実施後のログの例は以下の通り。

[/var/log/snmpd.log]
[smux_accept] accepted fd 11 from 127.0.0.1:50675
accepted smux peer: oid SNMPv2-SMI::enterprises.674.10892.1, descr Systems Management SNMP MIB Plug-in Manager