LPIC-⁠1 105 シェルとシェルスクリプト 問題

ゆめさくが作った練習問題です。本試験の問題ではありません。

1⁠0⁠5 シェルとシェルスクリプトの問題を1⁠0問、小分野ごとにまとめました。選ぶと、その場で正誤と解説が出ます。

ログインなしで解けます。答えはこのブラウザの中だけに残り、どこにも送りません。

この分野の小分野

  • 1⁠0⁠5.1 シェル環境をカスタマイズして使う(5問)
  • 1⁠0⁠5.2 簡単なスクリプトを作り、手直しする(5問)

105 シェルとシェルスクリプトの問題

10 問

選ぶと、すぐに正誤と解説が出ます。選んだ答えは変えられません。

  1. 105.1 シェル環境をカスタマイズして使う

    問 1環境変数だけでなく、子に渡さないシェル変数とシェルの関数も含めて、今のシェルに定義されたものを全部表示したい。引数を付けずに打つコマンドはどれですか。

  2. 問 2ls -lh を、lh という短い名前で打てるようにしたい (いま使っているシェルの中だけ)。正しい書き方はどれですか。

  3. 問 3サーバーのすべての利用者のログインシェルに共通の環境変数を設定したい。書く場所として適切なものはどれですか。

  4. 問 4bash の関数の定義として、正しい書き方はどれですか。

  5. 問 5今のシェルから、環境変数 HTTP_PROXY を取り除きたい。適切なコマンドはどれですか。

  6. 105.2 簡単なスクリプトを作り、手直しする

    問 6スクリプトの中の if [ -f /etc/app.conf ] が真になるのはどんなときですか。

  7. 問 7スクリプトが受け取った引数を、そのままの区切りで別のコマンドへ渡したい。引数に "my file.txt" のように空白を含むものがあっても分かれないようにするとき、使う書き方はどれですか。

  8. 問 8スクリプトの途中で利用者に名前を打ち込ませ、変数 name に入れたい。使うコマンドはどれですか。

  9. 問 9for i in $(seq 1 3); do echo $i; done を実行したときの出力はどれですか。

  10. 問 10case "$1" in start) echo A ;; stop) echo B ;; *) echo C ;; esac というスクリプトに restart を渡したとき、表示されるものはどれですか。

10 問中 0 問に答えました

解説の一覧

解いたあとに読み返せるよう、全問の解説を並べています。問いを開くと解説が出ます。

1⁠0⁠5.1 シェル環境をカスタマイズして使う

問1環境変数だけでなく、子に渡さないシェル変数とシェルの関数も含めて、今のシェルに定義されたものを全部表示したい。引数を付けずに打つコマンドはどれですか。

正解は set です。引数の無い set は、シェル変数と環境変数をまとめ、定義された関数も含めて表示します。env と printenv は子プロセスに渡る環境変数だけを出し、export -n は名前を受け取って環境変数からシェル変数に戻す指定です。

問2ls -lh を、lh という短い名前で打てるようにしたい (いま使っているシェルの中だけ)。正しい書き方はどれですか。

正解は alias lh='ls -lh' です。alias は 名前=中身 の形で、= の前後に空白を入れずに書きます。= を使わずに並べると lh、ls、-lh がそれぞれ定義を調べる名前として扱われて見つからないというエラーになり、export は環境変数を作るだけで名前をコマンドにはせず、unalias は定義を消す側です。

問3サーバーのすべての利用者のログインシェルに共通の環境変数を設定したい。書く場所として適切なものはどれですか。

正解は /etc/profile (または /etc/profile.d/ の下のファイル) です。/etc/profile はログインの bash や sh がまず読む全員向けのファイルで、多くの配布では /etc/profile.d/ の下の .sh も読みます。~/.bash_profile はその利用者だけ、~/.bash_logout はログアウトのとき読まれ、/etc/skel/.bashrc は新しく作る利用者に写される雛形で、今いる利用者には効きません。

問4bash の関数の定義として、正しい書き方はどれですか。

正解は greet() { echo "hello $1"; } です。bash の関数は 名前() { コマンド; } の形で書き (function 名前 { ... } でもよい)、中で $1 などで引数を受け取ります。= を使う形は bash が文法の誤りとして読み込みを止め、def は Python の書き方で、丸かっこに中身を書くと関数の本体として読まれません。

問5今のシェルから、環境変数 HTTP_PROXY を取り除きたい。適切なコマンドはどれですか。

正解は unset HTTP_PROXY です。unset は変数 (環境変数を含む) を定義から取り除きます。HTTP_PROXY= は空の値を入れるだけで変数は残り、set -u は定義されていない変数を使ったらエラーにする指定 (後ろの名前は位置パラメータになる)、env HTTP_PROXY は HTTP_PROXY という名前のコマンドを動かそうとします。

1⁠0⁠5.2 簡単なスクリプトを作り、手直しする

問6スクリプトの中の if [ -f /etc/app.conf ] が真になるのはどんなときですか。

正解は /etc/app.conf が通常のファイルとしてあるときです。test (または [ ]) の -f は、その名前が通常のファイルとしてあれば真を返します。ディレクトリかどうかは -d で調べ、無いときに真にするには ! -f と書き、空かどうかは -s (大きさが 0 より大きければ真) で調べます。

