Linux之檔案查詢命令

2021-09-20 16:09:36 字數 4130 閱讀 6812

linux之檔案查詢

本地檔案查詢

實際操作即檢索其資料庫檔案

/var/lib/mlocate/mlocate.db   資料庫檔案

updatedb  更新資料庫

locate [options] files

-i 忽略大小寫

-n # 只列舉前#個匹配專案

-r 支援基本正規表示式

locate可實現根據使用者許可權,只顯示相關檔案,可能只搜尋使用者具備讀取和執行許可權的目錄(此功能在locate自身實現)

首先檢視man文件中find命令的介紹,search for files in a directory hierarchy,在目錄層級中查詢檔案。

由其意可知道該命令用來查詢檔案。

那麼find命令是如何查詢檔案的呢?

find命令使用的是遍歷查詢(逐個查詢)的方法,在各個層級遍歷,最終找到目標檔案。

find命令有許多的條件限定,然後也是遍歷當前檔案系統所查詢,因此有以下各優缺點:

優:1 查詢精確

2 實時查詢

缺:1 消耗資源,查詢所需時間稍久

### find命令的使用

格式:    find [path...] [options]  [tests] [actions]

path:查詢路徑;預設為當前目錄

options:選項,find的各類選項

tests:匹配文字條件

actions:查詢之後find對查詢到的結果的執行動作

不寫路徑時,預設搜尋當前目錄

options:

-maxdepth levels:查詢的路徑最大層級深度

-mindepth levels:查詢的路徑最小層級深度

example:

檢視/etc下的一級子檔案

# find /etc -maxdepth 1

tests:

檔名-iname pattern:忽略大小寫

-name pattern:根據檔名查詢

此處的pattern是globbing匹配的標準

example:

查詢以s或s開頭的檔案                        

# find /etc -iname s*

-regex pattern:基於正規表示式模式查詢檔案,匹配的是整個路徑,而不是檔名

example:

根據匹配條件匹配路徑

# find /etc  -regex '.*ts'

許可權許可權分三類:u、g、o

-perm [-|/]mode

mode:精確查詢,完全符合mode的檔案

(如:222,匹配到的必須是222)

/mode: 三類許可權中一類中達到mode標準即可

(如:222,匹配到的可以是121、112、211、222等,如:777,匹配到的是,只要有許可權即可匹配)

-mode: 三類許可權全部要達到標準

(如:222,匹配到的許可權可以是222、333、444等等)

example:

查詢/var目錄下,所有使用者都是唯讀許可權的檔案

# find /var -perm 222

查詢/var目錄下,至少有一類使用者有讀許可權的檔案

# find /var -perm -222

查詢/var目錄下,所有使用者有讀許可權的檔案

# find /var -perm /222

檔案型別

-type #:

b:block,塊裝置檔案

c:character,字元裝置檔案

d:directory,目錄

p:pipe,管道

f:regular file,檔案

l:symbolic link,符號鏈結

s:socket,套接字檔案

example:

查詢/dev目錄下的字元裝置

# find /dev -type c

檔案屬主屬組:

-uid n:查詢屬主為指定uid的檔案

-gid n:查詢屬組為指定gid的檔案

-nouser:查詢沒有屬主的檔案

-nogroup:查詢沒有屬組的檔案

-user username:查詢指定屬主名的檔案

-group groupname:查詢指定屬組名的檔案

example:

查詢/etc目錄下uid為100的使用者所擁有的檔案

# find /etc -uid 100

查詢/etc目錄下沒有屬主的檔案

# find /etc -nouser

查詢/etc目錄下屬主名為sadan的檔案

# find /etc -user sadan

以下引數代表意義:

+n:大於n

-n:小於n

n:等於n

時間戳:

按天查詢:

-atime [+|-]#,

#: [#,#+1)

+#: [#+1,∞]

-#: [0,#)

-mtime [+|-]n

-ctime [+|-]n

按分鐘查詢:

-amin [+|-]n

-mmin [+|-]n

-cmin [+|-]n

example:

查詢/var目錄下,三天前訪問過的檔案

# find /var -atime +3

查詢/var目錄下,五天內修改過的檔案

# find /var -mtime -3

查詢/var目錄下, 昨天這個時間移動過的檔案

# find /var -ctime 1

查詢/var目錄下,一分鐘以前訪問過的檔案

# find /var -amin +1

檔案大小:

-size [+|-]#unit

常用單位:k, m, g,c(byte)

#unit: (#-1, #]

如:6k 表示(5k,6k]

-#unit:[0,#-1]

如:-6k 表示[0,5k]

+#unit:(#,∞)

如:+6k 表示(6k,∞)

example:

查詢/etc目錄下大於7k的檔案

# find /etc -size +7k

查詢/etc目錄下小於10m的檔案

find /etc -size -10m

查詢/etc目錄下等於15b的檔案

find /etc -size 15b

actions:

-delete:刪除查詢到檔案

-ls:相當ls -l命令,顯示檔案長格式資訊

-fls file:將查詢檔案顯示長格式並儲存到指定檔案中

-ok command {} \;    需要使用者進行確定之後再執行指定操作

-exec command {} \; 直接執行指定操作

其{}代表的是前面匹配到的內容

條件關係:

不加關係符號時,預設為與關係

! | -not : ! expr2; 非     

-o: expr1 -a expr2; 或     

-a: expr1 -a expr2; 與

()需要加\ 如:\(\)

example:

查詢/etc下,前天到今天為止訪問過的大小為4k的檔案,並刪除

find /etc -atime -2 -a -size 4k -delete

查詢/var目錄下屬主為root,且屬組為mail的所有檔案,並顯示長格式資訊

find /var -user root -a -group mail -ls

查詢/var目錄下屬主不為root,且屬組不為mail的所有檔案,並將查詢到的檔案儲存到/tmp目錄中

find /var !\(-user root -o -group mail\) -fls /tmp

查詢/etc目錄下大於1m且型別為普通檔案,並讓互動式刪除

find /etc -size +1m -a -type f -ok rm -rf {} \;

查詢/etc/init.d目錄下,所有使用者都有執行許可權,且其它使用者有寫許可權,將查詢到的檔案改名為*.new

find /etc/init.d -perm -111  -a -perm 002 -exec mv {} {}.new \;

linux基礎命令之檔案查詢

1 指令碼檔名的查詢 which 尋找 執行檔案 命令格式 which a command 引數 a 將所有由path目錄中可以找到的命令均列出,而不只第乙個被找到的命令名稱 範例一 分別用root與一般賬號查詢ifconfig這個命令的完整檔名 root www which ifconfig sb...

Linux之檔案查詢命令詳解

查詢檔案 find type f 查詢目錄 find type d 查詢名字為test的檔案或目錄 find name test 查詢名字符合正規表示式的檔案,注意前面的 查詢到的檔案帶有目錄 find regex so.gz 查詢目錄並列出目錄下的檔案 為找到的每乙個目錄單獨執行ls命令,沒有選項...

Linux 檔案查詢之 find 命令

對linux新手來說查詢檔案簡直是一大災難,現做乙個簡單的小結。通過完整檔名查詢 find 目錄 name 檔名 通過部分檔名查詢 find 目錄 name 引號 星號 我們還可以根據檔案大小 修改日期等檔案的特徵進行查詢 find size 1500c 指定系統在根目錄中查詢出1500位元組的檔案...