之前都是寫一些關于課后練習題的博客,既練習了課后習題也把博客寫了,舒服!不過這周學的知識需要練習的不多,更多的是需要了解和記憶,所以給大家介紹一個自我覺得挺強大的一個命令,那就是查找find命令。大家都知道計算機的數據茫茫多,要想找到自己想要的級必須加點限制性的條件來縮小一下范圍,或者準確的告訴計算機你想要的是什么。那么怎么來實現呢?那當然是用查找命令來實現的啦,不然干嘛寫這個標題嘞,好下面就讓我們一起開始一趟學習查找find命令輕松開心的旅程,上車。
首先,介紹find命令之前,我有話要講,一下就告訴你們我所了解的最新的查找命令顯得有些冒進,這里就先介紹下低版本的查找命令locate,在現實生活中,老一輩的人更有經驗和知識,值得我們學習和尊重。但是在計算機領域中,老版本就不止是被新版本
拍在沙灘上了,是拍死在沙灘上了啊,樣樣都比不上。但是,locate別擔心,還是會介紹你的。
###########################################################################################
locate:在文件系統上查找符合條件的文件
參數:【-i】不區分大小寫的搜索 【-n】只列舉前N個匹配項目 【-r】 支持正則表達式進行查找 【舉例:locate -r ‘\.conf$’】
查詢系統上預建的文件索引數據庫 /var/lib/mlocate/mlocate.db
依賴于事先構建的索引 索引的構建是在系統較為空閑時自動進行(周期性任務),管理 員手動更新數據庫(updatedb) 索引構建過程需要遍歷整個根文件系統,極消耗資源
工作特點:
? 查找速度快
? 模糊查找
? 非實時查找 【當你新建文件或目錄時用locate命令是查不到的,需要updatedb一下,寫入/var/lib/mlocate/mlocate.db數據庫,這就叫做非實時查找】
? 搜索的是文件的全路徑,不僅僅是文件名
? 可能只搜索用戶具備讀取和執行權限的目錄【同下find命令】
#################locate命令介紹到此為止,find由此開始#############################################
find:實時查找工具,通過遍歷指定路徑完成文件查找
工作特點:
? 查找速度略慢
? 精確查找【可以根據路徑,大小權限等等實行精確查找,不像locate命令,只能基于名稱查找,功能單一】
? 實時查找【不用更新數據庫,不像locate命令】
? 可能只搜索用戶具備讀取和執行權限的目錄【如果目錄里又符合條件的文件,那你要對目錄有rx權限才行,要不你進不去目錄,肯定搜索不出來啊】
語法: find [參數]… [查找路徑] [查找條件] [處理動作]
查找路徑:指定具體目標路徑;默認為當前目錄
查找條件:指定的查找標準,可以文件名、大小、類型、 權限等標準進行;默認為找出指定路徑下的所有文件
處理動作:對符合條件的文件做操作,默認輸出至屏幕
【參數】
【-maxdepth level 】最大搜索目錄深度,指定目錄為第1級,有最大就有最小【-mindepth level】
【-name】”文件名稱”:支持使用glob *, ?, [], [^]
【-iname】 “文件名稱”:不區分字母大小寫
【-inum】 基于inode查找
【-samefile】 基于相同inode號的查找(查找硬鏈接)
【-links】n 硬鏈接為n的文件
【-regex】 支持正則 默認為(emacs標準)
【-regextype】 egrep -regex 支持egrep同標準的正則
【-user】 用戶名 基于文件owner的查找
【-group】 組名 基于文件group的查找
【-uid userid】 基于文件uid的查找
【-gid groupid】 基于文件gid的查找
【-nouser】 查找沒有owner的文件
【-nogroup】 查找沒有group的文件
【-type】 基于文件類型的查找 f: 普通文件 d: 目錄文件 l: 符號鏈接文件 s:套接字文件 b: 塊設備文件 c: 字符設備文件 p: 管道文件
####################################################################################
這里插寫一條組合條件命令,可以使find命令更加強壯!
【與:-a 】 【或:-o】 【 非:-not, ! 】
德·摩根定律: (非 A) 或 (非 B) = 非(A 且 B) (非 A) 且 (非 B) = 非(A 或 B) 相當于 !A -a !B = !(A -o B) !A -o !B = !(A -a B)
####################################################################################
【查找條件】
-size [+|-]# 根據文件大小來查找
常用單位:k, M, G,c(byte)
#: (#-1, #]如:20 表示(19,20]【大于19小于等于20】
-#:[0,#-1]如:-20 表示[0,19]【大于等于0小于等于19】
+#:(#,∞)如:+20 表示(20,∞)【大于20】
-atime [+|-]#, 根據時間來查找 【atime表示天為單位,分鐘min同樣可以使用 amin分鐘為單位】
#: [#,#+1)如:3表示[3,4)【大于3天不到4天】
+#: [#+1,∞]如:3表示[4,+無窮]【大于4天】
-#: [0,#)如:3表示[0,3)【三天前】
-mtime 【Modifytime】
-ctime 【Changetime】
-perm 根據文件目錄權限查找
mode:精確權限匹配【如700,只能是U所有人上的權限為rwx的文件】
+mode[/mode] 任何一類(u,g,o)對象的權限中只要能一位匹配即可,或關系,+ 從centos7開始淘汰關系0 表示不關注
【如:/700表示,U所有人的權限可以是【rwx,r-x,r–,-wx,–x,-w-,rw-反正就是所有人權限上有rwx任意一個權限都行,/表示或的意思,g組位和o其他位不管 如:701,710這些都能匹配】
-mode 每一類對象都必須同時擁有指定權限,與關系0 表示不關注
【如:+700表示,u所有人上的權限必須是rwx,其他位不管,可以是701,710,要比精確權限匹配范圍大】
【處理動作】
【-print】 默認輸入到屏幕
【-delete】 直接刪除所查找到的文件,不詢問。
【-ls】長列出所查找到的文件
【-fls】 file 將查找到的文件長列出導入到指定文件。 【> file】結合重定向可也以
【-ok】 command \; 對查找到的文件當做下一命令的參數去執行(交互式)
【-exec】command \; 對查找到的文件當做下一命令的參數去執行(非交互式)
練習題:
1、查找/var目錄下屬主為root,且屬組為mail的所有文件
find /var -user root -a -group mail -ls
2、查找/var目錄下不屬于root、lp、gdm的所有文件
find /var -not \( -user root -o -user lp -o -user gdm \) -ls
3、查找/var目錄下最近一周內其內容修改過,同時屬主不為root,也不是postfix的文件
find /var/ -mtime -7 -not -user root -not -user postfix -ls
4 查找/etc目錄下大于1M且類型為普通文件的所有文件
find /etc/ -size +1M -a -type f -ls
5 查找/etc/init.d目錄下,所有用戶都有執行權限,且其它
用戶有寫權限的文件
find /etc/init.d/ -perm -113 -l
原創文章,作者:Ganten,如若轉載,請注明出處:http://www.www58058.com/84439