Linux Bash Shell絕對(duì)路徑與相對(duì)路徑
其實(shí),在使用 Linux Bash Shell還有另一個(gè)困擾,就是當(dāng)你的 PATH 沒(méi)有設(shè)定完整的時(shí)候,下達(dá)指令都是要以『一長(zhǎng)列的指令連帶根目錄都要列出來(lái)』,呵呵那就是絕對(duì)路徑的設(shè)定法啦!基本上,這個(gè)『絕對(duì)路徑』與『相對(duì)路徑』的觀念是很重要的!否則你將常常會(huì)找不到檔案說(shuō)!
所謂的『絕對(duì)路徑』就是以根目錄開(kāi)始寫入到檔案的一種命令寫定方法,舉例來(lái)說(shuō),我目前在 /home/test 這個(gè) test 使用者的家目錄中,我想要看看里面的 .bashrc 這個(gè)檔案的資料,使用的是 more 這個(gè)指令,而這個(gè)指令在 /bin/more 當(dāng)中,則正確的下達(dá)指令的方法為:
[test @tset test]# /bin/more .bashrc <==我在的目錄為 /home/test !這是絕對(duì)路徑寫法!
而如果你還記得我們?cè)?檔案系統(tǒng)指令 那一篇文章中提到的觀念的話,那么應(yīng)該記得使用 ls -al 時(shí)會(huì)出現(xiàn)兩個(gè)一定存在的目錄,分別是『.』與『..』,分別代表是『這個(gè)路徑』,與『上一層路徑』!
[test @tset test]# ls -al
total 728
drwx------3 vbirdvbird4096 May 19 14:53 . <==這一層路徑的屬性說(shuō)明
drwxr-xr-x3 root root 4096 May 5 16:50 .. <==上一層路徑的屬性說(shuō)明
以下略!
所以說(shuō),要執(zhí)行上一層目錄中的命令,可以下達(dá)『 cd ../command 』那個(gè) command 指的是存在的可執(zhí)行檔!那么我因?yàn)樵?/home/test 里面,距離 /bin 有兩層上層目錄,所以我要使用 /bin/more 這個(gè)執(zhí)行檔,并且使用相對(duì)路徑的方法,就必須使用:
[test @tset test]# ../../bin/more .bashrc<==一層一層回到根目錄,在進(jìn)入 /bin 的寫法!相對(duì)路徑
這種相對(duì)路徑的方法相當(dāng)廣泛的被運(yùn)用于 script 當(dāng)中,這是因?yàn)槿缜懊嫣岬降模總€(gè)人的安裝預(yù)設(shè)的目錄都不相同,則使用相對(duì)路徑的話,很容易就可以找到套件之間相依軟體或者是設(shè)定檔案的相關(guān)性!
關(guān)于Linux Bash Shell路徑搜尋的問(wèn)題!為何不執(zhí)行目前所在目錄下的檔案?咦!剛剛不是提到『.』與『..』嗎?那么那個(gè)『 . 』是干嘛用的?!眼尖的朋友應(yīng)該已經(jīng)發(fā)現(xiàn)了,就是『我在執(zhí)行檔案的時(shí)候,基本上,并不會(huì)主動(dòng)搜尋目前目錄下的檔案』舉個(gè)例子來(lái)說(shuō),我安裝的 squid 這個(gè)執(zhí)行檔在 /usr/local/squid/bin/squid 這個(gè)檔案,然而我在 /usr/local/squid/bin 下達(dá) squid 的時(shí)候,系統(tǒng)會(huì)告訴你『查不到這個(gè)檔案!』真是見(jiàn)鬼了!明明有這個(gè)檔案的呀!這是因?yàn)橄到y(tǒng)預(yù)設(shè)的 PATH (路徑)并沒(méi)有執(zhí)行目前目錄下的設(shè)定,也就是『.』這個(gè)路徑!你可以使用『 echo $PATH 』看看,就可以知道為什么了!那么為何不要設(shè)定這個(gè)路徑呢?這是因?yàn)椤喊踩坏目剂俊?/p>
由于系統(tǒng)預(yù)設(shè)是允許任何人在 /tmp 底下寫入任何檔案的,那么萬(wàn)一有居心不良的使用者或者是 Cracker 入侵你的電腦,并在你的 /tmp 里頭埋了一個(gè)小木馬,并取名為 ls ,好了,改天你以 root 身份登入后,到 /tmp 底下,并執(zhí)行 ls ,你看會(huì)有什么結(jié)果?!這個(gè) /tmp/ls 由其他身份的人來(lái)執(zhí)行或許沒(méi)有問(wèn)題,但是由 root 來(lái)執(zhí)行卻可能會(huì)導(dǎo)致 Cracker 所樂(lè)意見(jiàn)到的結(jié)果!那曉得為何了吧?!當(dāng)然啰!您還是可以選擇在 ~/.bashrc 當(dāng)中設(shè)定你的 . 在你的 PATH 當(dāng)中,不過(guò)并不這么建議就是了!
好了,由于系統(tǒng)預(yù)設(shè)并不主動(dòng)搜尋目前目錄下的執(zhí)行檔,那么你應(yīng)該如何執(zhí)行『目前目錄下的執(zhí)行檔』呢?很簡(jiǎn)單呀!就是以相對(duì)路徑的觀念,由于『 .. 』是上層,而『 . 』是這一層,所以要執(zhí)行這一層目錄的命令就使用『 ./command 』即可!例如你的 /usr/local/squid/bin 底下執(zhí)行 squid 則可以寫成:
[test @tset bin]# ./squid <==以相對(duì)路徑的觀念來(lái)看!在本目錄下達(dá)的指令寫法!
請(qǐng)?zhí)貏e留意這方面的問(wèn)題!『新手特別容易犯這個(gè)錯(cuò)誤呢!』
【編輯推薦】