1.1 ハードウェア設定の決定と構成
1.1.1 デバイスファイルと/proc/ ディレクトリ
/proc/
にはカーネルやプロセスに関する情報sが格納されているディレクトリです。
/proc/
ディレクトリ以下の主なファイル。
ファイル名 | 用途 |
---|---|
/proc/cpuinfo |
CPUに関する情報 |
/proc/meminfo |
メモリに関する情報 |
/proc/cmdline |
起動時のカーネルオプション |
CUPに関する情報の確認
# cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 23 model name : Intel(R) Pentium(R) 4 @3.20GHz
メモリに関する情報
# cat /proc/meminfo MemTotal: 3933132 kB MemFree: 1421704 kB MemAvailable: 2155944 kB Buffers: 108552 kB Cached: 1097568 kB
1.1.2 カーネルモジュールの操作
Linuxシステム上でハードウェアを認識させるなどの処理を行う場合、カーネルモジュールを読み込む必要があります。かねーるモジュールとは、カーネルが本来持っている機能の他に追加機能を有効にするためのプログラムです。
現在読み込まれているカーネルモジュールの一覧を表示したい場合は lsmod
コマンドを実行します。
# lsmod Module Size Used by nfsd 216170 2 nfs 308313 0 nfs_acl 12511 2 nfs,nfsd auth_rpcgss 37143 2 nfs,nfsd fscache 36739 1 nfs lockd 67306 2 nfs,nfsd sunrpc 173730 6 lockd,auth_rpcgss,nfs_acl,nfs,nfsd loop 22641 0 ...
項目 | 値 |
---|---|
書式 | lsmod |
概要 | 読み込まれているカーネルモジュールを一覧で表示する |
カーネルモジュールを扱うことができるコマンドには、他に次のような物があります。
項目 | 値 |
---|---|
書式 | insmod ファイル |
概要 | カーネルモジュールを読み込み、有効にする |
引数 | ファイル:読み込むカーネルモジュール |
項目 | 値 |
---|---|
書式 | rmmod モジュール名 |
概要 | カーネルモジュールを削除し、無効にする |
引数 | モジュール名:無効にするカーネルモジュール名 |
項目 | 値 |
---|---|
書式 | modprobe [オプション] モジュール名 |
概要 | カーネルモジュールを読み込む、もしくは削除する。依存関係のあるモジュールも操作対象とする。 |
主なオプション | -r モジュールをs駆除する。 -r が指定されていない場合は読み込む。 |
引数 | モジュール名:操作するカーネルモジュール名 |
項目 | 値 |
---|---|
書式 | modinfo モジュール名 |
概要 | 指定したカーネルモジュールの情報を表示する。 |
引数 | モジュール名:表示するカーネルモジュール名 |
1.1.3 PCIデバイスとUSBデバイスの操作
PCIデバイスの情報を確認したい場合は lspci
コマンドを実行する。
使用例
# lspci 00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02) 00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II] 00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II] 00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01) 00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03) 00:02.0 VGA compatible controller: Device 1234:1111 00:03.0 Ethernet controller: Red Hat, Inc Virtio network device 00:04.0 SCSI storage controller: Red Hat, Inc Virtio block device 00:05.0 RAM memory: Red Hat, Inc Virtio memory balloon 00:06.0 Ethernet controller: Red Hat, Inc Virtio network device 00:07.0 Ethernet controller: Red Hat, Inc Virtio network device
USBポートの場合はlsusb
コマンドを実行する。
# lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 003: ID 0e0f:0002 VMware, Inc. Virtual USB Hub Bus 002 Device 002: ID 0e0f:0003 VMware, Inc. Virtual Mouse Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
lspci
も lsusb
もオプションに -v
を指定することで詳細情報を表示することができる。
1.2 システムのブート
1.2.1 Linuxの起動フロー
順番 | 内容 |
---|---|
1 | 電源投入 |
2 | ファームウェア(BIOS等) |
3 | ブートローダ |
4 | カーネル |
5 | init/systemd |
6 | ログインプロンプト |
補足
2. ディスクの先頭に書き込まれたブートローダを読み込む
3. カーネルと初期RAMディスクを読み込む
4. メモリの初期化、ハードウェアの認識など
5. 各種サービス、デーモンプロセスを起動
カーネルは起動時に出力したメッセージをリンクバッファと呼ばれる領域に出力します。
dmesg
コマンドを実行することでリンクバッファに出力されたメッセージを出力することができます。
以下のコマンドは dmesg
の後にパイプで grep
を使ってusbに関する内容を出力するためのコマンドです。
# dmesg | grep -i usb
項目 | 値 |
---|---|
書式 | dmesg オプション |
概要 | リンクバッファの内容を出力する |
1.3 ランレベル/ブートターゲットの変更とシステムのシャットダウン
1.3.1 initとsysytemd
カーネルを起動した後、様々なプログラムが自動的に起動してからログイン画面が表示されます。
例えば、あるシステムをWebサーバとして利用しようとしている場合、Webサーバ用のプログラムを自動起動するように構成することができます。こうしたプログラムを自動起動させたりする仕組みとしてinit
とsystemd
があります。このようにシステムの起動制御できるプログラムのことをサービスと呼びます。
initはUnix系のシステムにおいて古くから利用されていた起動管理用のプログラムです。この古くから利用されていたプログラムにはいくつかの制約があり、その制約を解決するため最近のディストリビューションでは新しいsystemd
という起動管理用のプログラムが採用されるようになりました。
1.3.2 init
init
では、システムの起動状態を表す値として、ランレベルというものを採用しています。ランレベルにより、どのような状態でシステムが起動するかが決まります。
ランレベルは0から6までの値で管理され、それぞれの意味は使用しているLinuxディストリビューションによって異なります。
ランレベル | Red Had系 | Debian系 |
---|---|---|
0 | 停止 | 停止 |
1 | シングルユーザーモード | シングルユーザーモード |
2 | 未使用/ユーザ定義可能なレベル | マルチユーザーモード |
3 | マルチユーザーモード(CUI) | マルチユーザーモード |
4 | 未使用/ユーザ定義可能なレベル | マルチユーザーモード |
5 | マルチユーザーモード(GUI) | マルチユーザーモード |
6 | 再起動 | 再起動 |
デフォルトのランレベルは/etc/inittab
ファイルに記載されています。
上記のランレベルを表す値の部分を別に値にするとデフォルトで起動するランレベルを変更することができます。
デフォルトで設定されているものと異なるランレベルで起動する場合、以下の方法があります。
- ブートローダの設定画面で編集をする
- initコマンドを実行する
項目 | 値 |
---|---|
書式 | init ランレベル |
概要 | 指定のランレベルに切り替える |
引数 | 切り替えるランレベル(0〜6) |
管理者だけがログインできるシングルユーザモードで起動する場合は以下になります。 メンテナンス用として最低限のプログラムが動作している環境になり、ネットワーク接続もできません。
# init 1
次にランレベル3で起動する場合は以下になります。
# init 3
rootユーザ意外にも、一般ユーザもログインできる通常の運用利用するモード(マルチユーザーモード)のことです。 今回検証している環境がSentOS6になるためCUIでの実行になります。
ランレベルの確認は runlevel
コマンドで確認することができます。
項目 | 値 |
---|---|
書式 | runlevel |
概要 | 現在起動中のランレベルと一つ前のランレベルを表示する |
# runlevel 3 5
上記の場合、現在ランレベルは5で起動しているが、その前は3で起動していたことになります。 そうした操作を行わなかった場合は「N(Nothing)」と表示されます。
1.3.3 サービスの制御スクリプト
init
を利用している環境では以下の構成で起動スクリプトならびにシンボリックリンクが配置されています。
etc/ ├── init.d │ └── httpd └── rc[0-6].d └── S85httpd
/etc/init.d/
ディレクトリには、サービスを制御する命令などが記述されているスクリプトの本体が格納されており、次のように引数を指定することによって、サービスを制御できます。
項目 | 値 |
---|---|
書式 | /etc/init.d/ スクリプト名 引数 |
主な引数 | start 起動stop 停止restart 再起動status 状態の確認 |
例としてapahce httpdの状態の確認は以下になる。
# /etc/init.d/httpd status httpd is stopped
service
コマンドでも同様の動作が可能
# service httpd status httpd is stopped
apahce httpd 起動
# /etc/init.d/httpd start Starting httpd: httpd: apr_sockaddr_info_get() failed for testhost.localdomain httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName [ OK ]
/etc/init.d |
---|
![]() |
システム起動時にはhttpdは起動していませんでした。このままシステムを再起動してしまうと次回システム起動時もhttpdは自動起動しません。httpdを自動起動させるには、シンボリックリンクファイル名を変更します。
/etc/rc0〜6.d
ディレクトリにはランレベルに対応したディレクトリです。このディレクトリ内に/etc/init.d/
ディレクトリ内のスクリプト宛のシンボリックリンクが用意されており、先頭が「S」だと当該ランレベルで起動した時自動起動します。
CentOSにはchkconfig
コマンドが用意されていて、これらのリンクのファイル名を変更し自動起動の設定を行うことができます。
# ls /etc/rc5.d/*httpd → 確認 /etc.rc5.d/K15httpd → 冒頭がKなのでランレベル5ではhttpdが自動起動しない # chkconfig httpd --list → 確認 httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off # chkconfig httpd on → ランレベル2〜5でhttpdを自動起動するように変更 # ls /etc/rc5.d/*httpd → 確認 /etc.rc5.d/S15httpd → 冒頭がS # chkconfig httpd --list → 確認 httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off