Linux的五个查找命令

每一种操作系统都由成千上万的文件组成,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:显示版本信息。

我们先来搜索一个不存在的命令:

 which helloLinux的五个查找命令_第1张图片

  no hello in + 路径,这个路径就是PATH环境变量的路径,我们可以验证一下Linux的五个查找命令_第2张图片

现在我们来查找一条存在的命令:

 which ls 和 which grep

Linux的五个查找命令_第3张图片





二、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
Linux的五个查找命令_第4张图片

四、locate

locate命令和slocate命令都用来查找文件或目录。

用法:locate/slocate (选项)参数


locate命令其实是find -name的另一种写法,但是locate要比后者快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/locatedb,这个数据库中含有本地所有文件信息。

有时候运行locate命令会出现以下错误:Linux的五个查找命令_第5张图片

 显示没有这个文件或文件夹。这时候就要进行这个命令:updatedb。Linux系统自动创建/var/lib/locatedb数据库,并且每天自动更新一次,所以使用locate命令查不到最新变动过的文件。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。Linux的五个查找命令_第6张图片

这样就可以用locate命令查询文件。

参数:

-d<目录>或--database=<目录>:指定数据库所在的目录; 

-u:更新slocate数据库;

--help:显示帮助;

--version:显示版本信息。

五、find------------(很重要)

find命令用来在指定目录下查找文件。

任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。


5.1 使用格式:find <指定目录><指定条件><指定动作>

 - <指定目录>: 所要搜索的目录及其所有子目录。默认为当前目录。

- <指定条件>: 所要搜索的文件的特征。

- <指定动作>: 对搜索结果进行特定的处理。

5.2 参数选项

find命令是最常见和强大的查找命令,用它可以找到任何你想查找的内容。因此它的参数也是非常多的。

大概可以归类为以下几种:

1.根据文件或正则表达式进行匹配。

2.根据时间查找。

3.根据文件权限(所属组,拥有者)查找。

4.借助-exec与其他命令结合使用。

下面我根据上面的归类,讲解find各个参数的使用。

1.列出当前目录及子目录下所有文件和文件夹 find .

Linux的五个查找命令_第7张图片

         2.在/home下查找以.txt结尾的文件名 find /home -name "*.txt"

Linux的五个查找命令_第8张图片

文件太多,截图没办法截完。

3.在/home下查找以.txt结尾的文件名 但忽略大小写。 find /home -iname "*.txt"Linux的五个查找命令_第9张图片

文件太多,截图只是一部分。

4.查找当前目录及子目录下所有以.txt和.pdf结尾的文件

find . -name "*.txt" -o -name "*.pdf"

find . \( -name "*.txt" -o -name ".pdf" \)

Linux的五个查找命令_第10张图片

5.匹配文件路径或文件

find /usr/ -path "*local"

Linux的五个查找命令_第11张图片

6.基于正则表达式匹配文件路径

find . -regex ".*\(\.txt\|\.pdf\)$"

find  . -iregex ".*\(\.txt\|\.pdf\)$"

Linux的五个查找命令_第12张图片

7.找出/home/zhangxue/Study路径下不是以.txt结尾的文件

Linux的五个查找命令_第13张图片

8.根据文件类型查找

Linux的五个查找命令_第14张图片

9.

Linux的五个查找命令_第15张图片

Linux的五个查找命令_第16张图片

10.

UNIX/Linux文件系统每个文件都有三种时间戳: 访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。 修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。 变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

搜索最近7天内访问过的文件

Linux的五个查找命令_第17张图片

查找恰好7天前访问的文件

find . -type -atime 7

查找超过7天访问的文件

find . -type -atime +7

查找访问时间超过10分钟的文件

find . -type -amin +10

找出比test.cpp修改时间更长的文件

find . -type f newer test.cpp

Linux的五个查找命令_第18张图片


11.根据文件大小进行匹配

文件大小单元: b —— 块(512字节) c —— 字节 w —— 字(2字节) k —— 千字节 M —— 兆字节 G —— 吉字节

查找大于10k的文件

find . -type f -size +10k

查找小于10K的文件

find . -type f -size -10k

Linux的五个查找命令_第19张图片

Linux的五个查找命令_第20张图片

删除匹配文件

在查找命令后加上 -delete

删除以.txt结尾的文件

find . -type -name "*.txt" -delete

12.根据文件权限/所有权进行匹配

查找文件权限为777的文件

find . -type -f  -prem 777

Linux的五个查找命令_第21张图片

查找文件权限不是664的文件

find . -type -f ! -prem  664 

Linux的五个查找命令_第22张图片

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的五个查找命令_第23张图片


除此之外,linux还有很强大的文件搜索的功能,在以后学习的过程中我会慢慢积累,加到博客上去。














你可能感兴趣的:(Linux,Linux基础知识)