Open45

学習メモ:LPIC101

ito_110ito_110
基本的なシステムハードウェア
  • CPU(Central Processing Unit):PCの頭脳 演算処理などを担当
  • メモリ:データを一時保存
  • ハードディスク:データを長期保存
  • 入力装置(キーボードやマウスなど):情報入力するデバイス
  • 拡張カード(NICやサウンドカードなど):拡張機能を提供する部品
  • USB機器(フラッシュメモリなど):PCの接続規格がUSB。このUSB規格を使用している機器
ito_110ito_110
BIOS(Basic Input Output System)

入出力基本システム
最も基本的な制御プログラム
キーボードやハードディスクを制御する

その他のBIOS

BIOSはマザーボードや拡張カードのフラッシュROMに書き込まれている
それぞれ下記のように呼ぶ場合もある

  • システムBIOS:マザーボード上のBIOS
  • 拡張ROM:拡張カード上のBIOS
BIOSの役割
  • OS起動するためのプログラムをディスクから読み込んで実行する
  • デバイスの動作を設定
  • 基本的な入出力を制御
UEFI(Unified Extensible Firmware Interface)

BIOSの後継となるファームウェア規格
一部のOSでは起動ドライブの容量制限を撤廃
BIOSでは2TB
旧来のBIOSと含めて「BIOS」と呼称する場合はもある

BIOS/UEFIセットアップ画面

PCの電源を入れた後、特定のキー(F1・F2・Delete)を押下するとBIOS/UEFIセットアップ画面が表示される

設定できる項目は下記

  • 日付や時刻(ハードウェアクロック)
  • ディスクドライブや各種デバイスのパラメータ
  • キーボードの使用・不使用
  • 電源管理
  • 起動ドライブの順序
  • デバイスのIRQ(Interrupt Request 割り込み要求)の割り当て
  • 各種デバイスの使用・不使用
ito_110ito_110
デバイスファイル

デバイスファイルとは?

デバイスをファイルという概念を通して扱えるようにしたもの

/devディレクトリ以下に保存されている

デバイスファイルはudevにより自動的に作成される

デバイスの情報確認:/procディレクトリ

/procディレクトリとは?

メモリに作成される特殊なディレクトリ
システムの状態などがファイルとして保存されている

Linuxカーネルが認識しているデバイスに関する情報の一部は/procディレクトリ以下のファイルで確認可能

