本記事には広告(アフィリエイトリンク)が含まれます。

プロセスとハード入門 LinuC101 第4回

広告

新卒インフラエンジニア向けLinuC 101 試験対策シリーズの第4回です。前回は systemd で管理される「サービス」のレイヤーを学びました。今回は1段ズーム下げて、個々のプロセスとそれを動かすハードウェアを観察します。

「サーバーが重い」「メモリが足りない」「CPUが100%」——障害連絡で最初に求められるのが本記事のスキルです。pstopkill でプロセスを掴み、lscpufreelsblklspci でハードを確認する流れを身につけてください。

環境前提

  • ディストリビューション: AlmaLinux 9.6(Sage Margay)
  • カーネル: 5.14.0-570.12.1.el9_6.x86_64
  • ユーザー: developer(sudo NOPASSWD設定済み)
  • 関連VM: linuc-alma(10.0.10.132)
  • 仮想化基盤: Hyper-V 第2世代(VMBus基盤)
  • 追加導入が必要: pciutilsusbutils(本記事第6章で導入)
広告

今ここマップ

LinuC 101 試験対策シリーズ(全12回)

  第1回 Linuxの起動・接続・停止
  第2回 ブートプロセスの仕組み
  第3回 systemdマスター講座
▶ 第4回 プロセス管理とハードウェア基礎    ← いまここ
  第5回 仮想マシンとコンテナの基礎
  第6回 パッケージ管理マスター
  第7回 ファイル操作の実践
  第8回 パーミッション・所有者・特殊権限
  第9回 コマンドライン・リダイレクト・パイプ
  第10回 テキスト処理(grep / sed / awk)
  第11回 vi/vim 入門
  第12回 ディスク・パーティション・ファイルシステム

この記事で身につくこと

  1. プロセスの状態(R/S/D/Z/T)を理解し ps/top/pstree で観察できる
  2. フォアグラウンド/バックグラウンド/ジョブの違いを説明し &/jobs/fg/bg/nohup を使い分けられる
  3. シグナル(SIGTERM/SIGKILL/SIGHUP)を理解し kill/pkill/killall で送信できる
  4. lscpu/free/lsblk/dmidecode でシステムリソース情報を取得できる
  5. lspci/lsusb でハードウェアバス上のデバイスを確認できる

プロセスとは何か

プログラムをディスクに保存しただけではただのファイルです。それをカーネルがメモリに読み込み、CPU時間を割り当てた瞬間に 「プロセス」という生きた存在になります。

カーネルは各プロセスに以下の情報を紐付けて管理します:

  • PID(Process ID)— プロセスの一意識別子
  • PPID(Parent PID)— 親プロセスのPID(PID 1 = systemd を頂点とする木構造)
  • UID/GID — どのユーザー権限で動くか
  • 状態 — R/S/D/Z/T のいずれか
  • 仮想メモリ・実メモリ — VSZ / RSS
  • CPU時間 — 累積使用時間

これらの情報をリアルタイムに観察できれば、「何が動いていて何が重いのか」が即座に分かります。

第1章:プロセスを観察する

1.1 ps の2つの形式

ps は静的なスナップショットを表示するコマンドです。歴史的経緯から、オプション体系が BSD形式(ハイフンなし)と System V形式(ハイフンあり)の2系統あり、現代のLinuxはどちらも受け付けます。

実行コマンド(linuc-almaで実行):

$ ps aux | head

実行結果(抜粋):

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.4 108984 18724 ?        Ss   20:26   0:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 31
root           2  0.0  0.0      0     0 ?        S    20:26   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        S    20:26   0:00 [pool_workqueue_]
root           4  0.0  0.0      0     0 ?        I<   20:26   0:00 [kworker/R-rcu_g]
root           5  0.0  0.0      0     0 ?        I<   20:26   0:00 [kworker/R-sync_]

BSD形式は %CPU%MEMVSZRSS といったリソース使用率の情報が見やすいのが特徴です。

実行コマンド:

$ ps -ef | head

実行結果(抜粋):

