Find命令使用详解

 Find命令使用详解正则表达式

FindLinux中查找文件的命令,“find”命令能帮助咱们在使用,管理Linux的平常事务中方便的查找出咱们须要的文件。 socket

Find 命令的特色:实时精确支持众多查找标准遍历指定目录中的全部文件完成查找,速度慢; ide

Find 命令的格式:find  查找路径 查找标准 查找到之后的处理运做 ui

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

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

处理运做:默认为显示 ip

Find匹配标准:

       经过文件名查找 it

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

    如:查找/etc目录下的passwd这样的文件,命令为:find /etc -name 'passwd'   io

使用-name对文件名查找的时候还支持对文件名的通配

文件名通配*任意长度的任意字符?”任意单个字符、[]”匹配指定范围内的任意单个字符,等等

如:查找/etc目录下以passwd结尾的文件,命令为:find /etc -name '*passwd' ,这样在/etc目录下以passwd这几个字母结尾的全部文件都会被显示出来

查找/etc目录下以passwd开头的文件,命令为:find /etc -name 'passwd*'

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

-regex PATTERN:基于正则表达式进行文件名匹配

 

    根据属主、属组查找

-user USERNAME

如:查找在/tmp目录下属主属于root的用户,命令为:find /tmp -user root

-group GROUPNAME

如:查找在/tmp目录下属组属于root的用户,命令为:find /tmp -group root

 

根据UIDGID查找

-uid UID -gid GID

若是某个用户被删,那么之前全部属于这个用户的文件的的属主都会变成此前这个用户的ID号,所以这个时候再根据这个属主就找不到这样的文件了,此时只能根据它的ID号来查找。如:find /tmp -uid 2003  这样就会把ID号为2003的给查找出来。

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

    如:find /tmp -nouser   查找/tmp目录下没有属主的用户

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

如:find /tmp -nogroup   查找/tmp目录下没有属组的用户

 

根据文件类型来查找:

-type 

f: 普通文件d目录文件b: 块设备文件 (block)c: 字符设备文件 (character)l: 符号连接文件(symbolic link file)p: 命令管道文件(pipe)s: 套接字文件(socket)

如:咱们查找一下/tmp目录下的目录文件,命令为:find /tmp -type d 

    

    根据文件的大小来查找:

    -size 

一般状况下-size后面都会跟一些数字和单位如:#k#M#G,如不跟单位默认为字节,这些数字还能够用+-号来修饰,如:+10k-10k,意思是大于10k、小于10k,若是不带+-号则表示精确为10k。若是咱们查找条件为10k时,那么9k10k之间的都会被默认为10k;若是条件为+10k则表示全部大于10k的文件;若是条件为-10k则表示全部小于10k的文件。格式为:find /etc -size 10kfind /etc -size +10k find /etc -size -10k

    

       组合条件:

-a (与)、-o (或)、-not(非)

    如:咱们找一找/tmp目录下没有属主而且类型为目录的文件

命令则是 find /tmp -nouser -a -type d  这里就用到了-a(与),若是把-a改成-o则表示/tmp目录下没有属主或者类型为目录的文件,两个条件知足一个便可。若是要查找不是目录的文件只需在前面加-not便可。如:find /tmp -not -type d  

    根据文件的时间戳来查找:

-mtime修改时间)、-ctime改变时间)、-atime访问时间),后面跟数字,数字前面还能够用+-号来修饰。如:“-atime 5”表示离此刻为止恰好五天访问过“-atime +5”表示至少有五天没有访问过了、“-atime -5”表示五天以内访问过。还有另一组(-mmin-cmin-amin)此用法同样只是表示的时间为分钟,(‘time’表示天、‘min’表示分钟)。

如:查找/tmp 目录下在五天以内被访问过的文件,即:find /tmp -atime -5   

 

根据文件的权限来查找:

-perm MODE

-perm MODE:精确匹配

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

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

如:咱们查找当前目录下文件权限为644的文件,即:find ./ -perm 644

    运做:

  -print: 显示

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

    若是咱们想在查找到的文件上执行其余的命令则用到下面的命令:

-ok COMMAND {} \; 每一次操做都须要用户确认,也能够用-exec COMMAND {} \;

    若是咱们要操做那个文件,并在这个命令格式中须要引用那个文件的话就要使用{}做为文件名称占位符。

    在这里强调一点必定要引用“\;”结尾,不然为语法错误

如:在当前目录下找到其余用户可以读写的用户,把这些用户的写权限给去掉

find / -perm -006 -exec chmod o-w {} \;  “{}”是引用查找到的文件 

 

下面是几个练习题:

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

find /var -user root -group mail

2、查找/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 \)

3、查找/etc目录下最近一周内内容修改过且不属于rootstudent用户的文件;

find /etc -mtime -7 -not \ ( -user root -o -user student \)

find /etc -mtime -7 -not -user root -a -not -user student

4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改成root

find \( -nouser -o -nogroup \) -a -atime -1 -exec chown root:root {} \; 

5、查找/etc目录下大于1M的文件,并将其文件名写入/tmp/etc.largefiles文件中;

find /etc -size +1M >> /tmp/etc.largefiles

6、查找/etc目录下全部用户都没有写权限的文件,显示出其详细信息;

find /etc -not -perm /222 -ls

相关文章
相关标签/搜索