zoukankan      html  css  js  c++  java
  • (四)文件搜索命令

    ===========================================================================================================================

    locate命令

    locate   文件名

    含义:在后台数据库中按文件名搜索,搜索速度很快。

    注意:(1locate的搜索方式是在“/var/lib/mlocate”这个数据库中进行搜索的(不同的Linux可能数据库的名字不一样)。

          但是mlocate这个数据库不是实时更新的,它的更新频率是一天一更新。所以会发生用locate可能搜索不到

          已经存在的文件的现象。我们可以使用“updatedb”命令来强制更新数据库,会解决这个问题。

        (2locate只可以按照文件名来搜索

    locate的搜索规则

    locate遵守一定的搜索规则,这个规则的配置文件位于“/etc/updatedb.conf”中。我们可以打开看一看有哪些规则。

    如下图:

     

    来解释一下上图中每一句话的含义:

    PRUNE_BIND_MOUNTS 是否开启这些规则,为“yes”则开启,为“no”则不开启。

    PRUNEFS 搜索时不搜索的文件系统

    PRUNENAMES 搜索时不搜索文件名中包含这些关键字的文件

    PRUNEPATHS 搜索时这些目录当中的文件不搜索

    因此你可能会遇到这样的情况:比如你所搜索的文件名在/tmp目录下也存在,但是搜索的结果却没有/tmp下面的这个文件。

    这下,你知道为什么了吧。

    注:不仅locate遵守updatedb.conf这个配置文件的搜索规则,下面要讲到的whereiswhich命令也遵守这个配置文件的规则。

    ===========================================================================================================================

    whereis命令

    whereis   命令名

    含义:搜索命令所在的路径以及相应帮助文档所在的路径

    选项:

    -m 只查找帮助文件

    -b 只查找可执行文件

    ===========================================================================================================================

    which命令

    which 命令名

    含义:这个命令跟whereis的功能一样,唯一不同的是which搜索的是命令所在路径以及命令的别名(不含帮助文档)。

    注:并不是所有的命令都有别名的。也并不是所有的命令都有所在路径的,比如搜索“cd”命令的路径就搜索不到。

    ===========================================================================================================================

    find命令

    find  [搜索范围]  [搜索条件]

    含义:这是find命令基本的格式。

    find命令十分强大,选项也是多种多样。下面是几个常用的,重点学习记忆:

    find / -name install.log

    含义:搜素范围是根目录(”/“),搜索的条件是按名称搜索“install.log”。你可以灵活改动各个选项。

    注意:find的搜索匹配是完全匹配的,也就是说它搜索出来的东西的名称应该和“install.log”一模一样,多一个字母

    少一个字母都不行。如果想要进行模糊搜索,则需要使用通配符。

    find /root -iname istall.log

    含义:在root目录下搜索名为”istall.og”的文件,且文件名不区分大小写。

    find / -user root

    含义:在根目录下搜索所有者为”root”的文件,也即是说“-user”是按所有者进行搜索。

    find / -nouser

    含义:在根目录下搜索没有所有者的文件。也即是“-nouser”是搜索没有所有者的文件。

    注意:Linux中没有所有者的文件一般为垃圾文件,应当删除。但是有以下两种情况文件没有所有者是正常的。

    1)在“/proc/”和“/sys/”目录下的文件如果没有所有者正常,不要删除。

    2)外来文件也可能没有所有者,比如你插入的U盘中的文件是在windows中创建的,则

    可能没有所有者,正常。

    find /var/log/ -mtime +10

    含义:搜索10天修改了内容的文件。

    注:在这个命令中,后两个参数是可以更改的。如下:

    atime 文件访问时间

    ctime 改变文件属性

    mtime 修改文件内容

    -10 10天内修改的文件

    10 10天前的当天修改的文件

    +10 10天前的修改文件

    对于这个-10+10你可能还不了解,下面是个时间轴,可以帮助理解:

     

    find /var/log atime +10

    含义:搜索10天被访问的文件。也就是“atime”表示是按访问时间来搜索的。

    find . -size 25k

    含义:搜索当前目录中大小为25k的文件。也就是说“-size“是按大小搜索的意思。

    注:25k 等于25k

    -25k 小于25k

    +25k 大于25k

    注意:必须写成25k(且k是小写的)或者25M(且M是大写的),不能写成数字25.

    find . -inum 262422

    含义:搜索当前目录中,i节点号为262422的文件。也即是“-inum“是按i节点搜索的意思。

    find /etc -size +20k -a -size -50k

    含义:搜索etc目录下大小小于50k且大于20k的文件。

    注:-a 即逻辑与,两个条件都满足。

    -r 即逻辑或,两个条件满足一个即可。

    find /etc -size +20k -a -size -50k -exec ls -lh {} ;

    含义:搜索etc目录下大小小于50k且大于20k的文件,并且把他们的详细信息展示出来。

    注:在这里”-exec {} ;”是一个固定的写法,它的中间用来添加第二条命令。比如上面,在中间添加

    了命令“ls -lh”,表明对前面得到的结果执行此命令。因此这个第二条命令必须是能够对前面的结果

    进行操作的命令。

    ===========================================================================================================================

    通配符

    各个通配符的含义如下:

     

    * 匹配任意内容

    ?匹配任意一个字符

    [] 匹配中括号内的任意一个字符

    举例如下:

    find /root -name “install.log*”

    含义:在root目录下按名称搜索任意以”installlog”开头的文件。

    find /root -name “ab[cd]”

    含义:在root目录下按名称搜索文件名为“abc”或者为”abd”的文件,即中括号中任意一个字符匹配皆可以。

    ===========================================================================================================================

    grep命令

    grep [选项] 字符串文件名

    含义:在文件中搜索包含指定字符串的内容。

    选项:

    -i 忽略大小写

    -v 排除指定字符串

    例如: grep “size” install.log

    意思就是在文件install.log中搜索包含”size”字符串的的内容。

    ===========================================================================================================================

  • 相关阅读:
    [Swift]LeetCode32. 最长有效括号 | Longest Valid Parentheses
    [Swift]LeetCode31. 下一个排列 | Next Permutation
    [Swift]LeetCode30. 与所有单词相关联的字串 | Substring with Concatenation of All Words
    [Swift]LeetCode29. 两数相除 | Divide Two Integers
    时光轴的设计理念
    ITFriend开发日志20140611
    ITFriend开发日志20140611
    高中生活--第7篇–我为什么不交作业
    高中生活--第7篇–我为什么不交作业
    ITFriend网站内测公测感悟
  • 原文地址:https://www.cnblogs.com/fuly550871915/p/4954857.html
Copyright © 2011-2022 走看看