• Linux 文件查找命令详解


    find命令

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

    语法

    find   path   -option   [   -print ]   [ -exec   -ok   command ]   {} ;
    

    参数说明 :

    find 根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部份为 path,之后的是 expression。如果 path 是空字串则使用目前路径,如果 expression 是空字串则使用 -print 为预设 expression。

    expression 中可使用的选项有二三十个之多,在此只介绍最常用的部份。

    选项 说明
    -mount, -xdev 只检查和指定目录在同一个文件系统下的文件,避免列出其它文件系统中的文件
    -amin n 在过去 n 分钟内被读取过
    -anewer file 比文件 file 更晚被读取过的文件
    -atime n 在过去 n 天过读取过的文件
    -cmin n 在过去 n 分钟内被修改过
    -cnewer file 比文件 file 更新的文件
    -ctime n 在过去 n 天过修改过的文件
    -empty 空的文件
    -gid<群组识别码>:查找符合指定之群组识别码的文件或目录;
    -group<群组名称>:查找符合指定之群组名称的文件或目录;
    -ipath p, -path p 路径名称符合 p 的文件,ipath 会忽略大小写
    -name name, -iname name 文件名称符合 name 的文件。iname 会忽略大小写
    -size n 文件大小 是 n 单位,b 代表 512 位元组的区块,c 表示字元数,k 表示 kilo bytes,w 是二个位元组。
    -type<文件类型> 只寻找符合指定的文件类型的文件;-type c : 文件类型是 c 的文件。
    d: 目录
    c: 字型装置文件
    b: 区块装置文件
    p: 具名贮列
    f: 一般文件
    l: 符号连结
    s: socket

    实例

    将目前目录及其子目录下所有延伸档名是 c 的文件列出来。

    # find . -name "*.c"
    

    将目前目录其其下子目录中所有一般文件列出

    # find . -type f
    

    将目前目录及其子目录下所有最近 20 天内更新过的文件列出

    # find . -ctime -20
    

    查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

    $ find /var/logs -type f -mtime +7 -ok rm { } ;
    

    查找前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:

    $ find . -type f -perm 644 -exec ls -l { } ;
    

    为了查找系统中所有文件长度为0的普通文件,并列出它们的完整路径:

    $ find / -type f -size 0 -exec ls -l { } ;
    

    查找/var/logs目录中更改时间在7日以前的普通文件,并在删除之前询问它们:

    $ find /var/logs -type f -mtime +7 -ok rm { } ;
    

    locate命令

    locate命令其实是find -name的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

    updatedb命令用来创建或更新slocate命令所必需的数据库文件。updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入slocate数据库文件中。

    -o<文件>:忽略默认的数据库文件,使用指定的slocate数据库文件;
    -U<目录>:更新指定目录的slocate数据库;
    -v:显示执行的详细过程。
    

    语法

    locate [-d ][--help][--version][范本样式...]
    

    参数:

    选项 说明
    -d<目录>或--database=<目录> 指定数据库所在的目录;
    -u 更新slocate数据库;
    --help 显示帮助;
    --version 显示版本信息。

    实例

    查找passwd文件,输入以下命令:

    locate passwd
    

    附加说明

    locate与find 不同: find 是去硬盘找,locate 只在/var/lib/slocate资料库中找。

    locate的速度比find快,它并不是真的查找,而是查数据库,一般文件数据库在/var/lib/slocate/slocate.db中,所以locate的查找并不是实时的,而是以数据库的更新为准,一般是系统自己维护,也可以手工升级数据库 ,命令为:

    locate -u 
    

    slocate命令

    Linux slocate命令查找文件或目录。

    slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息。

    语法

    slocate [-u][--help][--version][-d <目录>][查找的文件]
    

    参数

    选项 说明
    -d<目录>或--database=<目录> 指定数据库所在的目录;
    -u 更新slocate数据库;
    --help 显示帮助;
    --version 显示版本信息。

    实例

    使用指令"slocate"显示文件名中含有关键字"fdisk"的文件路径信息,输入如下命令:

    $ slocate fdisk #显示文件名中含有fdisk关键字的文件的路径信息 
    

    执行以上命令后,指令执行的输出信息如下:

    $ slocate fdisk #显示文件名中含有fdisk 关键字的文件的路径信息  
    /root/cfdisk        #搜索到的文件路径列表  
    /root/fdisk    
    /usr/include/grub/ieee1275/ofdisk.h  
    /usr/share/doc/util-Linux/README.cfdisk  
    /usr/share/doc/util-Linux/README.fdisk.gz   
    

    which命令

    Linux which命令用于查找文件。

    which指令会在环境变量$PATH设置的目录里查找符合条件的文件。

    语法

    which [文件...]
    

    参数

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

    实例

    使用指令"which"查看指令"bash"的绝对路径,输入如下命令:

    $ which bash
    

    上面的指令执行后,输出信息如下所示:

    /bin/bash                   #bash可执行程序的绝对路径 
    

    whereis命令

    Linux whereis命令用于查找文件。

    该指令会在特定目录中查找符合条件的文件。这些文件应属于原始代码、二进制文件,或是帮助文件。

    该指令只能用于查找二进制文件、源代码文件和man手册页,一般文件的定位需使用locate命令。

    语法

    whereis [-bfmsu][-B <目录>...][-M <目录>...][-S <目录>...][文件...]
    

    参数

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

    实例

    使用指令"whereis"查看指令"bash"的位置,输入如下命令:

    $ whereis bash 
    

    上面的指令执行后,输出信息如下所示:

    bash:/bin/bash/etc/bash.bashrc/usr/share/man/man1/bash.1.gz 
    

    注意:以上输出信息从左至右分别为查询的程序名、bash路径、bash的man 手册页路径。

    如果用户需要单独查询二进制文件或帮助文件,可使用如下命令:

    $ whereis -b bash 
    $ whereis -m bash 
    

    输出信息如下:

    $ whereis -b bash               #显示bash 命令的二进制程序  
    bash: /bin/bash /etc/bash.bashrc /usr/share/bash    # bash命令的二进制程序的地址  
    $ whereis -m bash               #显示bash 命令的帮助文件  
    bash: /usr/share/man/man1/bash.1.gz  #bash命令的帮助文件地址  
    
  • 相关阅读:
    【Linux下Inotify + Rsync文件实时同步】
    Nginx升级到1.0.2最新稳定版
    【Nginx+Tomcat+Session 高性能群集搭建】
    HttpException (0x80072749): Unable to make the session state request to the session state server
    there is no source code available for the current location 解决方案
    CHARINDEX和PATINDEX函数 详解
    COMException was unhandled:Old format or invalid type library
    ASP.NET MVC 开源项目 收集
    Drupal Installation:Failed to connect to your MySQL database server
    Sql Server建表时设置双主键及列名以数字开头的解决方法
  • 原文地址:https://www.cnblogs.com/yangliguo/p/8463118.html
Copyright © 2020-2023  润新知