青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

The Way of C++

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  55 Posts :: 0 Stories :: 19 Comments :: 0 Trackbacks

公告

The first time i use this blog, i will write something that i learn which i think is worth write down.

常用鏈接

留言簿(3)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜


總結如下:

硬鏈接:在磁盤上有一份內容一樣的文件產生,但不改變文件的Inode,也就是與原文件共用Inode,

軟鏈接:不在磁盤上有一份內容一樣的文件產生(),但產生新的Inode,

文件復制:產生新的文件內容,并且使用新的Inode.

簡單的說軟鏈接相當于快捷方式。

一張粗糙的簡圖:

文件a <-- b(文件a的軟鏈接)                 文件a          

    |                                                   |
    |                                                   |

inode                                       inode <-- b(文件a的硬鏈接)

|                                             |

硬盤                                         硬盤


文件a ------------->copy          b(復制文件a)          

    |                                       |
    |                                       |

inode                             inode

|                                  |

硬盤                               硬盤


鏈接是一種在共享文件和訪問它的用戶的若干目錄項之間建立聯系的一種方法。Linux中包括兩種鏈接:硬鏈接(Hard Link)和軟鏈接(Soft Link),軟鏈接又稱為符號鏈接(Symbolic link)。

一、硬鏈接

硬鏈接說白了是一個指針,指向文件索引節點,系統并不為它重新分配inode。可以用:ln命令來建立硬鏈接。語法:

ln [options] existingfile newfile
ln[options] existingfile-list directory

用法: 第一種:為”existingfile”創建硬鏈接,文件名為”newfile”。第二種:在”directory”目錄中,為 ”existingfile-list”中包含的所有文件創建一個同名的硬鏈接。常用可選[options] –f 無論”newfile”存在與否,都創建鏈接。-n 如果”newfile”已存在,就不創建鏈接。

下面舉一些例子:

$ 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

注意在創建鏈接前,file1 顯示的鏈接數目為1,創建鏈接后(1)file1和file1hard的鏈接數目都變為2;(2) file1和file1hard在inode號是一樣的(3) file1和file1hard顯示的文件大小也是一樣。可見進行了ln命令的操作結果:file1和file1hard是同一個文件的兩個名字,它們具有同樣的索引節點號和文件屬性,建立文件file1的硬鏈接,就是為file1的文件索引節點在當前目錄上建立一個新指針。如下圖,你可以刪除其中任何一個,如rm file2 ,每次只會刪除一個指針,

鏈接數同時減一,只有將所有指向文件內容的指針,也即鏈接數減為0時,內核才會把文件內容從磁盤上刪除。當前目錄邏輯結構:(不好意思圖沒有顯示出來)。

還可以在不同目錄,但同一文件系統中建立文件的硬鏈接。設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已經存在,則無論原來newfile是什么文件,只用當前用戶對它有寫權限,newfile就成為exisitngfile的硬鏈接文件。

盡管硬鏈接節省空間,也是Linux系統整合文件系統的傳統方式,但是存在一下不足之處:(1)不可以在不同文件系統的文件間建立鏈接(2)只有超級用戶才可以為目錄創建硬鏈接。雖然很多樹上說root用戶可以創建,但是筆者在學習過程中發現即使是root用戶也不能創建,我的系統是Redhat,內核 2.4、2.6都試過,在其他系統中不知道是不是可以。

二、軟鏈接(符號鏈接)

軟鏈接克服了硬鏈接的不足,沒有任何文件系統的限制,任何用戶可以創建指向目錄的符號鏈接。因而現在更為廣泛使用,它具有更大的靈活性,甚至可以跨越不同機器、不同網絡對文件進行鏈接。

建立軟鏈接,只要在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

從上面鏈接后的結果可以看出來軟鏈接與硬鏈接,區別不僅僅是在概念上,在實現上也是不同的。區別:硬鏈接原文件&鏈接文件公用一個inode號,說明他們是同一個文件,而軟鏈接原文件&鏈接文件擁有不同的inode號,表明他們是兩個不同的文件;在文件屬性上軟鏈接明確寫出了是鏈接文件,而硬鏈接沒有寫出來,因為在本質上硬鏈接文件和原文件是完全平等關系;鏈接數目是不一樣的,軟鏈接的鏈接數目不會增加;文件大小是不一樣的,硬鏈接文件顯示的大小是跟原文件是一樣的,這用強調,因為是等同的嘛,而這里軟鏈接顯示的大小與原文件就不同了,file1大小是48B,而file1soft是5B,這里面的5實際上就是“file1”的大小。

