1. 程式人生 > >Linux學習筆記15——檔案系統的簡單操作

Linux學習筆記15——檔案系統的簡單操作

一、檔案系統的簡單操作

稍微瞭解了檔案系統後,再來我們得要知道如何查詢整體檔案系統的總容量與每個目錄所佔用的容量囉! 此外,前兩章談到的檔案型別中尚未講的很清楚的連結檔案 (Link file) 也會在這一小節當中介紹的。

1 ,磁碟與目錄的容量

現在我們知道磁碟的整體資料是在 superblock 區塊中,但是每個各別檔案的容量則在 inode當中記載的。 那在命令列下面該如何叫出這幾個資料呢?下面就讓我們來談一談這兩個指令:

df:列出檔案系統的整體磁碟使用量;

du:評估檔案系統的磁碟使用量(常用在推估目錄所佔容量)

 

df

[[email protected]

~]# df [-ahikHTm] [目錄或檔名]

選項與引數:

-a :列出所有的檔案系統,包括系統特有的 /proc 等檔案系統;

-k :以 KBytes 的容量顯示各檔案系統;

-m :以 MBytes 的容量顯示各檔案系統;

-h :以人們較易閱讀的 GBytes, MBytes, KBytes 等格式自行顯示;

-H :以 M=1000K 取代 M=1024K 的進位方式;

-T :連同該 partition 的 filesystem 名稱 (例如 xfs) 也列出;

-i :不用磁碟容量,而以 inode 的數量來顯示

範例一:將系統內所有的 filesystem 列出來!

[[email protected] ~]# df

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/mapper/centos-root 10475520 3409408 7066112 33% /

devtmpfs 627700 0 627700 0% /dev

tmpfs 637568 80 637488 1% /dev/shm

tmpfs 637568 24684 612884 4% /run

tmpfs 637568 0 637568 0% /sys/fs/cgroup

/dev/mapper/centos-home 5232640 67720 5164920 2% /home

/dev/vda2 1038336 133704 904632 13% /boot

# 在 Linux 下面如果 df 沒有加任何選項,那麼預設會將系統內所有的

# (不含特殊記憶體內的檔案系統與 swap) 都以 1 KBytes 的容量來列出來!

# 至於那個 /dev/shm 是與記憶體有關的掛載,先不要理他!

 

先來說明一下範例一所輸出的結果訊息為:

Filesystem:代表該檔案系統是在哪個 partition ,所以列出裝置名稱;

1k-blocks:說明下面的數字單位是 1KB 呦!可利用 -h 或 -m 來改變容量;

Used:顧名思義,就是使用掉的磁碟空間啦!

Available:也就是剩下的磁碟空間大小;

Use%:就是磁碟的使用率啦!如果使用率高達 90% 以上時, 最好需要注意一下了,免得容量不足造成系統問題喔!(例如最容易被灌爆的 /var/spool/mail 這個放置郵件的磁碟)

Mounted on:就是磁碟掛載的目錄所在啦!(掛載點啦!)

 

範例二:將容量結果以易讀的容量格式顯示出來

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/centos-root 10G 3.3G 6.8G 33% /

devtmpfs 613M 0 613M 0% /dev

tmpfs 623M 80K 623M 1% /dev/shm

tmpfs 623M 25M 599M 4% /run

tmpfs 623M 0 623M 0% /sys/fs/cgroup

/dev/mapper/centos-home 5.0G 67M 5.0G 2% /home

/dev/vda2 1014M 131M 884M 13% /boot

# 不同於範例一,這裡會以 G/M 等容量格式顯示出來,比較容易看啦!

範例三:將系統內的所有特殊檔案格式及名稱都列出來

[[email protected] ~]# df -aT

Filesystem Type 1K-blocks Used Available Use% Mounted on

rootfs rootfs 10475520 3409368 7066152 33% /

proc proc 0 0 0 - /proc

sysfs sysfs 0 0 0 - /sys

devtmpfs devtmpfs 627700 0 627700 0% /dev

securityfs securityfs 0 0 0 - /sys/kernel/security

tmpfs tmpfs 637568 80 637488 1% /dev/shm

devpts devpts 0 0 0 - /dev/pts

tmpfs tmpfs 637568 24684 612884 4% /run

tmpfs tmpfs 637568 0 637568 0% /sys/fs/cgroup

.....(中間省略).....

