日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Find命令的使用和解析

發布時間:2023/12/29 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Find命令的使用和解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Find命令

1、基本語法

find+[路徑]+[參數] -name #文件名 -not #非,取反 -user #文件所有人 -group #文件所有組 -a #并且關系 -o #或者關系

2、基本參數的使用

name-按照文件名查找

[root@localhost ~]# find /etc/ -name ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens33

user-按文件的所有人查找

[root@localhost ~]# find /home -user root /home

group-按文件的所有組查找

[root@localhost ~]# find /mnt -group westos /mnt/file2 /mnt/file3

a表示并且

and:邏輯與,在命令中用“-a”表示,是系統缺省的選項,表示只有當所給的條件都滿足時,尋找條件才算滿足

默認不加任何參數也是表示并且

#基本使用鏈接多個篩選條件 [root@localhost ~]# find /mnt -user root -a -group westos /mnt/file2#/home目錄及子目錄下查找所有以.txt和.pdf結尾的文件. find /home \( -name "*.txt" -o -name "*.pdf" \)find /home -name "*.txt" -o -name "*.pdf"#匹配文件路徑或者文件,路徑名符合local的文件 find /usr/ -path "*local*"#匹配tmp或hhh*的所有文件 #or:邏輯或,在命令中用“-o”表示。該運算符表示只要所給的條件中有一個滿足 時,尋找條件就算滿足。例如: find –name ’tmp’ –o –name ’hhh*’

o表示或者

or:邏輯或,在命令中用“-o”表示。該運算符表示只要所給的條件中有一個滿足 時,尋找條件就算滿足。

find –name ’tmp’ –o –name ’hhh*’ [root@localhost ~]# find /mnt -user root -o -group westos /mnt /mnt/file2 /mnt/file3 /mnt/file4 /mnt/file5

not-表示非,即反向選擇

否定not:邏輯非,在命令中用“!”表示。該運算符表示查找不滿足所給條件的文件 。例如:

#找出/home下不是以.txt結尾的文件 find /home ! -name "*.txt"[root@localhost ~]# find /mnt -not -user student /mnt /mnt/file2 /mnt/file4 /mnt/file5

3、常用參數

按文件所在的深度(層次)查找

maxdepth和mindepth

按文件所在的深度(層次)查找

-maxdepth #最大深度 -mindepth #最小深度

舉例說明

##-maxdepth表示最大深度,即最多層次 [root@localhost ~]# find /etc/ -maxdepth 1 -name passwd /etc/passwd [root@localhost ~]# find /etc/ -maxdepth 2 -name passwd /etc/passwd /etc/pam.d/passwd [root@localhost ~]# ##-mindepth表示最小深度,即最少層次 [root@localhost ~]# find /etc/ -mindepth 2 -name passwd /etc/pam.d/passwd [root@localhost ~]# find /etc/ -mindepth 1 -name passwd /etc/passwd /etc/pam.d/passwd

表示文件大小(size)

size的說明:

#等于大于小于的表示-size 20K # 查找大小為20K的文件 -size -20K # -表示小于;查找比20K小的文件 -size +20k # +表示大于;查看比20K大的文件#文件大小單元:b —— 塊(512字節)c —— 字節w —— 字(2字節)k —— 千字節M —— 兆字節G —— 吉字節

用法舉例:

#查找/mnt目錄下文件大小為20k的文件 [root@localhost mnt]# find /mnt/ -size 20k /mnt/file2##查找/mnt目錄下比20k小的文件 [root@localhost mnt]# find /mnt/ -size -20k /mnt/ /mnt/file1##查找/mnt目錄下比20k大的文件 [root@localhost mnt]# find /mnt/ -size +20k /mnt/file3#搜索大于10KB的文件 find . -type f -size +10k#搜索小于10KB的文件 find . -type f -size -10k#搜索等于10KB的文件 find . -type f -size 10k

type文件類型

主要的文件類型:f #普通文件d #目錄b #塊設備s #套接字c #字符設備l #鏈接p #管道

按文件類型查找

