查找当前目录以及子目录下文件名为LICENSE的命令

find.-nameLICENSE

find是Linux中强悍的搜索命令,除了可以根据文件名搜索文件,还可以根据权限、大小、时间、inode号等来搜索文件。并且find命令是直接在硬碟中进行搜索的,倘若指定的搜索范围过大,find命令都会消耗较大的系统资源,造成服务器压力过大。所以,在使用find命令搜索时,不要指定过大的搜索范围。

find命令的基本信息如下:

命令名称:find。

中文本意:searchforfilesinadirectoryhierarchy.

所在路径:/bin/find。

执行权限:所有用户。

功能描述:在目录中查找文件。

命令格式

[root@linuxcool~]#find搜索路径[选项]搜索内容

find是比较特殊的命令,它有两个参数:

第一个参数拿来指定搜索路径;

第二个参数拿来指定搜索内容。

但是find命令的选项比较复杂,我们一个一个举例来看。

根据文件名搜索

[root@linuxcool~]#find搜索路径[选项]搜索内容

选项:

-name:根据文件名搜索;

-iname:根据文件名搜索,不分辨文件名大小;

-inum:根据inode号搜索;

这是find最常用的用法,我们来试试:

[root@linuxcool~]#find/-nameyum.conf

/etc/yum.conf

#在目录下査找文件名是yum.conf的文件

然而find命令有一个小特点,就是搜索的文件名必须和你的搜索内容一致就能找到。若果只包含搜索内容,则不会找到。我们做一个实验:

[root@linuxcool~]#touchyum.conf.bak

#在/root/目录下构建一个文件yum.conf.bak

[root@linuxcool~]#find/-nameyum.conf

/etc/yum.conf

#搜索只能找到yum.conf文件,而不能找到yum.conf.bak文件

find才能找到的是只有和搜索内容yum.conf一致的/etc/yum.conf文件,而/root/yum.conf.bak文件尽管富含搜索关键字,而且不会被找到。这些特点我们总结为:find命令是完全匹配的,必须和搜索关键字一模一样才能列举。

Linux中的文件名是分辨大小写的,也就是说,搜索大写文件,是找不到小写文件的。假如想要大小通吃,就要使用-iname来搜索文件。

[root@linuxcool~]#touchCANGLS

[root@linuxcool~]#touchcangls

#构建小写和大写文件

[root@linuxcool~]#find.-inamecangls

./CANGLS

./cangls

#使用-iname,大小写文件通吃

每位文件都有inode号,假如我们晓得inode号,则也可以根据inode号来搜索文件。

[root@linuxcool~]#ls-iinstall.log

262147install.log

#假如晓得文件名,则可以用”ls-i”来査找inode号

[root@linuxcool~]#find.-inum262147

./install.log

#假如晓得inode号,则可以用find命令来査找文件

根据inode号搜索文件,也是分辨硬链接文件的重要手段,由于硬链接文件的inode号是一致的。

[root@linuxcool~]#ln/root/install.log/tmp/

#给install.log文件创建一个硬链接文件

[root@linuxcool~]#ll-i/root/install.log/tmp/install.log

262147-rw-r--r--.2rootroot247721月142014/root/

install.log

262147-rw-r--r--.2rootroot247721月142014/tmp/

install.log

#可以看见这两个硬链接文件的inode号是一致的

[root@linuxcool~]#find/-inum262147

/root/install.log

/tmp/install.log

#假如硬链接不是我们自己完善的,则可以通过find命令搜索inode号linux软件工程师,来确定硬链接文件

根据文件大小搜索

[root@linuxcool~]#find搜索路径[选项]搜索内容

选项:

-size[+-]大小:根据指定大小搜索文件

这儿的”+”的意思是搜索比指定大小还要大的文件,”-“的意思是搜索比指定大小还要小的文件。我们来试试:

[root@linuxcool~]#ll-hinstall.log

-rw-r--r--.1rootroot25K1月142014install.log#在当前目录下有一个大小是25KB的文件

[root@linuxcool~]#

[root@linuxcool~]#find.-size25k

./install.log

#当前目录下,査找大小恰好是25KB的文件,可以找到

[root@linuxcool~]#find.-size-25k

.

./.bashrc

./.viminfo

./.tcshrc

