linux入门(二):find指令的用法

   650) this.width=650;" src="http://img.baidu.com/hi/jx2/j_0055.gif" alt="j_0055.gif" />我们知道,Linux下find命令可以在目录中搜索指定文件,并进行相应的操作。find命令提供了相

当强大的查找条件,功能很强大。所以今天我们来分析一下find的用法。与which和whereis不同的是

find在查找文件的时候是真正的在遍历所有的文件,如果find没有找到你所需要的目标的话,那系统中

一定不存在你所需要的文件,因此find在使用的时候会比其他的查找指令更详尽一些,当我们在运行一

个很消耗资源的find指令的时候,人们倾向于将其放在后台运行,因为遍历一个大的文件系统可能需要

很长时间。

  1. 命令格式

    find pathname -options[-print -exe -ok ...]

  2. 命令功能

    在文件树中查找文件,并进行相应操作(可能访问磁盘)。

  3. 命令参数

    pathname:find命令查找的搜索路径,例如用.来表示当前目录,/表示根目录

    -print:将查找后匹配的文件 并将其输出到标准输出上

    -exe:查找一个匹配文件并执行该参数给出的shell命令,相应的命令形式为‘command’{ } \ ;注意{ }和\之间的空格

    -ok:与-exe的作用相同,只不过以一种更安全的模式来执行,每次执行命令之前否会询问,让用户选择是否要执行

  4. 命令选项

    -name:按照文件名来查找

     -perm:按照文件权限来查找

     -prune:使用这一选项可以使find不在当前指定的目录中查找

     -user:按照文件所属用户来查找

     -group:按照文件所述用户组来查找

     -mtime -n/+n:按照文件的修改时间来查找,-n表示文件修改时间距离现在n天以内,+n表示文件修改时间距离现在n天以外,find命令里面还有-atime,-ctime,作用都与-mtime

     -nogroup:查找无效所属组的文件,即该文件在etc/group中不存在

     -nouser:查找无效所属用户的文件,即该文件在etc/passwd中不存在

     -newer file1 !file2查找修改时间比file1新但是比file2旧的文件

     -type:按照文件类型来查找:

      b-块设备文件

     c-字符设备文件

     d-目录文件

     l-符号链接文件

     f-普通文件

     p-管道文件

     -size [n]:[c] 查找文件大小为n块的文件,带有c时表示文件大小以字节计

    -depth:表示查找文件时,先在当前目录中查找,再在当前目录的子目录中查找

(1)按照-name来查找

①、不管当前的搜索路径是什么,当我们要在自己的根目录下来搜索某个文件,可以用~来代表整个根目录,下面来看个栗子: 

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M01/80/17/wKiom1c2_O7SCxTfAAAbnSMHQy4601.png" title="QQ图片20160514182400.png" alt="wKiom1c2_O7SCxTfAAAbnSMHQy4601.png" />

其中find ~ -name “fuxin” -print 这一条命令是按照文件名来搜索文件名为fuxin的文件,并将

②、当我们在当前目录及其子目录下搜索目标文件的时候,我们可以用.来代替当前目录,如下:

其输出,注意这里的文件名要用双引号。

650) this.width=650;" src="http://s4.51cto.com/wyfs02/M00/80/14/wKioL1c3Am3DP_bDAAAgucPSAxY027.png" title="QQ截图20160514184144.png" alt="wKioL1c3Am3DP_bDAAAgucPSAxY027.png" /> 

③、当我们想在当前目录中寻找一个文件名以小写字母开头的文件,可以用

ind . -name "[a-z]*" -print,示例如下

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/80/17/wKiom1c3Av3BokwIAACIinsdJNs020.png" title="QQ截图20160514185015.png" alt="wKiom1c3Av3BokwIAACIinsdJNs020.png" />

同理大写字母只需要将a-z改成A-Z就可以了

④、当我们想在查找home目录中的文件,可以用:

find ~ -name "*" -print 或find . -print ,示例如下:

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/80/14/wKioL1c3BlLTw2iOAADUE2ZYuUw470.png" title="QQ截图20160514190013.png" alt="wKioL1c3BlLTw2iOAADUE2ZYuUw470.png" />

由于文件太多我这里只截了一部分,剩下的大家可以自己操作试试

(2)按照-perm来查找

写在前面:我们知道一个文件的权限管理有三类人:user,gorup,other,执行事件的属性有读,写,执行,三类,如果一类人用一位八进制来表示的话,我们可以用三位八进制数来表示一个文件的权限。举个例子先~

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/80/14/wKioL1c3CBKycYycAAAv0iTsEsE582.png" title="QQ图片20160514190804.png" alt="wKioL1c3CBKycYycAAAv0iTsEsE582.png" />

如上图所示,对于文件fuxin来说,对于user来说的权限为读写操作,对应的八进制为7,而对于group来说读写操作,对应的八进制为7,对于other来说权限为读操作,对应的八进制为5,所以文件fuxin的权限为775,这样的方式表示一个文件的权限就很方便了。

①、如果在当前目录下查找权限为XXX的文件,可以用:

find . -perm XXX -print,例子如下:

