新聞中心
引用計(jì)數(shù)是Linux內(nèi)核中一個(gè)基本概念,是實(shí)現(xiàn)對(duì)象回收機(jī)制的一種方式,特別是對(duì)于文件系統(tǒng)中的文件節(jié)點(diǎn),引用計(jì)數(shù)機(jī)制十分重要。本文將深入探討Linux中的引用計(jì)數(shù)機(jī)制。

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括憑祥網(wǎng)站建設(shè)、憑祥網(wǎng)站制作、憑祥網(wǎng)頁(yè)制作以及憑祥網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,憑祥網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到憑祥省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
什么是引用計(jì)數(shù)?
在進(jìn)程創(chuàng)建一個(gè)對(duì)象時(shí),通常會(huì)分配一個(gè)內(nèi)存塊用于存儲(chǔ)對(duì)象的數(shù)據(jù),同時(shí)還會(huì)分配一塊內(nèi)存來(lái)存儲(chǔ)對(duì)象用于管理的數(shù)據(jù),比如訪問(wèn)計(jì)數(shù)器、鎖、指向其他對(duì)象的指針等等。其中,訪問(wèn)計(jì)數(shù)器就是引用計(jì)數(shù),用于記錄當(dāng)前對(duì)象被引用的次數(shù)。
當(dāng)一個(gè)新對(duì)象創(chuàng)建時(shí),引用計(jì)數(shù)通常從1開(kāi)始,表示有一個(gè)對(duì)象指向它。當(dāng)有其他對(duì)象指向它時(shí),它的引用計(jì)數(shù)就會(huì)加1;當(dāng)對(duì)象指向它的其他對(duì)象被釋放時(shí),它的引用計(jì)數(shù)就會(huì)減1。只有當(dāng)引用計(jì)數(shù)降至0時(shí),對(duì)象才會(huì)被銷毀。
在Linux內(nèi)核中,引用計(jì)數(shù)機(jī)制被廣泛使用,比如在文件系統(tǒng)inode節(jié)點(diǎn)、網(wǎng)絡(luò)協(xié)議棧中的套接字、塊設(shè)備中的緩沖區(qū)等等。在這些對(duì)象中,引用計(jì)數(shù)的值可以通過(guò)特殊的API來(lái)獲取和更新。這些API通常包括get()和put()函數(shù)。
在文件系統(tǒng)inodes的引用計(jì)數(shù)中,通常使用i_count字段來(lái)記錄引用計(jì)數(shù)的值。在網(wǎng)絡(luò)協(xié)議棧中的套接字中,使用sk->sk_refcnt來(lái)記錄引用計(jì)數(shù)的值。在塊設(shè)備中的緩沖區(qū)中,使用bh->b_count來(lái)記錄引用計(jì)數(shù)的值。
在Linux內(nèi)核中,引用計(jì)數(shù)通常是通過(guò)讀寫(xiě)鎖來(lái)保護(hù)的。引用計(jì)數(shù)以原子方式更新,以避免并發(fā)訪問(wèn)問(wèn)題。
何時(shí)使用引用計(jì)數(shù)?
在Linux內(nèi)核中,引用計(jì)數(shù)機(jī)制通常用于實(shí)現(xiàn)對(duì)象回收機(jī)制。由于內(nèi)核需要管理大量的對(duì)象,很難利用垃圾回收器來(lái)自動(dòng)處理不再被引用的對(duì)象。因此,在Linux中,內(nèi)存管理和回收通常是在內(nèi)核中手動(dòng)進(jìn)行的。
當(dāng)一個(gè)對(duì)象被創(chuàng)建時(shí),內(nèi)核會(huì)將它添加到相應(yīng)的管理列表中。當(dāng)對(duì)象不再被使用時(shí),內(nèi)核會(huì)將其從管理列表中刪除,并將其內(nèi)存釋放回內(nèi)存池中。
在實(shí)現(xiàn)對(duì)象回收機(jī)制時(shí),引用計(jì)數(shù)機(jī)制是一種特別有用和高效的方法。通過(guò)引用計(jì)數(shù),內(nèi)核可以在對(duì)象不再被使用時(shí)立即釋放其內(nèi)存,而不必等待垃圾回收器進(jìn)行回收。這樣可以大大減少內(nèi)存的使用,提高系統(tǒng)性能。
實(shí)例分析
下面以文件系統(tǒng)inode節(jié)點(diǎn)為例進(jìn)行分析。inode是文件系統(tǒng)中的數(shù)據(jù)結(jié)構(gòu),用于描述文件、目錄和符號(hào)鏈接等類型的對(duì)象。inode節(jié)點(diǎn)包含了文件的元數(shù)據(jù)信息,比如文件大小、創(chuàng)建時(shí)間、修改時(shí)間等等。
在inode節(jié)點(diǎn)中,引用計(jì)數(shù)可以用于實(shí)現(xiàn)文件的刪除和回收。當(dāng)文件被打開(kāi)時(shí),系統(tǒng)會(huì)為該文件的inode節(jié)點(diǎn)增加一個(gè)引用計(jì)數(shù)。當(dāng)文件被關(guān)閉時(shí),引用計(jì)數(shù)會(huì)減1。只有當(dāng)引用計(jì)數(shù)降至0時(shí),該文件的inode節(jié)點(diǎn)才會(huì)被銷毀。
這種引用計(jì)數(shù)機(jī)制可以避免文件被多次刪除。比如,在一個(gè)文件正在被使用時(shí),系統(tǒng)管理員可能希望刪除該文件。這種情況下,如果沒(méi)有引用計(jì)數(shù)機(jī)制,系統(tǒng)可能會(huì)立即刪除該文件。但由于該文件還在被使用,當(dāng)打開(kāi)該文件的進(jìn)程再次訪問(wèn)該文件時(shí),系統(tǒng)會(huì)因找不到該文件而崩潰。因此,使用引用計(jì)數(shù)機(jī)制可以避免這種情況的發(fā)生。
引用計(jì)數(shù)機(jī)制也可以用于避免文件被鏈接到多個(gè)目錄中。當(dāng)一個(gè)文件節(jié)點(diǎn)被鏈接到某個(gè)目錄中時(shí),系統(tǒng)會(huì)為該目錄的inode節(jié)點(diǎn)增加一個(gè)引用計(jì)數(shù)。當(dāng)該文件所在的目錄被刪除時(shí),引用計(jì)數(shù)會(huì)減1。只有當(dāng)引用計(jì)數(shù)降至0時(shí),該目錄的inode節(jié)點(diǎn)才會(huì)被銷毀。這種機(jī)制可以保證系統(tǒng)中同一文件只存在一個(gè)副本,避免文件的重復(fù)。同時(shí),還可以減少目錄的內(nèi)存使用,提高系統(tǒng)性能。
引用計(jì)數(shù)是Linux內(nèi)核中一個(gè)非常重要的概念,用于實(shí)現(xiàn)對(duì)象回收機(jī)制。引用計(jì)數(shù)機(jī)制是一種高效的方法,可以避免垃圾回收器的性能問(wèn)題,同時(shí)也可以避免因?qū)ο蟊欢啻蝿h除而導(dǎo)致系統(tǒng)崩潰等問(wèn)題。
在Linux內(nèi)核中,引用計(jì)數(shù)機(jī)制被廣泛使用,比如在文件系統(tǒng)inode節(jié)點(diǎn)、網(wǎng)絡(luò)協(xié)議棧中的套接字、塊設(shè)備中的緩沖區(qū)等等。想要,需要仔細(xì)研究相關(guān)的API和數(shù)據(jù)結(jié)構(gòu),并嘗試分析其實(shí)際應(yīng)用場(chǎng)景。
相關(guān)問(wèn)題拓展閱讀:
- Linux基本命令
Linux基本命令
# ls -l
總用量 44
-rw——.root —- root07 1 月14 18:18 anaconda-ks.cfg
權(quán)限–引用計(jì)數(shù) 所有者 — 所屬組— 大小– 文件修改時(shí)間 文件名
ls
選項(xiàng):
-a :顯示所有文件
–color=when:支持顏色輸出
-d :顯示目錄信息,而不是目錄下的文件
-h :人性化顯示﹐按照我們習(xí)慣的顯示文件大小
-i :顯示文件的i節(jié)點(diǎn)號(hào)
-l:長(zhǎng)格式顯示
pwd 命令是查詢當(dāng)前所在的目錄的絕對(duì)路徑
選項(xiàng):
-L (默認(rèn)值)打印環(huán)境變量”$PWD”的值,可能為符號(hào)鏈接。
-P 打印當(dāng)前工作目錄的物理位置。
mkdir
是創(chuàng)建目錄的命令
選項(xiàng):
-Z:設(shè)置安全上下文,當(dāng)使用SELinux時(shí)有效;
-m或–mode:建立目錄的同時(shí)設(shè)置目錄的權(quán)限;
-p或–parents:若所要建立目錄的上層目錄目前尚未建立,則會(huì)一并建立上層目錄;
rmdir
是刪除空目錄的命令
-p: 遞歸刪除目錄
touch 是 創(chuàng)建空文件或修改文件的時(shí)間戳
# touch 文件名
-a:或–time=atime或–time=access或–time=use 只更改存取時(shí)間;
-c:或–no-create 不建立任何文件;
-d: 使用指定的日期時(shí)間,而非現(xiàn)在的時(shí)間;
-f:此參數(shù)將忽略不予處理,僅負(fù)責(zé)解決BSD版本touch指令的兼容性問(wèn)題;
-m:或–time=mtime或–time=modify 只更該變動(dòng)時(shí)間;
-r: 把指定文件或目錄的日期時(shí)間,統(tǒng)統(tǒng)設(shè)成和參考文件或目錄的日期時(shí)間相同;
-t: 使用指定的日期時(shí)間,而非現(xiàn)在的時(shí)間;
–help:在線幫助;
–version:顯示版本信息。
stat 是查看文件詳細(xì)信息的命令,而且可以看到文件的這三個(gè)時(shí)間戳
選項(xiàng):
-L:支持符號(hào)連接;
-f:顯示文件系統(tǒng)狀態(tài)而非文件狀態(tài);
-t:以簡(jiǎn)潔方式輸出信息;
cat 命令用來(lái)查看文件內(nèi)容
選項(xiàng):
-A: 相當(dāng)于-vET 選項(xiàng)的整合,用于列出所有隱藏符號(hào)
-E: 列出每行結(jié)尾的回車符$
-n: 顯示行號(hào)
-T: 把 Tab 鍵用^I顯示出來(lái)
-v: 列出特殊字符
more 是分屏顯示文件的命令
less 是分行顯示文件的絕游命令
用less命令顯示文件時(shí),侍宏派用PageUp鍵向上翻頁(yè),用PageDown鍵向下翻頁(yè)。要退出less程序,應(yīng)按Q鍵。
選項(xiàng):
-e:文件內(nèi)容顯示完畢后,自動(dòng)退出;
-f:強(qiáng)制顯示文件;
-g:不加亮顯示搜索到的所有關(guān)鍵詞,僅顯示當(dāng)前顯示的關(guān)鍵字,以提高顯示速度;
-l:搜索時(shí)忽略大小寫(xiě)的差異;
-N:每一行行首顯示行號(hào);
-s:將連續(xù)多個(gè)空行壓縮成一行顯示;
-S:在單行顯示較長(zhǎng)的內(nèi)容,而不換行顯示;
-x:將TAB字符顯示為指定個(gè)數(shù)的空格字符。
head 是用來(lái)顯示文件開(kāi)頭的命令
選項(xiàng):
-c –bytes=NUM顯示前NUM字節(jié);如果NUM前有”-“,那么會(huì)打印除了文件末尾的NUM字節(jié)以外的其他內(nèi)容。
-n, –lines=NUM顯示前NUM行而不是默認(rèn)的10行;如果NUM前有”-“,那么會(huì)打印除了文件末尾的NUM行以外的其他行。
-q, –quiet, –silent 不打印文件名行。
-v, –verbose總是打印文件名行。
-z, –zero-terminated 行終止符為NUL而不是換行符。
tail 是用來(lái)顯示文件末尾的命令
選項(xiàng):
-c, –bytes=NUM 輸出文件尾部的NUM(NUM為整數(shù)老賀)個(gè)字節(jié)內(nèi)容。
-f, –follow 顯示文件最新追加的內(nèi)容?!皀ame”表示以文件名的方式監(jiān)視文件的變化。
-F 與 “–follow=name –retry” 功能相同。
-n, –line=NUM 輸出文件的尾部NUM(NUM位數(shù)字)行內(nèi)容。
–pid= 與“-f”選項(xiàng)連用,當(dāng)指定的進(jìn)程號(hào)的進(jìn)程終止后,自動(dòng)退出tail命令。
-q, –quiet, –silent當(dāng)有多個(gè)文件參數(shù)時(shí),不輸出各個(gè)文件名。
–retry即是在tail命令啟動(dòng)時(shí),文件不可訪問(wèn)或者文件稍后變得不可訪問(wèn),都始終嘗試打開(kāi)文件。使用此選項(xiàng)時(shí)需要與選項(xiàng)“–follow=name”連用。
-s, –sleep-interal= 與“-f”選項(xiàng)連用,指定監(jiān)視文件變化時(shí)間隔的秒數(shù)。
-v, –verbose 當(dāng)有多個(gè)文件參數(shù)時(shí),總是輸出各個(gè)文件名。
ln 是用來(lái)為文件創(chuàng)建鏈接的命令
# ln 源文件 目標(biāo)文件
選項(xiàng):
-s: 建立軟鏈接文件。如果不加“-s”選項(xiàng),則建立硬鏈接文件
-f: 強(qiáng)制。如果目標(biāo)文件已經(jīng)存在,則刪除目標(biāo)文件后再建立鏈接文件
-d, -F, –directory 創(chuàng)建指向目錄的硬鏈接(只適用于超級(jí)用戶)
-f, –force 強(qiáng)行刪除任何已存在的目標(biāo)文件
-i, –interactive覆蓋既有文件之前先詢問(wèn)用戶
-L, –logical 取消引用作為軟鏈接的目標(biāo)
-n, –no-dereference把軟鏈接的目的目錄視為一般文件
-P, –physical直接將硬鏈接到軟鏈接
-r, –relative創(chuàng)建相對(duì)于鏈接位置的軟鏈接
-s, –symbolic對(duì)源文件建立軟鏈接
硬鏈接特征:
源文件和硬鏈接文件擁有相同的 Inode 和 Block
? 修改任意一個(gè)文件,另一個(gè)都改變
? 刪除任意一個(gè)文件,另一個(gè)都能使用
? 硬鏈接標(biāo)記不清,很難確認(rèn)硬鏈接文件位置,不建議使用
? 硬鏈接不能鏈接目錄
? 硬鏈接不能跨分區(qū)
軟鏈接特征:
? 軟鏈接和源文件擁有不同的 Inode 和 Block
? 兩個(gè)文件修改任意一個(gè),另一個(gè)都改變
? 刪除軟鏈接,源文件不受影響;刪除源文件,軟鏈接不能使用
? 軟鏈接沒(méi)有實(shí)際數(shù)據(jù),只保存源文件的 Inode,不論源文件多大,軟鏈接大小不變
? 軟鏈接的權(quán)限是更大權(quán)限 lrwxrwxrwx.,但是由于沒(méi)有實(shí)際數(shù)據(jù),最終訪問(wèn)時(shí)需要參考源文
件權(quán)限
? 軟鏈接可以鏈接目錄
? 軟鏈接可以跨分區(qū)
? 軟鏈接特征明顯,建議使用軟連接
rm 是強(qiáng)大的刪除命令,不僅可以刪除文件,也可以刪除目錄
# rm 文件或目錄
選項(xiàng):
d:直接把欲刪除的目錄的硬連接數(shù)據(jù)刪除成0,刪除該目錄;
-f:強(qiáng)制刪除文件或目錄;
-i:刪除已有文件或目錄之前先詢問(wèn)用戶;
-r:遞歸處理,將指定目錄下的所有文件與子目錄一并處理;
–preserve-root:不對(duì)根目錄進(jìn)行遞歸操作;
-v:顯示指令的詳細(xì)執(zhí)行過(guò)程。
cp 是文件或目錄用于復(fù)制的命令
# cp 源文件 目標(biāo)文件
選項(xiàng):
-a:此參數(shù)的效果和同時(shí)指定”-dpR”參數(shù)相同;
-d:當(dāng)復(fù)制軟鏈接時(shí),把目標(biāo)文件或目錄也建立為軟鏈接,并指向與源文件或目錄連接的原始文件或目錄;
-f:強(qiáng)行復(fù)制文件或目錄,不論目標(biāo)文件或目錄是否已存在;
-i:覆蓋既有文件之前先詢問(wèn)用戶;
-l:對(duì)源文件建立硬連接,而非復(fù)制文件;
-p:保留源文件或目錄的屬性;
-r:遞歸處理,將指定目錄下的所有文件與子目錄一并處理;
-s:對(duì)源文件建立軟鏈接,而非復(fù)制文件;
-u:使用這項(xiàng)參數(shù)后只會(huì)在源文件的更改時(shí)間較目標(biāo)文件更新時(shí)或是名稱相互對(duì)應(yīng)的目標(biāo)文件并不存在時(shí),才復(fù)制文件;
-S:在備份文件時(shí),用指定的后綴“SUFFIX”代替文件的默認(rèn)后綴;
-b:覆蓋已存在的文件目標(biāo)前將目標(biāo)文件備份;
-v:詳細(xì)顯示命令執(zhí)行的操作。
mv 是用來(lái)對(duì)文件或目錄重新命名,或者將文件移動(dòng)至其他目錄
# mv 源文件 目標(biāo)文件
選項(xiàng):
-b:當(dāng)文件存在時(shí),覆蓋前,為其創(chuàng)建一個(gè)備份;
-f:若目標(biāo)文件或目錄與現(xiàn)有的文件或目錄重復(fù),則直接覆蓋現(xiàn)有的文件或目錄;
-i:交互式操作,覆蓋前先行詢問(wèn)用戶,如果源文件與目標(biāo)文件或目標(biāo)目錄中的文件同名,則詢問(wèn)用戶是否覆蓋目標(biāo)文件。用戶輸入”y”,表示將覆蓋目標(biāo)文件;輸入”n”,表示取消對(duì)源文件的移動(dòng)。這樣可以避免誤將文件覆蓋。
–strip-trailing-slashes:刪除源文件中的斜杠“
/
”;
-S:為備份文件指定后綴,而不使用默認(rèn)的后綴;
–target-directory=:指定源文件要移動(dòng)到目標(biāo)目錄;
-u:當(dāng)源文件比目標(biāo)文件新或者目標(biāo)文件不存在時(shí),才執(zhí)行移動(dòng)操作。
# ls -l install.log
-rw-r–r–. 1 root root月:17 install.log
之一列的權(quán)限位如果不計(jì)算最后的“.”,則共有 10 位。
第 2~4 位代表文件所有者的權(quán)限。
chmod 用來(lái)變更文件或目錄的權(quán)限
# chmod 權(quán)限模式 文件名
選項(xiàng):
-c, –changes:當(dāng)文件的權(quán)限更改時(shí)輸出操作信息。
–no-preserve-root:不將’/’特殊化處理,默認(rèn)選項(xiàng)。
–preserve-root:不能在根目錄下遞歸操作。
-f, –silent, –quiet:抑制多數(shù)錯(cuò)誤消息的輸出。
-v, –verbose:無(wú)論文件是否更改了權(quán)限,一律輸出操作信息。
–reference=RFILE:使用參考文件或參考目錄RFILE的權(quán)限來(lái)設(shè)置目標(biāo)文件或目錄的權(quán)限。
-R, –recursive:對(duì)目錄以及目錄下的文件遞歸執(zhí)行更改權(quán)限操作。
用戶身份
首先,讀、寫(xiě)、執(zhí)行權(quán)限對(duì)文件和目錄的作用是不同的。
目錄的可用權(quán)限其實(shí)只有以下幾個(gè)。
chown 是修改文件和目錄的所有者和所屬組的命令
# chown 所有者:所屬組 文件或目錄
選項(xiàng):
-c或——changes:效果類似“-v”參數(shù),但僅回報(bào)更改的部分;
-f或–quite或——silent:不顯示錯(cuò)誤信息;
-h或–no-dereference:只對(duì)軟鏈接的文件作修改,而不更改其他任何相關(guān)文件;
-R或——recursive:遞歸處理,將指定目錄下的所有文件及子目錄一并處理;
-v或——version:顯示指令執(zhí)行過(guò)程;
–reference=:把指定文件或目錄的擁有者與所屬群組全部設(shè)成和參考文件或目錄的擁有者與所屬群組相同;
普通用戶不能修改文件的所有者,哪怕自己是這個(gè)文件的所有者也不行
普通用戶可以修改所有者是自己的文件的權(quán)限
chgrp 是修改文件和目錄的所屬組的命令
# chgrp 所屬組 文件或目錄
-R 遞歸式地改變指定目錄及其下的所有子目錄和文件的所屬的組
-c或——changes:效果類似“-v”參數(shù),但僅回報(bào)更改的部分;
-f或–quiet或——silent:不顯示錯(cuò)誤信息;
-h或–no-dereference:只對(duì)符號(hào)連接的文件作修改,而不是該其他任何相關(guān)文件;
-H如果命令行參數(shù)是一個(gè)通到目錄的軟鏈接,則遍歷軟鏈接
-R或——recursive:遞歸處理,將指令目錄下的所有文件及子目錄一并處理;
-L:遍歷每一個(gè)遇到的通到目錄的軟鏈接
-P:不遍歷任何符號(hào)鏈接(默認(rèn))
-v或——verbose:顯示指令執(zhí)行過(guò)程;
–reference=:把指定文件或目錄的所屬群組全部設(shè)成和參考文件或目錄的所屬群組相同;
umask 是顯示或設(shè)置創(chuàng)建文件的權(quán)限掩碼。我們需要先了解一下新建文件和目錄的默認(rèn)更大權(quán)限。
linux 引用計(jì)數(shù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux 引用計(jì)數(shù),深入理解Linux引用計(jì)數(shù)機(jī)制,Linux基本命令的信息別忘了在本站進(jìn)行查找喔。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開(kāi)通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過(guò)10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機(jī)、網(wǎng)站系統(tǒng)開(kāi)發(fā)經(jīng)驗(yàn)。專業(yè)提供云主機(jī)、虛擬主機(jī)、域名注冊(cè)、VPS主機(jī)、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)頁(yè)題目:深入理解Linux引用計(jì)數(shù)機(jī)制(linux引用計(jì)數(shù))
網(wǎng)頁(yè)路徑:http://www.5511xx.com/article/dpoeieh.html


咨詢
建站咨詢
