find查找命令mysql
-name 根據文件名尋找文件 linux
-user 根據文件擁有者尋找文件 web
-group 根據文件所屬組尋找文件 sql
-perm 根據文件權限尋找文件 express
-size 根據文件大小尋找文件[±Sizek] bash
-type 根據文件類型尋找文件,常見類型有: f(普通文件) 、c(字符設備文件)、b(塊設備文件)、l(符號連接)、d(目錄)、s(套接字) ssh
+n n天之外ide
-n n天之內網站
n 不加+或-表示當前url
例如:find / -maxdepth 1 type f 只列出當前目錄下的全部普通文件,即便有子目錄,也不會被打印,與之相似,-maxdepth 2 最多向下遍歷兩級子目錄
-mindepth相似於-maxdepth,他設置的是最小遍歷的深度。
訪問時間:-atime
修改時間:-mtime
變化時間:-ctime
-a |
and && 與 |
兩個都匹配 |
|
-o |
or || 或 |
兩個只匹配一個 |
|
-not |
! 非 |
反向匹配 |
|
! |
和-not做用同樣 |
find [路徑] [參數] [表達式] -exec 指令 {} \;
{}表明find找到的文件
\ 轉意
;表示本行指令結束
find查找到的文件輸出到標準輸出
-exec command {} \;
對查找到的文件執行操做(回車後沒有系統提示,直接執行)
-ok command {} \;
對查找到的文件執行操做(會有系統提示,是否執行該操做)
例:find /etc name "host*" exec du h {} \; 、
[root@fuzj fuzj]# find /etc -name services /etc/services /etc/logwatch/conf/services /etc/logwatch/scripts/services /etc/avahi/services
[root@fuzj fuzj]# find /etc /usr -type d -name services /etc/logwatch/conf/services /etc/logwatch/scripts/services /etc/avahi/services /usr/share/dbus-1/services /usr/share/logwatch/dist.conf/services /usr/share/logwatch/default.conf/services /usr/share/logwatch/scripts/services
[root@fuzj~]# find /tmp –type f -name "*.sh" /tmp/fuzj/check_web_url.sh /tmp/fuzj/a.sh /tmp/fuzj/b.sh /tmp/fuzj/test.sh 下面是使用(*)匹配的三種方法 [root@fuzj~]# find /tmp –type f -name "*.sh" #雙引號,推薦使用 [root@fuzj~]# find /tmp –type f -name '*.sh' #單引號 [root@fuzj~]# find /tmp –type f -name \*.sh #屏蔽符 若是不加雙引號或單引號或屏蔽符,執行錯誤以下 [root@fuzj~]# find /tmp -name *.sh find:paths must precede expression Usage:find [-H] [-L] [-P] [path...] [expression]
find./ -type f | xargs grep "club.xywy.com" 或者 grep「club.xywy.com」 ./*
[root@fuzj~]# find /tmp/ -user xu /tmp/httpd-manual-2.2.3-31.el5.i386.rpm /tmp/.aaa.sh.swp /tmp/ssh-myAmp14104 /tmp/ssh-myAmp14104/agent.14104
[root@fuzj~]# find /tmp/ -user xu -ok rm -rf {} \; <rm ... /tmp/httpd-manual-2.2.3-31.el5.i386.rpm > ? 說明:使用-ok動做時,系統會提示是否執行該操做?而-exec則不會提示,回車後當即執行 後面的{}表示執行"find /tmp –userxu"所查找到的內容
[root@fuzjfuzj]# find /server/scripts/ -type f -name "*.sh" -exec grep"mysql" {} \; MYSOCK=/usr/local/mysql/tmp/mysql.sock LOG_FILE=${DATA_PATH}/mysqllogs_`date+%F`.log …skip… grep過濾find查找到的文件的關鍵字
[root@fuzj~]# find /var -type f -size +10M –print /var/lib/rpm/Packages /var/cache/yum/base/filelists.xml.gz.sqlite
[root@fuzj~]# find /etc/ -type f -name hosts -a -name services 說明:-a的參數一直沒有作出來,不知道這樣寫對不對 [root@fuzj~]# find /etc/ -type f -name hosts -o -name services /etc/services /etc/sysconfig/networking/profiles/default/hosts /etc/logwatch/conf/services /etc/logwatch/scripts/services /etc/avahi/services /etc/avahi/hosts /etc/hosts [root@fuzj~]# find /etc/ -type f -name hostsaaa -o -name services /etc/services /etc/logwatch/conf/services /etc/logwatch/scripts/services /etc/avahi/services 說明:沒有hostsaaa文件,因此只顯示了services的文件 [root@fuzj~]# find /tmp/ -not -type d /tmp/web_check.log /tmp/check_mysql.log …skip… 說明:/tmp目錄下不爲目錄的所有顯示出來 [root@fuzj~]# find /server/scripts/ -type f ! -name "*.sh" /server/scripts/tmp/fenfakey.exp /server/scripts/tmp/for-example/i /server/scripts/tmp/EOF …skip… 說明:/server/scripts目錄下全部的文件不爲.sh結尾的文件所有顯示出來 查找大小爲10M-15M之間的文件 [root@fuzj~]# find / -size +10M -a -size -15M /etc/selinux/targeted/modules/previous/base.pp /etc/selinux/targeted/modules/active/base.pp …skip…
[root@fuzj~]# find /tmp/ -maxdepth 1 -type f /tmp/etc.bak.tar.gz /tmp/b.sh /tmp/test /tmp/a.sh /tmp/aaa /tmp/c.sh 指定目錄的深度爲1也就是當前搜索的目錄
[root@fuzj~]# find /tmp/ -maxdepth 2 -type f /tmp/etc.bak.tar.gz /tmp/b.sh /tmp/test /tmp/a.sh /tmp/aaa /tmp/fuzj/etc_bak.tar.gz /tmp/fuzj/file1.gz /tmp/fuzj/file2 /tmp/fuzj/etc_bak.tar.bz2 /tmp/fuzj/aaa 說明:指定目錄的深度爲2也就是搜索的目錄的下一級,同時也包括當前搜索的目錄
生產場景:清除七天之前的日誌文件,只保留最近一週的日誌
生產環境下通常網站的日誌按天切割一次
[root@fuzj~]# find /logs -type f -mtime +7 -exec rm -rf {} \; [root@fuzj~]# find /logs -type f -mtime +7 |xargs rm –rf 說明:若是日誌文件超多,且大小超過百G,建議使用後者清理日誌文件