一,在linux上有两个比较常用的搜索工具
1,locate :模糊查找,速度快,依赖自身的的数据库,非实时查找,比较少用。
2,find:精确,实时查找,速度稍微慢点。
二,find语法 find [-H] [-L] [-P] [path...] [expression]
其中,'-H' '-L' '-P'三个选项主要是用来处理符号连接,'-H'表示只跟随命令行中指定的符号连接,'-L'表示跟随所有的符号连接,'-P'是默认的选项,表示不跟随符号连接。这三个选项很少用,因此find 的语法简化成 find 路径 表达式, 表达式由查找条件和处理动作组成。默认路径是当前所在的目录
1, 查找条件:
(1)-name filename(可以使用通配符*,使用通配符时用双引号引起来)
查找当前系统上passwd的文件名
find / -name passwd
(2)-iname 忽视查找文件名的大小写
查找当前系统上PASSWD和passwd的文件
find / -iname passwd
(3)-regex "patern" 使用基本正则表达式 给出的正则表达式必须要匹配完整的文件路径
find / -regex "find" 找不到/usr/bin/find
正确用法find / -regex ".*find"或者更精确一点find / -regex ".*/find"
(4)-iregex 忽然大小写
(5)-user username
查找文件的属主是user1的
find / -user user1
(6)-group groupname
查找当前系统属组是nobody的文件
find / -group nobody
(7)-uid usernum
查找文件的属主uid为 500
find / -uid 500
(8)-gid group
(9)-nouser
查找当前系统没有属主的文件
find / -nouser
(10)-nogroup
2,多条件查找,条件间逻辑关系:
(1)-a(与) 同时满足两个条件
查找/etc文件名为passwd且属主为root
find /etc/ -name "passwd" -user root(默认是 -a 可以省略)
(2)-o(或)
查找/etc文件名为passwd或属主为user
find /etc/ -name "passwd" -o -user root(-o不能省略)
(3)! (非)或-not
查找 /etc文件名包含passwd 或者 属主不是root的文件
find /etc/ -name "passwd*" -o -not -user root
三,-type 根据文件类型
(1)f 正规文件
查找当前系统文件名passwd且是普通文件
find / -name passwd -a -type f
(2)d 目录
(3)l 链接文件
(4)b 块设备
(5)c 字符设备
(6)p 数据传送文件
(7)s socket设备
4, -size (k|M|G)默认单位是字节
(1)+4M(大于4M)
查找文件大小为大于4M
find /boot -size +4M
(2)-4M(小于4M但是3M--4M不在这个范围)
(3)4M(查找3M--4M)
5,day(单位为天)
(1)-atime [+/-] (访问时间)
查找第3天被访问过的文件
find / -atime 3
查找最近3天访问过的文件
find / -atime -3
查找3天之前被访问的文件
find / -atime +3
(2)-mtime(修改时间)
(3)-ctime(改变时间)
6, minute(单位分钟)
(1)-amin
(2)-mmin
(3)-cmin
7,权限-perm
(1)mode 查找档案权限刚好等于mode
查找 档案权限为222
find / -perm 222
(2)/mode 模糊匹配(只要满足其中一个就会匹配到)
查找user权限为7或group权限为7或others权限为7的
find / -perm /777
(3)-mode 必须要全部包括mode权限(比mode大的也会被匹配到)
查找档案权限大于777
find / -perm -777
8, 处理动作:默认是 -print把结果打印到屏幕上
-exec command {} \;(将前面查找的结果输入给command命令,{}表示占位符)
查找当前没有属主和属组的文件,将它们属主,组改成root
find / -nouser -a -nogroup -exec chown root:root {} \;
9,find与xargs将find查找到的结果用管道输入给xarg
find |xargs command
查找一个文件为PASSWD的文件并删除
find / -name PASSWD |xargs rm -f
在/tmp下找到文件名是core的文件,自动切换到新行,并且删除。
find /tmp -name core -type f -print |xargs /bin/rm -f
在/tmp下找到文件名是core的文件,不自动切换到新行,并且删除。
find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
读取/etc/passwd里的用户并用echo显示
cut -d: -f1 </etc/passwd |sort |xargs echo
exec 后面跟可执行文件,如果在脚本里写exec /sbin/halt 表示会在当前shell执行,不会在当前shell的子shell中执行。
10,查看文件没有属主,属组 find / -nouser -nogroup (-a可以省略)
11,查找没有属主或属组的 find / -nouser -o nogruop
12, ind ./ -type f -name '*.php' 可遍历目录
13, find ./ -maxdepth 1 -name '*.php' 不遍历,只寻找一级目录
14,查看db_summba_site开头的文件
find /cloud/databackup/databasebakup/ -mtime +30 -a -name 'db_summba_site*' |xargs ls