• Linux:文件搜索


    文件搜索

    在Linux中,与文件搜索相关的命令常用的有 whereis,which,find 和 locate。下面分别介绍一个各个命令:

    常用命令

    1、whereis命令

    用法:
     whereis [options] [-BMS <dir>... -f] <name>
    
    选项:
     -b         search only for binaries
     -B <dirs>  define binaries lookup path
     -m         search only for manuals and infos
     -M <dirs>  define man and info lookup path
     -s         search only for sources
     -S <dirs>  define sources lookup path
     -f         terminate <dirs> argument list
     -u         search for unusual entries
     -l         output effective lookup paths
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    whereis 只能搜索二进制文件(-b),man 帮助文件(-m)和源代码文件(-s)。它并没有从硬盘中依次查找,而是直接从数据库中查询。

    shiyanlou:~/ $ whereis redis                                         [20:33:24]
    redis: /etc/redis
    shiyanlou:~/ $ whereis shells                                        [20:41:29]
    shells: /etc/shells /usr/share/man/man5/shells.5.gz
    
    • 1
    • 2
    • 3
    • 4

    2、locate命令

    用法: locate [-d path | --database=path] [-e | -E | --[non-]existing]
          [-i | --ignore-case] [-w | --wholename] [-b | --basename] 
          [--limit=N | -l N] [-S | --statistics] [-0 | --null] [-c | --count]
          [-P | -H | --nofollow] [-L | --follow] [-m | --mmap ] [ -s | --stdio ]
          [-A | --all] [-p | --print] [-r | --regex ] [--regextype=TYPE]
          [--max-database-age D] [--version] [--help]
          pattern...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使用 locate 命令查找文件也不会遍历硬盘,它通过查询 /var/lib/mlocate/mlocate.db 数据库来检索信息。不过这个数据库也不是实时更新的,系统会使用定时任务每天自动执行 updatedb 命令来更新数据库。所以有时候你刚添加的文件,它可能会找不到,需要手动执行一次 updatedb 命令。这个命令也不是内置的命令,在部分环境中需要手动安装,然后执行更新。

    sudo apt-get update
    sudo apt-get install locate
    sudo updatedb
    
    • 1
    • 2
    • 3

    查找 /etc 下所有以 sh 开头的文件:

    locate /etc/sh
    
    • 1

    查找 /usr/share/ 下所有 jpg 文件:

    locate /usr/share/*.jpg
    
    • 1

    如果想只统计数目可以加上 -c 参数,-i 参数可以忽略大小写进行查找。

    3、which命令

    which 本身是 Shell 内建的一个命令,我们通常使用 which 来确定是否安装了某个指定的程序,因为它只从 PATH 环境变量指定的路径中去搜索命令并且返回第一个搜索到的结果。也就是说,我们可以看到某个系统命令是否存在以及执行的到底是哪一个地方的命令。

    shiyanlou:~/ $ which ping                                            [20:48:05]
    /bin/ping
    shiyanlou:~/ $ which find                                            [20:50:16]
    /usr/bin/find
    
    • 1
    • 2
    • 3
    • 4

    4、find命令

    用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec|time] [path...] [expression]
    
    默认路径为当前目录;默认表达式为 -print
    表达式可能由下列成份组成:操作符、选项、测试表达式以及动作:
    
    操作符 (优先级递减;未做任何指定时默认使用 -and):
          ( EXPR )   ! EXPR   -not EXPR   EXPR1 -a EXPR2   EXPR1 -and EXPR2
          EXPR1 -o EXPR2   EXPR1 -or EXPR2   EXPR1 , EXPR2
    
    位置选项 (总是真): -daystart -follow -regextype
    
    普通选项 (总是真,在其它表达式前指定):
          -depth --help -maxdepth LEVELS -mindepth LEVELS -mount -noleaf
          --version -xdev -ignore_readdir_race -noignore_readdir_race
    
    测试(N可以是 +N 或-N 或 N):-amin N -anewer FILE -atime N -cmin  
          -cnewer 文件 -ctime N -empty -false -fstype 类型 -gid N -group 名称
          -ilname 匹配模式 -iname 匹配模式 -inum N -ipath 匹配模式 -iregex 匹配模式
          -links N -lname 匹配模式 -mmin N -mtime N -name 匹配模式 -newer 文件
          -nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN
          -readable -writable -executable
          -wholename PATTERN -size N[bcwkMG] -true -type [bcdpflsD] -uid N
          -used N -user NAME -xtype [bcdpfls]
          -context 文本
    
    
    操作: -delete -print0 -printf 格式 -fprintf 文件 格式 -print 
          -fprint0 文件 -fprint 文件 -ls -fls 文件 -prune -quit
          -exec 命令 ; -exec 命令 {} + -ok 命令 ;
          -execdir 命令 ; -execdir 命令 {} + -okdir 命令 ;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    find 应该是这几个命令中最强大的了,它不但可以通过文件类型、文件名进行查找而且可以根据文件的属性(如文件的时间戳,文件的权限等)进行搜索。

    列出 home 目录中,当天(24 小时之内)有改动的文件:

    find ~ -mtime 0
    
    • 1

    列出用户家目录下比 /etc 目录新的文件:

    find ~ -newer /etc
    
    • 1

    搜索/etc/ 目录下面名字叫做 interfaces 的文件或者目录。

    sudo find /etc/ -name interfaces
    
    • 1
  • 相关阅读:
    【atoi函数详解】
    vue el-upload 上传图片列表校验不通过后多删除了一张图片
    9面阿里Java岗,最终定级P6拿P7工资,分享学习经验
    Linux多线程C++版(三) 线程终止 pthread_cancel()函数 pthread_exit()函数 pthread_join()函数
    MPP(无主备)环境搭建
    25.Xaml DateGrid控件---->默认单选,可以多项选择的网格控件
    【LeetCode刷题-链表】--25.K个一组翻转链表
    网络安全(黑客)—-2024自学手册
    Web开发中会话跟踪的隐藏表单字段(隐藏input)方法
    C++-容器:string使用介绍(非常全面,详细)
  • 原文地址:https://blog.csdn.net/weixin_49346755/article/details/125434518