/dev/mapper/centos-root xfs 10475520 3409368 7066152 33% /

selinuxfs selinuxfs 0 0 0 - /sys/fs/selinux

.....(中間省略).....

/dev/mapper/centos-home xfs 5232640 67720 5164920 2% /home

/dev/vda2 xfs 1038336 133704 904632 13% /boot

binfmt_misc binfmt_misc 0 0 0 - /proc/sys/fs/binfmt_misc

# 系統裡面其實還有很多特殊的檔案系統存在的。那些比較特殊的檔案系統幾乎

# 都是在記憶體當中,例如 /proc 這個掛載點。因此,這些特殊的檔案系統

# 都不會佔據磁碟空間喔! ^_^

範例四:將 /etc 下面的可用的磁碟容量以易讀的容量格式顯示

[[email protected] ~]# df -h /etc

Filesystem Size Used Avail Use% Mounted on

/dev/mapper/centos-root 10G 3.3G 6.8G 33% /

# 這個範例比較有趣一點啦,在 df 後面加上目錄或者是檔案時, df

# 會自動的分析該目錄或檔案所在的 partition ,並將該 partition 的容量顯示出來,

# 所以,您就可以知道某個目錄下面還有多少容量可以使用了! ^_^

範例五:將目前各個 partition 當中可用的 inode 數量列出

[[email protected] ~]# df -ih

Filesystem Inodes IUsed IFree IUse% Mounted on

/dev/mapper/centos-root 10M 108K 9.9M 2% /

devtmpfs 154K 397 153K 1% /dev

tmpfs 156K 5 156K 1% /dev/shm

tmpfs 156K 497 156K 1% /run

tmpfs 156K 13 156K 1% /sys/fs/cgroup

# 這個範例則主要列出可用的 inode 剩餘量與總容量。分析一下與範例一的關係,

# 你可以清楚的發現到,通常 inode 的數量剩餘都比 block 還要多呢

 

由於 df 主要讀取的資料幾乎都是針對一整個檔案系統,因此讀取的範圍主要是在 Superblock內的資訊, 所以這個指令顯示結果的速度非常的快速!在顯示的結果中你需要特別留意的是那個根目錄的剩餘容量! 因為我們所有的資料都是由根目錄衍生出來的,因此當根目錄的剩餘容量剩下 0 時,那你的 Linux 可能就問題很大了。

另外需要注意的是,如果使用 -a 這個引數時,系統會出現 /proc 這個掛載點,但是裡面的東西都是 0 ,不要緊張! /proc 的東西都是 Linux 系統所需要載入的系統資料,而且是掛載在“記憶體當中”的, 所以當然沒有佔任何的磁碟空間囉!

至於那個 /dev/shm/ 目錄,其實是利用記憶體虛擬出來的磁碟空間,通常是總實體記憶體的一半!由於是通過記憶體模擬出來的磁碟,因此你在這個目錄下面建立任何資料檔案時,存取速度是非常快速的!(在記憶體內工作) 不過,也由於他是記憶體模擬出來的,因此這個檔案系統的大小在每部主機上都不一樣,而且建立的東西在下次開機時就消失了! 因為是在記憶體中嘛!

 

du

[[email protected] ~]# du [-ahskm] 檔案或目錄名稱

選項與引數:

-a :列出所有的檔案與目錄容量,因為預設僅統計目錄下面的檔案量而已。

-h :以人們較易讀的容量格式 (G/M) 顯示;

-s :列出總量而已,而不列出每個各別的目錄佔用容量;

-S :不包括子目錄下的總計,與 -s 有點差別。

-k :以 KBytes 列出容量顯示;

-m :以 MBytes 列出容量顯示;

範例一:列出目前目錄下的所有檔案大小

[[email protected] ~]# du

4 ./.cache/dconf <==每個目錄都會列出來

4 ./.cache/abrt

8 ./.cache

....(中間省略)....

0 ./test4

4 ./.ssh <==包括隱藏檔案的目錄

76 . <==這個目錄(.)所佔用的總量

# 直接輸入 du 沒有加任何選項時,則 du 會分析“目前所在目錄”

# 的檔案與目錄所佔用的磁碟空間。但是,實際顯示時,僅會顯示目錄容量(不含檔案),

# 因此 . 目錄有很多檔案沒有被列出來,所以全部的目錄相加不會等於 . 的容量喔!