ファイル名 説明
/proc/cpuinfo CPU情報
/proc/interrupts IRQ情報
/proc/ioports I/Oアドレス情報
/proc/meminfo メモリ情報
/proc/bus/usb/* USBデバイス情報
/proc/bus/pci/* PCIデバイス情報

例として/proc/cpuinfoファイルの内容を確認してみる(後半部分は省略)

[ec2-user@ip-172-26-0-141 ~]$ cat /proc/cpuinfo
processor: 0
vendor_id: GenuineIntel
cpu family: 6
model: 85
model name: Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
stepping: 4
microcode: 0x2007006
cpu MHz: 2499.998
cache size: 33792 KB
physical id: 0
siblings: 2
core id: 0
cpu cores: 1
apicid: 0
initial apicid: 0
fpu: yes
fpu_exception: yes
cpuid level: 13
wp: yes
flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 
clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xt
opology nonstop_tsc cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x
2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dn
owprefetch invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx avx
512f avx512dq rdseed adx smap clflushopt clwb avx512cd avx512bw avx512vl xsaveopt xsavec x
getbv1 xsaves ida arat pku ospke
bugs: cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itl
b_multihit mmio_stale_data retbleed
bogomips: 4999.99
clflush size: 64
cache_alignment: 64
address sizes: 46 bits physical, 48 bits virtual
power management:

processor: 1
vendor_id: GenuineIntel
cpu family: 6
model: 85
model name: Intel(R) Xeon(R) Platinum 8175M CPU @ 2.50GHz
stepping: 4
microcode: 0x2007006
cpu MHz: 2499.998
cache size: 33792 KB
physical id: 0
siblings: 2
core id: 0
cpu cores: 1
apicid: 1
initial apicid: 1
デバイスの情報確認:lspciコマンド

lspciコマンドとは?

PCIデバイスの情報を表示するコマンド

[ec2-user@ip-172-26-0-141 ~]$ lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma]
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.3 Non-VGA unclassified device: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:03.0 VGA compatible controller: Amazon.com, Inc. Device 1111
00:04.0 Non-Volatile memory controller: Amazon.com, Inc. NVMe EBS Controller
00:05.0 Ethernet controller: Amazon.com, Inc. Elastic Network Adapter (ENA)

-vオプションを使用すると詳細な内容が表示
-vvオプションを使用するとさらに詳細な内容が表示される

-v・-vvオプション
-vオプション付き
[ec2-user@ip-172-26-0-141 ~]$ lspci -v
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma]
Subsystem: Amazon.com, Inc. Device 1237
Flags: bus master, medium devsel, latency 0

00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
Physical Slot: 1
Flags: fast devsel

00:01.3 Non-VGA unclassified device: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
Physical Slot: 1
Flags: fast devsel, IRQ 9
Kernel driver in use: piix4_smbus
Kernel modules: i2c_piix4

00:03.0 VGA compatible controller: Amazon.com, Inc. Device 1111 (prog-if 00 [VGA controlle
r])
Physical Slot: 3
Flags: fast devsel
Memory at fe400000 (32-bit, prefetchable) [size=4M]
Expansion ROM at 000c0000 [disabled] [size=128K]

00:04.0 Non-Volatile memory controller: Amazon.com, Inc. NVMe EBS Controller (prog-if 02 [
NVM Express])
Subsystem: Amazon.com, Inc. NVMe EBS Controller
Physical Slot: 4
Flags: bus master, fast devsel, latency 0, IRQ 11, NUMA node 0
Memory at febf0000 (32-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: nvme
Kernel modules: nvme

00:05.0 Ethernet controller: Amazon.com, Inc. Elastic Network Adapter (ENA)
Physical Slot: 5
Flags: bus master, fast devsel, latency 0
Memory at febf4000 (32-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: ena
Kernel modules: ena

-vvオプション付き
[ec2-user@ip-172-26-0-141 ~]$ lspci -vv
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma]
Subsystem: Amazon.com, Inc. Device 1237
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR
+ FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort-
 >SERR- <PERR- INTx-
Latency: 0

00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
Physical Slot: 1
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR
- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >
SERR- <PERR- INTx-

00:01.3 Non-VGA unclassified device: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
Physical Slot: 1
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR
- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >
SERR- <PERR- INTx-
Interrupt: pin ? routed to IRQ 9
Kernel driver in use: piix4_smbus
Kernel modules: i2c_piix4

00:03.0 VGA compatible controller: Amazon.com, Inc. Device 1111 (prog-if 00 [VGA controlle
r])
Physical Slot: 3
Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR
- FastB2B- DisINTx-
Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >
SERR- <PERR- INTx-
Region 0: Memory at fe400000 (32-bit, prefetchable) [size=4M]
Expansion ROM at 000c0000 [disabled] [size=128K]

00:04.0 Non-Volatile memory controller: Amazon.com, Inc. NVMe EBS Controller (prog-if 02 [
NVM Express])
Subsystem: Amazon.com, Inc. NVMe EBS Controller
Physical Slot: 4
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR
+ FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >
SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 11
NUMA node: 0
Region 0: Memory at febf0000 (32-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: nvme
Kernel modules: nvme

00:05.0 Ethernet controller: Amazon.com, Inc. Elastic Network Adapter (ENA)
Physical Slot: 5
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR
+ FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >
SERR- <PERR- INTx-
Latency: 0
Region 0: Memory at febf4000 (32-bit, non-prefetchable) [size=16K]
Capabilities: <access denied>
Kernel driver in use: ena
Kernel modules: ena
ito_110ito_110
CentoOS7でlspciコマンドが使えない場合の対処方法

AWSのLightsailでLinuxの学習していますが
LightsailにてCentOSを最小構成で構築するとlspci・lsusbコマンドが使用できない

表示されるエラーメッセージ
[ec2-user@ip-172-26-0-141 ~]$ lspci
-bash: lspci: command not found

lspciコマンドを使うための「pciutils」がインストールされていないことが原因とのこと

pciutilsをインストール
sudo yum -y install pciutils
usbutilsをインストール
sudo yum install -y usbutils

再度lspci・lsusbコマンドを実行すると表示されることを確認

参考にした記事はこちら
Web系プログラミングの覚え書:CentoOS7でlspciコマンドが使えない場合の対処方法
Qiita:CentOS7で「lspciコマンド」と「lsusbコマンド」が使えない時の対処法

ito_110ito_110
USBデバイス(Universal Serial Bus)

USBとは?

周辺機器と接続するための規格

  • 最大127台まで接続可能
  • 様々なUSBデバイスを同一規格のコネクタで接続可能
  • ホットプラグ:電源を入れたまま接続・取り外しに対応
  • プラグ&プレイをサポート
  • USBポートからUSBデバイスに電源を供給可能
USBのバージョン
バージョン 最大データ転送速度
1.0 12Mビット/秒
1.1 12Mビット/秒
2.0 480Mビット/秒
3.0 5Gビット/秒
3.1 10Gビット/秒
デバイスドライバ

デバイスドライバとは?

コンピュータに接続したハードウェアとソフトウェアとの通信を制御するプログラム
Linuxの場合、最初から搭載されているクラスドライバが存在する

主なデバイスクラス

デバイスクラス サポートするUSBデバイス
HID(Human Interface Device) キーボードやマウスなど
マスストレージデバイス USBメモリなど
オーディオ マイクなど
プリンタ プリンタなど
ワイヤレスコントローラー Wifiアダプタなど
lsusbコマンド

lsusbコマンドとは?

USBデバイスの情報を表示するコマンド

lsusb
lsusb オプション
オプション 説明
-v 詳細に表示する
-t USBデバイスの階層構造をツリー状に表示する
ito_110ito_110
udev(userspace device management)

udevとは?

/devディレクトリ以下のデバイスファイルを自動的に作成する仕組み

  1. カーネルがデバイスを検知
  2. /sysディレクトリ以下にデバイス情報を作成
  3. udevデーモン(udevd)はそのデバイス情報を参照して
    /devディレクトリ以下にデバイスファイルを作成する

デバイス情報は D-Bus(Desktop Bus) というアプリケーションにより利用できるように設定される

デバイスドライバのロード

lsmodコマンド

ロードされているカーネルモジュールを確認するコマンド

[ec2-user@ip-172-26-0-141 ~]$ lsmod
Module                  Size  Used by
tls                   131072  0
rfkill                 36864  1
intel_rapl_msr         20480  0
intel_rapl_common      32768  1 intel_rapl_msr
isst_if_common         20480  0
nfit                   77824  0
libnvdimm             225280  1 nfit
rapl                   24576  0
ppdev                  24576  0
parport_pc             49152  0
parport                77824  2 parport_pc,ppdev
i2c_piix4              28672  0
pcspkr                 16384  0
drm                   581632  0
fuse                  176128  1
xfs                  2043904  1
libcrc32c              16384  1 xfs
nvme                   57344  1
crct10dif_pclmul       16384  1
crc32_pclmul           16384  0
nvme_core             180224  2 nvme
crc32c_intel           24576  1
ena                   126976  0
nvme_common            24576  1 nvme_core
t10_pi                 16384  1 nvme_core
ghash_clmulni_intel    16384  0
serio_raw              20480  0
dm_mirror              28672  0
dm_region_hash         24576  1 dm_mirror
dm_log                 24576  2 dm_region_hash,dm_mirror
dm_mod                204800  2 dm_log,dm_mirror

modprobeコマンド

基本的にデバイスドライバは自動的にロードされるが、手動でロードする場合は
modprobeを使用する

modprobe 対象のデバイスドライバ
ito_110ito_110
システムが起動するまでの流れ(Boot/Bootstrap)
  1. BISO/UEFI:ハードウェアのチェックや初期化
  2. ブートローダ:カーネルをメモリに読み込む
  3. カーネル:initプロセスやsystemdプロセスを実行
  4. init/systemd:様々なサービスを起動
ito_110ito_110
起動時のイベント確認

dmesgコマンド

システム起動時にカーネルがどのような処理を行ったか確認するコマンド

[ec2-user@ip-172-26-0-141 ~]$ dmesg | head -20
[    0.000000] Linux version 5.14.0-229.el9.x86_64 (mockbuild@x86-05.stream.rdu2.redhat.co
m) (gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4), GNU ld version 2.35.2-33.el9) #1 SMP PRE
EMPT_DYNAMIC Thu Jan 5 15:30:18 UTC 2023
[    0.000000] The list of certified hardware and cloud instances for Red Hat Enterprise L
inux 9 can be viewed at the Red Hat Ecosystem Catalog, https://catalog.redhat.com.
[    0.000000] Command line: BOOT_IMAGE=(hd0,gpt2)/boot/vmlinuz-5.14.0-229.el9.x86_64 root
=UUID=d5ae404e-d570-441c-bd68-fb544b5ebbb9 ro console=ttyS0,115200n8 console=tty0 net.ifna
mes=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=1G-4G:192M,4G-64G:2
56M,64G-:512M
[    0.000000] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x020: 'AVX-512 opmask'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x040: 'AVX-512 Hi256'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x080: 'AVX-512 ZMM_Hi256'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x200: 'Protection Keys User registers'
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: xstate_offset[3]:  832, xstate_sizes[3]:   64
[    0.000000] x86/fpu: xstate_offset[4]:  896, xstate_sizes[4]:   64
[    0.000000] x86/fpu: xstate_offset[5]:  960, xstate_sizes[5]:   64
[    0.000000] x86/fpu: xstate_offset[6]: 1024, xstate_sizes[6]:  512
[    0.000000] x86/fpu: xstate_offset[7]: 1536, xstate_sizes[7]: 1024
[    0.000000] x86/fpu: xstate_offset[9]: 2560, xstate_sizes[9]:    8
[    0.000000] x86/fpu: Enabled xstate features 0x2ff, context size is 2568 bytes, using '
compacted' format.

ログファイルを確認

/var/log/messagesなどにシステム起動時のメッセージが語損されている
catコマンドなどで閲覧できる

ito_110ito_110
起動時のイベント確認(systemdを採用している場合)

journalctl -k コマンド

systemd版のdmesgコマンド
-bオプションを利用するとシステム起動時のメッセージが表示される

ito_110ito_110
システムのシャットダウンと再起動

shutdownコマンド

システムのシャットダウンや再起動を実行するコマンド

shutdown オプション 時間 メッセージ
オプション 説明
-h シャットダウンする
-r シャットダウン後にシステムを再起動する
-f 次回起動時にfsckをスキップする
-F 次回起動時にfsckを実行する
-k シャットダウンしないで警告メッセージを通知する
-c 現在実行中のシャットダウンをキャンセルする

コマンド例

# 20時にシャットダウンする
shutdown -h 20:00
# 即時再起動
shutdon -r now
ito_110ito_110
SysVinit

SysVinitとは?

Linuxで最初に実行されるプロセス

処理の流れは下記

  1. initが/etc/inittabファイルを読み込む
  2. initが/etc/rc.sysinitスクリプトを読み込む
  3. initが/etc/rcスクリプトを実行する
  4. /etc/rcスクリプトが「/etc/rc<ランレベル>.d」ディレクトリ以下のスクリプトを実行する
SysVinitの欠点

あらかじめ決められて順番でサービスを起動させるため、途中であるサービスの起動に時間がかかると
全体の起動時間が遅くなる

systemdやUpstartなどではこの欠点を解消している

ito_110ito_110
ランレベル

SysVinitで採用されている段階的な動作モード
ランレベルごとにどのようなサービスを起動するか設定できる

ランレベルの定義はディストリビューションごとに異なる

Red Hatなどのランレベル
ランレベル 説明
0 停止
1 シングルユーザーモード
2 マルチユーザーモード(テキストログイン・NFSサーバは停止)
3 マルチユーザーモード(テキストログイン)
4 未使用
5 マルチユーザーモード(グラフィカルログイン)
6 再起動
Sまたはs シングルユーザーモード
Ubuntuなどのランレベル
ランレベル 説明
0 停止
1 シングルユーザーモード
2 マルチユーザーモード
3 マルチユーザーモード
4 マルチユーザーモード
5 マルチユーザーモード
6 再起動
Sまたはs シングルユーザーモード
テキストログイン・グラフィカルログイン

テキストログインとは?

コンソール端末のようにテキストのみでログインする手法

グラフィカルログインとは?

Windowsのようにマウス操作などでログインする手法

NFS(Network File System)

標準で実装されているファイルサーバー機能
ネットワークを経由してファイルサーバ上のストレージを利用可能
参考資料:Rworks:ファイルサーバ(NFS、SMB)とは?ネットワークファイルシステムの違い

シングルユーザーモード

rootユーザーだけが利用可能な特殊な動作モード
システムのメンテナンスなどで利用される

ito_110ito_110
ランレベルの確認

runlevelコマンド

現在のランレベルを表示するコマンド

[ec2-user@ip-172-26-0-141 ~]$ runlevel
N 3

上記のコマンドより現在のランレベルは「3」
その前のランレベルは「N」となる。「N」は起動したばかりでランレベルを切り替えていないため

ランレベルの変更

initコマンドまたはtelinitコマンド

ランレベルを変更するコマンド

ランレベルの変更にあたり、シングルユーザーモードへ移行すると
他の一般ユーザーは操作できなくなるため、
シングルユーザーモードへ移行する場合は注意が必要

他ユーザへ警告メッセージを送付

wallコマンド

指定したメッセージをユーザーの端末に送ることができる

ito_110ito_110
起動スクリプトによるサービスの管理

SysVinitでは各種サービスの起動には**/etc/init.dディレクトリ**以下に保存されているスクリプトを使用する

