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 書式
-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
--ppid 親プロセス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
継続監視する例:
※ユーザ「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
参考文献・サイト
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
-b
-n
オプションで指定された回数に達するか、プロセスがkillされるまで実行を続ける。
-a
-c a
(積算モードで表示)と同じ。
-c モード
a
d
-r
オプションで再び有効にするかまたはr
で対話的モードにする。e
n
-d 表示回数
-d
-c d
(デルタモードで表示)と同じ。
-e
-c e
(絶対モードで表示)と同じ。
-i
-I
-n 整数
-mio|cpu
-n 自然数
-ofield
-q
-s時間
-S
-u
-t
-v
kill
コマンドはジョブ・プロセス類に終了などのシグナルを送信する。
【書式1】指定したプロセスIDにシグナルを送る kill -s シグナル プロセスID プロセスID... kill -シグナル プロセスID プロセスID... 【書式2】指定可能なシグナル値・番号一覧を出力 kill -l シグナル
kill -l
で指定できる値の一覧が閲覧できる。「SIGHUP」(1) なら通常終了、「SIGKILL」(9) なら強制終了など。
$ 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
--
」オプションを指定する。【例】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
参考文献・サイト
timeout
コマンドはプログラムに実行時間の制限をかけることができる[3]。CentOS 6系で既定のRPMレポジトリからインストールできるcoreutilsのバージョン8系にはtimeoutコマンドが付随していたが、CentOS 5系で既定のRPMレポジトリからインストールできるcoreutilsのバージョンは5系。これにはtimeoutコマンドは付随していない。RPM pboneにはtimeout単独のRPMパッケージがあった。これを使ってインストールすると、CentOS 5系でもtimeoutコマンドが使えるようになった。
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 を入力すると表示される $
参考文献・サイト
技術サポートに送るためのシステムデバッグ情報の圧縮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
参考文献・サイト
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の設定は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はルートディレクトリを指定してコマンドを実行する。多くのシステムにおいて、これができるのはスーパーユーザのみである。
通常、ファイル名はディレクトリ構造の一番根元(ルート root=根)、つまり ‘/’ を起点として調べられる。chroot はこのルートを指定したディレクトリに変更して、コマンドを実行する。 ディレクトリはオプション コマンド引数を指定することもできる。 command が指定されないと、デフォルトは SHELL 環境変数の値となる。
chroot jail から起動されたプロセスがシステムライブラリにアクセスできないという状況は、非常にありがちなので注意すること。
【書式】 chroot ディレクトリ コマンド コマンド引数...
sftpでログイン直後のホームディレクトリの外に行けなくするchrootを実施する方法について[20]。sshの場合はホーム領域の外に行けなくする(ssh)参照。
# 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>
/etc/ssh/sshd_config
)の設定を変更し、sshdサービスを再起動する。
【例】特定ユーザに対する設定 # 内部プロセスを使用するようにする Subsystem sftp internal-sftp # 特定ユーザに対する設定 Match User user ChrootDirectory /chroot
sshでログイン直後のホームディレクトリの外に行けなくするchrootを実施する方法について。
sshの場合は、必要なプログラム、ライブラリ、デバイスなどをchrootディレクトリ配下に作成するなどsftpでのchrootに比べるとより繁雑[16][17][18][21]。
/etc/ssh/sshd_config
)の末尾に以下の設定を追記。
【例】hogeというユーザに対し、/chroot をシステムルートとなるようにする
Match User hoge # hogeというユーザにchrootの適用する
ChrootDirectory /chroot # chrootされたユーザにはこのディレクトリがシステムルート(/
)に見える
【例】/chroot がシステムルートとなるようにする # ls -ld /chroot drwxr-xr-x 10 root root 4096 11月 6 11:36 /chroot
【例】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
# /etc/init.d/sshd restart
※ローカルユーザ認証の場合 # 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 がログインシェルとして使われる
shell> last ユーザ名
参考文献・サイト
ユーザがログインした時、/etc/motd
に記載した内容が表示される[4]
【書式】 ldd オプション... プログラム名
オプション
--version
ldd
のバージョンを表示-v
、--verbose
-u
、--unused
-d
、--data-relocs
-r
、--function-relocs
--help
参考文献・サイト:
man ldd
)コマンドを実行する際、実際に呼び出すプログラムを指定する。
【書式】 alternatives オプション --install リンク コマンド名 パス 優先度 --slave リンク コマンド名 パス... --initscript サービス alternatives オプション --remove コマンド名 パス alternatives オプション --set コマンド名 パス alternatives オプション --auto コマンド名 alternatives オプション --display コマンド名 alternatives オプション --config コマンド名
このコマンドは、代替システムで構成されるシンボリックリンクについての設定の作成、削除、維持、表示を行う。
参考:UNIXヘルプ(man alternatives)
コマンドの前に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の頭にシャープ(#)を付ける。但し、多くのシェルにおいてシャープはコメントと解釈されてしまうため、その更に前にバックスラッシュ(\)を記してエスケープする必要があるかもしれない。
参考文献・サイト:
man visudo
)【インストール】 apt-get install パッケージ名 【パッケージ検索】 apt-cache search キーワード 【最新のパッケージリスト取得】 apt-get update
参考文献・サイト:
MDADM…Ubuntu 9.10日本語Remixのヘルプより
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つのデバイスだけに関係します。 この機能は障害を取り出すのに使える実際のデバイス上のレイヤーを提供します。
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/chkconfig
2)。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
なお、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 に記述するのと同じ?
参考文献・サイト
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 ユーザ名 コマンド
bmc | mc | resetbmc | mc |
Dellサーバをリモート制御するコマンドにracadm
がある[8]。ただ、実際試してみても応答が返らず。サーバ側で応答をONにするなどの操作が必要?
racadm -r 制御対象サーバのIPアドレス -u ユーザID -p パスワード サブコマンド オプション
サブコマンド | 内容 |
---|---|
help サブコマンド | サブコマンドの利用方法についての概要を表示する。 |
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
-c
-l
-u
yum updateでkernelを更新したところ、OS起動時にKernel Panicを起こし起動できなくなった。CentOS起動時に起動メニューを開き最新の一つ前のKernelを選択して起動させる方法もあるがそれだと起動時に操作が必要。デフォルト起動Kernelを変更するには起動設定を変更する[9]。
具体的には、/boot/grub/grub.conf
のdefault=数値
の値を変更する。
[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 ...
ipcrm
コマンドは、プロセス間通信(IPC)オブジェクトを消去する[24]。
ipcrm [ -M key | -m id | -Q key | -q id | -S key | -s id ] ...
rpcinfo
はRPC サーバに対して RPC 呼び出しを行い、得られた情報を表示する。
【書式1】RPCプログラム一覧
rpcinfo -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
-g
-H
-h
-H
と同様。但し1KB=1024Bとして表示(他のサフィックスも同等)-k
-m
-P
オプション:任意数選択(引数のないオプションはハイフンの後にまとめて指定可能)
-a
-i
-l
-n
-t ファイルシステムの型
--type ファイルシステムの型
lsvfs
コマンドで知ることができる。
【例】NFS,NULLFSを除くファイルシステムを表示 df -t nonfs,nullfs
【例】NFS,NULLFSを除くファイルシステムを表示 df -t nonfs,nullfs
-T
-T ファイルシステムの型
lsvfs
コマンドで得られる。
-x ファイルシステムの型
--exclude-type ファイルシステムの型
あるファイルを削除した時、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
と同じ意味)。
-d 階層数
--max-depth=階層数
表示単位任意で1つ選択
-h
-k
【例】/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
コマンドは指定した内容をファイルシステムにマウントし、使えるようにする[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
-t ファイルシステムタイプ
オプション2
-f
-F
-n
-r
-s
-v
-w
オプション4
-o オプション指定
rw,suid,dev,exec,auto,nouser,async
)を指定するのと同じ。
参考文献・サイト
umount
コマンドは指定したファイルシステムのマウントを解除する[1]。
【書式1】情報表示のみ
umount オプション1
【書式2】/etc/mtab
に記述されている全ファイルシステムをアンマウント
umount -a オプション2 -t vfstype -o オプション3
【書式3】
umount オプション2 ディレクトリ名 | デバイス名...
オプション1(情報表示のみ)
-h
-V
オプション2
-d
-f
-l
-n
/etc/mtab
への書き込みを行わない。-r
-t vfstype
-v
参考文献・サイト
fstabファイルには様々なファイルシステムに関する情報が記述されます。fstabはプログラムによって読み取られることはありますが、書き込まれることはありません。システム管理者はこのファイルに適切な情報を記述し、管理しておく必要があります。各ファイルシステムの情報はそれぞれ別々の行に記載されます。行内の項目はタブか空白で区切られます。シャープ(#
)で始まる行はコメントとして処理され、空白行は無視されます。記述する順序は重要です。なぜならfsck、mount、umountは記述された順に処理されるからです。そうでないとOS起動時、mountallはファイルを壊れたものとして処理します(そうするのが安全であると考えられる時は)[1]。
/proc/filesystems
で参照できます。
rw,suid,dev,exec,auto,nouser,async
)を指定する。
mount -a
が実行された時でもマウントを行わない。
【書式】 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
【例】 # clustat -I 0x00000001
-i 更新間隔
-Q
-s サービス
-x
-v
【例】 # clustat -v clustat version DEVEL
【書式】
clusvcadm オプション
-F
オプションを指定すると、どのサーバでサービスを開始させるかを決めるのにフェールオーバードメインルールを用いる。あるいは-m
オプションを使ってどのサーバでサービスを開始するのか指定することもできる。
-m
オプションを併用し、どのサーバでサービスを開始するのか指定することもできる。
-e
オプションまたは-r
オプションと一緒に指定して用いる。
apcupsdはAPC社UPSを管理する。apcupsd.conf
(通常/etc/apcupsd
配下)で設定を行う(apcupsd.conf v3.14.6 Jan 10, 2009)。
UPSTYPE | DEVICE | 備考 |
---|---|---|
apcsmart | /dev/tty** | 新型のシリアルキャラクターデバイスを利用している場合の指定。USBではなくシリアルケーブルを使ってSmartUPSの各モデルに応じたものを指定する。 |
usb | (空白) | 最近のUPSの場合、USBで接続することがほとんどでしょう。この場合、DEVICEには何も指定しません。接続の検出は自動で行われます。 |
net | ホスト名:ポート番号 | UPSと機器がネットワークを介して接続されている場合、apcupsdのネットワーク情報サーバと通信して情報を得ることになります。そのapcupsdサーバのホスト名と接続先ポート番号を指定します。 |
以下のメッセージが繰り返し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にて、実際行った措置。
[/etc/snmp/snmpd.conf]
##smuxpeer .1.3.6.1.4.1.674.10892.1
↓
smuxpeer .1.3.6.1.4.1.674.10892.1 パスワード
# /opt/dell/srvadmin/dataeng/bin/dcecfg32 command=setsmuxpassword password=パスワード
# 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 ]
# /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