1. システムアーキテクチャ
1.1 ハードウェアの基礎知識と設定
1.1.1 基本的なシステムハードウェア
- CPU
Intel系 x86等, 組み込み系 ARM等
- メモリ
多ければ多いほど、多くのアプリケーションが動作
- ハードディスク
HDDからより高速な読み書き可能なSSD
- 入力装置
- 拡張カード
NIC、サウンドカード, SCSIカード等。コールドフラグ
- USB機器
ホットフラグ
1.1.2 BIOS/UEFI
BIOS(Basic Input Output System)の役割
- OSが気動するためのプログラムをディスクから読み込んで実行する
- デバイスの動作を確認する
- 基本的な入出力を制御する
UEFI(Unified Extensible Firmware Interface) <- BIOSの後継
BIOSセッティング画面を表示するには一般的には
F1
やF2
、Delete
キーなどを起動画面で押す
セットアップで設定可能な項目
- 日付や時刻(ハードウェアクロック)
- ディスクドライブや各種デバイスのパラメータ
- キーボードの使用/不使用
- 電源管理
- 起動ドライブの順序
- デバイスへのIRQ(Interrput Request: 割り込み要求)の割り当て
- 各種デバイスの使用/不使用
1.1.3 デバイス情報の確認
デバイスファイル確認
$ ls /dev
デバイスに関する情報
- CPU情報
$ cat /proc/cpuinfo
- IRQ情報
$ cat /proc/interrupts
- I/Oアドレス情報
$ cat /proc/ioports
- メモリ情報
$ cat /proc/meminfo
- USBデバイス情報
$ cat /proc/bus/usb/*
$ lsusb -v
- PCIデバイス情報
$ cat /proc/bus/pci/*
$ lspci -vv
1.1.4 USBデバイス
- 最大127台までのUSBデバイスを接続可能
- さまざまなUSBデバイスを同一のコネクタで接続可能
- 電源を入れたままでの接続・取り外しに対応(ホットプラグ)
- プラグ&プレイをサポート
- USBポートからUSBデバイスに電源を供給可能
USBのバージョン
バージョン | 最大データ転送速度 |
---|---|
USB 1.0 | 12Mビット/秒 |
USB 1.1 | 12Mビット/秒 |
USB 2.0 | 480Mビット/秒 |
USB 3.0 | 5Gビット/秒 |
USB 3.1 | 10Gビット/秒 |
1.1.5 udev(Userspace DEVice management)
デバイスが接続されると、カーネルがそれを検知し、/sys
ディレクトリ以下にデバイス情報を作成する。
udevデーモン
は、そのデバイス情報を参照して、/dev
ディレクトリ以下にデバイスファイルを作成する。その際に/etc/udev/rules.d
ディレクトリ以下の設定ファイルが読み込まれる。
1.1.6 デバイスドライバのロード
デバイスを利用するために必要な制御プログラムを_デバイスドライバ_という。
- カーネルモジュールの確認
$ lsmod
- 手動でデバイスドライバをロードする
# modprobe e1000
1.2 Linuxの起動とシャットダウン
1.2.1 システムが気動するまでの流れ
* コンピューターのアーキテクチャによって異なる
- BIOS/UEFI
- ブートローダー
- カーネル
- init/systemd
1.2.2 起動時のイベント確認
$ dmesg
ログ
以下のログでも確認できる
- /var/log/messages
- /var/log/dmesg
- /var/log/booot.log
1.2.3 システムのシャットダウンと再起動
shutdownコマンド
オプション | 説明 |
---|---|
-h | 時間を指定してシャットダウン |
-r | 再起動 |
-f | 次回起動時にfsckをスキップする |
-F | 次回起動時にfsckを必ず実行 |
-k | 実際にシャットダウンをせず、警告メッセージを通知 |
-c | 現在実行中のシャットダウンをキャンセルする |
すぐにシャットダウン/再起動する
# shutdown -h now
# shutdown -r now
他のシャットダウンコマンド
# halt
# poweroff
他の再起動コマンド
# reboot
1.3 SysVinit(System Five Init)
現在ではsystemdが主流
1.3.1 SysVinitによる起動
- initが
/etc/inittab
ファイルを読み込む - initが
/etc/rc.sysinit
スクリプトを読み込む - initが
/etc/rc
スクリプトを実行する - /etc/rcスクリプトが
/ect/rc<ランレベル>.d
ディレクトリ以下のスクリプトを実行する
1.3.2 ランレベル
Red Hat, CentOS, Fedoraのランレベル
ランレベル | 説明 |
---|---|
0 | 停止 |
1 | シングルユーザモード |
2 | マルチユーザモード(テキストログイン、NFSサーバは停止) |
3 | マルチユーザモード(テキストログイン) |
4 | 未使用 |
5 | マルチユーザモード(グラフィカルログイン) |
6 | 再起動 |
Sまたはs | シングルユーザモード |
Ubuntu, Debian, GNU/Linuxのランレベル
ランレベル | 説明 |
---|---|
0 | 停止 |
1 | シングルユーザモード |
2 | マルチユーザモード |
3 | マルチユーザモード |
4 | マルチユーザモード |
5 | マルチユーザモード |
6 | 再起動 |
Sまたはs | シングルユーザモード |
シングルユーザモードはrootだけが利用できる
1.3.3 ランレベルの確認、変更
- 現在のランレベルを表示
# runlevel
- ランレベルを変更
# init 1
# tellinit 1
- ユーザの端末にメッセージを送る
$ wall "message"
1.3.4 起動スクリプトによるサービスの管理
例) httpdサービスの開始と終了
# /etc/init.d/httpd start
Starting httpd:
# /etc/init.d/httpd stop
Stopping httpd:
1.3.5 デフォルトのランレベルの設定
デフォルトのランレベルは/etc/inittab
に記述されている
例) デフォルトのランレベルを5に変更する
id:5initdefault:
1.4 systemd
1.4.1 systemdの概要
systemd関連の主なデーモンプロセス
プロセス | 説明 |
---|---|
systemd | systemdのメインプロセス |
systemd-journald | ジャーナル(ログ)管理プロセス |
systemd-logind | ログイン処理プロセス |
systemd-udevd | デバイス動作検知プロセス |
systemdでは、システムの起動処理は多数のUnitと呼ばれる処理単位に分かれている。拡張子で区別できる。
Unitの主な種類
拡張子 | 説明 |
---|---|
service | 各種サービスを気動する |
device | 各種デバイスを表す |
mount | ファイルシステムをマウントする |
swap | スワップ領域を有効にする |
target | 複数のUnitをグループ化する |
1.4.2 systemdの起動手順
ランレベルとターゲットの対応
ランレベル | ターゲット |
---|---|
0 | poweroff.target |
1 | rescue.target |
2,3,4 | multi-user.target |
5 | graphical.target |
6 | reboot.target |
1.4.3 systemctlによるサービスの管理
# systemctl <サブコマンド> [Unit名] [-t 種類]
systemctlコマンドの主なサブコマンド
サブコマンド | 説明 |
---|---|
start | サービスを気動する |
stop | サービスを終了する |
restart | サービスを再起動する |
reload | サービスの稼働状況を表示する |
status | サービスの稼働状況を表示する |
is-active | サービスが稼働しているかどうかを確認する |
enable | システム起動時にサービスを自動起動する |
disable | システム起動時にサービスを自動起動しない |
list-unit-files | すべてのUnitを表示する |
reboot | システムを再起動する |
poweroff | システムをシャットダウンする |