美文网首页
Linux下命令与文件名的检索

Linux下命令与文件名的检索

作者: SunnyQjm | 来源:发表于2018-08-17 16:21 被阅读0次

    原文地址:https://blog.qjm253.cn/?p=463

    which

    通过检索PATH中包含的目录,寻找一个“可执行文件”的位置

    • 用法介绍

      # 用法
      which [-a] command
      
      # 默认行为
      依次检索PATH中的目录,找到第一个与command名字匹配的文件,将其列出
      
      # 参数
      -a:将所有由PATH目录中可以找到的命令均列出
      
    • 注意事项

      • 默认情况下which命令时依次检索PATH中的目录,找到第一个符合条件的就输出并返回。如果加上-a参数,则会将PATH中的目录都检索一遍,列出所有符合条件的文件
      • 这个命令时根据PATH变量中定义的目录来检索的,不同的用户名登录,PATH可能是不同的
      • 有一些命令是shell内建的命令,用which是检索不到的,例如:cd

    whereis

    输入完整的文件名或目录名,在数据库中检索

    • 用法介绍

      # 用法
      whereis [-bmsu] {文件名,目录名}
      
      # 参数
      -b:只查找二进制文件
      -m:只找在说明文件manual路径下的文件
      -s:只找源文件
      -u:查找不在上述三个选项中的其他文件
      
    • 注意事项

      • Linux系统会将系统内所有的文件都记录在一个数据库文件里面,whereis是直接在这个数据库里面检索。但是数据库并不是实时更新的,有写发行版是每天更新一次,如果想立即更新数据库,需要手动执行updatedb(这个需要若干分钟)
      • 由于是直接检索数据库,速度会比find快很多。但是由于具有非实时性也可能检索到已经被删除的文件
      • 更多关于这个数据库的说明,请参参考下面介绍locate时的注意事项

    locate

    只需要输入部分的文件名或目录名,在数据库中检索

    • 用法介绍

      # 用法
      locate [-ir] keyword
      
      # 参数
      -i:忽略大小写差异
      -r:后面可接正则表达式
      
    • 注意事项

      • 同样的,locate 也是检索linux中的数据库来进行查询的,具有非实时性,但是速度会比find快很多
      • locatewhereis检索的数据库通常记录在 /var/lib/mlocate
      • updatedb 这个命令会先读取 /etc/updatedb.conf 中的配置信息,并根据这个配置,去硬盘里查找文件名,更新在 /var/lib/mlocate 中的记录
      • locate:依据 /var/lib/mlocate 内的数据库记录,找出包含用户输入的关键字的文件名
      • whereis:依据 /var/lib/mlocate 内的数据库记录,找到与用户输入的文件名相匹配的记录

    find

    find的功能非常强大,但是因为是进行硬盘检索,所以效率偏低

    • 基本用法

      find [PATH] [option] [action]
      
    • 与时间有关的参数

      • 参数说明

        # 与时间有关的参数:共有-atime、-ctime 与 -mtime,下面以-mtime说明
        -mtime n:n为数字,意为在n天前的“一天之内”被修改的文件
        -mtime +n:列出在n天之前(不包含n天本身)被更改过的文件
        -mtime -n:列出n天内(包含n天本身)被更改过的文件
        -newer file:file为一个存在的文件,列出比file还要新的文件
        
      • find时间相关参数含义图示

        find时间相关参数意义
      • 举个栗子

        # 将到系统上面24小时内有改动(mtime)的文件列出
        find / -mtime 0
        
        # 将到系统上面3天前的24小时内有改动(mtime)的文件列出
        find / -mtime 3
        
        # 寻找 /etc 下面的文件,如果文件的日期比 /etc/password 新就列出
        find /etc -newer /etc/password
        
    • 与用户或用户组名字有关的参数

      • 参数说明

        -uid n:n为数字,是用户的账号ID,称为UID(在/etc/password中每个账号会关联一个UID)
        -gid n:n为数字,是组的ID,称为GID(在/etc/group中每个组会关联一个GID)
        -user name:name为用户账号的名字,例如:sunny
        -group name:name为用户组名,例如:users
        -nouser:寻找文件的所有者不存在与/etc/password中的文件
        -nogroup:寻找文件的所有用户组不存在与/etc/group中的文件
        
      • 举个栗子

        # 查找 /home 下面属于 sunny的文件
        find /home -user sunny
        
        # 查找系统中不属于任何人的文件
        find / -nouser
        
      • 说明
        如果你想找到某个用户在系统下面创建了什么文件,上面介绍的方法就很适用。至于-nouser和-nogroup的参数功能,除了你自行由网络上面下载文件时会发生外,如果你将系统里面某个账号删除了,但是该账号已经在系统内创建了若干文件*,就可能会有无主文件出现!此时就可以用-nouser来找出此类文件。

    • 与文件权限及名称有关的参数

      • 参数说明

        -name filenam:查找文件名为 filename 的文件
        -size [+-]SIZE:查找比SIZE还要大(+)或小(-)的文件。SIZE的单位有:
            c:byte
            k:1024bytes
        -type TYPE:查找文件类型为TYPE的文件,主要有以下几种类型:
            f:一般正规文件
            b、c:设备文件
            d:目录
            l:连接文件
            s:socket文件
            p:FIFO文件
        -perm mode:查找文件权限刚好等于mode的文件(mode与chmod命令中用数字表示权限的写法一致)
        -perm -mode:查找文件权限包含mode中所有权限的文件
        -perm +mode:查找文件权限中包含mode中任一权限的文件
        
      • 举个栗子

        # 找到文件名为rein的文件
        find / -name rein
        
        # 找到 /home 目录下小与50KB的文件
        find /home -size -50k
        
        # 找到 /var 目录下文件类型为Socket的文件
        find /var -type s
        
        # 查找系统中所有含有SGID、SUID或SBIT属性的文件
        find / -perm +7000
        # 所谓的 7000 就是 ---s--s--t,那么只要目标权限中包含s或t就符合条件
        # 如果使用的是 -7000 则目标文件要包含 ---s--s--t 的全部三个权限才符合条件
        
    • 其他可进行的操作

      • 参数说明

        -exec command:command为其他命令,-exec后面可接其他的命令来处理查找到的结果(这个命令不支持别名)
        -print:将结果打印到屏幕上,这个操作是默认操作
        
      • 举个栗子

        # 查找系统中所有含有SGID、SUID或SBIT属性的文件,并使用ls -l 列出详细信息
        find /-perm +7000 -exec ls -l {} \
        

        该例中有两个特殊的地方,{} 以及 \

        • {}:代表的是由find找到的内容
        • \:它是一个关键字,可以理解为 -exec 参数的结束标识符。在-exec 和 ** 之间的便是find命令内的额外命令。它用另一个命令来处理find的执行结果

    相关文章

      网友评论

          本文标题:Linux下命令与文件名的检索

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