Linux下文件查找命令及使用技巧

前言

在使用Linux系统工作一段时间后,可能会积累很多文件,有的是系统本身自带的文件,有的是用户自己的文件,还有共享文件等等,我们有时候经常忘记某份文件放在磁盘中的哪个地方,Linux中通过命令可以帮助我们查找磁盘上的任意文件,现在就来看看这些命令如何使用。

Linux下主要有以下五个查找命令:

find
which
type
whereis
locate

find

find是Linux最常见和最强大的查找命令。可以根据给定的路径和表达式查找的文件或目录。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。

例如:
列出当前目录及子目录下所有文件和文件夹
在这里插入图片描述

语法格式:

find[路径] [参数] [查找和搜索范围]

常用参数:

-name 按名称查找
-size 按大小查找
-user 按属性查找
-type 按类型查找
-iname 忽略大小写

以名称为条件

使用-name参数查看/etc目录下面所有的.conf结尾的配置文件:

find /etc -name “*.conf”

在这里插入图片描述
搜索的信息太多,只截屏一小半。

同上,但忽略大小写

find /etc -iname “*.conf”

以文件大小为条件

常用单位有:

k 千字节
M 兆字节
G 吉字节
c 字节
b 块,一般为512字节
w 字大小,两个字节

使用-size参数查看当前目录下面大于1k的文件:

find ./ -size +1k

在这里插入图片描述搜索小于10KB的文件:

find ./ -size -10k

在这里插入图片描述

以文件类型为条件
主要类型有:

-b : 块设备文件。
-c : 字符设备文件。
-d : 目录。
-f : 普通文件。
-l : 符号链接文件。
-p : 管道文件。

查找当前目录及所有子目录下的普通文件

find . -type f

在这里插入图片描述

以权限为条件

有时候需要查找特定权限的文件,可以使用-perm参数,例如查找当前目录下搜索出权限为777的文件。

find . -type f -perm 777

find . -type f ! -perm 777

在这里插入图片描述
那么怎么搜索权限不是777的文件呢?

find . -type f ! -perm 777

在这里插入图片描述
以时间为条件

UNIX/Linux文件系统每个文件都有三种时间戳:

访问时间(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间(-mtime/天,-mmin/分钟):文件最后一次修改时间。变化时间(-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。

例如:

find ./ -mtime 5 #查找5天前更改过的文件
find ./ -mtime -5 #查找5天内更改过的文件
find ./ -mtime 0 #查找今天更改过的文件
find ./ -newer test.txt #查找比test.txt修改时间更新的文件
find ./ -anewer test.txt #查找比test.txt访问时间更新的文件
find ./ -amin  10 #查找10分钟之前访问过的文件
find ./ -atime +7 #搜索超过七天内被访问过的所有文件

借助-exec选项与其他命令结合使用

借助-exec命令,将当前目录及子目录下所有.cpp格式的文件以File:文件名的形式打印出来

find . -type f -name "*.cpp" -exec printf "File: %s\n" {} \;

在这里插入图片描述
借助-exec命令,将当前目录及子目录下所有 3 天前的.cpp格式的文件复制一份到time目录

在这里插入图片描述
which

which命令用于查找并显示给定命令的绝对路径,搜索某个系统命令的位置,并且返回第一个搜索结果。

语法格式:

which [参数] [文件]

查找文件、显示命令路径:

which bash

在这里插入图片描述

which python

在这里插入图片描述

注意:which 是根据使用者所配置的 PATH 变量内的目录去搜寻可运行档的!所以,不同的 PATH 配置内容所找到的命令当然不一样的!

PATH变量有哪些内容呢?我们来看一下(不同电脑可能不同):

echo $PATH #查看PATH环境变量

在这里插入图片描述PATH环境变量存放着一些路径信息,例如/usr/bin,当你已经安装了一个命令,但是使用时却提示找不到该命令,可以查看该环境变量。

type

type命令用来显示指定命令的类型,判断给出的指令是内部指令还是外部指令。

type用于查看命令类型,一般有以下类型:

alias:别名。
keyword:关键字,Shell保留字。
function:函数,Shell函数。
builtin:内建命令,Shell内建命令。
file:文件,磁盘文件,外部命令。
unfound:没有找到。

别名命令:

type ls

在这里插入图片描述
内建命令:

type cd

在这里插入图片描述
关键字:

type if

在这里插入图片描述

想了解Linux shell 内建命令与外部命令可以参考Linux shell 内建命令和外部命令

whereis

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

语法格式:

whereis [参数] [命令名]

常用参数

-b 查找二进制程序或命令
-B 从指定目录下 查找二进制程序或命令
-m 查找man手册文件
-M 从指定目录下 查找man手册文件
-s 只查找源代码文件
-S 从指定目录下 查找源代码文件

举例:

显示ls命令的程序和man手册页的位置:

whereis ls

在这里插入图片描述
只查看ls的帮助手册的位置:

whereis -m ls

在这里插入图片描述显示ls命令的二进制程序的路径:

whereis -b ls

在这里插入图片描述
查找stdio.h头文件,和帮助手册

whereis stdio.h

在这里插入图片描述

locate

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

常见选项如下:

-e 仅查找存在的文件
-q 安静模式,不会显示任何错误讯息
-n 至多显示 n个输出
-r 使用正规运算式
-i 查找忽略大小写
-c 打印匹配结果数量

快速查找文件:

locate testfile.txt

在这里插入图片描述
查找计算文件的数量:

locate -c testfile.txt

在这里插入图片描述locate查找存在的一个问题是,如果最近有文件被删除,它仍然能找出来,最近有文件增加,它却找不到。为了避免这种情况,可以在使用locate之前,先使用updatedb命令,手动更新数据库。

总结

1、whichwhich命令的作用是在PATH变量指定的路径中,搜索某个系统命令的位置,并且返回第一个搜索结果。
2、whereis命令用来定位命令的二进制程序、源代码文件和man手册页等相关文件的路径。
3、locate优点:查找速度块;缺点:模糊匹配,匹配路径,实时性差。
4、find命令可以根据给定的路径和表达式查找的文件或目录;缺点:速度较慢。

在这里插入图片描述
(微信公众号【程序猿编码】)

在这里插入图片描述

(添加本人微信号,备注加群,进入程序猿编码交流群,领取学习资料,获取每日干货)

欢迎关注 微信公众号【程序猿编码】,专注于Linux c/c++ 、Python、Go语言、数据结构与算法、网络编程相关知识,常用的程序员工具。还有每日00:10分之前更新 新闻简报,即刻知晓天下事!

发布了131 篇原创文章 · 获赞 115 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/chen1415886044/article/details/104763872
今日推荐