• which,whereis, locate, find


    which

    在PATH环境变量中的路径中查找目标文件,所以用来查找都是可执行文件,Linux下的各种命令本质上就是一个可执行的文件,所以我们安装新的软件之后通常都会有相应的命令将其打开,就是因为安装的过程将该软件的启动文件放在PATH中,Shell会在PATH中搜索该命令的文件并执行。

    whereis 和 locate

    Linux会把系统的所有文件的信息都记录在一个数据库中,使用whereis和locate会在这个数据库中查找,所以查找速度很快,但考虑到数据库更新的及时性问题,有时也会找不到一定存在的文件或者找到已经删除的文件
    whereis [-bBmMsSfu] [待查找的文件或目录]
    -b #只查找二进制文件
    -B[目录] #只在指定目录下查找二进制文件
    -m # 只查找man说明文件
    -M[目录] # 只在目录中查找说明文件
    -s # 只查找源代码文件
    -S[目录] # 只在目录查找源代码文件
    -f # 不显示文件名前的路径
    -u # 查找不包含指定类型的文件

    find

    用来在指定目录下查找文件,缺省参数时会查找该目录及其子目录的所有内容,可以使用多个选项-参数来提高搜索精度,可以通过-regex来支持正则表达式,该命令是在硬盘里面遍历寻找,功能很强但是效率很低,通常在whereis和locate找不到时用
    $find [待查找目录] [搜索选项1] [参数1] [搜索选项2] [参数2]

    按路径字符串搜索

    -path [路径字符串] # 按照路径字符串查找文件或目录,大小写敏感
    -ipath [路径字符串] # 按照路径字符串查找文件或目录,大小写不敏感
    -prune [文件或目录路径] # 忽略指定路径的文件

    按属主属组搜索

    -uid [用户识别码] # 查找符合指定的用户识别码的文件或目录
    -user [用户名] # 查找属于用户名的文件或目录
    -gid [群组识别码] # 查找属于群组识别码的文件或目录
    -group [群组名] # 查找属于群组名的文件或目录
    -nogroup # 找出不属于本机群组识别码的文件或目录
    -nouser # 找出不属于本机用户识别码的文件或目录

    按正则表示式搜索

    -regex [正则表达式字符串] # 查找符合正则表达式的文件或目录,大小写敏感
    -iregex [正则表达式字符串] # 查找符合正则表达式的文件或目录,大小写不敏感

    按文件名搜索

    -name [文件或目录名字符串] # 按照文件或目录名查找文件或目录,大小写敏感
    -iname [文件或目录名字符串] # 按照文件或目录名查找文件或目录,大小写不敏感

    按文件权限搜索

    -perm [权限] # 按照权限查找文件或目录

    按文件类型搜索

    -type [文件类型] # 按照文件类型查找文件
    f 普通文件
    l 符号链接
    d 目录文件
    c 字符设备
    b 块设备
    s 套接字
    p FIFO管道文件

    按文件大小搜索

    -size [文件大小] # 查找符合指定文件大小的文件,
    + 大于
    - 小于
    不写 等于
    b 块(512byte)
    c Byte
    w Word(2Byte)
    k 千字节
    M 兆字节
    G G字节

    按照inode搜索

    -inum [inode编号] # 按照inode编号查找文件或目录

    搜索目录层次限制

    -depth # 从待查找目录的最深层的子目录开始查找
    -maxdepth [目录层级] # 设置最大目录层级
    -mindepth [目录层级] # 设置最小目录层级

    按时间搜索

    -amin [分钟] # 查找指定分钟访问过的文件或目录,-3,表示3分钟内,3表示三分钟前的那个时间点,+3表示超过3分钟。
    -atime [天] # 查找指定天访问过的文件或目录。
    -mmin [分钟] # 查找指定分钟修改过的文件或目录。
    -mtime [天] # 查找指定天修改过的文件或目录。
    -cmin [分钟] # 查找指定分钟变化过的文件或目录。
    -ctime [天] # 查找指定天变化过的文件或目录。
    -cnewer [参考文件或目录] # 查找比参考文件或目录更新的文件或目录

    • Remark:
      Unix/Linux的每个文件都有三个时间戳
      访问时间:最近一个访问时间 > -atime, -amin
      修改时间:文件最后一次修改时间
      > -mtime, -mmin
      变化时间:文件相关的数据最后一个被修改的时间==> -ctime, -cmin

    搜索结果的输出

    -print # 如果find返回的是true,就将文件或目录名称列出到标准输出,每列一个名称
    -print0 # 如果find返回的是true,就将文件或目录名称列出到标准输出,所有的名称都在同一行
    -print [格式] # 如果find返回的是true,就将文件或目录名称按指定格式输出到标准输出
    -fprintf [列表文件] [输出格式] # 如果$find返回的是true,就将文件或目录名称按照指定格式把结果输出到指定文件中

    搜索结果的处理

    -exec [新命令] {} ; # 如果搜索结果为true就对结果执行新命令
    -ok [新命令] # 如果搜索结果为true就询问是否对结果执行新命令

    a.out  Makefile  test_scanf.c
    $find . -type f -perm 0775 -exec ls -l {} ;
    -rwxrwxr-x 1 linux linux 7287 10月 17 08:25 ./a.out
    

    其他

    # 反向搜索,即搜索不满足!之后条件的文件或目录
    -follow # 排除符号链接
    -empty # 搜索空文件

    例子

    #!/bin/bash
    #在指定的路径中执行grep
    find $1 -name $2 |xargs grep $3 --color
    
  • 相关阅读:
    手机号码正则(已测试可以)
    查看phpfpm的进程和端口号
    JS正则表达式验证是否为11位有效手机号码,
    访问HTML可以,访问PHPfile not found
    戏说论文、技术文档与网络文字的区别
    Sun 一线产品的图标
    VC编程中如何设置对话框的背景颜色和静态文本颜色
    Sun 一线产品的图标
    Web Beans首个预览版发布
    Web Beans首个预览版发布
  • 原文地址:https://www.cnblogs.com/xiaojiang1025/p/5858935.html
Copyright © 2020-2023  润新知