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