總之,建立軟鏈接就是建立了一個新文件。當訪問鏈接文件時,系統就會發現他是個鏈接文件,它讀取鏈接文件找到真正要訪問的文件。

在不同系統之間建立軟鏈接、對目錄建立鏈接,這里就不舉例了,讀者可以自己去嘗試,我也是在不斷實踐中學習的。

當然軟鏈接也有硬鏈接沒有的缺點,因為鏈接文件包含有原文件的路徑信息,所以當原文件從一個目錄下移到其他目錄中,再訪問鏈接文件,系統就找不到了,而硬鏈接就沒有這個缺陷,你想怎么移就怎么移;還有它要系統分配額外的空間用于建立新的索引節點和保存原文件的路徑。補充一下:可以通過symlink來查看鏈接文件,可以用 man symlink來學習。

索引節點、硬連接和連接計數

索引節點inode:

引用:Linux為每個文件分配一個稱為索引節點的號碼inode,可以將inode簡單理解成一個指針,它永遠指向本文件的具體存儲位置。系統是通過索引節點(而不是文件名)來定位每一個文件。


例如:

假設我們在硬盤當前目錄下建立了一個名為mytext文本文件,其內容只有一行:

This is my file.


1、當然這行文字一定是存儲在磁盤數據區某個具體位置里(物理上要通過磁頭號、柱面號和扇區號來描述,在本例中假設分別是1、20、30)。 



2、假設其inode是262457,那么系統通過一段標準程序,就能將這個inode轉換成存放此文件的具體物理地址(1磁頭、20柱面、30扇區),最終讀出文件的內容:“This is my file.”



3、所以inode是指向一個文件數據區的指針號碼,一個inode對應著系統中唯一的一片物理數據區,而位于兩個不同物理數據區的文件必定分別對應著兩個不同的inode號碼。


文件拷貝命令與硬鏈接的區別:

# cp /home/zyd/mytext newfile


在當前工作目錄建立了一個新文件newfile,其實際操作主要包括如下三步:

引用:1、在當前目錄中增加一個目錄項,其文件名域填入newfile,并分配了一個新的inode,假設是262456。
2、將原文件(在1磁頭、20柱面、30扇區)的內容復制了一份到新的空閑物理塊(假設是1磁頭、20柱面、31扇區)。
3、填寫一些其他關鍵信息,使系統通過這些信息及inode號碼可以完成物理地址的轉換。



所以文件復制要分配新的inode和新的數據區,雖然兩個文件的內容是一樣的。


硬連接hardlink:

引用:我們實際使用文件時一般是通過文件名來引用的。通過上面的討論,我們知道:

1個inode號碼肯定和一片完全屬于一個文件的數據區一一對應。那么一個文件系統中兩個或更多個不同的文件名能否對應同一個文件呢?答案是肯定的。

我們知道inode號碼是記錄在文件名對應的目錄項中的,我們可以使兩個或多個文件的目錄項具有相同的inode值,實際上就使它們對應著同一個文件。

有幾個目錄項具有相同的inode號,我們就說這個文件有幾個硬連接(hardlink),

對于普通文件,ls -l命令的連接計數count域的數值就是本文件擁有的硬連接數。硬連接可以通過ln命令建立,



例如:

# ln /home/zyd/mytext hardlink_mytext


就建立了一個新的文件hardlink_mytext,這個文件的inode同樣是262457。建立硬連接實際上只是增加了一個目錄項,但并復制文件數據區,原文件的數據區由兩個文件共享。這一方面能夠節約大量磁盤空間,同時可以保證兩個文件能同步更新。

'ls -il'可以顯示文件的inode(在下面最左邊): 



262456 -rw-rw-r-- 1 zyd zyd 17 Nov 3 14:52 newfile

262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 hardlink_mytext

262457 -rw-rw-r-- 2 zyd zyd 17 Nov 3 14:50 mytext



連接計數count:

前面我們介紹了,文件的連接計數域表明本系統中共有幾個文件目錄項的inode和本文件相同,也就是本文件共有幾個硬連接。如上面的例子中hardlink_mytext和mytext文件的count值都是2。

那么對于目錄,其count域的含義是什么呢?目錄的count同樣表示共有多少個目錄項指向此目錄,不過要詳細說明必須進一步解釋VFS文件系統的結構,為簡單起見,只要這樣理解就行了:(count-2)等于本目錄包含的直接子目錄數(就是只包括兒子,不包括孫子啦!)。

