インフラエンジニアの羅針盤

インフラエンジニア1〜3年目のための技術ガイド

Linux標準入出力とリダイレクト・パイプ・grep正規表現の使い方【LinuC 101試験対策】

公開
,
LinuC Level 1 第03回 主題1.03 GNUとUnixのコマンド

LinuCレベル1(101試験)において、合否を大きく左右する最重要配点分野が「主題1.03 GNUとUnixのコマンド」に含まれる「1.03.2 フィルタを使ったテキストストリームの処理(重要度3)」「1.03.3 ストリーム、パイプ、リダイレクトの使用(重要度4)」「1.03.4 正規表現を使用したテキストファイルの検索(重要度2)」の3トピック(重要度合計:9)です。

UNIX哲学の中核である「1つのプログラムは1つのことをうまく行い、それらを組み合わせて複雑な処理を実現する」という思想は、標準入出力、リダイレクト、およびパイプラインの仕組みによって体現されています。本記事では、ファイルディスクリプタの内部構造から、実務のログ解析で不可欠なテキストフィルタ群、そして正規表現(BRE/ERE)を用いた grep コマンドの高度な検索技法までを実機ログを交えて体系的に解説します。

本記事の到達目標

  • ファイルディスクリプタ(0: stdin, 1: stdout, 2: stderr)の役割と、各種リダイレクト記号(>, >>, 2>, 2>&1, &>)の挙動を説明できる
  • パイプライン(|)を用いて複数のコマンドを連結し、ストリームデータを加工・抽出できる
  • teexargs を活用し、画面表示とファイル保存の両立や引数への展開を柔軟に制御できる
  • 主要なテキストフィルタ(cat, head, tail, cut, tr, sort, uniq, wc)を目的に応じて組み合わせてデータ集計を行える
  • 基本正規表現(BRE)と拡張正規表現(ERE)の構文差を理解し、grep コマンドで意図通りのパターン検索ができる
  • LinuC 101試験の記述式問題(コマ問)で頻出するリダイレクト構文やオプションを正確に入力できる

検証環境情報

  • ディストリビューション:AlmaLinux 9.8 (Olive Jaguar)
  • カーネルバージョン:Linux 5.14.0-570.el9.x86_64
  • シェル環境:GNU bash バージョン 5.1.8(1)-release
  • コアユーティリティ:GNU coreutils 8.32, grep (GNU grep) 3.6
  • 検証ホスト:linuc-node01 (192.168.2.138)
目次
  1. 1. 標準入出力(ストリーム)とリダイレクトの仕組み
    1. 1.1 3つの標準ストリームとファイルディスクリプタ(0: stdin, 1: stdout, 2: stderr)
    2. 1.2 出力リダイレクト(>, >>, 2>, 2>>)
    3. 1.3 標準出力と標準エラー出力の統合(2>&1, &>)
    4. 1.4 入力リダイレクトとヒアドキュメント(<, <<, <<<)
  2. 2. パイプラインとテキスト連携ツール(|, tee, xargs)
    1. 2.1 パイプ(|)によるコマンド間データ連携
    2. 2.2 teeコマンドによる画面表示とファイル保存の両立
    3. 2.3 xargsコマンドによる標準入力の引数変換と高速一括処理
  3. 3. 代表的なテキストストリームフィルタコマンド
    1. 3.1 ファイルの閲覧と連結・行番号付与(cat, tac, nl, head, tail)
    2. 3.2 データの抽出と結合(cut, paste, tr)
    3. 3.3 ソートと重複除外(sort, uniq)
    4. 3.4 行数・単語数カウントとハッシュ値計算(wc, md5sum, sha256sum)
    5. 3.5 高度なテキスト変換(sed, awkの基礎)
  4. 4. 正規表現によるテキスト検索とgrepコマンド
    1. 4.1 基本正規表現(BRE)と拡張正規表現(ERE)の構文差
    2. 4.2 主要メタ文字の一覧と実例(^, $, ., *, +, ?, [], |)
    3. 4.3 grepコマンドの必須オプション(-E, -v, -i, -c, -n, -r, -l)
  5. 5. 実機ハンズオン演習:AlmaLinux 9でログ解析パイプラインを構築
    1. 5.1 検証用アクセスログデータの準備
    2. 5.2 演習1:リダイレクトによるエラーログ分離とファイル統合
    3. 5.3 演習2:grepと正規表現による特定ステータスコードの抽出
    4. 5.4 演習3:sortとuniqを組み合わせたアクセス頻度集計パイプライン
  6. 6. LinuC 101試験対策まとめとコマ問頻出チェック
    1. 6.1 コマ問(記述式)頻出キーワード一覧表
    2. 6.2 Ping-t演習へのブリッジ(対象分野と推奨学習順)
  7. 7. まとめと次回予告