##f表示普通文件 [root@localhost ~]# find /dev -type f /dev/shm/pulse-shm-620843697 /dev/shm/pulse-shm-1247103260 /dev/shm/pulse-shm-2690706600 /dev/shm/pulse-shm-368331657##b表示塊設備 [root@localhost ~]# find /dev -type b /dev/dm-0 /dev/sr0 /dev/vdb1 /dev/vdb /dev/vda1 /dev/vda##s表示套接字 [root@localhost ~]# find /dev -type s /dev/log##p表示管道 [root@localhost ~]# find /dev -type p /dev/initctl [root@localhost ~]# find /mnt -type f /mnt/file1 /mnt/file3 /mnt/file2##d表示目錄 [root@localhost ~]# find /mnt -type d /mnt

perm表示權限

-perm 444 #查找文件權限 -perm -444 # -表示并且;查找文件權限中u位有r權限,并且g位有r權限,并且o位有r權限的文件 -perm /444 # /表示或者;查找文件權限中u位有r權限,或者g位有r權限,或者o位有r權限的文件 -perm /777 # 777=rwx rwx rwx 即9個條件中滿足任意一個即可

按文件權限查找

##查找文件權限為404的文件 [root@localhost mnt]# find /mnt -perm 404 /mnt/file2##查看文件權限中u位有r權限,并且o位有r權限的文件 [root@localhost mnt]# find /mnt -perm -404 /mnt /mnt/file1 /mnt/file2##查看文件權限中u位有r權限,或者o位有r權限的文件 [root@localhost mnt]# find /mnt -perm /404 /mnt /mnt/file1 /mnt/file2 /mnt/file3 [root@localhost mnt]# ll -d /mnt/ drwxr-xr-x. 2 root root 42 Nov 14 09:41 /mnt/

基于文件時間戳

find . -type f 時間戳 #UNIX/Linux文件系統每個文件都有三種時間戳:#訪問時間(-atime/天,-amin/分鐘):用戶最近一次訪問時間。#修改時間(-mtime/天,-mmin/分鐘):文件最后一次修改時間。#變化時間(-ctime/天,-cmin/分鐘):文件數據元(例如權限等)最后一次修改時間。 #搜索最近七天內被訪問過的所有文件 find . -type f -atime -7#搜索恰好在七天前被訪問過的所有文件 find . -type f -atime 7#搜索超過七天內被訪問過的所有文件 find . -type f -atime +7#搜索訪問時間超過10分鐘的所有文件 find . -type f -amin +10#找出比file.log修改時間更長的所有文件 find . -type f -newer file.log

借助-exec選項及其他命令結合

-exec:對搜索的結構指令指定的shell命令。注意格式要正確:

-exec 命令 {}

在}和\之間一定要有空格才行;
{}表示命令的參數即為所找到的文件;命令的末尾必須以“ ;”結束。

#在root以及子目錄查找不包括目錄/root/bin的,greek用戶的,文件類型為普通文件的,3天之前的名為test-find.c的文件,并將結構輸出,find命令如下: find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -print #對上述例子搜索出來的文件進行刪除操作,命令如下: find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -exec rm {} \; #查找當前目錄中所有以main開頭的文件,并顯示這些文件的內容。 find . - name ‘main*’ - exec more {} \; #刪除當前目錄下所有一周之內沒有被訪問過的a .out或*.o文件 find . \(- name a.out - o - name ‘*.o’\)> - atime +7 - exec rm {} \;

此條指令解釋:

  • 命令中的“.”表示當前目錄,此時 find 將從當前目錄開始,逐個在其子目錄中查找滿足后面指定條件的文件。
  • “(” 和 “)” 表示括號(),其中的 “\” 稱為轉義符。之所以這樣寫是由于對 Shell 而言,(和)另有不同的含義,而不是這里的用于組合條件的用途。
  • “-name a.out” 是指要查找名為a.out的文件;
  • “-name ‘*.o’” 是指要查找所有名字以 .o 結尾的文件。
  • 這兩個 -name 之間的 -o 表示邏輯或(or),即查找名字為a.out或名字以 .o結尾的文件。
  • find命令在當前目錄及其子目錄下找到這佯的文件之后,再進行判斷,看其最后訪問時間 是否在7天以前(條件 -atime +7),若是,則對該文件執行命令 rm(-exec rm {} \;)。
  • 其中 {} 代表當前查到的符合條件的文件名,;則是語法所要求的。
    上述命令中第一行的最后一個 \ 是續行符。當命令太長而在一行寫不下時,可輸入一個 \,之后系統將顯示一個 >,指示用戶繼續輸入命令。

