かにに流されない

備忘録とか。

LPIC201-2 Linuxカーネル

2.1 カーネルの構成要素

2.1.1 カーネルバージョン

  • かつては「2.X.Y」で表され、Xが偶数の場合は安定版で奇数の場合は開発版
    • その後、「2.6.X.Y」のように4桁で表されるようになる
  • 現在、バージョンは3桁のバージョン番号「4.8.1」で表される

    • 1桁目はメジャーバージョン、2桁目はマイナーバージョン、3桁目が安定版のリリース番号
  • 現在稼働しているカーネルバージョンを調べるには?

    • uname -r を実行
    • /proc/version を参照

◆実行例

[root@localhost ~]# uname -r
3.10.0-1160.el7.x86_64
[root@localhost ~]# cat /proc/version
Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

2.1.2 カーネルイメージ

2.2 カーネルモジュールの管理

2.2.1 カーネルモジュール

lsmodコマンド

  • 現在ロードされているすべてのモジュールを一覧表示
  • モジュール名、サイズ、参照回数、そのモジュールを利用しているモジュール名が表示される
  • /proc/modules/ からも同様の情報を取得できる

◆実行例

[root@localhost ~]# lsmod
Module                  Size  Used by
ip6t_rpfilter          12595  1
ip6t_REJECT            12625  2
nf_reject_ipv6         13717  1 ip6t_REJECT
ipt_REJECT             12541  2
…
[root@localhost ~]# cat /proc/modules
ip6t_rpfilter 12595 1 - Live 0xffffffffc0666000
ip6t_REJECT 12625 2 - Live 0xffffffffc0661000
nf_reject_ipv6 13717 1 ip6t_REJECT, Live 0xffffffffc065c000
ipt_REJECT 12541 2 - Live 0xffffffffc0657000
…

modinfoコマンド

  • モジュールを表示するコマンド

◆実行例

[root@localhost ~]# modinfo xfs
filename:       /lib/modules/3.10.0-1160.el7.x86_64/kernel/fs/xfs/xfs.ko.xz
license:        GPL
description:    SGI XFS with ACLs, security attributes, no debug enabled
author:         Silicon Graphics, Inc.
alias:          fs-xfs
retpoline:      Y
rhelversion:    7.9
srcversion:     ACB9CF86C248DD09DC2B428
depends:        libcrc32c
intree:         Y
vermagic:       3.10.0-1160.el7.x86_64 SMP mod_unload modversions
signer:         CentOS Linux kernel signing key
sig_key:        E1:FD:B0:E2:A7:E8:61:A1:D1:CA:80:A2:3D:CF:0D:BA:3A:A4:AD:F5
sig_hashalgo:   sha256

insmodコマンド

  • ローダブルモジュールをロードするコマンド
  • モジュール間の依存関係に注意すること

rmmodコマンド

  • ロードされているモジュールをアンロードするコマンド
  • 使用中のモジュール、依存関係のモジュールはアンロードできない

modprobeコマンド

  • モジュールの依存関係を調べ、必要があるモジュールを自動的にロードするコマンド

◆実行例(xfsと依存関係のあるモジュール一覧を表示)

[root@localhost ~]# modprobe --show-depends xfs
insmod /lib/modules/3.10.0-1160.el7.x86_64/kernel/lib/libcrc32c.ko.xz
insmod /lib/modules/3.10.0-1160.el7.x86_64/kernel/fs/xfs/xfs.ko.xz
  • モジュールの依存関係はmodules.depファイルに記述されている
  • /etc/modprobe.confでモジュールを読み込むときの処理やパラメータを指定できる
    • 最近は、/etc/modprobe.dディレクトリ以下にある複数の設定ファイルで設定する
  • カーネル機能の一部であるkmodが自動的に必要なモジュールをロードする仕組みがある

2.3 カーネルコンパイル

2.3.1 カーネルコンパイルとインストール

LPIC201-1 キャパシティプランニング

1.1 キャパシティプランニング

1.1.1 キャパシティプランニング

  • キャパシティプランニングとは?
    • システムが最大どれだけリソースが必要かを見積もる
    • 主なリソースとしては、CPU使用率、メモリ利用率、ディスクI/O、スワップ利用率、ネットワークI/O
  • パフォーマンスチューニングとは?
    • 効率よくシステム上のリソースを使えるよう、さまざまな設定を調整して性能を最適化すること

