3、文件系統(tǒng)與目錄樹 在dos-windows體系中,每個磁盤或硬盤分區(qū)有獨(dú)立的根目錄,并且用唯一的驅(qū)動器標(biāo)識符表示,如A:,C:等。 而linux的文件系統(tǒng)則不一樣,它采用了一種虛擬文件系統(tǒng)技術(shù),使不同的磁盤和分區(qū)組合成一個整體。單個磁盤或硬盤分區(qū)構(gòu)成單獨(dú)的文件系統(tǒng)(可以是fat、NTFS等等格式的),有其各自的目錄樹結(jié)構(gòu)。但是,在操作系統(tǒng)能夠使用這些文件系統(tǒng)之前,必須通過稱為“掛裝”的操作將單獨(dú)的文件系統(tǒng)附加到虛擬文件系統(tǒng)的某一個子目錄上——也就是說這個子目錄就是實(shí)際文件系統(tǒng)的根,通過訪問這個子目錄來訪問該分區(qū)或磁盤。如此操作,最終可使所有的文件系統(tǒng)結(jié)合成一個無縫的統(tǒng)一整體,組織到一個大的樹型目錄結(jié)構(gòu)中。該目錄樹的頂部是一個單獨(dú)的根目錄,名為root,用/表示。根目錄下是一些標(biāo)準(zhǔn)的子目錄和文件。 在文件系統(tǒng)模型中,仍然體現(xiàn)了linux的設(shè)計(jì)哲學(xué),即將不同的文件系統(tǒng)組合成一個有機(jī)的整體,進(jìn)而為用戶提供一致的文件系統(tǒng)結(jié)構(gòu)。 對大多數(shù)Linux發(fā)行版本而言,文件系統(tǒng)的目錄樹布局遵循FSSTND標(biāo)準(zhǔn),這有利于編寫或移植軟件,同時也有利于進(jìn)行系統(tǒng)管理和維護(hù)。 完整的目錄樹可劃分為小的部分,這些小部分又可以單獨(dú)的存放在自己的磁盤或者分區(qū)上。這樣相對穩(wěn)定的部分和經(jīng)常變化的部分可以單獨(dú)放在不同的分區(qū)里,從而方便了備份和系統(tǒng)管理。目錄樹的主要部分有root(/)、/usr、/var、/home等等。下面是一個典型的linux目錄結(jié)構(gòu)如下: / 根目錄 /bin 存放必要的命令 /boot 存放內(nèi)核以及啟動所需的文件等 /dev 存放設(shè)備文件 /etc 存放系統(tǒng)的配置文件 /home 用戶文件的主目錄,用戶數(shù)據(jù)存放在其主目錄中 /lib 存放必要的運(yùn)行庫 /mnt 存放臨時的映射文件系統(tǒng),我們常把軟驅(qū)和光驅(qū)掛裝在這里的floppy和cdrom子目錄下。 /proc 存放存儲進(jìn)程和系統(tǒng)信息 /root 超級用戶的主目錄 /sbin 存放系統(tǒng)管理程序 /tmp 存放臨時文件的目錄 /usr 包含了一般不需要修改的應(yīng)用程序,命令程序文件、程序庫、手冊和其它文檔。 /var 包含系統(tǒng)產(chǎn)生的經(jīng)常變化的文件,例如打印機(jī)、郵件、新聞等假脫機(jī)目錄、日志文件、格式化后的手冊頁以及一些應(yīng)用程序的數(shù)據(jù)文件等等。建議單獨(dú)的放在一個分區(qū)。 典型的/usr目錄如下: /X11R6 存放X window系統(tǒng) /bin 存放增加的用戶程序 /dict 存放字典 /doc 存放追加的文檔 /etc 存放設(shè)置文件 /games 存放游戲和教學(xué)文件 /include 存放C開發(fā)工具的頭文件 /info 存放GNU信息文件 /lib 存放庫文件 /local 存放本地產(chǎn)生的增加的應(yīng)用程序 /man 存放在線幫助文件 /sbin 存放增加的管理程序 /share 存放結(jié)構(gòu)獨(dú)立的數(shù)據(jù) /src 存放程序的源代碼 由于/usr中的文件不和特定的計(jì)算機(jī)相關(guān),也不會在通常使用中修改,因此可以通過網(wǎng)絡(luò)共享這個目錄(文件系統(tǒng)),這樣,當(dāng)管理員安裝了新的軟件之后,所有共享這一文件系統(tǒng)的計(jì)算機(jī)均可以使用新的軟件。
4、目錄操作和文件操作
在介紹文件的操作之前,我們先了解一下文件的類型。目錄樹包括以下文件類型: a、普通文件:包括文檔文件、數(shù)據(jù)文件、程序、shell腳本等我們常接觸到的文件。 b、目錄文件:目錄文件包含著一個該目錄下的文件和本身以及上一級的鏈表。這是由操作系統(tǒng)維護(hù)的文件。它至少包括兩個記錄,一個是它自身(“.”),一個是它的上一級目錄(“..”)。注意,根目錄的上一級目錄還是它自身。 c、設(shè)備文件:和所有UNIX一樣,linux把所有設(shè)備都作為一個文件來處理,包括IO設(shè)備。 d、進(jìn)程通信文件:即所謂的先進(jìn)先出文件,主要是為進(jìn)程間通信用的。 我們一般登入系統(tǒng)后,當(dāng)前的工作目錄都是自己的主目錄,想看看主目錄里有什么東東?你可以使用ls命令試試。輸出就如同dir /w一樣^_^。要查看隱含文件使用命令行: ls -a 可以看見多了不少以點(diǎn)(“.”)開頭的隱藏文件。如果還想進(jìn)一步查看文件的詳細(xì)信息,那就查看長格式的輸出吧,使用 ls -l 當(dāng)然,我們完全可以組合使用多參數(shù),有兩種方法: ls -a -l 或者 ls -al 都可以得到該目錄下所有文件的詳細(xì)列表,比dos下dir的輸出還詳細(xì)——只不過文件的名卻在右邊。如果文件太多,一屏顯示不下怎么辦呢?ls命令并沒有提供dir的/p開關(guān)的功能,不過按照UNIX系統(tǒng)設(shè)計(jì)的積木原則,我們可以用命令的組合獲得我們需要的任何功能。象這次我們可以使用輸出重定向,使用通道,對于下面這個命令,你應(yīng)該不會覺得別扭吧? la -l | more 這和dos下的管道一模一樣嘛:),還不只這個,連改變當(dāng)前目錄的cd命令,也是和dos中的用法一樣,看來dos還是沒有完全拋棄UNIX的影響。 cd命令的用法和dos中相似,不同的是cd和后邊的目錄(包括代表上一級目錄的..)之間必須有空格隔開。多出幾次錯誤信息你就會記得這一點(diǎn)了,呵呵。記住: cd.. ------wrong cd .. or cd / ------right 查看當(dāng)前的路徑的命令是pwd,如前所說的,它是bash的內(nèi)部命令,cd也是。它存在價(jià)值在于你不用時刻面對著一個可能非常長的路徑,當(dāng)然你覺得有必要,也可以通過對bash的適當(dāng)配置使得它的提示符類似于dos模式。 建立和刪除的目錄命令也很容易從字面上理解,建立目錄使用mkdir,刪除空目錄用rmdir。注意,你建立目錄、刪除目錄的操作,都需要相應(yīng)的權(quán)限。 要想做到dos下的deltree的功能,需要使用文件的刪除命令rm的遞歸刪除參數(shù)-r或-R。這個命令的基本格式是 rm [-option] 2003106105931.htm 例如要刪除/tmp/newtemp所有文件和子目錄,可以使用如下命令: rm -r /tmp/newtemp 這樣的話,系統(tǒng)會一個一個文件問你是否需要刪除,如果你可以確信這個目錄下的所有東西都沒有保留的價(jià)值的話,你可以加上一個-f的參數(shù),表示強(qiáng)制刪除,不再詢問,如: rm -rf /tmp/newtemp (還記得我們使用多個參數(shù)的兩種方法么?) 注意,在linux中沒有類似undelete的命令,不要隨意使用帶-f、-r、-R參數(shù)的rm命令哦:) 文件的拷貝使用cp命令,使用的格式如下: cp [-option] soursefile targetfile 注意,和dos中的copy不同的是: · soursefile和targetfile不能相同; · cp需要使用遞歸選項(xiàng)-r來完成帶文件的目錄的拷貝; · cp可以使用-u開關(guān)來保留文檔的最新版本。當(dāng)使用-u選項(xiàng)時,如果目標(biāo)文件存在且最后修改時間比源文件晚,則不覆蓋。 我們常用的還有重命名操作命令,或者說移動文件命令,mv,格式如下: mv [-option] source target mv有個非常有用的選項(xiàng) -b,表示給被覆蓋的文件產(chǎn)生一個備份。
cat命令用于把所給的文件以所給順序在標(biāo)準(zhǔn)輸出上輸出。格式如下: cat [-ption] [file] 如果沒有設(shè)置參數(shù)file,則把從標(biāo)準(zhǔn)輸入中讀入的文件從標(biāo)準(zhǔn)輸出上輸出。如果file以一個減號來代替,則cat仍然從標(biāo)準(zhǔn)輸入上讀入數(shù)據(jù)。例如: cat - file1 - >file2 這個命令表示先從標(biāo)準(zhǔn)輸入讀入數(shù)據(jù),直到輸入結(jié)束字符Ctrl+d,接下來從文件file1中輸入,接著又從鍵盤輸入直到輸入結(jié)束字符,把這些結(jié)構(gòu)都輸出到file2文件中。實(shí)際上做了個在file1前后均加了一段文字然后存成了file2文件的操作。 用這個命令還可以把多個文件連接在一起。例如: cat *.txt > outall.txt 表示把所有的txt后綴的文件按照字母順序連接起來,然后再寫到outall.txt文件里。 如果[file]選項(xiàng)是二進(jìn)制文件,而又不是把它輸出到一個文件而是標(biāo)準(zhǔn)輸出的話,由于終端可能要對不可打印字符進(jìn)行處理,可能會出現(xiàn)亂碼??梢允褂?v選項(xiàng)來解決這個問題。這個選項(xiàng)把不可打印字符(從ASCII碼的000到037的字符)用^和ASCII碼從100到137的字符組合來表示。 還有三個用來顯示文件的命令,它們分別是head、tail、more。 head [-option] [file] 是用來顯示文件的前面一部分的。可以使用-num選項(xiàng)來顯示前num行,也可以使用選項(xiàng)-c num使head輸出前num個字節(jié)。其它的使用和cat相似。 tail [-option] [file] 是和head對應(yīng)的顯示文件后一部分的命令。選項(xiàng)和head命令一樣。 more命令就是前面我們曾經(jīng)借助它進(jìn)行分頁顯示的命令,它也可以直接用來分頁顯示文本文檔。命令格式和前面幾個命令一樣。在顯示完一頁后,more會提示用戶輸入:如果輸入空格鍵或是f,則顯示下一頁;如果輸出n加空格鍵,則用來顯示后面的n 行;回車鍵用來顯示下一行。 這幾個命令都是網(wǎng)絡(luò)管理比較常用的查看日志文件的工具,可以用man命令獲得它們更詳細(xì)的幫助。 還有幾個顯示二進(jìn)制文件的命令,例如od、mn和strings,你也可以通過man獲得幫助。
在linux中還可以為文件增加鏈接。例如目錄的兩個鏈接“.”和“..”。在目錄中,每一對文件名與索引節(jié)點(diǎn)號稱為一個鏈接(link)。同一個索引節(jié)點(diǎn)可以和多個文件名創(chuàng)建鏈接。實(shí)際上這種硬鏈接是直接創(chuàng)建了與文件(在這是目錄文件)的索引節(jié)點(diǎn)(i-node)號相聯(lián)系的鏈接。我們也可以為文件創(chuàng)造多個鏈接,這使用命令: ln [-option] sourse [target] 如果不使用target參數(shù)的話,則在當(dāng)前目錄中是創(chuàng)建一個同名的鏈接文件;如果用ln產(chǎn)生幾個文件的連接,則target必須為一個目錄。只有超級用戶才能產(chǎn)生目錄間的硬鏈接。 這一個功能非常有用。除了我們可以在主目錄方便訪問我們經(jīng)常訪問的文件,而且我們可以為重要的文件或目錄建立多個鏈接,提供“防刪除”的功能,避免以為刪除造成嚴(yán)重后果。這樣做的原理是,如果一個文件(或目錄)的索引節(jié)點(diǎn)有一個以上的鏈接,刪除操作只能破壞其一,索引節(jié)點(diǎn)本身的其他鏈接仍然不受影響。當(dāng)然,如果對只有一個鏈接的文件發(fā)出刪除命令,索引節(jié)點(diǎn)、文件數(shù)據(jù)塊與目錄的連接都會被釋放,文件也真正刪除。 上面的鏈接說的都是硬鏈接,和索引節(jié)點(diǎn)號直接相關(guān)的鏈接。我們知道,每一個文件系統(tǒng)(如一個硬盤分區(qū))都有自己的索引節(jié)點(diǎn)數(shù)組,因此索引節(jié)點(diǎn)號只有在同一個文件系統(tǒng)中才是唯一的,這意味著,固定鏈接只能用在一個文件系統(tǒng)的內(nèi)部。 而符號鏈接(symbolic link,又常被稱為軟鏈接)則沒有這個限制,它和windows系統(tǒng)中的快捷方式非常相似,它可以用在不同的文件系統(tǒng)之中。因此,在兩個文件之間建立鏈接,如果要求保證可移植性,應(yīng)盡量使用符號鏈接??梢允褂?nbsp;ln -s 來產(chǎn)生符號鏈接。
· 文件、目錄的屬性
涉及到文件的屬性,就不可避免的關(guān)聯(lián)到用戶管理,關(guān)于這個內(nèi)容,請先參考專題五中的用戶管理部分,再來閱讀這一部分。linux下,每一個文件、每一個目錄都必須有一個屬主,并針對擁有文件的用戶自己、用戶所在組、其它所有賬號(組)分別設(shè)定讀、寫、執(zhí)行三種權(quán)限。例如,我(假定是usergroup組的username帳戶的擁有者)使用如下命令建立一個新的文件 touch mytestfile 然后我們使用ls -l mytestfile這一命令來查看這個文件的權(quán)限狀態(tài)(關(guān)于ls命令,可以前面已有錯誤,可以查閱本站的命令查詢),可以得到如下的屏幕輸出顯示: -rw-rw-r-- 1 username usergroup 0 Feb 6 21:37 mytestfile 輸出分為7個部分,分別表示文件權(quán)限屬性、硬連接個數(shù)、文件所有者帳戶、文件所屬組、文件大小、文件創(chuàng)建時間、文件名稱。 · 使用chown命令修改文件的主人 當(dāng)你新建立一個文件的時候,文件的所有者當(dāng)然就是你了。這一事實(shí)只有超級用戶(比如說root)才可以通過chown命令改變(例如 chown otheruser mytestfile,把mytestfile文件的屬主改為otheruser)。普通用戶不能把自己的文件“送”給別人,不然你把有特殊目的的程序給了root怎么辦?:) chown命令的用法比較簡單。這里我先假設(shè)你現(xiàn)在擁有超級用戶權(quán)限,那么你就可以使用如下命令將一個文件“送給”username用戶了: chown username /home/username/thefileisrootcreate.txt (假定該文件是由root創(chuàng)建的) 修改一個目錄的所有者也是類似的: chown username /home/newboat 當(dāng)然,如果這個目錄還有子目錄及文件需要同時送給username,chown也是支持-R參數(shù)的: chown -R username /home/newboat 如果你同時想修改文件/目錄所屬的組的話,你可以使用以下命令方便的達(dá)到目的: chown -R username.othergroup /home/newboat 這樣,不但文件主人得到了修改,文件所屬的組也變成了othergroup · 修改文件的組屬性 文件所屬組你倒是可以改變,前提是: 1、你的超級用戶。 2、你同時屬于兩個或兩個以上的組。 兩個條件你至少具備一個,你才能夠把文件所屬舊組變?yōu)樾陆M。使用如下的命令將當(dāng)前目錄下所有html文件所屬的組改為httpd: chgrp httpd *.html 和chown命令一樣,chgrp也可以使用-R參數(shù)對一個目錄內(nèi)的所有文件和子目錄進(jìn)行遞歸的修改組屬性。 <提示>:你可以使用不帶參數(shù)的groups命令查看自己屬于哪個組。
文件權(quán)限的設(shè)定是我們這一小節(jié)討論的核心,我們主要介紹chmod命令的兩種用法。
· 使用訪問字符串設(shè)置文件目錄權(quán)限 每一個文件、目錄都針對用戶自己、用戶所在組、其它所有賬號(組)分別有讀、寫、執(zhí)行三種權(quán)限及其組合。ls -l查看文件屬性的第一個字段所示。總共十位字符“-rw-rw-r--”,第一位是目錄區(qū)分標(biāo)志,如果是d的話,表示這是一個目錄。第二到四位分別表示文件所有者的讀(r:read)、寫(w:write)、執(zhí)行(x:execute)屬性,第五到七位是文件所屬組的讀、寫、執(zhí)行權(quán)限,第八到第十位則是其它用戶的讀、寫、執(zhí)行權(quán)限。如果對應(yīng)的位是相應(yīng)的字母,就是有這相應(yīng)權(quán)限,否則為“-”,表示沒有獲得這個許可。象剛才例子中的文件就是自己可讀寫,本組可讀寫,其它用戶可讀,所有的用戶(包括自己)都不能執(zhí)行它。 我們的用u、g、o分別來指代用戶(user)、組(group)、其它帳戶(other),就可以方便的設(shè)置文件和目錄的權(quán)限了。當(dāng)然,我們也可以用a來表示所有的這三項(xiàng)。 例如,我們要對所有perl的腳本文件設(shè)定權(quán)限,對所有用戶都可以讀和執(zhí)行,文件所有者還允許寫許可,那么我們可以使用如下命令: chmod a+rx,u+w *.pl 注意:如果要使用多個訪問字符串,它們之間要用逗號隔開,各個許可字符串之間不允許有空格。正如上例所示。 如果要修改目錄中所有文件和子目錄的權(quán)限屬性,可以使用chmod提供的-R參數(shù)來遞歸修改。例如,下列命令將/www/site1目錄及其下面的子目錄的權(quán)限屬性設(shè)定為所有者和組可讀、寫、執(zhí)行,其它用戶不可訪問: chmod -R a+rwx,o-rwd /www/site1 注意,不要輕易使用-R選項(xiàng),這可能會帶來安全隱患。 使用字符串方便了理解,單輸入那么多字母還是有點(diǎn)累,如果你對8進(jìn)制有些概念的話,可以使用下面介紹的方法來做權(quán)限設(shè)置。
· 使用八進(jìn)制數(shù)設(shè)置文件目錄權(quán)限 我們知道,在ls -l的輸出中,文件權(quán)限表示為“-rw-rw-r--”,前一位只和是否為目錄或連接有關(guān),其它九位正好可以分成三段,每段三位,“rw-”、“rw-”和“r--”,“-”代表無效“0”,其它字符代表有效“1”,那么這個文件的權(quán)限就是“110”、“110”、“100”,把這個2進(jìn)制串轉(zhuǎn)換成對應(yīng)的8進(jìn)制數(shù)就是6、6、4,也就是說該文件的權(quán)限為664(三位八進(jìn)制數(shù))。我們也可以使用類似這種三位八進(jìn)制數(shù)來設(shè)定文件授權(quán),如上邊兩個例子,就也可以寫為: chmod 755 *.pl chmod -R 770 /www/site1 是不是很簡潔?關(guān)鍵在于你能根據(jù)你需要設(shè)定的權(quán)限正確的選擇八進(jìn)制數(shù)(利用八進(jìn)制數(shù)的二進(jìn)制表示可以非常輕易的做到這一點(diǎn))。
· 讀、寫、執(zhí)行的權(quán)限說明 1、所謂寫的權(quán)限,也就是對文件修改和刪除的權(quán)限。如果目錄的寫權(quán)限也對你開放了,則可以創(chuàng)建、刪除或修改該目錄下的任何文件或自目錄——即使該文件和子目錄并不屬于你。 2、對目錄有只讀許可的用戶,不能用cd命令進(jìn)入該目錄;還必須同時有執(zhí)行許可才可以進(jìn)入該目錄。 3、必須同時擁有讀和執(zhí)行權(quán)限才可以使用ls這樣的程序列出目錄內(nèi)容清單。 4、只對目錄有執(zhí)行權(quán)限的用戶,想訪問該目錄下的文件有讀權(quán)限的文件,必須知道該文件名才可以訪問。 |