文件搜索命令locate
在指定的数据库按文件名字搜索.
优点:
- 搜索速度快(在后台数据库中按文件名搜索)
数据库: /var/lib/mlocate
1 | locate filename |
第一次执行的时候会出现:1
2
3
4
5
6
7WARNING: The locate database (/var/db/locate.database) does not exist.
To create the database, run the following command:
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.locate.plist
Please be aware that the database can take some time to generate; once
the database has been created, this message will no longer appear.
缺点:
- 不能搜所刚创建的文件(数据库默认一天一更新)
- 只能按文件名字搜索
那么我非要立马更新数据库呢?
1 | updatedb |
Mac 上试了
zsh: command not found: updatedb
locate locate 可以搜索到数据库
特点:
有配置文件,可以配置哪些不搜索/etc/updatedb.conf
发现mac 又没有 - -!!
命令搜索命令whereis 和which
whereis
可以看到命令所在路径以及帮助文档所在位置
- whereis 命令名
选项:
- -b 只查找可执行文件
- -m 只查找帮助文件
只能搜索系统自带的命令
还有一些类似的命令:whoamiwhatis
which
可以看到 命令的别名
- which 文件名
搜索命令所在路径及别名
Mac都不一样 - -
PATH环境变量
定义的是系统搜索命令的路径
echo $PATH可以查看环境变量 由:分隔
文件搜索命令find
find
非常强大,然而耗费资源(遍历所有文件)
- find [搜索范围] [搜索条件]
PS:
- 避免大范围搜索,会非常耗费系统资源
- find 实在系统当中搜索符合条件的文件名.如果需要匹配,使用通配符匹配,通配符是完全匹配.
1 | ➜ testlinux ls |
不指定 搜索范围,默认在当前目录
通配符
- 匹配任意内容
- ? 匹配任意一个字符
- [] 匹配任意一个中括号内的字符
选项
条件
- -iname 不区分大小
- -user root 按照所有者搜索
- -nouser 查找没有所有者的文件 (一般就是垃圾文件了)
按时间查找
- -atime 文件访问时间
- -ctime 改变文件属性
- -mtime 修改文件内容
查找10天前修改的文件:
find /var/log/ -mtime +10
-10 10天内修改文件
10 10天当天修改的文件
+10 10天前修改的文件
文件大小,inode
find . -size 25k 查找文件大小是25KB的文件
- -25k 小于25KB
- 25k 等于25KB
- +25k 大于25KB
k M k要小写M大写,不能省略,省略的话为25个扇区(每个扇区512个字节)
find . -inum 262422 查找i节点是262422的文件
逻辑
- -a and 逻辑与
- -o or 逻辑或
查找/etc/目录下,大于20kb并且小于50kb的文件
find /etc -size +20k -a -size -50k
查找/etc/目录下,大于20kb并且小于50kb的文件,并显示详细信息
find /etc -size +20k -a -size -50k -exec ls -lh {} \ 这里有个空格
- -exec/-ok 命令{}\ ; 对搜索结果执行操作
-exec {} \ 是语法,必须这么写,中间可以写其他命令~
1 | ➜ testlinux find b.md -exec ls -lh {} \; |
字符串搜索命令 grep
- grep [选项] 字符串 文件名
在文件当中匹配符合条件的字符串
选项:
- -i 忽略大小写
- -v 排除指定字符串

find 与 grep 的区别
find : 在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配.
常用于搜索文件
grep : 在文件当中搜索符合条件的字符串,如果需要匹配,使用正则表达式进行匹配,正则表达式是包含匹配.
常用于搜索文件内容