このページの本文へ

システムの起動・ルートユーザー・シェル

これで解決! Linux 100の疑問―その3

2001年09月06日 05時35分更新

文● Linux magazine編集部

  • この記事をはてなブックマークに追加
  • 本文印刷

Q:rootのパスワードを忘れてしまったのですが、再インストールするしかないですか?

A:このようなときは、メンテナンス用の“シングルユーザーモード”というモードで起動してパスワードを再設定することができます。

シングルユーザーモードで起動するには、LILOの“boot:”プロンプトで“linux 1”と入力します。この“linux”は起動するOSを選ぶためのラベルで、環境によっては違うかもしれません。その場合は、“boot:”プロンプトに対してTabキーを押すと、登録されているラベルが一覧表示されるので、その中からLinuxを起動するものを選びます。

シングルユーザーモードで起動するとシェルのコマンド画面になりますので、passwdコマンドでパスワードを再設定します。

さて、rootのパスワードがわからないと、シャットダウンもできないことが多いでしょう。この場合、まずsyncコマンドを実行して、ディスクキャッシュに残っているデータをディスクに書き込みます。次にCtrl+Alt+Deleteキーを押して終了します。

Q:ランレベルってなに?

A:Linuxには、ランレベルという複数の動作モードがあり、0~6のランレベルによって、機能の範囲を変えられるようにしています。たとえば、Red Hat LinuxやTurboLinuxでは、表2のようになっています。

通常のテキストコンソール起動時は、ランレベル3で動作し、X Window System起動時はランレベル5で動作しているというわけです。Linuxは、マルチユーザーOSなので、同時に複数のユーザーで利用できますが、管理者がディスククラッシュを復旧する際などは、ほかのユーザーやデーモンがファイルを読み書きすると非常にマズいことになります。このようなときには、ほかのユーザーやデーモンを排除するためにシングルユーザーモードで作業をします。管理者はマシンの前に座り、一人寂しく作業をするのです。

起動時のデフォルトランレベルは、/etc/inittabで設定されています。このファイル中に、id:3:initdefaultと書かれていればデフォルトのランレベルは3になります。これを書き換えるか、起動時にLILOの“boot:”プロンプトで“linux 5”のようにすれば、ランレベルを指定することができます。

一方、起動してからランレベルを切り替えるのがtelinitコマンドです。たとえば、“telinit 6”を実行すると、すぐにランレベル6となり、Linuxが再起動します。

表2 ランレベルによるLinuxの機能
0 停止
1 シングルユーザーモード
2 マルチユーザーモード(ネットワーク機能なし)
3 フルマルチユーザーモード(テキスト)
4 未使用
5 マルチユーザーモード(X Window System)
6 再起動

Q:起動フロッピーを作りたい

A:ハードディスクからLinuxを起動できなくなったときなどに活躍するのが起動フロッピーです。

ディストリビューションによっては、起動フロッピーを作るためのシェルスクリプトが用意されているものもありますが、ここでは標準的なコマンドを使い、シンプルな起動フロッピーを作る方法を紹介します。

作成手順は、たったの3ステップだけです。まず、フロッピーディスクをフォーマットします。

# fdformat /dev/fd0H1440

次に、カーネルのイメージを書き込みます。

# dd if=/boot/vmlinuz of=/dev/fd0

最後に/(ルート)ファイルシステムのパーティションを指定して終了です。

# rdev /dev/fd0 /dev/hda1

このフロッピーで起動すると、カーネルをフロッピーディスクから読み出し、/dev/hda1のパーティションを/(ルート)ファイルシステムとしてマウントします。

しかし、カーネルに渡すオプションが入力できないので、ランレベルの指定などはできません。そこで、今度は、オプションを指定できる、もう少し便利な起動フロッピーを作ってみます。このフロッピーには、LILOとカーネルイメージを入れ、フロッピー内のカーネルとハードディスクのカーネルを選べるようにします。

下準備として、フロッピーディスクに書き込むLILOのために、設定ファイル/etc/lilo.flopを作ります(リスト5)。/etc/lilo.confをコピーして雛形にすると簡単です。

次に、起動フロッピーを作成します。最初にフォーマットし、ext2ファイルシステムを作成します。

# fdformat /dev/fd0H1440
# mke2fs
/dev/fd0

作成したディスクをマウントし、ハードディスクからチェインローダとカーネルをコピーします。

# mount -t ext2 /dev/fd0 /mnt/floppy
# cp -p /boot/chain.b /mnt/floppy
# cp -p /boot/vmlinuz-2.2.13 /mnt/floppy

