linux 下的連線型別

pingley發表於2012-03-30
linux 下的連線型別
符號連線(symbolic link)
符號連線的本質是建立一個新的檔案,當系統核心遇到一個符號連線的時候,會根據符號連線
檔案中inode 提供的檔名,再次進行路徑解析。因為符號連線沒有參照目標檔案的inode,
所以符號連線可以跨越檔案系統,並且指向任何的檔案,甚至是不存在的檔案。因為符號連線
的限制比硬連線少所以用的比較多。但是不管是硬連線還是軟連線都應該在需要的時候才去
建立。對於符號連線,因為是以檔案的形式存在,所以需要消耗磁碟空間(給檔案分配inode,block).
另外使用符號連線會增加核心將檔名(路徑名)轉換成inode 的開銷。因為使用符號連線需要
進行兩次路徑解析才能最終確定目標檔案的inode。
連線檔案的建立的語法格式:
ln -s {target-filename} {symbolic-filename}
-s 表示symbolic link.
[oracle@zeng ~]$ ln -s  /opt/oracle11g/admin ora_admin
[oracle@zeng ~]$ ll -i ora_admin
810434 lrwxrwxrwx. 1 oracle oinstall 20 Mar 30 15:29 ora_admin -> /opt/oracle11g/admin
[oracle@zeng ~]$ cd ora_admin/
[oracle@zeng ora_admin]$ pwd
因為我比較經常的進入/opt/oracle11g/admin 目錄,所以我會之建立一個連線檔案。這樣我就
可以更加方便的進入目標目錄了。另外我們可以很清楚的看到連線檔案連線到那個目標檔案。
刪除符號連線不會刪除目標檔案。
[oracle@zeng ~]$ rm ora_admin
[oracle@zeng ~]$ cd /opt/oracle11g/admin
[oracle@zeng admin]$ pwd
先建立兩個空檔案用以測試。
[oracle@zeng ~]$ touch linkfile1
[oracle@zeng ~]$ ln -s linkfile1 linkfile2
inode 都是1 也就是說linkfile2 是沒有參照linkfile1 的inode 的。
[oracle@zeng ~]$ ll -i linkfile*
810434 -rw-r--r--. 1 oracle oinstall 0 Mar 30 15:37 linkfile1
810671 lrwxrwxrwx. 1 oracle oinstall 9 Mar 30 15:37 linkfile2 -> linkfile1
當刪除目標檔案以後,linkfile2 指向目標檔案是會亮警告色的(閃動的紅色)。
[oracle@zeng ~]$ rm linkfile1
[oracle@zeng ~]$ ll -i linkfile*
810671 lrwxrwxrwx. 1 oracle oinstall 9 Mar 30 15:37 linkfile2 -> linkfile1
硬連線(hard link)
硬連線的本質是建立一個目錄項指向存放實際檔案資訊的inode。也就是說多個檔案同時指向
一個inode。當對目標檔案建立了硬連線以後,inode 目標檔案與硬連線檔案中的inode 數都
將加1.刪除硬連線inode 計數將會減1.因為硬連線檔案是參照目標檔案的inode 的,所有不能
跨越檔案系統建立硬連線檔案。不過硬連線檔案比符號連線讀寫的時候要高效。硬連線一般是
不會引入儲存開銷的,因為他只是一個目錄項而已。
硬連線建立語法格式:
ln  {target-filename} {symbolic-filename}
注:不能建立目錄的硬連線。
先來檢視下為建立硬連線前目標檔案的inode 計數。
[oracle@zeng ~]$ ll -i /opt/oracle11g/diag/rdbms/oracl/oracl/trace/alert_oracl.log  
544202 -rw-r-----. 1 oracle oinstall 43647 Mar 30 13:24 /opt/oracle11g/diag/rdbms/oracl/oracl/trace/alert_oracl.log
[oracle@zeng ~]$ ln /opt/oracle11g/diag/rdbms/oracl/oracl/trace/alert_oracl.log  /home/oracle/oracle_alert.log
檢視建立完硬連線以後目標檔案與硬連線檔案的inode 計數。
[oracle@zeng ~]$ ll -i /opt/oracle11g/diag/rdbms/oracl/oracl/trace/alert_oracl.log  /home/oracle/oracle_alert.log
544202 -rw-r-----. 2 oracle oinstall 43647 Mar 30 13:24 /home/oracle/oracle_alert.log
544202 -rw-r-----. 2 oracle oinstall 43647 Mar 30 13:24 /opt/oracle11g/diag/rdbms/oracl/oracl/trace/alert_oracl.log
另外硬連線更加的安全因為將目標檔案刪除與硬連線檔案其中之一刪除,檔案實際上還是存在的。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-719939/,如需轉載,請註明出處,否則將追究法律責任。

相關文章