1. 標準入出力(ストリーム)とリダイレクトの仕組み

1.1 3つの標準ストリームとファイルディスクリプタ(0: stdin, 1: stdout, 2: stderr)

Linux環境でプログラム(プロセス)が起動されると、カーネルはそのプロセスに対して自動的に3つのデータ入出力経路を開設します。これらを「標準ストリーム」と呼び、OS内部では「ファイルディスクリプタ(File Descriptor: FD)」と呼ばれる0以上の整数値で識別・管理されます。

FD番号 ストリーム名称 標準の接続先 役割・データの流れ
0 標準入力(stdin) キーボード プログラムが外部からデータを受け取るための標準的な入力ストリーム
1 標準出力(stdout) 端末ディスプレイ(画面) プログラムが正常に処理した実行結果を外部に出力するためのストリーム
2 標準エラー出力(stderr) 端末ディスプレイ(画面) プログラムの実行中に発生したエラーメッセージや警告を出力するためのストリーム

通常、標準出力(FD 1)と標準エラー出力(FD 2)はいずれも同じ「端末画面」に向けられているため、画面上では混ざって表示されます。しかし、OSの内部では完全に別々の通信路として扱われています。この通信先をファイルや他のプログラムへと「切り替える」操作が「リダイレクト」および「パイプ」です。

Linux 標準入出力とリダイレクト・パイプライン
図1:Linux標準入出力(FD 0, 1, 2)とリダイレクト・パイプラインの基本構造

1.2 出力リダイレクト(>, >>, 2>, 2>>)

コマンドの出力先を端末画面からファイルへ切り替えるための基本演算子が「出力リダイレクト」です。上書きと追記、および対象とするファイルディスクリプタの番号によって書式が分かれます。

