前言
前幾天學習了 Linux 的絕對路徑、相對路徑,以及特殊符號 .。
今天則要認識另一個在 Linux 中非常常見的符號 ~
如果經常使用 Linux 或閱讀技術文件,幾乎一定會看到它。
這次的 Challenge 也利用 ~ 的特性設計了一個有趣的題目,讓我更理解 Linux 如何處理路徑。
每個 Linux 使用者都有自己的 Home Directory(家目錄)。
在 pwn.college 中,我們使用的帳號是 hacker
因此 Home Directory 為 /home/hacker
大部分個人檔案、設定檔以及練習內容,通常都會存放在這個目錄中。
~?在 Linux 中 ~ 代表目前使用者的 Home Directory。
因此 ~ = /home/hacker
例如 echo ~ 輸出 /home/hacker
表示 Bash 自動將 ~ 展開成完整路徑。
~ 的路徑展開(Path Expansion)假設目前位於 /
輸入 cd ~
系統會自動轉換成 cd /home/hacker
因此可以快速回到自己的家目錄。
同樣地 cd ~/documents 實際上等同於 cd /home/hacker/documents
這種機制稱為Path Expansion(路徑展開)。
這次 Challenge 要求
/challenge/run YOUR_PATH/home/hacker/flag~ 因為 ~ = /home/hacker~ 只有一個字元。題目要求將 Flag 複製到指定位置。
在Challenge有要求3.路徑在展開前必須不超過三個字元
我們可以先輸入ls來看有什麼檔案名稱可能可以符合要求
會看到檔案f~/f 長度剛好 ~ / f 剛好共 3 個字元
而且 Bash 會展開成 /home/hacker/f
符合
所以輸入 /challenge/run ~/f
執行後如果成功,Challenge 會把 Flag 寫到 /home/hacker/f 然後把內容讀出來給你看。
注意如果這邊是執行 /challenge/run ~
系統會先將 ~
展開成 /home/hacker
而 /home/hacker 是一個目錄(directory),不是檔案。
題目說的是 /challenge/run will write a copy of the flag to any file you specify
意思是要提供一個檔案路徑,不是資料夾路徑。
今天學到了 Linux 中非常實用的符號 ~
過去看到許多 Linux 指令都會使用 cd ~ 或 vim ~/.bashrc 但並不清楚背後的原理。
透過這次 Challenge,會了解到 ~ 並不是特殊目錄,而是 Bash 提供的一種縮寫方式。
在執行指令之前,Shell 會先將它展開成實際的 Home Directory 路徑。
這種設計讓使用者不需要每次都輸入完整的 /home/hacker 大幅提升操作效率。