コース一覧
LinuC レベル1(LPIC-1対応)対策
testと条件式

LinuC レベル1(LPIC-1対応)対策

ブートとsystemd、パッケージ管理(APT/RPM両系統)、コマンドとviの操作、ファイルシステム、シェルスクリプト、ユーザー管理とセキュリティ、ネットワークまで、LinuC レベル1(LPIC-1対応)の全出題範囲を、毎レッスン実際にコマンドを打って確かめながら学べる対策コースです。ブラウザの中で本物の Debian 12 が動いていて、62レッスンのうち36本は読むだけで終わらず、自分の手でコマンドを打った結果で採点されます。Linux入門を修了した方を対象としています。101・102それぞれの模試60問で分野別の弱点を洗い出し、直前チェックで暗記事項を固めてから本番に臨めます。

1
試験ガイダンス
01. LinuC/LPICとは15分
02. LinuCとLPICの選び方15分
03. 学習計画15分
04. 出題形式を体験15分
2
101 ブートとアーキテクチャ
01. ブートの流れ18分
02. GRUB15分
03. systemdとターゲット18分
04. ハードウェア情報18分
05. カーネルモジュール18分
06. 過去問 アーキテクチャ15分
3
101 パッケージ管理
01. Debian系パッケージ18分
02. RPM系パッケージ15分
03. 両系統の対応表15分
04. リポジトリ管理18分
05. 共有ライブラリ18分
06. 過去問 パッケージ管理15分
4
101 GNU/Unixコマンド
01. ファイル操作の試験オプション18分
02. テキスト処理18分
03. ストリームとリダイレクト18分
04. プロセス監視18分
05. 優先度18分
06. grepと正規表現18分
07. viの操作15分
08. 過去問 コマンド15分
5
101 ファイルシステム
01. パーティション15分
02. 作成とマウント18分
03. fstabとUUID18分
04. パーミッションとリンク18分
05. 容量とクォータ18分
06. findとlocate18分
07. 過去問 ファイルシステム15分
6
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
7
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
8
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
9
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分
10
模試と直前対策
01. 模試 10190分
02. 101弱点復習15分
03. 模試 10290分
04. 102弱点復習15分
05. 直前チェック15分
06. 受験と次のステップ15分

testと条件式

角括弧の内側に空白が無いだけで「コマンドが見つかりません」と言われます。[ が記号ではなくコマンドだからです。ここを飲み込むと、条件式の問題はほとんど落とさなくなります。

[ はコマンドなので、内側に空白が要る

[ は /usr/bin/[ という実行ファイルとして実在します。だから次の2つはまったく同じ意味です。

ターミナル

test -f /etc/hostname [ -f /etc/hostname ]

コマンドである以上、コマンド名と引数は空白で区切ります。閉じる ] も [ に渡す最後の引数なので、その前にも空白が要ります。

ターミナル

[ -f /etc/hostname ] # 正しい [-f /etc/hostname] # 誤り。[-f というコマンドを探しに行って失敗する [ -f /etc/hostname] # 誤り。] が閉じられていないと怒られる

選択肢を見比べるときは、まず空白の有無を確かめてください。

[[ ]] は bash の拡張構文です。内部で単語分割やパス名展開が起きないため未定義変数に強く、&& || をそのまま書け、=~ で正規表現も使えます。ただし POSIX sh では動かないので、移植性を問われる場面では [ ] を選びます。

-e はディレクトリでも真、-f は通常ファイルだけ

演算子真になる条件
-e file存在する。種類は問わない
-f file存在して、かつ通常ファイル
-d file存在して、かつディレクトリ
-L fileシンボリックリンクである
-r -w -x読み取り、書き込み、実行の権限がある
-s file存在して、かつサイズが 0 より大きい
f1 -nt f2 / f1 -ot f2f1 のほうが新しい / 古い

ディレクトリに対して -e は真ですが -f は偽です。空のファイルに対して -f は真ですが -s は偽です。この2組が引っかけの材料になります。

数値はアルファベット、文字列は記号

種類演算子
数値の比較-eq 等しい / -ne 等しくない / -lt より小さい / -le 以下 / -gt より大きい / -ge 以上
文字列の比較= 等しい / != 等しくない
文字列の長さ-z 長さが 0 / -n 長さが 0 より大きい

数値に = や < を使ってはいけません。[ 10 = 10.0 ] は文字列比較なので偽ですし、[ 5 < 10 ] の < はリダイレクトと解釈されます。逆に文字列へ -eq を使うと数値として解釈できずエラーになります。

変数が空のときに [ $VAR = abc ] と書くと、展開の結果が [ = abc ] となって構文エラーです。[ "$VAR" = abc ] とダブルクォートで囲みます。

真は 0、偽は 0 以外

シェルでは真が 0、偽が 0 以外です。C 言語などとは逆なので混乱しやすいところです。直前のコマンドの終了ステータスは $? で取れます。

ターミナル

[ -d /etc ] echo $? # ディレクトリなら 0 が出る

if は、条件に書いたコマンドの終了ステータスが 0 かどうかだけを見ています。だから if grep -q root /etc/passwd; then のように、[ ] 以外のコマンドも条件に書けます。

ターミナル

mode=start if [ "$mode" = start ]; then echo starting elif [ "$mode" = stop ]; then echo stopping else echo usage fi

then を同じ行に書くなら直前にセミコロンが要ります。閉じるのは fi です。論理の組み合わせは [ ... ] && [ ... ] のように2つ並べてつなぐ書き方が安全で、1つの角括弧の中で使う -a と -o は POSIX で非推奨です。否定は感嘆符です。

試験で狙われるところ

[ の直後と ] の直前の空白。数値は -eq -lt、文字列は = != という取り違え。真が 0 で偽が 0 以外という向き。-e はディレクトリでも真で -f は通常ファイルだけ。そして [[ ]] は bash 専用で /bin/sh のスクリプトでは使えないこと。この5点です。

ヒント

ヒアドキュメントは cat <<'EOF' > /root/check.sh で始め、最後の行に EOF だけを書いて閉じます。EOF をシングルクォートで囲むと $1 が展開されずそのまま書き込まれます

判定は [ -e "$1" ] です。[ の直後と ] の直前に空白が要ります。-f でも通りますが -e のほうが素直です

1行で書くなら if [ -e "$1" ]; then echo EXISTS; else echo MISSING; fi です。then の前の ; を忘れないでください

  • 1. cat <<'EOF' > /root/check.sh の形でスクリプトを書き出す
  • 2. 1行目にシバン #!/bin/bash を書く
  • 3. if [ -e "$1" ]; then echo EXISTS; else echo MISSING; fi の形で判定を書く
  • 4. chmod +x /root/check.sh で実行権限を付ける
  • 5. bash /root/check.sh /etc/hostname を実行して EXISTS が出ることを確かめる
  • 6. bash /root/check.sh /nonexistent を実行して MISSING が出ることを確かめる

4 項目で採点します