文件搜索locate
centos7 默认没有安装locate命令,需要手动安装yum -y install mlocate
locate 命令的格式非常简单:locate 文件名
它的特点是搜索速度非常快,并且只能搜索文件名,它在维护一个本地的数据库。
存储在/var/lib/mlocate文件中,更新数据库使用updatedb命令来更新
本地数据库自动更新的策略是每天更新一次,所以当天新建的文件无法被搜索到的。需要手动更新数据库
locate搜索范围配置文件为/etc/updatedb.conf
# 代表本配置文件的刷选规则生效
PRUNE_BIND_MOUNTS = "yes"
# 不刷选下面这些文件系统(linux为ext2,ext3,ext4)
PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fuse.sshfs fusectl gfs gfs2 gpfs hugetlbfs inotifyfs iso9660 jffs2 lustre mqueue ncpfs nfs nfs4 nfsd pipefs proc ramfs rootfs rpc_pipefs securityfs selinuxfs sfs sockfs sysfs tmpfs ubifs udf usbfs fuse.glusterfs ceph fuse.ceph"
# 不搜索包含下面关键字的文件
PRUNENAMES = ".git .hg .svn"
# 不搜索下面这些目录中更新的文件
PRUNEPATHS = "/afs /media /mnt /net /sfs /tmp /udev /var/cache/ccache /var/lib/yum/yumdb /var/spool/cups /var/spool/squid /var/tmp /var/lib/ceph"
命令的搜索命令
whereis
查询系统命令所在的文件夹目录,同时还可以看到帮助文档的位置
$ whereis ls
> /bin/ls
which
查询系统所在命令,同时会显示系统的别名
$ which ls
> ls: aliased to ls -G
PATH
shell变量, 执行命令的时候会去这个环境变量下寻找变量
➜ aliFE echo $PATH
> /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS:/Library/apache-maven-3.5.3/bin:/usr/local/mysql/bin
find
相比之前的locate,whereis,which,find命令非常强大。但是带来的结果是使用起来比较复杂,因为是做全文搜索,所以搜索的速度比较慢,而且耗费资源,如果是线上的环境,可能造成线上服务宕机。
使用方式为: find [搜索范围] [搜索条件]
-name 搜索某个文件
find / -name proxy.sh
这段话的含义是搜索根路径/下的名称为proxy.sh的文件。
模糊匹配
如果我们想要进行模糊搜索,需要使用通配符
linux中的通配符
* 匹配任意字符
? 匹配一个字符
[] 匹配任意一个中括号内的字符
通配符需要使用引号括起来
# 需要使用引号括起来
[root@iZbp1ge7stkcnj5044oa81Z ~]# find ./ -name proxy*
> find: paths must precede expression: proxy.sh2
[root@iZbp1ge7stkcnj5044oa81Z ~]# find ./ -name 'proxy*'
./proxy.sh
./proxy.sh2
中括号[]
中括号和正则中的[]意义相似。比如[a-z]表示任意小写的英文字符
[root@iZbp1ge7stkcnj5044oa81Z ~]# find ./ -name '[a-z].sh'
./a.sh
./b.sh
按照时间搜索
find /root -iname proxy.sh
mtime 修改文件的内容
查找10天前修改的文件,一般可以用在日志文件的查找。
find /root-mtime +10
-10 代表10天内修改的文件
10 代表第10天前当天修改的文件
+10 代表10天之前修改的文件
ctime 修改文件的属性
atime 文件的访问时间更改
按照文件大小搜索
find ./ size 25k
-25k 小于25k
+25k 大于25k
+25M 大于25M
-25M 小于25M
逻辑命令
-a and 逻辑与, 两个条件都满足
-o or 逻辑或, 两个条件满足一个即可
# 找出 当前文件 大于5k小于25k的文件
find ./ -size +5k -a -size -25k
-exec
find命令一般查找出来不仅仅是看看而已,还需要进一步操作,这时候exec作用就显示出来了
-exec参数后面跟的是command命令,它的意义是以;为结束标志的。考虑到;在不同系统有不同意义,所以前面加上\
# 代表前面查找出的文件, 使用后面的命令进行处理
find ./ -size +5k -a -size -25k -exec ls -lh {} \;
其他
-i 搜索不区分大小写
grep
搜索字符串的命令。格式为grep[选项] 字符串 文件名
i 忽略大小写
v忽略指定字符串
[root@iZbp1ge7stkcnj5044oa81Z ~]# grep "echo" proxy.sh
echo 'hello dankun'
echo "===== restart squid ====="
grep和find区别
find是在系统搜索符合条件的文件名,默认是全文匹配,如果需要模糊匹配需要使用通配符,通配符是完全匹配。
grep是在文件在搜索符合条件的字符串,默认是模糊匹配,如果需要更多的包含匹配,需要使用正则表达式进行匹配。
什么情况下使用通配符,什么时候使用正则表达式
搜索文件名,需要完全匹配,使用通配符
搜索文件中内容是包含匹配,使用正则表达式来进行匹配