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