Linux系统:文件搜索命令

虚拟系统:CentOS6.8

目录

一、命令文件相关

1、which命令

2、type命令

3、whereis命令

4、whatis命令

5、apropos命令

二、搜索任意文件或目录

1、find命令

2、locate命令


 

一、命令文件相关

1、which命令

命令路径:/usr/bin/which                 
执行权限:所有用户                             
功能描述:查找系统命令的可执行文件所在目录并显示 
语法:which  [命令名称]

在Linux中,当我们使用一条命令时,实际上是执行了相关的脚本文件。

测试1:

测试2:

可见,我们使用which是找不到cd的命令文件的,其实这就涉及到内置命令和外部命令。

内置命令在系统启动时就调入内存,是常驻内存的,没有相关的可执行文件,所以执行效率高。

外部命令是系统的软件功能,用户需要时才从硬盘中读入内存。

那么问题来了,如何查看命令是否为内置命令呢?

2、type命令

命令路径:内置命令
执行权限:所有用户
功能描述:用于显示命令的类型或命令的所在位置
语法格式:type [命令名称]

测试:

3、whereis命令

命令路径:/usr/bin/whereis
执行权限:所有用户
功能描述:用于查看与命令有关的路径以及命令的帮助文档所在的位置
语法格式:whereis [命令名称]

选项:

  • s:只找source来源文件
  • b:只找binary格式的文件
  • m:只查找在说明目录manual(man)里的文件
  • u:查找不在上述三个选项当中的其他特殊文件

在linux下维护的一个文件数据库内进行查看的,执行效率高

此命令只在几个目录下进行查询:/bin、/sbin、/usr/share/man/,因此执行速度非常快。没有添加任何选项时,就会显示所有的文件。

测试:

4、whatis命令

命令路径:/usr/bin/whatis
执行权限:所有用户
功能描述:查看命令的作用。但是不像man命令显示很多内容,还能显示帮助文档名。
语法格式:whatis [命令名称]

在linux下维护的一个文件数据库内进行查看的,执行效率高

测试:

5、apropos命令

命令路径:/usr/bin/apropos
执行权限:所有用户
功能描述:查看命令的简介信息,与whatis功能相似
语法格式:apropos [命令名称]

与whatis相同在linux下维护的一个文件数据库内进行查看的,执行效率高

那么如果是一个新安装的软件,这两个命令可能就查不到这个软件的简介信息

这时候我们需要使用makewhatis更新上述两个命令对应的数据库

二、搜索任意文件或目录

1、find命令

命令路径:/usr/bin/find
执行权限:所有用户
功能描述:查看linux系统下的任意文件,会遍历整个磁盘(效率低)
语法格式:find [path] [option] [filename]
选项:

  • name:按照名称查找
  • user:按照文件所有者查找
  • size:按照文件的大小查找。默认是按照文件的数据块的个数进行查找的,数据块:512字节
  • -type:查找并列出文件详细,文件类型:bcdlps
  • -exec:对find命令查找到的文件进行额外的命令操作
  • -ok:与-exec相似,只是在每次执行操作前询问是否执行
  • perm:查找完全符合数字权限的文件或目录
  • atime:访问时间(access time)。显示的是文件中的内容最后被访问的时间。默认单位是天
  • mtime:修改时间(modify time)。显示的是文件内容被修改的最后时间。默认单位是天
  • ctime:状态数据修改时间(change time),显示的是文件的属性,如权限,所有者,链接数等等发生改变的时间默认单位是天
  • amin:与atime相似,默认单位是分钟
  • mmin:与mtime相似,默认单位是分钟
  • cmin:与ctime相似,默认单位是分钟

   ……

测试1:以文件名的形式 -name 在某一目录下查找文件

测试2:以文件大小的形式 -size 在某一目录下查找文件

测试3:使用 -exec 对find命令查找到的文件进行额外的命令操作

格式:-exec 【command】【选项】 {}  \;

{}:固定写法,集合的含义,表示find查询出来的结果集。
\:为转义字符,对;进行转义,表示命令结束。注意:集合和转义字符之间需要有空格

find功能虽然强大,但是因为要从磁盘上进行查找,因此当文件系统内的文件数量很多时,性能低,速度慢。指定目录后,也会遍历子目录,因此建议要尽可能的精确指定查询的目录,以便提高效率。尽量不要在根目录下直接查询文件。

2、locate命令

命令路径:/usr/bin/locate
执行权限:所有用户
功能描述:通过关键字来查找文件或目录的(只要文件名或目录名中含有此关键字
语法格式:locate [关键字]

选项:

  • i:忽略大小写;
  • c:不输出文件名,只返回文件的数量
  • l:只输出查找出来的文件的前几个。如:-l 5,输出前五个文件
  • r:列出数据库中维护的文件数目和数据。
  • S:查询文件数据库里的数据

其实是“find -name”的另一种写法,但是要比find快得多,原因在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb)

测试:

要注意的是实际搜索的是文件名包含ls的文件

locate命令不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db 。这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次,因此,我们在用whereis和locate 查找文件时,有时会找到已经被删除的数据,或者刚刚建立文件,却无法查找到,原因就是因为数据库文件没有被更新。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

搜索效率比较:whereis、whatis、apropos、locate效率相对比find较高,因为它们都是在对应的数据库中查找

猜你喜欢

转载自blog.csdn.net/qq_39192827/article/details/85963035
今日推荐