Linux 中的絕對路徑和相對路徑,有什么區(qū)別?
路徑是Linux中最基本的概念之一,這是每個Linux用戶都必須知道的。
路徑是指文件和目錄的引用方式。它給出了文件或目錄在 Linux 目錄結(jié)構(gòu)中的位置,由名稱和斜杠組成。
/home/abhishek/scripts
作為一個系統(tǒng)用戶,當(dāng)您想要訪問某個文件或目錄,或者必須為命令或腳本指定文件或目錄的位置時,就會使用路徑。
cat /home/abhishek/scripts/my_script.sh
請記住,如果路徑以斜杠“/”開頭,則第一個斜杠表示根,路徑中的其余斜線只是分隔符。初學(xué)者經(jīng)?;煜备芎头指舴备堋?/p>
在上圖中,第一個路徑是以根路徑(/)開始的,第二個路徑不是以 / 開始的。這兩種寫法都是正確的,第一個是絕對路徑,第二個是相對路徑。
Linux中的絕對路徑和相對路徑
絕對路徑始終從根目錄(/)開始,比如:
/home/abhishek/scripts/my_scripts.sh
相對路徑從當(dāng)前目錄開始。比如,如果你在 /home 目錄中,希望訪問 my_script.sh 文件,那么訪問的路徑應(yīng)該是:
abhishek/scripts/my_scripts.sh
理解絕對路徑和相對路徑之間的差異
我們都知道Linux中目錄結(jié)構(gòu)是一個樹,從根(/)開始,然后產(chǎn)生分支。
假設(shè)我們現(xiàn)在目錄abhishek中,并且希望訪問文件my_scripts.sh,如下圖所示兩種路徑的表示:
假設(shè)我們使用 ls 命令查看 my_script.sh 的文件信息,那么使用絕對路徑:
ls -l /home/abhishek/scripts/my_script.sh
然后,相對路徑:
ls -l scripts/my_script.sh
那么,以上兩種方式,除了文件路徑不一樣以外,其他的完全一樣:
注:在Linux中,文件名區(qū)分大小寫??梢杂写髮?、小寫、數(shù)字、點、中劃線、下劃線以及除了斜杠(/)之外的大多數(shù)字符。斜杠(/)作為保留字符,用于根目錄和用于分割路徑中的目錄。
使用帶有 . 和 .. 目錄的相對路徑
有兩種特殊的相對路徑:
- .(一個點):表示路徑中的當(dāng)前路徑;
- ..(兩個點):表示父目錄,即上一級目錄。
如下圖,我們要從 abhishek 目錄中,到 prakash 目錄中去。
切換目錄,使用 cd 命令。如果使用絕對路徑,可以這樣:
cd /home/prakash
使用相對路徑的話 ,需要用到特殊的相對路徑 .. :
cd ../prakash
為什么要使用 .. 呢?因為相對路徑要從當(dāng)前目錄開始,我們需要告訴 cd 命令向上一級,將我們帶到 /home 目錄,然后從那里在進(jìn)入到 prakash 目錄。
絕對路徑始終以 / 開始,并且與當(dāng)前位置無關(guān);相對路徑取決于當(dāng)前的位置。
絕對路徑和相對路徑,應(yīng)該使用哪個呢?
老實說,這個問題沒有直截了當(dāng)?shù)拇鸢浮_@要視情況而定。
如果你當(dāng)前所在的目錄層次結(jié)構(gòu)比較深,并且需要向上或者向下一級移動,那么使用相對路徑會更簡單。
假設(shè)你位于
/home/username/programming/project/interface/src/header 目錄中,并且需要訪問 /home/username/programming/project/interface/bin 目錄中的某些內(nèi)容。使用相對路徑可以避免鍵入所有冗長的目錄名,只需在此處使用.././bin即可。
但是,如果你要從 /home/username/programming/project/interface/src/header目錄訪問 /usr/bin 目錄中的某些內(nèi)容,那么使用 ../../../../../../usr/bin 會比較麻煩,這個時候使用絕對路徑更方便。
另一種情況,是在腳本或者程序中使用路徑。如果位置是確定的,那么就使用絕對路徑;如果項目中有多個文件夾,并且需要在其中之間切換,那么此處需要使用相對路徑,因為你不確定最終用戶會將程序放在什么地方。