Linux会将系统内的所有文件都记录在一个数据库文件中.
whereis和locate是利用数据库查找, 所以相当快; find查询实际硬盘, 速度慢.
whereis
寻找特定文件
#whereis [-bmsu] 文件或目录名
-b search only for binaries
-m search only for manual sections(只找说明文件manual路径下的文件)
-s search only for sources(源文件)
-u search for unusual entries(查找不在上述三个选项当中的其他特殊文件)
locate
#locate [-ir] keyword
-i --ignore-case, 忽略大小写的差异
-r --regexp, 后面可接正则表达式
#限制:
# 根据已创建的数据库/var/lib/mlocate/里面的数据去查找, 数据库创建默认每天执行一次
#手动更新数据库
updatedb
#此命令会读取/etc/updatedb.conf这个配置文件的设置, 查找系统硬盘内的文件名, 并更新/var/lib/mlocate/
#内的数据库文件
find
#find [PATH] [option] [action]
1. 与时间有关的参数: atime, ctime, mtime (以mtime为例, n为数字)
mtime n 在n天之前的"一天之内"被改动过的文件, [n, n+1]
mtime +n 在n天之前(不含n天本身)被改动过的文件名, [n+1, +∞)
mtime -n 在n天之内(含n天本身)被改动过的文件名, [0, n]
-newer file 列出比file还新的文件
#实例1: 找到系统上24小时内更新过的文件
find / mtime 0
#实例二: 找到系统上比/etc/passwd更新的文件
find / -newer /etc/passwd
2. 与用户或用户组名有关的参数:
-uid n 找到与UID为n的用户有关的文件
-gid n 找到与GID为n的用户组有关的文件
-user "name" 找到与用户名为name的用户有关的文件
-group "name" 找到与用户组名为name的用户组有关的文件
-nouser 寻找文件的所有者不在/etc/passwd的文件
#删除系统账号后, 可能会有无主的文件存在
-nogroup 寻找文件的所有组不在/etc/group中的文件
#当你自行安装软件时, 很可能该软件的属性中没有文件的所有者
#实例1: 找到/home下属于alex的文件
find /home -user alex
#实例2: 查找系统中不属于任何人的文件
find / -nouser
3. 与文件权限及名称有关的参数
-name "filename" 查找文件名为filename的文件, 可利用通配符
-type TYPE 查找文件类型为TYPE的文件
-perm mode 查找文件权限"等于mode"的文件
-perm -mode 查找文件权限"必须要包括全部mode"的文件
-perm /mode 查找文件权限"包含任一mode"的文件
#例如, find /home/alex -perm +0310 表示查找/home/alex下
# 0100, 0110, 0200, 0210, 0300, 0310的文件
#实例: 查找/bin和/sbin下具有SUID或SGID或SBIT的文件
find /bin /sbin -perm +7000 #注: 可以同时查找多个目录
4. 其他操作:
-exec command command为其他命令, -exec后面可再接其他命令来处理查找到的结果
#实例1: 将/home中权限为0700的所有文件列出来
find /home -perm 0700 -exec ls -l {} \; #此处不支持命令别名!!!
#1.1 {}代表由find找到的内容, find找到的结果会被放置到{}中
#1.2 -exec一直到"\;"是关键字, 代表find额外命令的开始(-exec)到结束(\;), 在这中间
# 的就是
# find的额外命令, 即ls -l {}
#1.3 因";"在bash中是有特殊意义的, 故用反斜杠转义
-size [{+|-| }ckMG]
+ 大于; - 小于; 无加减号 等于
c bytes; k kilobytes; M Megabytes; G Gigabytes
-print 将结果打印到屏幕上, 此为默认操作
本文基于<鸟哥的Linux私房菜>, 归纳整理, 在此致谢鸟哥.










网友评论