zoukankan      html  css  js  c++  java
  • Linux 查找文件命令 find whereis locate

      Linux 有三个查找文件的命令:find, whereis, locate 其中find 不常用,whereis与locate经常使用,因为find命令速度较慢,因为whereis与locate是利用数据库来查找数据,而find直接查找硬盘。

      1 whereis

      whereis 命令只能用户程序名称的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m) 和源代码文件(参数-s). 如果省略参数,则返回所有信息。和find相比,whereis查找的速度非常快,这是因为linux系统会将系统内的所有文件都记录在一个数据库文件中,当使用whereis和locate时,会从数据库中查找数据,而不是像find命令那样,通 过遍历硬盘来查找,效率自然会很高。 

      但是该数据库文件并不是实时更新,默认情况下时一星期更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。 

      

      whereis [-bmsu] 文件或者目录名

      -b: 只找二进制格式的文件

      -m: 只找在说明文件manual 路劲下的文件

      -s:  只找source 源文件

      -u: 查找不在上述三个选项中的其他特殊文件

      实例,查询ifconfig文件名

    [root@oracledb ahome]# whereis ifconfig
    ifconfig: /sbin/ifconfig /usr/share/man/man8/ifconfig.8.gz
    [root@oracledb ahome]# whereis -b ifconfig
    ifconfig: /sbin/ifconfig
    [root@oracledb ahome]# whereis -m ifconfig
    ifconfig: /usr/share/man/man8/ifconfig.8.gz
    [root@oracledb ahome]# whereis -s ifconfig
    ifconfig:

     

    2 locate 

    locate使用也非常简单,而且使用范围比whereis大的多,只需要部分文件名就可以进行模糊查询,同时locte还可以通过-r选项使用正则表达式,功能十分强大。与whereis一样 locate使用的索引数据库里的信息并不一定是实时有效的,可以使用updatedb命令更新索引数据库。

     

    locate [-ir] keyword

     

    实例,查询passwd命令,查找包含passwd字符的文件,显示前5条记录

    [root@oracledb ahome]# locate passwd|head -n 5
    /etc/passwd
    /etc/passwd-
    /etc/pam.d/passwd
    /etc/security/opasswd
    /lib64/security/pam_passwdqc.so

     

    3 find

    find 命令遍历当前工作目录及其子目录,在硬盘上遍历查找,非常耗硬盘资源,查找效率相比whereis和locate较低。

     

    find [path] [option] [action]

      时间查找参数:

                    -atime  n: 将n*24小时内access过的文件列出来

                    -ctime   n: 将n*24小时内状态发生改变的文件列出来

                    -mtime  n: 将n*24小时内被修改过的文件列出来

                    -newer file: 把比file还要新的文件列出来

      名称查找参数:

                     -gid   n:  寻找群组ID为n的文件

                     -group name: 寻找群组名称为name的文件

                     -uid   n:  寻找拥有者ID为n的文件

                     -user name:  寻找拥有者名称为name的文件

                     -name file:    寻找文件名为file的文件(可以使用通配符)

           -nouser:  寻找文件所有者不在/etc/passwd的文件

           -nogroup:    寻找文件的所有组不在/etc/group的文件

      

      实例,将过去24小时内有改动的文件列出来。

    [root@oracledb ahome]# find / -mtime 0|head -n 10
    /
    /proc
    /proc/kmsg
    /proc/stat
    /proc/meminfo
    /proc/vmstat
    /proc/mdstat
    /proc/acpi
    /proc/acpi/event
    /proc/sys

            将3天前24小时内有改动的文件列出

      [root@oracledb ahome]# find / -mtime 3

                   

      寻找/etc 下比/etc/passwd新的文件

    [root@oracledb ahome]# find /etc -newer /etc/passwd
    /etc
    /etc/group
    /etc/gshadow
    /etc/shadow

     

    查找/var 下4天前被修改过的文件

    [root@oracledb ahome]# find /var -mtime +4

     

    查找/var 下4天以内被修改过的文件

     

    [root@oracledb ahome]# find /var -mtime -4

     

    查找/var 下4~5天内被修改过的文件

    [root@oracledb ahome]# find /var -mtime 4

     

    查找/home 下属于latiny1的文件

    root@oracledb ahome]# find /home -user latiny1
    /home/latiny1
    /home/latiny1/.kshrc
    /home/latiny1/.bashrc
    /home/latiny1/.bash_profile
    /home/latiny1/.mozilla
    /home/latiny1/.mozilla/plugins
    /home/latiny1/.mozilla/extensions
    /home/latiny1/.bash_logout
    /home/latiny1/.gnome2
    /home/latiny1/.viminfo

     

    查找不属于任何人的文件

    [root@oracledb ahome]# find / -nouser

     

    查找文件名为latiny1 的文件

    [root@oracledb ahome]# find / -name latiny1
    /var/spool/mail/latiny1
    /home/latiny1

     

    查找/var 目录下文件类型为Socket的文件名

    [root@oracledb ahome]# find /var -type s|head -n 10
    /var/run/rpcbind.sock
    /var/run/abrt/abrt.socket
    /var/run/acpid.socket
    /var/run/portreserve/socket
    /var/run/dbus/system_bus_socket
    /var/run/cups/cups.sock
    /var/run/sdp
    /var/tmp/.oracle/s#1623.1
    /var/tmp/.oracle/s#1631.2
    /var/tmp/.oracle/s#1590.2

                   

     

    查找包含有SGID或者SUID 或者SBIT属性的文件

    [root@oracledb ahome]# find / -perm +7000|head -n 10

     

    find还可以在后面再接其他合适的命令来处理查找结果,如查找/srv/ahome里包含SUID、SGID、SBIT属性的文件或者目录,然后对结果使用ls -l命令。

    [root@oracledb ahome]# find /srv/ahome -perm +7000 -exec ls -l {} ;
    total 4
    -rw-rw-r-- 1 latiny1 latiny1 0 Jul 3 11:13 lainty1
    -rw-rw-r-- 1 latiny2 project 7 Jul 3 11:20 latiny2
    -rw-r--r-- 1 root project 0 Jul 3 14:27 test1.sh

     

    [root@oracledb ahome]# find /srv/ahome -name latiny2 -exec ls -l {} ;
    -rw-rw-r-- 1 latiny2 project 7 Jul 3 11:20 /srv/ahome/latiny2

     

    查找/etc 下文件大小介于50K到60K的文件,并且对结果使用ls -l命令

    [root@oracledb ahome]# find /etc -size +50k -size 60k -exec ls -l {} ;
    -rw-r--r--. 1 root root 61021 Nov 12 2010 /etc/gconf/schemas/rhythmbox.schemas
    [root@oracledb ahome]#

     

     

    查找/etc 下文件容量大于50K且文件所有者不是root的文件,并且对结果使用ls -l命令

    [root@oracledb ahome]# find /etc -size +50k -not -user root -exec ls -l {} ;

     

    [root@oracledb srv]# find ./ -size -50k -not -user root -exec ls -l {} ;
    -rw-rw-r-- 1 latiny2 project 7 Jul 3 11:20 ./ahome/latiny2
    -rw-rw-r-- 1 latiny1 latiny1 0 Jul 3 11:13 ./ahome/lainty1

     

    查找/etc 容量大于1500k以及容量等于0的文件

    [root@oracledb srv]# find /etc -size 0k -or -size +1500k

     

     

      

  • 相关阅读:
    解决:npm中 下载速度慢 和(无法将“nrm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确, 然后再试一次)。
    maven(一) maven到底是个啥玩意~
    Luogu3959 NOIP2017宝藏(状压dp)
    Luogu3953 NOIP2017逛公园(最短路+拓扑排序+动态规划)
    Luogu3952 NOIP2017时间复杂度
    BZOJ4753 JSOI2016最佳团体(分数规划+树形dp)
    BZOJ1975 SDOI2010魔法猪学院(启发式搜索+最短路+堆)
    BZOJ4105 THUSC2015平方运算(线段树)
    BZOJ5109 CodePlus 2017大吉大利,晚上吃鸡!(最短路+拓扑排序+bitset)
    Luogu3731 HAOI2017新型城市化(二分图匹配+强连通分量)
  • 原文地址:https://www.cnblogs.com/Latiny/p/7111551.html
Copyright © 2011-2022 走看看