【Linux】Linux指令学习之find

find指令是我们在使用Linux系统时比较常用并且十分重要的一条指令。它的指令格式如下:


find pathname [-options] [...] ***

  • pathname:你要查找的目录
  • [- options]:查找方式
  • […]:查找方式对应的查找条件
  • ***:搭配使用的指令

options 查找方式

(查找方式有很多,下面只剖析了几种常用的)

-name
按照文件名进行查找
eg:
【Linux】Linux指令学习之find_第1张图片


-mtime
按照文件修改时间进行查找,mtime为文件的时间参数,指文件最近的一次修改时间。不了解的可以看下面这篇博客:http://blog.csdn.net/llzk_/article/details/53932580
eg1:


find test -mtime 0

0就代表目前的时间,意思是从现在开始到24小时以前。这条指令的意思就是在test目录中查找从现在开始到24小时以前这个时间段内修改过的文件的文件名。

这里写图片描述

如果我想查找远一点的文件呢?比如现在是12月30号,我想在test目录下查找4天前12月26号那一天24小时内修改过的文件。


find -test mtime 4

【Linux】Linux指令学习之find_第2张图片

24小时,1天,这个范围有点太小了,我想在test目录下查看从现在开始到4天前,这4天内修改过的文件。


find test -mtime 4

【Linux】Linux指令学习之find_第3张图片

再远一点,我要看test目录下从现在开始,4天前所有修改过的文件。

find test -mtime +4

这里写图片描述
因为test是我为了测试而创建的目录,里面文件较少,你可以试试在根目录下查找,效果爆炸!

find / -mtime +4

从上面的测试中可以看出,加上+-号会得到不同的结果。可以参考下面的时间轴来区分。
【Linux】Linux指令学习之find_第4张图片

  • +4代表大于等于5天前的文件名
  • -4代表小于等于4天内的文件名
  • 4代表4~5天那一天的文件名

-uid n
按照用户账号的ID来查找。n即为用户账号ID。这个ID一般是被记录在/etc/passwd里面与账号名称对应的数字。
eg:
在/etc目录下查找用户ID为500的文件名。

find /etc -uid 500

【Linux】Linux指令学习之find_第5张图片


-gid n
按照用户组名的ID来查找,n为用户组的ID。gid一般被记录在/etc/group中。
eg:
在/etc目录下查找用户组ID为500的文件名。

find /etc -gid 500

【Linux】Linux指令学习之find_第6张图片


-user name
按照用户的名称来查找;
eg:
在test目录下查找用户名为lzk的文件。


find test -user lzk

【Linux】Linux指令学习之find_第7张图片


-group name
按用户组的名称进行查找。
eg:
在test目录下查找用户组名为gruop的文件。


find test -gruop lzk

【Linux】Linux指令学习之find_第8张图片


-nouser
寻找用户(所有者)不在/etc/passwd中的人
eg:
在/etc目录下查找不属于任何人的文件。

find /etc -nouser

【Linux】Linux指令学习之find_第9张图片

-nogroup
寻找文件的用户组不存在于/etc/group中的文件。
eg:
在/etc目录下查找不属于任何用户组的文件。

【Linux】Linux指令学习之find_第10张图片

为什么会存在不属于任何用户和用户组的文件?因为当你自行安装软件时,很可能软件的属性当中并没有文件所有者或者你将某个用户(用户组)删除了,但是它的文件还在。这是可能的。所以在这时候就可以用着两条指令来查看这些不太正常的文件。


-size [+-]SIZE
查找文件大小为SIZE的文件 SIZE;
查找文件大小大于SIZE的文件 +SIZE;
查找文件大小小于SIZE的文件 -SIZE;
size的单位有两个,一个是‘c’,代表byte。另一个是‘k’,代表1024bytes,为1KB。不加单位的话应该默认的是block(块,一个块为512bytes)。

eg:
在/etc目录下查找大小为50byte的文件。


find /etc -size 50c

在/etc目录下查找大小大于50bytes的文件。


find /etc -size +50c

在etc目录下查找大小小于50bytes的文件


find /etc -size -50c


-type TYPE
按照文件的类型查找,类型主要有‘f’一般正规文件,‘b’,‘c’设备文件,‘d’目录,‘l’链接文件,‘s’socket,‘p’FIFO等属性。
eg:
查找test目录下的一般文件

find test -type f

【Linux】Linux指令学习之find_第11张图片


-perm [+-]mode
按文件的权限查找,查找文件权限刚好等于mode的文件。
如mode777表示“-rwxrwxrwx”,755表示“-rwxr-xr-x
”。(关于文件的权限我后序会以另一片博文给出)

  • 查找文件权限等于mode的文件—– mode
    eg:

    find test -perm 755

    这里写图片描述

  • 查找文件权限包括mode的文件—- -mode
    什么叫包括?假如mode等于600,即”-rw——-“,我现在有一个文件A的权限mode等于755(”-rwxr-xr-x“),那么文件A也会被查找出来。因为”-rwxr-xr-x“属性包含了”-rw——-“。
    eg:

    find test -perm -700

    【Linux】Linux指令学习之find_第12张图片

  • 查找文件权限包含”任一mode的权限“的文件—- +mode
    假设我要查找的mode为755(”-rwxr-xr-x“), 现在有一文件B权限为”—-r-x—“。这个文件是可以被查到的。因为文件B有”..r-x..“。
    eg:

    find test -perm +777

    【Linux】Linux指令学习之find_第13张图片


特殊功能

find指令的特殊功能就是可以和其他指令搭配使用。就是最前面所描述的”***“所代表的内容。
格式为:


find pathname [-option] [...] -exec [...] {} \;

  • -exec代表搭配指令的起始,\;代表搭配指令的结束。因为;在bash环境下有特殊意义,所以加转义字符‘\’;
  • {}表示将查到的内容写入{}中;
  • […] 表示搭配的指令;

    eg:

在test目录下查找所有者为lzk的所有文件,并以ls -l(此种搭配不支持命令别名,所以‘ll’是不行的)的形式输出至屏幕。

find test -name test -exec ls -l {} \;

【Linux】Linux指令学习之find_第14张图片


与通配符搭配使用
eg:
在test目录下查找所有名字包含”te“的文件。

find test -name '*te*'

【Linux】Linux指令学习之find_第15张图片

你可能感兴趣的:(Linux学习笔记,Linux学习之路)