今天我将学到的文件查找心得写出来和大家共同分享,请大家多多指点

文件查找是当我们只知道文件某一些属性而不知道具体所在位置时所要进行的一项搜索,在Linux系统中的文件查找有全局模糊查找和局部精确查找,今天学习局部精确查找——find

Find查找文件时是遍历指定目录中的所有文件完成查找,实时精确查找,速度较慢,支持众多查找标准(如:按文件名,权限,属主,属组等)

Find命令的使用方法:

find+[查找路径]+查找标准+[查找到之后的动作]

查找路径,所要查找文件所在的绝对路径,如果不写系统默认为当前工作目录

查找标准,查找指定目录下的那种文件,如果不写默认为所有文件

查找到所要文件之后的动作,找到文件之后要进行那些处理,如果不指定默认为显示

查找标准有:

-name filename:基于文件名查找

-iname filename:基于文件名查找时不区分大小写

-regex:基于正则表达式进行查找,此时需要完整匹配

-user username:基于文件属主进行查找

-group groupname:基于文件属组进行查找

-uid n:基于属主id进行查找,当用户被删除时,原有属于此用户的文件属主将更改为原用户的id

-gid n:基于属组id进行查找,同上

-nouser:查找没有属主的文件,系统管理员应经常执行此命令,并将查找到的文件属主更改为root,以确保系统的安全性

-nogroup:查找没有属组的文件,作用同上

-type:基于文件类型进行查找,Linux文件系统将文件类型分为(f,d,b,c,g,l,s等)

-size +nM -nM:基于文件大小进行查找,+nM表示大于nM的所有文件;-nM表示小于nM的所有文件;nM表示大小为nM的文件;Linux系统匹配文件大小时,以约等进行匹配,11M的文件表示大于10M,小于等于11M(此处可使用常用单位K,M,G;如果不写单位默认为K)

-o  :条件一或者条件二,或;只要满足一个条件即可,执行优先级最低

-a  :条件一和条件二,与;必须满足同时满足两个才可以,执行优先级比o

-not :不是,非;只要不满足条件才可以,执行优先级最高

-mtime [+-] n :以文件修改时间查找,+n表示至少n天没有修改过的文件;-n表示n天以内没有修改过的文件;n表示到查找这一刻刚好n天没有修改过的文件,基本不容易碰到

-ctime [+-] n  :以文件改变时间查找,+n表示至少n天没有改变过的文件;-n表示n天以内没有改变过的文件;n表示到查找这一刻刚好n天没有改变过的文件

-atime [+-] n  :以文件访问时间查找,+n表示至少n天没有访问过的文件;-n表示n天以内没有访问过的文件;n表示到查找这一刻刚好n天没有访问过的文件

-mmin [+-] n  :以文件修改时间查找,+n表示至少n分钟没有访问过的文件;-n表示n分钟以内没有访问过的文件;n表示到查找这一刻刚好n分钟没有访问过的文件

-cmin [+-] n  :以文件改变时间查找,+n表示至少n分钟没有改变过的文件;-n表示n分钟以内没有改变过的文件;n表示到查找这一刻刚好n分钟没有改变过的文件

-amin [+-] n  :以文件访问时间查找,+n表示至少n分钟没有访问过的文件;-n表示n分钟以内没有访问过的文件;n表示到查找这一刻刚好n分钟没有访问过的文件

修改指的是修改的文件属性,名字等,并不改变文件元数据;而改变指的是对文件的元数据进行了改变

-perm [-/]nnn  :以文件访问权限进行查找,-nnn表示只要权限能完全包含nnn即可显示;/nnn表示只要文件权限包含一个n即可显示;nnn表示文件权限刚好为nnn才可以

-print  :将查找到的文件显示出来,系统默认为显示

-ls  :将查找到的文件的详细信息以列表形式显示出来,类似* -exec ls -l {} \;

-ok command {} \;:查找到文件之后进行command动作,并与用户进行交互式操作,花括号表示引用前面查找到的文件,最后以反斜杠和分号结尾

-exec command {} \;:查找到文件之后进行command动作,不与用户进行交互式操作,而是直接完成,花括号表示引用前面查找到的文件,最后以反斜杠和分号结尾

 

实例:# find /etc -name pass*

查找etc下名字以pass开头,后面跟任意字符的文件

# find /etc -iname passwd

查找etc下名字为passwd的文件,并且不管名字是大小写

# find /etc -regex ass*   此时可能查找不到任何文件,使用正则表达式需要完整匹配

# find /etc -regex .*ass.*

查找etc下文件名中以任意个任意字符开头,后面跟ass,又以任意个任意字符结尾的文件

# find /etc -user user1

查找etc下属主是user1的文件

# find /etc -group mygroup

查找etc下属组是group的文件

# find / -nouser -exec chown root {} \;

查找根目录下没有属主的文件,并将这些文件的属主更改为root;因为没有属主的文件是很容易被黑客所使用,对系统造成威胁

# find / -nogroup -exec chown :root {} \;

查找根目录下没有属组的文件,并将这些文件的属组更改为root

# find /etc -uid 503

查找etc下文件属主为503的文件,当文件属主被删除时,所属这个用户的属主更改为这个用户的id

# find /etc -gid 526

查找etc下文件属组为526的文件

# find /etc -type f -ls

查找etc下类型是普通文件的文件,并将这些文件的详细属性以列表形式显示出来

# find /etc -size +10M

查找etc下大于10M的文件

# find /etc -size -10M

查找etc下小于10M的文件,小于10M表示大于9M,小于10M

# find /etc -size -10M -a -type d

查找etc下文件大小小于10M并且是目录的文件

# find /etc -user user1 -o -group mmm

查找etc下文件属主是user1或者属组是mmm的文件

# find /etc -not \( -user user1 -o -type d\)

查找etc下属主不是user1且不是目录的文件

# find /etc -mtime -4

查找etc下四天以内没有修改过的文件

# find /etc -ctime +6

查找etc下至少六天没有改变过的文件

# find /etc -atime 2

查找etc下到现在为止刚好两天没有访问过的文件

amin  mmin  cmin  用法和意思类似,只是时间单位以分钟计

# find /etc -perm -644

查找etc下文件权限为644或者文件权限大于644的文件,如654755754都可以

# find /etc -perm /644

查找etc下文件权限中有包含644中任何一个权限的文件,如600040004都可以

# find /etc -perm 400

查找etc下文件权限刚好为400的文件,此时只有权限为400才显示

# find /etc -perm /001 -print

查找etc下其他用户具有执行权限的文件,并将其显示出来;Linux默认find命令将查找到的文件显示出来,管理员也要经常使用这个命令,将文件的其他用户拥有的执行权限删除

# find /etc -type f -ls

查找etc下文件类型为普通文件的文件,并将其详细属性以列表形式显示出来

 

在平时的工作中,find通常和xargs一起使用,xargs的作用使得显示出来的内容之间以空格隔开,而不是每行显示一个

如:# find /etc -user halt | xargs

etc下属主为halt的文件显示出来,并且两个结尾之间以空格隔开

# find /etc -perm /644 | xargs echo > /tmp/wc

etc下权限包含有644中的一个的文件显示出来,并将结尾覆盖输出到/tmp/wc中,每个结果之间用空格隔开