基于正則表達式匹配文件路徑

find . -regex ".*\(\.txt\|\.pdf\)$"#同上,但忽略大小寫 find . -iregex ".*\(\.txt\|\.pdf\)$"

刪除匹配文件

#刪除/data下所有.txt文件 find /data -type f -name "*.txt" -delete

4、場景實例解析

#找出當前目錄下所有root的文件,并把所有權更改為用戶tom find .-type f -user root -exec chown tom {} \;#上例中,{} 用于與-exec選項結合使用來匹配所有文件,然后會被替換為相應的文件名。 #找出自己家目錄下所有的.txt文件并刪除 find $HOME/. -name "*.txt" -ok rm {} \;#上例中,-ok和-exec行為一樣,不過它會給出提示,是否執行相應的操作。 #查找當前目錄下所有.txt文件并把他們拼接起來寫入到all.txt文件中 find . -type f -name "*.txt" -exec cat {} \;> all.txt#將30天前的.log文件移動到old目錄中 find . -type f -mtime +30 -name "*.log" -exec cp {} old \;#找出當前目錄下所有.txt文件并以“File:文件名”的形式打印出來 find . -type f -name "*.txt" -exec printf "File: %s\n" {} \;#因為單行命令中-exec參數中無法使用多個命令,以下方法可以實現在-exec之后接受多條命令 -exec ./text.sh {} \;

搜索但跳出指定目錄

#查找當前目錄或者子目錄下所有.txt文件,但是跳過子目錄sk find . -path "./sk" -prune -o -name "*.txt" -print

長度為零的文件

#列出所有長度為零的文件 find . -empty

刪除大日志文件

服務器磁盤滿,一般由大的日志文件導致,需找到大文件并刪除。

find / -size +500M -print0|xargs -0 du -m|sort -nr #find指令為找出500M以上的文件,print0和xargs -0配合使用,用來解決文件名中有空格或特殊字符問題。du -m是查看這些文件的大小,并以m為單位顯示。最后sort -nr是按照數字反向排序(大的文件在前)或者#上述方法從根路徑查找,可能列出一些系統文件。可以在這個查找之前先進行一下過濾。 #使用du -m -d 1 /|sort -nr 先看看根路徑下,哪個文件夾比較大 #并且有嫌疑是導致磁盤滿的罪魁禍首。然后再基于那個目錄進行find。

模糊查找

#寫過一個xxx.c的文件,但是忘了放哪里了 find / -name *xxx*.c 模糊查找下這個文件

其他實例

#在root以及子目錄查找不包括目錄/root/bin的,greek用戶的,文件類型為普通文件的,3天之前的名為test-find.c的文件,并將結構輸出,find命令如下: find / -name "test-find.c" -type f -mtime +3 -user greek -prune /root/bin -print #將目前目錄及其子目錄下所有延伸檔名是 c 的文件列出來。 find . -name "*.c" #將目前目錄其其下子目錄中所有一般文件列出 find . -type f #將目前目錄及其子目錄下所有最近 20 天內更新過的文件列出 find . -ctime -20 #查找/var/log目錄中更改時間在7日以前的普通文件,并在刪除之前詢問它們: find /var/log -type f -mtime +7 -ok rm {} \; #查找前目錄中文件屬主具有讀、寫權限,并且文件所屬組的用戶和其他用戶具有讀權限的文件:find . -type f -perm 644 -exec ls -l {} \; #為了查找系統中所有文件長度為0的普通文件,并列出它們的完整路徑: find / -type f -size 0 -exec ls -l {} \;

5、完整選項及參考來源