./.pearrc

./anaconda-ks.cfg

./test2

./.ssh

./.bash_history

./.lesshst

./.bash_profile

./yum.conf.bak

./.bashjogout

./install.log.syslog

./.cshrc

./cangls

#搜索大于25KB的文件,可以找到好多文件

[root@linuxcool~]#find.-size+25k

#而当前目录下没有小于25KB的文件

虽然find命令的-size选项是笔者个人感觉比较难受的选项,为何这样说?find命令可以根据KB来搜索,应当也可以根据MB来搜索吧。

[root@linuxcool~]#find.-size-25m

find:无效的-size类型”m”

#为何会报错呢?虽然是由于假如依照MB来搜索,则必须是小写的M

这就是纠结点,千字节必须是大写的”k”,而兆字节必领是小写的”M”。有些人会说:”你别这么执著啊,你就不能不写单位,直接根据字节搜索啊?”很傻,很天真,不写单位,大家就以为会根据字节搜索吗?我们来试试:

[root@linuxcool~]#llanaconda-ks.cfg

-rw——-.1rootroot12071月142014anaconda-ks.cfg

#anaconda-ks.cfg文件有1207字芳

[root@linuxcool~]#find.-size1207

#但用find查找1207,是哪些也找不到的

也就是说,find命令的默认单位不是字节。若果不写单位,这么find命令是根据512Byte来进行査找的。我们瞧瞧find命令的帮助。

[root@linuxcool~]#manfind

-sizen[cwbkMG]

Fileusesnunitsofspace.Thefollowingsuffixescanbeused:

'b'for512-byteblocks(thisisthedefaultifnosuffixisused)

#这是默认单位,假如单位为b或不写单位,则根据512Byte搜索

'c'forbytes

#搜索单位是c,根据字节搜索

'w'fortwo-bytewords

#搜索单位是w,根据双字节(英文)搜索

'k'forKilobytes(unitsof1024bytes)

#根据KB单位搜索,必须是大写的k

'M'forMegabytes(unitsof1048576bytes)

#根据MB单位搜索,必须是小写的M

'G'forGigabytes(unitsof1073741824bytes)

#根据GB单位搜索,必须是小写的G

也就是说,假如想要根据字节搜索,则须要加搜索单位”c”。我们来试试:

[root@linuxcool~]#find.-size1207c

./anaconda-ks.cfg

#使用搜索单位c,就会根据字节搜索

根据更改时间搜索

Linux中的文件有访问时间(atime)、数据更改时间(mtime)、状态更改时间(ctime)这三个时间,我们也可以根据时间来搜索文件。

[root@linuxcool~]#find搜索路径[选项]搜索内容

选项:

-atime[+-]时间:根据文件访问时间搜索

linux常用命令查找_linux 中find查找在某两个范围之间的命令

-mtime[+-]时间:根据文改时间搜索

-ctime[+-]时间:根据文件更改时间搜索

这三个时间的区别我们在stat命令中早已解释过了,这儿用mtime数据更改时间来举例,重点谈谈”[+-]”时间的含意。

-5:代表@内更改的文件。

5:代表前5~6天那三天更改的文件。

+5:代表6天前更改的文件。

我们画一个时间轴,来解释一下linux 中find查找在某两个范围之间的命令,如图1所示。

图1find时间轴

每次笔者提到这儿,”-5″代表5天内更改的文件,而”+5″总有人说代表5天更改的文件。要是笔者能晓得5天系统中能完善哪些文件,早就去买体彩了,那是难料先知啊!所以”-5″指的是5天内更改的文件,”5″指的是前5~6天那三天更改的文件,”+5″指的是6天前更改的文件。我们来试试:

[root@linuxcool~]#find.-mtime-5

#查找5天内更改的文件

你们可以在系统中把几个选项都试试,就可以明白各选项之间的差异了。

find除了可以根据atmie、mtime、ctime来査找文件的时间,也可以根据amin、mmin和cmin来査找文件的时间,区别只是所有time选项的默认单位是天,而min选项的默认单位是分钟。

根据权限搜索

在find中,也可以根据文件的权限来进行搜索。权限也支持[+/-]选项。我们先看一下命令格式。

[root@linuxcool~]#find搜索路径[选项]搜索内容

选项:

-perm权限模式:査找文件权限正好等于”权限模式”的文件

-perm-权限模式:査找文件权限全部包含”权限模式”的文件

-perm+权限模式:査找文件权限包含”权限模式”的任意一个权限的文件

为了易于理解,我们要举几个反例。先构建几个测试文件。

[root@linuxcool~]#mkdirtest

[root@linuxcool~]#cdtest/

[root@linuxcooltest]#touchtestl

[root@linuxcooltest]#touchtest2

[root@linuxcooltest]#touchtest3

[root@linuxcooltest]#touchtest4

#构建测试目录,以及测试文件

[root@linuxcooltest]#chmod755testl

[root@linuxcooltest]#chmod444test2

[root@linuxcooltest]#chmod600test3

[root@linuxcooltest]#chmod200test4

#设定实验权限。由于是实验权限,所以看上去比较别扭

[root@linuxcooltest]#ll

总药量0

-rwxr-xr-x1rootroot06月1711:05testl-r--r--r--1rootroot06月1711:05test2

-rw——-1rootroot06月1711:05test3

-w——-1rootroot06月1711:05test4

#查看权限

【例1】”-perm权限模式”。

这些搜索比较简单,代表査找的权限必须和指定的权限模式一模一样,才可以找到。

[root@linuxcooltest]#find.-perm444

linux常用命令查找_linux 中find查找在某两个范围之间的命令

./test2

[root@linuxcooltest]#find.-perm200

./test4

#根据指定权限搜索文件,文件的权限必须和搜索指定的权限一致,就能找到

【例2】”-perm-权限模式”。

假如使用”-权限模式”,是代表的是文件的权限必须全部包含搜索命令指定的权限模式,才可以找到。

[root@linuxcooltest]#find.-perm-200

./test4./test3./testl#搜索文件的权限包含200的文件,不会找到test2文件,由于test2的权限为444,不包含200权限

由于test4的权限200(-w——-)、test3的权限600(-rw——-)和test1的权限755(-rwxr-xr-x)都包含200(--w——-)权限,所以可以找到;而test2的权限是444(-r--r--r--),不包含200(--w——-)权限,所以找不到,再试试:

[root@linuxcooltest]#find.-perm-444

.

./test2./test1#搜索文件的权限包含444的文件

上述搜索会找到test1和test2,由于test1的权限755(-rwxr-xr-x)和test2的权限444(-r--r--r--)都完全包含444(-r--r--r--)权限,所以可以找到;而test3的权限600(-rw——-)和test4的权限200(-w——-)不完全包含444(-r--r--r--)权限,所以找不到。也就是说,test3和test4文件的所有者权限其实包含4权限,而且所属组权限和其他人权限都是0,不包含4权限,所以找不到,这也是完全包含的意义。

【例3】”-perm+权限模式”

刚才的”-perm-权限模式”是必须完全包含,就能找到;而”-perm+权限模式”是只要包含任意一个指定权限,就可以找到。我们来试试:

[root@linuxcooltest]#find.-perm+444

./test4./test3./testl#搜索文件的权限包含200的文件,不会找到test2文件,由于test2的权限为444,不包含200权限。

由于test4的权限200(--w——-)、test3的权限600(-rw——-)和test1的权限755(-rwxr-xr-x)都包含200(--w——-)权限,所以可以找到;而test2的权限是444(-r--r--r--),不包含200(--w——-)权限,所以找不到。

根据所有者和所属组搜索

[root@linuxcool~]#find搜索路径[选项]搜索内容

选项:

-uid用户ID:根据用户ID査找所有者是指定ID的文件

-gid组ID:根据用户组ID査找所属组是指定ID的文件

-user用户名:根据用户名査找所有者是指定用户的文件

-group组名:根据组名査找所属组是指定用户组的文件

-nouser:査找没有所有者的文件

这组选项比较简单,就是根据文件的所有者和所属组来进行文件的査找。在Linux系统中,绝大多数文件都是使用root用户身分构建的,所以在默认情况下,绝大多数系统文件的所有者都是root。诸如:

[root@linuxcool~]#find.-userroot

#在当前目录中査找所有者是root的文件

因为当前目录是root的家目录,所有文件的所有者都是root用户,所以这条搜索命令会找到当前目录下所有的文件。