特定のランレベルの起動スクリプトを確認する
ls /etc/rc<ランレベル>.d

# ランレベル3を確認する場合
ls /etc/rc3.d
起動スクリプトの開始と停止
起動スクリプトの開始
# /etc/init.d/httpd start
起動スクリプトの停止
# /etc/init.d/httpd stop
ito_110ito_110
デフォルトのランレベルの設定

デフォルトのランレベルは /etc/inittabに記述されている
ファイル内の「id:<ランレベル>:initdefault:」の部分に記載されている。

デフォルトのランレベルが「5」の場合「id:5:initdefault:」となる

ito_110ito_110
systemd

SysVnitに代わる新しい起動プロセス
initプロセスの代わりにsystemdプロセスを起動して、各種サービスを管理する

SysVinitと異なり、必要なサービスを並列的に起動する

systemd関連の主なデーモンプロセス
プロセス 説明
systemd systemdのメインプロセス
systemd-journald ジャーナルログ管理プロセス
systemd-logind ログイン処理プロセス
systemd-networkd ネットワーク管理プロセス
systemd-timesyncd システムクロック同期プロセス
systemd-resolved 名前解決プロセス
systemd-udevd デバイス動的検知プロセス
ito_110ito_110
systemdにおけるUnitとは?

systemdにおける起動処理の処理単位

