linux的文件搜索命令,Linux文件搜索命令find的用法 | 术与道的分享

不管在Windows还是Linux中,最重要的问题不是说你能搜索到这个文件,而是最好少用搜索,应该是你在整个服务器的规划里面,把所以的文件目录规划的很好。就像如果你在家里找衣服,如果不是你乱扔,就不可能花费太长的时间。因为搜索会占用大量的系统资源,但是有一些操作比如被他人非法修改的文件,的确find命令是一个很好的选择。

文件搜索命令find的一般格式

find path -option [-print] [-exec -ok command] {} \;

path:find命令所要查找的目录路径,比如/root,表示在root目录下搜索匹配。

-print:find命令将匹配的文件输出到标准输出。

-exec:find命令对匹配的文件执行该参数所给出的shell命令。

-ok:和exec作用相同,只不过以一种更为安全的模式来执行该参数给出的shell命令,在执行每一个命令执行都会提示是否确认执行。

1

2

3

4

5

6

7

8

9

findpath-option[-print][-exec-okcommand]{}\;

path:find命令所要查找的目录路径,比如/root,表示在root目录下搜索匹配。

-print:find命令将匹配的文件输出到标准输出。

-exec:find命令对匹配的文件执行该参数所给出的shell命令。

-ok:和exec作用相同,只不过以一种更为安全的模式来执行该参数给出的shell命令,在执行每一个命令执行都会提示是否确认执行。

find一般搜索使用实例

在目录/etc中查找文件init

find /etc -name init

1

2

3

在目录/etc中查找文件init

find/etc-nameinit

46.jpg

f1.png

大家可能会认为只要文件名包含init,比如initab,123init都会被匹配到,linux不同于windows,linux中的搜索就是精准搜索,也就是说,只有文件名为init的文件才可以搜索到。那么如果linux下我想搜索文件名包含init的文件怎么办呢?

find /etc -name *init*

只要文件名里面包含init都会被例举出来

* :表示匹配一个字符串

1

2

3

4

5

find/etc-name *init*

只要文件名里面包含init都会被例举出来

*:表示匹配一个字符串

f5.png

find /etc -name init*

表示在etc目录中匹配文件名以init开头的文件

1

2

3

find/etc-nameinit*

表示在etc目录中匹配文件名以init开头的文件

f6.png

find /etc -name init???

在etc目录下搜索文件名以init开头后面跟3个字符的文件

?:匹配单个字符

1

2

3

4

5

find/etc-nameinit???

在etc目录下搜索文件名以init开头后面跟3个字符的文件

?:匹配单个字符

f7.png

iname:表示不区分大小写

1

iname:表示不区分大小写

f2.png

在根目录下查找大于100MB的文件

find / +size +204800

1

2

3

在根目录下查找大于100MB的文件

find/+size+204800

f3.png

在linux当中,一个数据块是512字节,即0.5K,文件的大小以数据块来计算,因此100MB=102400KB=204800。数据块是linux文件中存储的最小单位。+n:大于,-n:小于,n:等于。

普通用户家目录下查找所有者为wenyang的文件

find / -user wenyang

1

2

3

普通用户家目录下查找所有者为wenyang的文件

find/-userwenyang

f4.png

user表示根据所有者查找,当然,我们也可以使用-group根据所属组来搜索。

通过时间属性来搜索

-amin:访问时间 access

-cmin:文件属性 change

-mmin:文件内容 modify

上述三种以分钟为单位

1

2

3

4

5

6

7

-amin:访问时间access

-cmin:文件属性change

-mmin:文件内容modify

上述三种以分钟为单位

-atime:访问时间 access

-ctime:文件属性 change

-mtime:文件内容 modify

上述三种以天为单位

1

2

3

4

5

6

7

-atime:访问时间access

-ctime:文件属性change

-mtime:文件内容modify

上述三种以天为单位

我习惯性把上述的3个时间属性称为ACM,在这里我附上前面一篇关于ACM的博文方便大家记忆:https://www.1024do.com/?p=2318。

在home目录下查找10分钟内被修改过属性的文件和目录

find /home -cmin -10

1

2

3

在home目录下查找10分钟内被修改过属性的文件和目录

find/home-cmin-10

f8.png

-10表示10分钟之内,+10代表的就是10分钟以前。其他时间属性的操作与此一致。

find中的多条件命令

在/home下寻找大于2MB小于4MB的文件

find /home -size +2048 -a -size -8192

1

2

3

在/home下寻找大于2MB小于4MB的文件

find/home-size+2048-a-size-8192

f9.png

-a在这里表示两个条件同时满足,与之对应的还有-o,表示两个条件满足任意一个即可。

在/etc下查找inittab文件并显示其详细信息

find /etc -name inittab -exec ls -l {} \;

