ProgressBar

相對路徑|AI 時代下,你所該知道的 Linux 使用邏輯 03

從一個點、兩個點看懂相對路徑,再看兩個 AI 同時做事時,檔案為什麼會寫入失敗,或出現在錯誤的位置。

作者: 縱裕發表日期: 更新日期:

此文章也有影片介紹,可以搭配影片一起學習!


以下正式開始文章


AI 幫你做事情的時候,常常會寫 Script。你可以先把它想成,把要執行的指令寫進一個檔案,讓電腦照著做。

 

過程中,它需要找到各種檔案,所以路徑就很重要。這些路徑有時候是程式把不同部分接起來的,看起來就會很奇怪。

 

看起來很奇怪的路徑,不一定是錯的,要看它最後走到哪裡。但是起點不對,或者中間接錯,就可能找不到檔案。

 

這一篇,我們就來看看相對路徑怎麼從現在的位置,走到另外一個地方。後面再用兩個視窗,模擬兩個 AI 同時做事,看路徑出問題時會發生什麼。

 

 

這個系列要補什麼

這個系列要補足一些在 AI 時代下,大家可能不太清楚的系統邏輯。

 

這篇用 Git Bash,在 Windows 底下模擬 Linux 的操作,所以會出現一些 Windows 才有的路徑。但是觀念上,拿去 Linux 和 macOS 用是一樣的。

 

那接下來,我們就先從指令的使用說明怎麼看開始。

 

 

指令有很多功能,要去哪裡看

ls 有很多功能,要去哪裡看它能做什麼?

 

在 Linux 上可以打 man 加上指令,它會顯示使用說明,也就是 documentation。

 

$ man ls

 

這次示範的 Git Bash 沒有 man,回覆的錯誤裡會看到 man: command not found。

 

ls 這個指令會列出這個資料夾裡的檔案和資料夾,預設不顯示隱藏檔。那就加 --help,使用說明會直接印出來。下面先看實際輸出的開頭。

 

$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

 

第一行是使用方式:ls,後面加 option,再加你的檔案。這裡的 option 就是選項;方括號表示裡面的部分可以省略,不是要照著打。

 

option 有很多,我們現在只要看這個 -a。在說明裡可以找到這一行:

 

  -a, --all                  do not ignore entries starting with .

 

也就是不要忽略掉點開頭的項目。

 

ls --help 的使用方式與 -a 選項
ls --help 的使用方式與 -a 選項

 

pwd 也可以這樣查。它會顯示出你現在自己的位置,使用說明的開頭是:

 

$ pwd --help
pwd: pwd [-LPW]
    Print the name of the current working directory.

 

指令實在太多,不同版本也不太一樣,我不會全部研究透徹,先記得要用的就好。

 

 

點開頭的隱藏檔,和權限是兩件事

那這個點開頭的檔案,又是什麼?

 

我們先清掉畫面。clear 只清掉看得到的畫面,不會清掉已經執行過的指令。後面換一件事講,我們也先清掉畫面再開始。

 

$ clear

 

檔案名稱是點什麼什麼什麼,代表它是隱藏檔。不一定是系統用的,也可能是某個程式在用,平常不會顯示出來。

 

能不能修改,是由權限決定的。隱藏起來和能不能改,是兩件不同的事。玩過 Git 的話,你可能看過 .gitignore,它就是一個隱藏檔。

 

cd 這個指令是切換路徑,也就是進到你要的資料夾。先用 cd ~ 回到家目錄,再用 ls 看一下。

 

$ cd ~
$ ls
AppData
Desktop
Downloads
Pictures
Public

 

你的內容可能跟我不一樣。接著加上 -a。

 

$ ls -a
.
..
.bash_history
AppData
Desktop
Downloads
Pictures
Public

 

這次多了一個點、兩個點,還有 .bash_history。

 

ls 和 ls -a 列出的內容不同
ls 和 ls -a 列出的內容不同

 

我們按上、按下,叫出之前打過的指令,就是 Bash 記在這種檔案裡。

 

按一下鍵盤的 ↑,會叫回上一個指令;再按一下,就再往前一個。按 ↓,就往比較新的那個指令走。

 

例如剛打過 pwd,再打過 ls -a,按一下 ↑ 叫回的是 ls -a,再按一下 ↑ 就叫回 pwd。接著按 ↓,又會回到比較新的 ls -a。

 

這只是叫回來,還沒有執行,要按 Enter 才會執行。如果只是試試,可以按幾下 Backspace,把叫回來的指令刪掉。

 

