使用者目錄概念、切換路徑(cd)與現在路徑(pwd)|AI 時代的 Linux 終端機 基礎邏輯
Linux 基礎指令與概念第一集:使用者目錄概念、切換路徑(cd)與現在路徑(pwd),用 Git Bash 在 Windows 上實際走一遍,再看為什麼要分家目錄、AI 拿到全部權限時會發生什麼事。
此文章也有影片介紹,可以搭配影片一起學習!
以下正式開始文章
這一系列要講什麼
你可能會想,現在指令都讓 AI 下了,我幹嘛還要懂終端機?
現在你幾乎不會自己去下這些指令,都是讓 AI 幫你做,可是 AI 是在你的電腦上做事。你還是要知道,它現在站在哪裡,以及它能動到哪裡。
比如說,AI 要幫你建立一個檔案,你得知道它準備把檔案放在哪個資料夾。那個地方是你自己的家,還是放著電腦重要檔案的位置,以及它有沒有權限寫進去,這些都跟它接下來能做什麼有關。
所以,這一系列要講的,就是讓你看得懂 AI 正在操作什麼的終端機基本指令和概念。我們先從 Windows 上也能用的 Linux 指令開始。
為什麼在 Windows 上走 Linux 這條路
我知道你會問,我明明用 Windows,為什麼要學 Linux?
因為你現在用 Windows,之後東西可能放在 Linux 主機上,也可能換到 Mac OS,或者在 Windows 裡面使用 Docker,進到裡面的 Linux 環境。
如果每換一個地方,都要重新理解自己站在哪裡、檔案放在哪裡,會很麻煩。所以,這裡先把作業系統分成兩邊來理解:一邊是 Windows,另一邊是 Linux 所屬的類 Unix 系統。
Mac OS、Linux、Ubuntu 都屬於類 Unix 系統。在 AWS 的 EC2 上使用 Linux 主機時,也是用這套概念操作。
接下來,我們會在 Windows 底下示範,走的卻是 Linux 這條路。兩邊的操作可以做某種程度的轉換,這裡要講的概念,大概有八成是共同的。
比如說,不管你是在自己的電腦上操作,還是把東西放到 Linux 主機上,都要知道自己現在在哪個資料夾、正在用哪一個使用者的權限。先理解這些,之後換地方操作,就比較容易接上。
用 AI 一定會碰到的兩個東西
那在 Windows 上,要從哪裡開始用這些指令,為什麼要裝 Git、用 Git Bash,不用命令提示字元?
因為 AI 時代,本來就該裝 Git。
Git 是版本管理,AI 會把東西改壞,用 AI 不用 Git,是你的問題。Git 的用法,我們之後另外一篇講。
先裝 Git,用 Git Bash
而 Git 的作者就是 Linux 核心的作者。在 Windows 上安裝 Windows 版的 Git,就會一起有 Git Bash,可以用 Linux 形式的指令操作。
裝好以後,打開 Git Bash,你就會看到終端機的畫面。接下來示範的指令,都在 Git Bash 裡面輸入。
那行字在講誰在哪裡
打開終端機,只有一行字,這到底在講什麼?
那一行字是在告訴你:誰、在哪台電腦上,以及現在站在哪裡。這幾件事搞懂了,後面所有的指令才有地方站。
Git Bash 一打開,你會看到像 pbuser@LAPTOP-5DJEG6FJ 這樣的字。pbuser 是使用者,@ 小老鼠就是「在」,後面接的是這台機器的名稱。
所以,它是在說,pbuser 這個使用者,在 LAPTOP-5DJEG6FJ 這台機器上。
一打開就在家目錄
接著來看,pbuser 現在站在這台機器的哪裡。先打 pwd 三個字,按 Enter,它會告訴你現在在哪裡。
pbuser@LAPTOP-5DJEG6FJ MINGW64 ~
$ pwd
/c/Users/pbuser
這裡印出的 /c/Users/pbuser,就是 pbuser 的家目錄。
再打 ls,它會列出你目前所在資料夾底下的內容。
pbuser@LAPTOP-5DJEG6FJ MINGW64 ~
$ ls
Desktop/ Downloads/ Pictures/ Public/
這裡列出的 Desktop/、Downloads/、Pictures/、Public/,就是家目錄底下的資料夾。
你會發現,自己還沒走到哪裡,就已經在一個資料夾裡了。Git Bash 一般打開的時候,你就已經站在自己的家目錄底下。
家目錄通常是一個跟你使用者名稱一樣的目錄,是你可以管理自己檔案的地方。
在 Git Bash 裡,這個路徑最前面的 /c 就是 C 槽。再來是 Users,放著各個使用者的家目錄,然後才是你自己的使用者目錄。
光看路徑,可能還是有點難想像。我們用 cd 走一遍就清楚了,cd 就是切換資料夾。
先走到 C 槽,再用 pwd 看看自己站在哪裡。
pbuser@LAPTOP-5DJEG6FJ MINGW64 ~
$ cd /c
pbuser@LAPTOP-5DJEG6FJ MINGW64 /c
$ pwd
/c
cd 沒有印出任何文字,接著提示字元裡的 ~ 就變成了 /c。再看 pwd 印出的 /c,就知道現在站在 C 槽。
接著走進 Users 這一層,再下 ls。我這台會看到好幾個名字,因為這台電腦裡有好幾個使用者。
pbuser@LAPTOP-5DJEG6FJ MINGW64 /c
$ cd Users
pbuser@LAPTOP-5DJEG6FJ MINGW64 /c/Users
$ ls
'All Users'@ cty22/ 'Default User'@ pbuser/
CodexSandboxOffline/ Default/ desktop.ini Public/
提示字元裡的位置變成了 /c/Users,列出的內容裡,也能看到我們要找的 pbuser/。
再走進 pbuser,就回到這個使用者的家了,再用 pwd 看一下。
pbuser@LAPTOP-5DJEG6FJ MINGW64 /c/Users
$ cd pbuser
pbuser@LAPTOP-5DJEG6FJ MINGW64 ~
$ pwd
/c/Users/pbuser
pwd 又印出 /c/Users/pbuser,提示字元裡的位置也從 /c/Users 變回了 ~。
回到家以後,提示字元就會顯示那個小蝌蚪 ~,它就是你的家。
假設你今天是銀行
看到這裡,你可能會想,自己的電腦只有自己在用,為什麼要分不同的家?
一般的電腦,就算有很多使用者,多半也還是你自己在使用。
可是,如果你今天做一個網站,就必須擔心外面的人連到你的電腦裡面,有些檔案不能給他看到。
比如說,你今天是銀行,人家不小心找到某一個使用者的帳號密碼,用 ssh 連進來了。這時候,當然不可能讓他看到所有的程式碼,要不然就成為社會新聞了。
網站會幫別人放檔案
除了看檔案,還有一件事情比較困難:網站會幫別人放檔案。
網站的本質是一支程式。如果這支程式要接受上傳的檔案,就需要有權限,把檔案放在它所在的那台電腦裡。
假設今天有一個人上傳圖片,設定了一些奇怪的引數,讓你原本存放檔案的路徑變了。
你本來是要放在公共這邊,大家都可以來看。但是他說,他要放在公共的前一個位置,再前一個位置。
結果,就可能一路放到根目錄底下,或者其他使用者的目錄裡面。等於他透過你的網站,把檔案放進別人家。
不曉得大家有沒有發生過一個慘劇:搬檔案的時候,不小心把檔案複製到某個資料夾裡,蓋掉了原本的檔案,心血結晶就全部消失了。原因只是名稱不小心設成一樣,比如 default,或者 untitled。
這件事放到伺服器上,也是同一個意思。
如果上傳的人有辦法自己選路徑,而網站程式又有權限寫進那個位置,他就可能蓋掉系統裡非常重要的檔案。你等於就是被 hack 了。
分好範圍,最慘只丟一塊
那要怎麼讓這件事情不要發生?
我們要讓覆蓋檔案這個動作,有權限上面的限制。
比方說,開兩個使用者,一個叫網管,一個叫超級使用者。超級使用者維持所有的秩序,網管就只維持網站程式。
分好以後,網站收到上傳的檔案,就只能放在網管這個帳號有權限控制的區塊。其他區塊,它沒有權限,就不能寫進去。
所以,把範圍分好,出問題的時候,最慘只丟掉它能控制的那一塊,避免一路影響到整台電腦。
我們用一般使用者的權限,直接試著建立檔案,就可以看到權限怎麼把動作擋下來。
pbuser@LAPTOP-5DJEG6FJ MINGW64 ~
$ touch /c/Windows/hack.txt
touch: cannot touch '/c/Windows/hack.txt': Permission denied
這裡出現 Permission denied,在 /c/Windows 裡建立 hack.txt 的動作被擋下來了。
pbuser@LAPTOP-5DJEG6FJ MINGW64 ~
$ touch "/c/Program Files/hack.txt"
touch: cannot touch '/c/Program Files/hack.txt': Permission denied
換到 /c/Program Files,結果也是 Permission denied,這個位置也不能寫進去。
touch 可以用來建立空檔案,前兩個位置被擋下來,出現 Permission denied,就是沒有權限。
接著,再試著把檔案放進自己的家。
pbuser@LAPTOP-5DJEG6FJ MINGW64 ~
$ touch ~/mine.txt
pbuser@LAPTOP-5DJEG6FJ MINGW64 ~
$
這次什麼話都沒說,就成功了。
畫面直接回到下一個提示字元,沒有任何輸出,mine.txt 就放進自己的家目錄裡了。
所以,一開始那一行字裡的 pbuser,告訴你的,也是現在用誰的權限做事。
pbuser 可以管理自己家目錄底下的檔案。離開家目錄以後,能不能操作其他地方,就要看有沒有被給予相應的權限。
這個觀念在 AI 時代為什麼重要
你可能會想,這些限制,跟我讓 AI 在電腦上做事有什麼關係?
AI 也會碰到同樣的限制。不曉得你安裝程式的時候,有沒有常常碰到權限問題?很麻煩,最後的解決方式是什麼?就是使用超級使用者的權限,去安裝所有程式。
現在用 AI 開發,如果你很在意 AI Agent 的安全性,可能會讓 AI Agent 用不同的使用者去操作目標電腦,把它能操作的範圍分開。
可是,接著就會碰到這些權限問題。任務一直自己停下來,原因是它沒有權限,要等你去排除。
最後,你就直接把超級使用者的權限交給 AI。
這時候,前面分好的範圍,就擋不住它了。
針對 AI 的供應鏈攻擊
一般使用的時候,AI Agent 不會特別利用你的權限去做什麼奇怪的事情。
那問題會從哪裡來?
現在有一種風險,是特別針對 AI 所做的供應鏈攻擊。
攻擊的時間點,可能就在你讓 AI 執行事情時下載檔案,或開發時下載、使用第三方服務的時候。
這些檔案或服務裡,可能帶有攻擊性的 Prompt,進而影響 AI Agent 的記憶和執行動作。
比如說,即使是另一個 AI 發布的 Prompt,接收的 AI 也可能分不清楚這句話是誰說的,把它當成你的指令,照著執行。
這時候,如果你的 AI Agent 剛好有所有權限,前面說的 hack 情境就很容易發生。