例如:如果一個目錄/abc的count域為5,那么/abc目錄一定包含3個子目錄。



引用:進一步說明:

硬連接文件實際上并不是一種新的文件類型,兩個文件互為對方的硬連接。它們應該都是普通文件(誰能告訴我:其它類型的文件可以硬連接嗎?)。兩個文件除了名稱或/和文件目錄不同外,其它部分完全相同,更改了一個文件,另一個的文件長度、內容、更改時間等都將相應發生變化,更改了一個文件的權限位 mode,另一個也會發生同樣的變化。



引用:注意連接計數字段count,互為硬連接的兩個文件的count值都是2,表明有兩個inode指向同一文件的inode。

當我們刪除其中一個文件時,系統首先將(count-1)->;count,如果結果是零,就將其目錄項和數據區都刪除,否則只將本目錄項刪除,數據區仍然保留,仍然可以通過另外的文件名訪問。根據這個特性,可以通過為重要的文件建立硬連接的方法來防止其被誤刪除。



一個文件系統允許的inode節點數是有限的,如果文件數量太多,即使每個文件都是0字節的空文件,系統最終也會因為節點空間耗盡而不能再創建文件。所以當發現不能建立文件時首先要考慮硬盤數據區是否還有空間(可通過du命令),其次還得檢查節點空間。

引用:互為硬連接的多個文件必須位于同一個文件系統上。根設備及任何一個需要mount才能掛接進來的分區、軟盤、NFS、光驅等都是一個 獨立的文件系統,每個文件系統有一個相應的設備號,不同文件系統中具有相同inode節點的文件間沒有任何聯系。系統則通過設備號和inode號的組合 唯一確定一個文件。


Linux之所以能支持多種文件系統,其實是由于Linux提供了一個虛擬文件系統VFS,VFS作為實際文件系統的上層軟件,掩蓋了實際文件系統底層的具體結構差異,為系統訪問位于不同文件系統的文件提供了一個統一的接 口。

實際上許多文件系統并不具備inode結構,其目錄結構也和以上的討論不同,但通過VFS,系統均為其提供了虛擬一致的inode和目錄項結構。

所以,'ls -il'命令實際顯示的inode應該是VFS inode,也就是說,inode是存在于內存中的數據結構,而不一定是實際的硬盤結構。

但為Linux量身定做的ext2文件系統具備實際的inode和連接型目錄項結構,所以,對于ext2文件系統,可以認為我們上面討論的關于硬連接的概念是完全正確的。

 原文地址 http://blog.chinaunix.net/u2/86586/showart_1679890.html