1.2 リソース使用率の測定とトラブルシューティング

1.2.1 総合的なリソース使用率の測定

topコマンド

  • システムリソースの使用状況、プロセスの実行状態を継続的に監視
オプション 説明
-b 対話モードではなくバッチモードで起動
-d 更新間隔を指定
-n 指定した回数だけ更新すると終了
-u ユーザー 指定したUID(or ユーザ名)のプロセスを監視
-p PID 指定したPIDのプロセスを監視

◆実行例

[root@localhost ~]# top
top - 13:03:42 up 11 min,  1 user,  load average: 0.78, 0.24, 0.08
Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us, 11.8 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1014756 total,   736312 free,   171040 used,   107404 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.   715064 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
    1 root      20   0   46088   6580   4132 S  0.0  0.6   0:00.77 systemd
    2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd
    3 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0
    4 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H
    5 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/u2:0
    6 root      20   0       0      0      0 S  0.0  0.0   0:00.02 ksoftirqd/0
    7 root      rt   0       0      0      0 S  0.0  0.0   0:00.00 migration/0
    8 root      20   0       0      0      0 S  0.0  0.0   0:00.00 rcu_bh
    9 root      20   0       0      0      0 S  0.0  0.0   0:00.22 rcu_sched
   10 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 lru-add-dra+
   11 root      rt   0       0      0      0 S  0.0  0.0   0:00.34 watchdog/0
   13 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kdevtmpfs
   14 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 netns
   15 root      20   0       0      0      0 S  0.0  0.0   0:00.00 khungtaskd
   16 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 writeback
   17 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kintegrityd
   18 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 bioset

◆1行目:平均負荷などの状態

top - 13:03:42 up 11 min,  1 user,  load average: 0.78, 0.24, 0.08
  • 現在日時:「13:03:42
  • 起動してからの経過時間:「up 11 min
  • ログイン中のユーザー数:「1 user
  • 平均負荷(直近1分、5分、15分):「load average: 0.78, 0.24, 0.08
    • CPUが他のプロセスを処理中であるために実行待ちとなっているプロセスの平均数

◆2行目:プロセスの状態

Tasks: 104 total,   1 running, 103 sleeping,   0 stopped,   0 zombie
  • 総プロセス数(total)、実行状態(running)、スリープ状態(sleeping)、停止状態(stopped)、ゾンビ状態(zombie)

◆3行目:CPUの状態

%Cpu(s):  0.0 us, 11.8 sy,  0.0 ni, 88.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • us(user):ユーザープロセスがCPUを使用している時間の割合
  • sy(system):カーネルがCPUを使用している時間の割合
  • ni(nice):優先度が変更されたプロセスがCPUを使用している時間の割合
  • id(idle):CPUがアイドル状態の時間の割合
  • wa( io wait):ディスクI/O待ちの時間の割合
  • hi(hardware irq):ハードウェア割込み要求時間の割合
    • 周辺機器の割込み要求によって発生する割込み
  • si(software irq):ソフトウェア割込み要求時間の割合
    • CPU内部の割込み命令によって発生する割込み
  • st(steal):ゲストOSがCPUを割り当てられなかった時間の割合

◆4,5行目:メモリとスワップの状況

KiB Mem :  1014756 total,   736312 free,   171040 used,   107404 buff/cache
KiB Swap:  1048572 total,  1048572 free,        0 used.   715064 avail Mem
  • total:全物理メモリ量
  • free:空きメモリ量
  • used:使用中のメモリ量
  • buff/cache:バッファ及びキャッシュサイズ
  • avail Mem:メモリ不足時に利用可能な物理メモリ量

vmstatコマンド

$ vmstat [表示間隔(秒)] [回数]

◆実行例