Unitの主な種類
種類 説明
service 各種サービスを起動する
device 各種デバイスを表す
mount システムをマウント
swap スワップ領域の有効化
target 複数のUnitをグループ化する
timer 処理を実行する日時の指定
Unitを定義したファイルの保存場所
  • /lib/systemd/system以下
  • /etc/systemd/system以下
ito_110ito_110
systemdの起動手順

systemdはまず、 default.targetというUnitから処理する
このUnitは /etc/systemd/systemディレクトリ以下に存在する

default.targetの確認コマンド
[ec2-user@ip-172-26-0-141 ~]$ systemctl get-default
multi-user.target

コマンドの結果の「multi-user.target」は現在のランレベル3で起動するサービスをまとめたUnitを指す
参考資料:RedHatCustomerPortal

ランレベルとターゲットの対応
ランレベル ターゲット
0 poweroff.target
1 rescue.target
2・3・4 multi-user.target
5 graphical.target
6 reboot.target

参考資料:RedHatCustomerPortal

ito_110ito_110
systemctl
systemctl サブコマンド Unit名 -t 種類
systemctlコマンドの主なサブコマンド
サブコマンド 説明
start サービスを起動
stop サービスを終了
restart サービスを再起動
reload サービスの設定を再読み込み
status サービスの稼働状況を表示する
is-active サービスが稼働しているかどうかを確認する
enable システム起動時にサービスを自動起動する
disable システム起動時にサービスを自動起動しない
mask 指定したUnitをマスクし手動でも起動できないように設定する
unmask 指定したUnitのマスクを解除する
list-dependencies Unitの依存関係を表示
list-units 起動しているすべてのUnitと状態を表示する
list-units-files すべてのUnitを表示する
reboot システムを再起動する
poweroff シャットダウン
ito_110ito_110
Linuxインストールに必要なパーティション

