linux查找文件技巧 | find、locate、grep、whereis/which、type

工具find、locate、grep、whereis/which、type。

find 文件查找工具

find支持多种参数,这里列举常用的,更多请参考:find 命令

常用条件
-type 类型参数 
	f 普通文件
	l 符号连接
	d 目录
	c 字符设备
	b 块设备
	s 套接字
	p Fifo
-iname 忽略大小写
-path  匹配文件路径或者文件
-regex 基于正则表达式匹配文件路径(-iregex忽略大小写)
! 否定参数,否定条件
-maxdept 最大查找深度
-mindepth 最小查找深度

根据文件时间戳进行搜索
访问时间 (-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间 (-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间 (-ctime/天,-cmin/分钟):文件数据元(例如权限等)最后一次修改时间。
	- 搜索最近(<7, ==7, >7)天被访问过的所有文件 
	find . -type f -atime -7	# 七天内
	find . -type f -atime 7	# 整七天
	find . -type f -atime +7	# 大于7天
-newer 与指定文件比较。
	find . -type f -newer file.lo # 找出比file.log修改时间更长的所有文件
-size 根据文件大小进行匹配
	b —— 块(512字节)
	c —— 字节
	w —— 字(2字节)
	k —— 千字节
	M —— 兆字节
	G —— 吉字节
	- 搜索(大于,等于,小于)10KB的文件
	find . -type f -size +10k
	find . -type f -size 10k
	find . -type f -size -10k

文件操作
-delete 删除匹配文件
	find . -type f -name "*.txt" -delete #删除当前目录下所有.txt文件

更多使用技巧请参考:https://wangchujiang.com/linux-command/c/find.html
示例:查找C++中set函数头文件set.h
find /usr/include/ "set.h" | grep "set.h$"
#    起始路径        关键词    过滤   以"set.h"结尾的

在这里插入图片描述

实例:递归的删除指定后缀的文件

目录结构
在这里插入图片描述
递归删除所有后缀为 .c 的文件
在这里插入图片描述或者,我们可以选择递归删除所有后缀为 .c.cpp 的文件
在这里插入图片描述

locate 文件查找工具

locate命令维护了一个数据库,我们在使用之前应该先更新数据库否则查询不到最新的文件。

参数

-b, --basename  # 仅匹配路径名的基本名称
-c, --count     # 只输出找到的数量
-d, --database DBPATH # 使用DBPATH指定的数据库,而不是默认数据库 /var/lib/mlocate/mlocate.db
-e, --existing  # 仅打印当前现有文件的条目
-1 # 如果 是 1.则启动安全模式。在安全模式下,使用者不会看到权限无法看到 的档案。这会始速度减慢,因为 locate 必须至实际的档案系统中取得档案的  权限资料。
-0, --null            # 在输出上带有NUL的单独条目
-S, --statistics      # 不搜索条目,打印有关每个数据库的统计信息
-q                    # 安静模式,不会显示任何错误讯息。
-P, --nofollow, -H    # 检查文件存在时不要遵循尾随的符号链接
-l, --limit, -n LIMIT # 将输出(或计数)限制为LIMIT个条目
-n                    # 至多显示 n个输出。
-m, --mmap            # 被忽略,为了向后兼容
-r, --regexp REGEXP   # 使用基本正则表达式
    --regex           # 使用扩展正则表达式
-q, --quiet           # 安静模式,不会显示任何错误讯息
-s, --stdio           # 被忽略,为了向后兼容
-o                    # 指定资料库存的名称。
-h, --help            # 显示帮助
-i, --ignore-case     # 忽略大小写
-V, --version         # 显示版本信息
示例:查找c库函数头文件 stdio.h 文件

在这里插入图片描述

示例:指定目录查询

虽然 locate 命令没有直接指定目录的参数,但是该命令支持模糊查询,例如使用* 省略若干路径。

查询anaconda的日志文件:
在这里插入图片描述
当前目录查询:注意,指定在当前目录查询时,尽量给出绝对路径、形如 ./* 这类的相对路径不起作用(但是可以使用家目录的相对路径)。

查询当前路径下的tcp开头的文件。这里需要先使用pwd打印出工作目录的路径,然后拼接出关键词即可。注意这里的查找条件, *\tcp 与 *tcp* 的查找结果并不相同。
在这里插入图片描述
另外,如果我们使用 -i 参数忽略大小写可以得到跟多匹配内容。

grep 文本搜索工具

grep一般用于 连接管道的过滤命令使用,不过管道也可充当查询文件的工具。

基本参数

-i	搜索时,忽略大小写
-c	只输出匹配行的数量
-l	只列出符合匹配的文件名,不列出具体的匹配行
-n	列出所有的匹配行,显示行号
-h	查询多文件时不显示文件名
-s	不显示不存在、没有匹配文本的错误信息
-v	显示不包含匹配文本的所有行
-w	匹配整词
-x	匹配整行
-r	递归搜索
-q	禁止输出任何结果,已退出状态表示搜索是否成功
-b	打印匹配行距文件头部的偏移量,以字节为单位
-o	与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

grep工具与其他查找文件工具不同的是,它用于文本文件的内容查找,或者叫他文本搜索工具。

例如,我们想查看某个文件的内容,一般解决思路是找到文件位置,在打开文件查看,而grep把这另个步骤简化。

示例:根据文件内容查找文件

现有web网页,网页上有“祝大家圣诞快乐”文字样式。
在这里插入图片描述
在网站根目录下有很多文件,我们现在想找出含有"祝大家圣诞快乐"的所有网页。
在这里插入图片描述
利用grep命令即可实现。 grep -r "祝大家圣诞快乐" ./
在这里插入图片描述
此方法,在查找一些配置,查找日志文件时非常的好用。

示例:查看配置文件

例如,查看apache配置文件中有关cgi的部分。
在这里插入图片描述
例如,查看当前PS1在哪个配置文件中

PS1(Prompt Sign)是一级终端命令提示符,如果想修改当前命令提示符样式只需根据PS的语法对其赋值即可。现在我们需要看一下当前PS1正在哪个配置文件中生效。

注,在~/.bashrc、~/.bash_profile、/etc/bashrc、profile文件中PS1的配置均可生效。具体差别为:

  • /etc/profile
    此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。【所有用户,第一次登录时生效】
  • /etc/bashrc(ubuntu为 /etc/bash.bashrc)
    为每一个运行 bash shell 的用户执行此文件。当 bash shell 被打开时,该文件被读取。【所有用户,开启bash时生效】
  • ~/.bash_profile(ubuntu为 ~/.profile)
    每个用户都可使用该文件输入专用于自己使用的 shell 信息。默认情况下,它设置一些环境变量,执行用户的~/ .bashrc 文件。【当前用户,登录时生效】
  • ~/.bashrc
    该文件包含专用于你的 bash shell 的 bash 信息,当登录时以及每次打开新的 shell 时,该文件被读取。【当前用户,开启bash时生效】

在这里插入图片描述
示例:查看vim中关于插件的配置

这里使用的Plug管理插件,所以关键词搜Plug即可。
在这里插入图片描述

whereis/which 可执行文件查找工具

which和whereis命令可用于查找可执行文件。区别在于which通过PATH环境变量查询,whereis通过索引数据库查询。

参数展示
在这里插入图片描述
在这里插入图片描述

示例:查找ls程序所在位置

在这里插入图片描述
whereis查找的结果显然更加详细,其中第1条是ls命令所在的路径。第2,3条是手册页所在的路径。

示例:查找python程序

本示例可以明显对比两者者的区别。
which通过PATH查找,因此只找到/usr/bin/python这一个程序。
在这里插入图片描述
而使用whereis可以找到所有的python程序
在这里插入图片描述

type 可执行程序的路径查找

通常,type命令用于判断命令是否是内置命令。但它的参数提供了所搜路径的选型
在这里插入图片描述
简单使用
在这里插入图片描述
type -a 选项可以列出所有关于NAME参数名的信息。而 -p 选项列出命令的路径等同于使用which命令。
在这里插入图片描述

特殊场景查询

示例:寻找某个时间段内生成/修改的文件

场景:日志文件生成规则一般是,大于某个预定值时,另外在生成一份文件。例如 20220101.log、20220101.log.1、20220101.log.2、 … 。

现在要得到一天中,某个时间段内产生的日志文件。这里可以利用find的基于时间的查询。

1.使用create_file.sh脚本模拟日志文件的生成。生成file1 ~ file15的文件。
在这里插入图片描述
2.现在我们查询file_6 ~ file_10 的文件。利用find基于时间的比较。
在这里插入图片描述
此命令查询到晚于file_6,同时早于file10生成/修改的文件。如果我们现在修改file_10文件,使其时间成为最晚的,那么执行此命令展示效果如下。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43919932/article/details/122418807