您的位置:首页 > 其它

find--->文件查找的"利器"

2014-03-03 06:48 204 查看
上次我们简单了解了下grep跟egrep的简单用法,这次,聊聊文件查找的“利器”find命令的简单使用方法。
find命令的使用格式:find [options][查找路径][查找条件][处理动作]。
中括号表示这些选项、参数都可以省略,所以find默认是查找的当前路径下的所有文件。
不过我们一般都会跟一个.来表示当前路径。例如:
[b]

[/b]
[b]它默认会找出当前路径下的所有文件,包括目录下的子文件。[/b]
[b] [查找路径]我们就不说了相信大家都懂,那我们简单说说几个find常用到的查找条件:[/b]
[b] 1:-name:根据文件的名称查找,例如:查找/etc下叫passwd的文件。[/b]
[b]

[/b]
[b]name命令使用注意两点:[/b]
[b] 一:按名称查找是要严格区分大小写的,所以name可以跟-i一起使用:-iname 忽略大小写进行查找。[/b]
[b] 二:如果查找的文件名称中有空格,那么这个文件名需要用双引号引起来。另外,文件名查找支持globbing(文件名通配)[/b]
[b] 我们这里可以简单题下常用的通配符,*:表示任意长度的字符;?:表示任意一个字符;[...]:表示匹配括号范围内的任意一个字符[A-Z][0-9]表示在字母A-Z的范围内,数字0-9的范围内;{...}:表示括号里的字符要逐一匹配括号前跟括号后的字符串。[/b]
[b] 2:-user:根据属主查找。[/b]
[b] 3:-group:根据属组查找。[/b]
[b]例:在/tmp目录下查找属主是root123 或者是 属组是root456的文件:

[/b]
[b]大家 可以看到我们在命令中使用了-o这个参数,那么我们接着介绍3个参数其中2个是组合条件查找,一个是取反条件查找:[/b]
[b]-a:与,前后两个条件要同时满足。[/b]
[b]-o:或,前后有1个满足即可。[/b]
[b]-not:取反“不是”的意思。例如我们查找/tmp属主不是root123的文件[/b]
[b]

[/b]
[b]接着我们要说几个比较有意思查找条件:例如,我们要查找/ttmp目录下属主不是root123且不是以txt结尾的文件:[/b]



[b]我们在用另一种方式来实现这种结果:[/b]
[b]

[/b]
[b]大家可以看到结果一样是吧?那么下面这个命令是什么意思呢?就是属主是root123或者以.txt结尾的文件 整体取反,这是什么概念?---这就是[b]奥古斯都·德·摩根定律:[/b][/b]
[b][b][b]非(P 且 Q)=(非 P)或(非 Q)

非(P 或 Q)=(非 P)且(非 Q)
[/b][/b][/b]
[b][b][b]相信大家这下很容易理解了。那么我在说一个题大家可以自己去尝试,[/b][/b][/b]
[b][b][b]例:我们要在/ttmp中找出属主不是roou456或者不是以.doc结尾的文件。大家可以自己创建几个不同用户的文件尝试去敲下命令。下面我们继续说find命令的查找条件:[/b][/b][/b]
[b][b][b] 3:-uid[/b][/b][/b]
[b][b][b] 4:-gid[/b][/b][/b]
基于用户的UID跟GID号进行查找,这种情况一般用于我们删除了某个用户,但是没有使用-r选项连用户的家目录文件一并删除,根据用户当时的UID或者GID进行查找他当时的文件。
5:-nouser:查找没有属主的文件
6: -nogroup:查找没有属组的文件。
7:-type:根据文件类型查找,那么常见的文件类型有那些:我们简单罗列一下:
-b:块设备
-c:字符设备
-d:目录文件
-f:普通文件
-l:链接文件
-p:管道文件
-s:套接字文件
使用格式: find /etc -type f 查找/etc目录下的普通类型的文件。
8:-size:根据文件大小查找,常用{+|-}n 表示大于或小于某个数字的范围,常用单位是 k,M,G
例:我们查找/tmp下 4k大小的文件:



我们会发现3.1k大小的那个文件也出现在了查找结果中。我们接着查看-|+ 4k的结果:
[b]

[/b]
主要想让大家看2个文件1个的3.1k的那个文件1个是3.0k的那个文件大家会发现在查找的结果里找不到3.1k大的那个文件。但是3.0的却可以找到。接着我们看+4k的查找结果:



[b]大家看那个4.9k大的文件也会在查找结果中显示:所以在这里我们总结一下:[/b]
[b]find /path -size n {k|M|G} 的查找范围是 n-1<x<=n[/b]
[b]find /path -size -n {k|M|G} 的查找范围是 <=n-1的范围以下。[/b]
[b]find /path -size +n {k|M|G} 的查找范围就是>n的范围。[/b]
[b] -9:根据时间戳查找,以天为单位 -atime;-mtime;-ctime;以分钟为单位就是-amin;-mmin;-cmin;我们在补充点知识点,文件的时间戳都有那些?[/b]
[b] ①:[b]Access 访问时间[/b][/b]
[b][b] ②:[b]Modify 修改时间[/b][/b][/b]
[b][b][b] ③:[b]Change 改变时间[/b][/b][/b][/b]
[b][b][b][b] 查看时间戳的命令是:stat file_Name[/b][/b][/b][/b]
[b][b][b][b] 修改时间戳的命令是:touch {-c|-m|-a} --date+要修改的时间,解释下我的花括号是里面的参数选择其一。[/b][/b][/b][/b]
[b][b][b][b] 那我们查找访问时间是3天前被访问的文件:今天是2014-03-03[/b][/b][/b][/b][b]

[/b]
[b]可以看到27号23:59:59的文件也属于三天内的,但是刚好27号正点的文件是3天外的。[/b]
[b]范围是:x=>n+1天[/b]
[b]我们要查看第三天访问过的文件:[/b]
[b]

[/b]
[b]大家可以看到刚到27号1号2月28号过了整的的时候被访问的文件是不会在查找结果中的[/b]
[b]范围是:n+1>x=>n[/b]
[b]我们在看3天内被访问的文件:[/b]
[b]

[/b]
[b]大家可以看到2月28号00:00:00被访问的文件没有被查询到 范围是 x<n-1天[/b]
[b] -10:根据权限查找:[/b]
[b] find /path -perm [+|-] MODE[/b]
[b] +|-省略表示做精确匹配 例:[/b]
[b] 查找/etc/目录下权限为600的文件:#find /etc/ -perm 600[/b]
[b] +MODE:表示任何一类用户的任何一位权限匹配即可[/b]
[b]例: 在/ttmp文件的权限默认为644,我要查找+222权限的文件[/b]
[b]

[/b]
[b]可以看到只要有1个位的权限匹配到就会列出所匹配的文件。如果是+002则不会显示:常用于查找某类用户的某特定权限是否存在。 [/b]
[b]

[/b]
[b]-MODE:表示[b]每类用户的指定要检查的权限位都匹配[/b][/b]
[b][b]例:查找所有用户都有读的权限 -444[/b][/b]
[b][b]find /etc/ -perm -444[/b][/b]
[b][b]

[/b][/b]
[b][b]

[/b][/b]
[b][b] 处理动作:默认是-print打印输出[/b][/b]
[b][b] -ls:以常格式输出各文件信息[/b][/b]
[b][b] -exec COMMAND \; 对查找到的文件执行指定的命令[/b][/b]
[b][b]例如:[/b][/b]
[b][b]

[/b][/b]
[b][b] 与-exec等同的命令是 -ok COMMAND \;[/b][/b]
[b][b] OK,find命令常用的基本知识就介绍到这。欢迎大家指出不足之处,相互学习。谢谢![/b][/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  find 文本查找