find
find的使用格式如下:
$ find <directory> <pattern> <commands>
- <directory>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <pattern>: 所要搜索的文件的特征。
- <commands>: 对搜索结果进行特定的处理。
如果什么参数也不加,find默认搜索当前目录及其子目录,并且不过滤任何结果(也就是返回所有文件),将它们全都显示在屏幕上。
find的使用实例:
$ find . -name 'my*'
搜索当前目录(含子目录,以下同)中,所有文件名以my开头的文件。
$ find . -name 'my*' -ls
搜索当前目录中,所有文件名以my开头的文件,并显示它们的详细信息。
$ find . -type f -mmin -10
搜索当前目录中,所有过去10分钟中更新过的普通文件。如果不加-type f参数,则搜索普通文件+特殊文件+目录。
常用选项:
-name 名字
-perm 权限 -perm 755 查找文件主人可读写执行,其他用户可读执行的文件
-prune 忽略文件夹 如果同时使用-depth选项,那么-prune将被find命令忽略
-user -group 根据用户或者组来查找
-mtime +n -n -mmin等度量时间的查找方式 -mtime +10 10天前修改的文件;-mtime -10 10天内修改的文件;m修改 a访问 c改变状态
-type f 普通文件 b 块设备文件 d 目录 c 字符设备文件 p 管道文件 l 符号链接文件
-size n 查找文件长度为n的文件,带c代表文件长度以字节计 -size +1000000c 查找文件长度大于1M字节的文件 -size +10 查找大于10块的文件(一块相当于512字节)
-depth 查找时先查找当前目录的文件,然后再在其子目录查找
上面讲的是查找pattern,下面看一下commands
commands
-print 打印
-exec
1) command命令的终止,使用 ';' (分号)来判定,在后面必须有一个 ';' 出于不明原因, ';'需要用'\'来转义 ,所以命令整体形式为: -exec rm -f {} \;
2) '{}',使用{}来表示文件名,也就是find前面处理过程中过滤出来的文件,用于command命令进行处理
-ok 和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行
http://bbs.linuxtone.org/thread-472-1-1.html
http://bbs.linuxtone.org/thread-1696-1-1.html
grep
同时显示匹配行上下的?行,如:grep -2 pattern filename同时显示匹配行的上下2行。
-b,--byte-offset
打印匹配行前面打印该行所在的块号码。
-c,--count
只打印匹配的行数,不显示匹配的内容。
-f File,--file=File
从文件中提取模板。空文件中包含0个模板,所以什么都不匹配。
-h,--no-filename
当搜索多个文件时,不显示匹配文件名前缀。
-i,--ignore-case
忽略大小写差别。
-q,--quiet
取消显示,只返回退出状态。0则表示找到了匹配的行。
-l,--files-with-matches
打印匹配模板的文件清单。
-L,--files-without-match
打印不匹配模板的文件清单。
-n,--line-number
在匹配的行前面打印行号。
-s,--silent
不显示关于不存在或者无法读取文件的错误信息。
-v,--revert-match
反检索,只显示不匹配的行。
-w,--word-regexp
如果被\<和\>引用,就把表达式做为一个单词搜索。
-V,--version
显示软件版本信息。
locate
locate命令其实是"find -name"的另一种写法,但是要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
locate命令的使用实例:
$ locate /etc/sh
搜索etc目录下所有以sh开头的文件。
$ locate ~/m
搜索用户主目录下,所有以m开头的文件。
$ locate -i ~/m
搜索用户主目录下,所有以m开头的文件,并且忽略大小写。
whereis
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。如果省略参数,则返回所有信息。
whereis命令的使用实例:
$ whereis grep
which
which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
which命令的使用实例:
$ which grep
type
type命令其实不能算查找命令,它是用来区分某个命令到底是由shell自带的,还是由shell外部的独立二进制文件提供的。如果一个命令是外部命令,那么使用-p参数,会显示该命令的路径,相当于which命令。
type命令的使用实例:
$ type cd
系统会提示,cd是shell的自带命令(build-in)。
$ type grep
系统会提示,grep是一个外部命令,并显示该命令的路径。
$ type -p grep
加上-p参数后,就相当于which命令。
http://www.ruanyifeng.com/blog/2009/10/5_ways_to_search_for_files_using_the_terminal.html