與十年前相比,Linux操作系統(tǒng)的普及度得到了極大的提高。隨著計(jì)算機(jī)行業(yè)的飛速發(fā)展,如今Linux已得到越來(lái)越多的重用。它不再只是在一些開(kāi)源愛(ài)好者中炫耀資本。并且已經(jīng)體現(xiàn)在很多方面,尤其是在服務(wù)器操作系統(tǒng)中,它已經(jīng)成為高級(jí)運(yùn)維工程師的首選操作工具。例如想要識(shí)別Linux上的文件分身要怎么做?你想知道的教程都在這里。
想要識(shí)別Linux上的文件分身要怎么做?
識(shí)別使用同一個(gè)磁盤空間的文件依賴于利用文件使用相同的inode這一事實(shí)。這種數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)除了文件名和內(nèi)容之外的所有信息。如果兩個(gè)或多個(gè)文件具有不同的名稱和文件系統(tǒng)位置,但共享一個(gè)inode,則它們還共享內(nèi)容、所有權(quán)、權(quán)限等。
這些文件通常被稱為“硬鏈接”,不像符號(hào)鏈接那樣僅僅通過(guò)包含它們的名稱指向其他文件,符號(hào)鏈接很容易在文件列表中通過(guò)第一個(gè)位置的l和引用文件的->符號(hào)識(shí)別出來(lái)。
$ls-lmy*
-rw-r--r--4shsshs228Apr1219:37myfile
lrwxrwxrwx1shsshs6Apr1511:18myref->myfile
-rw-r--r--4shsshs228Apr1219:37mytwin
在單個(gè)目錄中的硬鏈接并不是很明顯,但它仍然非常容易找到。如果使用ls-i命令列出文件并按inode編號(hào)排序,則可以非常容易地挑選出硬鏈接。在這種類型的ls輸出中,第一列顯示inode編號(hào)。
$ls-i|sort-n|more
...
788000myfile<==
788000mytwin<==
801865Name_Labels.pdf
786692neverleavehomeangry
920242NFCU_Docs
800247nmap-notes
掃描輸出,查找相同的inode編號(hào),任何匹配都會(huì)告訴你想知道的內(nèi)容。
另一方面,如果你只是想知道某個(gè)特定文件是否是另一個(gè)文件的硬鏈接,那么有一種方法比瀏覽數(shù)百個(gè)文件的列表更簡(jiǎn)單,即find命令的-samefile選項(xiàng)將幫助你完成工作。
$find.-samefilemyfile
./myfile
./save/mycopy
./mytwin
注意,提供給find命令的起始位置決定文件系統(tǒng)會(huì)掃描多少來(lái)進(jìn)行匹配。在上面的示例中,我們正在查看當(dāng)前目錄和子目錄。
使用find的-ls選項(xiàng)添加輸出的詳細(xì)信息可能更有說(shuō)服力:
$find.-samefilemyfile-ls
7880004-rw-r--r--4shsshs228Apr1219:37./myfile
7880004-rw-r--r--4shsshs228Apr1219:37./save/mycopy
7880004-rw-r--r--4shsshs228Apr1219:37./mytwin
第一列顯示inode編號(hào),然后我們會(huì)看到文件權(quán)限、鏈接、所有者、文件大小、日期信息以及引用相同磁盤內(nèi)容的文件的名稱。注意,在這種情況下,鏈接字段是“4”而不是我們可能期望的“3”。這告訴我們還有另一個(gè)指向同一個(gè)inode的鏈接。
如果你想在一個(gè)目錄中查找所有硬鏈接的實(shí)例,可以嘗試以下的腳本來(lái)創(chuàng)建列表并為你查找副本:
#!/bin/bash
#seachesforfilessharinginodes
prev=""
#listfilesbyinode
ls-i|sort-n>/tmp/$0
#searchthroughfileforduplicateinode#s
whilereadline
do
inode=`echo$line|awk'{print$1}'`
if["$inode"=="$prev"];then
grep$inode/tmp/$0
fi
prev=$inode
done
#cleanup
rm/tmp/$0
$./findHardLinks
788000myfile
788000mytwin
你還可以使用find命令按inode編號(hào)查找文件,如命令中所示。但是,此搜索可能涉及多個(gè)文件系統(tǒng),因此可能會(huì)得到錯(cuò)誤的結(jié)果。因?yàn)橄嗤膇node編號(hào)可能會(huì)在另一個(gè)文件系統(tǒng)中使用,代表另一個(gè)文件。如果是這種情況,文件的其他詳細(xì)信息將不相同。
$find/-inum788000-ls2>/dev/null
7880004-rw-r--r--4shsshs228Apr1219:37/tmp/mycopy
7880004-rw-r--r--4shsshs228Apr1219:37/home/shs/myfile
7880004-rw-r--r--4shsshs228Apr1219:37/home/shs/save/mycopy
7880004-rw-r--r--4shsshs228Apr1219:37/home/shs/mytwin
注意,錯(cuò)誤輸出被重定向到/dev/null,這樣我們就不必查看所有“Permissiondenied”錯(cuò)誤,否則這些錯(cuò)誤將顯示在我們不允許查看的其他目錄中。
此外,掃描包含相同內(nèi)容但不共享inode的文件將花費(fèi)更多的時(shí)間和精力。
通過(guò)上述介紹,想要識(shí)別Linux上的文件分身要怎么做相信大家已經(jīng)清楚了吧,想了解更多關(guān)于Linux的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。