[root@localhost ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0      0 734824   2108 104940    0    0  4420   193  903 2116 10 14 38 39  0
  • procs
    • r:実行待ちプロセス数
    • b:割込み不可能なスリープ状態にあるプロセス数
  • memory【単位はKB】
    • swpd:スワップサイズ
    • free:空きメモリサイズ
    • buff:バッファに割り当てられているメモリサイズ
    • cache:キャッシュに割り当てられているメモリサイズ
  • swap【単位はKB/秒】
    • si:ディスクからスワップインされているメモリサイズ
    • so:ディスクからスワップアウトされているメモリサイズ
  • io【単位はブロック/秒】
    • bi:ブロックデバイスから受け取ったブロック数
    • bo:ブロックデバイスに送られたブロック数
  • system
  • cpu
    • us:ユーザプロセスがCPUを使用している時間の割合
    • sy:カーネルがCPUを使用している時間の割合
    • id:CPUがアイドル状態の時間の割合
    • wa:ディスクI/O待ちの時間の割合
    • st:ゲストOSがCPUを割り当てられなかった時間の割合

iostatコマンド

  • CPUの使用状況とディスクの入出力に関する情報を継続的に監視するコマンド

$ iostat [オプション] [表示間隔(秒)] [回数]

◆実行例

[root@localhost ~]# iostat
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.23    0.00    0.12    0.26    0.00   99.39

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               1.58        38.33        72.26     206255     388786
dm-0              1.19        36.12        71.88     194322     386738
dm-1              0.02         0.41         0.00       2204          0

iotopコマンド

  • I/O情報をtopコマンドのように表示するコマンド
Total DISK READ :       0.00 B/s | Total DISK WRITE :       0.00 B/s
Actual DISK READ:       0.00 B/s | Actual DISK WRITE:       0.00 B/s
  TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
    1 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % systemd -~rialize 22
    2 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kthreadd]
    4 be/0 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/0:0H]
    5 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [kworker/u2:0]
    6 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [ksoftirqd/0]
    7 rt/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [migration/0]
    8 be/4 root        0.00 B/s    0.00 B/s  0.00 %  0.00 % [rcu_bh]
…

sarコマンド

  • 様々なシステム統計情報のレポートを得ることができるコマンド

◆実行例(ディスク関連情報を表示)

[root@localhost sa]# sar -b -f /var/log/sa/sa30
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

21時10分01秒       tps      rtps      wtps   bread/s   bwrtn/s
21時20分01秒      0.13      0.00      0.13      0.00      1.35
21時30分01秒      0.11      0.00      0.11      0.00      1.12
平均値:           0.12      0.00      0.12      0.00      1.23
  • tps:I/O転送リクエスト数/秒
  • rtps:ディスク読込リクエスト数/秒
  • wtps:ディスク書き込みリクエスト数/秒
  • bread/s:ディスク読込ブロック数/秒
  • bwrtn/s:ディスク書き込みブロック数/秒

◆実行例(ネットワークインターフェース情報を表示)

[root@localhost sa]# sar -n DEV -f /var/log/sa/sa30
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

21時10分01秒     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s
21時20分01秒    enp0s3      0.04      0.04      0.00      0.00      0.00      0.00      0.00
21時20分01秒    enp0s8      0.03      0.01      0.00      0.00      0.00      0.00      0.00
21時20分01秒        lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
…
平均値:         enp0s3      0.36      0.20      0.03      0.03      0.00      0.00      0.00
平均値:         enp0s8      0.04      0.01      0.00      0.00      0.00      0.00      0.00
平均値:             lo      0.00      0.00      0.00      0.00      0.00      0.00      0.00
  • IFACE:ネットワークインターフェース名
  • rxpck/s:受信パケット数/s
  • txpck/s:送信パケット数/s
  • rxkB/s:受信kB/s
  • txkB/s:送信kB/s
  • rxcmp/s:圧縮パケットの受信バイト数/s
  • txcmp/s:圧縮パケットの送信バイト数/s
  • rxmcst/s:マルチキャストパケットの受信パケット数/s

◆実行例(ネットワークインターフェースごとのエラー情報)

[root@localhost sa]# sar -n EDEV -f /var/log/sa/sa30
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

21時10分01秒     IFACE   rxerr/s   txerr/s    coll/s  rxdrop/s  txdrop/s  txcarr/s  rxfram/s  rxfifo/s  txfifo/s
21時20分01秒    enp0s3      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
…
  • rxerr/s:受信エラーパケット数/s
  • txerr/s:送信エラーパケット数/s
  • coll/s:衝突パケット数/s
  • rxdrop/s:バッファ不足による受信取りこぼしパケット数/s
  • txdrop/s:バッファ不足による送信取りこぼしパケット数/s
  • txcarr/s:送信時のキャリアエラーパケット数/s
  • rxfram/s:受信時のフレーム同期エラーパケット数/s
  • rxfifo/s:受信時のFIFOオーバーランパケット数/s
  • txfifo/s:送信時のFIFOオーバーランパケット数/s

◆実行例(メモリ関連情報)

