linux中文件查找常用的有兩個命令,分別是locate和find。
#locate 根據locate數據庫查找,不是實時查找,不是精確查找.速度比較快
#find 不根據數據庫查找,實時查找,遍歷目錄查找,精確查找,速度慢.
# locate 要查找的關鍵字
-n 只顯示被匹配到的前10行.
-c 統計被匹配到的結果總共有多少.
locate是根據locate數據庫進行查找的,所以速度比較快,如果一個文件剛存入linux系統,然後用locate進行查找,有可能會查找不到,因為locate的數據庫裡面,還沒有該文件的相關記錄,這時候,我們就需要手動更新locate的數據庫,使用命令
updatedb 將手動生成locate命令所依賴的數據庫
find [dir,...] [criteria,...] [action...]
如果[dir]省略,就是當前路徑.如果find後面不跟任何參數,會把當前目錄裡的所有文件及目錄全部顯示出來,包括隱藏文件
action的默認動作為顯示到屏幕上.
criteria 查找標准
-name 指定文件名.還支持globbing方式的文件名通配
find /etc/ -name "passwd?"
find /etc/ -name "*passwd*"
-iname 忽略文件名中的文件名大小寫.
-regex "PATTERN" 查找文件名中符合PATTERN中的文件,支持正則.
-user USERNAME 基於用戶查找(查找屬於某個用戶的文件)
-group GROUP_NAME
find /tmp -user redhat | ls -l 這樣不行,因為find的傳遞機制跟普通命令不太一樣
ll `find /tmp -user redhat` 這樣是可以的,引用命令.
-uid UID 基於用戶的ID號查找
-gid GID 基於組的ID號查找.
-nouser 查找所有的,沒有屬主的文件
-nogroup 查找所有的,沒有屬組的文件
-type 指定類型進行查找
f 普通文件
d 目錄
l 軟連接文件
b 塊設備
c 字符設備
p 管道文件
s 套接字文件
組合條件:
-a
-o
-not
-size 指定文件大小
10M 大小為10M的(9-10M的都符合,10M以上和9M以下不符合)
-10M 小於10M的
+10M 大於10M的
-atime 根據文件的訪問時間(單位為天)
-mtime 根據文件的修改時間 (單位為天)
-ctime 根據文件的改變時間(單位為天)
-amin 根據文件的訪問時間(單位為分鐘)
-mmin 根據文件的修改時間(單位為分鐘)
-cmim 根據文件的改變時間(單位為分鐘)
time 的默認時間為天,min的默認單位為分鐘.
例:
-atime 3 距離現在,剛好3天沒訪問的文件
-atime -3 3天以內被訪問的文件
-atime +3 已經超過3天沒被訪問的文件
-perm 755 根據文件的權限進行查找.
+755|/755 其中任何一類用戶滿足其權限都可以. /444 任何一類用戶有讀權限都可以.
-755, 每一類用戶都必須要滿足條件.
Ctrl+a 跳到命令的首部.
Ctrl+e 跳到命令的尾部.
action:
-print 把匹配到的結果打印到屏幕(默認動作,可省略.)
-ls 以長格式顯示文件信息
-ok COMANDN {} \; 查找到文件後,執行指定命令(提醒確認)
-exec COMMAND {} \; 查找到文件後,執行指定命令(不提醒確認)
-exec rm {} \; 刪除查找到的文件 {}表示引用前面查找到的文件,\;表示命令到此結束
-exec mv {} {}.txt \; 把查找到的文件重命名,在原有的名字後面加上.txt的擴展名
下面做幾個練習題
練習:
1,查找/var/ 目錄下屬主為root並且屬組為mail的所有文件;
[root@Honway scripts]# find /var -user root -group mail
/var/spool/mqueue
/var/spool/mail
2,查找/usr目錄下不屬於root,bin或student的文件;
[root@Honway scripts]#find /usr/ -not -user root -not -user bin -not -user student
/usr/local/apache2/logs/cgisock.3302
/usr/local/apache2/logs/cgisock.32138
/usr/local/apache2/logs/cgisock.3327
3,查找/etc/目錄下最近一周內內容修改過且不屬於root及apache的文件
[root@Honway scripts]# find /etc -not \( -user root -o -user apache \) -mtime -7
4,查找當前系統上沒有屬主或屬組且最近1天內曾被訪問過的文件,並將其屬主屬組均修改為root;
[root@Honway scripts]# find / \( -nouser -o -nogroup \) -atime -1 -exec chown root:root {} \;
5,查找/etc目錄下大於1M的文件,並將其文件名寫入/tmp/etc/largefiles文件中;
[root@Honway scripts]#for i in `find /etc/ -size +1M -exec basename {} \;`;do echo $i >>/tmp/etc.largefiles ;done
[root@Honway ~]# find /etc/ -size +1M -exec basename {} >/tmp/find.out \;
6,查找/etc/目錄下所有用戶都沒有寫權限的文件,顯示出其詳細信息;
[root@Honway scripts]# ll `find /etc/ -not -perm +222`
-r-------- 1 root root 1225 02-11 10:00 /etc/gshadow
-r-------- 1 root root 1213 02-11 00:19 /etc/gshadow-
-r--r--r-- 1 root root 41286 2006-11-28 /etc/mail/submit.cf
-r--r--r-- 1 root root 628 2010-07-21 /etc/selinux/config,v
-r-------- 1 root root 3159 02-11 10:00 /etc/shadow
-r-------- 1 root root 3129 02-11 00:29 /etc/shadow-
本文出自 “吖吖個呸” 博客,請務必保留此出處http://gm100861.blog.51cto.com/1930562/788831