Linux文件管理使用方法教程
Linux繼承了Unix以網(wǎng)絡(luò)為核心的設(shè)計(jì)思想,是一個(gè)性能穩(wěn)定的多用戶網(wǎng)絡(luò)操作系統(tǒng)。Linux對(duì)文件管理可能很多用戶不太熟悉,這篇文章主要為大家詳細(xì)介紹了Linux文件管理的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
路徑與文件簡(jiǎn)介
文件被組織到文件系統(tǒng)(file system)中,通常會(huì)成為一個(gè)樹狀(tree)結(jié)構(gòu)。Linux有一個(gè)根目錄/, 也就是樹狀結(jié)構(gòu)的最頂端。這個(gè)樹的分叉的最末端都代表一個(gè)文件,而這個(gè)樹的分叉處則是一個(gè)目錄(directory, 相當(dāng)于我們?cè)趙indows界面中看到的文件夾)。在圖1中看到的是整個(gè)的一個(gè)文件樹。如果我們從該樹中截取一部分,比如說(shuō)從目錄vamei開始往下,實(shí)際上也構(gòu)成一個(gè)文件系統(tǒng)。
要找到一個(gè)文件,除了要知道該文件的文件名,還需要知道從樹根到該文件的所有目錄名。從根目錄開始的所有途徑的目錄名和文件名構(gòu)成一個(gè)路徑(path)。比如說(shuō),我們?cè)贚inux中尋找一個(gè)文件file.txt,不僅要知道文件名(file.txt),還要知道完整路徑,也就是絕對(duì)路徑(/home/vamei/doc/file.txt)。從根目錄錄/, 也就是樹狀結(jié)構(gòu)的最頂端出發(fā),經(jīng)過(guò)目錄home, vamei, doc,最終才看到文件file.txt。整個(gè)文件系統(tǒng)層層分級(jí)(hierarchy),vamei是home的子目錄,而home是vamei的父目錄。
在Linux中,我們用ls命令來(lái)顯示目錄下的所有文件,比如 $ls /home/vamei/doc
如該圖中所示的文件系統(tǒng),即綠色構(gòu)成的樹。最頂端的根目錄(/),沿紅色箭頭標(biāo)出的路徑,我們最終找到文件file.txt。
目錄
在Linux系統(tǒng)中,目錄也是一種文件。所以/home/vamei是指向目錄文件vamei的絕對(duì)路徑。
這個(gè)文件中至少包含有以下條目:
. 指向當(dāng)前目錄
.. 指向父目錄
除此之外,目錄文件中還包含有屬于該目錄的文件的文件名,比如vamei中就還要有如下條目,指向?qū)儆谠撃夸浀奈募?
doc
movie
photo
Linux解釋一個(gè)絕對(duì)路徑的方式如下:先找到根目錄文件,從該目錄文件中讀取home目錄文件的位置,然后從home文件中讀取vamei的位置……直到找到目錄doc中的file.txt的位置。
由于目錄文件中都有.和..的條目,我們可以在路徑中加入.或者..來(lái)表示當(dāng)前目錄或者父目錄,比如/home/vamei/doc/..與/home/vamei等同。
此外,Linux會(huì)在進(jìn)程中,維護(hù)一個(gè)工作目錄(present working directory)的變量。在shell中,你可以隨時(shí)查詢到到工作目錄(在命令行輸入$pwd)。這是為了省去每次都輸入很長(zhǎng)的絕對(duì)路徑的麻煩。比如說(shuō)我們將工作目錄更改為/home/vamei ($cd /home/vamei),那么此時(shí)我們?cè)偃フ襢ile.txt就可以省去/home/vamei/ ($ls doc/file.txt),這樣得到的路徑叫相對(duì)路徑(relative path),上面的doc/file.txt就是這樣一個(gè)相對(duì)路徑。
當(dāng)文件出現(xiàn)在一個(gè)目錄文件中時(shí),我們就把文件接入到文件系統(tǒng)中,我們稱建立一個(gè)到文件的硬鏈接(hard link)。一個(gè)文件允許出現(xiàn)在多個(gè)目錄中,這樣,它就有多個(gè)硬鏈接。當(dāng)硬鏈接的數(shù)目(link count)降為0時(shí),文件會(huì)被Linux刪除。所以很多時(shí)候,unlink與remove在Linux操作系統(tǒng)中是一個(gè)意思。由于軟鏈接(soft link)的廣泛使用(soft link不會(huì)影響link count,而且可以跨越文件系統(tǒng)),現(xiàn)在較少手動(dòng)建立硬連接。
文件操作
對(duì)于文件,我們可以讀取(read),寫入(write)和運(yùn)行(execute)。讀取是從已經(jīng)存在的文件中獲得數(shù)據(jù)。寫入是向新的文件或者舊的文件寫入數(shù)據(jù)。如果文件儲(chǔ)存的是可執(zhí)行的二進(jìn)制碼,那么它可以被載入內(nèi)存,作為一個(gè)程序運(yùn)行。在Linux的文件系統(tǒng)中,如果某個(gè)用戶想對(duì)某個(gè)文件執(zhí)行某一種操作,那么該用戶必須擁有對(duì)該文件進(jìn)行這一操作的權(quán)限。文件權(quán)限的信息保存在文件信息(metadata)中, 見下一節(jié)。
文件附加信息 (metadata)
文件自身包含的只有數(shù)據(jù)。文件名實(shí)際上儲(chǔ)存在目錄文件。除了這些之外,還有操作系統(tǒng)維護(hù)的文件附加信息,比如文件類型,文件尺寸,文件權(quán)限,文件修改時(shí)間,文件讀取時(shí)間等??梢杂胠s命令查詢文件信息($ls -l file.txt),得到如下結(jié)果:
-rw-r--r-- 1 vamei vamei 8445 Sep 8 07:33 file1.txt
各個(gè)部分的含義如下:
我們先介紹最開始的-,它表示文件類型,說(shuō)明file1.txt是常規(guī)文件(如果是目錄文件,則應(yīng)顯示d)。
隨后有九個(gè)字符,為rw-r--r--,它們用于表示文件權(quán)限。這九個(gè)字符分為三組,rw-, r--, r--,分別對(duì)應(yīng)擁有者(owner),擁有組(owner group)和所有其他人(other)?;仡橪inux開機(jī)啟動(dòng),登錄后,我會(huì)有一個(gè)用戶身份和一個(gè)組身份, 相當(dāng)于我的名片。第一組表示,如果我的名片上的用戶身份證明我是該文件的擁有者,那么我就可以對(duì)該文件有讀取(r),寫入(w)該文件的權(quán)限,但不擁有執(zhí)行(-,如果擁有執(zhí)行權(quán)限,則為x)該文件的權(quán)限。第二組表示,如果我的名片上的組身份證明我所在的組是該文件的擁有組的一員,那么我有從該文件讀入的權(quán)限。第三組表示,如果我的名片顯示我既不是擁有者,也不是擁有組的一員,那么我只有讀入的權(quán)限。當(dāng)我想要進(jìn)行一個(gè)讀取操作時(shí),Linux會(huì)先看我是否是擁有者下文會(huì)進(jìn)一步解釋擁有者和擁有組。
后面的1是硬連接(hard link)數(shù)目(link count)。
之后的vamei表示用戶vamei是文件的擁有者(owner),文件的擁有者有權(quán)更改文件權(quán)限(比如改為rwxrwxrwx)。而后面的vamei文件的擁有組是組vamei。文件的擁有者和擁有組在文件創(chuàng)建時(shí)就附加在文件上(相當(dāng)于給文件上鎖,只有有合適名片的用戶才能打開操作)。要注意,Linux有一個(gè)超級(jí)用戶root (也叫做根用戶),該用戶擁有所有的文件。
隨后的8445表示文件大小,單位為字節(jié)(byte)。
Sep 8 07:33表示文件的上一次寫入的時(shí)間(modification time)。實(shí)際上在文件附加信息中還包含有文件的上一次讀取時(shí)間(access time),沒(méi)有顯示出來(lái)。
軟鏈接 (soft link, or symbolic link)
如上討論硬鏈接時(shí)說(shuō)到的,軟鏈接不會(huì)影響文件的link count。如果還記得windows系統(tǒng)的快捷方式的話,Linux的軟鏈接(soft link,也叫做symbolic link)就是linux的快捷方式。軟鏈接本質(zhì)上是一個(gè)文件,它的文件類型是symbolic link。在這個(gè)文件中,包含有鏈接指向的文件的絕對(duì)路徑。當(dāng)你從這個(gè)文件讀取數(shù)據(jù)時(shí),linux會(huì)把你導(dǎo)向所指向的文件,然后從那個(gè)文件中讀取(就好像你雙擊快捷方式的效果一樣)。軟鏈接可以方便的在任何地方建立,并指向任何一個(gè)絕對(duì)路徑。
軟鏈接本身也是一個(gè)文件,也可以執(zhí)行文件所可以進(jìn)行的操作。當(dāng)我們對(duì)軟鏈接操作時(shí),要注意我們是對(duì)軟鏈接本身操作,還是對(duì)軟鏈接指向的目標(biāo)操作。如果是后者,我們就說(shuō)該操作跟隨鏈接指引(follow the link)。
umask
當(dāng)我們創(chuàng)建文件的時(shí)候,比如使用touch,它會(huì)嘗試將新建文件創(chuàng)建為權(quán)限666,也就是rw-rw-rw-。但操作系統(tǒng)要參照權(quán)限mask來(lái)看是否真正將文件創(chuàng)建為666。權(quán)限mask表示操作系統(tǒng)不允許設(shè)置的權(quán)限位,比如說(shuō)037(----wxrwx)的權(quán)限mask意味著不允許設(shè)置設(shè)置group的wx位和other的rwx位。如果是這個(gè)權(quán)限mask的話,最終的文件權(quán)限是rw-r----- (group的w位和other的rw位被mask)。
我們可以通過(guò)
$umask 022
的方式改變權(quán)限mask。
補(bǔ)充:Linux基本命令
①ls 意為list 列出當(dāng)前文件夾中的文件
-l 顯示文件的屬性 可用ll來(lái)表示
?、赼lias 別名 看看是否有別名的文件
?、踓d dir 跳躍目錄 -P選項(xiàng) 將路徑中的鏈接文件替換成鏈接指向的文件路徑
④pwd 查看當(dāng)前工作的文件夾名 使用-P的選項(xiàng),會(huì)直接進(jìn)入到其中,相當(dāng)于cd
相關(guān)閱讀:Linuxshell腳本不執(zhí)行問(wèn)題實(shí)例分析
shell腳本不執(zhí)行問(wèn)題:某天研發(fā)某同事找我說(shuō)幫他看看他寫的shell腳本,死活不執(zhí)行,報(bào)錯(cuò)。我看了下,腳本很簡(jiǎn)單,也沒(méi)有常規(guī)性的錯(cuò)誤,報(bào)“:badinterpreter:Nosuchfileordirectory”錯(cuò)??催@錯(cuò),我就問(wèn)他是不是在windows下編寫的腳本,然后在上傳到linux服務(wù)器的……果然。原因:在DOS/windows里,文本文件的換行符為rn,而在*nix系統(tǒng)里則為n,所以DOS/Windows里編輯過(guò)的文本文件到了*nix里,每一行都多了個(gè)^M。解決:
1)重新在linux下編寫腳本;
2)vi:%s/r//g:%s/^M//g(^M輸入用Ctrl+v,Ctrl+m)附:sh-x腳本文件名,可以單步執(zhí)行并回顯結(jié)果,有助于排查復(fù)雜腳本問(wèn)題。
Linux文件管理相關(guān)文章:
2.linux下文件夾的創(chuàng)建、復(fù)制、剪切、重命名、清空和刪除命令