[root@localhost sa]# sar -r -f /var/log/sa/sa30
Linux 3.10.0-1160.el7.x86_64 (localhost.localdomain)    2022年04月30日  _x86_64_        (1 CPU)

21時10分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
21時20分01秒    236976    777780     76.65      2108    561756    317524     15.39    548324     89548         0

sadfコマンド

  • sadcによるログを、TSVやXML形式て出力できるコマンド
オプション 説明
-j JSON形式で出力する
-x XML形式で出力する
-t (UTFではなく)ローカル日時で表示する
-- 以降のオプションはsarコマンドに渡す

◆実行例

[root@localhost ~]# sadf /var/log/sa/sa30 -t -- -r
localhost.localdomain   600     2022-04-30 21:20:01     -       kbmemfree       236976
localhost.localdomain   600     2022-04-30 21:20:01     -       kbmemused       777780
localhost.localdomain   600     2022-04-30 21:20:01     -       %memused        76.65
localhost.localdomain   600     2022-04-30 21:20:01     -       kbbuffers       2108
localhost.localdomain   600     2022-04-30 21:20:01     -       kbcached        561756
…

uptimeコマンド

  • システムの稼働時間やログインユーザー数、平均負荷などが表示される
  • topコマンドの1行目とほぼ同じ

◆実行例

[root@localhost ~]# uptime
 00:18:07 up  4:42,  1 user,  load average: 0.04, 0.04, 0.05

wコマンド

  • 現在ログインしているユーザーと、各ユーザーのプロセス情報が表示される
  • 1行目の表示はuptimeコマンドと同じ

◆実行例

[root@localhost ~]# w
 00:19:48 up  4:43,  1 user,  load average: 0.01, 0.03, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    gateway          19:36    4.00s  0.06s  0.00s w
  • TTY:端末名
  • FROM:リモートホスト
  • LOGIN@:ログイン時刻
  • IDLE:アイドル時間
  • JCPU:当該端末から実行されている全プロセスが消費したCPU時間
  • PCPU:WHAT欄に表示されるカレントプロセスが消費したCPU時間
  • WHAT:実行されているコマンド

1.2.2 CPU使用率の測定

psコマンド

  • プロセス単位で詳細な情報を確認することができる

◆実行例(システムで実行されているすべてのプロセスを表示)

[root@localhost ~]# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.5  0.6 128020  6620 ?        Ss   13:41   0:00 /usr/lib/system
root         2  0.0  0.0      0     0 ?        S    13:41   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    13:41   0:00 [kworker/0:0]
root         4  0.0  0.0      0     0 ?        S<   13:41   0:00 [kworker/0:0H]
…

[root@localhost ~]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 13:41 ?        00:00:00 /usr/lib/systemd/systemd --switc
root         2     0  0 13:41 ?        00:00:00 [kthreadd]
root         3     2  0 13:41 ?        00:00:00 [kworker/0:0]
root         4     2  0 13:41 ?        00:00:00 [kworker/0:0H]
…

ぱっと見で分かりにくい表示項目 - VSZ:プロセスが使用するメモリ量 - RSS:現時点で使用中のメモリ量 - TYY:制御端末名

pstreeコマンド

  • プロセスの親子関係をツリー上に表示するコマンド ◆実行例
[root@localhost ~]# pstree
systemqwqNetworkManagerqwq2*[dhclient]
        x                mq2*[{NetworkManager}]
        tqagetty
        tqauditdqqq{auditd}
        tqchronyd
        tqcrond
…
# 罫線の表示が文字化けしてる。。

1.2.3 メモリおよびスワップ使用量の測定

freeコマンド

[root@localhost ~]# free
              total        used        free      shared  buff/cache   available
Mem:        1014756      176168      578928        6968      259660      691960
Swap:       1048572           0     1048572
  • 利用可能なメモリ量はavailable列を参照すること
  • スワップはディスクの一部を仮想的なメモリとして利用する機能
    • スワップが頻繁に利用される場合、不要なサービスの停止やメモリ増設が必要
  • 詳細なメモリ情報は、/proc/meminfo に記載
