文件查找相关:whereis、find和locate

    本文将对findlocate进行详细讲解

命令简介

  • 名称:whereis

    功能:定位文件所在的目录

    用法:whereis shell命令

    注意:whereis是根据环境变量PATH来查找文件的,而PATH通常设置成存放命令的那些路径,如/bin、/usr/bin等。因此whereis的用途仅限于定位shell命令所在的位置。

  • 名称:find

    功能:查找文件

    用法:find -name 文件名

  • 名称:locate

    功能:查找文件或目录

    用法:locate 文件名或目录名

    说明:locate默认是不被安装的,它的包名叫:mlocate 可以直接使用yum安装即可。locate也是系统中查找文件的方法,但它并不是从磁盘中实时查找文件,而是到由updatedb命令产生的信息库中查找相应的文件和目录。

    注意:如果locate找不到某个文件,但确定该文件存在时,是由于updatedb生成的信息库已经过时。此时你只需要以root的身份执行updatedb命令,重新建立整个系统所有文件和目录的资料库。

命令详解之find

  • 前言

    由于find具有强大的功能,所以它的选项也很多。find命令是一个非常消耗资源的命令,我们用它的时候要习惯于把它放在后台执行,因为遍历一个大的文件系统可能会花很长的时间。

  • 命令格式

    一、find命令的一般形式为:

        find pathname -options [-print -exec -ok …]

    二、find命令的参数:

        pathname:find命令所查找的目录路径。用.来表示当前目录,用/来表示系统根目录。

       -print:find命令将匹配的文件输出到标准输出。

       -exec:find命令对匹配的文件执行该参数所给出的shell命令。

           格式:'command' {} \;    #注意{}和\;之间有空格!

       -ok:在执行每一个命令之前,都会给出提示,让用户确定是否执行。和-exec的作用相同。

    三、find命令选项:

       -name:按照文件名查找文件。

       -perm:按照文件权限查找文件。

       -prune:使find命令不在当前指定的目录中查找。

       -user:按照文件属主查找文件。

       -nouser:查找无有效属主的文件,即该文件的属主在/etc/passwd中不存在。

       -group:按照文件属组查找文件。

       -nogroup:查找无有效属组的文件,即该文件所属的组在/etc/groups中不存在。

       -mtime -n|+n:按照文件的更改时间来查找文件。

           -n:表示文件更改时间距现在n天以内。

           +n:表示文件更改时间距现在n天以前。

       -newer file1 ! file2:查找更改时间比文件file1新但比文件file2旧的文件。

       -type:查找某一类型的文件。

       -size n [c][/c]:查找文件长度为n块文件,带有c时表示文件长度以字节计算。

       -depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。

       -fstype:查找位于某一类型文件系统中的文件,这些文件系统类型通常可以在配置文件/etc/fstab中找到,该配置文件中包含了本系统中有关文件系统的信息。

       -mount:在查找文件时不跨越文件系统mount点。

       -follow:如果find命令遇到符号链接文件,就跟踪至链接所指向的文件。

       -cpio:对匹配的文件使用cpio命令,将这些文件备份到磁带设备中。

    四、使用exec或ok来执行shell命令

    exec选项后面跟随着所要执行的命令或脚本,格式:'command' {} \;

    为了使用exec选项,必须要同时使用print选项。如果验证find命令,会发现该命令只输出从当前路径起的相对路径及文件名。

    例如:为了用ls -l命令列出所匹配到的文件,可以把ls -l命令放在find命令的-exec选项中。

[root@localhost ~]# find . -type f -exec ls -l {} \;
-rw-r--r--. 1 root root 18 May 20  2009 ./.bash_logout
-rw-------. 1 root root 38 Feb 26 14:04 ./.lftp/rl_history
-rw-------. 1 root root 12428 Mar 26 19:41 ./.bash_history
-rw-r--r--. 1 root root 129 Dec  4  2004 ./.tcshrc
-rw-r--r--. 1 root root 9562 Feb 23 05:48 ./install.log
-rw-------. 1 root root 35 Feb 24 11:41 ./.lesshst
-rw-------. 1 root root 1122 Feb 23 05:48 ./anaconda-ks.cfg
-rw-r--r--. 1 root root 176 May 20  2009 ./.bash_profile
-rw-r--r--. 1 root root 176 Sep 23  2004 ./.bashrc
-rw-r--r--. 1 root root 100 Sep 23  2004 ./.cshrc
-rw-r--r--. 1 root root 3161 Feb 23 05:47 ./install.log.syslog
-rw-------. 1 root root 4205 Mar 25 12:10 ./.viminfo

    在上面例子中,find命令匹配到了当前目录下的所有普通文件,并在-exec选项中使用ls -l命令将它们列出。

    在shell中用任何方式删除文件之前,应当先查看相应的文件,使用-exec选项执行rm命令时,它会在删除之前先给出提示。如下:

[root@localhost /]# find . -name "*.conf" -mtime +1 -ok rm {} \;
< rm ... ./usr/share/dracut/modules.d/98syslog/rsyslog.conf > ?

    按y键删除文件,按n键不删除。

    同样还能使用grep命令。如下:

