Files
linux-odyssey/quests/execute/zh-TW/execute.md
T

3.5 KiB

執行檔案

Outline

  1. 什麼是可執行檔
  2. 使用 which 指令查看執行檔的位置
  3. 如何執行可執行檔

在我們先前的課程裡,已經使用了許多不同的指令,像是 ls, cat, cp, mv, rm 等。 這些指令,其實都是一個可執行檔,在你打指令的時候被作業系統執行。 所以大部分的指令,我們其實都能找到它在檔案系統裡的原始位置。 要查看一個指令它的檔案位置,可以使用 which 指令。 輸入 which [指令名稱] 就能夠查看指令的檔案位置了。

使用 which ls 來查看 ls 的路徑


你看到終端機顯示出 /bin/ls 這個路徑,它其實就是 ls 指令它檔案存在的位置。 /bin 是一個系統資料夾,裡面會儲存許多系統內建的程式,像是 cat, cp 等指令也都被存在這裡。

使用 which cat 查看 cat 的路徑


我們要執行一個可執行檔時,只要直接輸入它的路徑就可以執行它。 我們來試看看使用執行檔的路徑來執行指令。

輸入 /bin/ls 來查看當前的資料夾


你會看到它列出了我們資料夾內的檔案,你可以自己比較看看,跟單純打 ls 的結果會一模一樣。 它一樣可以使用參數。我們來用 cat 試試看。

輸入 /bin/cat hello.txt 來顯示 hello.txt 的內容


你會看到了 hello.txt 的內容,效果跟單純用 cat 一模一樣。 事實上,這是必然的,因為 cat 的檔案位置就是 /bin/cat,我們執行了同一個程式,當然會有同樣的結果。 其實指令,就是由 一個執行檔 + 參數 所構成。 我們之所以不用打 /bin/ls,而是只要打 ls 就能執行,是因為有 PATH 這個環境變數,幫我們預設好了終端機要去哪些資料夾找檔案。 但因為這超出了本次課程的範圍,關於 PATH 以及環境變數的議題,我們會在未來的課程再討論。

我們也可以執行不是內建的指令,像是現在資料夾中的 dog 檔案。

使用 cat dog 來查看 dog 的內容


你會看到這是一個用 echo 和 cat 所組成的簡單程式。 詳細的內容不用了解沒關係,功能是和 cat 一樣,用來印出檔案內容的程式。 但是這支程式,在沒有給要印出的檔案時,不會停留在輸入狀態。

當我們要執行一個檔案時,就是用指定路徑的方式。 那因為 dog 位在家目錄底下,所以牠的絕對路徑就是 /home/commander/dog,我們也可以用簡寫 ~/dog。

輸入 ~/dog 來執行 dog 檔案


你看到了終端機輸出這隻傲嬌的狗。 除了使用絕對路徑,很多時候,我們會處在跟程式相同的資料夾,這時使用相對路徑會更為便利。 但跟平常列出檔案時不一樣,我們為了區別它不是內建的指令,需要加上 ./ 在檔名前面。 . 在路徑中,代表的就是當前的資料夾。 那我們再試試看使用相對路徑,並讓牠接收一個檔案作為參數。

輸入 ./dog hello.txt 來印出 hello.txt 的內容


你看到這隻狗在講了幾句話後也印出了 hello.txt 的內容了。 這個範例,其實就是一個簡單的自訂指令。 我們可以把一大串指令,寫在一個檔案裡讓它自動執行,幫我們處理一些複雜或是重複性的工作。 我們在使用別人寫的程式時,也常會用到這個技巧。

最後留一個小挑戰給你,請試著移動到 commands 資料夾後,再使用相對路徑執行裡面的 lucky 檔案。