小议 find
?說find之前我們先說兩個概念:文件查找;文本過濾。這是兩個不同的概念,所使用的命令也是不一樣的。
? ? 文件查找:查找目錄中的文件
? ? 文本過濾:查找文本中的行
? ? 文本過濾的命令有:grep 、fgrep 、egrep 等?
? ? ? ? ?格式為:grep [選項] ?[查找模式] ?[文件名1,文件名2……]
? ?文件查找的命令有:find 、locate等
? ? ? ? ? 格式為:find [查找目錄] ?[查找條件] ?[動作]
現在大家對這兩個命令有個大概的印象了吧,今天我們主要總結的是文件查找的命令,主要解析find。
? ?文件查找:
? ? ? locate :
? ? ? ?特點 :模糊查找 ? 非實時查找 速度快 ? 功能有限
? ? ? ? 格式:#locate KEYWORD ?直接跟文件名,也可以說是關鍵字。
? ? ? ? 過程:在整個系統查找,但速度很快,因為雖在整個系統查找,但事實上是在datebase 數據庫( #updatedb ?創建 查找的數據庫)上查找,也就是非實時查找。
? ? ? find:
? ? ? 特點:精確,實時查找,而且可指定查找路徑,速度慢
? ? ??格式為:find [查找目錄] ?[查找條件] ?[動作]
?[查找目錄]:可以省略,省略表示當前目錄及當前目錄下的所有子目錄。
? ? ? ? ?[查找條件]:也可以省略,表示指定目錄及子目錄下的所有文件
? ? ? ? ?[動作]:也可以省略,表示print,顯示出來。
? ??[查找目錄]:
? ? ? ? ? ? ? 直接指定目錄就可以,例如:/etc
? ??[查找條件]:?
查找條件也支持多條件查找,條件間的邏輯關系 :
?并: -a ?默認沒寫 就是并關系。
?或: -o
?非:-not ,!
?
?
[動作]:? ? ?
example:
? ? ? ?下面通過一些例子,講解每一個選項怎么用,可以達到什么效果。
查找/tmp目錄下文件名為“passwd”或者屬主是“root”的文件
? ? #find ?/tmp ?-name "passwd" -o ?-user root ?或關系
查找/tmp目錄下文件名為“passwd”并且屬主是“root”的文件
? ? #find ?/tmp ?-name "passwd" -a -user root ?并關系
查找/tmp目錄下文件名不是“passwd”或者屬主不是“root”的文件
? ? #find ?/tmp ?-not -name "passwd" -o -not -user root
? ? #find ?/tmp ?-not \(-name "passwd" -a -user root \)
兩種寫法都可以達到目的。
小插曲 :摩根定律,感興趣的朋友可以自己查看。有助于我們理解
?!a? ∪??!b ?=! (a? ∩??b)
?!a? ∩??!b = ! (a? ∪??b)
查找當前目錄下沒有屬主和屬組的文件,并把屬主屬組改為root
? ? ?#find ./ -nouser -a -nogroup -exec chown root:root {}\;
查找當前目錄下其他用戶有寫權限的文件,把文件名后面加上.old
? ? ? #find ./ -perm -002 -exec mv {} {}.old \; {}表示占位符 前面找到誰 就把{}替換成誰
查找/tmp目錄下 屬主是root,文件類型視普通文件的文件,先顯示再刪除
? ? ? ?#find /tmp -user root -type f -print (顯示) | xargs rm -f ?刪除
下面有幾道小練習題,大家可以看一下,用上面講解的都可以完成,同時也可以檢測一下我是否講解清楚,讓大家看明白了,有什么建議或意見直接留言。
1、查找/var目錄下屬主為root并且屬組為mail的所有文件;
2、查找/usr目錄下不屬于root,bin,或student的文件;
3、查找/etc目錄下最近一周內內容修改過且不屬于root及student用戶的文件;
4、查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,并將其屬主屬組均修改為root;
5、查找/etc目錄下大于1M的文件,并將其文件名寫入/tmp/etc.largefiles文件中;
6、查找/etc目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息;
?
?
轉載于:https://blog.51cto.com/5122542/905990
總結
- 上一篇: win8学习--------File
- 下一篇: Http的轻微配置