InfraAcademy

InfraAcademy Blog

LPIC-1の範囲を、コマンドを打って確かめる。ファイル・権限・プロセス・ユーザー・ネットワークの6つのハンズオン課題

著者: ryu | #Linux #コマンド #LPIC
Linuxをブラウザで試してみる

Linux・ネットワーク・AWSを、環境構築なしで実践学習できます

この記事を共有

こんにちは、インフラエンジニアの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 を削除しました。このとき正しい説明はどれですか。

  1. hard.txt も自動で削除される
  2. hard.txt の中身はそのまま読める
  3. hard.txt は壊れたリンクになり、読もうとするとエラーになる

正解:2 ハードリンクは同じinodeを指す別の名前なので、名前を1つ消してもリンク数が減るだけで、ファイルの実体は残ります。3はシンボリックリンクの場合の動きです。

問題2

ファイル memo.txt のパーミッションを -rw-r----- にしたいとき、chmod に指定する数字はどれですか。

  1. 640
  2. 644
  3. 750

正解:1 所有者が rw-(4+2=6)、グループが r--(4)、その他が ---(0)なので、640 になります。

問題3

ユーザー lpictest を、今の補助グループを残したまま lpicgroup にも追加したいとき、正しいコマンドはどれですか。

  1. usermod -G lpicgroup lpictest
  2. usermod -aG lpicgroup lpictest
  3. useradd -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 を打つところから始めてみてください。

参考

Next Action

記事で読んだ内容を、講座で実装してみましょう

InfraAcademyでは、ブラウザ上でLinuxやネットワークの実践環境を使いながら学習できます。無料で始められる講座から、学習の流れを試せます。

この記事を書いた人

ryu

株式会社InfraAcademy 代表 / エンジニア

大手メーカーでインフラエンジニアとして勤務した後、ベンチャー企業・スタートアップでフルスタックエンジニアを経験。その後、起業し学習サービス「InfraAcademy」を運営しています。
保有資格:ネットワークスペシャリストなど 運営会社:株式会社InfraAcademy

Related

関連記事

ブログ一覧へ

Roadmap

まずはこの4講座から

ログインすれば無料で始められる講座です。気になったテーマから手を動かして学べます。

講座一覧を見る