Linux搜索命令

文件搜索命令locate

优点:搜索速度快,耗费资源少;
缺点:只能按照文件名搜索

1
2
$ locate 文件名
# 在后台数据库按文件名搜索
1
2
/var/lib/mlocate
# locate 命令所搜索的后台数据库
1
2
3
$ updatedb
# 更新数据库,如果没有执行此命令,新创建的文件可能不会搜索到
# 一般是24h更新一次
1
2
3
4
5
6
7
/etc/updatedb.conf
以下为被locate命令禁止搜索的 文件类、文件路径和文件系统
# PRUNE_BIND_MOUNTS="yes"
# PRUNENAMES=".git .bzr .hg .svn"
# PRUNEPATHS="/tmp /var/spool /media /home/.ecryptfs /var/lib/schroot"
# PRUNEFS="NFS nfs nfs4 rpc_pipefs afs binfmt_misc proc smbfs autofs iso9660 n cpfs coda devpts ftpfs devfs mfs shfs sysfs cifs lustre tmpfs usbfs udf fuse .glusterfs fuse.sshfs curlftpfs ecryptfs fusesmb devtmpfs"

命令搜索命令whereis和which

1
2
3
4
$ whereis 命令名
# 搜索命令所在路径及帮助文档所在位置选项
# -b 只查找可执行文件
# -m 只查找帮助文件
1
2
$ which 命令名
# 查看命令的位置 如果命令有别名也会显示

Shell或者系统自带的命令如pwd和cd是不能通过以上两个命令查看

1
2
3
4
# PATH环境变量:定义的是系统搜索命令的路径
$ echo $PATH
# /home/ackerman/bin:/home/ackerman/.local/bin:/usr/java/jdk1.8.0_144/bin:/usr/java/apache-maven-3.3.3/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

文件搜索命令find

1
2
3
$ find [搜索范围] [搜索条件]
# 搜索文件
# 应该避免大范围的搜索文件,耗费系统资源严重
1
2
3
4
5
$ find / -name aaaa.txt
# -iname 不区分大小写
# 文件名搜索是完全匹配
# 常用通配符 ? [] * 文件名最好加双引号,否则可能失效
# $ find / -name "aa[abc]aa.txt"
1
2
3
4
5
6
7
$ find / -user root
# 按照文件所有者搜索
$ find / -nouser root
# 常用命令,搜索非系统所有者产生的文件
# 比如根目录下的 目录proc 和 sys,内核可能在这两个目录产生交互
# 或者是没有所有者的外来数据,U盘啊,光盘啊
1
2
3
4
5
6
7
8
$ find /var/log/ -mtime +10
# atime 文件访问的时间
# ctime 改变文件属性的时间
# mtime 改变文件内容的时间
# +10 10天前修改的文件
# -10 10天内修改的文件
# 10 刚好10天那个24小时内的修改的文件
1
2
3
4
5
$ find /etc -size +20k -a -size -5M -exec ls -lh {} \;
# 查找/etc/目录下,大于20k且小于5M的文件
# -a and 逻辑与
# -o or 逻辑或
# -exec xxx {} \; 对搜索结果执行xxx操作

搜索字符串命令grep

1
2
3
4
5
$ grep [选项] 字符串 文件名
# 在文件中匹配符合条件的字符串
# 选项 -i 忽略大小写
# -v 排除指定的字符串
# $ grep -i "catalina" xxx.md

find和grep的区别

  • find命令:在系统目录当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配
  • grep命令:在文件当中搜索条件符合的字符串,如果需要匹配,使用正则表达式匹配,正则表达式是包含匹配