locate

locate特性是非实时性,根据自己的数据库查找文件,CentOS通过任务计划每天更新一次数据库,安装完locate后生成/var/lib/mlocate目录来存放数据库,mlocate.db是数据库。另外一个特性是模糊匹配,默认情况它会匹配目录名,查询结果包含了关键字就都显示出来。
语法:locate [option] file_name

updatedb  #遍历整个根文件系统来更新locate数据库,运行时占用资源多。
yum -y install mlocate #安装locate工具

选项:

-b #只匹配基名
#例如这样一段路径/root/anaconda-ks.cfg,anaconda-ks.cfg是基名,/var/www/是目录名
-c #显示匹配到的条数(count)

find

find实时遍历目录下所有文件和目录,不像locate有索引库,因此速度会稍微慢一些,其次与locate另一个区别是精确匹配,有就是有没有就是没有。
语法:find [path] [options] [action]
选项和动作

#匹配模式(可以用通配符)
-name #精确匹配
-iname #不区分大小写
    https://www.raingray.com/archives/31.html中搜命令行通配(globbing)

#根据属主属组查找
-user user_name
-group gourp_name
-uid id_number
-gid id_number
-nouser #没有属主的文件,呈现的样子是直接显示uid
-nogourp #没有属主的文件,呈现的样子是直接显示uid

#根据文件类型查找
-type
  f 普通文件
  d 目录文件
  l link文件
  b block设备文件
  c 字符设备文件
  p 管道文件
  s 套接字文件(soket)

#按照大小查找
-size [+|-] k(小写) M G 

#根据时间戳查找
-atime [+|-] #按天查
  5 #从当前时间计算往前推五天
 +5 #距离当前时间五天外
 -5 #从当前时间计算五天内
-mtime
-ctime
-amin #按分钟查
-mmin
-cmin

#根据权限查找
-perm
   644 #只匹配644权限
  /644 #只要9位权限中包含1位就可以,644里6是rw,只要有r或者w其中一位就能匹配到。
  -644 #只要你包含644权限就匹配,777也包含644权限,655也包含这个权限。

#组合条件,几个选项之间做逻辑运算。
-a #默认值
-o
-not,!

#action
-print #默认输出到标准输出设备
-ls #等同于ls -l
-ok command {} \; #询问要不要执行操作,
#要以\结尾,{}代表你前面找到文件的文件名,也就是文件占位符。
-exec command {} \; #不询问直接执行操作。

举例

find /tmp ! -name "*fstab*" 
#文件名不包含fstab

find /tmp ! -user root ! -name "*fstab*" 
#不是用户root而且文件名不包含fstab

find /tmp -nouser -nogroup -type f -ls
#查找没有属组属主的普通文件

find ./ -notuser -notgroup -ok chown root.root {} \;
#将所有没有属主属组的文件将它赋与root用户


#权限查找
find /etc -perm /644 -type f -name '[[:digit:]]' -ls
#644这9位权限中(user,group.other),只要有一位匹配就显示。
#换算为二进制是:110,100,100。只要筛选的文件满足其中一位权限就显示
#比如查找700,600也会显示因为匹配到第一和第二位(110)。

find /etc -perm -700 -ls
#查找包含744权限的文件,755也是包含744的。
#也就是说你可以大于这个权限范围,但不能小于,比如700就不显示。

find ./ -perm -006
#找其他用户有读写权限的文件

标签: none

添加新评论