iT邦幫忙

2026 iThome 鐵人賽

DAY 0
0
Security

從 Linux 到 Pwn:30 天學習資安攻防系列 第 8

Day 7|為什麼 run 找不到?認識 ./ 的真正用途

  • 分享至 

  • xImage
  •  

前言
前一天學習了 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 為什麼這樣設計?

這其實是一種安全機制
假設 Linux 每次都會自動搜尋目前目錄。
那麼如果有人在某個資料夾放了一個名稱叫做 ls 的惡意程式。
當使用者輸入 ls 時,就有可能執行到惡意程式,而不是系統原本的 /bin/ls
因此 Linux 預設不會自動執行目前目錄中的程式。
必須明確指定我就是要執行目前目錄裡的檔案。


四、如何執行目前目錄中的程式?

假設目前位於 /challenge 要執行其中的 run
必須使用 ./run 這裡的 .
代表 Current Directory 因此 ./run
實際意思就是目前目錄中的 run


五、實際操作

首先切換到題目要求的位置 /challenge
https://ithelp.ithome.com.tw/upload/images/20260922/20183180nSwKADfTea.png
接著如果直接輸入 run
https://ithelp.ithome.com.tw/upload/images/20260922/2018318004hAjHwBBA.png
系統無法找到程式。
因此改用 ./run
https://ithelp.ithome.com.tw/upload/images/20260922/20183180n2tDBxCufX.png
成功執行 Challenge 並取得 Flag。
透過這次操作,我第一次理解為什麼很多 Linux 教學在執行程式時都會寫 ./program
原來這並不是固定格式,而是在明確告訴系統執行目前目錄中的程式。


六、今天的心得

今天最大的收穫是理解了 ./ 的真正用途。
之前看到許多 Linux 指令教學都會使用 ./run./script.sh
但可能一直不清楚為什麼要多打一個 ./
透過這次 Challenge,我才知道 Linux 預設不會自動搜尋目前目錄中的程式,而是需要使用者明確指定。
這樣的設計雖然看起來麻煩一點,但其實是為了提升系統安全性。
也讓我開始理解 Linux 的許多設計其實都和安全有關,而不只是單純的操作習慣。


上一篇
Day 6|認識 .:Current Directory 與 Explicit Relative Path
系列文
從 Linux 到 Pwn:30 天學習資安攻防8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言