問7スクリプトが受け取った引数を、そのままの区切りで別のコマンドへ渡したい。引数に "my file.txt" のように空白を含むものがあっても分かれないようにするとき、使う書き方はどれですか。

正解は "$@" です。二重引用符で囲んだ "$@" は、受け取った引数を 1 つずつ別の語のまま展開するので、空白を含む引数も分かれません。囲まない $* は空白で分かれ直してしまい、"$*" は全部を 1 つの語にまとめ、$# は引数の数です。

問8スクリプトの途中で利用者に名前を打ち込ませ、変数 name に入れたい。使うコマンドはどれですか。

正解は read name です。read は標準入力から 1 行を読み、指定した変数に入れます (-p で問いの文を出せる)。echo は文字を出すだけ、export は変数を子に渡すようにするもの、test は条件を調べるもので、入力は受け取りません。

問9for i in $(seq 1 3); do echo $i; done を実行したときの出力はどれですか。

正解は 1、2、3 が 1 行ずつ並ぶことです。$(seq 1 3) はコマンドの置換で、seq が出した 1 から 3 までの数に置き換わり、for がそれを 1 つずつ i に入れて echo します。seq の 1 3 は始めと終わりで 2 も含み、echo は毎回改行するので、1 行にまとまったり $i の字のまま出たりはしません。

問10case "$1" in start) echo A ;; stop) echo B ;; *) echo C ;; esac というスクリプトに restart を渡したとき、表示されるものはどれですか。

正解は C です。case は上から順にパターンと比べ、最初に当たったものだけを実行します。restart は start とも stop とも丸ごとは一致しないので、何にでも当たる * の C が表示され、* があるので何も出ないことはありません。

ほかの分野

  • 101 システムアーキテクチャ

    1⁠0⁠1.1 ハードウェアの設定を確かめて変える、1⁠0⁠1.2 システムを起動する、1⁠0⁠1.3 ランレベルとブートターゲットの切り替え、停止と再起動

    10問解く
  • LinuC レベル1 101試験対策(LPIC-1対応)

    102 インストールとパッケージ管理

    1⁠0⁠2.1 ハードディスクのレイアウトを設計する、1⁠0⁠2.2 ブートマネージャーを導入する、1⁠0⁠2.3 共有ライブラリを管理する、1⁠0⁠2.4 Debian のパッケージ管理を使う、1⁠0⁠2.5 RPM と YUM のパッケージ管理を使う、1⁠0⁠2.6 仮想化のゲストとしての Linux

    10問解く
  • 103 GNUとUnixのコマンド

    1⁠0⁠3.1 コマンドラインで作業する、1⁠0⁠3.2 フィルタでテキストの流れを処理する、1⁠0⁠3.3 基本のファイル管理をする、1⁠0⁠3.4 ストリーム、パイプ、リダイレクトを使う、1⁠0⁠3.5 プロセスを作り、見張り、終わらせる、1⁠0⁠3.6 プロセスの実行の優先度を変える、1⁠0⁠3.7 正規表現でテキストファイルを探す、1⁠0⁠3.8 基本のファイル編集をする

    10問解く
  • 104 デバイス、ファイルシステム、FHS

    1⁠0⁠4.1 パーティションとファイルシステムを作る、1⁠0⁠4.2 ファイルシステムの整合性を保つ、1⁠0⁠4.3 ファイルシステムのマウントとアンマウント、1⁠0⁠4.5 ファイルのパーミッションと所有者を管理する、1⁠0⁠4.6 ハードリンクとシンボリックリンクを作って変える、1⁠0⁠4.7 システムのファイルを探し、正しい場所に置く

    10問解く
  • 106 ユーザーインターフェイスとデスクトップ

    1⁠0⁠6.1 X1⁠1 を導入して設定する、1⁠0⁠6.2 グラフィカルなデスクトップ、1⁠0⁠6.3 アクセシビリティ

    10問解く
  • LinuC レベル1 102試験対策(LPIC-1対応)

    107 管理の仕事

    1⁠0⁠7.1 利用者とグループのアカウントと関係するファイルを管理する、1⁠0⁠7.2 ジョブを予約してシステム管理の仕事を自動にする、1⁠0⁠7.3 ローカライゼーションと国際化

    10問解く
  • 108 重要なシステムサービス

    1⁠0⁠8.1 システムの時刻を保つ、1⁠0⁠8.2 システムのログ、1⁠0⁠8.3 メール転送エージェント (MTA) の基本、1⁠0⁠8.4 プリンターと印刷を管理する

    10問解く
  • 109 ネットワークの基礎

    1⁠0⁠9.1 インターネットプロトコルの基礎、1⁠0⁠9.2 永続するネットワークの設定、1⁠0⁠9.3 基本のネットワークのトラブルシューティング、1⁠0⁠9.4 クライアント側の DNS を設定する

    10問解く
  • 110 セキュリティ

    1⁠1⁠0.1 セキュリティの管理の仕事をする、1⁠1⁠0.2 ホストを守る設定、1⁠1⁠0.3 暗号でデータを守る

    10問解く

LPIC-1の頁に、1⁠0分野の入口と試験の案内があります。

続きはゆめさくで

試験の知識を仕事につなげる一歩を、ここにまとめています。