# 此外,輸出的數值資料為 1K 大小的容量單位。

範例二:同範例一,但是將檔案的容量也列出來

[[email protected] ~]# du -a

4 ./.bash_logout <==有檔案的列表了

4 ./.bash_profile

4 ./.bashrc

....(中間省略)....

4 ./.ssh/known_hosts

4 ./.ssh

76 .

範例三:檢查根目錄下面每個目錄所佔用的容量

[[email protected] ~]# du -sm /*

0 /bin

99 /boot

....(中間省略)....

du: cannot access ‘/proc/17772/task/17772/fd/4’: No such file or directory

du: cannot access ‘/proc/17772/fdinfo/4’: No such file or directory

0 /proc <==不會佔用硬碟空間!

1 /root

25 /run

....(中間省略)....

3126 /usr <==系統初期最大就是他了啦!

117 /var

# 這是個很常被使用的功能~利用萬用字元 * 來代表每個目錄,如果想要檢查某個目錄下,

# 哪個次目錄佔用最大的容量,可以用這個方法找出來。值得注意的是,如果剛剛安裝好 Linux 時,

# 那麼整個系統容量最大的應該是 /usr 。而 /proc 雖然有列出容量,但是那個容量是在記憶體中,

# 不佔磁碟空間。至於 /proc 裡頭會列出一堆“No such file or directory” 的錯誤,

# 別擔心!因為是記憶體內的程式,程式執行結束就會消失,因此會有些目錄找不到,是正確的!

 

 

與 df 不一樣的是,du 這個指令其實會直接到檔案系統內去搜尋所有的檔案資料, 所以上述第三個範例指令的執行會執行一小段時間!此外,在預設的情況下,容量的輸出是以 KB 來設計的, 如果你想要知道目錄佔了多少 MB ,那麼就使用 -m 這個引數即可囉!而, 如果你只想要知道該目錄佔了多少容量的話,使用 -s 就可以啦!

至於 -S 這個選項部分,由於 du 預設會將所有檔案的大小均列出,因此假設你在 /etc 下面使用 du 時, 所有的檔案大小,包括 /etc 下面的次目錄容量也會被計算一次。然後最終的容量(/etc) 也會加總一次, 因此很多朋友都會誤會 du 分析的結果不太對勁。所以囉,如果想要列出某目錄下的全部資料, 或許也可以加上 -S 的選項,減少次目錄的加總喔!

 

2,實體連結與符號連結: ln

關於連結(link)資料我們第五章的Linux檔案屬性及Linux檔案種類與副檔名當中提過一些資訊, 不過當時由於尚未講到檔案系統,因此無法較完整的介紹連結檔案啦。不過在上一小節談完了檔案系統後, 我們可以來了解一下連結檔案這玩意兒了。

在 Linux 下面的連結檔案有兩種,一種是類似 Windows 的捷徑功能的檔案,可以讓你快速的連結到目標檔案(或目錄); 另一種則是通過檔案系統的 inode 連結來產生新檔名,而不是產生新檔案!這種稱為實體連結 (hard link)。 這兩種玩意兒是完全不一樣的東西呢!現在就分別來談談。

Hard Link (實體連結, 硬式連結或實際連結)

在前一小節當中,我們知道幾件重要的資訊,包括:

每個檔案都會佔用一個 inode ,檔案內容由 inode 的記錄來指向;

想要讀取該檔案,必須要經過目錄記錄的檔名來指向到正確的 inode 號碼才能讀取。

 

也就是說,其實檔名只與目錄有關,但是檔案內容則與 inode 有關。那麼想一想, 有沒有可能有多個檔名對應到同一個 inode 號碼呢?有的!那就是 hard link 的由來。 所以簡單的說:hard link 只是在某個目錄下新增一筆檔名連結到某 inode 號碼的關連記錄而已。

舉個例子來說,假設我係統有個 /root/crontab 他是 /etc/crontab 的實體連結,也就是說這兩個檔名連結到同一個 inode , 自然這兩個檔名的所有相關資訊都會一模一樣(除了檔名之外)。實際的情況可以如下所示:

[[email protected] ~]# ll -i /etc/crontab

34474855 -rw-r--r--. 1 root root 451 Jun 10 2014 /etc/crontab

[[email protected] ~]# ln /etc/crontab . <==建立實體連結的指令