這些檔案之後設定時都可能成為主角,內容先不管。我們先來看,最前面的一個點和兩個點是什麼。

 

 

一個點是自己,兩個點是上一層

這兩個是相對路徑裡非常有用的東西。

 

現在在家目錄,打 cd .,再用 pwd 看一下自己在哪裡。

 

$ cd .
$ pwd
/c/Users/pbuser

 

你還在原本的路徑,所以一個點 . 就是自己。

 

那兩個點呢?

 

$ cd ..
$ pwd
/c/Users

 

cd .. 就往前退一層。原本在 pbuser 裡,退一層就到 Users。

 

再下一次,再往前退。

 

$ cd ..
$ pwd
/c

 

再退一次,只剩一條斜線。

 

$ cd ..
$ pwd
/

 

這就是根目錄。那再退呢?

 

$ cd ..
$ pwd
/

 

還是在根目錄。

 

根目錄沒辦法再往前退,不管一個點還是兩個點,它都一直在自己這個位置。新手試兩個點,發現怎麼不會動,就是因為已經在根目錄了。

 

這也是它叫根目錄的原因:沒有任何資料夾包住它。

 

用 cd .. 一層一層退回根目錄
用 cd .. 一層一層退回根目錄

 

 

從下載走到桌面的 Test

我們上一集在桌面建了 Test 資料夾。現在站在下載,要怎麼過去?如果你要跟著做,桌面也要先有這個資料夾。

 

先清掉畫面,進到下載,用 ls 看一下。

 

$ cd ~/Downloads
$ ls

 

這次下載資料夾是空的,所以 ls 沒有列出任何東西。下載跟桌面是平行的,在下載裡面找不到桌面。

 

上一集用的是絕對路徑,從最前面的斜線一路打下來。

 

可以先輸入 cd /c/Users/pbuser/De,按一下 Tab,它會幫你補成 Desktop/,再自己輸入 Test。完整指令是:

 

$ cd /c/Users/pbuser/Desktop/Test

 

那相對路徑要怎麼走?先回到下載。家目錄也可以用小蝌蚪、小波浪 ~ 代表。

 

$ cd ~/Downloads

 

相對路徑的想法是:桌面和下載都在家目錄底下。所以先進到上一層,再進桌面,再進 Test。

 

$ cd ..
$ cd Desktop
$ cd Test
$ pwd
/c/Users/pbuser/Desktop/Test

 

就到了剛剛的位置。

 

也可以組成一長條。回到下載,再打「上一層的桌面的 Test」。

 

$ cd ~/Downloads
$ cd ../Desktop/Test
$ pwd
/c/Users/pbuser/Desktop/Test

 

.. 先回家目錄,Desktop 進桌面,Test 再進桌面裡的資料夾。分三次打,或接成一條路徑,最後都到了同一個地方。

 

從 Downloads 用 ../Desktop/Test 到桌面資料夾
從 Downloads 用 ../Desktop/Test 到桌面資料夾

 

 

從 Test 走回下載

現在在 Test 裡,要怎麼走回下載?

 

往前一格是桌面,再往前一格是家目錄,下載在家目錄裡。所以往前兩次,再進下載。

 

先往前一次到桌面,看一下有什麼。

 

$ cd ..
$ ls
Test

 

再往前一次,就看到家目錄的東西,裡面有下載。

 

$ cd ..
$ ls
AppData
Desktop
Downloads
Pictures
Public

 

接著就能進下載了。

 

$ cd Downloads
$ pwd
/c/Users/pbuser/Downloads

 

組成一長條,就是兩個點、兩個點,再進下載。回到 Test 試一次。

 

$ cd ~/Desktop/Test
$ cd ../../Downloads
$ pwd
/c/Users/pbuser/Downloads

 

這裡有兩段 ..,每一段退一層。第一段從 Test 回桌面,第二段從桌面回家目錄,再進 Downloads。

 

 

路徑可以進去,又出來嗎

那如果想做一個很奇怪的動作,可不可以串得亂七八糟,進去又出來?

 

當然可以。

 

現在在下載,先輸入這一段,先不要按 Enter:

 

cd ../Desktop/Test/../../

 

從下載往前,進桌面、進 Test,再往前、往前。這樣就回到了家目錄。

 

這時按兩下 Tab,可以看到這條路徑走到的位置裡有什麼。畫面列出的是家目錄的東西,例如 Desktop、Downloads。

 

再接上三段 ../,按 Enter,完整指令和結果是:

 

$ cd ../Desktop/Test/../../../../../
$ pwd
/

 

