こんにちは、インフラエンジニアのryuです。
LPIC-1の勉強をしていると、問題集では正解できるのに、実際のLinuxの前に座ると何を打てばいいか分からない、ということがよくあります。
選択肢を見れば chmod だと分かっても、自分で chmod 640 と打って結果を確かめたことがないと、知識がなかなか定着しません。
この記事では、LPIC-1の出題範囲の中から、手を動かしたほうが理解しやすい6つのテーマを課題にしました。1つの課題は10分前後で終わるので、1日1課題ずつ進めても1週間かかりません。
どの課題も、手順、打つコマンド、結果の読み方の順に説明します。
LPIC-1のどの範囲とつながる?¶
まずは、今回の課題がLPIC-1のどの主題に対応しているのかを確認しておきましょう。
LPIC-1は、101試験(101-500)と102試験(102-500)の2つに合格すると認定されます。どちらも現行はバージョン5.0です。LPIの公式ページに載っている出題範囲(Objectives)から、今回の課題に関係するものを抜き出すと次のようになります。
| 課題 | テーマ | 対応する主題 | 試験 |
|---|---|---|---|
| 課題1 | ファイル操作とリンク | 103.3 基本的なファイル管理、104.6 ハードリンクとシンボリックリンク | 101 |
| 課題2 | パーミッション | 104.5 ファイルのパーミッションと所有者の管理 | 101 |
| 課題3 | パイプとリダイレクト | 103.2 テキスト処理、103.4 ストリーム・パイプ・リダイレクト | 101 |
| 課題4 | プロセス | 103.5 プロセスの生成・監視・終了 | 101 |
| 課題5 | ユーザー管理 | 107.1 ユーザーとグループの管理 | 102 |
| 課題6 | ネットワークの確認 | 109.3 基本的なネットワークのトラブルシューティング | 102 |
101試験の範囲が多めになっているのは、主題103の「GNUとUnixのコマンド」が、コマンドを実際に打ったかどうかで差が出やすい分野だからです。
練習には、自分のPCに入れたLinuxでも、仮想マシンやクラウドのサーバーでも構いません。ただし、課題5だけは sudo が使える環境が必要です。
練習用の環境は、壊れても困らないものを使いましょう。普段使っているPCや、仕事で使っているサーバーでは試さないでください。
1週間で進めるなら¶
毎日少しずつ進めたい人のために、目安の予定を表にしておきます。
| 日 | やること | 時間の目安 |
|---|---|---|
| 1日目 | 課題1(ファイル操作とリンク) | 15分 |
| 2日目 | 課題2(パーミッション) | 15分 |
| 3日目 | 課題3(パイプとリダイレクト) | 20分 |
| 4日目 | 課題4(プロセス) | 15分 |
| 5日目 | 課題5(ユーザー管理) | 20分 |
| 6日目 | 課題6(ネットワークの確認) | 15分 |
| 7日目 | 確認問題を解き、間違えた課題をやり直す | 20分 |
1日の時間は短めにしています。仕事や学校のあとでも続けられる量にして、毎日ターミナルを開くことを優先してください。
課題をやるときは、コマンドを打つ前に「どんな結果になるか」を一度予想してみるのがおすすめです。予想と結果が違ったところが、まだ理解があいまいな部分です。
課題1:ファイルを作って、2種類のリンクを比べる¶
最初の課題は、ファイル操作とリンクです。
ハードリンクとシンボリックリンクの違いは、文章で読むだけだとなかなか頭に入りません。実際に作って、ls -li で見比べるのがいちばんの近道です。
手順とコマンド¶
作業用のディレクトリを作って、その中でファイルとリンクを作ります。
# 作業用のディレクトリを作って移動する
mkdir -p ~/lpic-lab/task1
cd ~/lpic-lab/task1
# ファイルを作る
echo "hello lpic" > original.txt
# ハードリンクとシンボリックリンクを作る
ln original.txt hard.txt
ln -s original.txt soft.txt
# inode番号付きで一覧を表示する
ls -li
結果の読み方¶
ls -li の一番左の列が、inode番号です。
original.txt と hard.txt は同じinode番号になり、soft.txt だけ別の番号になっているはずです。また、original.txt と hard.txt のリンク数(パーミッションの右の数字)は 2 に増えています。
ハードリンクは同じファイルの実体に別の名前を付けたもの、シンボリックリンクはファイルの場所を指す別のファイルです。この違いが、inode番号にそのまま表れています。
続けて、元のファイルを消してみましょう。
rm original.txt
cat hard.txt
cat soft.txt
hard.txt は中身を表示できますが、soft.txt はエラーになります。シンボリックリンクは指している先がなくなると使えなくなる、という試験でよく問われる性質を、ここで自分の目で確認できます。
課題2:パーミッションを数字と記号の両方で変える¶
2つ目の課題は、パーミッションです。
chmod 640 のような数字の指定と、chmod u+x のような記号の指定は、どちらもLPIC-1の範囲に入っています。両方を打って、ls -l の表示がどう変わるかを見てみましょう。
mkdir -p ~/lpic-lab/task2
cd ~/lpic-lab/task2
# 今のumaskを確認する
umask
# ファイルを作って、最初のパーミッションを見る
touch memo.txt
ls -l memo.txt
# 数字で変える
chmod 640 memo.txt
ls -l memo.txt
# 記号で、所有者に実行権を足す
chmod u+x memo.txt
ls -l memo.txt
chmod 640 のあとは、ls -l の左端が -rw-r----- になります。所有者が読み書き、グループが読み取りだけ、その他は何もできない、という意味です。
chmod u+x のあとは、所有者の部分が rwx に変わり、-rwxr----- になります。
umaskとの関係も確かめる¶
touch で作った直後のパーミッションは、umask の値によって決まります。
umask が 0022 の場合、新しいファイルは -rw-r--r--(644)で作られます。0002 の場合は -rw-rw-r--(664)です。どちらになるかはディストリビューションやユーザーの設定によって変わります。自分の環境の umask と、touch 直後の表示を見比べて、計算が合っているか確かめてみてください。
課題3:パイプとリダイレクトで情報を絞り込む¶
3つ目の課題は、パイプとリダイレクトです。
ここでは、ユーザーの情報が入っている /etc/passwd を材料に使います。このファイルは1行が1ユーザーで、: で区切られた7つの項目が並んでいます。
# ユーザー名(1列目)とログインシェル(7列目)を取り出す
cut -d: -f1,7 /etc/passwd
# ログインシェルの種類ごとに数える
cut -d: -f7 /etc/passwd | sort | uniq -c
# 結果をファイルに保存する
cut -d: -f7 /etc/passwd | sort | uniq -c > ~/lpic-lab/shells.txt
cat ~/lpic-lab/shells.txt
# エラーだけを捨てて、/etc の下の .conf ファイルの数を数える
find /etc -name "*.conf" 2>/dev/null | wc -l
2つ目のコマンドでは、sort で並べてから uniq -c で数えています。uniq は隣り合った同じ行しかまとめないので、先に sort しないと正しく数えられません。
最後のコマンドの 2>/dev/null は、エラー出力(標準エラー出力)だけを捨てる書き方です。一般ユーザーで find /etc を実行すると、読めないディレクトリでエラーが出ることがあります。2>/dev/null を外して実行し、表示がどう変わるかも比べてみてください。
リダイレクトの記号の意味は、リダイレクトの使い方を解説した記事でも詳しく説明しています。grep・sed・awk まで進みたい人は、grep・sed・awkの練習問題にも挑戦してみてください。
課題4:プロセスを動かして、止める¶
4つ目の課題は、プロセスの操作です。
sleep コマンドを使えば、何もしないで待つだけのプロセスを安全に作れます。これをバックグラウンドで動かして、確認して、止めるところまでやってみましょう。
# 300秒待つだけのプロセスをバックグラウンドで動かす
sleep 300 &
# 今のシェルのジョブを確認する
jobs
# プロセスの一覧から sleep を探す
ps aux | grep sleep
# ジョブ番号で止める
kill %1
# 止まったか確認する
jobs
sleep 300 & を実行すると、ジョブ番号とプロセスID(PID)が表示されます。ps aux | grep sleep の2列目に出てくる数字が、そのPIDです。
kill %1 はジョブ番号で、kill <PID> はプロセスIDで止める書き方です。どちらも、何も指定しなければ SIGTERM(シグナル番号15)を送ります。
もう一度 sleep 300 & を実行して、今度はPIDを指定して止めてみると、2つの書き方の違いがはっきりします。
ps と kill のオプションは、psコマンドの使い方とkillコマンドの使い方でまとめています。
課題5:ユーザーを作って、確かめて、消す¶
最後の課題は、102試験の範囲に入るユーザー管理です。
ユーザーの追加や削除には管理者の権限が必要なので、sudo が使える練習用の環境で試してください。
# ホームディレクトリ付きでユーザーを作る
sudo useradd -m lpictest
# ユーザーの情報を確認する
id lpictest
grep lpictest /etc/passwd
ls -ld /home/lpictest
# グループを作って、ユーザーを追加する
sudo groupadd lpicgroup
sudo usermod -aG lpicgroup lpictest
id lpictest
# 後片付け(ホームディレクトリごと削除する)
sudo userdel -r lpictest
sudo groupdel lpicgroup
id lpictest では、ユーザーID(uid)、主グループ(gid)、所属しているグループ(groups)が表示されます。usermod -aG のあとにもう一度 id を打つと、groups に lpicgroup が増えているはずです。
ここで -a を付け忘れると、それまで所属していた補助グループが外れてしまいます。usermod -G だけで実行すると、指定したグループ以外の補助グループから外れるという点は、実務でも試験でも注意が必要です。
useradd と adduser の違いについては、ユーザーを追加する方法の記事を参考にしてください。
課題6:自分のサーバーのネットワークを確かめる¶
6つ目の課題は、102試験の主題109に入るネットワークの確認です。
ネットワークの調査は、IPアドレス、経路、待ち受けているポート、相手との疎通、の順に見ていくと迷いにくくなります。どれも表示するだけのコマンドなので、そのまま打ってみてください。
# IPアドレスを短い形式で表示する
ip -br addr
# ルーティングテーブル(デフォルトゲートウェイ)を表示する
ip route
# 待ち受けているTCPのポートを表示する
ss -tln
# 相手に3回だけ ping を送る
ping -c 3 127.0.0.1
ip -br addr では、インターフェースの名前、状態、IPアドレスが1行ずつ並びます。lo が 127.0.0.1 を持つループバックで、それ以外が実際の通信に使うインターフェースです。
ip route の default via で始まる行が、デフォルトゲートウェイです。ここが無いと、同じネットワークの外とは通信できません。
ss -tln では、LISTEN の状態になっているポートが一覧になります。たとえばSSHのサーバーが動いていれば、22 番のポートが表示されます。
最後の ping -c 3 は、-c で回数を指定しています。-c を付けないと止まるまで送り続けるので、そのときは Ctrl + C で止めましょう。
確認問題¶
課題の内容を、オリジナルの確認問題3問でおさらいしておきましょう。どれも課題で実際に打ったコマンドで確かめられます。
問題1¶
original.txt のハードリンク hard.txt を作ったあと、original.txt を削除しました。このとき正しい説明はどれですか。
hard.txtも自動で削除されるhard.txtの中身はそのまま読めるhard.txtは壊れたリンクになり、読もうとするとエラーになる
正解:2 ハードリンクは同じinodeを指す別の名前なので、名前を1つ消してもリンク数が減るだけで、ファイルの実体は残ります。3はシンボリックリンクの場合の動きです。
問題2¶
ファイル memo.txt のパーミッションを -rw-r----- にしたいとき、chmod に指定する数字はどれですか。
640644750
正解:1 所有者が
rw-(4+2=6)、グループがr--(4)、その他が---(0)なので、640になります。
問題3¶
ユーザー lpictest を、今の補助グループを残したまま lpicgroup にも追加したいとき、正しいコマンドはどれですか。
usermod -G lpicgroup lpictestusermod -aG lpicgroup lpictestuseradd -G lpicgroup lpictest
正解:2
-a(append)を-Gと一緒に使うと、補助グループを追加できます。1は指定したグループ以外の補助グループから外れてしまい、3は新しいユーザーを作るコマンドです。
うまくいかないときの確認ポイント¶
課題の途中でつまずいたときは、次の表を確認してみてください。
| 症状 | 考えられる原因 | 確認すること |
|---|---|---|
Permission denied と表示される |
権限が足りない | ls -l でパーミッションを見る。管理者の操作なら sudo を付ける |
No such file or directory と表示される |
今いるディレクトリが違う、名前の打ち間違い | pwd で現在地を、ls でファイル名を確認する |
ln でディレクトリのハードリンクが作れない |
ディレクトリのハードリンクは基本的に作れない | ディレクトリにはシンボリックリンク(ln -s)を使う |
kill %1 で no such job と表示される |
別のターミナルで sleep を動かした |
ジョブは同じシェルの中だけで管理される。ps でPIDを調べて止める |
useradd で already exists と表示される |
前回の練習でユーザーが残っている | id lpictest で確認し、sudo userdel -r lpictest で消してからやり直す |
エラーメッセージは英語ですが、短い文で原因を教えてくれています。エラーが出たら、まず最後の一文を落ち着いて読む習慣をつけておきましょう。
InfraAcademyで続ける¶
ここまでの6つの課題が終わったら、同じ操作を何度か繰り返して、手が自然に動くようにしていきましょう。
InfraAcademy では、ブラウザ上で動くLinuxの練習環境で、自分のPCに何もインストールせずにコマンドを打てます。Linuxのロードマップでは、コマンドの基本からファイルとプロセスの管理、サーバーの構築まで、順番に講座を進められます。
手を動かして覚えたことは、問題を解いて確かめるとさらに定着します。InfraAcademyの資格模擬問題にある「(無料)LPICの練習問題で毎日トレーニング300問」で、101試験と102試験の問題を解いてみてください。
間違えた問題があったら、その分野の課題をもう一度打ち直す。この往復を続けると、問題文を読んだときに、コマンドの結果が頭の中に浮かぶようになってきます。
次に読む記事¶
LPIC-1の勉強全体の進め方は、LPICの勉強方法の記事でまとめています。
試験が近い人は、LPIC 101試験の1週間前の見直し方とLPIC 102の直前対策が役に立ちます。模擬試験の使い方はLPIC-1の模擬試験の記事を見てください。
また、今日のニュースとしてLinux 7.3の公開と、カーネルのバージョンの確かめ方も書いています。uname -r や lsmod を打ってみる課題として、あわせて試してみてください。
練習環境を探している人は、Linuxをハンズオンで学習する方法やブラウザで動作するLinux環境の紹介も参考になります。
まとめ¶
今回の6つの課題を振り返ります。
| 課題 | 確かめたこと |
|---|---|
| 課題1 | ハードリンクは同じinode、シンボリックリンクは別のinode |
| 課題2 | chmod の数字と記号の指定、umask と最初のパーミッションの関係 |
| 課題3 | cut・sort・uniq のつなぎ方と、2>/dev/null の意味 |
| 課題4 | &・jobs・ps・kill で、プロセスを動かして止める流れ |
| 課題5 | useradd・usermod -aG・userdel -r と、-a を付け忘れたときの注意 |
| 課題6 | ip・ss・ping で、アドレス・経路・待ち受け・疎通を順に確認する |
問題集で覚えた知識も、一度自分で打って結果を見ておくと、本番で選択肢を読んだときに思い出しやすくなります。
まずは今日、課題1の ls -li を打つところから始めてみてください。
参考¶
- LPIC-1 Linux Administrator(Linux Professional Institute)
- Exam 101 Objectives(Linux Professional Institute)
- 104.5 Lesson 1: Manage file permissions and ownership(LPI Learning)
- Learn Linux, 101: Create and change hard and symbolic links(IBM Developer)
- ln(1) - Linux manual page(man7.org)
- chmod(1) - Linux manual page(man7.org)
- usermod(8) - Linux manual page(man7.org)
- passwd(5) - Linux manual page(man7.org)
- ss(8) - Linux manual page(man7.org)
- ip(8) - Linux manual page(man7.org)



