美文网首页
文件名的查找

文件名的查找

作者: epiiplus1equal0 | 来源:发表于2019-01-22 14:46 被阅读0次

Linux会将系统内的所有文件都记录在一个数据库文件中.

whereis和locate是利用数据库查找, 所以相当快; find查询实际硬盘, 速度慢.

whereis

寻找特定文件

#whereis [-bmsu] 文件或目录名
    -b    search only for binaries
    -m    search only for manual sections(只找说明文件manual路径下的文件)
    -s    search only for sources(源文件)
    -u    search  for  unusual  entries(查找不在上述三个选项当中的其他特殊文件)

locate

#locate [-ir] keyword
    -i    --ignore-case, 忽略大小写的差异
    -r    --regexp, 后面可接正则表达式

#限制:
#   根据已创建的数据库/var/lib/mlocate/里面的数据去查找, 数据库创建默认每天执行一次

#手动更新数据库
updatedb
#此命令会读取/etc/updatedb.conf这个配置文件的设置, 查找系统硬盘内的文件名, 并更新/var/lib/mlocate/
#内的数据库文件

find

#find [PATH] [option] [action]
    1. 与时间有关的参数: atime, ctime, mtime (以mtime为例, n为数字)
        mtime n    在n天之前的"一天之内"被改动过的文件, [n, n+1]
        mtime +n    在n天之前(不含n天本身)被改动过的文件名, [n+1, +∞)
        mtime -n    在n天之内(含n天本身)被改动过的文件名, [0, n]
        -newer file    列出比file还新的文件
        #实例1: 找到系统上24小时内更新过的文件
        find / mtime 0
        #实例二: 找到系统上比/etc/passwd更新的文件
        find / -newer /etc/passwd
    2. 与用户或用户组名有关的参数:
        -uid n    找到与UID为n的用户有关的文件
        -gid n    找到与GID为n的用户组有关的文件
        -user "name"    找到与用户名为name的用户有关的文件
        -group "name"    找到与用户组名为name的用户组有关的文件
        -nouser    寻找文件的所有者不在/etc/passwd的文件
            #删除系统账号后, 可能会有无主的文件存在
        -nogroup    寻找文件的所有组不在/etc/group中的文件
            #当你自行安装软件时, 很可能该软件的属性中没有文件的所有者
        #实例1: 找到/home下属于alex的文件
        find /home -user alex
        #实例2: 查找系统中不属于任何人的文件
        find / -nouser
    3. 与文件权限及名称有关的参数
        -name "filename"    查找文件名为filename的文件, 可利用通配符
        -type TYPE    查找文件类型为TYPE的文件
        -perm mode    查找文件权限"等于mode"的文件
        -perm -mode    查找文件权限"必须要包括全部mode"的文件
        -perm /mode    查找文件权限"包含任一mode"的文件
        #例如, find /home/alex -perm +0310 表示查找/home/alex下
        #      0100, 0110, 0200, 0210, 0300, 0310的文件
        #实例: 查找/bin和/sbin下具有SUID或SGID或SBIT的文件
            find /bin /sbin -perm +7000    #注: 可以同时查找多个目录
    4. 其他操作:
        -exec command    command为其他命令, -exec后面可再接其他命令来处理查找到的结果
        #实例1: 将/home中权限为0700的所有文件列出来
            find /home -perm 0700 -exec ls -l {} \; #此处不支持命令别名!!!
            #1.1 {}代表由find找到的内容, find找到的结果会被放置到{}中
            #1.2 -exec一直到"\;"是关键字, 代表find额外命令的开始(-exec)到结束(\;), 在这中间
            #    的就是
            #    find的额外命令, 即ls -l {}
            #1.3 因";"在bash中是有特殊意义的, 故用反斜杠转义
        -size [{+|-| }ckMG]
            +   大于; -   小于; 无加减号    等于
            c   bytes; k    kilobytes; M    Megabytes; G    Gigabytes
        -print    将结果打印到屏幕上, 此为默认操作
      本文基于<鸟哥的Linux私房菜>, 归纳整理, 在此致谢鸟哥.

相关文章

网友评论

      本文标题:文件名的查找

      本文链接:https://www.haomeiwen.com/subject/qrwljqtx.html