Instiq
第3章 · GNUとUnixのコマンド·v1.0.0·更新 2026/7/6·読了目安 約12分

変更要約: 初版(主題1.03・副主題1.03.1〜1.03.5に対応)

3.1コマンドラインの操作

この節の要点

bash での対話操作の基本を学びます。シェル変数環境変数の違いと操作(setunsetexportenvecho)、引用符(シングル・ダブル・バッククォート)の使い分け、コマンド履歴history.bash_history)、絶対パス相対パスと PATH 外コマンドの実行、man によるマニュアル参照を押さえます。

Linux 管理者の主戦場はシェル(標準は bash)です。コマンドを打つだけでなく、変数・引用符・履歴・パス解決というシェルの動作原理を理解しているかが、この後のすべての主題(スクリプト・テキスト処理)の土台になります。

3.1.1シェル変数と環境変数

  • シェル変数NAME=value で定義(= の前後にスペースを入れない)。定義したシェル内でだけ有効。参照は $NAME・表示は echo
  • 環境変数export したシェル変数。子プロセスに引き継がれるexport LANG=ja_JP.UTF-8)。一覧は env(環境変数のみ)/set(シェル変数も含む全部)。削除は unset
  • 引用符の使い分け=シングルクォート '…':すべて文字どおり(変数展開しない)/ダブルクォート "…"$変数 は展開する/バッククォート \…\(=$(…)):コマンド置換=コマンドの出力に置き換わる。

3.1.2履歴・パス解決・マニュアル

  • コマンド履歴history で一覧、!番号 で再実行、!! は直前のコマンド。履歴はログアウト時に .bash_history へ保存される。
  • コマンドは PATH 上から探索される。カレントディレクトリは PATH に含まれないのが原則なので、その場のスクリプトは ./script.sh相対パス)か 絶対パス で実行する。現在地の確認は pwd
  • .(ドット)や source現在のシェルでスクリプトを読み込む(新しいプロセスを作らない)=設定ファイルの反映に使う。
  • man=マニュアル参照(man ls)。man -k キーワード(=apropos)でキーワードから関連コマンドを探せる
試験ポイント

「子プロセスに引き継ぐには export(シェル変数のままでは引き継がれない)」「シングルクォートは展開しない・ダブルは展開する」「./ が要る理由=カレントは PATH に無い」「!! =直前を再実行」 が定番です。VAR = value(スペース入り)がエラーになる点も選択肢でよく突かれます。

「なぜ export が要るのか」を仕組みで理解しましょう。シェルからコマンドを実行すると、シェルは子プロセスを作ってそこでコマンドを動かします。子に渡されるのは環境変数だけなので、LANG=C と定義しただけのシェル変数は子のプログラムからは見えません。export LANG して初めて「環境」の一部になります。引用符は実務ミスの温床で、たとえば echo '$HOME' は文字どおり $HOME を表示し、echo "$HOME"/home/user01 を表示します。FILES=$(ls *.log) のようなコマンド置換は、スクリプトでコマンドの結果を変数に取り込む基本形です(旧記法のバッククォートも同義)。履歴は history | grep ssh のように過去の複雑なコマンドを発掘する使い方が実務の定番で、!番号 で呼び出せます。マニュアルは「名前がわかる→ man 名前」「名前がわからない→ man -k 機能語」と入口を使い分けます。

書き方意味例の結果
'$HOME'文字どおり(展開なし)$HOME と表示
"$HOME"変数を展開/home/user01 と表示
`date` / $(date)コマンド置換(出力に置換)日時文字列に置き換わる
export VAR環境変数化(子へ継承)子プロセスから参照可能
注意

ひっかけ: 「シェル変数を定義すれば子プロセスからも参照できる」は誤りです。子に引き継がれるのは export した環境変数だけ。また「env はシェル変数も含めて表示する」も誤り=env は環境変数のみで、シェル変数まで見るのは set です。VAR = value のようにスペースを挟む記法はエラーになります。

シェル変数と環境変数・引用符3種・履歴とパス解決を整理した図。
export の意味=子への継承

3.1.3この節のまとめ

  • シェル変数→export→環境変数(子へ継承)。一覧は set(全部)/env(環境のみ)・削除は unset
  • '…'=展開なし/"…"=$展開/$(…)=コマンド置換。カレントは PATH 外=./ で実行・履歴は history/!!・調べ物は man(-k)

進捗の記録にはログインが必要です。

理解度チェック

(軽い確認用)

Q1. シェルで定義した変数 MYAPP_ENV を、そのシェルから起動する子プロセス(アプリ)からも参照できるようにしたい。適切なコマンドは?

Q2. echo '$USER' を実行したときの出力として正しいのはどれ?(ログインユーザーは user01)

Q3. カレントディレクトリに置いた script.sh を実行しようとしたら「コマンドが見つかりません」と言われた。実行する正しい方法は?

理解度を確認第3章「GNUとUnixのコマンド」の問題を解く