文章目录
搜索普通文件
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找到的结果,删除的动作最好确认一下
总的来说,文件拥有的属性都可以有对应的选项来进行搜索。