[[email protected] ~]# ll -i /etc/crontab crontab

34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 crontab

34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab

 

你可以發現兩個檔名都連結到 34474855 這個 inode 號碼,所以您瞧瞧,是否檔案的許可權/屬性完全一樣呢? 因為這兩個“檔名”其實是一模一樣的“檔案”啦!而且你也會發現第二個欄位由原本的 1 變成 2 了! 那個欄位稱為“連結”,這個欄位的意義為:“有多少個檔名連結到這個 inode 號碼”的意思。 如果將讀取到正確資料的方式畫成示意圖,就類似如下畫面:

上圖的意思是,你可以通過 1 或 2 的目錄之 inode 指定的 block 找到兩個不同的檔名,而不管使用哪個檔名均可以指到 real 那個 inode 去讀取到最終資料!那這樣有什麼好處呢?最大的好處就是“安全”!如同上圖中, 如果你將任何一個“檔名”刪除,其實 inode 與 block都還是存在的! 此時你可以通過另一個“檔名”來讀取到正確的檔案資料喔!此外,不論你使用哪個“檔名”來編輯, 最終的結果都會寫入到相同的 inode 與 block 中,因此均能進行資料的修改哩!

一般來說,使用 hard link 設定連結檔案時,磁碟的空間與 inode 的數目都不會改變! 我們還是由圖 7.2.1 來看,由圖中可以知道, hard link 只是在某個目錄下的 block 多寫入一個關連資料而已,既不會增加 inode 也不會耗用 block 數量哩!

Tips hard link 的製作中,其實還是可能會改變系統的 block 的,那就是當你新增這筆資料卻剛好將目錄的 block 填滿時,就可能會新加一個 block 來記錄檔名關連性,而導致磁碟空間的變化!不過,一般 hard link 所用掉的關連資料量很小,所以通常不會改變 inode 與磁碟空間的大小喔!

由圖 7.2.1 其實我們也能夠知道,事實上 hard link 應該僅能在單一檔案系統中進行的,應該是不能夠跨檔案系統才對! 因為圖 7.2.1 就是在同一個 filesystem 上嘛!所以 hard link 是有限制的:

不能跨 Filesystem;

不能 link 目錄。

 

不能跨 Filesystem 還好理解,那不能 hard link 到目錄又是怎麼回事呢?這是因為如果使用hard link 連結到目錄時, 連結的資料需要連同被連結目錄下面的所有資料都建立連結,舉例來說,如果你要將 /etc 使用實體連結建立一個 /etc_hd 的目錄時,那麼在 /etc_hd 下面的所有檔名同時都與 /etc 下面的檔名要建立 hard link 的,而不是僅連結到 /etc_hd 與 /etc 而已。 並且,未來如果需要在 /etc_hd 下面建立新檔案時,連帶的, /etc 下面的資料又得要建立一次 hard link ,因此造成環境相當大的複雜度。 所以囉,目前 hard link 對於目錄暫時還是不支援的啊!

Symbolic Link (符號連結,亦即是捷徑)

相對於 hard link , Symbolic link 可就好理解多了,基本上, Symbolic link 就是在建立一個獨立的檔案,而這個檔案會讓資料的讀取指向他 link 的那個檔案的檔名!由於只是利用檔案來做為指向的動作, 所以,當來原始檔被刪除之後,symbolic link 的檔案會“開不了”, 會一直說“無法開啟某檔案!”。實際上就是找不到原始“檔名”而已啦!

舉例來說,我們先建立一個符號連結檔案連結到 /etc/crontab 去看看:

[[email protected] ~]# ln -s /etc/crontab crontab2

[[email protected] ~]# ll -i /etc/crontab /root/crontab2

34474855 -rw-r--r--. 2 root root 451 Jun 10 2014 /etc/crontab

53745909 lrwxrwxrwx. 1 root root 12 Jun 23 22:31 /root/crontab2 -> /etc/crontab

由上表的結果我們可以知道兩個檔案指向不同的 inode 號碼,當然就是兩個獨立的檔案存在! 而且連結檔案的重要內容就是他會寫上目標檔案的“檔名”, 你可以發現為什麼上表中連結檔案的大小為 12 Bytes 呢? 因為箭頭(-->)右邊的檔名“/etc/crontab”總共有 12 個英文,每個英文佔用 1 個 Bytes ,所以檔案大小就是 12Bytes了!

