Linux使用技巧】搜索文件相关命令总结

【Linux使用技巧】搜索文件相关命令总结

在Windows系统下可以使用文件管理器或者系统自带的搜索功能来搜索文件,也可以使用搜索软件Everything 进行查找。但是在Linux系统中,没有相关GUI软件,只能通过一些查找命令进行查找。

一般查找:find

关于find指令的详细用法可以参考Linux Find 命令精通指南 以及 Linux find 命令 。本文只总结其常用方法。一般使用方法:

find PATH -name FILENAME

上述命令的意义为:在PATH路径下查找名为FILENAME的文件,其中PATH如果省略,则默认从当前目录开始搜索。

PATH:要查找的目录路径。

  • ~ 表示$HOME目录
  • . 表示当前目录
  • ​ / 表示根目录

除了-name,常用的查找方式有:

-perm #按执行权限来查找
-user username #按文件属主来查找
-group groupname #按组来查找
-mtime -n +n #按文件更改时间来查找文件,-n指n天以内,+n指n天以前
-atime -n +n #按文件访问时间来查找文件,-n指n天以内,+n指n天以前
-ctime -n +n #按文件创建时间来查找文件,-n指n天以内,+n指n天以前
-nogroup #查无有效属组的文件,即文件的属组在/etc/groups中不存在
-nouser #查无有效属主的文件,即文件的属主在/etc/passwd中不存
-type b/d/c/p/l/f #查是块设备、目录、字符设备、管道、符号链接、普通文件
-size n[c] #查长度为n块[或n字节]的文件
-mount #查文件时不跨越文件系统mount点
-follow #如果遇到符号链接文件,就跟踪链接所指的文件
-prune #忽略某个目录

在当前目录下查找data.txt文件,find命令会自动迭代搜索子目录:

find . -name data.txt

此外还可以使用星号*进行模糊匹配:

查找当前目录下所有的txt文档,注意使用单引号将带有星号的文件名包含,或者使用反斜杠转义符\:

find . -name '*.txt'

find . -name \*.txt

不然会报错paths must precede expression

image-20220110213003794

报错是因为星号被展开为当前目录下所有的文件,将*号打印,可以发现:

image-20220110213138058

查找以test开头的文件:

image-20220110213531753

同样需要将星号转义:

find . -name 'test*'

在当前目录及子目录中,查找大写字母开头的txt文件 :

find . -name '[A-Z]*.txt' -print

此外,如果需要忽略文件名的大小写,可以将-name改成-iname。

数据库查找-locate

与find不同, locate命令依赖于一个数据库文件, Linux系统默认每天会检索一下系统中的所有文件, 然后将检索到的文件记录到数据库中。 在运行locate命令的时候可直接到数据库中查找记录并打印到屏幕上, 所以使用locate命令要比find命令反馈更为迅速。 在执行这个命令之前一般需要执行updatedb命令(这不是必须的, 因为系统每天会自动检索并更新数据库信息, 但是有时候会因为文件发生了变化而系统还没有再次更新而无法找到实际上确实存在的文件。 所以有时需要主动运行该命令, 以创建最新的文件列表数据库) , 以及时更新数据库记录。【引用自 Linux系统命令及Shell脚本实践指南—王军】

image-20220110221511829

创建一个文件
[root@localhost ~]# touch test_locate
#用find命令查找
[root@localhost ~]# find / -name test_locate
/root/test_locate #
找到了
#再用locate找一下
[root@localhost ~]# locate test_locate
[root@localhost ~]# #
没找到! 为什么?
#执行一下updatedb, 更新数据库
[root@localhost ~]# updatedb
[root@localhost ~]# locate test_locate
/root/test_locate #
找到了! 说明由于没有更新数据库, 所以无法使用locate命令找到刚创建的文件
#将该文件删除
[root@localhost ~]# rm test_locate
rm: remove regular empty file 'test_locate'? y #
确认删除了
#再次locate, 但仍然可以找到
[root@localhost ~]# locate test_locate
/root/test_locate
#用updatedb再次更新一下
[root@localhost ~]# updatedb
[root@localhost ~]# locate test_locate
[root@localhost ~]# #
再找, 没有这个文件了

这个实验表明, locate命令依赖于其用于记录文件的数据库, 该数据库需要使用updatedb来更新。
当然, 系统每天也会自动运行一次, 但是不必等系统运行, 必要的时候可主动进行手动更新。

这个实验表明, locate命令依赖于其用于记录文件的数据库, 该数据库需要使用updatedb来更新。
当然, 系统每天也会自动运行一次, 但是不必等系统运行, 必要的时候可主动进行手动更新。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SOC罗三炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值