什么是目錄
Linux 文件系統(tǒng)是樹狀結(jié)構(gòu)的棚品。根目錄下存在一系列子目錄艺栈。目錄里邊有文件或者子目錄。 但問題在于:
- 目錄是什么放妈?
- 文件又是什么北救?
文件是:數(shù)據(jù) + 屬性(比如名字、創(chuàng)建時(shí)間芜抒、所有者之類)
目錄是:一個(gè)列表珍策,列表中的每一項(xiàng)是:inode –> filename
Linux 文件系統(tǒng)把硬盤分為三個(gè)部分:超級(jí)塊、inode 列表挽绩、數(shù)據(jù)區(qū)
inode 指示:該文件的數(shù)據(jù)存放在數(shù)據(jù)區(qū)的哪些塊內(nèi)膛壹。因?yàn)檫@個(gè)“映射”關(guān)系不能變更,因此唉堪,inode 相當(dāng)于代表著文件本身模聋。(值得注意的是,文件名與文件本身不是直接映射起來的唠亚,中間隔著 inode)
硬鏈接(Hard Link)
硬鏈接指通過索引節(jié)點(diǎn)來進(jìn)行連接链方,在 Linux 為文件系統(tǒng)中,保存在磁盤分區(qū)中的文件不管是什么類型都給它分配一個(gè)編號(hào)灶搜,稱為索引節(jié)點(diǎn)號(hào)祟蚀;
硬鏈接指的就是在 Linux 中,多個(gè)文件名指向同一索引節(jié)點(diǎn)割卖;
常見用途:通過建立硬鏈接到重要文件前酿,防止誤刪,刪除其實(shí)對(duì)應(yīng)的是刪除其中的一個(gè)硬鏈接鹏溯,當(dāng)文件對(duì)應(yīng)的硬鏈接都被刪除了罢维,該文件才真正被刪除;
注意: 默認(rèn)情況下丙挽,ln 命令產(chǎn)生硬鏈接肺孵;
[root@centos7 home]# vi 1.txt
hello, this is 1.txt!
[root@centos7 home]# cp -l 1.txt 2.txt # 為1.txt建立硬鏈接2.txt,等同于ln 1.txt 2.txt
[root@centos7 home]# more 2.txt # 查看2.txt文件中的內(nèi)容和1.txt文件內(nèi)容一樣
hello, this is 1.txt!
# 這兩個(gè)文件的索引節(jié)點(diǎn)號(hào)颜阐,可以看見索引號(hào)(inode)一樣:
[root@centos7 home]# ls -li
總用量 69868
33845219 -rw-r--r--. 2 root root 44 1月 21 10:12 1.txt
33845219 -rw-r--r--. 2 root root 44 1月 21 10:12 2.txt
[root@centos7 home]# vi 2.txt # 編輯2.txt平窘,在末未添加:
hello, this is 2.txt!
[root@centos7 home]# more 1.txt # 查看1.txt中是否內(nèi)容改動(dòng)
hello, this is 1.txt!
hello, this is 2.txt!
[root@centos7 home]# rm -f 1.txt # 刪除1.txt
[root@centos7 home]# more 2.txt # 查看2.txt的內(nèi)容
hello, this is 1.txt!
hello, this is 2.txt!
創(chuàng)建硬鏈接命令:cp -l 1.txt 2.txt
等同于ln 1.txt 2.txt
# 為 1.txt 建立硬鏈接 2.txt
軟鏈接
也成為符號(hào)鏈接(Symbolic Link),類似于 Windows 的快捷方式凳怨,其中包含的是另一個(gè)文件的位置信息瑰艘;
[root@centos7 home]# cp -s 2.txt sLink # 為2.txt文件建立符號(hào)鏈接sLink,等同于ln –s 2.txt sLink
[root@centos7 home]# ls –li # 可以看到兩個(gè)文件有不同的索引節(jié)點(diǎn)號(hào)
總用量 69864
33845219 -rw-r--r--. 1 root root 44 1月 21 10:12 2.txt
36830246 lrwxrwxrwx. 1 root root 5 1月 21 10:21 sLink -> 2.txt
[root@centos7 home]# more sLink
hello, this is 1.txt!
hello, this is 2.txt!
[root@centos7 home]# rm -f sLink # 刪除符號(hào)鏈接,不影響源文件
[root@centos7 home]# more 2.txt
hello, this is 1.txt!
hello, this is 2.txt!
[root@centos7 home]# rm -f 2.txt # 刪除2.txt
[root@centos7 home]# ls -li
總用量 69860
36830246 lrwxrwxrwx. 1 root root 5 1月 21 10:21 sLink -> 2.txt
[root@centos7 home]# more sLink
sLink: 沒有那個(gè)文件或目錄
創(chuàng)建符號(hào)鏈接命令:cp -s 2.txt sLink
等同于ln –s 2.txt sLink
# 為 2.txt 文件建立符號(hào)鏈接 sLink
符號(hào)連接相當(dāng)于快捷方式磅叛。這意味著什么呢屑咳?
- 符號(hào)連接是一個(gè)文件,一個(gè)與被它連接的文件不一樣的文件弊琴。它有自己的 inode兆龙。
- 符號(hào)連接的內(nèi)容應(yīng)該是一個(gè)路徑,該路徑指示著它連接的文件敲董。這意味著如果該路徑的文件被刪除了紫皇、改名字了,它即將訪問不到腋寨。如果該路徑下的文件被掉包了聪铺,它將訪問錯(cuò)誤的文件。
區(qū)別
掛載點(diǎn)
只能在同種存儲(chǔ)媒體上的文件之間創(chuàng)建硬鏈接(Hard Link)萄窜,不能在不同掛載點(diǎn)下的文件間創(chuàng)建硬鏈接铃剔,對(duì)于后一種情況,可以使用軟鏈接查刻;(區(qū)分不同掛載點(diǎn)與同一掛載點(diǎn)不同目錄)
如跨不同的掛載點(diǎn)建立硬鏈接的報(bào)錯(cuò)信息:
[root@centos7 home]# ln 2.txt /dev/hLink
ln: 無法創(chuàng)建硬鏈接"/dev/hLink" => "2.txt": 無效的跨設(shè)備連接
目錄
軟連接就相當(dāng)于 win 中的快捷方式即如果軟鏈接一個(gè)目錄只是一個(gè)目錄的快捷方式到指定位置键兜,操作系統(tǒng)找這個(gè)快捷方式會(huì)直接找到真實(shí)目錄下的文件。但是硬鏈接的話穗泵,相當(dāng)于鏡像的方式普气,創(chuàng)建一個(gè)目錄的硬鏈接之后,操作系統(tǒng)需要把這個(gè)目錄下所有的文件都要做一次硬鏈接(復(fù)制一份過去)佃延,這樣操作系統(tǒng)在訪問這個(gè)鏈接的時(shí)候要不斷去遍歷现诀,大大增加復(fù)雜度,而且很容易進(jìn)入死循環(huán)履肃。
硬鏈接不能對(duì)目錄創(chuàng)建受限于文件系統(tǒng)的設(shè)計(jì)仔沿。Linux 文件系統(tǒng)中的目錄均隱藏了兩個(gè)特殊的目錄,當(dāng)前目錄和父目錄尺棋。其實(shí)是兩個(gè)硬鏈接封锉,若系統(tǒng)運(yùn)行對(duì)目錄創(chuàng)建硬鏈接,則會(huì)產(chǎn)生目錄環(huán)陡鹃。
小結(jié)
1: 硬鏈接是同一文件的不同訪問路徑,其對(duì)應(yīng)的索引節(jié)點(diǎn)號(hào)是一樣的抖坪,刪除文件其實(shí)就是刪除其中的一個(gè)硬鏈接萍鲸,如果該文件對(duì)應(yīng)的硬鏈接都被刪除了該文件才被刪除,常用于保護(hù)文件擦俐;
2: 符號(hào)鏈接類似于 Windows 中對(duì)應(yīng)的快捷方式脊阴,刪除符號(hào)鏈接不影響源文件,刪除源文件,則對(duì)應(yīng)的符號(hào)鏈接也沒有意義嘿期;