當前位置:
首頁 > 知識 > Linux中的文件查找技巧

Linux中的文件查找技巧


來自:編程珠璣(微信號:shouwangxiansheng)


前言


Linux常用命令中,有些命令可以幫助我們查找二進位文件,幫助手冊或源文件的位置,也有的命令可以幫助我們查找磁碟上的任意文件,今天我們就來看看這些命令如何使用。

which


which命令會在PATH變數指定的路徑中,搜索某個系統命令的位置。例如:


which

 -a 

which

  

#查看命令which所在位置,-a參數表示找出所有


/usr/bin/

which


/bin/

which



PATH變數有哪些內容呢?我們來看一下(不同電腦可能不同):

echo $PATH
/home/hyb/bin:

/home/

hyb/.local/bin:

/usr/

local/sbin:

/usr/

local/bin:

/usr/

sbin:

/usr/

bin:

/sbin:/

bin:

/usr/g

ames:

/usr/

local/games:

/snap/

bin:

/usr/

lib/jvm/java

-8

-oracle/bin:

/usr/

lib/jvm/java

-8

-oracle/db/bin:

/usr/

lib/jvm/java

-8

-oracle/jre/bin

PATH環境變數存放著一些路徑信息,例如/usr/bin,當你在shell終端敲入一個命令,但是在PATH中包含的路徑下沒有時並且也不是內置命令時,就會提示:command not found。


當你已經安裝了一個命令,但是使用時卻提示找不到該命令,可以查看該環境變數,是否有你安裝命令的路徑。

所以是不是明白了為什麼有些命令或程序需要添加環境變數才能直接使用了吧?


whereis


whereis命令用於搜索程序的二進位文件,源代碼文件或幫助文檔。例如:


whereis ls  

#如果上述三者有,則三者都會顯示。


ls: /bin/ls /usr/share/man/man1/ls.1.gz

whereis -m ls 

#只查看ls的幫助手冊


ls: /usr/share/man/man1/ls.1.gz

whereis -b ls 

#只查找ls的二進位文件


ls: /bin/ls

whereis stdio.h 

#查找stdio.h頭文件,和幫助手冊


stdio: /usr/include/stdio.h /usr/share/man/man3/stdio.3.gz



同樣地,它不能查找到內置命令


type


type用於查看命令類型,一般有以下類型:


alias

:別名
keyword:關鍵字

builtin

:內置命令
file:外部命令

而常見參數如下:

-t 輸出類型名,如file


-p 如果是外部命令,則顯示其所在路徑


-a 對於外部命令,它會顯示命令路徑,命令類型等信息



我們來看幾個例子:

type ls   

#ls是一個別名

ls 

is

 aliased 

