實例講解Linux系統(tǒng)中硬鏈接與軟鏈接的創(chuàng)建

首先要弄清楚,在Linux系統(tǒng)中,內(nèi)核為每一個新創(chuàng)建的文件分配一個Inode(索引結(jié)點),每個文件都有一個惟一的inode號。文件屬性保存在索引結(jié)點里,在訪問文件時,索引結(jié)點被復(fù)制到內(nèi)存在,從而實現(xiàn)文件的快速訪問。
鏈接是一種在共享文件和訪問它的用戶的若干目錄項之間建立聯(lián)系的一種方法。Linux中包括兩種鏈接:硬鏈接(Hard Link)和軟鏈接(Soft Link),軟鏈接又稱為符號鏈接(Symbolic link)。
一、硬鏈接
硬鏈接說白了是一個指針,指向文件索引節(jié)點,系統(tǒng)并不為它重新分配inode??梢杂?ln命令來建立硬鏈接。語法:
ln [options] existingfile newfile
ln[options] existingfile-list directory
用法: 第一種:為”existingfile”創(chuàng)建硬鏈接,文件名為”newfile”。第二種:在”directory”目錄中,為 ”existingfile-list”中包含的所有文件創(chuàng)建一個同名的硬鏈接。常用可選[options] –f 無論”newfile”存在與否,都創(chuàng)建鏈接。-n 如果”newfile”已存在,就不創(chuàng)建鏈接。
下面舉一些例子:
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 1 longcheng longcheng 57 8月 5 16:40 file2
$ ln file2 file2hard
$ ls –il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard
注意在創(chuàng)建鏈接前,file1 顯示的鏈接數(shù)目為1,創(chuàng)建鏈接后(1)file1和file1hard的鏈接數(shù)目都變?yōu)?;(2) file1和file1hard在inode號是一樣的(3) file1和file1hard顯示的文件大小也是一樣??梢娺M行了ln命令的操作結(jié)果:file1和file1hard是同一個文件的兩個名字,它們具 有同樣的索引節(jié)點號和文件屬性,建立文件file1的硬鏈接,就是為file1的文件索引節(jié)點在當前目錄上建立一個新指針。
鏈接數(shù)同時減一,只有將所有指向文件內(nèi)容的指針,也即鏈接數(shù)減為0時,內(nèi)核才會把文件內(nèi)容從磁盤上刪除。當前目錄邏輯結(jié)構(gòu):(不好意思圖沒有顯示出來)。
還可以在不同目錄,但同一文件系統(tǒng)中建立文件的硬鏈接。設(shè)file1、file2在目錄/home/longcheng/dir1中,下面的命令,在/home/longcheng中建立file2的硬鏈接。
ln file2 /home/longcheng/file2hard
下面的程序,是將dir1目錄中所有文件,在目錄dir2中建立硬鏈接
$mkdir dir2
$ln /home/longcheng/dir1/* /home/longcheng/dir2
如果使用了 ln –f existingfile newfile,如果newfile已經(jīng)存在,則無論原來newfile是什么文件,只用當前用戶對它有寫權(quán)限,newfile就成為exisitngfile的硬鏈接文件。
盡管硬鏈接節(jié)省空間,也是Linux系統(tǒng)整合文件系統(tǒng)的傳統(tǒng)方式,但是存在一下不足之處:
(1)不可以在不同文件系統(tǒng)的文件間建立鏈接
(2)只有超級用戶才可以為目錄創(chuàng)建硬鏈接。雖然很多樹上說root用戶可以創(chuàng)建,但是筆者在學習過程中發(fā)現(xiàn)即使是root用戶也不能創(chuàng)建,我的系統(tǒng)是Redhat,內(nèi)核2.4、2.6都試過,在其他系統(tǒng)中不知道是不是可以。
二、軟鏈接(符號鏈接)
軟鏈接克服了硬鏈接的不足,沒有任何文件系統(tǒng)的限制,任何用戶可以創(chuàng)建指向目錄的符號鏈接。因而現(xiàn)在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網(wǎng)絡(luò)對文件進行鏈接。
建立軟鏈接,只要在ln后面加上選項 –s,下面舉個例子
$ ls -il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard
$ln –s file1 file1soft
$ls -il
13058 -rwx - - - - - - 1 longcheng longcheng 48 8月 5 16:38 file1
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2
13059 -rwx - - - - - - 2 longcheng longcheng 57 8月 5 16:40 file2hard
13061 lrwxrwxrwx 1 longcheng longcheng 5 8月 5 16:58 file1soft->file1
從上面鏈接后的結(jié)果可以看出來軟鏈接與硬鏈接,區(qū)別不僅僅是在概念上,在實現(xiàn)上也是不同的。區(qū)別:硬鏈接原文件&鏈接文件公用一個inode號,說明他 們是同一個文件,而軟鏈接原文件&鏈接文件擁有不同的inode號,表明他們是兩個不同的文件;在文件屬性上軟鏈接明確寫出了是鏈接文件,而硬鏈接沒有寫 出來,因為在本質(zhì)上硬鏈接文件和原文件是完全平等關(guān)系;鏈接數(shù)目是不一樣的,軟鏈接的鏈接數(shù)目不會增加;文件大小是不一樣的,硬鏈接文件顯示的大小是跟原 文件是一樣的,這用強調(diào),因為是等同的嘛,而這里軟鏈接顯示的大小與原文件就不同了,file1大小是48B,而file1soft是5B,這里面的5實 際上就是“file1”的大小。
總之,建立軟鏈接就是建立了一個新文件。當訪問鏈接文件時,系統(tǒng)就會發(fā)現(xiàn)他是個鏈接文件,它讀取鏈接文件找到真正要訪問的文件。
在不同系統(tǒng)之間建立軟鏈接、對目錄建立鏈接,這里就不舉例了,讀者可以自己去嘗試,我也是在不斷實踐中學習的。
當然軟鏈接也有硬鏈接沒有的缺點,因為鏈接文件包含有原文件的路徑信息,所以當原文件從一個目錄下移到其他目錄中,再訪問鏈接文件,系統(tǒng)就找不到 了~~,而硬鏈接就沒有這個缺陷,你想怎么移就怎么移(呵呵);還有它要系統(tǒng)分配額外的空間用于建立新的索引節(jié)點和保存原文件的路徑。
補充一下:可以通過symlink來查看鏈接文件,可以用 man symlink來學習。
相關(guān)文章
Linux中文件與目錄對應(yīng)的硬鏈接與軟鏈接方式總結(jié)
Linux中內(nèi)核會為文件分配inode節(jié)點,而硬鏈接和軟鏈接的一大不同就是是否重新分配inode,這里我們就來做一個Linux中文件與目錄對應(yīng)的硬鏈接與軟鏈接方式總結(jié),需要的朋友可以2016-06-07Linux系統(tǒng)中l(wèi)n命令創(chuàng)建軟鏈接與硬鏈接的方法
這篇文章主要介紹了Linux系統(tǒng)中l(wèi)n命令創(chuàng)建軟鏈接與硬鏈接的方法,文中對軟鏈接與硬鏈接的概念有簡單明了的講解,需要的朋友可以參考下2016-04-18Linux給文件或目錄創(chuàng)建軟鏈接或硬鏈接的方法
想給電腦中的文件或目錄創(chuàng)建軟鏈接或硬鏈接,但很多用戶都不知道,因此下面為大家普及下,在各種情況下都給予適當?shù)姆椒?/div> 2015-04-28Linux給文件或目錄創(chuàng)建軟鏈接、硬鏈接簡潔指南
這篇文章主要介紹了Linux給文件或目錄創(chuàng)建軟鏈接、硬鏈接簡潔指南,本文用簡潔的語言講解了ln命令的使用,需要的朋友可以參考下2015-04-09Linux系統(tǒng)中什么是軟鏈接什么是硬鏈接如何辨別
Linux系統(tǒng)中什么是軟鏈接,什么是硬鏈接,下面為大家做個Linux系統(tǒng)的軟鏈接和硬鏈接的比較,感興趣的朋友可以看看2014-12-28這篇文章主要介紹了linux系統(tǒng)的軟連接和硬鏈接,需要的朋友可以參考下2014-04-29linux命令大全之ln命令詳解(創(chuàng)建軟鏈接和硬鏈接)
ln是linux中又一個非常重要命令,它的功能是為某一個文件在另外一個位置建立一個同步的鏈接,分為軟鏈接、硬鏈接。軟鏈接相當于windows的快捷方式,下面是使用方法和示例2014-04-09linux創(chuàng)建符號鏈接的方法(硬鏈接和符號鏈接)
這篇文章主要介紹了linux創(chuàng)建符號鏈接的方法(硬鏈接和符號鏈接),需要的朋友可以參考下2014-04-02Linux查看文件內(nèi)容、創(chuàng)建、查看軟硬鏈接命令示例
查看文件內(nèi)容、創(chuàng)建軟連接、創(chuàng)建硬鏈接等命令在操作過程中還是比較常見的,具體示例如下,感興趣的朋友可以參考下,希望可以幫助到你2013-05-03在學習linux的過程中,我經(jīng)常把軟硬鏈接,所以今天專門查了一些資料,然后整合在自己的博客中,方便以后復(fù)習,需要的朋友可以參考下2012-11-20最新評論