パーティションとは?

ハードディスクなどのストレージを「区画」として分割したもの

Linuxをインストールするためには最低限2つのパーティションが必要

  • ルートパーティション:ルートファイルシステムに割り当てるパーティション
  • スワップ領域
パーティションのメリット
  • 柔軟なシステム管理
  • 障害発生時に被害を限定的にすることが可能
  • 障害発生時にスムーズな復旧が可能
一般的なパーティションの割り当て
  • /home:一般ユーザーが利用するファイルを格納
  • /var:各種ログやメールスプール(メールサーバー上の一時的に保管する場所)など保存
    量が膨大になりがちなので、パーティションを割り当てるのが一般的
  • /usr:プログラムやライブラリ、ドキュメントなど
  • /boot:カーネルやブートストラッププロセス中に使用されるファイルなど
  • ESP(EFIシステムパーティション):データ記憶装置のパーティション。UEFIに準拠するコンピュータで使用される
  • スワップ領域:仮想メモリ領域として利用
  • /(ルート):上記以外のルートファイルシステム
ito_110ito_110
パーティションのレイアウト設計にて考慮するポイント
  • システム用途
    用途が異なるディレクトリには別々のパーティションを割り当てる
  • ディスク容量
    ※スワップ領域では物理メモリと同程度~2倍程度のサイズを割り当てる
  • バックアップの方法
