精通 Linux 上的檔案搜尋
在 Linux 系統上搜尋檔案的方法有很多,有的命令很簡單,有的很詳細。我們的目標是:縮小搜尋範圍,找到您正在尋找的檔案,又不受其他檔案的干擾。在今天的文章中,我們將研究一些對檔案搜尋最有用的命令和選項。我們將涉及:
快速搜尋
更復雜的搜尋條件
組合條件
反轉條件
簡單和詳細的回應
尋找重複的檔案
有很多有用的命令可以搜尋檔案,find
命令可能是其中最有名的,但它不是唯一的命令,也不一定總是找到目標檔案的最快方法。
搜尋檔案的最簡單的命令可能就是 which
和 locate
了,但二者都有一些侷限性。which
命令只會在系統定義的搜尋路徑中,查詢可執行的檔案,通常用於識別命令。如果您對輸入 which
時會執行哪個命令感到好奇,您可以使用命令 which which
,它會指出對應的可執行檔案。
$ which which/usr/bin/which
which
命令會顯示它找到的第一個以相應名稱命名的可執行檔案(也就是使用該命令時將執行的那個檔案),然後停止。
locate
命令更大方一點,它可以查詢任意數量的檔案,但它也有一個限制:僅當檔名被包含在由 updatedb
命令構建的資料庫時才有效。該檔案可能會儲存在某個位置,如 /var/lib/mlocate/mlocate.db
,但不能用 locate
以外的任何命令讀取。這個檔案的更新通常是透過每天透過 cron 執行的 updatedb
進行的。
簡單的 find
命令沒有太多限制,不過它需要指定搜尋的起點和搜尋條件。最簡單的 find
命令:按檔名搜尋檔案。如下所示:
$ find . -name runme ./bin/runme
如上所示,透過檔名搜尋檔案系統的當前位置將會搜尋所有子目錄,除非您指定了搜尋深度。
find
命令允許您搜尋除檔名以外的多種條件,包括檔案所有者、組、許可權、大小、修改時間、缺少所有者或組,和檔案型別等。除了查詢檔案外,您還可以刪除檔案、對其進行重新命名、更改所有者、更改許可權和對找到的檔案執行幾乎任何命令。
下面兩條命令會查詢:在當前目錄中 root 使用者擁有的檔案,以及不被指定使用者(在本例中為 shs)所擁有的檔案。在這個例子中,兩個輸出是一樣的,但並不總是如此。
$ find . -user root -ls 396926 0 lrwxrwxrwx 1 root root 21 Sep 21 09:03 ./xyz -> /home/peanut/xyz $ find . ! -user shs -ls 396926 0 lrwxrwxrwx 1 root root 21 Sep 21 09:03 ./xyz -> /home/peanut/xyz
感嘆號 !
字元代表“非”:反轉跟隨其後的條件。
下面的命令將查詢具有特定許可權的檔案:
$ find . -perm 750 -ls 397176 4 -rwxr-x--- 1 shs shs 115 Sep 14 13:52 ./ll 398209 4 -rwxr-x--- 1 shs shs 117 Sep 21 08:55 ./get-updates 397145 4 drwxr-x--- 2 shs shs 4096 Sep 14 15:42 ./newdir
接下來的命令顯示具有 777 許可權的非符號連結檔案:
$ sudo find /home -perm 777 ! -type l -ls 397132 4 -rwxrwxrwx 1 shs shs 18 Sep 15 16:06 /home/shs/bin/runme 396949 4 -rwxrwxrwx 1 root root 558 Sep 21 11:21 /home/oops
以下命令將查詢大小超過千兆位元組的檔案。請注意,我們找到了一個非常有趣的檔案。它以 ELF core 檔案格式表示了該系統的實體記憶體。
$ sudo find / -size +1G -ls 4026531994 0 -r-------- 1 root root 140737477881856 Sep 21 11:23 /proc/kcore 1444722 15332 -rw-rw-r-- 1 shs shs 1609039872 Sep 13 15:55 /home/shs/Downloads/ubuntu-17.04-desktop-amd64.iso
只要您知道 find
命令是如何描述檔案型別的,就可以透過檔案型別來查詢檔案。
b = 塊裝置檔案c = 字元裝置檔案d = 目錄p = 命名管道f = 常規檔案l = 符號連結s = 套接字D = 門(僅限 Solaris)
在下面的命令中,我們要尋找符號連結和套接字:
$ find . -type l -ls 396926 0 lrwxrwxrwx 1 root root 21 Sep 21 09:03 ./whatever -> /home/peanut/whatever $ find . -type s -ls 395256 0 srwxrwxr-x 1 shs shs 0 Sep 21 08:50 ./.gnupg/S.gpg-agent
您還可以根據 inode 號來搜尋檔案:
$ find . -inum 397132 -ls 397132 4 -rwx------ 1 shs shs 18 Sep 15 16:06 ./bin/runme
另一種透過 inode 搜尋檔案的方法是使用 debugfs
命令。在大的檔案系統上,這個命令可能比 find
快得多,您可能需要安裝 icheck。
$ sudo debugfs -R 'ncheck 397132' /dev/sda1 debugfs 1.42.13 (17-May-2015) Inode Pathname397132 /home/shs/bin/runme
在下面的命令中,我們從主目錄(~
)開始,限制搜尋的深度(即我們將搜尋子目錄的層數),並只檢視在最近一天內建立或修改的檔案(mtime
設定)。
$ find ~ -maxdepth 2 -mtime -1 -ls 407928 4 drwxr-xr-x 21 shs shs 4096 Sep 21 12:03 /home/shs 394006 8 -rw------- 1 shs shs 5909 Sep 21 08:18 /home/shs/.bash_history 399612 4 -rw------- 1 shs shs 53 Sep 21 08:50 /home/shs/.Xauthority 399615 4 drwxr-xr-x 2 shs shs 4096 Sep 21 09:32 /home/shs/Downloads
使用 -exec
選項,在您使用 find
命令找到檔案後可以以某種方式更改檔案。您只需參照 -exec
選項即可執行相應的命令。
$ find . -name runme -exec chmod 700 {} ;$ find . -name runme -ls 397132 4 -rwx------ 1 shs shs 18 Sep 15 16:06 ./bin/runme
在這條命令中,{}
代表檔名。此命令將更改當前目錄和子目錄中任何名為 runme
的檔案的許可權。
把您想執行的任何命令放在 -exec
選項之後,並使用類似於上面命令的語法即可。
如上面的例子所示,您還可以透過其他條件進行搜尋:檔案的修改時間、所有者、許可權等。以下是一些示例。
$ sudo find /home -user peanut /home/peanut /home/peanut/.bashrc/home/peanut/.bash_logout/home/peanut/.profile/home/peanut/examples.desktop
$ sudo find /home -perm 777/home/shs/whatever /home/oops
$ sudo find /home -mtime +100/home/shs/.mozilla/firefox/krsw3giq.default/gmp-gmpopenh264/1.6/gmpopenh264.info/home/shs/.mozilla/firefox/krsw3giq.default/gmp-gmpopenh264/1.6/libgmpopenh264.so
像這樣的命令可以讓您找到修改時間較近的檔案。
$ sudo find /var/log -newer /var/log/syslog /var/log/auth.log
如果您正在清理磁碟空間,則可能需要刪除較大的重複檔案。確定檔案是否真正重複的最好方法是使用 fdupes
命令。此命令使用 md5 校驗和來確定檔案是否具有相同的內容。使用 -r
(遞迴)選項,fdupes
將在一個目錄下並查詢具有相同校驗和而被確定為內容相同的檔案。
如果以 root 身份執行這樣的命令,您可能會發現很多重複的檔案,但是很多檔案都是建立時被新增到主目錄的啟動檔案。
# fdupes -rn /home > /tmp/dups.txt# more /tmp/dups.txt/home/jdoe/.profile/home/tsmith/.profile/home/peanut/.profile/home/rocket/.profile/home/jdoe/.bashrc/home/tsmith/.bashrc/home/peanut/.bashrc/home/rocket/.bashrc
同樣,您可能會在 /usr
中發現很多重複的但不該刪除的配置檔案。所以,請謹慎利用 fdupes
的輸出。
fdupes
命令並不總是很快,但是要記住,它正在對許多檔案執行校驗和來做比較,你可能會意識到它是多麼有效。
有很多方法可以在 Linux 系統上查詢檔案。如果您可以描述清楚您正在尋找什麼,上面的命令將幫助您找到目標。
via:
作者: 譯者: 校對:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2768/viewspace-2808870/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux 檔案搜尋命令Linux
- Linux下怎樣搜尋檔案Linux
- 詳解Linux指令與檔案的搜尋Linux
- 檔案智慧搜尋
- win10搜尋檔案在哪裡 檢視搜尋檔案位置的方法Win10
- Linux檔案搜尋之 find / locate / whereis / whichLinux
- java檔案受限搜尋Java
- 【問題】 檔案搜尋
- solaris_linux_批次刪除搜尋出的檔案Linux
- Mac小技巧|Mac上如何搜尋隱藏檔案?Mac
- 搜尋檔案下包含某個字串的檔案字串
- linux 搜尋檔案及所有子目錄下的檔案裡的內容 (轉)Linux
- Vim模糊檔案搜尋fzf
- 檔案搜尋工具ProFind for MacMac
- ProFind for Mac(檔案搜尋工具)Mac
- Mac pdf檔案搜尋工具Mac
- 常見檔案搜尋命令
- Linux系統檔案命令精通指南(上)(轉)Linux
- 蘋果電腦上pdf檔案搜尋工具——PDF Search for Mac蘋果Mac
- 校驗檔案的搜尋規則
- 搜尋檔案中的關鍵字
- Eclipse + Jboss + Lomboz的檔案搜尋Eclipse
- PDF Search for Macpdf檔案搜尋工具Mac
- Find Any File for Mac(檔案搜尋)Mac
- Scherlokk for Mac檔案搜尋軟體Mac
- Scherlokk for Mac(檔案搜尋軟體)Mac
- 檔案搜尋軟體:Scherlokk MacMac
- HHDESK檔案內文字搜尋功能
- ProFind for Mac(mac檔案搜尋工具)Mac
- 實用的檔案搜尋工具:ProFind for MacMac
- Linux 搜尋檔案和資料夾的 4 種簡單方法Linux
- 工具推薦:搜尋和刪除Windows上重複檔案的神器:AllDupWindows
- Linux 檔案命令精通指南Linux
- 搜尋引擎指南robots.txt檔案
- PDF檔案搜尋工具PDF Search for MacMac
- PDF Search for Mac(pdf檔案搜尋工具)Mac
- 檔案搜尋工具:Find Any File for MacMac
- pdf檔案搜尋工具:PDF Search MacMac