每一种操作系统都由成千上万的文件组成,Linux系统更是一切皆文件,我们都能很轻松使用windows下的文件查找功能,(Everything也是一款很好用的文件查找软件),但是对linux这一功能可能并不是很熟悉,因为linux系统下文件没有固定的文件名后缀,而且一个相同的文件在不同的发行版,可能会有不同,所以牢牢掌握linux系统的查找命令就会显得十分重要,学习起来也会更加顺利,而且在学习的过程中你会发现linux的文件查找功能真的很强大!!
1.which
2.whereis
3.whatis
4.locate
5.find
6.type
因为对于type和grep,有很多不同的看法,所以这里所有的命令都会分析。
在学习每个命令之前,我都会习惯性的man一下,先看Linux下对这条命令的用法解释等。
一、which
从文档可以看出:which命令的作用是,在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。
参数信息:
-n<文件名长度>:制定文件名长度,指定的长度必须大于或等于所有文件中最长的文件名;
-p<文件名长度>:与-n参数相同,但此处的<文件名长度>包含了文件的路径;
-w:指定输出时栏位的宽度;
-V:显示版本信息。
我们先来搜索一个不存在的命令:
no hello in + 路径,这个路径就是PATH环境变量的路径,我们可以验证一下
现在我们来查找一条存在的命令:
which ls 和 which grep
二、whereis
从文档可以看出:whereis命令只能用于程序名的搜索,
参数信息:
-b:只查找二进制文件;
-B<目录>:只在设置的目录下查找二进制文件;
-f:不显示文件名前的路径名称;
-m:只查找说明文件;
-M<目录>:只在设置的目录下查找说明文件;
-s:只查找原始代码文件;
-S<目录>只在设置的目录下查找原始代码文件;
-u:查找不包含指定类型的文件。
如果省略参数,则返回所有信息。
例:
whereis ls 和 whereis grep
三、whatis
whatis命令是用于查询一个命令执行什么功能,并将查询结果打印到终端上
whatis 命令相当于 man -f 命令
whatis cp\ whatis grep\ whatis chown\ whatis man
四、locate
locate命令和slocate命令都用来查找文件或目录。
用法:locate/slocate (选项)参数
locate命令其实是find -name的另一种写法,但是locate要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。
显示没有这个文件或文件夹。这时候就要进行这个命令:updatedb。Linux系统自动创建/var/lib/locatedb数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。
这样就可以用locate命令查询文件。
参数:
-d<目录>或--database=<目录>:指定数据库所在的目录;
-u:更新slocate数据库;
--help:显示帮助;
--version:显示版本信息。
五、find------------(很重要)
find命令用来在指定目录下查找文件。
任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
5.1 使用格式:find <指定目录><指定条件><指定动作>
- <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。
- <指定条件>: 所要搜索的文件的特征。
- <指定动作>: 对搜索结果进行特定的处理。
5.2 参数选项
find命令是最常见和强大的查找命令,用它可以找到任何你想查找的内容。因此它的参数也是非常多的。
大概可以归类为以下几种:
1.根据文件或正则表达式进行匹配。
2.根据时间查找。
3.根据文件权限(所属组,拥有者)查找。
4.借助-exec与其他命令结合使用。
下面我根据上面的归类,讲解find各个参数的使用。
1.列出当前目录及子目录下所有文件和文件夹 find .
文件太多,截图没办法截完。
3.在/home下查找以.txt结尾的文件名 但忽略大小写。 find /home -iname "*.txt"
文件太多,截图只是一部分。
4.查找当前目录及子目录下所有以.txt和.pdf结尾的文件
find . -name "*.txt" -o -name "*.pdf"
find . \( -name "*.txt" -o -name ".pdf" \)
5.匹配文件路径或文件
find /usr/ -path "*local"
6.基于正则表达式匹配文件路径
find . -regex ".*\(\.txt\|\.pdf\)$"
find . -iregex ".*\(\.txt\|\.pdf\)$"
7.找出/home/zhangxue/Study路径下不是以.txt结尾的文件
8.根据文件类型查找
9.
10.
UNIX/Linux文件系统每个文件都有三种时间戳: 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
搜索最近7天内访问过的文件
查找恰好7天前访问的文件
find . -type -atime 7
查找超过7天访问的文件
find . -type -atime +7
查找访问时间超过10分钟的文件
find . -type -amin +10
找出比test.cpp修改时间更长的文件
find . -type f newer test.cpp
11.根据文件大小进行匹配
文件大小单元: b —— 块(512字节) c —— 字节 w —— 字(2字节) k —— 千字节 M —— 兆字节 G —— 吉字节
查找大于10k的文件
find . -type f -size +10k
查找小于10K的文件
find . -type f -size -10k
删除匹配文件
在查找命令后加上 -delete
删除以.txt结尾的文件
find . -type -name "*.txt" -delete
12.根据文件权限/所有权进行匹配
查找文件权限为777的文件
find . -type -f -prem 777
查找文件权限不是664的文件
find . -type -f ! -prem 664
13.借助-exec选项与其他命令结合使用
查找到拥有者为root的文件,并将它的拥有者改为zhangxue
find . -type f -user root -exec chown zhangxue {} \
查找所有以.txt文件结尾的文件,并把它写到all.txt文件中去
find . -type f -name "*.txt" -exec cat {}\;> all.txt
列出所有长度为0
find . -empty
六、type
type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令
除此之外,linux还有很强大的文件搜索的功能,在以后学习的过程中我会慢慢积累,加到博客上去。