LinuCレベル1(2)~101試験後半+102試験前半対策~

スポンサーリンク
IT系

前回は101試験前半にあたる「インストールと仮想化」「ファイル・ディレクトリ操作」「GNU/Unixコマンド」を扱った。今回は101試験の残りである以下の2主題と、102試験前半の2主題を扱う。

  • 1.04:Debian/Red Hat系のパッケージ管理
  • 1.05:ハードウェア、パーティション、ファイルシステム
  • 1.06:シェル環境のカスタマイズとシェルスクリプト
  • 1.07:ネットワークの基礎

今回もWSL2を実践環境として使うが、1.05のパーティション操作だけはWSL上で完結しないため、後述のとおり、本ブログ記事を参考としてご紹介しよう。

1.04:パッケージ管理

Linuxディストリビューションは大きくDebian系(Ubuntuなど)とRed Hat系(Red Hat Enterprise Linux (RHEL)、AlmaLinuxなど)に分かれ、それぞれパッケージ管理の仕組みが異なる。

Debian系:dpkgとapt

# パッケージのインストール・削除
sudo apt install nginx
sudo apt remove nginx

# パッケージ一覧の更新とアップグレード
sudo apt update
sudo apt upgrade

# 個別のdebファイルを直接インストール
sudo dpkg -i package.deb

aptはリポジトリからの依存関係解決込みのインストールを担当し、dpkgは個々の.debパッケージファイルを直接扱う低レベルなコマンドである、という役割分担を押さえておきたい。

Red Hat系:rpmとyum※

現在のRed Hat系Linuxでは、yumの後継としてdnfが使われている。
ただし、LinuCの公式出題範囲では「yumコマンドによるパッケージ管理」とされている。

# パッケージのインストール・削除
sudo dnf install httpd
sudo dnf remove httpd

# 個別のrpmファイルを直接インストール
sudo rpm -ivh package.rpm

# インストール済みパッケージの照会
rpm -qa

dnf(旧yum)とaptrpmdpkgの対応関係が頻出のため、表にまとめてみた。

役割Debian系Red Hat系
依存解決込みの高レベル管理aptdnf(yum)
個別パッケージファイルの直接操作dpkgrpm

WSLで試してみよう

WSL2でUbuntuを利用している場合は、Debian系なので、aptコマンド一式を試してみよう。

sudo apt update
sudo apt upgrade -y
sudo apt install tree
tree --version
sudo apt remove tree

apt updateはパッケージ一覧を最新化するだけで、既存パッケージ自体は更新しない。
実際にインストール済みパッケージを最新版にするのがapt upgradeであり、updateとセットで実行する習慣をつけておくとよい。
Red Hat系のコマンドも試したい場合は、Microsoft StoreからAlmaLinuxやFedora Remixなど別ディストリビューションのWSLイメージを追加インストールすれば、dnfrpmを同じPC上で並行して試すことができる。

1.05:ハードウェア、ディスク、パーティション、ファイルシステム

この主題では、ディスクデバイスの認識、パーティションの作成、ファイルシステムの構築とマウントが問われる。

# ディスク・パーティションの一覧表示
lsblk
fdisk -l

# ファイルシステムの作成
mkfs.ext4 /dev/sdb1

# マウント・アンマウント
mount /dev/sdb1 /mnt/data
umount /mnt/data

# 起動時の自動マウント設定
cat /etc/fstab

/etc/fstabの各列(デバイス、マウントポイント、ファイルシステム種別、オプション、dump、fsck順序)の意味を問う問題は頻出であるため、実際の記述例を見て構造を理解しておきたい。

WSL2には仮想ディスク(.vhdx)を追加マウントする機能があるため、wsl --mountコマンドを使えば仮想的なパーティション操作をある程度試すことはできる。しかし、実機のBIOS/UEFIやディスク全体を認識するところからの体験、つまり試験で問われる「まっさらなディスクにパーティションを切り、Linuxをインストールする」という一連の流れそのものを体感するには、実機かVMへのインストール作業が最も分かりやすい。

その体験には、本ブログの記事「Windows 11の最小システム要件を満たさないPCにLinuxをインストールする」が参考になる。この記事で紹介しているUbuntuのインストーラーでは、ディスクの選択からパーティションの割り当てまでを画面上で確認しながら進められるため、fdiskやmkfsが実際に何をしているのかをGUI越しに掴む入り口としてちょうどよい。パーティション操作を自分の手で体感してみたい場合は、こちらもあわせて参照してほしい。

1.06:シェル環境のカスタマイズとシェルスクリプト

この主題は、シェルの設定ファイルとシェルスクリプトの基本構文が中心である。

シェルの設定ファイル

# ログインシェルの設定ファイル
~/.bash_profile
~/.profile

# 対話シェル起動時に毎回読み込まれる設定ファイル
~/.bashrc

エイリアスの設定もよく出題される。

alias ll='ls -la'

シェルスクリプトの基本

#!/bin/bash

echo "引数の数: $#"
echo "全ての引数: $@"

