先說一下文件是怎麼存儲的。文件儲存在硬盤上,硬盤的最小存儲單位叫做"扇區"(Sector),每個扇區儲存512字節(相當於0.5KB)。操作系統讀取硬盤的時候,不會一個個扇區地讀取,而是一次性連續讀取多個扇區,即一次性讀取一個"塊"(block)。"塊"的大小,最常見的是4KB,即8個“扇區”組成一個“塊"。文件數據都儲存在“塊”中,那麼就得有個地方來儲存文件的信息(比如創建者,創建時間等),這個區域就叫“inode”,即索引節點。
當創建一個文件時,系統分配一個inode及能夠裝載文件大小的blocks給它,inode記錄文件的屬性,包括block的位置,block記錄文件內容。
當創建一個目錄時,系統分配一個inode和一個block,若此目錄下的文件過多的話,會開辟一個新的block給它。inode記錄目錄的屬性,block記錄這個目錄下的所有文件和子目錄對應的inode,通過block可以找到某個文件的inode位置,從而找到文件內容。
這裡可以通過“stat +文件名” 的命令來查看文件inode的信息,如下圖:

然而,在硬盤的同一個文件可以通過不同的路徑來訪問它。接下來要講的軟、硬連接就是建立在inode和block的關系之上。
硬連接:一般情況下,一個文件名對就一個inode,但Linux允許多個文件名對應同一個inode,也就是說通過不同的文件名可以訪問同一個內容。刪除一個文件名不影響其它文件名的訪問。語法如下:
[plain]
ln 源文件 目標文件(要創建的文件)
#這裡只能是文件,不可以是目錄
例如:
先查看一下當前一個叫yum.sh文檔的連接數,如圖所示為2

執行添加硬連接的指令:

執行指令之後,在打開目錄可以發現,出現新的文件yum_hLink.sh

再查看yum.sh的連接數,如下圖所示,連接數增加了一個:

軟連接(或符號鏈接):若文件(目錄)A是文件(目錄)B的軟連接,A的內容是B的路徑,想當於A是B的快捷方式。當刪除A時,不影響B的訪問;當刪除B時,就會報錯。
語法:
[plain]
ln -s 源文文件或目錄 目標文件或目錄
#軟連接可以是目錄
例如,test 是一個目錄:

執行指令後,當前目錄下多了一個test_sLink目錄

查看連接數,發現test 目錄的連接數並沒有增加,而test_sLink 以 "->"形式來表示是test的軟連接: