慕课网linux达人养成计划I 笔记整理(三)文件搜索
一、文件搜索命令locate
locate 搜索比 find快 原来它是搜索数据库 缺点是只能搜索文件名
locate 文件名 在后台数据库中按文件名搜索,搜索速度更快 /var/lib/mlocate locate命令所搜索的后台数据库就是这个 updatedb 更新数据库 (ps:不使用更新的话不会立即生效增加的文件等,会在关机时才更新数据库,虚拟机基本都是挂起,还是等等下来用)
[root@localhost ~]# locate hello.sh [root@localhost ~]# updatedb [root@localhost ~]# locate hello.sh /root/hello.sh
/etc/updatedb.conf配置文件 PRUNE_BIND_MOUNTS="yes" #开启搜索限制 PRUNEFS = #搜索时不搜索的文件系统 PRUNENAMES = #搜索时不搜索的文件类型 PRUNEPATHS = #搜索时不搜索的路径
我虚拟机里这个文件的默认配置
[root@localhost ~]# cat /etc/updatedb.conf PRUNE_BIND_MOUNTS = "yes" PRUNEFS = "9p afs anon_inodefs auto autofs bdev binfmt_misc cgroup cifs coda configfs cpuset debugfs devpts ecryptfs exofs fuse fusectl gfs gfs2 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" PRUNENAMES = ".git .hg .svn" PRUNEPATHS = "/afs /media /net /sfs /tmp /udev /var/cache/ccache /var/spool/cups /var/spool/squid /var/tmp"
注意:在不搜索的路径中,即使是更新了数据库,依然是没有的
这个配置文件 locate 和 whereis which都遵循这个规则
二、 whereis搜索命令
whereis 命令名 #搜索命令所在路径及帮助文档所在的位置 选项: -b 只查找可执行文件 -m 只查找帮助文件
[root@localhost ~]# whereis -m ls ls: /usr/share/man/man1/ls.1.gz /usr/share/man/man1p/ls.1p.gz [root@localhost ~]# whereis -b ls ls: /bin/ls
三、which查找命令
which可以看到别名 有些没有别名就不显示 whereis可以看到帮助文档所在的目录
但是cd 命令是看不到命令在的路径的 cd 是shell的自带的命令,显示了帮助文档路径
[root@localhost ~]# whereis cd cd: /usr/share/man/man1/cd.1.gz /usr/share/man/man1p/cd.1p.gz
四、PATH环境变量
定义的是系统搜索命令的路径
[root@localhost ~]# echo $PATH /usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
所以系统命令可以不打路径
如果在里面找不到,就会报错command not found
五、find命令
find [搜索范围] [搜索条件] #搜索文件 find / -name install.log #避免大范围搜索,会非常耗费系统资源 #find 是在系统当中搜索符合条件的文件名,如果需要匹配,使用通配符匹配,通配符是完全匹配 linux中的通配符 * 匹配任意内容 ? 匹配任意一个字符 [] 匹配任意一个中括号内的字符 [root@localhost /]# find ~ -name "install.log*" /root/install.log /root/install.log.syslog
不加通配符就是绝对匹配
find /root -iname install.log #不区分大小写 find /root -user root #按照所有者搜索 find /root -nouser #查找没有所有者的文件
内核产生的数据和外来的文件可能是没有所有者的,所以不能动。一般的没有所有者的基本都是垃圾文件,应该清除掉
按照时间大小查找
find /var/log/ -mtime +10 #查找10天前修改的文件 -10 10天内修改文件 10 10天当天修改的文件 +10 10天前修改的文件 atime 文件访问时间 ctime 改变文件属性时间 mtime 修改文件内容时间
按照大小查找
find ~ -size 27k #查找文件大小是27kb的文件 [root@localhost ~]# find ~ -size 27k /root/install.log -25k 小于25K的文件 25k 等于25k的文件 +25k 大于25k的文件
查找i节点
find . -inum 262422 #查找i节点为262422的文件 [root@localhost ~]# find . -inum 655876 ./anaconda-ks.cfg
find /etc -size +20k -a -size -50k #查找/etc/目录下,大于20k并且小于50k的文件 -a and 逻辑与,两个条件都满足 -o or 逻辑或,两个条件满足一个即可 find /etc -size +20k -a -size -50k -exec ls -lh {} \; #查找/etc/目录下,大于20k并且小于50k的文件,并显示详细信息 #-exec/-ok 命令 {} \; 对搜索结果执行操作 [root@localhost ~]# find /etc -size +20k -a -size -50k -exec ls -lh {} \; -rw-r--r--. 1 root root 44K 11月 24 2013 /etc/lvm/lvm.conf -rw-r--r--. 1 root root 41K 8月 26 04:15 /etc/ld.so.cache
{} \ 这里之间有个空格
可以放在后面命令 只能是根据前面搜索出来的结果执行的命令才可以
六、grep命令 搜索字符串命令
grep [选项] 字符串 文件名 #在文件中匹配符合条件的字符串 选项: -i 忽略大小写 -v 排除指定字符串
find 和 grep的区别