根据所有者和所属组搜索时,”-nouser”选项比较常用,主要用于査找垃圾文件。在Linux中,所有的文件都有所有者,只有一种情况例外,那就是外来文件。例如光碟和U盘中的文件假如是由Windows复制的,在Linux中査看就是没有所有者的文件;再例如手工源码包安装的文件,也有可能没有所有者。

除这些外来文件外,假如系统中发觉了没有所有者的文件linux 中find查找在某两个范围之间的命令linux移植,通常是没有作用的垃圾文件(例如用户删掉之后遗留的文件),这时须要用户手工处理。搜索没有所有者的文件,可以执行以下命令:

[root@linuxcool~]#find/-nouser

根据文件类型搜索

[root@linuxcool~]#find搜索路径[选项]搜索内容

选项:

-typed:查找目录

-typef:查找普通文件

-typel:查找软链接文件

这个命令也很简单,主要根据文件类型进行搜索。在一些特殊情况下,例如须要把普通文件和目录文件区分开,例如须要把普通文件和目录文件区分开,使用这个选项就很便捷。

[root@linuxcool~]#find/etc-typed

#查找/etc/目录下有什么子目录

逻辑运算符

[root@linuxcool~]#find搜索路径[选项]搜索内容

选项:

-a:and逻辑与

-o:or逻辑或

-not:not逻辑非

1)-a:and逻辑与

find命令也支持逻辑运算符选项,其中-a代表逻辑与运算,也就是-a的两个条件都组建,find搜索的结果才创立。

举个反例:

[root@linuxcool~]#find.-size+2k-a-typef

#在当前目录下搜索小于2KB,但是文件类型是普通文件的文件

在这个事例中,文件既要小于2KB,又必须是普通文件,find命令才可以找到。再举个反例:

[root@linuxcool~]#find.-mtime-3-a-perm644

#在当前目录下搜索3天以内更改过,但是权限是644的文件

2)-o:or逻辑或

-o选项代表逻辑或运算,也就是-o的两个条件只要其中一个创立,find命令就可以找到结果。诸如:

[root@linuxcool~]#find.-namecangls-o-namebols

./cangls

./bols

#在当前目录下搜索文件名要么是cangls的文件,要么是bols的文件

-o选项的两个条件只要创立一个,find命令就可以找到结果,所以这个命令既可以找到cangls文件,也可以找到bols文件。

3)-not:not逻辑非

-not是逻辑非,也就是取反的意思。举个反例:

[root@linuxcool~]#find.-not-namecangls

#在当前目录下搜索文件名不是cangls的文件

其他选项

1)-exec选项

这儿我们主要讲解两个选项”-exec”和”-ok”,这两个选项的基本作用十分相像。我们先来瞧瞧”exec”选项的格式。

[root@linuxcool~]#find搜索路径[选项]搜索内容-exec命令2{};

首先,请你们注意这儿的”{}”和”;”是标准格式,只要执行”-exec”选项,这两个符号必须完整输入。

其次,这个选项的作用似乎是把find命令的结果交给由”-exec”调用的命令2来处理。”{}”就代表find命令的査找结果。

我们举个事例,刚才在讲权限的时侯,使用权限模式搜索只能看见文件名,比如:

[root@linuxcooltest]#find.-perm444

./test2

假如要看文件的具体权限,还要用”ll”命令査看。用”-exec”选项则可以一条命令搞定:

[root@linuxcooltest]#find.-perm444-execls-l{};

-r--r--r--1rootroot06月1711:05./test2

#使用”-exec”选项,把find命令的结果直接交给”ls-l”命令处理

“-exec”选项的作用是把find命令的结果装入”{}”中,再由命令2直接处理。在这个事例中就是用”ls-l”命令直接处理,会使find命令愈加便捷。

2)-ok选项

“-ok”选项和”-exec”选项的作用基本一致,区别在于:”-exec”的命令会直接处理,而不寻问;”-ok”的命令2在处理前会先寻问用户是否这样处理,在得到确认命令后,才能执行。诸如:

[root@linuxcooltest]#find.-perm444-okrm-rf{};

?y#我们此次使用rm命令来删掉find找到的结果,删掉的动作最好确认一下

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复