搜索 2.0 linux 搜索普通文件

本文对比了Linux系统中的locate和find命令,介绍它们的功能、使用方法,如按文件名、大小、时间、权限、属主等搜索,以及逻辑运算和输出应用。locate注重快速搜索数据库,find则在硬盘上实时查找,各有优劣。
摘要由CSDN通过智能技术生成

搜索普通文件

locate

  • 命令名称:locate。
  • 英文原意:find files by name。
  • 所在路径:/usr/bin/locate。
  • 执行权限:所有用户。
  • 功能描述:按照文件名搜索文件。

命令格式

locate [选项] 文件名
# 选项:-i:    忽略大小写

locate命令的优点也非常明显,那就是搜索速度非常快,而且耗费系统资源非常小。这是因为locate命令不会直接搜索硬盘空间,而会先建立locate数据库,然后在数据库中按照文件名进行搜索,是快速的搜索命令

# 查看 test 目录是空的
[root@VM-0-7-centos test]# ll
total 0
# 创建一个文件
[root@VM-0-7-centos test]# touch myfile.txt
[root@VM-0-7-centos test]# ll
total 0
-rw-r--r-- 1 root root 0 Aug 19 21:16 myfile.txt
# locate 并没有找到
[root@VM-0-7-centos test]# locate myfile.txt 

这是因为locate命令不会直接搜索硬盘空间,而会搜索locate数据库。这样做的好处是耗费系统资源小、搜索速度快;缺点是数据库不是实时更新的,而要等用户退出登录或重启系统时,locate数据库才会更新,所以我们无法查找到新建立的文件。

使用 updatedb 命令 更新 locate 数据库

[root@VM-0-7-centos ~]# locate myfile.txt
[root@VM-0-7-centos ~]# updatedb
[root@VM-0-7-centos ~]# locate myfile.txt
/root/test/myfile.txt

find

find 是 linux 中一个强大的搜索命令。

  • 命令名称:find。
  • 英文原意:search for files in adirectory hierarchy。
  • 所在路径:/bin/find。
  • 执行权限:所有用户。
  • 功能描述:在目录中搜索文件。

和 locate 正好不同,find 是在硬盘中进行搜索的,不要指定太大范围,否则会很消耗系统资源的。

命令格式:

find 搜索路径 [选项] 搜索内容

1. 根据文件名搜索文件

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
    -name:     按照文件名搜索
    -iname:    按照文件名搜索,不区分文件名大小写
    -inum:     按照inode号搜索
[root@VM-0-7-centos ~]# find ./ -name myfile.txt
./test/myfile.txt

搜索的文件名必须和搜索内容一致才行,如果只包含搜索内容,则不会找到。

[root@VM-0-7-centos ~]# find ./ -name myfile.txt
./test/myfile.txt
[root@VM-0-7-centos ~]# find ./ -name myfile
[root@VM-0-7-centos ~]# 

2. 按照文件大小搜索

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
    -size [+-]大小:     按照指定大小搜索文件
[root@localhost ~]# find . -size 25k
./install.log
#在当前目录下,查找大小刚好是25KB的文件,可以找到
[root@localhost ~]# find . -size -25k
.
./.bashrc
./.viminfo
./.tcshrc
./.pearrc
./anaconda-ks.cfg
./test2
./.ssh
./.bash_history
./.lesshst
./.bash_profile
./yum.conf.bak
./.bash_logout
./install.log.syslog
./.cshrc
./cangls
#搜索小于25KB的文件,可以找到很多文件
[root@localhost ~]# find . -size +25k
#而当前目录下没有大于25KB的文件

3. 按照时间搜索

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
    -atime [+-]时间:    按照文件访问时间搜索
    -mtime [+-]时间:    按照文件数据修改时间搜索
    -ctime [+-]时间:    按照文件状态修改时间搜索
  • -5:代表5天内修改的文件。
  • 5:代表前5~6天那一天修改的文件。
  • +5:代表6天前修改的文件。
    在这里插入图片描述

4. 按照权限来搜索

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
    -perm 权限模式: 查找文件权限刚好等于“权限模式”的文件
    -perm -权限模式:查找文件权限全部包含“权限模式”的文件
    -perm +权限模式:查找文件权限包含“权限模式”的任意一个权限的文件

5. 按照所属者和所属组来搜索

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
    -uid 用户ID:        按照用户ID查找所有者是指定ID的文件
    -gid 组ID:         按照用户组ID查找所属组是指定ID的文件
    -user 用户名:       按照用户名查找所有者是指定用户的文件
    -group 组名:        按照组名查找所属组是指定用户组的文件
    -nouser:           查找没有所有者的文件

6. 按照文件类型

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
    -type d:       查找目录
    -type f:       查找普通文件
    -type l:       查找软链接文件

7. 使用逻辑运算符

[root@localhost ~]# find 搜索路径 [选项] 搜索内容
选项:
    -a:    and逻辑与
    -o:    or逻辑或
    -not:  not逻辑非
[root@localhost ~]# find . -size +2k -a -type f
#在当前目录下搜索大于2KB,并且文件类型是普通文件的文件

8. 将 find 输出作为另一个命令输入

1)-exec选项

[root@localhost ~]# find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;

首先,这里的“{}”和“; ”是标准格式,只要执行“-exec”选项,这两个符号必须完整输入。
其次,这个选项的作用其实是把 find 命令的结果交给由“-exec”调用的命令2来处理。“{}”就代表find命令的查找结果。

[root@localhost test]# find . -perm 444 -exec ls -l {} \;
-r--r--r-- 1 root root 0 6月  17 11:05 ./test2
#使用“-exec”选项,把find命令的结果直接交给“ls -l”命令处理

2)-ok选项
“-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。例如:

 [root@localhost test]# find . -perm 444 -ok rm -rf {} \;
    <rm ... ./test2 > ? y                  <- 需要用户输入y,才会执行
    #我们这次使用rm命令来删除find找到的结果,删除的动作最好确认一下

总的来说,文件拥有的属性都可以有对应的选项来进行搜索。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值