1

2

3

在/etc下查找inittab文件并显示其详细信息

find/etc-nameinittab-execls-l{}\;

f10.png

-exec在这里起一个链接作用,与-ok的区别在于,它不需要确认,而-ok会进行安全检查。ls -l表示显示文件信息,{}表示对find查询的结果替换,\表示转义符,;表示结束。

通过文件类型搜索

-type 根据文件类型查找

f:文件

d:目录

l:软链接文件

1

2

3

4

-type根据文件类型查找

f:文件

d:目录

l:软链接文件

在etc目录下寻找以init开头的并且是文件类型的文件

find /etc -name init* -a -type f

1

2

3

在etc目录下寻找以init开头的并且是文件类型的文件

find/etc-nameinit*-a-typef

f11.png

在etc目录下寻找以init开头的目录

find /etc -name init* -a -type d

1

2

3

在etc目录下寻找以init开头的目录

find/etc-nameinit*-a-typed

在etc目录下寻找以init开头的软链接

find /etc -name init* -a -type l

1

2

3

在etc目录下寻找以init开头的软链接

find/etc-nameinit*-a-typel

根据i节点查找

即inum,每个文件或目录都有一个i节点,这里不详细描述,只简单介绍一下其用法,具体情况大家可以自行百度,我们可以通过寻找一个文件、目录的inum节点而对其进行其他操作。

搜索home目录下删除i节点为127的目录

find /home -inum 127 -exec rm -rf {} \;

1

2

3

搜索home目录下删除i节点为127的目录

find/home-inum127-execrm-rf{}\;

f12.png

从图中可以看出,通过查看文件或目录的i节点,就可以对其进行附加的操作。

总结:find命令可以精准的搜索到你的预期要求,当其他命令不能搜索到某个文件或目录时,find确实给我们带来了很多便捷,但是,find命令在搜索的时候是从硬盘进行遍历的,因此会非常耗费硬盘的资源,这样就会使搜索时间提高,随之而来的就是效率的低下,所以说,find是一把双刃剑,带给我们便捷的途中,也难免让我们耗费更多的资源与时间。

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

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

相关文章

vue v-if判断数组元素的值_Vue项目上线做的一些基本优化

前言本文主要是做一个Vue性能优化的帖子,做一个参考文档,对以后项目上线做一些集合文档。如果对各位在项目优化时,做一个文档参照。开发过程在开发项目的时候,就要注意项目的一些小技巧,下面我就罗列一些经常用到的优化…

BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )

状压dp, 然后转移都是一样的, 矩阵乘法快速幂就行啦. O(logN*2^(3m)) ---------------------------------------------------------------------------------------------#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define …

python psutil 获取命令历史_Python使用psutil获取进程信息的例子

psutil是什么psutil是一个能够获取系统信息(包括进程、CPU、内存、磁盘、网络等)的Python模块。主要用来做系统监控&#xff0c;性能分析&#xff0c;进程管理&#xff0c;像glances也是基于psutil写成的。在不了解这个模块之前&#xff0c;我都是直接用subprocess去直接执行系…

linux传文件file,linux文件的传输与压缩快速入门

scp --- 用于远程拷贝文件上传文件scp file userip:/file下载文件scp userip:/file filersync --- 远程同步&#xff0c;速度块&#xff0c;默认会忽略&#xff0c;文件属性&#xff0c;链接文件&#xff0c;设备文件-r --- 同步目录-p --- 同步权限-o --- 同步文件所有人-g --…

Handler实现数据模板

