美文网首页想法
Linux如何高效查找文件

Linux如何高效查找文件

作者: ElephantKing | 来源:发表于2019-12-11 15:18 被阅读0次

    动机

    Linux系统不同于windows,有那么丰富的工具可以使用。在windows下有强大到恐怖的文件搜索工具everything,速度之快,功能之强。在Linux系统中,尤其是字符界面系统,就只能用命令来查找文件,所以如何高效的查找文件,成为使用Linux的基础,一起来看看Linux查找文件的三种方式吧。

    常用查找文件方式

    • locate:
    locate file_name
    

    对Linux系统的所有文件,系统建立了一个数据库,位于/var/lib/mlocate/mlocate.db,记录了系统下的文件的位置。所以该命令就是去这个数据库里查找结果,速度可以说相当快。但是这里有个小问题是:因为该命令查找是去数据库查找结果,那么如果文件位置还没来得及入库,那就找不到了,比如刚刚创建的文件。根据系统的版本和设置不同,这个数据库自动更新的频率也不一样,一般为每天更新一次。如果要手动更新数据库,请使用updatedb命令,可能会花费一定时间哟。

    • whereis:
    whereis [-bms] filename
    

    另一种风味的查找方式,该命令只在某些固定的文件夹下查找你需要的文件,这些文件夹分为三类,分别对应上面的-bms三个选项。其中-b就是可执行文件的意思,一般会在以下目录查找:

    # whereis -b ls
    /usr/bin
    /usr/sbin
    /usr/etc
    /etc
    /usr/local/bin
    /usr/local/sbin
    /usr/local/lib
    ...
    

    同理-m选项是帮助文档的意思,一般会在以下目录查找:

    # whereis -m file_name
    /usr/share/man
    /usr/share/man/zh_CN
    /usr/shara/man7
    ...
    

    -s选项是源码文档的意思,一般会在以下目录查找:

    # whereis -s file_name
    /usr/src/debug
    /usr/src/kernels
    ...
    

    如果我们要使用whereis命令查找文件的时候,最好先明确我们找的文件属于哪个类别,精确查找,否则还是先用locate命令查找以下吧。

    • find:
      这个命令是功能最强大的,使用起来很方便,参数很多,功能很丰富,但是也有一些弊端。最常用的是可以根据文件名,文件时间,文件权限,文件大小来查找文件,并且可以使用这些条件的组合形式。
    find ./ -maxdepth 2 -name "*.txt"
    find ./ -type d -name "20100901"
    find ./ -perm 755
    find ./ -size +2k
    并且可以用逻辑符号联结
    find ./ -type d -and -name "20190901"
    find ./ -name "*.txt" -or -name "*.log"
    find ./ -name "*.txt" -not -size +2k
    #更为细致的参数
    find ./ -type TYPE
    #TYPE可以是(不限于)以下几种:
    #d:目录
    #f:文件
    #l:链接
    find ./ -size SIZE
    #SIZE可以是(不限于)以下几种:
    #-2k:小于2KB
    #+2k:大于2KB
    #2k:等于2KB
    #大小计量单位还可以是:k(KB) c(byte) M(兆字节) G(G字节)
    find ./ -atime TIME
    #TIME可以是以下几种:
    #-2:2xx之内,xx是分还是天根据前面的参数确定,atime表示天,amin表示分钟
    #+2:超过2xx
    #2:第2xx
    #除了atime(access),还有ctime(change state)、mtime(modify)
    #cat more exec会改变atime,vi touch会改变三个时间,chmod chown会改变ctime
    #找到文件之后
    find ./ -perm 770 -exec cat {} \;
    find ./ -name "*.txt" -exec cp {} /data \;
    #-exec参数到\;结束,中间是后续执行的命令,{}表示find的结果
    find ./ -name *.txt | xargs grep "wtf"
    find ./ -name *.txt | xargs rm -rf
    

    find命令的弊端在于,会扫描硬盘,费硬盘不说,速度也是三个命令中最慢的,所以一般情况不要在一个比较大的目录使用find,那会让你痛不欲生。

    推荐情况

    根据上面介绍的一些特点,在使用文件查找命令时,推荐如下:

    1. 如果查找的文件是系统产生的,或者系统自带的文件,请先用locate命令查找一遍,速度嘎嘎快,查一遍不亏。
    2. 步骤1不成功,说明文件不再数据库中,或者文件不存在。先别急着updatedb,这个时候使用whereis也基本没戏了,因为whereis命令查找的路径,基本上不会有什么重大更改,里面的文件理应全在数据库中。如果能锁定文件在某个较小的范围里,那就用find吧。否则就使用updatedb咯。
    3. 如果是用户自己编辑的文件,比如你写的代码,那就使用find命令咯,毕竟这个可以确定在某个较小的范围里了。而且此时用locate也大概率不奏效了。
    4. 总之:找自己的文件用find,找系统命令和帮助手册用whereis,在找之前先用locate从数据库里搜一遍。

    相关文章

      网友评论

        本文标题:Linux如何高效查找文件

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