Linux リテラシ - 第4回 演習問題 解答
一般にプロンプト文字列が「$」のときは一般ユーザー、「#」のときはrootでそのコマンドを実行することを表します。
:問題(1):psコマンドとそのオプションについて調べ、「ps aux」がなにをするものなのか確かめよ。
ps(1)を見ることで、すべて調べることが出来ます。
:問題(2):viを起動した状態でさらに別の端末を開きvi(vim)プロセスがあることを確かめよ。
viを起動後、他の端末から
$ ps aux | grep viuser 3366 6.0 0.8 11092 2980 pts/2 S+ 18:15 0:00 vimuser 3368 0.0 0.2 5076 760 pts/1 R+ 18:15 0:00 grep viちなみにviではなくvimが立ち上がっているのは次のようにエイリアスが設定されているためです。
alias vi='vim':問題(3):vi(vim)プロセスに対してTERMシグナルを送って終了させよ。
問題2より該当プロセスのPIDが分かったので
$ kill -TERM 3366として終了できます。
:問題(4):sleepはオプションに数値を与えるとその秒数だけ停止し続けるコマンドである。これを使って1分間停止するプロセスを作り出し、それを中断させよ。
$ sleep 60としてから、Ctrl+cを入力してください。
:問題(5):ファイルsampleを作成し(内容はなんでもよい)、それに対してシンボリックリンクsample_linkを作成せよ。
$ echo dummy > sample$ cat sample_linkdummy
$ ln -s sample sample_link:問題(6):sample_linkの内容を表示しsampleのそれと同じであることを確認せよ。
$ cat sample_linkdummy:問題(7):sample_linkの内容を適当に変更し保存せよ。その結果sampleの内容が書き換わっていることを確認せよ。
エディタで編集したり、リダイレクトしたりすることで内容を変更します。
$ echo foo > sample_link$ cat samplefoo:問題(8):ディレクトリsample_dirを作成し(ディレクトリの中にファイルを1つ以上作成すること)、それに対してシンボリックリンクsample_link_dirを作成せよ。
$ mkdir sample_dir$ touch sample_dir/{a,b,c}$ ls -F sample_dir/a b c
$ ln -s sample_dir sample_link_dir:問題(9):sample_link_dirの内容を表示しsample_dirのそれと同じであることを確認せよ。
$ ls -F sample_link_dir/a b c:問題(10):作成したシンボリックリンクを削除せよ。
$ ls -Fsample sample_dir/ sample_link@ sample_link_dir@
$ rm sample_link sample_link_dirシンボリックリンクを削除しても、リンク先のファイルまでは削除されません。
$ ls -Fsample sample_dir/:問題(11):/etc/inittabを書き換えランレベルを3にし再起動せよ。
/etc/inittabを次のように書き換えて再起動します。
--- /etc/inittab.orig 2005-06-14 13:22:17.625459696 +0900+++ /etc/inittab 2005-06-14 13:22:33.587033168 +0900@@ -15,7 +15,7 @@ # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) #-id:5:initdefault:+id:3:initdefault:
# System initialization. si::sysinit:/etc/rc.d/rc.sysinitなおこのフォーマットのことをunified diff形式といいファイルへの変更を示すのによく使われます。
変更前のファイル/etc/inittab.orig(/etc/inittabのオリジナル、を意味します)と変更後の/etc/inittabを比較し、
削除された行の先頭に「-」、追加された行の先頭に「+」を付けて表示しています。
:問題(12):ランレベルを5にし再起動せよ。
問題11と逆の事を行います。
:問題(13):ntsysv、chkconfig —list、ls /etc/rc.d/rc5.dの結果を見比べそれぞれの対応を確かめよ。
今はランレベル5なので、ntsysvでチェックが付いているものはchkconfigで「5:on」と表示されており、
また/etc/rc.d/rc5.dにSで始まるシンボリックリンクがあるはずです。
ntsysvとの比較は目で確認する必要があるために面倒ですが、chkconfigと/etc/rc.d/rc5.dとの比較は
(やろうと思えば)次のようにして一回で行うことが出来ます。
# diff -u <(chkconfig --list|grep '5:on'|awk '{print $1}'|sort) \ <(ls /etc/rc.d/rc5.d/S*|sed 's/^.*S[0-9][0-9]//g'|sort)--- /dev/fd/63 2005-06-14 14:55:03.644296216 +0900+++ /dev/fd/62 2005-06-14 14:55:03.681290592 +0900@@ -15,6 +15,7 @@ irqbalance isdn kudzu+local mdmonitor messagebus netfsこの出力結果は、chkconfigの出力に含まれていないもの(local)が/etc/rc.d/rc5.dにあるということを示しています。
ではこのlocalはなんなのかというと
$ ls -lF /etc/rc.d/rc5.d/S*locallrwxrwxrwx 1 root root 11 5月 23 20:41 /etc/rc.d/rc5.d/S99local -> ../rc.local*このように/etc/rc.d/rc.localへのシンボリックリンクとなっています。起動スクリプトではないのでchkconfigでは管理していないというわけです。
:問題(14):SSHデーモン(sshd)が起動していることを確かめよ。
$ ps aux|grep sshdroot 1883 0.0 0.4 5772 1660 ? Ss 13:08 0:00 /usr/sbin/sshduser 13682 0.0 0.0 1644 184 tty2 R+ 15:25 0:00 grep sshd:問題(15):SSHデーモンを停止し、プロセスがなくなったことを確かめよ。
起動スクリプトを利用して停止させます。
# /etc/init.d/sshd stop$ ps aux|grep sshduser 13708 0.0 0.2 5080 764 tty2 R+ 15:26 0:00 grep sshd:問題(16):SSHデーモンを起動せよ。
# /etc/init.d/sshd start:問題(17):/etc/rc.d/rc5.dにある/etc/init.d/sshdへのシンボリックリンクを削除せよ。その後ntsysvを起動しsshdのチェックが外れていることを確認せよ。
# rm /etc/rc.d/rc5.d/S*sshd# ntsysvなおこのままではsshdへのチェックは外れたままになります。気になる人は再設定してください。
:問題(18):tailに-fオプションをつけて/var/log/messagesを開け。その状態で別の端末からsuを使って別のユーザーになり、どのようなログが出力されるか確認せよ。
# tail -f /var/log/messagesこの状態でユーザーuserにログインすると次のようなログが出力されます。
Jun 14 15:18:13 localhost su(pam_unix)[13593]: session opened for user root by user(uid=500):問題(19):続けてもう1回suを実行せよ。ただし、今度はわざとパスワード入力を間違えること。そのとき、/var/log/messagesにどのようなログが出力されるか確認せよ。
認証が失敗したことを示すログが出力されます。
Jun 14 15:19:10 localhost su(pam_unix)[13635]: authentication failure; logname=user uid=500 euid=0 tty= ruser=user rhost= user=root:問題(20):/etc/cron.*ディレクトリ中にどのような実行ファイルがあるか確認せよ。
$ ls -F /etc/cron.*/etc/cron.deny
/etc/cron.d:
/etc/cron.daily:00-logwatch@ 0anacron* prelink* slocate.cron* tmpwatch*00-makewhatis.cron* logrotate* rpm* tetex.cron* yum.cron*
/etc/cron.hourly:
/etc/cron.monthly:0anacron*
/etc/cron.weekly:00-makewhatis.cron* 0anacron*ログ解析結果の通知、ファイル検索用のデータベースの更新、ログのローテート、パッケージの更新などを行うためのスクリプトがあります。
:問題(21):/var/log/cronを見てどのようなものが実際にcronによって実行されているか確認せよ。
# less /var/log/cron:問題(22):約5分後に/cron.testというディレクトリが作成されるようcronの設定をせよ。
現在時刻の5分後にディレクトリが作成されるようcrontabを使って登録します。仮に現在時刻が00:00だとすると、
# crontab -e5 0 * * * mkdir /cron.testと編集して保存することで、00:05にディレクトリが作成されます。
この指定の仕方だと毎日このコマンドが実行されることに注意してください。
:問題(23):/var/log/cronにどのようなログが出力されたか確認せよ。
次のようなログが出力され、コマンドが実行されたことが確認できます。
Jun 14 00:05:01 localhost crond[4284]: (root) CMD (mkdir /cron.test):問題(24):実行できたことを確認したら、問題22で作成したエントリを削除せよ。
再びcrontabコマンドを実行し、該当行を削除して保存してください。
# crontab -l5 0 * * * mkdir /cron.test
# crontab -e(削除)
# crontab -l