Linux文件搜索命令

locate命令格式

1.搜索文件命令:locate [文件名]

特点:在后台数据库中按文件名搜索,搜索速度更快,消耗系统资源更少。

2.locate命令所搜索的后台数据库路径:/var/lib/mlocate

注意:默认更新频率为一天一次。在不同linux中,该数据库名字稍微不同,例如,locatedb、slocate、mlocate。可使用命令:locate locate搜索locate相关文件,可看到locate数据库名称。

3.更新数据库,命令:updatedb

注意:对于新建的文件,由于数据库没有更新,使用locate命令不能查到。可以使用updatedb强制更新数据库后即可查到。

4.配置文件:/etc/updatedb.conf

文件内容: PRUNE_BIND_MOUNTS = "yes" (开启搜索限制,yes为后面三项都生效。no为 后面三项都不生效)

PRUNEFS = (搜索时,不搜索的文件系统)

PRUNENAMES = (搜索时,不搜索的文件类型)

PRUNEPATHS = (搜索时,不搜索的路径)

例如:touch /root/cangls;touch /tmp/cangls;updatedb;locate cangls。

显示为 /root/cangls只有一条,而/tmp下的cangls没有显示出来,原因在于locate搜索遵循配置文件 /etc/updatedb.conf, 在PRUNEPATHS中配置了/tmp/目录不进行搜索。所以没有进行查找

  • locate优点:效率高,耗费资源少

  • locate缺点是:只能按照文件名来搜索

查看updatedb命令的配置文件 vi /etc/updatedb.conf

命令搜索命令whereis与which

1.命令:whereis [命令名](搜索系统命令所在路径以及帮助文档所在位置)

选项:

  • -b:只查找可执行文件

  • -m:只查找帮助文件

例:搜索ls命令,命令:whereis ls。如果输入“whereis -b ls”,只会显示红字。如果输入“whereis -m ls”,则只会显示黄字。

ls: /bin/ls /usr/share/man/man1p/ls.1p.gz /usr/share/man/man1/ls.1.gz

2.命令:which [命令名](搜索系统命令所在路径和查看到命令的别名)

注意:whereis和which不能搜索shell(当前系统界面叫做shell)的默认命令(如:cd),只能搜索外部安装的命令。

3.环境变量$PATH
定义系统搜索命令的路径。whereis和which搜索命令的路径是依赖PATH所定义的路径。Linux执行命令的时候都要在path定义的目录中去寻找。

系统命令不需要打绝对路径,如:ls这样的命令就可以不用加路径(/bin/ls)执行。如果是自己写的脚本或者自己写的程序,就需要打绝对路径,或者在$PATH中设置。

命令:echo $PATH
/usr/lib/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

find命令

避免大范围的搜索,会非常浪费系统资源,建议不在直接在“/”目录下搜索
1.格式:find 【搜索范围】【搜索条件】
例:find /home -name 文件名;
注意:find搜索默认是完全匹配。

如果需要进行模糊查询,需要添加通配符,通配符有以下3种

  • ”匹配任意字符,例:find /home -name “test”,显示所有名字带test的文件;或例:find /home -name “”,home目录下的所有文件,包括隐藏文件。
  • “?”匹配任意一个字符,
  • “【】”匹配任意一个中括号内的字符,例:find /home -name “test【12】”,显示test1和test2文件;或find /home -name “【12】”,显示以1和2开头的文件。
    组合使用:例:find /home -name “
    【12】”,显示所有1和2结尾的文件

2.find 按文件时间来搜索

find /home -mtime +10 在home目录下,查找10天前修改的文件
find /home -mtime 10 在home目录下,查找10天前当天修改的文件
find /home -mtime -10 在home目录下,查找10天内修改的文件
atime 文件访问时间
ctime 改变文件属性
mtime 修改文件内容

3.find搜索

  • find /root -iname install.log #不区分大小写

  • find /root -user root #按照所有者搜索

  • find /root -nouser #查找没有所有者的文件 (常用)

    内核产生的文件有可能没有所有者,如在直接写入内存的目录中的文件/proc、/sys;外来文件也有可能没有所有者,如光盘、U盘插入Linux当中,因为内容是在Windos中建立的,Windos是忽略所有者这个概念的。所以其他文件在Linux中都有所有者,若没有则为垃圾文件应手动删除。

  • find /var/log/ -mtime +10 #查找10天前修改的文件

    -10 10天内修改文件、10 10天当天修改的文件、+10 10天前修改的文件

    atime 文件访问时间、ctime 改变文件属性的时间、mtime 修改文件内容的时间

4.find 目录 -size 文件大小
注意:文件大小用小写k和大写M。

  • find . -size 25k #查找文件大小是25KB的文件
    -25k 小于25KB的文件、25k 等于25KB的文件、+25k 大于25KB的文件
  • find . -inum 262422 #查找i节点是262422的文件

知道文件名查i节点用ls -i,知道i节点查文件名用find . -inum (i节点)

  • find /etc -size +20k -a -size -50k #查找/etc/目录下,大于20KB并且小于50KB的文件

-a and 逻辑与,两个条件都满足

-o or 逻辑或,两个条件满足一个即可

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

查找/etc/目录下,大于20KB并且小于50KB的文件,并显示详细信息

  • -exec/ -ok 命令 {} \;对搜索结果进行操作

能处理第一个搜索出来的结果的命令,才能放在“命令”处

字符串搜索命令grep

1.命令:grep [选项] 字符串 文件名(在文件当中匹配符合条件的字符串)

选项:

  • -i:忽略大小写

  • -v:排除制定字符串

例:grep "size" anaconda-ks.cfg,即搜索anaconda-ks.cfg文件中包含“size”的内容。

2.find命令与grep命令的区别

find:在系统中搜索符合条件的文件名,使用 通配符(完全)匹配。

grep:在文件当中搜索符合条件的字符串,使用 正则表达式 (包含)匹配。

posted @ 2021-05-24 11:31  fynnn  阅读(653)  评论(0编辑  收藏  举报