自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何精通Linux上的文件搜索

系統(tǒng) Linux
在 Linux 系統(tǒng)上搜索文件的方法有很多,有的命令很簡單,有的很詳細(xì)。我們的目標(biāo)是:縮小搜索范圍,找到您正在尋找的文件,又不受其他文件的干擾。在今天的文章中,我們將研究一些對文件搜索最有用的命令和選項(xiàng)。

[[218937]]

在 Linux 系統(tǒng)上搜索文件的方法有很多,有的命令很簡單,有的很詳細(xì)。我們的目標(biāo)是:縮小搜索范圍,找到您正在尋找的文件,又不受其他文件的干擾。在今天的文章中,我們將研究一些對文件搜索最有用的命令和選項(xiàng)。我們將涉及:

  • 快速搜索
  • 更復(fù)雜的搜索條件
  • 組合條件
  • 反轉(zhuǎn)條件
  • 簡單和詳細(xì)的回應(yīng)
  • 尋找重復(fù)的文件

有很多有用的命令可以搜索文件,find 命令可能是其中最有名的,但它不是唯一的命令,也不一定總是找到目標(biāo)文件的最快方法。

 

快速搜索命令:which 和 locate

搜索文件的最簡單的命令可能就是 whichlocate 了,但二者都有一些局限性。which 命令只會(huì)在系統(tǒng)定義的搜索路徑中,查找可執(zhí)行的文件,通常用于識(shí)別命令。如果您對輸入 which 時(shí)會(huì)運(yùn)行哪個(gè)命令感到好奇,您可以使用命令 which which,它會(huì)指出對應(yīng)的可執(zhí)行文件。

  1. $ which which
  2. /usr/bin/which

which 命令會(huì)顯示它找到的***個(gè)以相應(yīng)名稱命名的可執(zhí)行文件(也就是使用該命令時(shí)將運(yùn)行的那個(gè)文件),然后停止。

locate 命令更大方一點(diǎn),它可以查找任意數(shù)量的文件,但它也有一個(gè)限制:僅當(dāng)文件名被包含在由 updatedb 命令構(gòu)建的數(shù)據(jù)庫時(shí)才有效。該文件可能會(huì)存儲(chǔ)在某個(gè)位置,如 /var/lib/mlocate/mlocate.db,但不能用 locate 以外的任何命令讀取。這個(gè)文件的更新通常是通過每天通過 cron 運(yùn)行的 updatedb 進(jìn)行的。

簡單的 find 命令沒有太多限制,不過它需要指定搜索的起點(diǎn)和搜索條件。最簡單的 find 命令:按文件名搜索文件。如下所示:

  1. $ find . -name runme
  2. ./bin/runme

如上所示,通過文件名搜索文件系統(tǒng)的當(dāng)前位置將會(huì)搜索所有子目錄,除非您指定了搜索深度。

 

不僅僅是文件名

find 命令允許您搜索除文件名以外的多種條件,包括文件所有者、組、權(quán)限、大小、修改時(shí)間、缺少所有者或組,和文件類型等。除了查找文件外,您還可以刪除文件、對其進(jìn)行重命名、更改所有者、更改權(quán)限和對找到的文件運(yùn)行幾乎任何命令。

下面兩條命令會(huì)查找:在當(dāng)前目錄中 root 用戶擁有的文件,以及不被指定用戶(在本例中為 shs)所擁有的文件。在這個(gè)例子中,兩個(gè)輸出是一樣的,但并不總是如此。

  1. $ find . -user root -ls
  2. 396926 0 lrwxrwxrwx 1 root root 21 Sep 21 09:03 ./xyz -> /home/peanut/xyz
  3. $ find . ! -user shs -ls
  4. 396926 0 lrwxrwxrwx 1 root root 21 Sep 21 09:03 ./xyz -> /home/peanut/xyz

感嘆號(hào) ! 字符代表“非”:反轉(zhuǎn)跟隨其后的條件。