關於上述的說明,我們以如下圖示來解釋:

由 1 號 inode 讀取到連結檔案的內容僅有檔名,根據檔名連結到正確的目錄去取得目標檔案的 inode , 最終就能夠讀取到正確的資料了。你可以發現的是,如果目標檔案(/etc/crontab)被刪除了,那麼整個環節就會無法繼續進行下去, 所以就會發生無法通過連結檔案讀取的問題了!

這裡還是得特別留意,這個 Symbolic Link 與 Windows 的捷徑可以給他劃上等號,由Symbolic link 所建立的檔案為一個獨立的新的檔案,所以會佔用掉 inode 與 block 喔!由上面的說明來看,似乎 hard link 比較安全,因為即使某一個目錄下的關連資料被殺掉了,也沒有關係,只要有任何一個目錄下存在著關連資料,那麼該檔案就不會不見!舉上面的例子來說,我的 /etc/crontab 與 /root/crontab 指向同一個檔案,如果我刪除了 /etc/crontab 這個檔案,該刪除的動作其實只是將 /etc 目錄下關於 crontab 的關連資料拿掉而已, crontab 所在的 inode 與 block 其實都沒有被變動喔!

不過由於 Hard Link 的限制太多了,包括無法做“目錄”的 link , 所以在用途上面是比較受限的!反而是 Symbolic Link 的使用方面較廣喔!好了, 說的天花亂墜,看你也差不多快要昏倒了!沒關係,實作一下就知道怎麼回事了!要製作連結檔案就必須要使用 ln 這個指令呢!

[[email protected] ~]# ln [-sf] 來原始檔 目標檔案

選項與引數:

-s :如果不加任何引數就進行連結,那就是hard link,至於 -s 就是symbolic link

-f :如果 目標檔案 存在時,就主動的將目標檔案直接移除後再建立!

範例一:將 /etc/passwd 複製到 /tmp 下面,並且觀察 inode 與 block

[[email protected] ~]# cd /tmp

[[email protected] tmp]# cp -a /etc/passwd .

[[email protected] tmp]# du -sb ; df -i .

6602 . <==先注意一下這裡的容量是多少!

Filesystem Inodes IUsed IFree IUse% Mounted on

/dev/mapper/centos-root 10485760 109748 10376012 2% /

# 利用 du 與 df 來檢查一下目前的引數~那個 du -sb 是計算整個 /tmp 下面有多少 Bytes 的容量啦!

範例二:將 /tmp/passwd 製作 hard link 成為 passwd-hd 檔案,並觀察檔案與容量

[[email protected] tmp]# ln passwd passwd-hd

[[email protected] tmp]# du -sb ; df -i .

6602 .

Filesystem Inodes IUsed IFree IUse% Mounted on

/dev/mapper/centos-root 10485760 109748 10376012 2% /

# 仔細看,即使多了一個檔案在 /tmp 下面,整個 inode 與 block 的容量並沒有改變!

[[email protected] tmp]# ls -il passwd*

2668897 -rw-r--r--. 2 root root 2092 Jun 17 00:20 passwd

2668897 -rw-r--r--. 2 root root 2092 Jun 17 00:20 passwd-hd

# 原來是指向同一個 inode 啊!這是個重點啊!另外,那個第二欄的連結數也會增加!

範例三:將 /tmp/passwd 建立一個符號連結

[[email protected] tmp]# ln -s passwd passwd-so

[[email protected] tmp]# ls -li passwd*

2668897 -rw-r--r--. 2 root root 2092 Jun 17 00:20 passwd

2668897 -rw-r--r--. 2 root root 2092 Jun 17 00:20 passwd-hd

2668898 lrwxrwxrwx. 1 root root 6 Jun 23 22:40 passwd-so -> passwd

# passwd-so 指向的 inode number 不同了!這是一個新的檔案~這個檔案的內容是指向

# passwd 的。passwd-so 的大小是 6Bytes ,因為 “passwd” 這個單字共有六個字元之故

[[email protected] tmp]# du -sb ; df -i .

6608 .

Filesystem Inodes IUsed IFree IUse% Mounted on

/dev/mapper/centos-root 10485760 109749 10376011 2% /

# 呼呼!整個容量與 inode 使用數都改變囉~確實如此啊!

範例四:刪除原始檔案 passwd ,其他兩個檔案是否能夠開啟?

