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 カーネルモジュール
- Linuxカーネルは、デバイスドライバなどカーネル機能の一部をモジュール化できる
- 必要な時に読み込んで使用
- サイズ削減、起動時間短縮、多種多様なハードウェアに対応可能、メモリ節約 -「/lib/modules/カーネルバージョン」に配置される
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/秒】
- io【単位はブロック/秒】
- system
- in:1秒当たりの割込み回数(クロック割込みも含む)
- cs:1秒当たりのコンテキストスイッチの回数
- 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
- システムの各種情報を定期的に収集する軽量なデーモン
Nagios
- オープンソースの市捨て、卯監視およびネットワーク監視を行うアプリケーション
MRTG
Cacti
Icinga2
- Nagiosからフォークした統合監視ツール
1.3.2 需要の分析と将来の予測
◆ キャパシティプランニングで注目する観点
- CPU
- 単純に平均負荷だけではなく、システム使用率やユーザー使用率などCPUがより多く消費する部分の特定が大事
- 個々のプロセス単位でCPUの使用率を把握する
- メモリ
- 空きメモリは自動的にディスクキャッシュに使用される
- スワップの使用状況が大切
- ディスクI/O
- 特定のパーティションにアクセスが集中していないか、ディスクの増加率に注目
- ネットワーク
- ネットワークトラフィックを計測する
1.3.3 リソースの問題解決
◆パフォーマンスチューニングで注目する観点
LPIC 101(v5.0)メモ【4.ファイルとプロセスの管理】
基本的なファイル管理
ファイルの圧縮、解凍
- gzipコマンド(.gz)
- 圧縮する時に利用するコマンド。
- -c:標準出力へ出力
- -d:圧縮ファイルを展開(gunzipコマンド)
- -r:ディレクトリ内のファイルを全て圧縮
- 圧縮する時に利用するコマンド。
- bzip2コマンド(.bz2)
- gzipよりも圧縮効率が高いが、処理に時間がかかる
- -c:標準出力へ出力
- -d:圧縮ファイルを展開(bunzip2コマンド)
- gzipよりも圧縮効率が高いが、処理に時間がかかる
- xzコマンド
- bzip2コマンドより圧縮効率が高い
- -d:圧縮ファイルを展開する
- -k:圧縮・解凍後に元ファイルを削除しない
- -l:圧縮ファイル内のファイルを一覧表示
- bzip2コマンドより圧縮効率が高い
アーカイブの作成
- アーカイブ:複数のファイルをまとめたファイル
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 | アーカイブからファイルを削除する |
/home
のアーカイブを/dev/st0
に作成
# tar cvf /dev/st0 /home
# tar xvzf software.tar.gz
/dev/sdb1
にあるアーカイブの内容を表示
# 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 axかps -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 に書き込まれる
- GRUB 2の設定ファイルは /boot/grub/grub.cfg
- ブートローダ起動時に、ブートオプションを指定できる。GRUBでは起動時の画面でEキーを押下
共有ライブラリの管理
- スタティックリンク:コンパイル時点でライブラリを実行ファイル内に埋め込む
- ダイナミックリンク:実行時に共有ライブラリ を呼び出す
Debianパッケージの管理
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
- 手動で必要なデバイスドライバをロード:modprobeコマンド
システムの起動手順
1.BIOS/UEFIが記憶装置などに関して最低限の認識を行う
2.ブートローダが記憶装置(HDD)内のカーネルをロードし、制御を移す
3.カーネルがハードウェアを認識・制御し、ルートファイルシステムのマウントなどの初期化処理を行う
- さらに、/sbin/initで最初のプロセスを起動する
4./etc/inittab の記述に基づいて、アプリケーションレベルの初期化を行う
UEFI
Linuxの起動とシャットダウン
- dmesgコマンド:システム起動時のカーネルの処理を確認
- /var/log/messages
- /var/log/dmesg
- /var/log/boot.log
- journalctl -kコマンド(systemdのみ)
SysVinit
- 各種サービスの起動には、/etc/init.d以下の起動スクリプトが使われている
- httpdサービスの終了:
# /etc/init.d/httpd stop
- httpdサービスの終了:
- /etc/inittab にデフォルトのランレベルが記載
- /etc/rc<ランレベル>.dディレクトリ
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 |