就回到根目錄了。

 

這樣進去又出來是可以的,只是一般人不會這麼做,路徑看起來很奇怪。

 

有時候這種路徑不是人打的。寫 Script 時,路徑是程式抓出來的,往前往後接在一起,就變成這樣。但它能到達目的地,所以不能光看它長得奇怪,就認為它錯了。

 

 

兩個 AI 同時做事,會發生什麼

接下來這段會用到一些比較進階的 Script 指令。你先看就好,不用跟著操作,也不用急著記住每個指令。

 

這裡用兩個操作視窗,分別代表 AI 一號跟 AI 二號。兩個 AI 的動作,都是用事先寫好的腳本模擬。

 

目標是在桌面產生報告,桌面才是正確的位置。

 

一號現在所在的資料夾,叫做「錯誤的位置」,它在桌面底下。工具正常時,會交回 ..,也就是先回上一層的桌面,再把報告寫進去。

 

 

第一次:先讓一號做短任務

先讓一號正常執行短任務。執行完,桌面就出現報告了。視窗顯示:

 

AI一號:寫入成功
資料位置在:
Desktop/AI一號成功產生.txt

 

這次寫入成功,位置也是我們要的桌面。

 

短任務正常執行,報告出現在桌面
短任務正常執行,報告出現在桌面

 

 

第二次:一號在等,二號把工具搬走

先刪掉剛才的報告,重新來一次。

 

這次做長任務,一號會先等四秒。趁它在等的時候,二號把工具搬到別的地方。

 

等一號要用的時候,工具已經被搬走,找不到它,就出錯了。

 

AI一號:執行失敗
無法取得路徑
沒有產生檔案

 

這次沒有取得能用的路徑,寫入也失敗,桌面沒有報告。

 

二號搬走工具後,一號執行失敗,沒有產生檔案
二號搬走工具後,一號執行失敗,沒有產生檔案

 

 

第三次:自動排錯的版本,先正常跑一次

再把這一輪的產物清掉,工具放回去,重新來一次。

 

先跑自動排錯的版本,二號不搗亂,看看報告會寫到哪裡。

 

AI一號:寫入成功
資料位置在:
Desktop/AI一號成功產生.txt

 

工具還在,一號取得了 ..,所以報告一樣寫到桌面。

 

自動排錯的版本在沒有干擾時,報告也寫在桌面
自動排錯的版本在沒有干擾時,報告也寫在桌面

 

 

第四次:同一個版本,這次讓二號搗亂

先刪掉剛才的報告,重新來一次。

 

還是跑剛剛那個自動排錯的版本。一號等四秒時,二號再把工具搬走。

 

這次程式把錯誤丟掉,接到空白,卻繼續往下做。畫面說寫入成功了:

 

AI一號:寫入成功
資料位置在:
Desktop/錯誤的位置/AI一號成功產生.txt

 

可是桌面沒有出現檔案。那報告在哪裡?

 

打開桌面的「錯誤的位置」,報告就在裡面。

 

原本取得的路徑應該是 ..,先回上一層的桌面。這次接到的是空白,少了去桌面那一段,報告就留在這個「錯誤的位置」。

 

這次檔案有寫出來,但是寫的地方不對。這個自動排錯的版本,只是把錯誤吞掉,沒有修好。

 

畫面顯示寫入成功,報告卻留在錯誤的位置
畫面顯示寫入成功,報告卻留在錯誤的位置

 

 

跟 AI 的關係

這個觀念,在 AI 幫你做事情的時候就會用得到。

 

看起來很奇怪的路徑,不一定是錯的,要看它最後走到哪裡。但是起點不對,或者中間接錯,就可能找不到檔案。

 

這時候 AI 如果一直修不好,你至少可以先看:它現在在哪裡?這條路徑到底指到哪裡?

 

 

下一集:建立資料夾、空檔案,還有命名

下一支影片,我們要教大家兩個指令:用 mkdir 建立資料夾,還有用 touch 建立空的檔案。

 

然後我們要看一下命名這件事情的問題點。名字取得不好,其實很容易造成一些工具沒辦法使用。

 

 

延伸閱讀

縱裕

縱裕

錄課程錄到快死掉了啊!!!

推薦課程

2026 AI 實戰基礎篇
2026 AI 實戰基礎篇

AI 已經改變了職場規則。這門課從跟 AI 溝通開始,到用 AI 寫程式,最後串出一條完整的影片製作流水線。不用會寫程式,但上完你會擁有打造自動化工廠的能力。

NT$ 1,600NT$ 2,400
11月初優惠