LinuC 1.06 シェルおよびスクリプト 問題

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

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

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

この分野の小分野

  • 1.0⁠6.1 シェル環境のカスタマイズ(4問)
  • 1.0⁠6.2 シェルスクリプト(6問)

1.06 シェルおよびスクリプトの問題

10 問

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

  1. 1.06.1 シェル環境のカスタマイズ

    問 1bash をログインシェルとして起動したとき、ホームにある ~/.bash_profile、~/.bash_login、~/.profile の 3 つはどう読まれますか。

  2. 問 2~/.bashrc に新しい alias を書き足した。ログインし直さずに、いま使っているシェルにすぐ反映させたい。適切なものはどれですか。

  3. 問 3カレントディレクトリにある deploy.sh に実行権を付けたが、deploy.sh とだけ打つと command not found になった。理由として最も適切なものはどれですか。

  4. 問 4mkdir /backup && cp data.db /backup/ を実行したときの動きとして正しいものはどれですか。

  5. 1.06.2 シェルスクリプト

    問 5スクリプトの 1 行目に書く #!/bin/bash の役割として正しいものはどれですか。

  6. 問 6スクリプト add.sh を ./add.sh 10 20 30 と動かした。スクリプトの中で $# が表す値はどれですか。

  7. 問 7シェルスクリプトで、直前に動かしたコマンドが成功したか失敗したかを調べるために使う特殊な変数はどれですか。

  8. 問 8次のスクリプトを ./s.sh a b c と動かしたとき、表示されるものはどれですか。中身は shift の 1 行と echo $1 の 1 行です。

  9. 問 9for f in *.log; do gzip "$f"; done の動きとして正しいものはどれですか。

  10. 問 10スクリプトがどこで止まるかを調べたい。各行を、変数を展開したあとの形で表示しながら実行させるものはどれですか。

10 問中 0 問に答えました

解説の一覧

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

1.0⁠6.1 シェル環境のカスタマイズ

問1bash をログインシェルとして起動したとき、ホームにある ~/.bash_profile、~/.bash_login、~/.profile の 3 つはどう読まれますか。

正解はこの順に探し、最初に見つかった 1 つだけを読むことです。ログインの bash は /etc/profile を読んだあと、~/.bash_profile、~/.bash_login、~/.profile の順に探し、最初に読めたファイルだけを読みます。そのため ~/.bash_profile があると ~/.profile は読まれず、~/.bashrc はログインでない対話のシェルが読むファイルなので、ほかの読み方はどれも誤りです。

問2~/.bashrc に新しい alias を書き足した。ログインし直さずに、いま使っているシェルにすぐ反映させたい。適切なものはどれですか。

正解は source ~/.bashrc です。source (同じ働きの . でもよい) は、ファイルを今のシェルの中で読んで実行するので、定義した alias が今のシェルに残ります。bash ~/.bashrc は子のシェルで読むので終わると定義が消え、chmod +x は実行権を付けるだけ、export はファイルを読み込むものではありません。

問3カレントディレクトリにある deploy.sh に実行権を付けたが、deploy.sh とだけ打つと command not found になった。理由として最も適切なものはどれですか。

正解はシェルは PATH にあるディレクトリからコマンドを探し、カレントディレクトリはふつう PATH に入っていないからです。パスを含まない名前で打ったコマンドは、PATH に並ぶディレクトリから探されるので、カレントのものは ./deploy.sh と書いて動かします。ログインし直しは要らず、拡張子の決まりも無く、#!/bin/bash はむしろ実行に使うシェルを示す正しい書き方です。

問4mkdir /backup && cp data.db /backup/ を実行したときの動きとして正しいものはどれですか。

正解は mkdir が成功したときだけ cp が動くことです。&& は左のコマンドの終了ステータスが 0 (成功) のときだけ右を動かします。失敗したときだけ右を動かすのは ||、結果に関わらず続けて動かすのは ;、裏で同時に動かすのは & の書き方です。

1.0⁠6.2 シェルスクリプト

問5スクリプトの 1 行目に書く #!/bin/bash の役割として正しいものはどれですか。

正解は実行権を付けて ./script.sh で動かしたとき、どのプログラムで中身を動かすかを示すことです。1 行目の #! (シバン) は、実行されたファイルを、続けて書いたプログラム (ここでは /bin/bash) に渡して動かすよう示します。bash sh.sh のように名前を渡して動かすときはただのコメントとして読み飛ばされますが、働きが無いわけではなく、実行権は chmod で付けるもので、版を固定する働きもありません。

問6スクリプト add.sh を ./add.sh 1⁠0 2⁠0 3⁠0 と動かした。スクリプトの中で $# が表す値はどれですか。

