欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Linux ln 命令

 更新時間:2019年08月02日 16:15:25   作者:sparkdev  
Linux 中的文件分為 Hard Link 和 Symbolic Link 兩種。Hard Link 文件又被稱為硬鏈接文件、實(shí)體鏈接文件,Symbolic Link 文件則常被稱為符號鏈接、軟鏈接文件。這篇文章主要介紹了Linux ln 命令 ,需要的朋友可以參考下

Linux 中的文件分為 Hard Link 和 Symbolic Link 兩種。Hard Link 文件又被稱為硬鏈接文件、實(shí)體鏈接文件,Symbolic Link 文件則常被稱為符號鏈接、軟鏈接文件。

ln 命令用來在文件之間建立鏈接。在介紹 ln 命令前,讓我們先來搞清楚究竟什么是硬鏈接,什么又是軟鏈接。

Hard Link(硬鏈接)

我們知道,在 Linux 系統(tǒng)中,每個文件對應(yīng)一個 inode,文件的內(nèi)容在存儲在 inode 指向的 data block 中。要讀取該文件的內(nèi)容,需要通過文件所在的目錄中記錄的文件名找到文件的 inode 號,然后通過 inode 找到存儲文件內(nèi)容的 data block(參考《Linux 文件與目錄》)。

也就是說,文件名存儲在目錄中,inode 號執(zhí)行文件存儲的內(nèi)容,文件名和 inode 之間有一個對應(yīng)關(guān)系。那么多個文件名可不可以同時指向同一個 inode 呢?答案是可以的,這就是硬鏈接!從本質(zhì)上來說,硬鏈接只是在目錄下新添加了一個文件名,這個文件名與一個已有文件的 inode 相關(guān)聯(lián)。讓我們也通過 /etc/crontab 文件來進(jìn)行觀察:

$ ll -i /etc/crontab
131213 -rw-r--r-- 1 root root 722 Nov 16 2017 /etc/crontab

使用 ln 命令在當(dāng)前目錄下創(chuàng)建一個 /etc/crontab 文件的硬鏈接,然后觀察其文件屬性:

$ sudo ln /etc/crontab .
$ ll -i /etc/crontab crontab
131213 -rw-r--r-- 2 root root 722 Nov 16 2017 crontab
131213 -rw-r--r-- 2 root root 722 Nov 16 2017 /etc/crontab

這兩個文件名關(guān)聯(lián)的 inode 號完全相同,都是 131213,所以它們指向的是同一個文件。同時請注意文件屬性中的第三個字段,由 1 變成了 2。這個字段被稱為 "鏈接數(shù)",它說明有多少個文件名鏈接到同一個文件的 inode。

另外需要注意的一點(diǎn)是上面所有輸出中的第二個字段中的第一位,它們都是 "-",它說明這個文件的類型為普通文件,鏈接類型為硬鏈接。

我們可以通過下圖來理解硬鏈接在文件系統(tǒng)中的實(shí)現(xiàn)方式:

硬鏈接的特點(diǎn)

  • 幾乎不額外占用空間
  • 只要還有一個文件名引用著文件,文件就不會被真正刪除

由于硬鏈接只是在目錄中添加了一條包含文件名和 對應(yīng) inode 的記錄,所以它幾乎不會消耗額外的磁盤容量。
另外在刪除硬鏈接所關(guān)聯(lián)的文件時,其實(shí)只是刪除了一條目錄中的記錄,真正的文件并不受影響。只有在刪除最后一個硬鏈接時才會真正刪除文件的內(nèi)容數(shù)據(jù)。

硬鏈接的局限性

  • 不能跨文件系統(tǒng)創(chuàng)建硬鏈接
  • 不能鏈接目錄

由于這兩個限制,實(shí)際使用中硬鏈接并沒有軟鏈接使用的廣泛,下面我們看看究竟什么是軟鏈接。

Symbolic Link(軟鏈接)

軟鏈接的實(shí)現(xiàn)方式與硬鏈接有本質(zhì)上的不同。創(chuàng)建軟鏈接時會創(chuàng)建一個新的文件(分配一個 inode 和對應(yīng)的 data block),新文件的 data block 中存儲了目標(biāo)文件的路徑。
還拿 /etc/crontab 文件舉例子,這次創(chuàng)建一個軟鏈接并查看其文件屬性:

$ sudo ln -s /etc/crontab crontab2

第一列,兩個文件名對應(yīng)的 inode 不同,說明這是兩個文件。

第二列顯示的文件權(quán)限也不一樣,這一點(diǎn)和硬鏈接完全不同。注意文件類型被標(biāo)記為 "l",說明這是一個軟鏈接文件。

第三列很有意思,注意 /etc/crontab 文件的鏈接數(shù)量,還是 2,這和創(chuàng)建軟鏈接文件 crontab2 前是一樣的。也就是說創(chuàng)建軟鏈接并不增加原文件的鏈接數(shù)。

第六列是文件大大小,注意新建的軟鏈接文件大小為 12 Bytes,也就是字符串 "/etc/crontab" 的長度。

最后一列會友好的顯示出軟鏈接文件指向的源文件。

我們可以通過下圖來理解軟鏈接在文件系統(tǒng)中的實(shí)現(xiàn)方式:

從上圖我們可以看出,軟鏈接文件 crontab2 是一個實(shí)實(shí)在在的文件,有自己的 inode 和 data block。但是它的 data block 中保存的是目標(biāo)文件的地址:/etc/crontab。 像 open() 這樣的 API 能夠識別出軟鏈接,并根據(jù) data block 中的目標(biāo)文件徑把操作重定向到目標(biāo)文件上。

