-- Views
April 21, 26
スライド概要
はじめまして、ALJ Education Plus 株式会社のyukikoと申します。 IT教育支援や、DX推進が可能です。 ◆ スキル LPIC レベル2 AI / Python Splunk BI(データ可視化・分析) ◆ その他 新卒・未経験の学生向けに、エンジニア転職を応援する資料を趣味で作成しています。 もしよろしければご活用ください。 ◆IT研修講師をお探しの方は [email protected] にお気軽にお問い合わせください。 ※ALJ Education Plus 株式会社を通して、ご支援させていただきます。 ◆Zenn https://zenn.dev/yukiko_sapporo/articles/46c13e9f98b110
LPIC-101 v5.0 | 小豆 本対 応 bash リダイレクト演算子 「> >> 2>&1 &>」は有効/「#> ~> @>」は無効 新卒・文系・未経験のための IT 研修 ファイルディスクリプタ(FD)の概念も一緒に押さえる うさうさラーメン店方式
PROBLEM 今日のお題 ― B問題セット 問6 bashで使用できる有効なリダイレクト演算子はどれですか。 1 >> 2 #> 3 2>&1 4 ~> 5 @> 複数選択(正解は2つ) LPIC-101 | bash リダイレクト演算子 2 / 10
① この用語 リダイレクトって、なに? 用語 リダイレクト Redirect / 出力先・入力元の付け替え コマンドの出力先や入力元を 変更する仕組み。 通常は画面に出る結果を ファイルに保存したり、 エラーも一緒にまとめたり。 矢印の向きで覚える: >=出力, <=入力。 LPIC-101 | bash リダイレクト演算子 うさうさラーメン店で例えると 普段: ラーメンはカウンターに出す 今日: 「テイクアウトの箱に詰めて!」 ↓ コマンド実行 > box.txt = 「画面(カウンター)」ではなく 「box.txt(箱)」に出力先を付け替え 出口を差し替えるのがリダイレクト 3 / 10
② 簡単に > >> < 2>&1 まずは基本の4つだけ覚える 出力を上書き list.txtを新規作成(既存は消える) 出力を追記 a.logの末尾に追加(既存保持) 入力をファイルから data.txtをsortに食べさせる エラーも出力先へ 標準出力と標準エラーを合流 ls > list.txt echo log >> a.log sort < data.txt cmd > out 2>&1 ★ 覚え方: 矢印「>」は出力の向き、重ねると「追記」、< は入力の向き LPIC-101 | bash リダイレクト演算子 4 / 10
ファイルディスクリプタ(FD)3兄弟 ③ 詳しく① コマンドには入口と出口が3つある。番号で呼び分けできる。 0 1 2 stdin stdout stderr 標準入力 標準出力 標準エラー キーボード / ファイル コマンドの結果 エラーメッセージ 2>&1 を解読してみる 2 (stderr) を > &1 (stdout と同じ場所) へリダイレクト & は「FD番号としての参照」を意味する。&1 = 「fd=1」、1 だけだと「1というファイル名」に書き込もうとする。 LPIC-101 | bash リダイレクト演算子 5 / 10
③ 詳しく② 有効な演算子チートシート & 見分け方 ○ bashで有効な主要演算子 > << 2>&1 標準出力を上書き >> ls > out.txt ヒアドキュメント <<< cat <<EOF ... EOF stderr を stdout と合流 &> cmd > out 2>&1 標準出力を追記 < echo x >> out.txt ヒアストリング 2> cat <<< "hello" 両方を同じ場所へ >| cmd &> all.log 標準入力をファイルから wc -l < a.txt 標準エラーを上書き cmd 2> err.log noclobber を無視して上書き cmd >| out.txt ✗ bashに存在しない無効な「それっぽい」演算子 #> ~> @> %> # はコメント記号 ~ はホームディレクトリ @ は bashで特別な意味なし % はジョブ指定子 LPIC-101 | bash リダイレクト演算子 6 / 10
③ 詳しく③ 実機ハンズオン(Ubuntu / RHEL 共通) bashの機能なので Ubuntu / RHEL / CentOS で同じ挙動。/bin/sh (dash) では &> や <<< は非対応な点だけ注意。 Terminal ― bash # ① 存在しないファイルでエラー $ ls /x /etc ls: '/x': No such file or dir /etc: passwd hosts ... # ② 出力だけファイルへ(エラーは画面) $ ls /x /etc > out.txt ls: '/x': No such file or dir # ③ 両方まとめてファイルへ $ ls /x /etc > out.txt 2>&1 (画面に何も出ず out.txt に両方) # ④ &> でも同じ結果 $ ls /x /etc &> out.txt 実務でやりがちなミス ✗ cmd > out 2> &1 → スペース不可: 2>&1 ✗ cmd 2>&1 > out → 順番注意: > out 2>&1 ✗ >> でファイル初期化 → >> は追記。初期化は > ✗ > file が突然消えた → 既存ファイルは上書き注意 LPIC-101 | bash リダイレクト演算子 7 / 10
APPLY 原理原則で5択を斬る # 演算子 判定 理由 1 >> ○ 有効 追記リダイレクト。ファイル末尾に追加する有効な演算子 2 #> × 無効 # はコメントの開始。演算子として扱われない 3 2>&1 ○ 有効 stderr(fd=2) を stdout(fd=1) と同じ場所へ。複合演算子として有効 4 ~> × 無効 ~ はホームディレクトリ展開。リダイレクト記号にならない 5 @> × 無効 @ は bash で特別な意味を持たない。ただの無効文字列 → 正解は 1番(>>)と 3番(2>&1)。 LPIC-101 | bash リダイレクト演算子 8 / 10
ANSWER 正解 ― 出力系と複合の代表 正解 ① 正解 ③ >> 2>&1 標準出力の追記(append) stderr を stdout にマージ ログファイルを消さずに育てる エラーも一緒にログに残す 無効な演算子を一瞬で見抜く 有効な記号はわずか3種類 それ以外の記号は全部ダミー > < & # ~ @ % ^ ! $ + 数字(FD番号)とパイプ | が > に付いていても無効 LPIC-101 | bash リダイレクト演算子 9 / 10
④ 原理原則・一言でまとめ リダイレクトは 「出入口を差し替える矢印」。使う記号は > < & だけ。 0 1 2 stdin 入力 stdout 出力 stderr エラー 「# ~ @ %」など変な記号が付いたら即ニセモノと判定。 面白きなき世を面白く ─ 石黒 友季子