下面的命令將查找具有特定權(quán)限的文件:

  1. $ find . -perm 750 -ls
  2. 397176 4 -rwxr-x--- 1 shs shs 115 Sep 14 13:52 ./ll
  3. 398209 4 -rwxr-x--- 1 shs shs 117 Sep 21 08:55 ./get-updates
  4. 397145 4 drwxr-x--- 2 shs shs 4096 Sep 14 15:42 ./newdir

接下來的命令顯示具有 777 權(quán)限的非符號(hào)鏈接文件:

  1. $ sudo find /home -perm 777 ! -type l -ls
  2. 397132 4 -rwxrwxrwx 1 shs shs 18 Sep 15 16:06 /home/shs/bin/runme
  3. 396949 4 -rwxrwxrwx 1 root root 558 Sep 21 11:21 /home/oops

以下命令將查找大小超過千兆字節(jié)的文件。請注意,我們找到了一個(gè)非常有趣的文件。它以 ELF core 文件格式表示了該系統(tǒng)的物理內(nèi)存。

  1. $ sudo find / -size +1G -ls
  2. 4026531994 0 -r-------- 1 root root 140737477881856 Sep 21 11:23 /proc/kcore
  3. 1444722 15332 -rw-rw-r-- 1 shs shs 1609039872 Sep 13 15:55 /home/shs/Downloads/ubuntu-17.04-desktop-amd64.iso

只要您知道 find 命令是如何描述文件類型的,就可以通過文件類型來查找文件。

  1. b = 塊設(shè)備文件
  2. c = 字符設(shè)備文件
  3. d = 目錄
  4. p = 命名管道
  5. f = 常規(guī)文件
  6. l = 符號(hào)鏈接
  7. s = 套接字
  8. D = 門(僅限 Solaris

在下面的命令中,我們要尋找符號(hào)鏈接和套接字:

  1. $ find . -type l -ls
  2. 396926 0 lrwxrwxrwx 1 root root 21 Sep 21 09:03 ./whatever -> /home/peanut/whatever
  3. $ find . -type s -ls
  4. 395256 0 srwxrwxr-x 1 shs shs 0 Sep 21 08:50 ./.gnupg/S.gpg-agent

您還可以根據(jù) inode 號(hào)來搜索文件:

  1. $ find . -inum 397132 -ls
  2. 397132 4 -rwx------ 1 shs shs 18 Sep 15 16:06 ./bin/runme

另一種通過 inode 搜索文件的方法是使用 debugfs 命令。在大的文件系統(tǒng)上,這個(gè)命令可能比 find 快得多,您可能需要安裝 icheck。

  1. $ sudo debugfs -R 'ncheck 397132' /dev/sda1
  2. debugfs 1.42.13 (17-May-2015)
  3. Inode Pathname
  4. 397132 /home/shs/bin/runme

在下面的命令中,我們從主目錄(~)開始,限制搜索的深度(即我們將搜索子目錄的層數(shù)),并只查看在最近一天內(nèi)創(chuàng)建或修改的文件(mtime 設(shè)置)。

  1. $ find ~ -maxdepth 2 -mtime -1 -ls
  2. 407928 4 drwxr-xr-x 21 shs shs 4096 Sep 21 12:03 /home/shs
  3. 394006 8 -rw------- 1 shs shs 5909 Sep 21 08:18 /home/shs/.bash_history
  4. 399612 4 -rw------- 1 shs shs 53 Sep 21 08:50 /home/shs/.Xauthority
  5. 399615 4 drwxr-xr-x 2 shs shs 4096 Sep 21 09:32 /home/shs/Downloads

 

不僅僅是列出文件

使用 -exec 選項(xiàng),在您使用 find 命令找到文件后可以以某種方式更改文件。您只需參照 -exec 選項(xiàng)即可運(yùn)行相應(yīng)的命令。

  1. $ find . -name runme -exec chmod 700 {} \;
  2. $ find . -name runme -ls
  3. 397132 4 -rwx------ 1 shs shs 18 Sep 15 16:06 ./bin/runme

在這條命令中,{} 代表文件名。此命令將更改當(dāng)前目錄和子目錄中任何名為 runme 的文件的權(quán)限。

把您想運(yùn)行的任何命令放在 -exec 選項(xiàng)之后,并使用類似于上面命令的語法即可。

 

其他搜索條件

如上面的例子所示,您還可以通過其他條件進(jìn)行搜索:文件的修改時(shí)間、所有者、權(quán)限等。以下是一些示例。

 

根據(jù)用戶查找文件

  1. $ sudo find /home -user peanut
  2. /home/peanut
  3. /home/peanut/.bashrc
  4. /home/peanut/.bash_logout
  5. /home/peanut/.profile
  6. /home/peanut/examples.desktop

 

根據(jù)權(quán)限查找文件

  1. $ sudo find /home -perm 777
  2. /home/shs/whatever
  3. /home/oops

 

根據(jù)修改時(shí)間查找文件

  1. $ sudo find /home -mtime +100
  2. /home/shs/.mozilla/firefox/krsw3giq.default/gmp-gmpopenh264/1.6/gmpopenh264.info
  3. /home/shs/.mozilla/firefox/krsw3giq.default/gmp-gmpopenh264/1.6/libgmpopenh264.so

 

通過比較修改時(shí)間查找文件

像這樣的命令可以讓您找到修改時(shí)間較近的文件。

  1. $ sudo find /var/log -newer /var/log/syslog
  2. /var/log/auth.log

 

尋找重復(fù)的文件

如果您正在清理磁盤空間,則可能需要?jiǎng)h除較大的重復(fù)文件。確定文件是否真正重復(fù)的***方法是使用 fdupes 命令。此命令使用 md5 校驗(yàn)和來確定文件是否具有相同的內(nèi)容。使用 -r(遞歸)選項(xiàng),fdupes 將在一個(gè)目錄下并查找具有相同校驗(yàn)和而被確定為內(nèi)容相同的文件。

