Linux與命令列基礎

目前目錄中有附加執行權限的腳本 run.sh,輸入「run.sh」執行時出現「command not found」,輸入「./run.sh」則能執行。理由是下列何者?

  1. Arun.sh 沒有執行權限,只有在前面加上 ./ 時才能在沒有權限的情況下執行
  2. B不含斜線的指令名稱只會在環境變數 PATH 的目錄中尋找,而目前目錄一般不包含在其中
  3. Crun.sh 第1行的 #!/bin/bash(shebang)只有在前面加上 ./ 執行時才會被讀取
查看答案與解析

正確答案:B. 不含斜線的指令名稱只會在環境變數 PATH 的目錄中尋找,而目前目錄一般不包含在其中

shell 收到不含斜線的指令名稱時,會依序在環境變數 PATH 中以冒號分隔列出的目錄(/usr/local/bin:/usr/bin 等)中尋找並執行。為了避免誤執行放在其他地方的同名惡意程式,一般不會把目前目錄放進 PATH。像 ./run.sh 這樣寫出含有斜線的路徑時,就不會搜尋 PATH,而是直接執行該檔案。第1行的 #!/bin/bash(shebang)不論以哪種方式啟動,都會指定執行該腳本的直譯器。

  • A. 若沒有執行權限,./run.sh 也會出現「Permission denied」而無法執行。
  • B. 正確。目前目錄不在 PATH 中,所以需要用 ./ 指出位置。
  • C. 不論是經由 PATH 找到或加上 ./ 啟動,shebang 都會由核心讀取,並以指定的直譯器執行腳本。
練習這個領域 前往領域頁面

Linux與命令列基礎的其他題目

  1. 依序執行上面的指令時,兩個 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 伺服器出現「磁碟空間不足」的警告。查詢各檔案系統的使用量與剩餘容量的指令,以及加總查詢目錄中檔案所用容量的指令,下列哪一個組合正確?