UID          PID    PPID  C STIME TTY          TIME CMD
root           1       0  0 20:26 ?        00:00:01 /usr/lib/systemd/systemd --switched-root --system --deserialize 31
root           2       0  0 20:26 ?        00:00:00 [kthreadd]
root           3       2  0 20:26 ?        00:00:00 [pool_workqueue_]
root           4       2  0 20:26 ?        00:00:00 [kworker/R-rcu_g]

System V形式は PPID(親プロセスID)が見えるのが特徴。プロセスの親子関係を辿りたいときに便利です。

1.2 プロセス状態(STAT)の意味

ps aux 出力の STAT 列は 1〜複数文字のプロセス状態を示します。

主状態意味覚え方
RRunning / Runnable実行中 or 実行可能
SInterruptible Sleep普通のスリープ(割り込み可)
DUninterruptible SleepI/O待ち(割り込み不可。ストレージ問題の兆候)
ZZombie子プロセスが終了済みだが親が回収していない
TStoppedSIGSTOP/SIGTSTP で一時停止中
IIdle kernel threadアイドルなカーネルスレッド

追加文字の意味:

  • s(小文字s)— セッションリーダー
  • +(プラス)— フォアグラウンドプロセスグループ
  • <(小なり)— 高優先度(nice値が低い)
  • N(大文字N)— 低優先度(nice値が高い)
  • l(小文字L)— マルチスレッド

例:Ss はセッションリーダーかつスリープ、I< はアイドルなカーネルスレッドかつ高優先度、というように読みます。

1.3 プロセスツリーで親子関係を見る

プロセスは木構造になっています。pstree で可視化してください。

実行コマンド:

$ pstree | head -15

実行結果(抜粋):

systemd-+-NetworkManager---2*[{NetworkManager}]
        |-agetty
        |-anacron
        |-auditd---{auditd}
        |-chronyd
        |-crond
        |-dbus-broker-lau---dbus-broker
        |-firewalld---{firewalld}
        |-hypervkvpd
        |-hypervvssd
        |-irqbalance---{irqbalance}
        |-polkitd---5*[{polkitd}]
        |-rsyslogd---2*[{rsyslogd}]
        |-sshd-+-sshd---sshd---bash---journalctl---less
        |      `-sshd---sshd---bash-+-head

systemd を頂点として、各サービスが枝分かれしているのが分かります。2*[{NetworkManager}] のような表記は「同名スレッドが2個」の意味(中括弧 `{}` はスレッド)。

PID付きで表示するなら -p

実行コマンド:

$ pstree -p | head -10

実行結果(抜粋):

systemd(1)-+-NetworkManager(736)-+-{NetworkManager}(745)
           |                     `-{NetworkManager}(746)
           |-agetty(772)
           |-anacron(11697)
           |-auditd(695)---{auditd}(696)
           |-chronyd(1154)

1.4 top — リアルタイム観察

topリアルタイムに更新されるプロセス監視ツールです。デフォルトは3秒ごとに画面を更新します。終了は q

本記事ではバッチモード(-b)で1回だけ取得(-n1)した出力を例示します。

実行コマンド:

$ top -bn1 | head -15

実行結果(抜粋):

top - 22:10:15 up  1:44,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 119 total,   2 running, 117 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   3911.1 total,   3291.7 free,    484.6 used,    362.1 buff/cache
MiB Swap:   4040.0 total,   4040.0 free,      0.0 used.   3426.5 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  108984  18724  10772 S   0.0   0.5   0:01.97 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.00 kthreadd

1〜5行目のヘッダ部分には、システム全体の状態が凝縮されています。

  • uptime と load average — システム稼働時間と負荷平均(1分/5分/15分)
  • Tasks — 全プロセス数とその状態別内訳
  • %Cpu(s) — CPU使用率の内訳(us=ユーザー、sy=システム、id=アイドル、wa=I/O待ち)
  • MiB Mem / MiB Swap — メモリとスワップの使用状況

対話モードで実行中は、P キーで CPU 使用率順、M キーでメモリ使用率順に並び替えられます。よく使うショートカットを暗記するよりも、man top で確認する習慣のほうが現場では役立ちます。