如果以 root 身份運(yùn)行這樣的命令,您可能會(huì)發(fā)現(xiàn)很多重復(fù)的文件,但是很多文件都是創(chuàng)建時(shí)被添加到主目錄的啟動(dòng)文件。

  1. # fdupes -rn /home > /tmp/dups.txt
  2. # more /tmp/dups.txt
  3. /home/jdoe/.profile
  4. /home/tsmith/.profile
  5. /home/peanut/.profile
  6. /home/rocket/.profile
  7.  
  8. /home/jdoe/.bashrc
  9. /home/tsmith/.bashrc
  10. /home/peanut/.bashrc
  11. /home/rocket/.bashrc

同樣,您可能會(huì)在 /usr 中發(fā)現(xiàn)很多重復(fù)的但不該刪除的配置文件。所以,請謹(jǐn)慎利用 fdupes 的輸出。

fdupes 命令并不總是很快,但是要記住,它正在對許多文件運(yùn)行校驗(yàn)和來做比較,你可能會(huì)意識(shí)到它是多么有效。

 

總結(jié)

有很多方法可以在 Linux 系統(tǒng)上查找文件。如果您可以描述清楚您正在尋找什么,上面的命令將幫助您找到目標(biāo)。 

責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2014-02-28 10:26:16

Linux文本搜索ack

2019-04-25 13:30:14

Linux文件分身

2019-10-11 08:00:00

Linux命令最大文件

2023-06-24 10:44:34

Linux文件搜索

2020-03-24 08:00:00

Linux日志文件

2019-06-10 08:15:52

Linux命令

2011-01-11 15:44:08

2023-12-20 22:04:17

Linux二進(jìn)制文件

2020-12-28 06:44:45

FedoraLinux RPM文件

2009-10-23 15:53:00

linux庫文件

2024-01-26 17:26:19

LinuxNautilus文件搜索

2013-12-03 09:12:37

Linux命令kill命令

2015-03-30 11:34:19

LinuxFSlint

2019-02-25 15:36:52

Linux復(fù)制文件遠(yuǎn)程系統(tǒng)

2010-01-14 09:52:27

linux文件系統(tǒng)

2019-04-17 14:32:39

加密文件Windows 10搜索結(jié)果

2020-08-23 09:16:46

Linux文件合并和排序

2020-08-24 17:26:09

Linux合并文件排序文件

2022-08-14 19:27:16

LinuxmacOS

2020-09-30 06:00:00

Linux誤刪除恢復(fù)文件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)