本文共 15382 字,大约阅读时间需要 51 分钟。
一、linux可以用于查找的相关命令(本次重点在于说明find用法)
1、find:
是最为强大的查找命令,可以查找到你所想要找的所有文件
2、locate
同样也是一个文件查找命令,locate命令其实是"find-name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库,这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。
3、whereis
whereis命令只能用于程序名称的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
1 2 | [root@localhost ~] # whereis yum yum: /usr/bin/yum /etc/yum /etc/yum .conf /usr/share/man/man8/yum .8.gz |
4、which
which命令的作用是,在PATH环境变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以查看某个系统命令是否存在,以及执行的到底是哪一个位置的可执行文件(即命令)
1 2 | [root@localhost ~] # which yum /usr/bin/yum |
5、type
type命令其实不能算查找命令,它是用来查找某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。
1 2 | [root@localhost ~] # type yum yum is /usr/bin/yum |
从以上各命令的功能可以看出,虽然在linux中有诸多可以用于查找的命令,但能够基于文件(命令也是一个可执行文件之一)层次查找的只有find与locate,两者区别也比较明显。
find与loacte的区别
find:
优点:可实时查找,精确匹配
缺点:范围遍历,速度慢
locate:
优点:查找速度快
缺点:依赖于数据库、非实时查找
二、find 用法
格式:
find [options] [查找路径] [查找条件] [处理动作]
查找路径:默认为当前目录
查找条件:默认为查找指定路径下的所有文件
处理动作:默认为显示
1、条件查找(支持文件名通配)
-name "File_name" | 按名称查找 | ||||
| |||||
-name "*" | 查找任意长度的任意字符 | ||||
| |||||
-name "?" | 包含任意单个定符 | ||||
| |||||
-name "[]" | 范围内的任意字符 | ||||
| |||||
-name "[^]" | 范围外的任意字符 | ||||
| |||||
-iname "File_name" | 查找时不区分字符大小写 | ||||
| |||||
-user UserName | 根据属主查找 | ||||
| |||||
-group GroupName | 根据属组查找 | ||||
| |||||
-uid UID | 按照用户的UID查找 | ||||
| |||||
-gid GID | 按照用户的的GID查找 | ||||
| |||||
-nouser | 查无有效属主的文件,即文件的属主在/etc/passwd中不存在 | ||||
| |||||
-nogroup | 查无有效属组的文件,即文件的属组在/etc/group中不存在 | ||||
|
2、组合条件
-a | 与,同时满足(and) | ||
| |||
-o | 或(or) | ||
| |||
-not, ! | 非,取反 | ||
|
3、文件类型查找(type)
-type f | 普通文件 | ||
| |||
-type f | 目录 | ||
-type b | 块设备 | ||
-type c | 字符设备 | ||
-type l | 符号链接文件 | ||
-type p | 命名管道 | ||
-type s | 套接 |
其它文件类型查找方法与f用法相同。
4、文件大小查找(-size [+|-]#),Unit(c:字节,k:KB,M:MB,G:GB
-size # | 指定大小(取值是不大于) | ||
-size +# | 大于# | ||
| |||
-size: -# | 小于# |
5、时间戳查找
以天为单位(time):
-atime [+|-]#
-mtime [+|-]# | 修改时间 | ||
-ctime [+|-]# | 改变时间 | ||
-atime [+|-]# | 访问时间 | ||
|
以分钟为单位(min)[+|-]#:
-amin [+|-]# | 访问时间 | ||
-mmin [+|-]# | 修改时间 | ||
| |||
-cmin [+|-]# | 改变时间 |
6、权限查找
-perm [+|-]MODE
-perm MODE | 精确匹配 | ||
| |||
-perm +MODE | 任何一类用户的任何一位权限匹配;常用于查找某类用户的某特定权限是否存在 | ||
| |||
-MODE | 每类用户的指定要检查的权限位都匹配 | ||
|
7、处理动作:
打印在标准输出上(默认); | |||
-ls | 以长格式输出各文件信息 | ||
-exec COMMAND {} \; | 对查找到的文件执行指定的命令 | ||
| |||
-ok COMMAND {} \; | 交互式的-exec | ||
|
find把查找到的所有文件一次性地传递给-exec所指定的命令
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@localhost tmp] # ls -l *.doc -rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc -rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc [root@localhost tmp] # find /tmp -iname "*.doc " | rm -rf [root@localhost tmp] # ls -l *.doc -rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.doc -rw-r--r-- 1 root root 0 Feb 26 16:52 WER.doc [root@localhost tmp] # find /tmp -iname "*.doc" -exec mv {} {}x \; [root@localhost tmp] # ls -l *.docx -rw-r--r-- 1 root root 0 Feb 26 16:47 asdfadf.docx -rw-r--r-- 1 root root 0 Feb 26 16:53 fdsfd.docx -rw-r--r-- 1 root root 0 Feb 26 16:52 WER.docx -rw-r--r-- 1 root root 0 Feb 26 16:47 xxx.docx |
注:find:把查找到的所有文件一次性地传递给-exec所指定的文件
管道传递的是字符串,不能使用文件操作指令处理,
如果要用可以使用以下命令
1 2 3 4 5 6 7 8 9 | [root@localhost tmp] # touch asdf.c [root@localhost tmp] # touch asdf.h [root@localhost tmp] # touch asdf.so [root@localhost tmp] # touch asdf.ppt [root@localhost tmp] # touch asdf.doc [root@localhost tmp] # touch study.dox [root@localhost tmp] # find -mmin 1 | xargs rm -rf [root@localhost tmp] # ls #此处的-mmin 1表示修改时间到从1分钟不到2分钟之间的文件删除,慎用,我刚才#就是+1,结果一分钟之前的所有文件就这么没了~~~~悲剧了! |
find |xargs COMMAND(查找大文件很有用)
====================================完===================================================