[root@localhost ~]# cat /proc/meminfo
MemTotal:        1014756 kB   #トータルのメモリサイズ
MemFree:          578508 kB   #空きメモリサイズ
MemAvailable:     691684 kB   #新たなアプリケーション起動時にスワップなしで利用可能なメモリサイズ
Buffers:            2108 kB   #バッファサイズ
Cached:           233944 kB   #キャッシュサイズ
SwapCached:            0 kB
Active:           163352 kB
Inactive:         148768 kB
Active(anon):      76336 kB
Inactive(anon):     6732 kB
Active(file):      87016 kB
Inactive(file):   142036 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       1048572 kB   #スワップ領域サイズ
SwapFree:        1048572 kB   #スワップ領域の空きサイズ
…

1.2.4 ディスク使用量の測定

dfコマンド

◆実行例

[root@localhost ~]# df -T -h
ファイルシス            タイプ   サイズ  使用  残り 使用% マウント位置
devtmpfs                devtmpfs   484M     0  484M    0% /dev
tmpfs                   tmpfs      496M     0  496M    0% /dev/shm
tmpfs                   tmpfs      496M  6.8M  489M    2% /run
tmpfs                   tmpfs      496M     0  496M    0% /sys/fs/cgroup
/dev/mapper/centos-root xfs        8.0G  1.7G  6.4G   21% /
/dev/sda1               xfs       1014M  138M  877M   14% /boot
tmpfs                   tmpfs      100M     0  100M    0% /run/user/0

1.2.5 ネットワークトラフィックの測定

netstatコマンド

◆実行例

[root@localhost ~]# netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
enp0s3           1500     1126      0      0 0           811      0      0      0 BMRU
enp0s8           1500       98      0      0 0            41      0      0      0 BMRU
lo              65536        0      0      0 0             0      0      0      0 LRU
  • -sオプションを使うとプロトコルごとの統計情報を表示できる

◆実行例

[root@localhost ~]# netstat -s
Ip:
    1136 total packets received
    0 forwarded
    0 incoming packets discarded
    1064 incoming packets delivered
    775 requests sent out
    32 dropped because of missing route
Icmp:
    0 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
    0 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
  • ベンチマークツールNetperfを用いる方法もある
    • netserverコマンドを使って接続を待ち受け、netperfコマンドを使ってクライアントからサーバに接続する
    • iptrafコマンド:ネットワークインターフェースのトラフィックを監視できるコマンド

1.3 リソース需要の分析と予測

1.3.1 リソース監視ツール

collectd

  • システムの各種情報を定期的に収集する軽量なデーモン
    • CPU使用率
    • システムの温度やファンの速度
    • プロセスの実行状況
    • ネットワークトラフィックやレイテンシ
    • Apache WebサーバやNginxnのリクエストや転送状況
    • DNSサーバBINDの情報
    • データベースサーバの情報
    • スワップ状況
    • ユーザーのログイン状況

