一般にプロンプト文字列が「$」のときは一般ユーザー、「#」のときはrootでそのコマンドを実行することを表します。
ps(1)を見ることで、すべて調べることが出来ます。
viを起動後、他の端末から
$ ps aux | grep vi user 3366 6.0 0.8 11092 2980 pts/2 S+ 18:15 0:00 vim user 3368 0.0 0.2 5076 760 pts/1 R+ 18:15 0:00 grep vi
ちなみにviではなくvimが立ち上がっているのは次のようにエイリアスが設定されているためです。
alias vi='vim'
問題2より該当プロセスのPIDが分かったので
$ kill -TERM 3366
として終了できます。
$ sleep 60
としてから、Ctrl+cを入力してください。
$ echo dummy > sample $ cat sample_link dummy $ ln -s sample sample_link
$ cat sample_link dummy
エディタで編集したり、リダイレクトしたりすることで内容を変更します。
$ echo foo > sample_link $ cat sample foo
$ mkdir sample_dir $ touch sample_dir/{a,b,c} $ ls -F sample_dir/ a b c $ ln -s sample_dir sample_link_dir
$ ls -F sample_link_dir/ a b c
$ ls -F sample sample_dir/ sample_link@ sample_link_dir@ $ rm sample_link sample_link_dir
シンボリックリンクを削除しても、リンク先のファイルまでは削除されません。
$ ls -F sample sample_dir/
/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を比較し、
削除された行の先頭に「-」、追加された行の先頭に「+」を付けて表示しています。
問題11と逆の事を行います。
今はランレベル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*local lrwxrwxrwx 1 root root 11 5月 23 20:41 /etc/rc.d/rc5.d/S99local -> ../rc.local*
このように/etc/rc.d/rc.localへのシンボリックリンクとなっています。起動スクリプトではないのでchkconfigでは管理していないというわけです。
$ ps aux|grep sshd root 1883 0.0 0.4 5772 1660 ? Ss 13:08 0:00 /usr/sbin/sshd user 13682 0.0 0.0 1644 184 tty2 R+ 15:25 0:00 grep sshd
起動スクリプトを利用して停止させます。
# /etc/init.d/sshd stop $ ps aux|grep sshd user 13708 0.0 0.2 5080 764 tty2 R+ 15:26 0:00 grep sshd
# /etc/init.d/sshd start
# rm /etc/rc.d/rc5.d/S*sshd # ntsysv
なおこのままではsshdへのチェックは外れたままになります。気になる人は再設定してください。
# 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)
認証が失敗したことを示すログが出力されます。
Jun 14 15:19:10 localhost su(pam_unix)[13635]: authentication failure; logname=user uid=500 euid=0 tty= ruser=user rhost= user=root
$ 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*
ログ解析結果の通知、ファイル検索用のデータベースの更新、ログのローテート、パッケージの更新などを行うためのスクリプトがあります。
# less /var/log/cron
現在時刻の5分後にディレクトリが作成されるようcrontabを使って登録します。仮に現在時刻が00:00だとすると、
# crontab -e 5 0 * * * mkdir /cron.test
と編集して保存することで、00:05にディレクトリが作成されます。
この指定の仕方だと毎日このコマンドが実行されることに注意してください。
次のようなログが出力され、コマンドが実行されたことが確認できます。
Jun 14 00:05:01 localhost crond[4284]: (root) CMD (mkdir /cron.test)
再びcrontabコマンドを実行し、該当行を削除して保存してください。
# crontab -l 5 0 * * * mkdir /cron.test # crontab -e (削除) # crontab -l