文件查找命令-find/locate简单介绍

文件查找命令

locate

locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

语法

    locate/slocate(选项)(参数)

选项

    -d<目录>或--database=<目录>:指定数据库所在的目录;
    -b:只匹配路径中的基名;
    -c:统计出共有多少个符合条件的文件;
    -r:BRE
    -u:更新slocate数据库;

参数

查找字符串:要查找的文件名中含有的字符串。

实例

  • 搜索etc目录下所有以sh开头的文件:

    [root@localhost /]#  locate /etc/sh
    /etc/shadow
    /etc/shadow-
    /etc/shells
    

fnid

find命令用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

语法

    find(选项)(参数)

选项

-amin<分钟>:查找在指定时间曾被读取过的文件或目录,单位以分钟计算;
-atime<24小时数>:查找在指定时间曾被读取过的文件或目录,单位以24小时计算;
-cmin<分钟>:查找在指定时间之时被更改过状态的文件或目录;
-ctime<24小时数>:查找在指定时间之时被更改过状态的文件或目录,单位以24小时计算;
-daystart:从本日开始计算时间;
-depth:从指定目录下最深层的子目录开始查找;
-expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
-exec<执行指令>:假设find指令的回传值为True,就执行该指令;
-false:将find指令的回传值皆设为False;
-fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
-follow:排除符号连接;
-fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
-fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
-fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
-fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;
-gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
-group<群组名称>:查找符合指定之群组名称的文件或目录;
-help或——help:在线帮助;
-ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
-iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
-inum<inode编号>:查找符合指定的inode编号的文件或目录;
-ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
-iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
-links<连接数目>:查找符合指定的硬连接数目的文件或目录;
-iname<范本样式>:指定字符串作为寻找符号连接的范本样式;
-ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
-maxdepth<目录层级>:设置最大目录层级;
-mindepth<目录层级>:设置最小目录层级;
-mmin<分钟>:查找在指定时间曾被更改过数据的文件或目录,单位以分钟计算;
-mount:此参数的效果和指定“-xdev”相同;
-mtime<24小时数>:查找在指定时间曾被更改过数据的文件或目录,单位以24小时计算;
-name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
-nogroup:找出不属于本地主机群组识别码的文件或目录;
-noleaf:不去考虑目录至少需拥有两个硬连接存在;
-nouser:找出不属于本地主机用户识别码的文件或目录;
-ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
-path<范本样式>:指定字符串作为寻找目录的范本样式;
-perm<权限数值>:查找符合指定的权限数值的文件或目录;
-print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;
-print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;
-printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;
-prune:不寻找字符串作为寻找文件或目录的范本样式;
-regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;
-size<文件大小>:查找符合指定的文件大小的文件;
-true:将find指令的回传值皆设为True;
-typ<文件类型>:只寻找符合指定的文件类型的文件;
-uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
-used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
-user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
-version或——version:显示版本信息;
-xdev:将范围局限在先行的文件系统中;
-xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

参数

起始目录:查找文件的起始目录。

实例

  • 查找当前目录以及子目录下所有文件和文件夹

    find .
    

根据条件查找

  • 查找系统中属于centos用户的文件和文件夹

    find / -user centos
    
  • 查找系统中属于centos组的文件和文件夹

    find / -group centos
    
  • 查找系统中匹配用户id的文件和文件名

    find / -uid 1001
    
  • 查找系统中匹配组id的文件和文件名

    find / -gid 1001
    
  • 查找系统中空的文件或文件夹

    find / -empty
    
  • 查找系统中没有属主的文件或文件夹

     find / -nouser
    
  • 查找系统中没有属组的文件或文件夹

    find / -nogroup
    
  • 查找系统中总是错误的文件

    find / -false
    
  • 查找系统中文件名为test的文件或文件夹

    find / -name test
    
  • 查找系统中文件名为.txt的文件名,忽略大小写

    find / -iname "*.txt"
    
  • 查找系统中 以.txt和.pdf结尾的文件

    find / \( -name "*.txt" -o -name "*.pdf" \)
    find / -name "*.txt" -o -name "*.pdf"
    
  • 查找系统中匹配的文件路径或文件

    find / -path "*local*"
    