📖 試験Tipsボックス:プロセス観察

主題:1.01.4 プロセスの生成、監視、終了(重要度:中〜高)
出題パターン:「プロセス状態 D の意味は?」「ゾンビプロセスの状態文字は?」「親プロセスIDはどの列に表示される?」

暗記ポイント

  • 状態:R(Running), S(Sleep), D(Disk wait/uninterruptible), Z(Zombie), T(Stopped)
  • BSD形式:ps aux(%CPU/%MEM/VSZ/RSS)/ SystemV形式:ps -ef(PPID付き)
  • ツリー:pstree / ps fax / pstree -p(PID付き)
  • top: -b=バッチ、-n N=N回反復、終了は q

第2章:ジョブ制御 — フォア/バック

シェルから起動したコマンドは通常 フォアグラウンドで動き、その間はプロンプトが返ってきません。長時間かかるコマンドや、シェルを使い続けたい場合はバックグラウンドに回します。

2.1 ジョブ制御の基本コマンド

記号/コマンド意味
command &バックグラウンドで起動
jobs現在のシェルのジョブ一覧
fg %1ジョブ1をフォアグラウンドへ
bg %1停止中のジョブ1をバックグラウンドで再開
Ctrl+Zフォアグラウンドのジョブを一時停止(SIGTSTP)
Ctrl+Cフォアグラウンドのジョブを終了(SIGINT)
nohup command &SIGHUP無視で起動(ログアウトしても継続)
disown %1ジョブをシェルから切り離す

2.2 動かして覚える

実行コマンド(対話シェルで実行):

$ sleep 60 &

実行結果(PIDは環境により異なる):

[1] 12614

[1] がジョブ番号、12614 がPIDです。

実行コマンド:

$ jobs

実行結果:

[1]+  実行中               sleep 60 &

フォアグラウンドに戻すには:

$ fg %1

すると sleep 60 がフォアグラウンドに復帰し、終了するまでプロンプトが返ってきません。Ctrl+C で中断するか、Ctrl+Z で再度バックグラウンドに送れます。

2.3 nohup — ログアウト後も生かす

SSH接続を切ると、ログイン中に動かしていたバックグラウンドジョブは SIGHUP を受けて終了するのが既定動作です。これを防ぐのが nohup

$ nohup ./long-batch.sh &
[1] 12345
nohup: 入力を無視し、'nohup.out' に出力を追記します

実用上は tmuxscreen を使う場面が増えていますが、nohup は素早く一時的にバックグラウンド永続化したいときに有用です。SSH応用は第10回(暗号化)と関連して、より発展的なテーマとして扱います。

第3章:シグナルとプロセス終了

3.1 シグナルとは

シグナルはプロセスへの「通知」です。「終了して」「設定を再読込して」「一時停止して」などの指示をカーネル経由で送ります。

実行コマンド:

$ kill -l | head -5

実行結果:

 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ

新卒が必ず覚えておくべきシグナル:

番号名前意味使う場面
1SIGHUPハングアップ(端末切断)多くのデーモンが「設定再読込」として解釈
2SIGINT割り込みCtrl+C 相当
9SIGKILL強制終了(無視・捕捉不可)最終手段。データ破損リスクあり
15SIGTERM穏やかな終了要求(既定)kill のデフォルト。プロセスが後始末できる
17SIGCHLD子プロセスの状態変化親プロセスへの通知
18SIGCONT停止中プロセスの再開SIGSTOP で止めたものを再開
19SIGSTOP停止(無視・捕捉不可)強制一時停止
20SIGTSTP端末停止Ctrl+Z 相当
Linuxの主要シグナル6種類を比較する表形式の図。SIGHUP(1)・SIGINT(2)・SIGTERM(15)は捕捉可、SIGKILL(9)・SIGSTOP(19)は捕捉不可(赤強調)、SIGCONT(18)は再開用。SIGKILLとSIGSTOPは捕捉できないため、運用ではSIGTERMを試してから最終手段として使う
図 04-01. 主要なシグナル ── プロセス制御の基礎

