前言
前幾天的 Challenge 中,我們大多使用絕對路徑(Absolute Path)來執行程式。
例如 /challenge/run
這種寫法會從 Linux 的根目錄 / 開始尋找目標,因此無論目前位於哪個目錄,都可以正確找到程式。
今天的 Challenge 則開始介紹另一個重要概念 Relative Path(相對路徑)
透過相對路徑,我們可以根據目前所在的位置來表示檔案或程式的位置,而不一定要從根目錄開始。
Relative Path(相對路徑)是指不以 / 開頭的路徑。
例如 challenge/run 就是一個相對路徑。
因為它沒有從根目錄開始表示位置。
前幾天經常使用 /challenge/run
這是一個 Absolute Path(絕對路徑)。
因為
/
└── challenge
└── run
路徑是從根目錄開始表示。
而 challenge/run
則是一個 Relative Path(相對路徑)。
它會根據目前所在的位置決定實際要存取的檔案。
相對路徑的運作與 Current Working Directory(目前工作目錄)有密切關係。
例如假設目前位於 / 那麼 challenge/run
實際上等同於/challenge/run
因為系統會從目前所在的位置開始尋找。
但如果目前位於/home
則challenge/run
會被理解成/home/challenge/run
這個位置通常不存在,因此程式無法執行。
這次的 Challenge 要求先將目前工作目錄切換到根目錄
接者你會發現目錄從一開始的~變成了/
接著不要使用/challenge/run,記得/challenge/run是一個Absolute Path(絕對路徑)
而是使用相對路徑執行程式,由於上一步已經看到我們切換到目錄/,加上題目還給了一個提示
Your relative path starts with the letter c,因此可以推測目標程式位於challenge/run。
最後執行 challenge/run
成功完成 Challenge 並取得 Flag。
透過這次操作,可以明顯感受到相對路徑與目前工作目錄之間的關係。
如果每次都使用/challenge/run其實也能找到程式。
但在實際 Linux 環境中,許多操作都會依賴相對路徑。
例如documents/report.txt,images/logo.png,scripts/run.sh
這些都是常見的相對路徑寫法。
當目錄結構較複雜時,使用相對路徑往往會比完整絕對路徑更方便。
今天第一次接觸 Relative Path 的概念。
一開始看起來只是少打一個 /,但實際理解後才發現,這代表系統尋找檔案的方式完全不同。
Absolute Path 會從根目錄開始尋找,而 Relative Path 則會從目前工作目錄開始尋找。
因此在使用 Relative Path 時,知道自己目前位於哪個目錄就變得非常重要。
透過這次 Challenge,我也開始理解為什麼前幾天一直在學習 Current Working Directory 與 cd 指令,因為這些概念都是 Relative Path 的基礎。