find命令详解

find命令详解

        我们在日常使用电脑的时候,经常需要查找某个文件,这时我们就可以是用find命令来进行查找,find命令可以基于文件各种属性,查找一个目录来查找文件,find命令是一个功能非常强大的命令,但是当服务器负载比较重的时候,还是等待系统空闲时候用比较好,find命令使用时对CPU,内存资源消耗是比较大的,为了服务的稳定性,还是建议等待系统空闲下来再使用find命令。(PS:如果能用locate解决的问题最好就不要使用find了,毕竟locate更加节省资源。)

find命令的语法

      find[OPTION]... [查找路径] [查找条件] [处理动作]

           查找路径:指定具体目标路径;默认为当前目录;

           查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件;

           处理动作:对符合条件的文件做什么操作;默认输出至屏幕;

根据文件名或者正则表达是查找;

-neme "pattern"

       例如:[root@localhost ~]# find /etc/sysconfig/ -name network

      /etc/sysconfig/netwok

这个是区分大小写的,用find [查找路径] -ineme "pattern"查找是将不会区分大小写。

        例如:[root@localhost ~]# find /etc/sysconfig/ -iname network          

      /etc/sysconfig/network

      /etc/sysconfig/Network

在你的电脑上可能没有Network这个文件,因为这个文件是我自己建立的,不要误以为是-iname条件没有生效,另外这两个命令还支持支持glob风格的通配符。

       例如:在/etc/sysconfig目录下查找以net开头的文件

      [root@localhost~]# find /etc/sysconfig/ -name net*

      /etc/sysconfig/netconsole

      /etc/sysconfig/network-scripts

      /etc/sysconfig/network-scripts/network-functions

      /etc/sysconfig/network-scripts/network-functions-ipv6

      /etc/sysconfig/network

根据文件从属关系查找:

-user USERNAME:查找属主指定用户的所有文件;

-group GRPNAME:查找属组指定组的所有文件;

       例如: [root@localhost ~]# find /home/ -user root -group hadoop -ls

33859580   0 drwxr-xr-x   2 root     hadoop            6 12 17 20:20 /home/root

-uid UID:查找属主指定的UID的所有文件;

-gid GID:查找属组指定的GID的所有文件;

wKiom1ZyunvDWCVrAAAHL_qKZR4302.png

       例如find /home/ -uid 0 -gid 1001 -ls

33859580   0 drwxr-xr-x   2 root     hadoop            6 12 17 20:20 /home/root

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

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

使用方法如下:

wKiom1ZyutSy-usuAAAF3OV0bu4635.png

抱歉,我的主机上没有这样没有属主和属组的文件

根据文件的类型查找:

-type TYPE [f][d][l][b][c][p][s]

      例如:[root@localhost ~]# find /home  -type d

    /home

    /home/hadoop

    /home/hadoop/.mozilla

    /home/hadoop/.mozilla/extensions

    /home/hadoop/.mozilla/plugins

    /home/root

组合测试:

与:-a, 默认组合逻辑;

或:-o

非:-not, !

例如:[root@localhost~]# find /home  -type d -user root就相当于

      [root@localhost~]# find /home  -type d -a -user root

           /home

           /home/root

      [root@localhost~]# find /home  -type d -o -user root

    /home

    /home/hadoop

    /home/hadoop/.mozilla

    /home/hadoop/.mozilla/extensions

    /home/hadoop/.mozilla/plugins

    /home/root

      [root@localhost~]# find /home  -type d -o -user root

    /home

    /home/hadoop

    /home/hadoop/.mozilla

    /home/hadoop/.mozilla/extensions

    /home/hadoop/.mozilla/plugins

    /home/root

根据文件的大小查找:

-size [+|-]文件大小n    常用单位:k, M, G

      +nM则大于nM

      -nM则小于nM

      nM则等于nM

    例如:

wKioL1ZyvMLjLEiTAAA8gTfFVvQ234.png

根据时间戳查找:以“天”为单位;

      -atime  [+|-]#

      -mtime  [+|-]#

      -ctime  [+|-]#

这里的+-与上面size+-类似只不过+变成了n天之前,-变成了n天以内。atime是指定时间之时被存取的文件或目录,mtime是指定时间之时被改动的文件或目录,ctime是指定时间之时被更改的文件或目录。

    例如:[root@localhostroot]# find /home/root -atime +1

    /home/root/Fedora-i386-20-20131211.1-sda.qcow2  

以“分钟”为单位:

      -amin  [+|-]#

      -mmin  [+|-]#

      -cmin  [+|-]#

这个与上面以“天”为单位的操作类似就不多做说明了。

根据权限查找:

-perm [/|-]mode

      mode:精确权限匹配;

      /mode:任何一类用户(u,g,o)的权限中的任何一位(r,w,x)符合条件即满足;

           9位权限之间存在“或”关系;

      -mode:每一类用户(u,g,o)的权限中的每一位(r,w,x)同时符合条件即满足;

           9位权限之间存在“与”关系;

    例如find /home -typef -perm 777(查找/home目录下权限为rwxrwxrwx的文件)

    find /home -type f -perm /222(查找/home目录下文件ugo权限中只要一个有w权限的文件)

    find /home -type f -perm -222(查找/home目录下文件ugo权限中每个都有W权限的文件)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章