posted on 2010-03-12 10:48 koson 閱讀(811) 評論(0)  編輯 收藏 引用 所屬分類: Linux
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            狂野欧美激情性xxxx| 欧美午夜宅男影院在线观看| 欧美激情第8页| 麻豆成人在线播放| 免费高清在线一区| 亚洲国产成人不卡| 女女同性女同一区二区三区91| 久久这里只有| 亚洲国产天堂久久国产91| 亚洲美女视频| 欧美一二三视频| 久久亚洲色图| 欧美日韩午夜剧场| 国产专区一区| 一本久久综合亚洲鲁鲁五月天| 亚洲一区在线观看免费观看电影高清| 欧美一二区视频| 免费不卡在线观看| 99精品国产高清一区二区| 亚洲欧美制服中文字幕| 美女日韩欧美| 国产日韩欧美91| 亚洲精品影视在线观看| 欧美亚洲三区| 亚洲国产成人久久| 亚洲欧美综合一区| 欧美乱大交xxxxx| 国产一区二区精品久久91| 亚洲乱亚洲高清| 久久久综合精品| 一级日韩一区在线观看| 久久这里只有精品视频首页| 国产精品mm| 亚洲精品欧美极品| 久久精品91久久香蕉加勒比| 亚洲精品美女| 美女主播视频一区| 国产视频一区在线观看| 9色porny自拍视频一区二区| 久久五月激情| 欧美一级淫片播放口| 欧美日韩在线精品一区二区三区| 尤物精品国产第一福利三区 | 亚洲黄色在线看| 欧美一级成年大片在线观看| 欧美日韩在线高清| 亚洲精品一区二区三区福利| 久久久欧美精品| 亚洲男人的天堂在线aⅴ视频| 欧美国产高清| 最新成人在线| 欧美激情第五页| 久久人人爽爽爽人久久久| 国产一区导航| 久久久免费观看视频| 欧美在线视频观看免费网站| 国产日产精品一区二区三区四区的观看方式 | 欧美在线视屏 | 亚洲私人影院在线观看| 欧美激情一二三区| 久久久亚洲影院你懂的| 国一区二区在线观看| 久久精品人人| 久久精品视频在线播放| 精品动漫3d一区二区三区免费| 久久久亚洲精品一区二区三区| 午夜综合激情| 国产一区二区三区av电影| 久久精品人人做人人综合| 久久国产欧美精品| 亚洲福利视频一区二区| 亚洲国产天堂久久综合| 欧美日韩精品免费观看| 亚洲欧美资源在线| 欧美一区二区在线免费播放| 黄色av日韩| 亚洲高清网站| 国产精品久久久久一区二区| 久久av在线看| 免费人成精品欧美精品| 99国内精品久久| 99这里只有精品| 国产欧美日韩精品专区| 美女久久一区| 欧美日韩aaaaa| 久久精品视频在线看| 久久免费精品视频| 99热这里只有成人精品国产| 亚洲美女av网站| 国产香蕉久久精品综合网| 久久综合九色九九| 欧美精品电影在线| 性做久久久久久久免费看| 久久久视频精品| 亚洲欧美成人一区二区在线电影| 欧美亚洲视频一区二区| 亚洲国产二区| 亚洲国产精品一区二区www| 国产精品日韩专区| 欧美一区二区视频97| 樱桃国产成人精品视频| 亚洲精品在线视频观看| 国产精品女主播| 欧美肥婆在线| 国产精品乱码一区二三区小蝌蚪| 欧美影院成年免费版| 麻豆av一区二区三区久久| 亚洲午夜激情网站| 久久午夜精品| 午夜精品久久久| 欧美精品偷拍| 欧美gay视频激情| 国产精品久久7| 亚洲欧洲精品一区二区| 国语精品一区| 亚洲欧美日韩系列| 亚洲一区二区伦理| 欧美激情一区二区三区不卡| 久久香蕉国产线看观看网| 国产精品www色诱视频| 亚洲福利av| 在线观看亚洲视频| 性高湖久久久久久久久| 亚洲欧美www| 欧美性视频网站| 99在线精品免费视频九九视| 亚洲毛片一区| 欧美激情视频在线免费观看 欧美视频免费一 | 久久人人爽爽爽人久久久| 国产精品大片| 一区二区三欧美| 中文在线资源观看网站视频免费不卡 | 另类天堂av| 另类天堂视频在线观看| 国产视频一区在线观看| 午夜视频在线观看一区二区| 欧美一级久久久| 国产欧美日韩一区| 性欧美暴力猛交另类hd| 久久精品五月| 狠狠色狠色综合曰曰| 久久九九免费视频| 麻豆国产精品777777在线| 在线观看欧美| 欧美福利专区| 亚洲精品国精品久久99热| 一本色道久久88综合日韩精品| 欧美精品在线观看| 亚洲激情中文1区| 亚洲深夜av| 国产精品影院在线观看| 午夜久久资源| 欧美国产亚洲视频| 一区二区日韩伦理片| 国产精品久久久久久一区二区三区| 亚洲综合国产精品| 久久免费的精品国产v∧| 亚洲高清在线| 欧美网站大全在线观看| 亚洲综合欧美| 欧美韩日一区| 亚洲综合电影| 永久免费视频成人| 欧美日韩在线播放一区| 欧美在线啊v| 亚洲经典一区| 久久精品动漫| 99精品欧美一区二区三区| 欧美性做爰毛片| 快播亚洲色图| 这里只有精品视频| 免费美女久久99| 亚洲一区二区三区久久| 在线成人黄色| 国产精品成人aaaaa网站| 久久不射网站| 亚洲精品之草原avav久久| 久久精品国产清高在天天线 | 日韩一本二本av| 国产日韩精品久久久| 欧美成人按摩| 久久成人在线| 一本色道久久88精品综合| 老妇喷水一区二区三区| 一区二区三区欧美在线观看| 激情久久综合| 国产精品久久久99| 欧美高清免费| 久久久久久电影| 亚洲欧美日韩视频二区| 日韩亚洲精品电影| 亚洲福利视频一区| 久久人人97超碰精品888| 亚洲中字在线| 在线综合亚洲欧美在线视频| 91久久精品国产91久久性色tv| 国产亚洲女人久久久久毛片| 国产精品白丝jk黑袜喷水| 欧美精品观看| 欧美大片一区二区|