根据时间戳查找

以天为单位(time):
    -atime [+|-]#:
        +表示(#+1)天之外被访问过
        -表示#天之内被访问过
        无符号:表示(#+1)>x>=#天的时间段被访问过
    -mtime [+|-]#
    -ctime [+|-]#
以分钟为单位:
    -amin [+|-]#
    -mmin [+|-]#
    -cmin [+|-]#
  • 查找系统中最后10分钟访问的文件或文件夹,对应时间戳(atime)

    find / -amin -10
    
  • 查找系统中最后24小时访问的文件或文件夹

    find / -atime -1
    
  • 查找系统中最后5分钟被修改过数据的文件或文件夹,对应时间戳(ctime)

    find / -cmin -5
    
  • 查找系统中最后24小时被修改过数据的文件或文件夹。

    find / -ctime -1
    
  • 查找系统中最后5分钟修改过状态的文件或文件夹,对应时间错(mtime)

    find / -mmin -10
    
  • 查找系统中最后24小时修改过状态的文件或文件夹

    find / -mtime -1
    

根据文件大小查找

    -size n[cwbkMG]
        b:块,512个字节
        w:2个字节的字
        c:1字节
        k:Kilobytes
        M: Megabytes
        G: Gigabytes

    find / -size 100k //等于100k
    find / -size +100k //大于100k
    find / -size -100k  //小于100k

根据文件类型查找

    -type [bcdpfls]
        b:块设备文件
        c:字节设备文件
        d:目录
        p:命名管道文件
        f:普通文件
        l:符号连接
        s:套接字文件

    find / -type b

根据权限查找

    -perm [+|-]MODE
        mode:精确权限匹配;
        /mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;
                                9位权限之间存在“或”关系;
        -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;
                                9位权限之间存在“与”关系;

        find / -perm 777

处理动作

    -print:输出至标准输出;默认的动作;
    -ls:类似于对查找到的文件执行“ls -l”命令,输出文件的详细信息;
    -delete:删除查找到的文件;
    -fls /PATH/TO/SOMEFILE:把查找到的所有文件的长格式信息保存至指定文件中;
    -ok COMMAND {} \;   :对查找到的每个文件执行由COMMAND表示的命令;每次操作都由用户进行确认;
    -exec COMMAND {} \;  :对查找到的每个文件执行由COMMAND表示的命令;
  • 标准输出

    [root@localhost /]# find / -type b 
    /dev/dm-1
    /dev/dm-0
    /dev/sr0
    /dev/sda2
    /dev/sda1
    /dev/sda
    
  • ls 输出

    [root@localhost /]# find / -type b -ls
     10099    0 brw-rw----   1 root     disk     253,   1 3月 19 10:31 /dev/dm-1
      9985    0 brw-rw----   1 root     disk     253,   0 3月 19 10:31 /dev/dm-0
      9810    0 brw-rw----   1 root     cdrom     11,   0 3月 19 10:31 /dev/sr0
      9742    0 brw-rw----   1 root     disk       8,   2 3月 19 10:31 /dev/sda2
      9741    0 brw-rw----   1 root     disk       8,   1 3月 19 10:31 /dev/sda1
      9693    0 brw-rw----   1 root     disk       8,   0 3月 19 10:31 /dev/sda
    
  • delete 删除

    [root@localhost /]# find / -type f  -user centos -name test12
    /tmp/test12
    [root@localhost /]# find / -type f  -user centos -name test12 -delete
    
  • 保存到指定文件

    [root@localhost /]# find / -type b >/tmp/findtype
    [root@localhost /]# cat /tmp/findtype
    /dev/dm-1
    /dev/dm-0
    /dev/sr0
    /dev/sda2
    /dev/sda1
    /dev/sda
    
  • exec COMMAND {} \;将30天前的.log文件移动到/tmp/log/目录中

    [root@localhost /]# find . -type f -mtime + 30 -name "*.log" -exec cp {} /tmp/log \;
    [root@localhost /]# ll /tmp/log
    总用量 1940
    -rw-------. 1 root root   49226 3月  19 15:31 anaconda.log
    -rw-r--r--. 1 root root   11890 3月  19 15:31 change.log
    -rw-------. 1 root root    1780 3月  19 15:31 ifcfg.log
    -rw-------. 1 root root 1604054 3月  19 15:31 journal.log
    -rw-------. 1 root root       0 3月  19 15:31 ks-script-v9DpKT.log
    -rw-------. 1 root root  117566 3月  19 15:31 packaging.log
    -rw-------. 1 root root   31591 3月  19 15:31 program.log
    -rw-r--r--. 1 root root      61 3月  19 15:31 rpm.log
    -rw-------. 1 root root  129575 3月  19 15:31 storage.log
    -rw-------. 1 root root   22809 3月  19 15:31 X.log
    

综合实例

  • 查找/var目录下属主为root,且属组为mail的所有文件或目录;

    [root@localhost /]# find /var -user root -a -group mail -ls
    16778190    0 drwxrwxr-x   2 root     mail           45 3月 19 11:37 /var/spool/mail
    
  • 查找/usr目录下不属于root, bin或hadoop的所有文件或目录

    [root@localhost /]# find /usr ! -user root -a ! -user bin -a ! -user hadoop  -ls
    17113097    0 drwx------   2 polkitd  root            6 11月  6  2016 /usr/share/polkit-1/rules.d    
    [root@localhost /]# find /usr ! \( -user root -o -user bin -o -user hadoop \) -ls
    17113097    0 drwx------   2 polkitd  root            6 11月  6  2016 /usr/share/polkit-1/rules.d
    
  • 查找/etc目录下最近一周内其内容修改过,且属主不是root用户也不是hadoop用户的文件或目录

    find /etc -mtime -7 -a ! \( -user root -o -user hadoop \) -ls
    find /etc -mtime -7 -a ! -user root -a ! -user hadoop -ls
    
  • 查找当前系统上没有属或属组,且最近一周内曾被访问过的文件或目录

    find / -atime -7 -a -nouser -a -nogroup -ls
    find / -atime -7 -a (-nouser -o -no group ) -ls
    
  • 查找/etc目录下大于1M且类型为普通文件的所有文件

    [root@localhost /]# find /etc -type f -size +1M -exec ls -lh {} \;
    -rw-r--r--. 1 root root 3.6M 11月 12 2016 /etc/selinux/targeted/active/policy.kern
    -rw-r--r--. 1 root root 1.4M 11月 12 2016 /etc/selinux/targeted/contexts/files/file_contexts.bin
    -rw-r--r--. 1 root root 3.6M 11月 12 2016 /etc/selinux/targeted/policy/policy.30
    -r--r--r--. 1 root root 7.0M 4月  11 2017 /etc/udev/hwdb.bin
    
  • 查找/etc目录下所有用户都没有写权限的文件

    [root@localhost /]# find /etc -type f ! -perm /222 -ls
    33725312  192 -r--r--r--   1 root     root       194984 4月 11  2017 /etc/pki/ca-trust/extracted/java/cacerts
    50398498  340 -r--r--r--   1 root     root       346654 4月 11  2017 /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt
     96774  256 -r--r--r--   1 root     root       262042 4月 11  2017 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
     96775  204 -r--r--r--   1 root     root       208874 4月 11  2017 /etc/pki/ca-trust/extracted/pem/email-ca-bundle.pem
     96776  208 -r--r--r--   1 root     root       208976 4月 11  2017 /etc/pki/ca-trust/extracted/pem/objsign-ca-bundle.pem
    --------
    
  • 查找/etc目录至少有一类用户没有执行权限的文件

    find /etc -type f ! -perm -111 -ls
    
  • 查找/etc/init.d/目录下,所有用户都有执行权限,且其它用户有写权限的所w有文件

    find /etc/init.d -type f -perm -113 -ls
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值