[[email protected] tmp]# rm passwd

[[email protected] tmp]# cat passwd-hd

.....(正常顯示完畢!)

[[email protected] tmp]# cat passwd-so

cat: passwd-so: No such file or directory

[[email protected] tmp]# ll passwd*

-rw-r--r--. 1 root root 2092 Jun 17 00:20 passwd-hd

lrwxrwxrwx. 1 root root 6 Jun 23 22:40 passwd-so -> passwd

# 怕了吧!符號連結果然無法開啟!另外,如果符號連結的目標檔案不存在,

# 其實檔名的部分就會有特殊的顏色顯示喔!

 

 

Tips 還記得第五章當中,我們提到的 /tmp 這個目錄是幹嘛用的嗎?是給大家作為暫存檔用的啊! 所以,您會發現,過去我們在進行測試時,都會將資料移動到 /tmp 下面去練習~ 嘿嘿!因此,有事沒事,記得將 /tmp 下面的一些怪異的資料清一清先!

要注意囉!使用 ln 如果不加任何引數的話,那麼就是 Hard Link 囉!如同範例二的情況,增加了 hard link 之後,可以發現使用 ls -l 時,顯示的 link 那一欄屬性增加了!而如果這個時候砍掉 passwd 會發生什麼事情呢?passwd-hd 的內容還是會跟原來 passwd 相同,但是passwd-so 就會找不到該檔案啦!

而如果 ln 使用 -s 的引數時,就做成差不多是 Windows 下面的“捷徑”的意思。當你修改 Linux下的 symbolic link 檔案時,則更動的其實是“原始檔案”, 所以不論你的這個原始檔案被連結到哪裡去,只要你修改了連結檔案,原始檔案就跟著變囉! 以上面為例,由於你使用 -s 的引數建立一個名為 passwd-so 的檔案,則你修改 passwd-so 時,其內容與 passwd 完全相同,並且,當你按下儲存之後,被改變的將是 passwd 這個檔案!

此外,如果你做了下面這樣的連結:

ln -s /bin /root/bin

那麼如果你進入 /root/bin 這個目錄下,“請注意呦!該目錄其實是 /bin 這個目錄,因為你做了連結檔案了!”所以,如果你進入 /root/bin 這個剛剛建立的連結目錄, 並且將其中的資料殺掉時,嗯! /bin 裡面的資料就通通不見了!這點請千萬注意!所以趕緊利用“rm /root/bin ” 將這個連結檔案刪除吧!

基本上, Symbolic link 的用途比較廣,所以您要特別留意 symbolic link 的用法呢!未來一定還會常常用到的啦!

 

關於目錄的 link 數量:

或許您已經發現了,那就是,當我們以 hard link 進行“檔案的連結”時,可以發現,在 ls -l 所顯示的第二欄位會增加一才對,那麼請教,如果建立目錄時,他預設的 link 數量會是多少?讓我們來想一想,一個“空目錄”裡面至少會存在些什麼?呵呵!就是存在 . 與 .. 這兩個目錄啊! 那麼,當我們建立一個新目錄名稱為 /tmp/testing 時,基本上會有三個東西,那就是:

/tmp/testing

/tmp/testing/.

/tmp/testing/..

而其中 /tmp/testing 與 /tmp/testing/. 其實是一樣的!都代表該目錄啊~而 /tmp/testing/.. 則代表 /tmp 這個目錄,所以說,當我們建立一個新的目錄時, “新的目錄的 link 數為 2 ,而上層目錄的 link 數則會增加 1 ” 不信的話,我們來作個測試看看:

[[email protected] ~]# ls -ld /tmp

drwxrwxrwt. 14 root root 4096 Jun 23 22:42 /tmp

[[email protected] ~]# mkdir /tmp/testing1

[[email protected] ~]# ls -ld /tmp

drwxrwxrwt. 15 root root 4096 Jun 23 22:45 /tmp # 這裡的 link 數量加 1 了!

[[email protected] ~]# ls -ld /tmp/testing1

drwxr-xr-x. 2 root root 6 Jun 23 22:45 /tmp/testing1/

瞧!原本的所謂上層目錄 /tmp 的 link 數量由 14 增加為 15 ,至於新目錄 /tmp/testing 則為 2,這樣可以理解目錄的 link 數量的意義了嗎? ^_^