Linux文件/目录搜索综合讲解(中级难度)

本实训主要讲解Linux中文件查找和定位方法。

Linux系统中查找文件的方法不同于Windows系统,在Windows系统中查找文件的方法比较容易,只要在桌面上点击“开始”-“搜索”中就能按照各种方式进行查找,对于Linux新手来讲,在Linux系统中查找一个文件比较空难,它不像Windows那样方便,在Linux中通常使用命令来查找文件,常见查找文件的命令有locatewhichwhereisfind等。

本实训主要讲解如何在Linux系统中查找文件/目录。

相关知识(使用locate命令查找系统中的文件)

locate

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

locate命令要比其他查找文件命令(例如:find)快得多,原因在于它不搜索具体目录,而是搜索一个数据库/var/lib/mlocate/mlocate.db

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

接下让我们详细的学习locateupdatedb的使用方法。

locate具体命令如下:

locate 命令参数 文件/目录

常用命令参数如下:

  1. -c, --count 只输出找到的数量;
  2. -d, --database DBPATH 使用DBPATH指定的数据库,而不是默认数据库/var/lib/mlocate/mlocate.db;
  3. -i, --ignore-case 忽略大小写;
  4. -q, --quiet 安静模式,不会显示任何错误讯息;
  5. -e, --existing 只显示当前存在的文件条目;

案例演示1

搜索etc目录下以pass开头的文件或目录,具体使用如下命令:

 
  1. locate /etc/pass

案例演示

搜索包含passwd字母的文件或目录总个数,具体使用如下命令:

 
  1. locate -c passwd

updatedb

updatedb命令用来创建或更新locate命令所必需的数据库文件。

updatedb命令的执行过程较长,因为在执行时它会遍历整个系统的目录树,并将所有的文件信息写入locate数据库文件中。

具体命令如下:

updatedb 命令参数

常用参数如下:

 
  1. -o<文件>:忽略默认的数据库文件,使用指定的slocate数据库文件;
  2. -U<目录>:更新指定目录的slocate数据库;
  3. -v:显示执行的详细过程;

执行权限:updatedb必须以root权限才能执行,如果是普通用户想执行updatedb时,需要在命令前加sudo命令来提升权限为root权限。

案例演示1

新创建一个testFile文件,更新locate数据库后使用locate命令定位该文件,具体使用如下命令:

 
  1. touch testFile
  2. locate testFile
  3. sudo updatedb
  4. locate testFile

可以看到新创建文件后直接使用locate去查找是没有任何结果的,只有更新数据库后才能查找到新创建的文件。

案例演示2

删除testFile文件,更新locate数据库后使用locate命令定位该文件,具体使用如下命令:

 
  1. rm testFile
  2. locate testFile
  3. sudo updatedb -U ./
  4. locate testFile

第三条命令是只更新testFile所在目录的数据库,这样速度比较快,如果不使用该参数,则会更新整个文件系统的内容。

可以看到删除文件后直接使用locate去查找是可以定位到的,但是此时文件已经不存在了,原因是没有马上更新数据库。

在编辑器中补充代码,使用locate命令查找系统中的文件,具体编程要求如下:

  • 使用locate命令查找系统中所有包括group字母的文件或目录的总个数;

  • 使用locate命令定位系统中最新创建的文件newFile

 

 

相关知识(使用whichwhereis命令查找系统中的文件)

在第一关中我们讲解了locate命令的使用方法以及其原理,本关将介绍 Linux 另外两个定位文件的命令,分别是whichwhereis

which命令主要是用来查找系统PATH目录下的可执行文件,说白了就是查找那些我们已经安装好的可以直接执行的命令。

whereis命令可以用来查找二进制(命令)、源文件、man文件。与which不同的是这条命令可以是通过文件索引数据库而非PATH来查找的,所以查找的面比which要广。

接下让我们详细的学习whichwhereis的使用方法。

which

which命令用于查找并显示给定命令的绝对路径,环境变量PATH中保存了查找命令时需要遍历的目录。which指令会在环境变量$PATH设置的目录里查找符合条件的文件。也就是说,使用which命令,就可以看到某个系统命令是否存在,以及执行的到底是哪一个位置的命令。

whichshell内建命令,内建命令要比系统论命令有比较高的执行效率。

具体命令如下:

which 命令

案例演示:

使用which命令定位passwd命令的位置,具体使用如下命令:

 
  1. which passwd

可以看到passwd命令是存放在/usr/bin目录下。

whereis

whereis命令用来定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。

具体命令如下:

whereis 命令参数 文件名

常用命令参数如下:

 
  1. -b:只查找二进制文件;
  2. -B<目录>:只在设置的目录下查找二进制文件;
  3. -m:只查找说明文件;
  4. -M<目录>:只在设置的目录下查找说明文件;
  5. -s:只查找原始代码文件;
  6. -S<目录>只在设置的目录下查找原始代码文件;

案例演示1

使用whereis命令查找passwd命令所有信息,包括二进制文件位置、说明文件位置和源码文件位置,具体使用如下命令:

 
  1. whereis passwd

案例演示2

使用whereis命令仅查找passwd命令二进制文件位置,具体使用如下命令:

 
  1. whereis -b passwd

