01. 概述
絕對路徑和相對路徑在shell環(huán)境中經(jīng)常遇到,各有用處。有時候相對路徑比較方便,有時候絕對路徑比較方便。
02. 絕對路徑(Absolute Pathname)
絕對路徑必定由**/**開頭
絕對路徑是為檔案/文件的所在位置做指向
在任何時候,都可以用絕對路徑來找到我們想要的文件
舉例說明
示例一:
/home/deng
示例二:
/usr/share/man
03. 相對路徑(Relative Pathnames)
相對路徑不由**/**開頭
相對路徑是相對于現(xiàn)在目前所在的位置,為目的地指向
通常相對路徑比絕對路徑短一點(diǎn),可以當(dāng)成我們迅速找到文件/檔案的捷徑
示例一:
../test/itcast
示例二:
./test
04. 相對路徑的用途
那么相對路徑與絕對路徑有什么了不起呀?喝!那可真的是了不起了!假設(shè)你寫了一個軟件, 這個軟件共需要三個目錄,分別是 etc, bin, man 這三個目錄,然而由于不同的人喜歡安裝在不同的目錄之下, 假設(shè)甲安裝的目錄是 /usr/local/packages/etc, /usr/local/packages/bin 及 /usr/local/packages/man ,不過乙卻喜歡安裝在 /home/packages/etc, /home/packages/bin, /home/packages/man 這三個目錄中,請問如果需要用到絕對路徑的話,那么是否很麻煩呢?是的! 如此一來每個目錄下的東西就很難對應(yīng)的起來!這個時候相對路徑的寫法就顯的特別的重要了!
此外,如果你跟鳥哥一樣,喜歡將路徑的名字寫的很長,好讓自己知道那個目錄是在干什么的,例如: /cluster/raid/output/taiwan2006/smoke 這個目錄,而另一個目錄在 /cluster/raid/output/taiwan2006/cctm ,那么我從第一個要到第二個目錄去的話,怎么寫比較方便? 當(dāng)然是cd …/cctm比較方便羅!對吧!
05. 絕對路徑的用途
但是對于文檔名的正確性來說,『絕對路徑的正確度要比較好~』。 一般來說,鳥哥會建議你,如果是在寫程序 (shell scripts) 來管理系統(tǒng)的條件下,務(wù)必使用絕對路徑的寫法。 怎么說呢?因為絕對路徑的寫法雖然比較麻煩,但是可以肯定這個寫法絕對不會有問題。 如果使用相對路徑在程序當(dāng)中,則可能由于你運(yùn)行的工作環(huán)境不同,導(dǎo)致一些問題的發(fā)生。
06. 思維發(fā)散
問題: 在給出相對路徑時,系統(tǒng)如何識別其相應(yīng)的絕對路徑呢?
事實上,相對路徑是根據(jù)PATH環(huán)境變量來查找絕對路徑的。
舉例來說,我目前在 /home/itcast 這個 itcast使用者的家目錄中,我想要看看里面的 .bashrc 這個檔案的數(shù)據(jù),使用的是 more 這個指令,而這個指令在 /bin/more 當(dāng)中。通常的命令寫法是:
[itcast@localhost ~]$ more .bashrc
而由于PATH變量的值為:
[deng@localhost ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/deng/.local/bin:/home/deng/bin
[deng@localhost ~]$
在執(zhí)行more命令時,shell會根據(jù)PATH變量的路徑中順序查找,一旦查找匹配到(此例匹配到的應(yīng)該是/bin/more),便執(zhí)行/bin/more .bashrc。這便是執(zhí)行命令時由相對路徑查找絕對路徑的過程。
所以我們就可以理解為什么執(zhí)行當(dāng)前目錄下的可執(zhí)行程序應(yīng)該用的格式是:
[deng@localhost ~]$ ./test.sh
而不是直接用test.sh了。因為通常PATH變量不包含當(dāng)前路徑。如果不加./會導(dǎo)致相對路徑格式的命令找不到絕對路徑。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。