コース一覧
LinuC レベル1(LPIC-1対応)対策
grepと正規表現

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分

grepと正規表現

101 試験の正規表現は、メタ文字の意味そのものよりも基本正規表現 (BRE) と拡張正規表現 (ERE) のどちらで書かれているかを判別させる形で問われます。同じパターンでも解釈が変わるものがあるからです。

歴史的な事情で、grep は既定で BRE を解釈します。ERE を使いたいときは -E を付けます。かつての egrep は現在 grep -E の別名という扱いで、非推奨の警告が出る実装もあります。fgrep は grep -F の別名で、正規表現として解釈せず固定文字列として検索します。

バックスラッシュが要るかどうかで割れます

意味BRE での書き方ERE での書き方
1回以上の繰り返し\++
0回か1回\??
選択|`
グループ化\(...\)(...)
回数指定\{n,m\}{n,m}

BRE では + ? | () {} にバックスラッシュが要り、ERE では要りません。BRE で a+ と書くとプラス記号そのものを探すことになり、意図した繰り返しになりません。試験ではこの取り違えを狙った選択肢が必ず混ざります。

一方、^ (行頭)、$ (行末)、. (任意の1文字)、* (直前の0回以上の繰り返し)、[abc] (いずれか1文字)、[^abc] (それ以外の1文字)、[a-z] (範囲) は、BRE でも ERE でも同じです。* だけはバックスラッシュ無しで使える点に注意してください。+ が特別扱いなのは、BRE が作られた当時の記法にプラスが無かったという歴史的な理由です。

角かっこの中では意味が変わります。[^...] の否定はかっこの先頭に置いたときだけ有効で、途中の ^ はただの文字です。[a-z] のハイフンも、先頭か末尾に置けばただの文字になります。

書き比べ

同じ条件を BRE と ERE で書くと、次のようになります。

ターミナル

grep '^tokyo\|^osaka' city.txt grep -E '^(tokyo|osaka)' city.txt grep 'colou\?r' notes.txt grep -E 'colou?r' notes.txt grep '[0-9]\+kg' weight.txt grep -E '[0-9]+kg' weight.txt

パターンはシングルクォートで囲むのが安全です。$ や * や ? はシェルにも意味がある文字なので、囲まないと意図しない展開が起きます。

grep の主なオプション

オプション意味
-i大文字と小文字を区別しない
-vマッチしない行を出す
-cマッチした行数だけを出す
-n行番号を付ける
-lマッチしたファイル名だけを出す
-rディレクトリを再帰的にたどる
-w単語単位で一致させる
-oマッチした部分だけを出す
-E拡張正規表現として解釈する
-F正規表現でなく固定文字列として検索する
-A n / -B nマッチ行の後ろ / 前 n 行も出す

-c は「マッチした回数」ではなく「マッチした行数」を返します。1行に2箇所あっても 1 と数えます。回数を数えたいときは -o で切り出してから wc -l に渡します。

-w は単語境界で一致を判定するので、grep -w cat は catalog にマッチしません。

よくある引っかけ

egrep は BRE を使う、という選択肢は誤りです。ERE です。

BRE の a+ が a の1回以上の繰り返しにマッチする、という選択肢も誤りです。BRE ではプラス記号そのものを探します。

. が0文字以上にマッチするという選択肢も誤りで、任意の1文字です。0文字以上は .* です。

ヒント

行頭を表すのは ^ です。ERROR か WARN のどちらか、という条件は選択の記号で書きます

拡張正規表現なら (ERROR|WARN) と素直に書けます。基本正規表現で同じことをするならバックスラッシュが要ります

grep -E '^(ERROR|WARN)' /root/app.log > /root/alert.log と grep -cE '^(ERROR|WARN)' /root/app.log > /root/alert-count.txt の2行です

  • 1. cat /root/app.log でログの形を確かめる
  • 2. grep -E で行頭が ERROR または WARN の行を抜き出す
  • 3. 抜き出した結果を /root/alert.log に書き出す
  • 4. grep -c で件数を数えて /root/alert-count.txt に記録する
  • 5. 同じパターンを -E 無しで書くとどうなるかも試してみる

4 項目で採点します