650) this.width=650;" src="http://s2.51cto.com/wyfs02/M02/80/17/wKiom1c3CNmjprPbAAAVfTPzZFQ387.png" title="QQ截图20160514191508.png" alt="wKiom1c3CNmjprPbAAAVfTPzZFQ387.png" />

当我们要查找一个文件的三类人的权限是一样的文件时,例如777,可以讲八进制前面加一个杠,如-007,表示777,示例如下:

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M02/80/14/wKioL1c3Cr2iPLOFAAAeh6j61vM013.png" title="QQ截图20160514191928.png" alt="wKioL1c3Cr2iPLOFAAAeh6j61vM013.png" />

(3)如何在查找一个文件的时候避开某个目录?

例如:在目录dir1下查找不在目录dir2下的文件

find test -path "dirt/dir2" -prune -o -print

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/80/14/wKioL1c3DQKxOkFRAAAlawl17tU320.png" title="QQ图片20160514192859.png" alt="wKioL1c3DQKxOkFRAAAlawl17tU320.png" />

说明:

find [-path ..] [expression] 

在路径列表的后面的是表达式 

-path "test" -prune -o -print 是 -path "test" -a -prune -o -print 的简写表达式按顺序求值, -a 和 -o 都是短路求值,与 shell 的 && 和 || 类似如果 

-path "test" 为真,则求值 -prune , -prune 返回真,与逻辑表达式为真;否则不求值 -prune,与逻辑表达式为假。如果 -path "test" -a -prune 为假,则求值 -print ,-print返回真,或逻辑表达式为真;否则不求值 -print,或逻辑表达式为真。 

这个表达式组合特例可以用伪码写为:

if -path "test" then  

-prune  

else  

-print

(4)使用-user和-nouser选项

①按文件所属主查找,-user

例:在home目录下查找所属主为user1的文件,可以用:

find ~ -user fuxin -print

650) this.width=650;" src="http://s5.51cto.com/wyfs02/M02/80/14/wKioL1c3Dl3jGjAPAADdcdUPIBs109.png" title="QQ截图20160514193459.png" alt="wKioL1c3Dl3jGjAPAADdcdUPIBs109.png" />

这文件太多我只截了一部分,以实际操作为准。

同理如果在其他目录里查找一个文件,只需要将pathname改成其他路径就好了。

②、查找属主帐户已经被删除的文件,可以使用-nouser选项。

例:在/home目录下查找所有的这类文件,命令:find /home -nouser -print

(5)使用-group和-nogroup选项

①、与-user和-nouser一样,-group和-nogroup是针对文件所属组的,若要在home目录下查找用户组为fuxin的文件,命令:

find ~ -group fuxin -print

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M01/80/18/wKiom1c3E4LCQxz7AADgwvAWOf0564.png" title="QQ图片20160514195750.png" alt="wKiom1c3E4LCQxz7AADgwvAWOf0564.png" />②、要在某个目录里查找无效所属组的文件可以用-nogroup,指令:

find pathname -nogroup -print

(6)使用-mtime -n +n选项

在系统根目录下查找距离今日1日时间的文件

find / -mtime -1 -print

650) this.width=650;" src="http://s3.51cto.com/wyfs02/M00/80/18/wKiom1c3FdrAscB7AADV5ScruG4128.png" title="QQ截图20160514200939.png" alt="wKiom1c3FdrAscB7AADV5ScruG4128.png" />同理要在目录中查找n日之前的目录,将-n改为+n即可。

(7)使用-newer file1! file2,查找某个比文件file1新且比file2旧 的文件

例如:在home中查找一个比test1新比test2旧的文件

find ~ -newer test1! test2 -print

(8)使用-type选项

在某个目录下查找文件类型为d的文件:

find ~ -type d -print

650) this.width=650;" src="http://s1.51cto.com/wyfs02/M01/80/18/wKiom1c3GqTwCeBQAAD5UIvZXIw859.png" title="QQ截图20160514203110.png" alt="wKiom1c3GqTwCeBQAAD5UIvZXIw859.png" />当查找不同类型的文件只需要改变文件类型就行了。

(9)-size选项,查找长度为n块的文件(1块等于512字节)

如果要在home下查找长度为10000字节的文件:

find ~ -size 10000c -print

如果要在home下查找长度为10000块的文件

find~ -size 10000 -print

(10)-depth选项

在使用find命令时,可能希望先匹配所有的文件,再在子目录中查找。使用depth选项就可以使find命令这样做。这样做的一个原因就是,当在使用find命令向磁带上备份文件系统时,希望首先备份所有的文件,其次再备份子目录中的文件。

在根目录中查找一个文件名为file的文件 

find / -name "file" -depth -print


650) this.width=650;" src="http://s4.51cto.com/wyfs02/M02/80/18/wKiom1c3HhuRL4liAACMorOy5UM068.png" title="QQ图片20160514204446.png" alt="wKiom1c3HhuRL4liAACMorOy5UM068.png" />

以上便是find常见指令的用法啦,写了好久,希望大家能够为我指出不足之处共同进步,谢谢啦!650) this.width=650;" src="http://img.baidu.com/hi/jx2/j_0046.gif" alt="j_0046.gif" />

本文出自 “福大馨” 博客,转载请与作者联系!

你可能感兴趣的:(linux入门(二):find指令的用法)