• linux下五种查找命令


      我们经常需要在系统中查找一个文件或者命令,那么在Linux系统中如何快速定位和精确查找它呢?下面总结了五个基础命令·分别是which、whereis、type、locate、find。


    一 which

      which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

    语法

    which [options] [arguments]
    

    选项

    -n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
    -p<文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径;
    -w:指定输出时栏位的宽度;
    -V:显示版本信息。
    

    参数

    指令名:指令名列表。
    

    二 whereis

      whereis命令首先会去掉filename中的前缀空格和以.开头的任何字符,然后再在数据库(var/lib/slocate/slocate.db)中查找与上述处理后的filename相匹配的二进制文件、源文件和帮助手册文件,使用之前可以使用updatedb命令手动更新数据库。

    语法

    whereis [options] [arguments]
    

    选项

    -b:只查找二进制文件;
    -B<目录>:只在设置的目录下查找二进制文件;
    -f:不显示文件名前的路径名称;
    -m:只查找说明文件;
    -M<目录>:只在设置的目录下查找说明文件;
    -s:只查找原始代码文件;
    -S<目录>只在设置的目录下查找原始代码文件;
    -u:查找不包含指定类型的文件。
    

    参数

    指令名:要查找的二进制程序、源文件和man手册页的指令名。
    

    三 type

      type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。

    命令类型:

    alias:别名。
    keyword:关键字,Shell保留字。
    function:函数,Shell函数。
    builtin:内建命令,Shell内建命令。
    file:文件,磁盘文件,外部命令。
    unfound:没有找到。
    

    语法

    type [options] [arguments]
    

    选项

    -t:输出“file”、“alias”或者“builtin”,分别表示给定的指令为“外部指令”、“命令别名”或者“内部指令”;
    -p:如果给出的指令为外部指令,则显示其绝对路径;
    -a:在环境变量“PATH”指定的路径中,显示给定指令的信息,包括命令别名。
    

    参数

    指令:要显示类型的指令。
    

    四 locate

      locates是查询系统上预建的文建索引数据库(/var/lib/mlocate/mlocate.db)依赖实现构建的索引。索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)索引构建过程需要遍历整个根文件系统,极消耗资源.

    工作特点:

    查找速度快
    模糊查找
    非实时查找
    搜索的是文件的全路径,不仅仅是文件名
    可能只搜索用户具备读取和执行权限的目录
    

    选项

    -i 不区分大小写搜索
    -n 只列举前N个匹配项目
    

    参数

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

    五 find

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

    实时查找工具,通过遍历指定的路径完成文件查找

    工作特点:

    查找速度略慢
    精确查找
    实时查找
    可能只搜索用户具备读取和执行权限的目录
    

    选项

    查找条件

    1.只搜索层级

    -maxdepth level 最大搜索目录深度,指定目录为第一级
    -mindepth level最大搜索目录深度
    根据文件名和inode查找:
    -name "文件名称“:支持使用glob
    *,?,[],[^]
    -iname "文件名称“:不区分字母大小写
    -inum n 按inode相同的inode号的文件
    isamefile name 相同inode号的文件
    -links n 链接数为n的文件
    -regex "PATTERN": 以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称
    更具属主属组查找:
    -user USERNAME:查找属主为指定用户(UID)的文件
    -group GREPNAME:查找属组为指定组(GID)的文件
    -uid UserID:查找属主为指定的UID号的文件
    -gid GroupID: 查找属主为指定的GID号的文件
    -nouser:查找没有属主的文件
    -nogroup:查找没有属组的文件
    

    2.根据文件类型查找:

    -type TYPE
    f:普通文件
    d:目录文件
    l:符号链接文件
    s:套接字文件
    b:块文件
    c:字符设备文件
    p:管道文件
    组合条件:
    与:-a
    或:-o
    非:-not,!
    德.摩根定律
    (非A) 或 (非B)= 非(A且B)
    (非A) 且 (非B)= 非(A或B)
    

    3.根据文件大小来查找:

    -size [+|-] #UNIT
    #UNIT:(#-1,#)
    -#UNIT:(0,#-1)
    +#UNIT:(#,∞)
    根据时间戳:	
    以“天”为单位:
    -atime[+|-]#
    #:[#,#+1]
    +#:[#+1,,∞]
    -#:[0,#]
    -ctime
    -mtime
    以“分钟”为单位:
    -amin
    -mmin
    -cmin
    根据权限查找:
    -perm[/|-]MODE
    MODE:精确权限匹配
    /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可,或关系,+从centos7开始淘汰
    -MODE:每一类对象都必须同时拥有指定权限,与关系
    O 表示不关注
    

    处理动作

      1. -print:默认的处理动作,显示至屏幕
      2. -ls:类似对于查到的文件执行"ls -l"命令
      3. -delete:删除查找到的文件
      4. -fls file:查找到的所文件的长格式信息保存至指定文件中
      5. -ok COMAND{} ;对查找到的每个文件执行由COMMAND制定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
      6. -exec COMMAND {} ;对查找到的每个文件执行由COMMAND指定的命令
      7. {}:用于应用查找到的文件名称自身
      8. find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令
    

    参数替换xargs

      1. 由于很多命令不支持管道|来传递参数,而正常工作中有这个必要,所以就有了xargs命令
      2. xargs用于产生某个命令参数,xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔成为arguments
      3. 注意:文件名或者是其他异议的名词内含有空格符的情况
      4. 有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决
    find和xargs格式:find | xargs COMMAND
    

    参数

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

    六 命令比较

    总结

      到目前为止,查找命令也学了不少了,为了自己对这些命令不产生混淆以此篇博客理清一下。

  • 相关阅读:
    tailf,tail -f,tail -F区别
    Java多线程知识总结(一)
    MyBatis使用总结
    mina学习总结
    好书推荐
    Hessian总结
    Spring总结
    SpringMVC总结
    判断两个IP是否处于同一子网(网段)
    Delphi Json之树遍历
  • 原文地址:https://www.cnblogs.com/zangfans/p/8371794.html
Copyright © 2020-2023  润新知