• Linux下的文件查找类命令(转载)


    如何快速有效的定位文件系统内所需要查找的文件呢?Linux为我们提供了一些文件查找类的命令,我们需要掌握以下几个命令:

    http://blog.csdn.net/sailor201211/article/details/53290470

    which

    命令which会依照用户的PATH环境变量查找一个外部命令对应的可执行文件的路径。如:

    $ which gcc
    /usr/bin/gcc

    whereis

    和which命令相比,whereis命令则可以定位一个外部命令的二进制文件、源代码文件及用户手册文档。如:

    $ whereis gcc
    gcc: /usr/bin/gcc /usr/lib/gcc /usr/bin/X11/gcc /usr/share/man/man1/gcc.1.gz

    locate

    上述两条命令(which和whereis)仅用于查找安装到系统内的外部命令所对应的文件,而对于一般的用户文件如个人的文档、照片等则无能为力。此时可以用locate命令帮助我们快速定位任意类型的文件。如:

    $ locate CentOS-6.5-x86_64-bin-DVD1.iso
    /home/sailor-m/CentOS-6.5-x86_64-bin-DVD1.iso
    /home/sailor-m/VirtualBox VMs/CentOS-6.5-x86_64-bin-DVD1.iso

    命令locate查找文件并非遍历整个文件系统,而是从系统内已存在的一个文件信息数据库/var/lib/mlocate/mlocate.db中查找的,所以查询速度极快。如RHEL6之类的发行版一般在计划任务中安排每日定时更新该数据库。不过,如果是用户刚刚建立的文件,用locate命令是查找不到的。如:

    $ touch ~/mystuff
    $ locate mystuff

    此时如果用updatedb命令手动更新该数据库,就可以查询到了:

    $ sudo updatedb
    $ locate mystuff
    /home/sailor-m/mystuff

    find

    文件查找类命令中使用最频繁并且功能最强大的当属find了,它可以在目录树中查找任意类型文件,并可以设置多种搜索条件。命令find对文件的查找是实时搜索,因为要遍历文件系统的目录树,所以速度较慢。该命令的语法格式为:

    find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path…] [expression]

    其中-H-L-P三个选项是用于处理符号链接的;-D debugoptions用于诊断和调试;[-Olevel]用于查询的优化。这几个选项其实并不常用,具体用法可以参阅man手册。所以find的常用形式可以简化为:

    find [path…] [expression]

    • path:find命令所查找的目录路径。例如用.来表示当前目录,用/来表示系统根目录
    • expression:expression可以分为——“-options [-print -exec -ok …]” 
      • -options,find命令的常用选项,一般为指定查找条件,下面举例介绍
      • -print,将匹配的文件输出到标准输出
      • -exec,对匹配的文件执行该参数所给出的shell命令。相应命令的形式为’command’ { } ;,注意{ }和;之间的空格
      • -ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行。

    也有人将find命令的结构总结为:

    find [目录] [条件] [动作]

    下面举几个find查找的例子:

    (1)-name 按文件名查找

    如查找/etc目录下文件名以.conf结尾的文件:

    $ find /etc/ -name "*.conf"
    • 1
    • 1

    (2)-user & -group 按文件的属主或属组查找

    如查找当前目录下用户属主为sailor的文件:

    $ find ./ -user sailor
    • 1
    • 1

    当查找目录为当前目录时,./也可以省略。

    (3)-type 查找某一类型的文件,诸如:

    • b 块设备文件。
    • d 目录。
    • c 字符设备文件。
    • p 管道文件。
    • l 符号链接文件。
    • f 普通文件。

    如查找/etc目录下的所有子目录:

    # find /etc/ -type d
    • 1
    • 1

    (4)-size 按照文件的大小来查找

    -size后面可以跟一个表示大小的单位,如k、M或者G;还可以跟一个-或者+号,表示小于或者大于。下面这条命令查找/tmp目录下零字节大小的文件,并列出其详细信息:

    # find /tmp -size 0 -exec ls -l {} ;
    • 1
    • 1

    查找/tmp目录下大于1G的文件并把它们删除:

    # find /tmp -size +1G -exec rm {} ;
    • 1
    • 1

    上述两条命令的效果等价于:

    # ls -l `find /tmp -size 0`
    # rm `find /tmp -size +1G`
    • 1
    • 2
    • 1
    • 2

    (5)-mtime & -ctime & -atime 按时间来查找

    其中mtime是文件的修改时间,即文件内容被修改的时间;ctime是文件属性被改变的时间;atime是文件访问时间。该选项后面可以跟数字”N”或+N”或”-N”,分别表示条件为距离今天恰好N天,或者超过N天,或者不到N天。

    如查找7日内没有被访问过的文件,并将其删除:

    $ find ./ -atime +7 -exec rm {} ;
    • 1
    • 1

    (6)-perm 按照文件的权限来查找

    查找当前目录下权限为0777的文件:

    $ find ./ -perm 0777
    • 1
    • 1

    权限数字前面还可以有一个-号,表示至少满足某权限。如查找当前目录下至少同组用户可写的普通文件:

    $ find ./ -type f -perm -020
    • 1
    • 1

    (7)-maxdepth 指定查找深度

    后面可以跟一个数字N表示最多进入N-1级子目录进行查找。如仅在/etc目录(不包含其子目录)下查找文件名以“.conf”结尾的文件:

    # find /etc/ -name "*.conf" -maxdepth 1
    • 1
    • 1

    文件查找命令find还有许多其他有用的选项,如-nouser-nogroup分别可以查找无有效属主和属组的文件。查看find的man page可以看到几十屏的文档,可见其功能强大,我们只有熟练掌握其常用的用法,其余的在使用中慢慢体会摸索即可。

  • 相关阅读:
    redis源码分析3---结构体---字典
    redis源码分析2---结构体---链表
    redis源码分析1---结构体---简单动态字符串sds
    智能算法---蚁群算法
    智能算法---粒子群算法
    C语言难点6:如何更好的看C语言源代码
    C语言难点5文件io,库函数
    C语言难点4之动态内存分配
    C语言难点3之结构,联合和指针
    C语言难点2之预处理器
  • 原文地址:https://www.cnblogs.com/jjzd/p/6220465.html
Copyright © 2020-2023  润新知