千鋒教育-做有情懷、有良心、有品質的職業教育機構
如果要想說清楚 ln 命令,則必須先解釋下 ext 文件系統(Linux 文件系統)是如何工作的。我們在前面講解了分區的格式化就是寫入文件系統,而我們的 Linux 目前使用的是 ext4 文件系統。如果用一張示意圖來描述 ext4 文件系統,則可以參考圖 1。
圖 1 ext4 文件系統示意圖
ext4 文件系統會把分區主要分為兩大部分(暫時不提超級塊):小部分用于保存文件的 inode (i 節點)信息;剩余的大部分用于保存 block 信息。
inode 的默認大小為 128 Byte,用來記錄文件的權限(r、w、x)、文件的所有者和屬組、文件的大小、文件的狀態改變時間(ctime)、文件的最近一次讀取時間(atime)、文件的最近一次修改時間(mtime)、文件的數據真正保存的 block 編號。每個文件需要占用一個 inode。大家如果仔細查看,就會發現 inode 中是不記錄文件名的,那是因為文件名記錄在文件所在目錄的 block 中。
block 的大小可以是 1KB、2KB、4KB,默認為 4KB。block 用于實際的數據存儲,如果一個 block 放不下數據,則可以占用多個 block。例如,有一個 10KB 的文件需要存儲,則會占用 3 個 block,雖然最后一個 block 不能占滿,但也不能再放入其他文件的數據。這 3 個 block 有可能是連續的,也有可能是分散的。
由此,我們可以知道以下 2 個重要的信息:
每個文件都獨自占用一個 inode,文件內容由 inode 的記錄來指向;
如果想要讀取文件內容,就必須借助目錄中記錄的文件名找到該文件的 inode,才能成功找到文件內容所在的 block 塊;
了解了 Linux 系統底層文件的存儲狀態后,接下來學習 ln 命令。
ln 命令用于給文件創建鏈接,根據 Linux 系統存儲文件的特點,鏈接的方式分為以下 2 種:
軟鏈接:類似于 Windows 系統中給文件創建快捷方式,即產生一個特殊的文件,該文件用來指向另一個文件,此鏈接方式同樣適用于目錄。
硬鏈接:我們知道,文件的基本信息都存儲在 inode 中,而硬鏈接指的就是給一個文件的 inode 分配多個文件名,通過任何一個文件名,都可以找到此文件的 inode,從而讀取該文件的數據信息。
ln 命令的基本格式如下:
[root@localhost ~]# ln [選項] 源文件 目標文件
選項:
-s:建立軟鏈接文件。如果不加 "-s" 選項,則建立硬鏈接文件;
-f:強制。如果目標文件已經存在,則刪除目標文件后再建立鏈接文件;
【例 1】創建硬鏈接:
[root@localhost ~]# touch cangls
[root@localhost ~]# ln /root/cangls /tmp
#建立硬鏈接文件,目標文件沒有寫文件名,會和原名一致
#也就是/tmp/cangls 是硬鏈接文件
【例 2】創建軟鏈接:
[root@localhost ~]# touch bols
[root@localhost ~]# In -s /root/bols /tmp
#建立軟鏈接文件
這里需要注意的是,軟鏈接文件的源文件必須寫成絕對路徑,而不能寫成相對路徑(硬鏈接沒有這樣的要求);否則軟鏈接文件會報錯。這是初學者非常容易犯的錯誤。
相關推薦