LPIC-101勉強メモ(自分用)

# 目次
1. ディレクトリ構造
2. Linuxシステム
3. パーティション・ブートローダ・パッケージ管理

# 1. ディレクトリ構造
~~~
/ → ルートディレクトリ
|- bin → コマンドを格納したディレクトリ
|- sbin → rootユーザのみ実行できるコマンドを格納したディレクトリ
|- etc → システムやコマンドの設定ファイル・スクリプトファイルを格納したディレクトリ
|- dev → デバイスファイルを格納したディレクトリ
|- lib → 共有ライブラリやカーネルモジュールを格納したディレクトリ
|- mnt → ファイルシステムの一時的なマウントポイント
|- opt → 追加パッケージや追加プログラムをインストールするディレクトリ
|- proc → カーネル内部の情報にアクセスするための仮想ファイルシステム
|- root → rootユーザ専用ディレクトリ
|- media → リムーバブルディスクがマウントされるディレクトリ(USB, CD-ROM)
|- home → 一般ユーザのホームディレクトリ
|- tmp → 一時作業ファイル保管ディレクトリ
|- var → ログファイルなどの更新されるファイルの保管
|- usr → 一般ユーザが使うコマンド・ライブラリ・ドキュメントの保管 
~~~


# 2. Linuxシステム
## 2.1 ハードウェア設定
- Linuxカーネルが認識したデバイスの情報
カーネルでの認識なので、/procディレクトリに保管されている。

| ファイル名 | 説明 |
|:-:|:-:|
|/proc/cpuinfo|CPU|
|/proc/meminfo|メモリ|
|/proc/ioports|I/Oポート|
|/proc/interrupts|IRQ|
|/proc/bus/pci/devices|PCIデバイス|
|/proc/scsi/scsi|SCSIデバイス|
|/proc/bus/usb/devices|USBデバイス|

- デバイスファイル・デバイスドライバ
Linuxの全てのハードウェアはデバイスファイルとして表される。(/dev配下にあるファイルがデバイス一覧)
デバイスを利用するために必要なドライバは、カーネルモジュールとして提供されている。(lsmodコマンドで確認できる)
lsusbコマンドでUSBデバイス、lspciコマンドでPCIデバイスを確認できる。(-vで詳細表示)

