Linux -- 常用搜索命令
搜索命令
- 不管是 Windows 还是 Linux,尽量少用搜索,因为搜索会占用大量的资源,特别是服务器使用高峰时间段
- 搜索的条件越精准越好
- 搜索的范围越小越好
文件搜索命令 find
- 所在路径
/bin/find
- 执行权限:所有用户
- 格式
find [搜索范围] [匹配条件]
- 搜索范围:
- 通常是一个目录
- 匹配条件(常用的):
-name [文件名]
根据文件名搜索- 只有文件名完全相同的文件才会被匹配,不会模糊搜索
- 要想实现模糊搜索,可以使用通配符
*
,*
可以匹配任意字符find /etc -name *init*
搜索文件名包含 init 的文件find /etc -name init*
搜索以init
开头的文件
- 使用
?
可以匹配单个字符find /etc -name init???
匹配文件名为七字符个并且前面四个为 init 的文件
- 严格区分大小写!!
-iname
不区分大小写,其他的和-name
相同-size [+/-文件大小]
根据文件大小筛选- 文件大小单位是一个数据块,即 0.5K(512 字节),使这种方法的时候我们需要换算数据单位
- 1MB = 2048
+ 文件大小
大于指定大小- 查找大于 100MB 的文件
find / -size +204800
- 查找大于 100MB 的文件
- 文件大小
小于指定大小- 当不加 [+/-] 的时候,表示搜索指定大小的文件,一般不用
- 文件大小单位是一个数据块,即 0.5K(512 字节),使这种方法的时候我们需要换算数据单位
-user [用户名]
根据文件所有者搜索文件-cmin [+/- 时间大小]
, change,搜索指定时间范围内被修改文件属性的文件,默认单位为分钟- 文件属性,就是 ls -l 看见的文件属性
+
表示超过指定时间-
表示指定时间长度之内
-amin [+/- 时间大小]
,access,搜索指定时间范围内被访问的文件- 访问时间
-mmin [+/- 时间大小]
,modify,搜索指定时间范围内修改文件内容的文件-a
,“and”, 用来链接条件,表示两个条件同时满足find / -size +204800 -a -size -409600
-o
,“or”, 用来链接条件,表示两个条件满足其中一个-exec/ok 命令内容 {}\;
对搜索结果执行 "命令内容" 中的操作find /etc -user ziawang -exec ls -l {}\;
使用ls -l
查看指定目录下用户名为 ziawang 的文件或目录{}
表示 find 查找的结果\
表示转义符;
分号表示结束-ok
会有一个询问确认的步骤
-type 文件类型
,文件类型有三种- f: 文件
- d: 目录
- l: 软连接文件
-inum
根据文件的 inode 来查询- 应用:如果文件的名称乱码,很难删除这个文件的情况下,使用
inode
删除文件find . -inum 50505 -delete
- 应用:如果文件的名称乱码,很难删除这个文件的情况下,使用
- 搜索范围:
注意
- 对于名称中包含有空格的文件或目录,如果直接用
rm 文件名
,这个命令会认为删除了两个文件,这样显然不行,有两种方式来解决这个问题- 对文件名用双引号包含起来
rm "haha file"
- 使用 i 结点删除(每一个文件都必须有一个结点)
- 找到文件 i 结点
ls -i
find / -inum 结点号 -exec rm {}\;
- 找到文件 i 结点
- 对文件名用双引号包含起来
其他搜索命令
从文件资料库中查找文件 locate
- 类似 Windows 的一个软件 "everything",这个命令建立了一个文件资料库,这个文件资料库会定时更新,查找时也是在文件资料库中查找,搜索速度非常快
- 使用
locate locate
可以找到这个文件资料库 - 这个文件资料库的路径
/var/lib/mlocate/mlocate.db
- 使用
- 对于一个新建立的文件。在没有更新到文件资料库的时候,使用
locate
是找不到的没使用find
可以找到 -
手动更新资料库
updatedb
命令可以更新资料库- 注意,文件资料库有一个收录范围,如果我们的新创建的文件不在该收录的路径下,即使创建完文件使用了 updatedb 命令也找不到该文件,比如 /tmp 就不再文件资料库的收录范围内
- 所在路径:
/usr/bin/locate
-
执行权限:所有用户
-
格式
locate [-i] 文件名
-i
选项不区分大小写
搜索命令所在目录及别名信息 which
- 所在路径:
/usr/bin/which
- 执行权限:所有用户
- 格式
which 命令名
搜索命令所在目录以及命令帮助文档的历经 whereis
使用 find 也可以查看命令所在路径,只是速度慢
- 所在路径:``
- 执行权限:所有用户
- 格式
whereis 命令名称
whereis passwd
- 使用
whereis passwd
命令的时候,会得到四条结果,如下
[root@host ~]# whereis passwd
passwd: /usr/bin/passwd /etc/passwd /usr/share/man/man1/passwd.1.gz /usr/share/man/man5/passwd.5.gz - 这是因为 Linux 系统系有一个名称位
passwd
的命令,又有一个passwd
的配置文件。/usr/share/man/man1/passwd.1.gz
这样以.1.gz
结尾的文件对应的是命令的帮助文件路径/usr/share/man/man5/passwd.5.gz
以.5.gz
结尾的文件对应的则是配置文件对应的帮助文件的路径
- 因此当我们使用
man passwd
的时候,得到的将会是命令的帮助文档信息,如果你想要看passwd
配置文件的帮助信息,可以这样man 5 passwd
文件内搜索命令 grep
- 在文件中搜寻字符串匹配的行并输出
- 所在路径:
/bin/grep
- 执行权限:所有用户
- 格式
grep [-iv] [关键词字符串] [文件]
-i
不区分大小写grep -i mysql /root/install.log
-v
排除指定字符串grep -v ^# /root/inittab
把行首以注释#
开头的行去掉,只看有效的行grep -i -v e manage.py
查看manage.py
中不包含e或E
的行- 可以配合通配符
^