<ul id"ulList"> <li οnclick"show({ID}‘,{Title})"><a href"somepage.html?id{ID}" >{Title}</a><br /> {Content}</li> </ul> $.get("Handler.ashx?n" Math.random(), { action: &q…

delphi 中如果不进行 closehandle 会怎么样_心理学:当你迷茫了,请坚持做三件事,你的未来会越来越好...

我们总是这样激励自己&#xff1a;未来是美好的。但是&#xff0c;生活不可能处处如意&#xff0c;人的一生也难以风平浪静&#xff0c;有巅峰就有低谷&#xff0c;有明朗就有迷茫。或是找不到未来发展的方向&#xff0c;或是事业、生活遭受了重大挫折&#xff0c;我们每个人都…

linux的svn端口查看,linux查看端口被占用

1、netstat -tunlp|grep 8080[rootsvn AdLog]# netstat -tunlp|grep 8080tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 22067/java2、ps -ef|grep 22067[rootsvn AdLog]# ps -ef|grep 22067root 22067 1 5 15:22 pts/0 00:00:18 /usr/bin/java -Djava.util.logging.config.file/mnt/…

随笔2 PAT1001.A+B Format (20)

1001.AB Format(20) 题目链接 1001.AB Format (20) C 代码 第一次使用markdown&#xff0c;还不是很习惯&#xff0c;现在努力的在适应它 首先这道题我们很容易就可以读懂题意&#xff0c;就是简单的ab&#xff0c;只不过要求我们在输出sum的时候处理一下数字的格式。那么我的做…

mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理

原文&#xff1a;https://juejin.im/post/5abcbd946fb9a028d1412efc本篇文章是「深入浅出MyBatis&#xff1a;技术原理与实践」书籍的总结笔记。上一篇介绍了反射和动态代理基础&#xff0c;主要是为本篇文章做个铺垫&#xff0c;反射使配置和灵活性大大提高&#xff0c;可以给…

linux ps 进程组,linux进程管理(2)---进程的组织结构

一、目的linux为了不同的进程管理目的&#xff0c;使用了不同的方法组织进程之间的关系&#xff0c;为了体现父子关系&#xff0c;使用了“树形”图&#xff1b;为了对同一信号量统一处理&#xff0c;使用了进程组&#xff1b;为了快速查找某个进程&#xff0c;使用了哈希表&am…

【Qt】Qt之进程间通信(共享内存)【转】

简述 上一节中&#xff0c;我们分享下如何利用Windows消息机制来进行不同进程间的通信。但是有很多局限性&#xff0c;比如&#xff1a;不能跨平台&#xff0c;而且必须两个进程同时存在才可以&#xff0c;要么进程A发了消息谁接收呢&#xff1f; 下面我们来分享另外一种跨平台…

python progressbar print_python print 进度条的例子

def progress(width, percent):print "%s %d%%\r" % ((%%-%ds % width) % (width * percent / 100 * ""), percent),if percent > 100:printsys.stdout.flush()首先&#xff0c;先说明一下print的一些用法:和C语言一样&#xff0c;字符串里的匹配使用‘…

linux中常用的shell脚本,Linux常用shell脚本

1. 设置ssh、scp命令的认证运行一次脚本后&#xff0c;以后再使用ssh或scp命令登录远程机器时不再提示输入密码-----------------setkey.sh开始-------------------------OLDDIRpwdif [ -z "$1" ]; thenecho Need userhost info;exit;fi;cd $HOME;if [ -e "./.s…

HDU 2042:不容易系列之二

不容易系列之二 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 5 Accepted Submission(s) : 5 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 你活的不容易&#xff0c;我活…

统计建模与r软件_【统计建模与R软件笔记】008 描述统计量(1)

今天我们开始来学习描述统计量吧&#xff01;位置的度量位置的度量就是用来描述定量资料的集中趋势的统计量&#xff0c;常用的有均值、众数、中位数、百分位数等。1.均值 mean( )形式&#xff1a;mean(x, trim 0, na.rm FALSE)x 是对象(如向量、矩阵、数组或数据框)trim 是计…

npm环境安装linux,Node.js环境在linux上的部署教程

我们以centOS为例来说说如何部署node.js环境一 打开centos,然后开始下载node.js包curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -yum -y install nodejs二 安装gcc环境yum install gcc-c make安装完成!三 安装nodejs的npm,这是一个包程序工具,类似于…

Nancy跨平台开发总结(三)发布到Jexus Web服务器

在Centos7上安装Mono yum install yum-utils rpm --import "http://keyserver.ubuntu.com/pks/lookup?opget&search0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF" yum-config-manager --add-repo http://download.mono-project.com/repo/centos/ yum install m…

stat函数_数据分析工具入门 掌握这些Excel函数就够了

1.什么是函数可以把函数理解为一个可以控制的黑箱子&#xff0c;输入X到黑箱子中&#xff0c;他就会输出Y&#xff0c;参数就是黑箱子的控制开关&#xff0c;打到不同的档位&#xff0c;黑箱子会输出不同的Y。2.常见函数分类文本清洗函数关联匹配函数逻辑运算函数计算统计函数时…

linux安装nodejs一键脚本,ubuntu16.04部署nodejs+vue框架脚本

#获取和安装nodewget https://nodejs.org/dist/v8.9.2/node-v8.9.2-linux-x64.tar.xzxz -d node-v8.9.2-linux-x64.tar.xztar xf node-v8.9.2-linux-x64.tar -C /usr/local#创建软连接ln -s /usr/local/node-v8.9.2-linux-x64 /usr/local/node#配置环境并生效echo "export…

Linux下jdk配置环境变量

vi /etc/profile在里面添加如下内容JAVA_HOME/usr/local/java/jdk1.6.0_01PATH$JAVA_HOME/bin:$PATHCLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOMEexport PATHexport CLASSPATH变量生效重新登录即可5.进入 /usr/bin/目录cd /usr/binln -s -f /us…