可以鏈接目錄是軟鏈接的一大優(yōu)勢,創(chuàng)建目錄鏈接的方式和普通文件一樣:

$ ln -s /bin testbin

此時進(jìn)入 testbin 目錄和進(jìn)入 /bin 目錄是一樣的。

更厲害的是,還可以跨文件系統(tǒng)創(chuàng)建軟鏈接!

刪除源文件

對于軟鏈接來說,刪除源鏈接后,鏈接文件就會無法找到指向的源文件了。看下面的演示:

$ echo "hello world" > hello.txt
$ ln -s hello.txt hello2
$ cat hello2
hello world
$ rm hello.txt
$ cat hello2
cat: hello2: No such file or directory

刪除原文件后,操作鏈接文件時的提示是:"No such file or directory"。

文件的鏈接數(shù)

從上文中的示例我們可以看到,當(dāng)創(chuàng)建硬鏈接文件時,文件的鏈接數(shù)會增加 1,而創(chuàng)建軟鏈接時文件的鏈接數(shù)卻不發(fā)生變化。

下面讓我們看一個目錄文件的鏈接數(shù),先創(chuàng)建一個空目錄:

$ mkdir /home/nick/testdir
$ ll /home/nick | grep testdir
drwxr-xr-x 2 nick nick 4096 Jul 10 08:58 testdir/

新建的空目錄有兩個硬鏈接,分別是:

/home/nick/testdir
/home/nick/testdir/.

而 /home/nick/testdir 目錄下還有一個指向其父目錄的硬鏈接:/home/nick/testdir/..
也就是說當(dāng)我們創(chuàng)建一個目錄時,其父目錄的硬鏈接數(shù)會增加 1。

ln 命令

ln 命令用來在文件之間建立鏈接,其的常用方式為:

ln source target
ln -s source target

它們分別用來創(chuàng)建硬鏈接文件和軟鏈接文件。還有一個比較常用的選項(xiàng)是 f,它會強(qiáng)制刪除已經(jīng)存在的目標(biāo)文件。

總結(jié)

以上所述是小編給大家介紹的Linux ln 命令,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • 詳解linux中的文件權(quán)限識別及修改

    詳解linux中的文件權(quán)限識別及修改

    在?Linux?系統(tǒng)中,一切皆文件,這篇文章主要來和大家介紹一下linux中的文件權(quán)限識別以及修改,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • Linux 中的Edquota命令

    Linux 中的Edquota命令

    Linux edquota命令用于編輯用戶或群組的磁盤配額。下面通過本文給大家分享Linux 中的Edquota命令,感興趣的朋友一起看看吧
    2017-10-10
  • Shell中的${}、##和%%使用范例

    Shell中的${}、##和%%使用范例

    這篇文章主要介紹了Shell中的${}、##和%%使用范例,本文給出了不同情況下得到的結(jié)果,需要的朋友可以參考下
    2015-04-04
  • linux shell實(shí)現(xiàn)守護(hù)進(jìn)程腳本

    linux shell實(shí)現(xiàn)守護(hù)進(jìn)程腳本

    這篇文章主要介紹了linux shell實(shí)現(xiàn)守護(hù)進(jìn)程腳本,非常簡單實(shí)用的代碼,這里推薦給小伙伴。希望大家能夠喜歡。
    2015-03-03
  • shell腳本實(shí)現(xiàn)定時刪除文件或文件夾

    shell腳本實(shí)現(xiàn)定時刪除文件或文件夾

    本文主要介紹了shell腳本實(shí)現(xiàn)定時刪除文件或文件夾,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • shell腳本中執(zhí)行時提示“沒有那個文件或目錄”的解決辦法

    shell腳本中執(zhí)行時提示“沒有那個文件或目錄”的解決辦法

    故障現(xiàn)象:在終端直接cd /var正常,在shell腳本中執(zhí)行則報(bào)錯。原因是腳本是在windows平臺下寫的,換行符與linux不同,造成腳本不能正確執(zhí)行
    2014-04-04
  • shell腳本編程之循環(huán)語句學(xué)習(xí)筆記

    shell腳本編程之循環(huán)語句學(xué)習(xí)筆記

    這篇文章主要介紹了shell腳本編程之循環(huán)語句學(xué)習(xí)筆記,本文內(nèi)容較簡單,可以作為shell循環(huán)語句的備忘錄,忘記怎么寫時來看看吧~需要的朋友可以參考下
    2014-09-09
  • shell編程中的字符串截取方法小結(jié)

    shell編程中的字符串截取方法小結(jié)

    這篇文章主要介紹了shell編程中的字符串截取方法小結(jié),本文講解了截取字符變量的前8位的方法、按指定的字符串截取方法、按照指定要求分割方法等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • 1 秒內(nèi)啟動Linux的方法

    1 秒內(nèi)啟動Linux的方法

    這篇文章主要介紹了 1 秒內(nèi)啟動linux的方法,需要的朋友可以參考下
    2015-12-12
  • 檢查Linux系統(tǒng)中文件大小的方法總結(jié)

    檢查Linux系統(tǒng)中文件大小的方法總結(jié)

    在Linux操作系統(tǒng)中,掌握如何高效檢查文件大小是每位開發(fā)者和系統(tǒng)管理員的必備技能,本文詳細(xì)介紹了四種檢查Linux文件大小的方法,感興趣的朋友可以參考下
    2024-03-03

最新評論