最後に、フロッピーディスクにLILOをインストールし、アンマウントすればできあがりです。

# lilo -C /etc/lilo.flop
# umount /mnt/floppy

この起動フロッピーでブートすると、LILOの“boot:”プロンプトが表示されるので、ここで“linux”と入力すればハードディスクのカーネルが、“rescue”と入力すればフロッピーディスクのカーネルが起動します。さらに、“rescue 1”などと入力すればランレベルの指定も可能です。

ただし、ブートメディアのドライバをモジュールにしている場合は、これらの方法で起動ディスクを作ることはできません。ブートに必要なドライバをカーネルに組み込んでしまえば、簡単に起動フロッピーを作成できます。

boot=/dev/fd0
#LILOはフロッピーに置く
map=/mnt/floppy/lilo-map
prompt
timeout=50
default=linux
image=/boot/vmlinuz-2.2.13
#ハードディスクのカーネル
label=linux
read-only
root=/dev/hda1
image=/mnt/floppy/vmlinuz-2.2.13
#フロッピーディスクのカーネル
label=rescue
read-only
root=/dev/hda1

リスト5 /etc/lilo.flopの例

Q:デーモン(daemon)とはなんですか?

A:ゲームのように、ユーザーと対話しながら表舞台で活躍するアプリケーションとは違い、人目につかないところでひっそりと仕事をする、「縁の下の力持ちプログラム」の総称です。“ps ax”コマンドを実行するとわかるように、Linuxでは数多くのプログラムがデーモンとして動作しています。たとえば、仮想記憶を実現するkswapd、ログを集めてファイルに記録するklogdやsyslogd、各種のネットワークサーバプログラムなどはデーモンとして動作しています。

デーモンは、ユーザーと直接対話する制御端末を持ちません。ですから、一般のユーザーは、デーモンが動いているかどうかを気にかけないでしょう。

起動されたデーモンは、すぐに活動するわけではなく、特定のリクエストを待ち、リクエストを受信するとそれに対する処理を行います。そして処理が済むと、次のリクエストが来るまでまた休むのです。たとえば、Webサーバのhttpdは、ユーザーから接続されるまで休んでいて、接続されると活動を始めます。また、決められた時刻や一定時間ごとにプログラムを起動するcrondも代表的なデーモンです。

Linux、UNIXの世界において、デーモンは、悪魔や悪霊ではなく、ギリシャ神話の「神と人の間に位置する超自然的存在」に由来するものとされています。

Q:デーモンの起動、停止の方法を教えてください。

A:システムの起動時に、自動的に起動するデーモンを設定したい場合はツールを利用するのが便利です。TurboLinuxではturboserviceコマンド、Red Hat Linuxならntsysvコマンドが利用できます。また、X Window Systemで動作するLinuxconfやksysvコマンドが使えれば、グラフィカルなユーザーインターフェイスで設定できます。

では、今すぐデーモンを起動したいときはどうすればよいのでしょう。Red Hat Linuxなどでは、/etc/rc.d/init.dディレクトリ以下にデーモンの起動スクリプトが用意されていますので、起動したいデーモン名のファイルに、引数としてstartをつけて実行します。たとえば、httpd(Webサーバ)を起動したいなら、

# /etc/rc.d/init.d/httpd start

とするとhttpdが起動されます。引数にはstopとrestartも使え、それぞれ停止と再起動を行います。

一方、Slackwareなどでは/etc/rc.d/ディレクトリにrc.httpdのようなファイルが用意されているので、これを実行すれば、そのデーモンが起動します。

また、止めたい場合はps axを実行して、止めたいデーモンプロセスのPID(プロセスID)を調べ、killコマンドを使います。例として、PIDが567のデーモンを止めてみましょう。

# kill -TERM 567

Red Hat Linuxなどでは、/var/runディレクトリに、主要なデーモンのPIDを記録したファイルがあるので、これを利用して次のようにすることもできます。

# kill -TERM `cat /var/run/httpd.pid`

再起動する場合は、killコマンドのオプションをーTERMの代わりにーHUPにします。デーモンの設定ファイルを変更したら、このようにしてデーモンを再起動し、変更内容を動作に反映させます。

週刊アスキー最新号

編集部のお勧め

ASCII倶楽部

ASCII.jp Focus

MITテクノロジーレビュー

  • 角川アスキー総合研究所
  • アスキーカード
ピックアップ

デジタル用語辞典

ASCII.jp RSS2.0 配信中