作為一名電腦使用者,不懂圖形化操作檔案系統就不算會使用電腦。那麼作為一名程式設計師,如果不懂命令列操作 linux 檔案系統,就不敢說自己是一名合格的程式設計師。我們工作中使用 unix / linux 作為應用程式伺服器,無非就是把我們編寫好的軟體部署到遠端伺服器,其中少不了對檔案的各種操作,如果你不會操作檔案那麼將寸步難行。接下來我們來認識一下 unix / linux 檔案系統。
在這裡我們將討論面向本地磁碟的檔案系統(硬碟,cd-rom,***-rom,usb)。這類檔案系統ufs(unix file system),fat(file allocation file 通常是 windows 和 dos 系統的檔案系統),ntfs(new technology file system,通常是 windows nt,2000,xp 的檔案系統),udf(universal disk formt 通常是 *** 檔案系統),hfs+(hierarchical file system 分級檔案系統,例如 mac os x),iso9660 通常為 cd-rom 檔案系統 和 ext2 擴充套件檔案系統(它是 linux 預設的核心檔案系統)等等。
說了這麼多,那我們使用的虛擬機器中的 centos 7 使用的是什麼型別的檔案系統呢?使用 df -t 來檢視一下。
從 type 一列我們看到它使用了 xfs 檔案系統,這是一種高效能的日誌檔案系統,誕生於 1993 年,在 2000 年被移植到 linux 系統上。上面介紹的都是面向磁碟的本地檔案系統,其實還有面向網路的和臨時的虛擬檔案系統,例如上圖中的 tmpfs 就是一種面向記憶體的臨時檔案系統。
要想熟練操作檔案就必須了解系統的目錄結構,unix / linux 使用分層的檔案系統結構,"/" 是檔案系統的根基,其他的所有的目錄都是從這裡開始。我們使用 tree 命令來檢視從根目錄開始的目錄結構,只顯示一層深度。如下:
要想操作檔案,必須先學會檔案系統的導航。接下來了解幾個常用的導航命令吧!
也許你已經注意到了,用 ls 命令列出來的檔案中的最左邊有一些資訊。例如 drwxr-xr-x,第一位代表的就是檔案的型別,後面的9位代表的檔案的許可權。- 代表這是乙個文字檔案,或者可執行檔案。b 代表這是乙個塊檔案,例如硬碟。c 字元裝置檔案,如硬碟。d 代表這是乙個目錄檔案。l 代表這是乙個符號鏈結,可以理解為 windows 系統中的快捷方式。p 代表這是乙個管道,用於通訊。s 代表這是套接字,用於通訊。由於我們平時操作會用到符號鏈結,因此我們簡要介紹下符號鏈結。unix / linux 使用 inode 來引用檔案而不是檔名,inode 在乙個分割槽中是唯一的。符號鏈結有 2 種,硬鏈結 和 軟連線。首先我們來建立乙個檔案,然後分別為它建立乙個硬鏈結和乙個軟連線。
接下來我們分別對原始檔,硬鏈結,軟鏈結進行寫入操作,我們會發現,對它們中任何的乙個的寫入操作在其他的上面都會反映出來。
既然效果都一樣,那麼軟鏈結和硬鏈結究竟有什麼區別呢?硬鏈結使用 inode 來實現,軟鏈結使用檔名來實現。因此,如果我們刪除 file 檔案,然後建立乙個新的 file 檔案。此時我們的軟鏈結是依然生效的,而硬鏈結已經失效了。如下實驗資料:
我們使用 ls -l 命令檢視檔案的時候,最左邊開始的字串反映了檔案的許可權,如下例:
如上圖我們可以清楚的明白各個使用者對於檔案的許可權在**檢視,那麼對應的 r,w,x 分別就是讀,寫,執行許可權。我們可以使用 chmod(change mode)來更改檔案的許可權,操作的時候有 2 中選擇,一種是使用符號模式,即rwx,另外一種是絕對模式用8 個數字分別代表一種許可權。使用 chmod 使用者(a/u/g/o)+/- 許可權(rwx) 檔名 命令格式來操作檔案許可權,實驗結果:
同時我們也可以使用絕對模式來操作檔案許可權,例如 chmod 777 file,代表所有使用者都用於對 file 檔案的最大操作許可權。絕對模式的數字代表的含義如下:
0 無許可權,1 執行許可權,2 寫入許可權,3 執行和寫入許可權,4 讀取許可權,5 讀取和執行許可權,6 讀取和寫入許可權,7所有許可權。此處留一道腦筋急轉彎,為啥不用 3 代表 讀取許可權呢?
程式出錯以後難免要去檢視日誌檔案,此時檢視檔案的命令就尤為重要。我們可以使用 cat,more,less,head,tail等命令檢視檔案內容。cat 將內容一股腦全部列印在螢幕上,不適合檢視內容多的檔案。此時使用 more 就可以,檢視完後按 enter 鍵,繼續顯示下一行,less 命令更加強大,可以使用 上下方向鍵來移動。head 檢視檔案頭部的內容,tail檢視尾部的內容。在檢視一些不斷輸出的日誌檔案時候,我們可以使用 tail -f 命令來不斷重新整理顯示的內容。
如果有個笨蛋程式設計師寫了乙個死迴圈的程式,那麼避免不了產生乙個超級大日誌檔案撐爆伺服器。那麼我們如何檢視分割槽的空間使用率呢?df(disk free)顯示磁碟使用情況,例如:df -k
掌握以上命令以後,我們已經可以對 unix / linux 系統的檔案一頓操作了,但是強大的系統遠不止這點命令,就讓我們在實戰的過程中,邊用邊學習吧。
Unix Linux 檔案系統 檔案建立流程
i.儲存屬性 找到空的i節點,記錄檔案資訊 ii.儲存資料 核心從自由塊列表中選擇合適數量的自由塊,按一定順序 向塊中寫入資料 iii.記錄分配情況 在i節點的磁碟分布區中記錄寫入資料的塊的編號 iv.寫目錄 把i節點號和檔案名字的組合新增到目錄檔案 下面是幾個相關概念 i節點 磁碟和作業系統之間互...
檔案系統 why檔案系統
為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...
檔案系統 檔案系統的架構
vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...