Linux文件查找

前言

         

        Linux的基本特性之一就是一切皆文件,在系統管理過程中難免會遇到需要查找各種類型文件的問題,那麼如何準備快速的查找定位呢,本文將對Linux系統中文件查找工具及用法進行詳解;


常見工具對比


        常見的文件查找工具主要有locate(非實時查找)和find(實時查找)。locate查找依賴於索引,而索引構建相當暫用資源,索引的創建是在系統空閒時由系統自動進行(每天任務),手動創建可以使用updatedb命令,查找速度快但結果非精確,即爲模糊查找。而find相對於locate而言,是遍歷所有文件進行條件匹配,查找速度慢但是結果精確,即爲精準查找。簡而言之,對於實際生產環境,find(實時查找)無意更加高效。


常見查找類命令


        名稱:whereis

        功能:定位文件所在目錄

        用法:whereis shell命令

        注意:whereis是根據環境變量PATH來查找文件的,而PATH通常設置成存放命令的那些路徑,如/bin、/sbin、/usr/bin等。因此whereis的用途僅限於定位shell命令所在的位置。        

[root@mail ~]# whereis ifconfig
ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz


   名稱:locate

   功能:locate 文件名或者目錄名

   說明:locate默認是不被安裝的,它的包名叫:mlocate可以直接使用yum安裝即可。locate也是系統中常用查找文件的方法,但是它並不是直接從磁盤實時查找文件,而是由updatedb命令所產生的信息庫中查找相應的文件和目錄。

   注意:如果locate找不到某個命令,但是又確定該文件存在時,是由於updatedb生成的信息庫已經過期,此時你只需要以root的身份執行updatedb命令,重新建立整個系統所有文件和目錄的資料庫。但是updatedb命令比較暫用資源,一般不建議手動更新。


find命令的用法

    

命令格式:

    find [options] [查找路徑] [查找條件] [處理動作]

    查找路徑:默認爲當前路徑

    查找條件:默認爲指定目錄下的所以文件

    處理動作:默認爲顯示至屏幕


條件查找

-name "文件名稱":支持使用globbing字符
      *:任意長度任意字符
      ?:任意單個字符
      []:範圍內任意字符
      [^]:範圍外任意字符
-iname "文件名稱":查找時忽略字符大小寫
-user USERNAME: 根據文件的屬主查找
-group GRPNAME: 根據文件的屬組查找
-uid UID:根據用戶UID查找
-gid GID:根據用戶GID查找
-nouser: 查找沒有屬主的文件
-nogroup: 查找沒有屬組的文件

組合條件查找

-a:與,同時滿足
-o:或,滿足一個即可
-not:!非,條件取反

文件類型查找

-type TYPE:根據文件類型查找
      f:普通文件
      d:目錄文件
      l:符號鏈接
      b:塊設備
      c:字符設備
      s:套接字文件
      p:命名管道
-size [+|-]#UNIT:根據文件大小查找
      常用單位:k,M,G
      #UNIT:#-1<x<=#
      -#UNIT:x<=#-1
      +#UNIT:x>#
      (x爲匹配到的文件大小)

時間戳查找

以“天”爲單位
-atime(訪問時間) [+|-]#
       +#:x>=#+1
       -#:x<#
       #:#<=x<#+1
       (x爲匹配到的文件時間) 
-mtime(修改時間)
-ctime(改變時間)
以“分鐘”爲單位
-atime
-mtime
-ctime
(用法同上)

權限查找

-perm [+|-]MODE
      MODE:與MODE精確匹配
      +MODE: 任何一類用戶的權限只要能包含對其指定的任何一位權限即可
      -MODE:每類用戶指定的檢查權限都匹配

處理動作

-print: 默認處理動作,顯示
-ls:類似於ls -l
-exec COMMAND {} \;
-ok COMMAND {} \;            #find一次性查找符合條件的所有文件,並一同傳遞
給-exec或-ok後面指定的命令,但有些命令不能接受過長的參數,此時使用另一種方式:
find | xargs COMMAND


find實戰

1、查找/etc/init.d/目錄中包含e並已s結尾的文件並複製到/tmp下
[root@mail ~]# ls /etc/init.d/
auditd     ip6tables  mdmonitor   network      ntpdate      rsyslog    sshd
crond      iptables   messagebus  nginx        postfix      sandbox    svnserve
functions  kdump      netconsole  nginx-debug  rdisc        saslauthd  udev-post
halt       killall    netfs       ntpd         restorecond  single
[root@mail ~]# find /etc/init.d/ -name "*e*s" -exec cp {} /tmp \;
[root@mail ~]# ls /tmp
ip6tables  iptables  messagebus  netfs  

2、查找/var/目錄屬主爲root且屬組爲mail的所以文件
[root@mail ~]# find /var/ -user root -group mail
/var/spool/mail
/var/spool/mail/root

3、查找/usr/目錄下不屬於root、bin或bjwf的所有文件
[root@mail ~]# find /usr/ -not \( -user root -o -user bin -o -user bjwf \)
/usr/local/nginx
/usr/local/nginx/sbin
/usr/local/nginx/sbin/nginx

4、查找/tmp目錄下最近7天內修改過且不屬於root和bjwf的文件並顯示屬性信息
[root@mail ~]# find /tmp -mtime -7 -not \( -user root -o -user bjwf \) -ls
262152    0 -rw-r--r--   1 nginx    nginx           0 5月 23 14:58 /tmp/sum.sh

5、查找當前系統上沒有屬主或屬組,且最近1個月內曾被訪問過的文件
[root@mail ~]# find / \( -nouser -o -nogroup \) -a -atime -30

6、查找/etc/目錄下大於1M且類型爲普通文件的所有文件
[root@mail ~]# find /etc/ -type f -size +1M
/etc/pki/tls/certs/ca-bundle.trust.crt
/etc/selinux/targeted/modules/active/policy.kern
/etc/selinux/targeted/policy/policy.24

7、查找/etc/目錄所有用戶都沒有寫權限的文件
[root@mail ~]# find /etc/ -not -perm +222
/etc/openldap/certs/password
/etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
/etc/pki/ca-trust/extracted/java/cacerts
/etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
/etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
/etc/ld.so.conf.d/kernel-2.6.32-573.el6.x86_64.conf
/etc/shadow
/etc/gshadow
/etc/shadow-
/etc/sudoers

8、查找/etc/目錄下至少有一類用戶沒有寫權限
[root@mail ~]# find /etc/ -not -perm -222 > /tmp/perm
[root@mail ~]# wc -l /tmp/perm   #文件太多,所以追加到/tmp/perm下
1019 /tmp/perm   

9、查找/etc/rc.d/目錄下,所有用戶都有執行權限且其它用戶有寫權限的文件
[root@mail ~]# find /etc/rc.d -perm -113 > /tmp/perm.113 
[root@mail ~]# wc -l /tmp/perm.113
163 /tmp/perm.113

10、在/apps/audit目錄下查找所有用戶具有讀、寫和執行權限的文件,並收回相應的寫權限
# find /apps/audit -perm -7 -print | xargs chmod o-w



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章