## 2.2 システムブート
Linuxシステムが起動するまでの手順
1. 電源ON
2. BIOSの起動 （ハードウェアのチェック)
3. ブートローダの起動 (ハードディスクからカーネルをメモリに読み込む
4. Linuxカーネルの起動 (メモリの初期化やシステムクロックなどの設定を行う)
5. initプロセスの起動 (システムの初期化を行い、ランレベルに応じたデーモンを起動)
6. ログインプロンプトを表示 (この段階でブートが完了する)

- initプロセスの起動
1. initは、/etc/inittab を読み込む
2. initは、/etc/rc.sysinit を実行する
3. initは、/etc/rc を実行する
4. /etc/rc スクリプトが /etc/rc[ランレベル].d ディレクトリ配下の起動スクリプトを実行する

- 起動スクリプト
各サービスを起動するために、/etc/init.d ディレクトリ配下にある起動スクリプトが使われる
ランレベルが異なれば、起動サービスも異なる。（ランレベル１なら、/etc/rc1.d, ランレベル2なら/etc/rc2.d）

- 起動イベント
システム起動時のイベントはログファイルに保存されている。
dmsgコマンドでシステム起動時のの処理内容を確認できる

| ファイル名 | 説明 |
|:-:|:-:|
|/var/log/messages|システム全般の情報|
|/var/log/boot.log|システム起動時のプロセスがOKかfailedかを確認できる|
|/var/log/dmesg|システム起動時のメッセージが出力される|

## 2.3 ランレベル/シャットダウン
Linuxの動作モードはランレベルにより異なる。現在のランレベルはrunlevelコマンドで確認できる
runrevelの結果は、「ひとつ前のランレベル、今のランレベル」という形で表示される。
Nはシステム起動後にランレベルが一度も変更されていない場合に表示される
~~~
$ runlevel
N 5
~~~

- ランレベルの変更
コマンドは二つあるが、どちらのコマンドでもOK
~~~
(root)# init [ランレベルの数字]
(root)# telinit [ランレベルの数字]
~~~

ランレベルの詳細は以下の図の通り

|ランレベル|RHEL系|Debian系|
|:-:|:-:|:-:|
|０|停止|停止|
|1|シングルユーザモード（rootユーザだけが使用できる状態）|シングルユーザモード|
|2|マルチユーザモード(テキストログイン・NFSサーバは使えない)|マルチユーザモード|
|3|マルチユーザモード(テキストログイン)|〃|
|4|未使用|〃|
|5|マルチユーザモード(グラフィカルログイン)|〃|
|6|再起動|再起動|

- デフォルトのランレベル確認
/etc/inittab の最終行、id:[ランレベル]initdefault:に記述されている。

- シャットダウン
initコマンドではログインユーザに対してメッセ＝じを通知せずに実行されるので事故の原因になる。
shutdownコマンドを使うことを推奨する。
このコマンドはroot権限で実行する必要がある。

~~~
(root)# shutdown [option] [time] {now} [message]
~~~

shutdownコマンドのオプションは以下の通り


| オプション | 説明 |
|:-:|:-:|
|-h|シャットダウン後にシステムを停止|
|-r|シャットダウン後にシステムを再起動|
|-f|次回起動時にfsckをスキップ|
|-F|次回実行時にfsckを必ず実行する|
|-k|シャットダウンをせずに警告メッセージを通知する|
|-c|実行中のシャットダウンをキャンセルする|

shutdownコマンドの例
~~~
(root)# shutdown -h now → システムを直ちに停止する
(root)# shutdown -h 20:00 → システムを20時に停止する
(root)# shutdown -k now Please Logout → ログインユーザにPlease Logoutと通知する。シャットダウンは行わない。
~~~

# 3. パーティション・ブートローダ・パッケージ管理
## 3.1 パーティション
Linuxをインストールするためには、最低でもルートパーティションとスワップ領域の２つのパーティションを分けることが必要になる。
一般的にはさらに多くのパーティションに分割することが多い。

- ルートディレクトリと別パーティションで保管したほうがいいディレクトリ
/home, /var, /opt, /usr, /tmp, /boot

パーティション分割する理由は大きく分けると２つある
- ディスク障害の被害を最小限に食い止めることができるから
- 障害発生時の原因を突き止めやすくなるので復旧をスムーズに行える

パーティション分割する時のポイント
- スワップ領域は物理メモリの２倍を確保すること
- /bootディレクトリの領域はおよそ100MB(本当か？)

## 3.2 ブートローダ
ハードディスク等からOSを起動するためのプログラムのこと。
LinuxのブートローダにはGRUB2が採用されている

- GRUBのインストール・バージョン確認
(/dev/sdaはハードディスクのパーティションの先頭の領域)
~~~
(root)# grub-install /dev/sda
(root)# grub-install -v
~~~

- GRUB2の設定ファイル
/boot/grub/grub.cfg
ただし、直接編集することはできないので、以下の手順で編集する必要がある
1. /etc/default/grubの中身を変更する
2. update-grub2コマンドを実行すると/boot/grub/grub.cfgファイルが生成される

- ブートローダのカーネルオプションの設定
/proc/cmdlineで確認できる。
ブートローダの起動画面でaキーを入力すると編集画面に移行する。

例
1. シングルモードで起動するためのカーネルオプションの設定・情報出力の抑制
2. 起動時に/bin/shが起動するためのカーネルオプションの設定
2. ルートパーティションを/dev/sda2に変更するためのカーネルオプションの設定
~~~
grub> linux /boot/vmlinuz-2.6.35 1 quiet
grub> linux /boot/vmlinuz-2.6.35 init=/bin/sh
grub> linux /boot/vmlinuz-2.6.35 root=/dev/sda2
~~~