Nagios

  • オープンソースの市捨て、卯監視およびネットワーク監視を行うアプリケーション
    • ネットワークサービスの監視(HTTP、SMTPPOP3FTPSNMP
    • システムリソースの監視(CPU、平均負荷、ディスク使用率など)
    • 現状をWebブラウザで確認できるWebインターフェース
    • 問題発生時にメールやSMSなどでユーザーに通知
    • 問題発生時に対応するイベントハンドラを定義可能
    • ログファイルの自動ローテーション
    • ホストを階層構造で定義可能

MRTG

  • Multi Router Traffic Grapher の略
  • トラフィックをグラフ化するプログラム
  • SNMPに対応したネットワーク機器やサーバの情報も収集できる

Cacti

  • MRTGの代替となるソフトウェア
    • MRTGと比べて優れている点は、設定をWebブラウザベースで行える、過去のグラフを参照できること

Icinga2

  • Nagiosからフォークした統合監視ツール

1.3.2 需要の分析と将来の予測

◆ キャパシティプランニングで注目する観点

  • CPU
    • 単純に平均負荷だけではなく、システム使用率やユーザー使用率などCPUがより多く消費する部分の特定が大事
    • 個々のプロセス単位でCPUの使用率を把握する
  • メモリ
    • 空きメモリは自動的にディスクキャッシュに使用される
    • スワップの使用状況が大切
  • ディスクI/O
    • 特定のパーティションにアクセスが集中していないか、ディスクの増加率に注目
  • ネットワーク

1.3.3 リソースの問題解決

◆パフォーマンスチューニングで注目する観点

  • カーネル
    • カーネルをハードウェアに合わせて再構築することで性能を十分に発揮できる
      • サポートが受けられなくなる可能性もあるので注意
    • /proc/sys イカカーネルパラメータを調整する
  • サービス
    • 起動スクリプトを確認し、不要なサービスを起動しないように設定
  • メモリとスワップ
    • vmstatコマンド、freeコマンドでスワップ領域の使用状況を把握する

LPIC 101(v5.0)メモ【5.デバイスとLinuxファイルシステム】

パーティションファイルシステムの作成

ハードディスク

  • SATA
  • SAS
    • SATAよりも高速で信頼性も高いが、高価
  • SCSI
    • ハードディスクやDVDドライブなど、さまざまな周辺機器を接続するための一般的な規格
  • バイスファイル
    • 1番目のハードディスク:/dev/sda
    • 2番目のハードディスク:/dev/sdb
    • 1番目のCD/DVDドライブ:/dev/sr0
    • 1番目のテープドライブ:/dev/st0
  • lsblkコマンド:システムのブロックデバイスの一覧を表示する

パーティション管理コマンド

LPIC 101(v5.0)メモ【4.ファイルとプロセスの管理】

基本的なファイル管理

ファイルの圧縮、解凍

  • gzipコマンド(.gz)
    • 圧縮する時に利用するコマンド。
      • -c:標準出力へ出力
      • -d:圧縮ファイルを展開(gunzipコマンド)
      • -rディレクトリ内のファイルを全て圧縮
  • bzip2コマンド(.bz2)
    • gzipよりも圧縮効率が高いが、処理に時間がかかる
      • -c:標準出力へ出力
      • -d:圧縮ファイルを展開(bunzip2コマンド)
  • xzコマンド
    • bzip2コマンドより圧縮効率が高い
      • -d:圧縮ファイルを展開する
      • -k:圧縮・解凍後に元ファイルを削除しない
      • -l:圧縮ファイル内のファイルを一覧表示

アーカイブの作成

tarコマンド
オプション 語源? 説明
-c create アーカイブを作成する
-x extract アーカイブからファイルを取り出す
-t list アーカイブの内容を確認する
-f ファイル名 file アーカイブファイル名を指定する
-z gzip gzipによる圧縮/展開
-j bzip2 bzip2による圧縮/展開
-J xz xzによる圧縮/展開
-v vervose 詳細を表示
-u update アーカイブ内の同名のファイルより新しいものだけを追加する
-r ?? アーカイブにファイルを追加する
-N 指定した日付より新しいデータのみを対象とする
-M multi-volume 複数デバイスへの分割を行う
--delete delete アーカイブからファイルを削除する
# tar cvf /dev/st0 /home
# tar xvzf software.tar.gz
# tar tf /dev/sdb1
cpioコマンド

ファイルをアーカイブファイルにコピーしたり、アーカイブからファイルをコピーする

フラグ 説明
-i オプション パターン アーカイブからファイルを抽出する
-o オプション アーカイブを作成する
-p オプション ディレクト ファイルを別のディレクトリにコピーする
オプション 説明
-A 既存のアーカイブにファイルを追加
-d 必要ならディレクトリを作成
-r ファイル名を対話的に変更する
-t コピーせず、入力内容を一覧表示
-v ファイル名の一覧を表示
ddコマンド

入力側に指定したファイルからの入力を、ファイルもしくは標準出力に送る

オプション 説明
if=入力ファイル 入力側ファイルを指定
of=出力ファイル 出力側ファイルを指定
bs=バイト数 入出力のブロックサイズを指定
count=回数 回数分の入力ブロックをコピーする

パーミッションの設定

アクセス権

chmodコマンド
対象・操作・許可の種別 説明
u 所有者
g グループ
o その他ユーザー
a すべてのユーザー
+ 権限を追加
- 権限を削除
= 権限を指定
r 読み取り許可
w 書き込み許可
x 実行許可
s SUIDorSGID
t スティッキービット

SUID、SGID

  • SUID:実行権を持っているユーザーによってプログラムが実行された場合、ファイルの所有者の権限で実行される
  • SGID:SUIDのグループ版

スティッキービット

  • 書き込み権限はあっても、自分以外のユーザーが所有するファイルを削除することができない
  • スティッキービットを数値で表記する場合、3桁のアクセス権表記に1000を加える

デフォルトのアクセス権

  • umask値:ファイルは「666」からディレクトリは「777」から引いた値
  • umaskコマンド:umaskが設定できる

プロセス管理

  • psコマンド:現在実行されているプロセスの表示
    • すべてのプロセスを表示するにはps axps -e
  • topコマンド:現在実行中のプロセスを継続的に監視
  • killコマンド:プロセスを終了させるコマンド
    • HUP(1):ハングアップ(端末が制御不能もしくは切断による終了)
    • INT(2):キーボードからの割込み
    • KILL(9):強制終了
    • TERM(15):終了(デフォルト)
    • CONT(18):停止しているプロセスを再開
    • STOP(19):一時停止
  • pgrepコマンド:指定した名前のプロセスに対応するPIDを表示するコマンド

ジョブ管理

  • jobsコマンド:実行中のジョブを参照するコマンド

LPIC 101(v5.0)メモ【2.Linuxのインストールとパッケージ管理】

<<作成中。。>>

Linuxのインストールとパッケージ管理

ブートローダのインストール

  • ブートローダ:ハードディスクなどのストレージからOSを読み込んで起動するプログラム
  • grub-installコマンドGRUBをインストールするコマンド
  • GRUB Legacyの設定ファイルは /boot/grub/menu.lst に書き込まれる
    • /boot/grub/grub.conf の場合もある
  • GRUB 2の設定ファイルは /boot/grub/grub.cfg
    • /etc/default/grub で設定を行い、grub-mkconfigコマンドで設定ファイルを生成する
  • ブートローダ起動時に、ブートオプションを指定できる。GRUBでは起動時の画面でEキーを押下

共有ライブラリの管理

  • スタティックリンク:コンパイル時点でライブラリを実行ファイル内に埋め込む
  • ダイナミックリンク:実行時に共有ライブラリ を呼び出す
    • 共有ライブラリは /lib か /usr/libディレクトリに配置されている
      • それ以外のライブラリも検索する場合は/etc/ld.so.confファイル に記載し、ldconfigコマンド を実行して /etc/ld.so.cache を再構築する
      • 環境変数LD-LIBRARY-PATH に記載する方法もある
    • 実行ファイルが必要な共有ライブラリはlddコマンド で表示できる

Debianパッケージの管理

  • 大きく分けて、Debian形式とRPM形式の2つがある
    • Debian形式:パッケージ管理作業にdpkgコマンド、APTツール
    • RPM形式:Red Hat社が開発。rpmコマンドなど
dpkgコマンド
オプション 説明
-E 既に同バージョンがインストールされていればインストールしない
-G 既に新バージョンがインストールされていればインストールしない
-R(--recursive) ディレクトリ内を再帰的に処理
-i (--install) パッケージ名 パッケージをインストール
-r (--remove) パッケージ名 設定ファイルを残してアンインストール
-P (--purge) 設定ファイルも含め完全にアンインストール
-l (--list) 検索パターン インストール済みパッケージを検索して表示
-S (--search) 指定したファイルがどのパッケージからインストールされたか表示
-L (--listfiles) 指定パッケージからインストールされた一覧表示
-s (--status) パッケージの情報を表示
--configure パッケージ名 展開されたパッケージを構成する
--unpack パッケージ名 パッケージを展開(インストールはしない)
  • dpkg-reconfigureコマンド:対話的な設定を実施できる
apt-getコマンド
  • インターネット経由で最新パッケージの入手からインストールと依存関係の解決まで出来る
  • etc/apt/sources.list にパッケージを管理しているサイトのURLを管理する
オプション 説明
-d ファイルをダウンロードする(インストールはしない)
-s システムを変更せず動作をシミュレートする
clean 過去に取得し保持していたパッケージファイルを削除する
dist-upgrade システムを最新にアップグレードする
install パッケージをインストールまたはアップグレードする
remove パッケージをアンインストールする
update パッケージデータベースを更新する
upgrade システムの全パッケージの内、他のパッケージを削除しないものをアップグレードする
apt-cacheコマンド
  • パッケージ情報を紹介・検索することのできるコマンド
オプション 説明
search 指定したキーワードを含むパッケージを検索
show パッケージについての一般的な情報を表示する
showpkg パッケージについての詳細な情報を表示
depends 指定したパッケージの依存関係情報を表示
aptコマンド
オプション 説明
-c 設定ファイル 設定ファイルを指定する
-d パッケージのダウンロードのみを行う
-y 問い合わせに対して自動的にyesと回答する
--no-install-recommends 必須ではない推奨パッケージはインストールしない
--install-suggests 提案パッケージもインストールする
--reinstall インストール済みパッケージの再インストールを許可する
update パッケージリストを更新する
install パッケージをインストールする
remove パッケージを削除する(設定は残す)
purge パッケージを完全に削除する
upgrade システムをアップグレードする(ファイル削除は伴わない)
full-upgrade システムのメジャーバージョンを最新にアップグレードする
show 指定したパッケージの詳細情報を表示する
list --upgradable アップグレード可能なパッケージを表示する
search キーワード 指定したキーワードでパッケージ情報を全文検索する
depends パッケージ名 パッケージの依存関係を表示する
autoremove 必要とされていないパッケージを自動的に削除する

RPMパッケージの管理

rpmコマンド
  • Red Hat社が開発したパッケージ管理システム
オプション 説明
-i(--install) パッケージをインストールする
-U(--upgrade) パッケージをアップグレードする(なければインストールする)
-F(--freshen) パッケージがインストールされていればアップグレードする
-e(--erase) パッケージをアンインストールする
-q 指定したパッケージがインストールされているか照会する

-a(-all):インストール住のすべてのパッケージを表示 -f ファイル名:指定したファイルを含むパッケージを表示 -p パッケージファイル名:対象としてパッケージファイルを指定 -c (--configfiles):設定ファイルのみを表示 -d (--docfiles):ドキュメントの実を表示 -i (--info):指定したパッケージの情報を表示 -l(--list):指定したパッケージに含まれるファイルを表示 -R(--requires):指定したパッケージが依存しているファイルなどを表示 --changelog:変更履歴を表示

  • rpm2cpioコマンド:RPMパッケージをインストールせず、その内容を展開する
YUMコマンド
オプション 説明
check-update アップデート対象のパッケージリストを表示する
update 指定したパッケージをアップデートする
install 指定したパッケージをインストールする
remove 指定したパッケージをアンインストールする
info 指定したパッケージの情報を表示する
repolist リポジトリ一覧を表示する
search キーワード パッケージ情報をキーワードで検索する
search all キーワード パッケージ名および説明文などすべてを検索する
groups list パッケージグループをリスト表示する
groups install グループ 指定したグループのパッケージをインストールする
  • dnfコマンド:yumコマンドに変わってdnfコマンドが使われている
Zypperコマンド
オプション 説明
install 指定したパッケージをインストールする
remove 指定したパッケージをアンインストールする
info 指定したパッケージの情報を表示する
update システムの全パッケージをアップデートする
update パッケージ 指定したパッケージをアップデートする
list-updates アップデート対象のパッケージリストを表示する
dist-upgrade ディストリビューションをアップグレードする
search キーワード パッケージ情報をキーワードで検索する

LPIC 101(v5.0)メモ【1.システムアーキテクチャ】

備忘録用

システムアーキテクチャ

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

  • lsmodコマンド:ロードされているカーネルモジュールの確認
    • 手動で必要なデバイスドライバをロード:modprobeコマンド
      • modprobeコマンドの設定ファイルは/etc/modprobe/myconfig.conf

システムの起動手順

1.BIOS/UEFIが記憶装置などに関して最低限の認識を行う
2.ブートローダが記憶装置(HDD)内のカーネルをロードし、制御を移す
3.カーネルがハードウェアを認識・制御し、ルートファイルシステムのマウントなどの初期化処理を行う
- さらに、/sbin/initで最初のプロセスを起動する
4./etc/inittab の記述に基づいて、アプリケーションレベルの初期化を行う

UEFI

  • BIOSを置き換えるために考案したEFIの統一仕様
    • ESP(EFIシステムパーティション):物理的なマシンを起動し、ファームウエアが読み込まれた後、その後の起動シーケンスで最初にアクセスされる領域
      • /boot/efiにマウントされる
    • GPT形式のHDDからの起動をサポート

Linuxの起動とシャットダウン

  • dmesgコマンド:システム起動時のカーネルの処理を確認
    • /var/log/messages
    • /var/log/dmesg
    • /var/log/boot.log
    • journalctl -kコマンド(systemdのみ)

SysVinit

Systemd

  • SysVinitを置き換える新しいinitの仕組み
  • SysVinitではプロセスをPIDによって管理していたが、cgroupsではプロセスのリソースを管理する
  • システム起動時、/etc/systemd/system/default.targetのUnitが処理される
ランレベル ターゲット
0 poweroff.target
1 rescue.target
2,3,4 multi-user.target
5 graphical.target
6 reboot.target