[root@localhost /]# find /etc -name "passwd" -exec grep "root" {} \;
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

    上面的例子中,find命令首先匹配所有文件名为passwd的文件,然后执行grep命令看看这些文件中是否存在一个root用户。

    五、find命令其他用法

    1、根据文件特征查询:

       -amin n:查找系统中最后n分钟访问的文件

       -atime n:查找系统中最后n*24小时访问的文件

       -cmin n:查找系统中最后n分钟被改变状态的文件

       -ctime n:查找系统中最后n*24小时被改变状态的文件

       -false:查找系统中总是错误的文件

       -empty:查找系统中空白的文件,或空白的文件目录,或目录中没有子目录的目录

       -fstype type:查找系统中存在于指定文件系统的文件,例如:ext2

       -gid n:查找系统中文件数字组ID为n的文件

       -group gname:查找系统中文件属于gname文件组,并且指定组和ID的文件

    find命令功能强大,我并没有更加详细的说明。参考有关Linux有关书籍可以知道所有find命令的查找函数。

命令详解之locate

    locate让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立(使用updatedb命令)一个包括系统内所有档案名称及路径的数据库,之后寻找时就只需要查询这个数据库,而不必实际深入系统之中了。

    在一般的distribution中,数据库的建立都被放在contab中自动执行。一般使用者在使用时是要用下面的命令即可。

[root@localhost /]# locate your_file_name
    • 参数说明

     -u,-U:建立数据库,-u会由根目录开始,-U则可以指定开始的位置。

     -e:将目录排除在寻找的范围之外。

     -l:如果是1,则启动安全模式。在安全模式相爱,使用者不会看到权限无法看到的文件。

     -f:将特定的档案系统排除在外。

     -q:安静模式,不会显示任何错误讯息。

     -n:至多显示n个输出。

     -o:指定数据库存的名称。

     -d:指定数据库的路径。

     -h:显示辅助讯息。

     -v:显示更多讯息。

     -V:显示程序的版本信息。

    • 注意updatedb的问题

     updatedb的进程在运行时,会非常多的占用系统资源

原创文章,作者:黑白子,如若转载,请注明出处:http://www.178linux.com/13667

(0)
黑白子黑白子
上一篇 2016-04-05
下一篇 2016-04-05

相关推荐

  • 磁盘配额的操作步骤

    磁盘配额 操作步骤: 1、创建一个10G的分区 /dev/sdd1并将其格式化,挂载 2、如果是新硬盘便不存在同步问题。旧硬盘得使用命令partx  -a /dev/sdd1 3、临时创建挂载文件夹 /mnt/home    4、将/home/*  mv  到 /mnt/home 中,再将/dev/…

    Linux干货 2016-09-01
  • shell-语句总结

    shell脚本语法总结 过程式编程语言: 顺序执行 选择执行 循环执行 shell默认是顺序执行,如果有判断或循环语句则执行判断或循环。 条件判断 if     单分支         if 判断条件:then  &nb…

    Linux干货 2016-08-21
  • 生产环境模拟实现keepalived+Nginx调度器+httpd的高可用集群

    具体过程是用Nginx做负载均衡,可以将Nginx和主机放在同一台机子上,也可以分开放置,只不过分开的话要指明RS是Nginx的主机地址。至于直接将虚拟地址配置在Nginx主机上我暂时还未成功 下面附上我的双主模型的主keepalived服务器的配置 ! Configuration File for keepalive…

    Linux干货 2016-11-11
  • 计算机的组成、Linux主流三大版本的区别、Linux的哲学思想、Linux的使用格式及命令的使用简略说明,以及如何查看命令帮助、FHS目录机构

    计算机的组成极其功能? 按功能来说计算机是由运算器、控制器、I/O系统(输入、输出系统)、存储器五部分组成。 运算器:即中央处理器(CPU)作为五大部分中心的主脑,对数据进行逻辑运算或算数运算。 控制器:主要是指内存设备,将读取到的数据临时保存在内存中这个过程被成为寻址。在cpu中也有属于自己的控制器称之为CPU的寄存器来进行多指令的行。 I/O系统:输入系…

    2017-12-03
  • 关于大型网站技术演进的思考(一):存储的瓶颈(1)

    原文出处: 夏天的森林  前不久公司请来了位互联网界的技术大牛跟我们做了一次大型网站架构的培训,两天12个小时信息量非常大,知识的广度和难度也非常大,培训完后我很难完整理出全部听到的知识,今天我换了个思路是回味这次培训,这个思路就是通过本人目前的经验和技术水平来思考下大型网站技术演进的过程。 首先我们要思考一个问题,什么样的网站才是大型网…

    Linux干货 2015-02-26
  • linux 启动文件 /etc/fstab 文件删除 无法开机 修复的方法

    /etc/fstab文件删除系统自检无法挂载 无法启动 按照提示进入命令行  手动写/etc/fstab,如无内核文件  无grub  就缺啥补啥 fdisk    -l 查看当前分区  blkid    查看分区文件系统的卷标 手动挂载 …

    Linux干货 2016-09-13

评论列表(1条)

  • stanley
    stanley 2016-04-05 22:43

    写标签是个好习惯,markdown可多参考顶置文章