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