to

 `ls --color=

auto

"

type cd    

#cd是一個內置命令


cd 

is

 a shell builtin

type find
find 

is

 /usr/bin/find

type  

function

  

#function是一個shell關鍵字


function

 

is

 a shell keyword

type -a which  

#顯示所有路徑


which 

is

 /usr/bin/which
which 

is

 /bin/which

locate


前面所說的命令都限於查找命令,幫助手冊或源文件,而locate用於快速查找任何文件。它從一個系統資料庫進行文件查找,而不需要遍歷磁碟,因此速度極快。通常該系統資料庫每天更新一次(可以查看系統的/etc/cron.daily/mlocate,不同系統可能不一樣)。


常見選項如下:


-e  僅查找存在的文件


-q  安靜模式,不會顯示任何錯誤訊息


-n  至多顯示 n個輸出


-r  使用正規運算式


-i  查找忽略大小寫


-c  列印匹配結果數量



假設當前目錄早已存在以下文件:

locate

.txt

  

locate

.log

  

LOCATE

.zip



我們來看一些實例。


快速查找文件

locate

 locate.txt  

#查找locate.txt


/home/hyb/workspaces/shell/locate/locate.txt

查找存在的文件

locate

 locate.txt  

#查找之前刪除locate.txt


#雖然文件不存在,但是仍然被查找出來


/home/hyb/workspaces/shell/locate/locate.txt 

locate -e locate.txt  

#-e參數可以查找只存在的文件


(由於該文件不存在,因此也不會被查找出來)

查找計算文件的數量

locate

 -c locate.log 

#只計算查找到的數量


 

1


忽略大小寫查找

locate

 -i locate.zip
/home/hyb/workspaces/shell/locate/LOCATE.zip

使用正則表達式


普通的查找是模糊匹配的,因此只要目標名稱中包含要搜索的名稱,都會被搜索出來,但是我們可以利用正則表達式,來精確查找。


locate -r /locate.

log

$  #查找以/locate.

log

結尾的文件 

結合正則表達式,locate有更豐富的查找方式,這裡不展開。


locate查找存在的一個問題是,如果最近有文件被刪除,它仍然能找出來,最近有文件增加,它卻找不到。也就是說,它的查找並不具備實時性。當然我們可以手動執行updatedb命令來更新資料庫(可能需要root許可權)。


find


find命令是linux下一個強大的查找命令。與locate命令相比,它需要遍歷磁碟文件,因此查找速度較慢,但正因如此,它的實時性比locate好得多。另外一方面,find命令的查找條件比locate豐富得多。


以名稱為條件


最常用的恐怕就是以文件名為條件了,涉及參數-name,-iname,例如:
當前目錄下查找以sort開頭的文件:


find

 ./ -name 

"sort*"


./sort4.txt
./sort2.txt
./sort3.txt
./

sort

.txt

find

 ./ -iname 

"SORT.txt"

 #忽略大小寫
./

sort

.txt

以許可權為條件


有時候需要查找特定許可權的文件,可以使用-perm參數,例如查找當前目錄下許可權為777的文件:


find

 ./ -perm 

777


./test
./

sort

.txt

以文件類型為條件


涉及參數-type,例如要查找當前目錄下的符號鏈接文件:


find ./ -

type

 l
./

test


ls -al 

test


lrwxrwxrwx 1 hyb hyb 8 11月 24 10:10 

test

 -> home.zip

主要類型有:




  • f 普通文件



  • d 目錄



  • b 塊設備文件



  • c 字元設備文件



  • l 符號鏈接



  • s 套接字



  • p 管道文件


以文件大小為條件


涉及參數-size,例如:


find ./ -size 1k  

#查找當前目錄下小於1k的文件


./

test


./sort4.txt
./sort2.txt
./sort3.txt
./test.sh
./sort.txt

find -size +1M  

#查找當前目錄下大於1M的文件


./test.zip

常用單位有:




  • k 千位元組



  • M 兆位元組



  • G 吉位元組



  • c 位元組



  • b 塊,一般為512位元組



  • w 字大小,兩個位元組


以歸屬為條件


涉及參數-user,-nouser,-group,-nogroup等,例如:


find

 ./ -user root  

#查找當前目錄下root用戶的文件


find ./ -nouser   

#查找當前目錄下root用戶的被刪除的文件



-group,-nogroup類似的用法,只不過條件是用戶組。


以時間為條件


涉及參數-mtime,-atime,-ctime,-newer,-anewer,-cnewer,-amin,-cmin等,例如:


find

 ./ -mtime 

3

 #查找

3

天前更改過的文件

find

 ./ -mtime 

-3

 #查找

3

天內更改過的文件

find

 ./ -mtime 

0

 #查找今天更改過的文件

find

 ./ -newer 

sort

.txt #查找比

sort

.txt修改時間更新的文件

find

 ./ -anewer 

sort

.txt #查找比

sort

.txt訪問時間更新的文件

find

 ./ -amin  

5

 #查找

5

分鐘之前訪問過的文件

註:




  • atime 最後訪問時間



  • mtime 最後修改時間



  • ctime 最後修改時間,這裡包括屬性和許可權


find命令的查找條件比較多,而其用法也非常豐富,本文僅簡單介紹,後面的文章將會介紹find的一些高級用法。


總結




  • which命令可用於查找命令位置。



  • whereis可查找命令的位置,手冊,源文件等。



  • which和whereis都不能查找內置命令位置。



  • locate優點:查找速度塊;缺點:模糊匹配,匹配路徑,實時性差。



  • find優點:準確查找,功能豐富;缺點:速度較慢。



  • find高級用法將在後面的文章介紹。

●編號667,輸入編號直達本文



●輸入m獲取文章

目錄

推薦↓↓↓



運維


更多推薦

25個技術類公眾微信


涵蓋:程序人生、演算法與數據結構、黑客技術與網路安全、大數據技術、前端開發、Java、Python、Web開發、安卓開發、iOS開發、C/C++、.NET、Linux、資料庫、運維等。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Linux學習 的精彩文章:

看懂英文技術文檔,每天只需要10分鐘做這件事……
Linux下Shell日期的格式,你知道幾種?

TAG:Linux學習 |