Linux文件查找

前言java

         

        Linux的基本特性之一就是一切皆文件,在系统管理过程当中不免会遇到须要查找各类类型文件的问题,那么如何准备快速的查找定位呢,本文将对Linux系统中文件查找工具及用法进行详解;linux


常见工具对比nginx


        常见的文件查找工具主要有locate(非实时查找)和find(实时查找)。locate查找依赖于索引,而索引构建至关暂用资源,索引的建立是在系统空闲时由系统自动进行(天天任务),手动建立可使用updatedb命令,查找速度快但结果非精确,即为模糊查找。而find相对于locate而言,是遍历全部文件进行条件匹配,查找速度慢可是结果精确,即为精准查找。简而言之,对于实际生产环境,find(实时查找)无心更加高效。shell


常见查找类命令bash


        名称:whereisapp

        功能:定位文件所在目录
ssh

        用法:whereis shell命令
ide

        注意:whereis是根据环境变量PATH来查找文件的,而PATH一般设置成存放命令的那些路径,如/bin、/sbin、/usr/bin等。所以whereis的用途仅限于定位shell命令所在的位置。        svn

[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实战

一、查找/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  

二、查找/var/目录属主为root且属组为mail的因此文件
[root@mail ~]# find /var/ -user root -group mail
/var/spool/mail
/var/spool/mail/root

三、查找/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

四、查找/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

五、查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件
[root@mail ~]# find / \( -nouser -o -nogroup \) -a -atime -30

六、查找/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

七、查找/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

八、查找/etc/目录下至少有一类用户没有写权限
[root@mail ~]# find /etc/ -not -perm -222 > /tmp/perm
[root@mail ~]# wc -l /tmp/perm   #文件太多,因此追加到/tmp/perm下
1019 /tmp/perm   

九、查找/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

十、在/apps/audit目录下查找全部用户具备读、写和执行权限的文件,并收回相应的写权限
# find /apps/audit -perm -7 -print | xargs chmod o-w
相关文章
相关标签/搜索