Linuxとコマンドラインの基礎

カレントディレクトリにある実行の権限が付いたスクリプト run.sh を、「run.sh」と入力して実行しようとすると「command not found」になり、「./run.sh」と入力すると実行できた。理由として、正しいものはどれか。

  1. Arun.sh に実行の権限が付いておらず、先頭に ./ を付けたときだけは権限がなくても実行できるから
  2. Bスラッシュを含まないコマンド名は環境変数 PATH のディレクトリだけで探され、カレントディレクトリは一般に含まれないから
  3. Crun.sh の1行目の #!/bin/bash(シバン)は、先頭に ./ を付けて実行したときにしか読まれないから
答えと解説を見る

正解:B. スラッシュを含まないコマンド名は環境変数 PATH のディレクトリだけで探され、カレントディレクトリは一般に含まれないから

シェルは、スラッシュを含まないコマンド名を受け取ると、環境変数 PATH にコロンで区切って並んだディレクトリ(/usr/local/bin:/usr/bin など)を順に探して実行します。カレントディレクトリは、別の場所に置かれた同じ名前の悪意あるプログラムを誤って実行しないように、一般に PATH に入れません。./run.sh のようにスラッシュを含むパスを書くと、PATH を探さずにそのファイルを直接実行します。1行目の #!/bin/bash(シバン)は、どちらの方法で起動しても、そのスクリプトを実行するインタプリタを指定します。

  • A. 実行の権限がなければ、./run.sh も「Permission denied」で実行できません。
  • B. 正しい。カレントディレクトリは PATH に含まれていないので、./ で場所を示す必要があります。
  • C. シバンは、PATH から見つけて起動した場合も ./ を付けて起動した場合もカーネルが読み、指定されたインタプリタでスクリプトを実行します。
この分野を解く 分野ページへ

Linuxとコマンドラインの基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

Linuxとコマンドラインの基礎のほかの問題

  1. 上のコマンドを順に実行したときの、2つの bash -c の出力の組み合わせとして、正しいものはどれか。
  2. Linuxのパッケージ管理システム(Debian系の apt、Red Hat系の dnf など)の主な働きとして、正しいものはどれか。
  3. systemd を使うLinuxで、サービス license.service に対する「systemctl start license.service」と「systemctl enable license.service」の違いとして、正しいものはどれか。
  4. cron に「30 2 * * 1 /home/alice/backup.sh」と登録した。backup.sh が実行されるタイミングとして、正しいものはどれか。
  5. Linuxのサーバで「ディスクの空きが少ない」という警告が出た。ファイルシステムごとの使用量と空き容量を調べるコマンドと、ディレクトリの中のファイルが使っている容量を合計して調べるコマンドの組み合わせとして、正しいものはどれか。