-amin<分鐘>:查找在指定時間曾被存取過的文件或目錄,單位以分鐘計算; -anewer<參考文件或目錄>:查找其存取時間較指定文件或目錄的存取時間更接近現在的文件或目錄; -atime<24小時數>:查找在指定時間曾被存取過的文件或目錄,單位以24小時計算; -cmin<分鐘>:查找在指定時間之時被更改過的文件或目錄; -cnewer<參考文件或目錄>查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄; -ctime<24小時數>:查找在指定時間之時被更改的文件或目錄,單位以24小時計算; -daystart:從本日開始計算時間; -depth:從指定目錄下最深層的子目錄開始查找; -empty:尋找文件大小為0 Byte的文件,或目錄下沒有任何子目錄或文件的空目錄; -exec<執行指令>:假設find指令的回傳值為True,就執行該指令; -false:將find指令的回傳值皆設為False; -fls<列表文件>:此參數的效果和指定“-ls”參數類似,但會把結果保存為指定的列表文件; -follow:排除符號連接; -fprint<列表文件>:此參數的效果和指定“-print”參數類似,但會把結果保存成指定的列表文件; -fprint0<列表文件>:此參數的效果和指定“-print0”參數類似,但會把結果保存成指定的列表文件; -fprintf<列表文件><輸出格式>:此參數的效果和指定“-printf”參數類似,但會把結果保存成指定的列表文件; -fstype<文件系統類型>:只尋找該文件系統類型下的文件或目錄; -gid<群組識別碼>:查找符合指定之群組識別碼的文件或目錄; -group<群組名稱>:查找符合指定之群組名稱的文件或目錄; -help或——help:在線幫助; -ilname<范本樣式>:此參數的效果和指定“-lname”參數類似,但忽略字符大小寫的差別; -iname<范本樣式>:此參數的效果和指定“-name”參數類似,但忽略字符大小寫的差別; -inum<inode編號>:查找符合指定的inode編號的文件或目錄; -ipath<范本樣式>:此參數的效果和指定“-path”參數類似,但忽略字符大小寫的差別; -iregex<范本樣式>:此參數的效果和指定“-regexe”參數類似,但忽略字符大小寫的差別; -links<連接數目>:查找符合指定的硬連接數目的文件或目錄; -iname<范本樣式>:指定字符串作為尋找符號連接的范本樣式; -ls:假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出; -maxdepth<目錄層級>:設置最大目錄層級; -mindepth<目錄層級>:設置最小目錄層級; -mmin<分鐘>:查找在指定時間曾被更改過的文件或目錄,單位以分鐘計算; -mount:此參數的效果和指定“-xdev”相同; -mtime<24小時數>:查找在指定時間曾被更改過的文件或目錄,單位以24小時計算; -name<范本樣式>:指定字符串作為尋找文件或目錄的范本樣式; -newer<參考文件或目錄>:查找其更改時間較指定文件或目錄的更改時間更接近現在的文件或目錄; -nogroup:找出不屬于本地主機群組識別碼的文件或目錄; -noleaf:不去考慮目錄至少需擁有兩個硬連接存在; -nouser:找出不屬于本地主機用戶識別碼的文件或目錄; -ok<執行指令>:此參數的效果和指定“-exec”類似,但在執行指令之前會先詢問用戶,若回答“y”或“Y”,則放棄執行命令; -path<范本樣式>:指定字符串作為尋找目錄的范本樣式; -perm<權限數值>:查找符合指定的權限數值的文件或目錄; -print:假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。格式為每列一個名稱,每個名稱前皆有“./”字符串; -print0:假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。格式為全部的名稱皆在同一行; -printf<輸出格式>:假設find指令的回傳值為Ture,就將文件或目錄名稱列出到標準輸出。格式可以自行指定; -prune:不尋找字符串作為尋找文件或目錄的范本樣式; -regex<范本樣式>:指定字符串作為尋找文件或目錄的范本樣式; -size<文件大小>:查找符合指定的文件大小的文件; -true:將find指令的回傳值皆設為True; -type<文件類型>:只尋找符合指定的文件類型的文件; -uid<用戶識別碼>:查找符合指定的用戶識別碼的文件或目錄; -used<日數>:查找文件或目錄被更改之后在指定時間曾被存取過的文件或目錄,單位以日計算; -user<擁有者名稱>:查找符和指定的擁有者名稱的文件或目錄; -version或——version:顯示版本信息; -xdev:將范圍局限在先行的文件系統中; -xtype<文件類型>:此參數的效果和指定“-type”參數類似,差別在于它針對符號連接檢查。

總結

以上是生活随笔為你收集整理的Find命令的使用和解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。