aaaiiuie

学習(備忘録)のため運用

Linuc 1.システムアーキテクチャー

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

lspcilsusb もオプションに -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サーバ用のプログラムを自動起動するように構成することができます。こうしたプログラムを自動起動させたりする仕組みとしてinitsystemdがあります。このようにシステムの起動制御できるプログラムのことをサービスと呼びます。

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
f:id:arakakikikaku427821:20200511000020p:plain

システム起動時には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