慕课网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可以看到帮助文档所在的目录
which查找命令
但是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的区别
find和grep的区别