3.2 kill / pkill / killall

シグナルを送るコマンドは3系統あります。

コマンド指定方法
killPID指定kill 12345kill -9 12345
pkill名前パターンpkill -f sleep
killallプロセス名(完全一致)killall sleep

シグナル指定は番号でも名前でも可:kill -15 PIDkill -SIGTERM PIDkill -TERM PID はすべて同じ意味。省略時は SIGTERM(15)です。

3.3 実機で動作確認

実行コマンド:

$ sleep 30 &
$ ps -p $!
$ kill $!
$ ps -p $!

実行結果:

[1] 12614
    PID TTY          TIME CMD
  12614 ?        00:00:00 sleep
(プロセス終了)

$! は直前のバックグラウンドジョブのPID。kill はデフォルトで SIGTERM を送るため、sleep プロセスが穏やかに終了します。

⚠️ ヒヤリハット:いきなり kill -9 でデータ破損

新人D君は、応答が鈍くなった本番DBサーバーに対し、sudo kill -9 <mysqld-PID> を即実行。SIGKILL は プロセスが捕捉できないシグナルのため、書き込み中のトランザクションは中断、ファイルシステムキャッシュも書き戻されず、結果としてDBが破損。リカバリに半日を要しました。

教訓kill -9(SIGKILL)は最終手段。まず kill(既定 SIGTERM)で穏やかに止めることを試す。プロセスが応答しない場合のみ、データ整合性を覚悟したうえで -9 を使う。本番運用では「-9 を使う前に systemd サービスなら systemctl restart を経由する」「DBはアプリ層の停止コマンドを優先」が鉄則。

📖 試験Tipsボックス:シグナル

主題:1.01.4(重要度:中〜高)
出題パターン:「SIGKILLの番号は?」「kill の既定シグナルは?」「設定再読込として一般的に使われるシグナルは?」

暗記ポイント

  • 1=HUP, 2=INT, 9=KILL, 15=TERM, 18=CONT, 19=STOP, 20=TSTP
  • kill 既定は SIGTERM(15)
  • SIGKILL(9) と SIGSTOP(19) は無視・捕捉不可(プロセスが応答できない)
  • シグナル送信:kill(PID)/pkill(名前)/killall(名前完全一致)
  • シグナル一覧:kill -l

第4章:ハードウェア情報を取る

「このサーバーは何コアCPU?」「メモリ何GB?」「ディスクの構成は?」これらは新規構築・性能設計・障害切り分けで毎日使う情報です。

4.1 CPU 情報:lscpu

実行コマンド:

$ lscpu | head -15

実行結果(抜粋・linuc-alma 環境):

アーキテクチャ:                       x86_64
CPU 操作モード:                       32-bit, 64-bit
Address sizes:                        48 bits physical, 48 bits virtual
バイト順序:                           Little Endian
CPU:                                  2
オンラインになっている CPU のリスト:  0,1
ベンダー ID:                          AuthenticAMD
モデル名:                             AMD Ryzen 7 7840HS w/ Radeon 780M Graphics
CPU ファミリー:                       25
モデル:                               116
コアあたりのスレッド数:               2
ソケットあたりのコア数:               1
ソケット数:                           1
ステッピング:                         1
BogoMIPS:                             7585.74

仮想化環境では、仮想CPU数(CPU=2)ホスト物理CPUの型番(AMD Ryzen 7 7840HS)が見えます。物理CPUの能力を共有しているため、ホストの種類によってベンチマーク結果も変わります。

4.2 メモリ:free

実行コマンド:

$ free -h

実行結果:

               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       484Mi       3.2Gi        11Mi       362Mi       3.3Gi
Swap:          3.9Gi          0B       3.9Gi

注目ポイント:

  • used が多くても焦らない — Linuxは積極的にメモリをキャッシュに使う設計。重要なのは available
  • available — 「アプリが新たに使える実質的なメモリ」
  • buff/cache — ディスクキャッシュ。必要時にOSが解放
  • Swap used が増えてきたら危険信号 — 物理メモリ不足の兆候