演算子 対象ストリーム 動作内容 具体例
>(または 1> 標準出力(FD 1) 指定ファイルに上書きして保存(ファイルが存在しない場合は新規作成) ls -l > file_list.txt
>>(または 1>> 標準出力(FD 1) 指定ファイルの末尾に追記して保存 date >> execution.log
2> 標準エラー出力(FD 2) エラーメッセージのみを指定ファイルに上書きして保存 find / -name "*.conf" 2> error.log
2>> 標準エラー出力(FD 2) エラーメッセージのみを指定ファイルの末尾に追記 backup.sh 2>> error.log

エラーメッセージの破棄(/dev/null)

一般ユーザーで find / などを実行すると、権限のないディレクトリに対して大量の Permission denied(許可がありません)が出力され、結果が見づらくなります。不要なエラーメッセージを破棄したい場合は、書き込まれたデータをすべて消去する特殊デバイス /dev/null へリダイレクトします。

[user01@linuc-node01 ~]$ find /etc -name "*.conf" 2> /dev/null

1.3 標準出力と標準エラー出力の統合(2>&1, &>)

実務のバッチ処理やCronジョブでは、正常メッセージとエラーメッセージの両方を同一のログファイルにタイムライン順で記録したいケースが多発します。このときに使用するのが「ファイルディスクリプタの複製(統合)」です。

記法 名称・書式 説明
> file 2>&1 古典的標準統合構文(POSIX準拠) まず標準出力(FD 1)の向け先を file に設定し、その上で標準エラー出力(FD 2)の向け先を「現在のFD 1の向け先」と同じ場所に複製する
&> file(または >& file Bash短縮統合構文 標準出力と標準エラー出力の両方をまとめて file へ上書き保存する(Bash拡張機能)
&>> file(または >> file 2>&1 統合追記構文 標準出力と標準エラー出力の両方をまとめて file の末尾へ追記保存する

2>&1 の記述順序に関する厳格ルール

リダイレクトは「左から右へ」順に評価されます。そのため、command > file 2>&1 と記述する必要があります。もし command 2>&1 > file と記述してしまうと、「FD 2 の向け先が当時の FD 1(端末画面)に向けられた後、FD 1 のみが file に向けられる」ことになり、エラーメッセージはファイルに記録されず画面に出力されてしまいます。記述順序には十分注意してください。

1.4 入力リダイレクトとヒアドキュメント(<, <<, <<<)

キーボードからではなく、ファイルやスクリプト内のテキストをコマンドの標準入力(FD 0)として渡す構文です。

演算子 名称 動作内容と使用例
<(または 0< 入力リダイレクト 指定したファイルの内容を標準入力としてコマンドに流し込む
例: wc -l < access.log
<< [終了文字] ヒアドキュメント(Here Document) 指定した「終了文字(EOF等)」が現れるまでの複数行テキストを標準入力として渡す
シェルスクリプト内での設定ファイル生成などに多用
<<< [文字列] ヒアストリング(Here String) 指定した単一文字列を標準入力として渡す(Bash拡張)
例: grep "test" <<< "$MY_VAR"

2. パイプラインとテキスト連携ツール(|, tee, xargs)

2.1 パイプ(|)によるコマンド間データ連携

「パイプ(パイプライン記号: |)」は、左側のコマンドの標準出力(FD 1)を、右側のコマンドの標準入力(FD 0)に直接接続するカーネル機能です。中間ファイルを作成することなく、複数の単機能コマンドを数珠つなぎにして高度なデータ加工を実現します。

[user01@linuc-node01 ~]$ cat /etc/passwd | cut -d: -f1 | sort | head -n 5
adm
bin
chrony
daemon
dbus

パイプで渡されるのは「標準出力」のみであり、「標準エラー出力」はパイプを通過せず画面にそのまま出力される点に留意してください。エラーも含めてパイプに流したい場合は command 2>&1 | next_command またはBash拡張の command |& next_command を使用します。

2.2 teeコマンドによる画面表示とファイル保存の両立

パイプライン処理の途中で、「処理結果を画面で監視しつつ、同時にファイルにも保存したい」という要求に応えるコマンドが tee(T字管)です。標準入力から受け取ったデータを、標準出力にそのまま流しながら、指定されたファイルにも同時に書き込みます。

コマンド書式 主要オプション 動作内容
tee [ファイル名] なし(デフォルト) 標準入力を画面に出力しつつ、指定ファイルへ上書き保存
tee -a [ファイル名] -a--append 標準入力を画面に出力しつつ、指定ファイルへ追記保存

sudo と tee の組み合わせ技

一般ユーザーが sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf を実行すると、リダイレクト > を実行するシェル自体が一般ユーザー権限であるため Permission denied となります。これを回避するために echo "nameserver 8.8.8.8" | sudo tee -a /etc/resolv.conf > /dev/null のように sudo tee を用いるテクニックは実務の定番です。

2.3 xargsコマンドによる標準入力の引数変換と高速一括処理

標準入力から受け取った文字列(改行や空白で区切られたデータ)を、指定したコマンドの「引数(パラメータ)」に変換して実行するツールが xargs です。

パイプラインでコマンドを繋ぐ際、右側のコマンドが「標準入力を受け付けず、引数のみを受け付けるコマンド(例: rm, kill, ls, cp)」である場合、単純にパイプを繋いでも動作しません。xargs はこの橋渡しを行います。

オプション 機能説明 具体例
-n [数値] 1回のコマンド実行に渡す引数の最大数を指定 cat list.txt | xargs -n 2 echo
-I [置換文字列] 引数を挿入する場所を明示的にプレースホルダで指定 cat files.txt | xargs -I {} cp {} /backup/
-0(ゼロ) 区切り文字として空白や改行ではなく「ヌル文字(\0)」を使用 find . -name "*.log" -print0 | xargs -0 rm

3. 代表的なテキストストリームフィルタコマンド

LinuC 101試験で問われる主要なテキスト処理フィルタコマンドの機能と代表オプションを整理します。

3.1 ファイルの閲覧と連結・行番号付与(cat, tac, nl, head, tail)

コマンド 基本機能 主要オプション・特徴
cat [ファイル] ファイル内容の順方向出力・複数ファイルの連結 -n: 全行に行番号を付与
-b: 空白行以外の行に行番号を付与
-s: 連続する空行を1行に集約
tac [ファイル] ファイルを行単位で逆順(最終行から先頭行)に出力 cat のスペルを逆にしたコマンド
nl [ファイル] 行番号を付与して出力 デフォルトで空行には番号を振らない(cat -b と類似)
head [ファイル] ファイルの先頭部分を出力(デフォルト10行) -n [行数]: 出力する行数を指定(例: head -n 20
-c [バイト数]: バイト数を指定
tail [ファイル] ファイルの末尾部分を出力(デフォルト10行) -n [行数]: 末尾からの行数を指定
-f: ファイルの追記をリアルタイム監視(ログ監視の定番)

3.2 データの抽出と結合(cut, paste, tr)

コマンド 基本機能 主要オプション・書式例
cut 各行から指定したフィールドや文字位置を切り出す -d [区切り文字]: デリミタの指定(デフォルトはタブ)
-f [フィールド番号]: 抽出する列番号(例: cut -d: -f1,3 /etc/passwd
-c [文字範囲]: 文字位置で抽出(例: cut -c 1-10
paste 複数のファイルを行単位で水平に結合する -d [区切り文字]: 結合時の区切り文字を指定(デフォルトはタブ)
-s: 単一ファイル内の連続行を1行に連結
tr 標準入力の文字を置換・削除する(ファイル名は引数に取らない) tr 'a-z' 'A-Z': 小文字を大文字に置換
-d [文字]: 指定文字を削除(例: tr -d '\r' でCRコード削除)
-s [文字]: 連続する文字を1文字に集約(squeeze)

3.3 ソートと重複除外(sort, uniq)

コマンド 基本機能 主要オプション・連携の鉄則
sort 行単位でテキストを並べ替える -n: 文字列ではなく「数値」としてソート(1, 2, 10 の順)
-r: 逆順(降順)ソート
-k [列番号]: ソートキーとする列を指定
-t [区切り文字]: 列の区切り文字を指定
-u: 重複行を1行にまとめて出力(ソート+重複除外)
uniq 隣接する重複行を1行にまとめる -c: 重複していた行数(出現回数)を行頭に表示
-d: 重複している行のみを出力
-u: 一度しか出現しない固有の行のみを出力

uniq の前提条件:必ず事前に sort を通す

uniq コマンドは「連続して並んでいる重複行」しか認識できません。ファイル内の離れた場所にある重複行は除外できないため、必ず sort | uniq のようにパイプでソートした後に uniq を実行するのが絶対原則です。

3.4 行数・単語数カウントとハッシュ値計算(wc, md5sum, sha256sum)

コマンド 機能 主要オプション / 出力内容
wc [ファイル] テキストの行数・単語数・バイト数を計測 -l: 行数(改行の個数)のみ出力(頻出)
-w: 単語数を出力
-c: バイト数を出力
-m: 文字数を出力
md5sum [ファイル] ファイルのMD5ハッシュ値を計算・検証 128ビット(32桁の16進数)のハッシュ値を出力。-c で整合性チェック
sha256sum [ファイル] ファイルのSHA-256ハッシュ値を計算・検証 256ビット(64桁の16進数)のハッシュ値を出力。改ざん検知の標準

3.5 高度なテキスト変換(sed, awkの基礎)

LinuCレベル1では、ストリームエディタ sed およびテキスト処理言語 awk の基礎構文が出題されます。

コマンド 役割・代表的な処理構文 説明
sed 's/old/new/g' file ストリームエディタ(非対話的置換) ファイル内の oldnew に置換して標準出力に出力する(-e で複数処理、-i で元ファイル直接更新)
awk '{print $1, $3}' file 空白区切りデータの特定列抽出・加工 デフォルトで空白(スペース・タブ)区切りの1列目と3列目を抽出して表示する(-F: でデリミタ変更)

4. 正規表現によるテキスト検索とgrepコマンド

4.1 基本正規表現(BRE)と拡張正規表現(ERE)の構文差

文字列のパターンを抽象的な記号で記述する構文を「正規表現(Regular Expression)」と呼びます。Linuxのテキスト処理ツールには、歴史的な理由から2つの規格が存在します。

規格名称 対応コマンド 特徴・メタ文字の解釈ルール
基本正規表現
(BRE: Basic Regular Expression)
標準の grep, sed, ed ^, $, ., *, [] はそのままメタ文字として動作
+, ?, |, (), {} を機能させるにはバックスラッシュ(\+, \? 等)が必要
拡張正規表現
(ERE: Extended Regular Expression)
grep -E(または egrep), awk ・すべてのメタ文字(+, ?, |, (), {})がエスケープなしで直感的に動作する
Linux 正規表現とgrep検索パターン体系
図2:基本正規表現(BRE)と拡張正規表現(ERE)の対比およびgrep主要オプション

4.2 主要メタ文字の一覧と実例(^, $, ., *, +, ?, [], |)

記号 規格 意味・機能 実例とマッチする文字列
^ BRE / ERE 行の先頭(行頭)にマッチするアンカー ^root(行頭にある root)
$ BRE / ERE 行の末尾(行末)にマッチするアンカー bash$(行末にある bash)
^$ BRE / ERE 行頭の直後に行末が来る(空行にマッチ) grep -v "^$" file で空行を除外
. BRE / ERE 改行を除く任意の1文字にマッチ c.t(cat, cot, c1t にマッチ、ct には不一致)
* BRE / ERE 直前の文字の0回以上の繰り返し ab*c(ac, abc, abbc, abbbc にマッチ)
.* BRE / ERE 任意の長さの文字列(0文字以上) ^#.*(# で始まる行全体)
[] BRE / ERE 括弧内のいずれか1文字(文字クラス) [0-9](数字1文字), [a-zA-Z](英字1文字)
[^] BRE / ERE 括弧内に含まれない任意の1文字(否定) [^0-9](数字以外の文字)
+ ERE(または \+ 直前の文字の1回以上の繰り返し go+l(gol, gool にマッチ、gl には不一致)
? ERE(または \? 直前の文字が0回または1回存在 https?(http または https にマッチ)
| ERE(または \| 左右いずれかのパターンにマッチ(OR条件) apple|orange
() ERE(または \(\) パターンをグループ化 (error|warn):
{n,m} ERE(または \{n,m\} 直前文字の出現回数を指定(n回以上m回以下) [0-9]{3}(3桁の数字)

4.3 grepコマンドの必須オプション(-E, -v, -i, -c, -n, -r, -l)

ファイル内から指定したパターンに一致する行を抽出する grep コマンドの重要オプションを以下に整理します。

オプション 機能説明 具体例
-E 拡張正規表現(ERE)を有効にする(egrep と同等) grep -E "(404|500)" access.log
-F 正規表現を無効化し、固定文字列として高速検索(fgrep と同等) grep -F "192.168.1.1" access.log
-v 指定したパターンに一致しない行を出力(検索の反転) grep -v "^#" /etc/login.defs(コメント行を除外)
-i 大文字と小文字を区別せずに検索(ignore case) grep -i "error" /var/log/messages
-c 一致した行の内容ではなく、一致行の件数(カウント)のみ出力 grep -c "Failed" /var/log/secure
-n 一致した行の先頭にファイル内行番号を付与して出力 grep -n "root" /etc/passwd
-l(小文字エル) 一致した行ではなく、パターンを含むファイル名のみを出力 grep -l "DEBUG" /var/log/*
-r / -R 指定ディレクトリ配下を再帰的に検索 grep -r "LISTEN" /etc/systemd/

5. 実機ハンズオン演習:AlmaLinux 9でログ解析パイプラインを構築

5.1 検証用アクセスログデータの準備

実務のWebサーバー運用を模倣し、AlmaLinux 9上でアクセスログデータを作成して解析パイプラインを構築します。

[user01@linuc-node01 ~]$ mkdir -p /tmp/stream_lab && cd /tmp/stream_lab
[user01@linuc-node01 stream_lab]$ cat << "EOF" > access.log
192.168.1.10 - - [08/Sep/2026:10:00:01] "GET /index.html HTTP/1.1" 200 1024
192.168.1.20 - - [08/Sep/2026:10:00:02] "POST /api/login HTTP/1.1" 401 256
192.168.1.10 - - [08/Sep/2026:10:00:03] "GET /app.js HTTP/1.1" 200 4096
192.168.1.30 - - [08/Sep/2026:10:00:04] "GET /secret HTTP/1.1" 403 128
192.168.1.10 - - [08/Sep/2026:10:00:05] "GET /index.html HTTP/1.1" 200 1024
192.168.1.20 - - [08/Sep/2026:10:00:06] "GET /api/user HTTP/1.1" 500 512
EOF

5.2 演習1:リダイレクトによるエラーログ分離とファイル統合

標準出力と標準エラー出力を分離して保存し、さらに統合する実証を行います。

  1. 存在ファイルと不在ファイルを同時に指定して実行
    [user01@linuc-node01 stream_lab]$ ls access.log non_exist.txt > stdout.log 2> stderr.log || true
  2. 分離結果の確認
    [user01@linuc-node01 stream_lab]$ cat stdout.log
    access.log
    
    [user01@linuc-node01 stream_lab]$ cat stderr.log
    ls: 'non_exist.txt' にアクセスできません: そのようなファイルやディレクトリはありません
  3. 2>&1 による統合保存の確認
    [user01@linuc-node01 stream_lab]$ ls access.log non_exist.txt > combined.log 2>&1 || true
    [user01@linuc-node01 stream_lab]$ cat combined.log
    ls: 'non_exist.txt' にアクセスできません: そのようなファイルやディレクトリはありません
    access.log

5.3 演習2:grepと正規表現による特定ステータスコードの抽出

アクセスログから、HTTPステータスコードが4xx(クライアントエラー)または5xx(サーバーエラー)である行を拡張正規表現で抽出します。

  1. 4xxまたは5xxのエラー行を抽出
    [user01@linuc-node01 stream_lab]$ grep -E " (4[0-9]{2}|5[0-9]{2}) " access.log
    192.168.1.20 - - [08/Sep/2026:10:00:02] "POST /api/login HTTP/1.1" 401 256
    192.168.1.30 - - [08/Sep/2026:10:00:04] "GET /secret HTTP/1.1" 403 128
    192.168.1.20 - - [08/Sep/2026:10:00:06] "GET /api/user HTTP/1.1" 500 512
  2. 正常系(200 OK)のみを除外(-v)してカウント(-c)
    [user01@linuc-node01 stream_lab]$ grep -v " 200 " access.log | wc -l
    3

5.4 演習3:sortとuniqを組み合わせたアクセス頻度集計パイプライン

アクセスログからアクセス元IPアドレスを取り出し、アクセス頻度順(降順)に並べ替えて画面表示しつつファイルへ保存します。

[user01@linuc-node01 stream_lab]$ cut -d" " -f1 access.log | sort | uniq -c | sort -nr | tee ip_ranking.txt
      3 192.168.1.10
      2 192.168.1.20
      1 192.168.1.30

[user01@linuc-node01 stream_lab]$ cat ip_ranking.txt
      3 192.168.1.10
      2 192.168.1.20
      1 192.168.1.30

演習完了後は、作業用ディレクトリ /tmp/stream_labrm -rf /tmp/stream_lab で削除します。

6. LinuC 101試験対策まとめとコマ問頻出チェック

6.1 コマ問(記述式)頻出キーワード一覧表

出題区分 コマンド / 演算子 出題の論点・記述ポイント
標準出力上書き > 1つの山括弧(不等号記号)
標準出力追記 >> 2つの山括弧
標準エラー出力保存 2> FD番号2と山括弧の間に空白を含めない
出力統合 2>&1(または &> アンパサンド(&)の位置と記述順序
ヒアドキュメント << EOF 2つの左山括弧
パイプライン | バーティカルバー記号
同時保存・分岐 tee -a 追記の -a オプション
引数変換 xargs 標準入力をコマンド引数に変換するコマンド名
列切り出し cut -d: -f1 デリミタ -d とフィールド -f
文字置換 tr 'a-z' 'A-Z' 引数にファイル名を取らない点
数値ソート sort -n -r 数値順 -n と逆順 -r
重複行集計 uniq -c 出現件数をカウントする -c(事前sort必須)
行数カウント wc -l 改行数をカウントする小文字エル -l
拡張正規表現 grep -E(または egrep 大文字の -E オプション
検索反転 grep -v 一致しない行を出力する -v
行頭 / 行末アンカー ^ / $ キャレット記号とドル記号

6.2 Ping-t演習へのブリッジ(対象分野と推奨学習順)

  1. 「主題1.03 GNUとUnixのコマンド(1.03.3 ストリーム、パイプ、リダイレクトの使用)」の未出題問題を演習し、リダイレクト記号とファイルディスクリプタの規則を定着させる
  2. 「主題1.03 GNUとUnixのコマンド(1.03.2 フィルタを使ったテキストストリームの処理)」の未出題問題を演習し、各フィルタコマンドのオプション(cut, sort, uniq, wc 等)を網羅する
  3. 「主題1.03 GNUとUnixのコマンド(1.03.4 正規表現を使用したテキストファイルの検索)」の問題を演習し、BREとEREのメタ文字の違いを整理する
  4. Ping-tの「コマ問道場」を活用し、2>&1, tee -a, xargs, grep -E, sort -nr などの構文を手入力して合格水準に仕上げる

確認演習問題 1

コマンド app_server を実行した際、標準出力と標準エラー出力の両方をまとめて、既存のファイル service.log の末尾に追記したい。実行すべき適切なリダイレクト構文を記述しなさい(POSIX準拠の古典構文とする)。

解答と解説を見る

正解: app_server >> service.log 2>&1

解説: 標準出力の追記は >> service.log です。標準エラー出力を標準出力に統合するには末尾に 2>&1 を付与します。Bash環境では &>> service.log も利用可能です。

確認演習問題 2

テキストファイル config.txt の中から、先頭がコメント記号 # で始まっている行以外の行をすべて画面に表示したい。実行すべき適切な grep コマンドをオプションを含めて記述しなさい。

解答と解説を見る

正解: grep -v "^#" config.txt

解説: 行頭にマッチする正規表現は ^(キャレット)です。したがって # で始まる行は ^# と表現します。この条件に「一致しない行」を抽出するためには反転オプション -v を指定します。

7. まとめと次回予告

本記事では、Linuxの標準入出力とファイルディスクリプタ(0, 1, 2)、各種リダイレクト構文(>, >>, 2>, 2>&1)、パイプライン(|)、連携ツール(tee, xargs)、主要テキストフィルタ(cut, sort, uniq, wc)、および正規表現(BRE/ERE)を用いた grep 検索の基礎から応用までを網羅しました。

テキストストリーム処理は、LinuC 101試験で最も配点が高い分野であり、シェルスクリプト作成やトラブルシューティングにおいて日常的に使用する基礎体力となります。

次回は、Linuxのセキュリティの根幹である「ファイルの所有者・パーミッションとリンク管理【主題1.02 (1.02.1, 1.02.3)】」を学習します。chmodchown による権限管理、特殊権限(SUID, SGID, スティッキービット)、ファイル作成マスク umask、およびハードリンクとシンボリックリンク(iノード)の仕組みを解説します。

前の記事
次の記事