ito_110ito_110
ブートローダ(ブートマネージャ)

OSを読み込んで起動するプログラム
代表的なブートローダは GRUB など

GRUB(GRand Unified Boot loader)

多機能なブートローダ
下記のような特徴がある

  • 多数のファイルシステムを認識可能
  • シェル機能を搭載し、コマンドによる管理が可能
GRUBのインストール

GRUBをインストールするコマンド

# grub-install /dev/sda
ito_110ito_110
GRUB Legacyの設定

GRUB Legacyの設定ファイルは /boot/grub/menu.lst

引用元:GRUB menu.lst ファイルについて

/boot/grub/menu.lstの設定パラメータ
パラメータ 説明
timeout メニューを表示している時間(秒単位)
ito_110ito_110
GRUB2の設定

GRUB2の設定ファイルは /boot/grub/grub.cfg
コマンドで設定(直接ファイルを編集しない)
編集の流れは下記
1. /etc/default/grubで設定を実施
2. grub-mkconfigコマンドを実行(grub2-mkconfigコマンド)
3. 設定に基づいて、/boot/grub/grub.cfgが生成される

/etc/default/grubの主な設定パラメータ
パラメータ 説明
GRUB_TIMEOUT 起動メニューがタイムアウトするまでの秒数
GRUB_DEFAULT 起動メニューがタイムアウトしたときにデフォルトOSとして選択されるエントリ
GRUB_CMDLINE_LINUX カーネルに渡される起動オプション
ito_110ito_110
ブートオプションの指定

ブートローダ起動時に、システムの動作を指定するためのブートローダのオプションを指定できる
起動時画面でEキーを押すと下記のような画面が表示される。

grub append> ro root= ~省略~

この画面にてオプションを指定できる

主なブートオプション
パラメータ 説明
root=デバイス ルートパーティションとしてマウントするデバイス
nousb USBデバイスを使用しない
single シングルユーザーモードで起動する
1~5 指定したランレベルで起動する
ito_110ito_110
ライブラリ

使用頻度の高いプログラムをまとめたもの

静的ライブラリ

プログラム作成時に実行ファイル内に組み込まれるライブラリ

共有ライブラリ

プログラム実行時にロードされ、複数のプログラムで共有されるライブラリ

ito_110ito_110
リンク

ライブラリの機能や関数を利用すること

スタティックリンク(静的リンク)

プログラム作成時にリンクすること

ダイナミックリンク(動的リンク)

プログラム実行時にリンクすること

ito_110ito_110
共有ライブラリの確認:lddコマンド

lddコマンドで確認可能

catコマンドが必要とする共有ライブラリの確認
[ec2-user@ip-172-26-0-141 ~]$ ldd /bin/cat
linux-vdso.so.1 (0x00007fff9bfc3000)
libc.so.6 => /lib64/libc.so.6 (0x00007f1c97000000)
/lib64/ld-linux-x86-64.so.2 (0x00007f1c97379000)
ito_110ito_110
/etc/ld/so.conf

プログラムの実行時には、ld.soリンカおよびローダが実行時にリンクする共有ライブラリを検索して
必要なライブラリをロードする

/lib・/user/libディレクトリ以外のライブラリを検索する場合は、/etc/ld/so.confファイルに記述する