4.3 ストレージ:lsblk

第2回でも登場しましたが、lsblk はストレージ確認の定番です。

実行コマンド:

$ lsblk

実行結果:

NAME               MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
sda                  8:0    0   50G  0 disk
├─sda1               8:1    0  600M  0 part /boot/efi
├─sda2               8:2    0    1G  0 part /boot
└─sda3               8:3    0 48.4G  0 part
  ├─almalinux-root 253:0    0 44.5G  0 lvm  /
  └─almalinux-swap 253:1    0  3.9G  0 lvm  [SWAP]
sr0                 11:0    1 1024M  0 rom

4.4 システム情報:dmidecode

dmidecode は SMBIOS/DMI からマザーボード・BIOS・メモリスロット等の詳細情報を取得します。root権限必須です。

実行コマンド:

$ sudo dmidecode -t system

実行結果(抜粋):

# dmidecode 3.6
Getting SMBIOS data from sysfs.
SMBIOS 3.1.0 present.

Handle 0x0001, DMI type 1, 27 bytes
System Information
	Manufacturer: Microsoft Corporation
	Product Name: Virtual Machine
	Version: Hyper-V UEFI Release v4.1
	Serial Number: 7401-4648-1135-0994-7579-6727-46
	UUID: a99867cf-d7ef-4b12-b460-3056cc9eaa90
	Wake-up Type: Power Switch
	SKU Number: None
	Family: Virtual Machine

物理サーバーなら Manufacturer: Dell Inc.Product Name: PowerEdge R740 のように出ます。-t bios / -t memory / -t processor でカテゴリ別の情報も取得可能です。

第5章:PCI / USB バスのデバイス

5.1 必要なツールを入れる

AlmaLinux 9 の Minimal Install には lspci/lsusb がありません。pciutils/usbutils パッケージを導入します。

実行コマンド:

$ sudo dnf install -y pciutils usbutils

実行結果(末尾):

  pciutils-3.7.0-7.el9.x86_64             usbutils-017-1.el9.x86_64

完了しました!

5.2 lspci / lsusb の実行と Hyper-V 特有の挙動

実行コマンド:

$ lspci
$ lsusb

実行結果(linuc-alma 環境):

(出力なし — どちらも空)

「えっ、何も出ない?」となります。これはHyper-V Gen2 VM の特性です。Hyper-V Gen2 は伝統的な PCI / USB バスを仮想化せず、独自の VMBus(仮想マシンバス)でデバイスを提供します。lspci/lsusb は伝統バス向けのツールなので空になります。

VMBusデバイスは /sys/bus/vmbus/devices/ で確認できます。

実行コマンド:

$ ls /sys/bus/vmbus/devices/ | head -5

実行結果(抜粋):

1eccfd72-4b41-45ef-b73a-4a6e44c12924
242ff919-07db-4180-9c2e-b86cb68c8c55
2450ee40-33bf-4fbd-892e-9fb06e9214cf
2dd1ce17-079e-403c-b352-a1921ee207ee
39ae31d8-59bb-4573-af5d-cec24715d21c

これらのUUIDがHyper-V提供の仮想デバイス(ネットワーク・ストレージ・キーボード等)です。dmesg | grep vmbus で初期化ログも見られます。

物理サーバーや VMware ESXi、KVM、Hyper-V Gen1 では lspci がたっぷり出力されます。 試験対策としては「lspci/lsusb は使える」と覚えておき、現場では「環境によって見え方が変わる」と知っておけば十分です。

📖 試験Tipsボックス:ハードウェア確認

主題:1.05.1 ハードウェアの基礎知識と設定(重要度:中)
出題パターン:「CPU情報を取得するコマンドは?」「PCIバスのデバイスを表示するのは?」「BIOSのバージョン情報は?」

暗記ポイント

  • CPU:lscpu / メモリ:free -h / ストレージ:lsblk
  • システム/BIOS:dmidecode(要 sudo、-t system/-t bios/-t memory など)
  • PCI:lspci(pciutils)/ USB:lsusb(usbutils)
  • 仮想化環境では空・少ない出力になる場合あり(VMBus等)

