1. 程式人生 > >Solaris軟連結和硬連結及ls常用引數解釋

Solaris軟連結和硬連結及ls常用引數解釋

筆者最近正在學習Solaris。其實也是菜鳥一個,計劃幾個月之後考SCSA的認證。所以把一些學習心得貼上來,共同研究。可能有些東西確實太小兒科,見諒。

在學習Solaris的目錄繼承結構的時候,很多東西大家都知道了,每個目錄什麼功能,就不細說了。通過閱讀,發現了一個以前沒有注意到的問題:軟連結和硬連結的問題。

連結即link,在Unix和Linux系統中用ln命令,軟連結需要加引數 -s。
 
在說軟硬連結之前需要提到的是檔案的儲存方式,在Solaris中,檔案的儲存方式是由Inode和Data Blocks組成(包括目錄,在Unix系統中,一切皆檔案)。Inode是一個標號,每一個Inode標號對應一個Data Blocks。每一個檔案其實就是與Inode標號相關聯,從而獲得資料的內容。下面就簡單表示了一下file1的關聯模式。file1對應的Inode為3561,其內容就為相對應的Data Blocks中儲存的內容。
file1
——————
|Inode 3561
|
——————
|                      |
|Data Blocks|
|                      |
——————

軟連結其實就像一個指標,例如本地的檔名為Link1,對應的Inode是1228,其Data Bloacks中儲存的內容就是一個指向另一個檔案的指標。例如指向另一個檔案為file1,Inode是3561。

軟連結命令為:ln -s pathname target。
例如實現上例命令為:ln -s link1 file1

硬連結與軟連結有比較大的不同。硬連結是指兩個檔案都指向同一個Inode。所以如果軟連結把link刪掉的話,原檔案file是不會受到影響的,但是如果原檔案file刪掉了,連結link就會失效,因為找不到target了。而硬連結由於兩個檔案都能找到Inode,所以刪掉其中的一個對於另一個沒有任何影響。

Inode是整個檔案系統中很關鍵的部分,它就像一個指標一樣。換句話說,Inode就是一個入口。
我們在用ls命令檢視目錄結構的時候,如果使用-l引數就會看到很多詳細資訊,例如:
#ls -l

total 2
drwxr-xr-x   77   root   sys               4096   Sep   23   08:36   dir
 -rwxr-xr-x    1    user  user            10000  Sep   23   19:11   file

前面是許可權,應該都清楚,不細說。許可權後面跟著的數字就是表示這個檔案和目錄有多少個硬連結。換句話說就是有多少個檔案指向這個Inode。
我們加上引數-i可以看到Inode:
#ls -il dir
21449    drwxr-xr-x   77   root   sys               4096   Sep   23   08:36   dir

在許可權前面的數字就是Inode了。

由此可知,一個檔案最少有一個硬連結,而一個目錄則至少有2個硬連結,一個是目錄本身的入口,另一個是目錄內部的 ".",是在目錄內表示本目錄的入口。所以在目錄內每多一個目錄,就會多一個硬連結,因為子目錄的".." 表示的父目錄的入口。大家可以嘗試一下。

下面列出ls命令常用的引數及功能:
ls
-l       顯示詳細引數
-a      顯示全部檔案,包括隱含檔案
-L      顯示軟連結的目標目錄資訊
-i       顯示Inode
-R     顯示包括繼承的子目錄的資訊
-d      後面根目錄名,只顯示目錄名稱和資訊,不顯示目錄內的資訊。