详解Linux——find命令(stat+exec+xargs+dd命令)
Posted 何翰宇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解Linux——find命令(stat+exec+xargs+dd命令)相关的知识,希望对你有一定的参考价值。
文章目录
find命令
在Linux操作系统中,find命令主要用于进行文件的搜索
语法:find [路径] [选项] [选项的参数]
常用选项:
-name
:根据文件的名称搜索文件,支持通配符*
-type
:根据文件类型,f
代表普通文件,d
代表文件夹
1.根据名称查找文件
获取 /etc目录下 所有后缀为
.d
的目录
只显示前15条
命令:find /etc -name "*.d" -type d | head -15
在
/etc
目录下,查找包含host
关键字的普通文件
命令:finde /etc -name "host*" -type f
2. 根据文件修改时间查找文件
- 创建时间:代表这个文件什么时候被创建
- 访问时间:代表这个文件什么时间被访问
- 修改时间:代表这个文件什么时间被修改
stat命令
语法:stat 文件名
作用:获取文件最后的修改时间
- Access: 表示文件的访问时间,当文件被访问时,更新这个时间
- Modify:表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间
- Change:表示文件的状态时间,当文件的状态被修改时,更新这个时间,比如文件的链接数,大小,权限,Blocks数
一个文件刚创建的时候,这三个时间是一样的,因为我们在创建它的同时修改了它的内容,所以它的大小,Blocks也发生了变化,也相当于一次访问。
touch命令
创建文件是设置修改时间
语法:touch -m -d "日期时间格式" 文件名称
作用:
- 如果文件不存在,则自动创建该文件,然后设置其最后的修改时间
- 如果文件存在,touch命令就是修改文件的最后修改时间
根据文件的最后修改时间搜索文件
语法:find [路径] -mtime +days/-day3
-mtime
:根据文件的最后修改时间搜索文件+
:加号,代表搜索几天前的文件-
:减号:代表搜索几天以内的文件信息
示例1:搜索2天以前的文件信息(注意:两天前是不包含当天的,也就是今天8号,两天前就是5号)
命令:find [路径] -mtime +2
示例2:
搜索3天内的.txt文件
注意:三天内式包含当天的,比如今天8号就包含6、7、8号
命令:find ./ -name "*.txt" -mtime -3
3. 根据文件大小查找文件
dd 命令
基本语法:dd if=/dev/zero of=文件名称 bs=1M count=1
主要功能:在Linux系统中,生成某个大小的测试文件
选项说明:
if代表输入文件
of代表输出文件
bs代表字节为单位的块大小。
count代表被复制的块。
其中/dev/zero是一个字符设备,会不断返回0值字节。
示例1:使用dd创建一个大小为1M大小的 tmp.txt文件
命令:dd if=/dev/zero of=tmp.txt bs=1M count=1
示例2:使用dd创建一个5M大小的demo.c文件
按文件大小查找
语法:find [路径] -size [文件大小,常用单位:K,M,G]
-
k
:KB -
M
:MB -
G
:GB -
size
:搜索大小等于size值的文件 -
-size
:搜索 [0,size) 值 -
+size
:(size,无穷大)
示例1:搜索单前目录下大小为5M的文件
命令:find ./ -type f -size 5M
示例2:搜索单前目录下大小为5M以内的文件(
0
<
=
s
i
z
e
<
5
M
0<= size < 5M
0<=size<5M)
命令:find ./ -type f -size -5M
示例3:搜索当前目录中,文件大于5M的文件
命令:find ./ -type f -size +5M
4. -exec和xargs
xargs
:
是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xargs 也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代。xargs 是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。
案例:删除Linux系统中/var/log
目录下20天以前的日志信息
正确删除方式1: 使用管道+xargs
命令:find /var/log -name "*.log" -mtime +20 | xargs rm -rf
可以理解为,xargs把管道里拿到的数据变成了 rm -rf
的参数
正确删除方式2:使用find命令 + -exec选项
这里删除的是两天前的日志信息
命令:find /var/log -type f -name "*.log" -mtime +2 -exec rm -rf \\;
-exec
选项可以理解为把 find查询的结果放到了里
而\\;
就可以理解为这是-exec
的标识
以上是关于详解Linux——find命令(stat+exec+xargs+dd命令)的主要内容,如果未能解决你的问题,请参考以下文章