現場での使いどころ

  • CPU負荷アラートtopP キー →CPU使用率順 → 上位プロセスのコマンドラインを ps -ef -p <PID> で確認
  • メモリ逼迫対応free -havailable をチェック → swap使用量が増えていれば物理メモリ不足を疑う → ps aux --sort=-%mem | head
  • ゾンビプロセスの検出ps aux | awk '$8 ~ /Z/ {print}' で状態Zのプロセスを抽出 → 親プロセスの再起動を検討
  • 新規サーバー受領時の確認リストlscpufree -hlsblksudo dmidecode -t system の4点セットでスペックを把握
  • kill -9 は最後の手段:systemdサービスは systemctl restart、DBはアプリ層の停止コマンド、それでもダメなときに SIGTERM、最後に SIGKILL の順

やってみよう

検証環境(linuc-alma)で順番に実行してください。演習2はジョブ制御のため対話シェル(普通のSSH接続)で実施してください。

演習1:プロセス観察

  1. ps aux | headps -ef | head を実行して列の違いを比較
  2. ps fax | head -20 でツリー形式
  3. pstree | head -15pstree -p | head -10 を比較
  4. top -bn1 | head -15 でtopのバッチ取得
  5. 対話で top を起動し、P(CPU順)、M(メモリ順)、q(終了)を試す

演習2:ジョブ制御

  1. sleep 60 & でバックグラウンド起動、ジョブ番号とPIDを確認
  2. jobs で一覧
  3. fg %1 でフォアグラウンドへ、Ctrl+Z で再度サスペンド
  4. jobsbg %1 でバックグラウンドで再開
  5. kill %1 でジョブ番号指定で終了

演習3:シグナル送信

  1. sleep 300 & を3つ起動
  2. jobsps -ef | grep sleep で確認
  3. kill -l | head -5 でシグナル一覧
  4. pkill -f sleep でパターン一致終了
  5. jobs で全終了確認
  6. 注意:本演習で -9(SIGKILL)は使わない

演習4:ハードウェア確認

  1. lscpu | head -15 でCPU情報
  2. free -h でメモリ
  3. lsblk でストレージ
  4. sudo dmidecode -t system でSMBIOSのシステム情報
  5. sudo dnf install -y pciutils usbutils でツール導入
  6. lspcilsusb を実行(Hyper-V Gen2では空になる)
  7. ls /sys/bus/vmbus/devices/ | head でVMBusデバイスを観察

分からないオプションは man psman killman dmidecode で確認する習慣を身につけてください。

理解度チェック

○か×で答えてください。回答と解説は次回冒頭で振り返ります。

  1. プロセス状態 D は割り込み不可なI/O待ちを意味し、ストレージ問題の兆候となりうる。
  2. kill コマンドのデフォルトシグナルは SIGKILL(番号9)である。
  3. ps -ef 出力には親プロセスID(PPID)が含まれる。
  4. free -havailable 列は、アプリが新たに使える実質的なメモリ量を示す。
  5. Hyper-V Gen2 VMで lspci を実行すると空になるのは、VMBus 経由でデバイスが提供されるためである。

解答

  • 1.  Disk wait(uninterruptible sleep)。長時間Dが続く場合はI/Oハング
  • 2. × 既定は SIGTERM(15)。SIGKILLは -9 等で明示指定が必要
  • 3.  System V形式の -ef は PPID列を含む。BSD形式の aux には含まれない
  • 4.  buff/cache を考慮した「すぐ使える」メモリ量
  • 5.  Hyper-V Gen2はVMBusのみ。lspciは伝統的なPCIバス向けツール

次回予告

第5回は「仮想マシンとコンテナの基礎:KVM・Docker・Podman 入門」です。今回チラ見した「VMBus」「Hyper-V」といった仮想化技術を、Linux側から扱う方法を学びます。物理マシン/仮想マシン/コンテナの違いを整理し、KVM・Podmanで実際に動かしてみます。

LinuC 101 試験対策シリーズ 全12回

広告
Linux
スポンサーリンク