ldconfigコマンド

プログラムを実行するたびにディレクトリを検索するのは非効率なので、バイナリのキャッシュファイルである /etc/ld.so.cacheが参照される

ldconfigコマンドでは、/etc/ls.so.confファイルに基づいて、/etc/ls.so.cacheを再構築する

環境変数LD_LIBRARY_PATH

その他のディレクトリも検索対象に加えたい場合は、
環境変数LD_LIBRARY_PATHにディレクトリリストを記述する

ito_110ito_110
ld.soリンカが共有ライブラリを検索する順序
  1. 環境変数LD_LIBRARY_PATH
  2. キャッシュファイル: /etc/ld.so.cache
  3. デフォルトの「/lib」・「/usr/lib」
ito_110ito_110
パッケージ

実行プログラム・設定ファイルなどを1つのファイルにまとめたもの

パッケージ管理システム

パッケージを管理するシステム
競合などを回避する

パッケージの依存関係

あるパッケージが別のパッケージに依存するような関係
例:パッケージAではパッケージBのファイルを使用している

パッケージの競合関係

インストールしようとするパッケージが,特定のパッケージがインストール済みのシステムでは正しく動作しないこと

ito_110ito_110
Linuxにおけるパッケージ管理_2種類

Linuxにおけるパッケージ管理は大別すると2種類
互換性はない

  • Debian形式
    • Debian系のディストリビューション
    • パッケージ管理にはdpkgコマンド・APTツールなどが使用される
  • RPM形式
    • Red Hat系ディストリビューション
    • パッケージ管理にはrpmコマンド使用される
ito_110ito_110
Debian形式のパッケージ管理
foo_VVV-RRR_AAA.deb
対象 項目
foo パッケージ名称
VVV バージョン番号
RRR Debianリビジョン番号
AAA アーキテクチャ
.deb 拡張子
dpkgコマンド

Debian形式のパッケージを扱う際に使用するコマンドが dpkgコマンド

dpkg オプション アクション
対話的にdpkgコマンドを使用する場合
# dpkg-reconfigure ***
ito_110ito_110
APT(Advanced Packaging Tool)

パッケージ管理ツール
インターネット経由で最新のパッケージを入手可能
インストールから依存関係の解決まで可能

apt-getコマンド
apt-get オプション サブコマンド パッケージ名
apt-getコマンドの使用方法:/etc/apt/sources.list

/etc/apt/sources.listにパッケージ管理しているサイトのURLを記述する

/etc/apt/sources.listファイルの書式は次の通り

deb http://*** bionic main restricted
対象 説明
deb deb(debパッケージを取得)またはdeb-src(ソースを取得)
http://*** 取得先のURI
bionic バージョン名
main restricted オプション
ito_110ito_110
apt-cacheコマンド
apt-cache サブコマンド
aptコマンド
apt オプション サブコマンド
ito_110ito_110
RPMパッケージ

foo-VVV-RRR.AAA.rpm

対象 項目
foo パッケージ名称
VVV バージョン番号
RRR リリース番号
AAA アーキテクチャ
.deb 拡張子
ito_110ito_110
クラウドサービスを構成要素で分類(Iaas・PaaS・SaaS)
Iaas PaaS SaaS
アプリケーション
ミドルウェア ミドルウェア
OS OS OS
ハードウェア ハードウェア ハードウェア
ネットワーク ネットワーク ネットワーク
  • Iaas(Infrastructure as a Service)
  • PaaS(Platform as a Service)
  • SaaS(Software as a Service)
ito_110ito_110
ブロックストレージ

仮想的なストレージ

ゲストOS

仮想マシンにインストールされたOS

OSイメージ

インスタンスのテンプレートとなるイメージ

インスタンス

クラウド上の個々の仮想マシン

コンテナ

独立したOSのように稼働する環境構築用のミドルウェア

アプライアンスコンテナ

特定の用途向けのコンテナ

ゲストドライバ

仮想マシンがホストマシン上のデバイスにアクセスする際に使用されるソフトウェア

ito_110ito_110
Cloud-init

ホストキーの重複を解消する仕組み

クラウドではテンプレートから簡単にインスタンスを作成できることが強みであるが、
そのままでは、SSH鍵(ホストキー)が重複してしまうため、トラブルにつながる。

ito_110ito_110
D-BusマシンID

個別のインスタンスを識別するID