正解は 3 です。$# は渡された引数の数で、スクリプトの名前は数えないので 3 です。スクリプトの名前は $0 に入り、引数の合計を計算する働きはありません。

問7シェルスクリプトで、直前に動かしたコマンドが成功したか失敗したかを調べるために使う特殊な変数はどれですか。

正解は $? です。$? には直前のコマンドの終了ステータスが入り、0 なら成功、0 以外なら失敗を表します。$$ は今のシェル自身の PID、$! は最後に裏で動かしたコマンドの PID、$0 はスクリプトの名前です。

問8次のスクリプトを ./s.sh a b c と動かしたとき、表示されるものはどれですか。中身は shift の 1 行と echo $1 の 1 行です。

正解は b です。shift は位置パラメータを 1 つずつ前へずらし、もとの $1 (a) を捨てて $2 だった b を $1 にします。そのため echo $1 は b を表示し、a は shift の前の値、c は 2 回ずらしたときの値、a b c は $@ を表示したときの形です。

問9for f in *.log; do gzip "$f"; done の動きとして正しいものはどれですか。

正解はカレントディレクトリの .log で終わるファイルを 1 つずつ gzip で圧縮することです。*.log はシェルがカレントディレクトリの当たるファイル名の並びに置き換え、for がそれを 1 つずつ f に入れて gzip を動かします。gzip はファイルごとに .gz を作るのでまとめた 1 つにはならず、ワイルドカードはサブディレクトリの中までは広がりません。

問10スクリプトがどこで止まるかを調べたい。各行を、変数を展開したあとの形で表示しながら実行させるものはどれですか。

正解は bash -x script.sh です。bash -x は実行する各コマンドを、変数を展開したあとの形で頭に + を付けて表示します。-n は文法を確かめるだけで実行せず、-v は読み込んだ行を展開する前の形のまま表示し、-e はコマンドが失敗した時点でスクリプトを止める指定です。

ほかの分野

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

    1.01 インストールと仮想マシン・コンテナ

    1.0⁠1.1 Linuxのインストール、起動、接続、切断と停止、1.0⁠1.2 仮想マシン・コンテナの概念と利用、1.0⁠1.3 ブートプロセスとsystemd、1.0⁠1.4 プロセスの生成、監視、終了、1.0⁠1.5 デスクトップ環境の利用

    10問解く
  • 1.02 ファイル・ディレクトリの操作と管理

    1.0⁠2.1 ファイルの所有者とパーミッション、1.0⁠2.2 基本的なファイル管理の実行、1.0⁠2.3 ハードリンクとシンボリックリンク、1.0⁠2.4 ファイルの配置と検索

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

    1.0⁠3.1 コマンドラインの操作、1.0⁠3.2 フィルタを使ったテキストストリームの処理、1.0⁠3.3 ストリーム、パイプ、リダイレクトの使用、1.0⁠3.4 正規表現を使用したテキストファイルの検索、1.0⁠3.5 エディタを使った基本的なファイル編集の実行

    10問解く
  • 1.04 リポジトリとパッケージ管理

    1.0⁠4.1 apt コマンドによるパッケージ管理、1.0⁠4.2 Debianパッケージ管理、1.0⁠4.3 yumコマンドによるパッケージ管理、1.0⁠4.4 RPMパッケージ管理

    10問解く
  • 1.05 ハードウェア、ディスク、ファイルシステム

    1.0⁠5.1 ハードウェアの基礎知識と設定、1.0⁠5.2 ハードディスクのレイアウトとパーティション、1.0⁠5.3 ファイルシステムの作成と管理、マウント

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

    1.0⁠7.1 インターネットプロトコルの基礎、1.0⁠7.2 基本的なネットワーク構成、1.0⁠7.3 基本的なネットワークの問題解決、1.0⁠7.4 クライアント側のDNS設定

    10問解く
  • 1.08 システム管理

    1.0⁠8.1 アカウント管理、1.0⁠8.2 ジョブスケジューリング、1.0⁠8.3 ローカライゼーションと国際化

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

    1.0⁠9.1 システム時刻の管理、1.0⁠9.2 システムのログ、1.0⁠9.3 メール配送エージェント(MTA)の基本

    10問解く
  • 1.10 セキュリティと 1.11 オープンソースの文化

    1.1⁠0.1 セキュリティ管理業務の実施、1.1⁠0.2 ホストのセキュリティ設定、1.1⁠0.3 暗号化によるデータの保護、1.1⁠0.4 クラウドセキュリティの基礎、1.1⁠1.1 オープンソースの概念とライセンス、1.1⁠1.2 オープンソースのコミュニティとエコシステム

    10問解く

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

続きはゆめさくで

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