可以看到passwd命令存在的位置有两处,分别是/usr/bin/passwd/usr/bin/X11/passwd,那么在我们执行passwd时,如何确定是执行的哪一个,此时我们就可以使用which命令来定位首先被执行的命令位置。

在编辑器中补充代码,使用whichwhereis命令定位命令位置,具体编程要求如下:

  • 使用which命令定位useradd命令的位置;

  • 使用whereis命令查询useradd命令的所有信息,包括二进制文件位置、说明文件位置和源码文件位置;

  • 使用whereis命令仅查找useradd命令说明文件位置。

 

相关知识(使用find命令查找系统中的文件/目录)

通过以上两关的学习,我们已经学会了使用locate命令查询系统中的文件/目录,使用whichwhereis命令来定位可执行文件的位置。接下来让我们一起学习查询文件/目录的最后一个命令-find

find命令与locate命令相比各有各的优缺点,locate命令的优点就是查找速度比find命令快的多,但是缺点也比较明显,locate命令无法查找最新添加的文件/目录以及会查找出来已经过期的文件/目录。

相反find命令的优点就是可以按照自定义的方法查找任何文件,缺点就是查询速度比较慢,因为是通过遍历硬盘来查找而不像locate命令事先建立好数据库来进行查找。

接下让我们详细的学习find的使用方法。

find

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

具体命令如下:

find 查找目录 查找参数 查找内容

常用查找参数如下:

 
  1. -amin<+|-分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
  2. -atime<+|-24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
  3. -cmin<+|-分钟>:查找在指定时间之时被更改过的文件或目录;
  4. -ctime<+|-24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;
  5. -mmin<+|-分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
  6. -mtime<+|-24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
  7. -depth:从指定目录下最深层的子目录开始查找;
  8. -exec<执行指令>:假设find指令的回传值为True,就执行该指令;
  9. -follow:排除符号连接;
  10. -gid<群组识别码>:查找符合指定群组识别码的文件或目录;
  11. -group<群组名称>:查找符合指定群组名称的文件或目录;
  12. -uid<用户识别码>:查找符合指定的用户识别码的文件或目录;
  13. -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;
  14. -name<范本样式>:指定字符串作为寻找文件或目录的范本样式;
  15. -iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
  16. -inum<inode编号>:查找符合指定的inode编号的文件或目录;
  17. -newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
  18. -size<+|-|=文件大小>:查找符合指定的文件大小的文件;
  19. -type<文件类型>:只寻找符合指定的文件类型的文件;
  20. -a:是前后条件都要满足;
  21. -o :是满足一个条件就好;
 
  1. +:表示大于设置值的文件;
  2. - :表示小于设置值的文件;
  3. = :表示等于设置值的文件;

注意:通常使用find命令的时候使用root权限,这样就有权限查找任何目录下的内容,本平台默认权限是root权限,所有在本平台上执行find命令时不需要加sudo

案例演示1

查找/etc目录下以my开头以.conf结尾的文件或目录,具体使用如下命令:

 
  1. sudo find /etc -name "my*.conf"

*表示任意字母。

案例演示2

查找/etc目录下在超过7天前被访问的文件或目录,具体使用如下命令:

 
  1. sudo find /etc -atime +7

案例演示3

查找/etc目录下恰好在7天前被访问的文件或目录,具体使用如下命令:

 
  1. sudo find /etc -atime 7

案例演示4

查找/etc目录下在5分钟内被访问的文件或目录,具体使用如下命令:

 
  1. sudo find /etc -amin -5

-type 文件类型使用方法

常见文件类型:

 
  1. f:普通文件
  2. l:符号链接
  3. d:目录
  4. c:字符设备
  5. b:块设备
  6. s:套接字
  7. p:Fifo

案例演示:

查找/etc目录下以my开头的目录,具体使用如下命令:

 
  1. sudo find /etc -name "my*" -a -type d

size <+|-|=文件大小>使用方法

常见文件大小单位:

 
  1. b —— 块(512字节)
  2. c —— 字节
  3. w —— 字(2字节)
  4. k —— 千字节
  5. M —— 兆字节
  6. G —— 吉字节

案例演示:

查找/etc目录下大于1M的文件,具体使用如下命令:

 
  1. sudo find /etc -size +1M

-exec使用方法

具体使用方法如下:

find … -exec 要执行的命令 {} \;

-exec选项后面跟随着所要执行的命令或脚本,然后是一个空格一对儿{}一个空格和一个\;

注意:要执行的命令和{之间以及}\;之间的空格是不能省略的。

案例演示:

查找/etc目录下大于1M的文件/目录的详细信息,具体使用如下命令:

sudo find /etc -size 1M -exec ls -l {} \;

编程要求

请在编辑器中补充代码,使用find命令查找文件或目录,具体编程要求如下:

  • 使用find命令查找当前目录中所有以.conf结尾的文件/目录;

  • 使用find命令查找当前目录中所有以my开头的目录;

  • 使用find命令查找/root目录中大于1M的文件;

  • 使用find命令查找/root目录中类型为符号链接且文件名以 Link 结尾的所有链接详细数据(提示使用ls -l查看文件详细数据)。

 

敢拼搏,不放弃,加油 !加油!加油!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程少年 ️

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值