if [ $# -eq 0 ]; then
    echo "引数がありません"
    exit 1
fi

for arg in "$@"; do
    echo "受け取った引数: $arg"
done

$0(スクリプト名)、$1〜(各引数)、$#(引数の数)、$@(全引数)といった特殊変数の意味は必ず覚えておく必要がある。

WSLで試してみよう

上記のスクリプトを、viを使って実際にご自分で作成してみよう。

まずargs.shという名前のファイルを開く。ファイルが存在しない場合は新規作成になる。

vi args.sh

viが起動すると最初はコマンドモードになっているため、まだ文字は入力できない。iキーを押して挿入モードに切り替える。

i

画面左下に-- INSERT --と表示されたら入力できる状態である。そのまま上記のスクリプトの内容を入力しよう。

#!/bin/bash

echo "引数の数: $#"
echo "全ての引数: $@"

if [ $# -eq 0 ]; then
    echo "引数がありません"
    exit 1
fi

for arg in "$@"; do
    echo "受け取った引数: $arg"
done

入力が終わったらEscキーを押して挿入モードを抜け、コマンドモードに戻る。

Esc

コピペする場合

あらかじめ、Windows側で入力するテキストをコピーしておき、挿入モード(iキー)にしてから Ctrl + Shift + V を押すか、マウスの右クリックをする。

なお、:set paste と入力してペーストモードにしてから貼り付けると、きれいに貼り付けられる。貼り付け後は :set nopaste で戻す。


コマンドモードで:wqと入力し、Enterキーを押すと、保存してviを終了する。

:wq

保存できたら、ファイルの中身を確認しておくとよい。

cat args.sh

このままでは実行権限がないため、chmodで実行権限を付与しよう。

chmod +x args.sh

権限が付いたことはls -l args.shで確認できる(-rwxr-xr-xのようにxが付いていればよい)。
それでは、実際に引数を渡して実行してみよう。

./args.sh apple banana

実行例

引数の数: 2
全ての引数: apple banana
受け取った引数: apple
受け取った引数: banana

引数の渡し方を変えながら$#$@の中身がどう変わるかを確認すると、特殊変数の意味が体感的に理解できる。
.bashrcにエイリアスを追記してsource ~/.bashrcで反映させる、という一連の流れも試しておくとよいだろう。

1.07:ネットワークの基礎

この主題では、IPアドレスの基礎知識とネットワーク設定コマンドが問われる。

# ネットワークインターフェースとIPアドレスの確認
ip addr show

# ルーティングテーブルの確認
ip route show

# 疎通確認
ping example.com

# 名前解決の確認
dig example.com
nslookup example.com

/etc/hosts(静的な名前解決)と/etc/resolv.conf(DNSサーバーの指定)の役割の違いも問われやすい。

WSLで試してみよう

ここでは題材として本ブログのドメインであるmy-studies.orgを使う。
以下の手順で1つずつ試してみてほしい。

1. 自分のネットワーク情報を確認する

ip addr show

eth0などのネットワークインターフェースに、inet 172.xx.xx.xxのような表示があるはずである。これがWSL2内部でのIPアドレスであり、Windows側やインターネット側から見えるアドレスとは別物である点を押さえておこう。

2. ルーティングテーブルを確認する

ip route show

default via 172.xx.xx.1 dev eth0のような行が表示されれば、「宛先が分からない通信はこのゲートウェイに送る」という設定になっていることが分かる。

3. 疎通確認(ping)を行う

ping -c 4 my-studies.org

-c 4を付けると4回だけ送信して自動的に停止する(付けないと止まるまでCtrl+Cが必要になる)。応答が返ってくれば、名前解決とネットワーク疎通の両方が成功していることになる。応答時間(time=◯◯ ms)が表示されている行に注目するとよい。

4. 名前解決だけを個別に確認する(dig)

dig my-studies.org

出力の中の「ANSWER SECTION」という部分に、my-studies.orgに対応するIPアドレスが表示される。これが名前解決の結果そのものである。出力が長くて分かりにくい場合は、次のように結果だけに絞ることもできる。

dig my-studies.org +short

5. 別の方法でも名前解決を確認する(nslookup)

nslookup my-studies.org

digより出力がシンプルなので、まず結果だけ手早く見たいときはこちらが分かりやすい。

一通り試したら、ip addr showで見えたアドレスが「WSLの内側だけで使われているアドレス」であり、pingdigで使ったアドレス解決の仕組み自体は一般的なLinux環境と変わらない、という点を理解しておくとよいだろう。
また/etc/resolv.confはWSL起動時に自動生成される設定になっており、通常のLinuxサーバーのように手動で編集して管理する構成とは異なる。試験ではあくまで一般的なLinux環境を前提とした設定方法が問われるため、WSLでの挙動の違いを念頭に置いたうえで、コマンドの使い方そのものを覚えることを優先しよう。

まとめ

今回は101試験後半の「パッケージ管理」「ハードウェア・パーティション・ファイルシステム」と、102試験前半の「シェル環境・シェルスクリプト」「ネットワークの基礎」を扱った。1.04と1.06はWSL上でそのまま実践でき、1.07はWSL特有の差異を踏まえたうえで実践できる。1.05のパーティション操作については、実機インストールを扱った過去記事を参考にしてほしい。次回はいよいよ最終回として、102試験後半(アカウント管理・ジョブスケジューリング、システム時刻・ログ・MTA、セキュリティ、オープンソースの文化)を扱い、シリーズの総仕上げとする。

コメント

タイトルとURLをコピーしました