前言
前一天學習了 Linux 中的特殊符號 .
它代表目前所在的目錄(Current Directory)。
當時使用 ./challenge/run 完成 Challenge。
原本以為 . 只是相對路徑的一種寫法,但今天的 Challenge 讓我發現,./ 在 Linux 中其實還有另一個非常重要的用途。
這次 Challenge 要求先移動到 /challenge
此時如果直接輸入 run
很多人可能會認為 Linux 會自動執行 /challenge/run 但實際上並不會。
系統會回傳 bash: run: command not found
run?一開始會覺得很奇怪。
因為目前目錄 /challenge
裡面有一個檔案run
照理說run應該就能執行才對。
但 Linux 的設計並不是這樣
當輸入 run 時,Linux 不會優先搜尋目前目錄
而是會到系統預設的程式搜尋路徑中尋找。
如果找不到,就會出現 command not found 的錯誤訊息。
這其實是一種安全機制
假設 Linux 每次都會自動搜尋目前目錄。
那麼如果有人在某個資料夾放了一個名稱叫做 ls 的惡意程式。
當使用者輸入 ls 時,就有可能執行到惡意程式,而不是系統原本的 /bin/ls
因此 Linux 預設不會自動執行目前目錄中的程式。
必須明確指定我就是要執行目前目錄裡的檔案。
假設目前位於 /challenge 要執行其中的 run
必須使用 ./run 這裡的 .
代表 Current Directory 因此 ./run
實際意思就是目前目錄中的 run
首先切換到題目要求的位置 /challenge
接著如果直接輸入 run
系統無法找到程式。
因此改用 ./run
成功執行 Challenge 並取得 Flag。
透過這次操作,我第一次理解為什麼很多 Linux 教學在執行程式時都會寫 ./program
原來這並不是固定格式,而是在明確告訴系統執行目前目錄中的程式。
今天最大的收穫是理解了 ./ 的真正用途。
之前看到許多 Linux 指令教學都會使用 ./run 或 ./script.sh
但可能一直不清楚為什麼要多打一個 ./。
透過這次 Challenge,我才知道 Linux 預設不會自動搜尋目前目錄中的程式,而是需要使用者明確指定。
這樣的設計雖然看起來麻煩一點,但其實是為了提升系統安全性。
也讓我開始理解 Linux 的許多設計其實都和安全有關,而不只是單純的操作習慣。