【APP】Linux运维利器--Find命令

Find命令总结shell

实时apache

精确api

支持众多查找标准安全

遍历指定目录中的全部文件完成查找,速度相对慢;app

find 查找路径 查找标准 查找到之后的处理运做ide

查找路径:默认为当前目录ui

查找标准:默认为指定路径下的全部文件spa

处理运做:默认为显示文档


匹配标准it

-name 'FILENAME':对文件名做精确匹配

文件名通配:

*:任意长度的任意字符

?

[]

-iname 'FILENAME': 文件名匹配时不区分大小写


实例:

find ./ -name "*.conf"

find ./ -iname "MyC.c"    忽略大小写!

find . -perm 777


+++++++++++++++++++++++++++++++++++++++++++++++

-user USERNAME: 根据属主查找

-group GROUPNAME: 根据属组查找

-uid UID: 根据UID查找

-gid GID: 根据GID查找

-nouser:查找没有属主的文件

-nogroup: 查找没有属组的文件


实例:

一、查找/var目录下属主为root而且属组为mail的全部文件;

find /var -user root -group mail


二、查找/usr目录下不属于root,bin,或student的文件;

find /usr -not -user root -a -not -user bin -a -not -user student

find /usr -not \( -user root -o -user bin -o -user student \)


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-type

f: 普通文件

d: 目录

c:字符设备

b:块设备

l:软链接文件

p:管道文件

s:套节字


实例:

find /etc -type f

find /etc -type d

find ./ ! -type d     #在当前目录下查找除目录之外的全部类型的文件


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-size [+|-]

表示文件大小,+表示大于某个数,-表示小于某个数,c表示单位是字节,你能够将c换成k,M,G.


实例:

find ./ -size 0 -exec rm {} \;

find ./ -size 0 | xargs rm -f

find . -size +1000000c   #在当前目录下查找文件长度大于1 M字节的文件

find /home/apache -size 100c  #在/home/apache目录下查找文件长度刚好为100字节的文件

find . -size +10     #在当前目录下查找长度超过10块的文件(一块等于512字节)


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

文件状态判断

-mtime: 指定时间文件内容被修改过

-ctime: 指定时间文件权限被修改过

-atime: 指定时间文件被读取过


一、找出3天“之前”被修改过的文档

find /var/log/ -mtime +3 -type f -print


二、找出3天“内”被修改过的文档

find /var/log/ -mtime -3 -type f -print


三、找出第3天被修改过的文档.

find /var/log/ -mtime 3 -type f -print

或这样写:

find /var/log/ -mtime +2 -mtime -4 -type f -print


注:

访问过用amin,修改过用mmin,文件状态改变过用cmin

精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime


find /logs -type f -mtime +5 -exec rm {} \;  #在/logs目录中查找更改时间在5日之前的文件并删除它们

find / -mtime -5 -print   #在系统根目录下查找更改时间在5日之内的文件


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-mount:在查找文件时不跨越文件系统mount点,这样限制在本文件系统!

这个用的很少就不举实例了!


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

-prune

find /apps -path "/apps/bin" -prune -o -print    #在/apps目录下查找文件,但不但愿在/apps/bin目录下查找。在用这条命令时,要么各目录最好用绝对路径,要么先后对应,如:find test/  -path "./test/a" -prune -o -print  这种方式是不对的.


-depth:在查找文件时,首先查找当前目录中的文件,而后再在其子目录中查找。

-maxdepth:

find . -maxdepth 1 -name fred   #在当前目录下查找

find . -maxdepth 2 -name fred   #在当前目录的下一级目录查找

find -mindepth 3 -maxdepth 5 -name passwd

[root@fb13 /]# find . -maxdepth 3 -name test

./b/test

./usr/bin/test

./a/test


find /project -maxdepth 2 \( -path "/project/exapi/log" -o -path "/project/exapi/backup" \) -prune -o -print |grep "/project/exapi/" |xargs tar zcf /backup/exapi_`date +%F`.tar.gz


++++++++++++++++++++++++++++++++++++++++++++++++++++

使用混合查找方式: -a -o -not

find /tmp -size +10000000c -a -mtime +2

find / -user andy -o -user jack

find /tmp -not -user zjqiu


运做

   -print: 显示

   -ls:相似ls -l的形式显示每个文件的详细

   -ok COMMAND {} \;

   -exec COMMAND {} \;


-ok,和-exec的做用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每个命令以前,都会给出提示,让用户来肯定是否执行,如:

find . -name "*.conf"  -mtime +5 -ok rm {} \;


查找并显示文件的方法:

查找到某个文件是咱们的目的,咱们更想知道查找到的文件的详细信息和属性,能够:

find / -name "httpd.conf" -ls


++++++++++++++++++++++++++++++++++++++++

find -perm参数的详细说明:

-perm

  MODE:  精确匹配

   /MODE: 任意一位匹配即知足条件

  -MODE: 文件权限能彻底包含此MODE时才符合条件

-644

644: rw-r--r--

755: rwxr-xr-x

750: rwxr-x---


find ./ -perl -001


#(case 1)-perm mode (好比: -perm 775)

解释:775 前面没有横线是表明只要找到百分之百同样的权限才算

比如说一个档案是 -rwxrwxr-x (775)就是100%的match

可是另外一个档案是 -rwxrwxrwx (777)不是100%的match,others 多了写的权限就不是100%,因此不match!


# (case 2) -perm -mode (例如: -perm -775)

解释:-775 前面有横线表示只要标示的权限match,其余的无所谓,因此上面的第二个档案(777的)在这个case也会match的。


关于find命令中-perm中+- 的含义

举个例子:好比当前目录下有a b c d4个文件

a文件的权限为6000 也就是a文件仅有suid sgid的特殊权限

b文件的权限为2000 也就是b文件仅有sgid的特殊权限

c文件的权限为4000 也就是c文件仅有suid的特殊权限

d文件的权限为6600 也就是d文件有sgid suid的特殊权限而且该文件拥有者对该文件有读写权限

那么如今find . -type f -perm 6000 能够找到a文件,由于a文件权限为6000

那么如今find . -type f -perm -6000 能够找到a d两个文件,这是由于:

咱们能够先将a b c d这4个文件的权限转化为2进制那么,

a权限转为2进制后为 110 000 000 000

b权限转为2进制后为 010 000 000 000

c权限转为2进制后为 100 000 000 000

d权限转为2进制后为 110 110 000 000

在find

. -type f -perm -6000 中的6000权限转为2进制为110 000 000

000,那么6000前的-号表明缺一不可,也就是若是有1的地方必须有1,那么这里找-6000权限的文件,这6000权限里前面有2个位置都是1,所

以这里find找-6000权限的文件就是找前面2个位置都是1的文件.而只有a d这两个文件前2个位置都是1,因此find . -type f

-perm -6000 只会找到a d两个文件.

find . -type f -perm +6000会找到a b c d这4个文件,这是由于:

+6000

里的这个+号表明有1便可,也就是有1的位置只要有1就能够.那么这里找+6000权限的文件,这6000权限前面2个位置都有1,因此这里find

找+6000权限的文件就是找前面2个位置只要有一个位置有1的文件就能够了,这4个文件都符合要求因此最后都能被 find . -type f

-perm +6000找到

相关文章
相关标签/搜索