コース一覧
LinuC レベル1 102試験対策(LPIC-1対応)
シェル環境

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

LinuC レベル1/LPIC-1の102範囲を、シェル、ユーザーとセキュリティ、ネットワーク、システム管理の実機演習と章末問題で固めます。Linuxを安全に運用するための知識とコマンド操作を体系的に身につける25レッスンのコースです。

1
102 シェルとスクリプト
01. シェル環境18分
02. testと条件式18分
03. スクリプトの制御18分
04. cronとat15分
05. systemdタイマー18分
06. 過去問 シェル15分
2
102 ユーザーとセキュリティ
01. passwdとshadow18分
02. ユーザー管理コマンド18分
03. suとsudo18分
04. 特殊パーミッション18分
05. ホストのセキュリティ18分
06. SSHとGPG18分
07. 過去問 ユーザーとセキュリティ15分
3
102 ネットワーク
01. TCP/IPとウェルノウンポート18分
02. アドレス設定18分
03. ルーティング18分
04. 名前解決の設定18分
05. 疎通トラブルシュート18分
06. 過去問 ネットワーク15分
4
102 システム管理
01. 時刻とNTP15分
02. ロケールと文字コード18分
03. ログ管理18分
04. サービス管理の試験形式18分
05. メールと印刷のきほん15分
06. 過去問 システム管理15分

シェル環境

設定を書いたのに効かない、という詰まり方の大半は、書いた場所が違うだけです。bash は起動のしかたによって読むファイルを変えます。102 試験で最も点になりやすい範囲なので、暗記ではなく仕組みで押さえます。

export しない変数は、子プロセスから見えない

シェルの中だけで有効なのがシェル変数、子プロセスにも引き継がれるのが環境変数です。変数を作った時点ではシェル変数で、export を通して初めて環境変数になります。

ターミナル

MYVAR=hello          # シェル変数。この bash の中だけ
export MYVAR         # 環境変数に昇格。子プロセスに引き継がれる
export MYVAR2=world  # 代入と export を同時に書ける

違いは子の bash を起こせば分かります。bash -c 'echo $MYVAR' は子プロセスなので、export していない変数は空で返ります。

コマンド見えるもの
env環境変数だけ。printenv も同じで、名前を1つ指定できる
setシェル変数と環境変数、シェル関数まで全部
unset VAR変数を消す。シェル変数でも環境変数でも消える
export -n VAR環境変数からシェル変数に戻す。値は残る

set は広く env は狭い、と覚えます。出題される変数名は HOME PATH PWD SHELL、ロケールの LANG、既定のエディタを決める EDITOR、履歴の HISTSIZE と HISTFILE です。

PATH の追記で $PATH を書き忘れると ls すら消える

PATH は、コマンド名だけを打ったときにシェルが実行ファイルを探すディレクトリの並びです。左から順に探し、最初に見つかったものを実行します。追加するときは既存の値を残します。

ターミナル

export PATH="$PATH:/opt/mytool/bin"    # 末尾に足す。既存を優先
export PATH="/opt/mytool/bin:$PATH"    # 先頭に足す。自分のものを優先

export PATH=/opt/mytool/bin と書くと既存のパスが丸ごと消え、ls すら見つからなくなります。引っかけの定番です。カレントディレクトリの . を含めるのも、同名の偽物を踏むので避けます。

ログインシェルと非ログインシェルで読むファイルが違う

起動のしかた読むファイル (上から順)
ログインシェル/etc/profile → /etc/profile.d/*.sh → ~/.bash_profile か ~/.bash_login か ~/.profile のいずれか1つ
非ログインの対話シェル/etc/bash.bashrc (Debian 系) → ~/.bashrc

ログインシェルは、コンソールからログインしたときや su - bash --login で起きるシェルです。非ログインの対話シェルは、端末で新しいタブを開いたときや、ログイン後にただ bash と打ったときのシェルです。

ホーム側の3つのうち、読まれるのは最初に見つかった1つだけです。~/.bash_profile があれば ~/.profile は読まれません。ここも頻出です。多くのディストリビューションは ~/.bash_profile の中から ~/.bashrc を読ませており、こうするとログインでも非ログインでも同じ設定が効きます。終了時には、ログインシェルに限って ~/.bash_logout が読まれます。

source と bash file は効果が違う

alias はコマンドに別名を付ける機能で、定義は現在のシェル限りです。常用するなら ~/.bashrc に書きます。

ターミナル

alias la='ls -A'      # 定義。alias だけなら一覧、unalias で解除
\ls                   # 先頭に \ を付けると alias を無視して本体を呼ぶ

書き換えた設定ファイルをそのシェルにすぐ反映させるには source を使います。ドット1つも source と同じものです。

ターミナル

source ~/.bashrc
. ~/.bashrc

bash ~/.bashrc と書くと子プロセスで実行されるため、変数も alias も現在のシェルには残りません。

試験で狙われるところ

export しない変数は子プロセスに見えません。PATH の追記で $PATH を書き忘れると既存のパスが消えます。ホームの3つの設定ファイルは1つしか読まれません。~/.bashrc はログインシェルでは直接には読まれず、~/.bash_profile 経由で読ませます。

ヒント

追記は >> です。> だと ~/.bashrc の中身がまるごと消えてしまいます

変数の値を文字列に混ぜるには "PATH $PATH" のようにダブルクォートで囲みます。シングルクォートだと展開されません

書き換えた ~/.bashrc を今のシェルに効かせるのは source ~/.bashrc です。bash ~/.bashrc では子プロセスで動くので残りません

  • 1. echo $HOME と echo $PATH で今の値を確かめる
  • 2. ~/.bashrc の末尾に export LINUC_LAB=/root/lab を追記する
  • 3. 同じく ~/.bashrc の末尾に alias ll='ls -alF' を追記する
  • 4. source ~/.bashrc で現在のシェルに読み込ませる
  • 5. echo $LINUC_LAB で変数が効いていることを確かめる
  • 6. PATH と HOME の実際の値を /root/env-report.txt に書き出す

Linux は使うときに起動します(初回は約102MB通信します)

5 項目で採点します