2021-05-12 14:32:11
Linux絕對路徑和相對路徑詳解
Linux 系統中,檔案是存放在目錄中的,而目錄又可以存放在其他的目錄中,因此,使用者(或程式)可以借助檔名和目錄名,從檔案樹中的任何地方開始,搜尋並定位所需的目錄或檔案。
說明目錄或檔名位置的方法有兩種,分別使用絕對路徑和相對路徑。絕對路徑指的是從根目錄(/)開始寫起的檔案或目錄名稱,而相對路徑則指的是相對於當前路徑的寫法。
換句話說,絕對路徑必須以一個正斜線(/),也就是根目錄開始,到查詢物件(目錄或檔案)所必須經過的每個目錄的名字,它是檔案位置的完整路標,因此,在任何情況下都可以使用絕對路徑找到所需的檔案。例如:
linuxidc@linuxidc:~/linuxidc.com$ cd /etc/init.d
linuxidc@linuxidc:/etc/init.d$ cd /usr/local/src
這些切換目錄的方法使用的就是絕對路徑。
cd 是切換目錄的命令,該命令的具體用法,參考https://www.linuxidc.com/Linux/2017-01/139159.htm。
而相對路徑,就不是以正斜線開始,它是從當前所在目錄開始,到查詢物件(目錄或檔案)所必須經過的每一個目錄的名字。例如:
linuxidc@linuxidc:/$ cd etc
linuxidc@linuxidc:/etc$
#當前所在路徑是/目錄,而/目錄下有etc目錄,所以可以切換
linuxidc@linuxidc:/home/linuxidc.com$ cd etc
bash: cd: etc: 沒有那個檔案或目錄
#而同樣的命令,由於當前所在目錄改變了,所以就算是同一個命令也會報錯,除非在/etc/目錄中還有一個etc目錄
通常情況下,相對路徑比絕對路徑短,這也是為什麼許多使用者喜歡使用相對路徑的原因。
圖 1 絕對路徑和相對路徑
再舉個例子,如圖 1 所示,假設使用者當前所在的目錄是 cat,而此時要切換到 linuxidc 目錄。在這種情況下,切換路徑有以下 2 種表達方式: 1. 使用絕對路徑,寫法為:/home/linuxidc,表示要切換的目錄為根目錄下 home 目錄中的 linuxidc 目錄;
2. 也可以使用相對路徑,寫法為:../linuxidc,其中,.. 表示當前目錄的父目錄(home 目錄),也就是說,相對於目前所在目錄 cat,要切換到父目錄 home下的 linuxidc 目錄。
學完以上 2 種路徑的表達方式後,讀者可能會問,絕對路徑和相對路徑,應該如何選擇呢?
假設你編寫完成了一個軟體,該軟體的安裝檔案分為 3 個目錄,分別是 etc、bin 和 man 目錄。但是,由於不同的使用者會將軟體安裝到不同的目錄中,比如使用者甲將軟體安裝到了 /usr/local/package 目錄中,而使用者乙將軟體安裝到 /home/packages 目錄中。考慮到這種情況,如果軟體中涉及使用路徑調取資源,就只能使用相對路徑。
此外,通常我們會將目錄名寫的很長,好讓自己知道哪個目錄是幹什麼的。例如,有一個目錄的路徑為 /cluster/raid/output/www.linuxidc.com/linuxidc,同時還有一個目錄的路徑為 /cluster/raid/output/www.linuxidc.com/Python,此時如果要從第一個目錄切換到第二個目錄,雖然可以使用絕對路徑,但明顯使用相對路徑更加方便,直接執行 cd ../python 命令即可成功切換。
需要注意的是,雖然絕對路徑的寫法相對比較麻煩,但可以肯定,這種寫法絕對不會有問題,而使用相對路徑,可能會由於程式執行的工作環境不同,導致產生一些問題。因此,選擇使用絕對路徑還是相對路徑,要結合具體的實際情況。有時,只能使用相對路徑;而更多時候兩種方式都可以,可以根據自己的喜好選擇。
相關文章