您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Linux中軟連接和硬鏈接是什么意思”,內(nèi)容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Linux中軟連接和硬鏈接是什么意思”這篇文章吧。
簡介
我們現(xiàn)代的操作系統(tǒng)需要防止程序崩潰導(dǎo)致信息丟失,需要將信息存儲在文件之中。而且文件能夠被多個(gè)進(jìn)程同時(shí)讀取。在Linux中所以的資源,外設(shè)都抽象成了文件,所以就有了Linux中“一切皆文件”的特性。當(dāng)然有文件,肯定是不夠的,總不能把所有的文件放在一起管理,實(shí)在是太亂,不易管理維護(hù)。Linux就引入了目錄的概念,在Windows中可以稱之為文件夾。目錄的引入就會讓Linux的根文件系統(tǒng)外觀上變成了一個(gè)層次分明的目錄樹。如下圖:
目錄是什么?
在Linux中“一切皆文件”,所以這個(gè)問題很好回答:目錄也是文件。目錄中記錄的是目錄下文件名。那既然是文件,如果在創(chuàng)建目錄的時(shí)候,與當(dāng)前目錄下的文件或目錄重名,就肯定會創(chuàng)建失敗。
好了,既然搞清楚了目錄的概念,我們接著往下看。
硬鏈接和軟連接區(qū)別?
在Linux中表示一個(gè)文件的方式是通過兩個(gè)部分來分別表示的:用戶數(shù)據(jù)(user data)與元數(shù)據(jù)(meta data)。什么是用戶數(shù)據(jù)呢?用戶數(shù)據(jù)就是記錄真實(shí)文件內(nèi)容的數(shù)據(jù),這些數(shù)據(jù)是存放在一個(gè)個(gè)大小相等的文件數(shù)據(jù)塊中(data block)。
元數(shù)據(jù)呢?其實(shí)就是這個(gè)文件的附加信息屬性,例如:創(chuàng)建時(shí)間,文件大小等等這類信息。我們用索引號(inode)來表示每一個(gè)不同文件的元數(shù)據(jù)(當(dāng)然inode也是元數(shù)據(jù)的一部分)。在Linux中,inode才是表示文件的***標(biāo)識,而不是文件名。下圖展示了怎樣通過文件名來找到文件內(nèi)容的。注意:元數(shù)據(jù)中并不包含文件名。文件名只是為了方便用戶識別和記憶罷了。
使用什么命令可以查看inode號?
可以使用stat和ls -i 命令查看,如下圖所示:
什么是硬鏈接?
硬鏈接是指通過索引節(jié)點(diǎn)來進(jìn)行連接。也就是存在多個(gè)文件名指向同一個(gè)inode。這樣就可以將重要的文件建立硬鏈接,來防止“誤刪”的操作。
命令:
link oldfile newfile
可以創(chuàng)建硬鏈接。硬鏈接的inode是相同的,但是文件名不同,所以它有一些特性:
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)
文件有相同的inode和data blocks;
不能對不存在的文件創(chuàng)建硬鏈接
不能跨文件系統(tǒng)創(chuàng)建(因?yàn)樵诟髯晕募到y(tǒng)下inode是***的,當(dāng)跨文件系統(tǒng)就會出現(xiàn)inode重復(fù)的情況發(fā)生)
不能對目錄創(chuàng)建,只能對文件進(jìn)行創(chuàng)建
如果刪除了一個(gè)硬鏈接文件,并不會影響其他的同inode文件(inode中存在鏈接計(jì)數(shù)器,刪除一個(gè)硬鏈接相當(dāng)于計(jì)數(shù)器減一,反之加一。直到為0,刪除inode)
例如:
# ls -li total 0 // 只能對已存在的文件創(chuàng)建硬連接 # link test.file test_hard.link link: cannot create link `test_hard.link' to `test.file': No such file or directory # echo "This is an original file" > test.file # cat test.file This is an original file # stat test.file File: `test.file' Size: 25 Blocks: 8 IO Block: 4096 regular file Device: 807h/2055d Inode: 660650 Links: 2 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) ... // 文件有相同的 inode 號以及 data block # link test.file test_hard.link | ls -li total 8 660650 -rw-r--r-- 2 root root 25 Sep 1 17:44 test_hard.link 660650 -rw-r--r-- 2 root root 25 Sep 1 17:44 test.file // 不能交叉文件系統(tǒng) # ln /dev/input/event5 /root/bfile.txt ln: failed to create test_hard link `/root/bfile.txt' => `/dev/input/event5': Invalid cross-device link // 不能對目錄進(jìn)行創(chuàng)建硬連接 # mkdir -p test.dir/test # ln test.dir/ test_hardlink.dir ln: `test.dir/': test_hard link not allowed for directory # ls -iF 660650 test_hard.link 657948 test.dir/ 660650 test.file
具體的解釋可以參考硬鏈接的5點(diǎn)特性。
什么是軟鏈接?
軟連接就和硬鏈接完全不同,軟連接是用戶數(shù)據(jù)(data blocks)中記錄的是另一個(gè)文件的路徑名的指向。可以理解為軟連接其實(shí)就是一個(gè)普通的文件,只是他的內(nèi)容非常的特殊。所以軟連接有他自己的inode號以及data blocks。那我總結(jié)下軟連接的特性:
鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)
軟連接有自己的文件屬性
可以對不存在的文件創(chuàng)建
軟鏈接可以跨文件系統(tǒng)
軟鏈接可以對目錄創(chuàng)建
軟鏈接創(chuàng)建不會造成鏈接計(jì)數(shù)器增加,因?yàn)榫筒皇峭粋€(gè)inode
若鏈接的文件被刪除了,該鏈接就是沒有意義了,但是也可以重新創(chuàng)建。
下圖展示下軟鏈接的訪問過程:
例如:
# ls -li total 0 // 可對不存在的文件創(chuàng)建軟鏈接 # ln -s test.file test_soft.link # ls -liF total 0 789467 lrwxrwxrwx 1 root root 8 Sep 1 18:00 test_soft.link -> test.file // 由于被指向的文件不存在,此時(shí)的軟鏈接 test_soft.link 就是死鏈接 # cat test_soft.link cat: test_soft.link: No such file or directory // 創(chuàng)建被指向的文件 test.file,test_soft.link 恢復(fù)成正常的軟鏈接 # echo "This is an original file_A" >> test.file # cat test_soft.link This is an original file_A // 對不存在的目錄創(chuàng)建軟鏈接 # ln -s test.dir test_soft.link.dir # mkdir -p test.dir/test # tree . -F --inodes . ├── [ 789497] test.dir/ │ └── [ 789498] test/ ├── [ 789495] test.file ├── [ 789495] test_soft.link -> test.file └── [ 789497] test_soft.link.dir -> test.dir/
以上是“Linux中軟連接和硬鏈接是什么意思”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。