Linux常用命令—find命令大全

news2024/12/29 11:29:48

文章目录

    • 一、find命令常用功能
      • 1、find命令的基本信息如下。
      • 2、按照文件名搜索
      • 3、按照文件大小搜索
      • 4、按照修改时间搜索
      • 5、按照权限搜索
      • 举例:
      • 6、按照所有者和所属组搜索
      • 7、按照文件类型搜索
      • 8、逻辑运算符

一、find命令常用功能

1、find命令的基本信息如下。

  • 命令名称:find。
  • 英文原意:search for files in a directory hierarchy。
  • 所在路径:/bin/find。
  • 执行权限:所有用户。
  • 功能描述:在目录中搜索文件。

2、按照文件名搜索

[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-name:按照文件名搜索
-iname:按照文件名搜索,不区分文件名大小写
-inum:按照inode号搜索

#1.find命令基本使用
[root@192 ~]# find . -name abcde
./abcde

提示:搜索位置越大,消耗系统资源越多。
在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小。

#2.-iname
[root@192 ~]# find . -iname abcde
./ABCDE
./abcde

提示:i表示忽略的意思,就是忽略大小写。

#3.-inum

之前我们通过文件名可以查看到文件的i节点号
[root@192 ~]# ls -i abcde 
1043285 abcde

这里通过find命令的-inum选项可以实现,通过i节点号查看文件的名字。
[root@192 ~]# find . -inum 1043285
./abcde

这两个是一对命令,记忆比较方便。

扩展:
之前我们说过,硬连接是非常不好识别链接,源文件和硬链接文件只是引用计数增加了,其他信息是无法识别的。如下:

[root@192 ~]# ls -il abcde /tmp/abcde_h 
1043285 -rw-r--r--. 2 root root 0 1230 18:24 abcde
1043285 -rw-r--r--. 2 root root 0 1230 18:24 /tmp/abcde_h

我们可以看到硬连接文件和源文件的i节点号是一样的。我们可以通过i节点号来查询是否有多个文件与之对应。Linux系统中是一个文件对应一个i节点号,如果有多个文件对应一个i节点号,说明存在硬连接关系。

[root@192 ~]# find / -inum 1043285
find: “/proc/39609/task/39609/fd/5”: 没有那个文件或目录
find: “/proc/39609/task/39609/fdinfo/5”: 没有那个文件或目录
find: “/proc/39609/fd/5”: 没有那个文件或目录
find: “/proc/39609/fdinfo/5”: 没有那个文件或目录
/tmp/abcde_h
/root/abcde

我们可以看到,通过上边这种方式是可以确定两个文件是硬链接关系。但是我们在平时使用Linux系统的时候,还是不推荐创建文件的硬链接。
补充:上边代码块的前4行是干扰项。这是在整个根目录搜索的时候,会搜索到proc目录,而proc目录是内存,find命令在运行的时候,就会消耗一定的内存资源,这4行就是find命令在运行时产生的临时文件。同时这种临时文件找到也是立刻消失的,所以会出现每行最后的没有那个文件或目录

3、按照文件大小搜索

[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-size[+|-]大小:按照指定大小搜索文件

这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。

find 命令的单位:

[root@localhost ~ ] # man find
    -size n[cwbkMG]
        File uses n units of space.The following suffixes can be used:

        #这是默认单位,如果单位为b或不写单位,则按照512 Byte搜索。
        ' b':for 512-byte blocks(this is the default if no suffix is used)
        
        #搜索单位是c,按照字节搜索。
        'c':for bytes
      
        #搜索单位是w,按照双字节(中文)搜索。
        'w':for two-byte words

        #按照KB单位搜索,必须是小写的k。
        'k':for Kilobytes(units of 1024 bytes)

        #按照MB单位搜索,必须是大写的M
        'M':for Megabytes(units of 1048576 bytes)

        #按照GB单位搜索,必须是大写的G
        ' G':for Gigabytes(units of 1073741824 bytes)

举例:

1.查看root目录下文件信息
[root@DevOps ~]# ll -h
总用量 48K
-rw-r--r--. 1 root root   17 19 17:08 abc
-rw-------. 1 root root 1.3K 1223 20:46 anaconda-ks.cfg
-rw-r--r--. 1 root root  28K 1223 20:46 install.log
-rw-r--r--. 1 root root 7.4K 1223 20:45 install.log.syslog

2.在当前目录下搜索文件大小为28k的文件
[root@DevOps ~]# find . -size 28k
./install.log

3.在当前目录下搜索文件大小大于1k的文件。
[root@DevOps ~]# find . -size +1k
.
./install.log
./anaconda-ks.cfg
./install.log.syslog

注意:具体单位字母看上边列表。

4.注意一个小问题
如果按文件大小搜索,并且文件的大小没有写单位,默认是按b(字节)进行查找的,但是我们可以看到下面并没有查询处abc文件。

[root@DevOps ~]# ll -h
总用量 48K
-rw-r--r--. 1 root root   17 19 17:08 abc
-rw-------. 1 root root 1.3K 1223 20:46 anaconda-ks.cfg
-rw-r--r--. 1 root root  28K 1223 20:46 install.log
-rw-r--r--. 1 root root 7.4K 1223 20:45 install.log.syslog
[root@DevOps ~]# find . -size 17
[root@DevOps ~]# 

原因是:
看上边的单位说明` ' b':for 512-byte blocks(this is the default if no suffix is used)`
说b默认单位是按照512byte查找,这是一个默认的属性值,如上边我们输入的17,就是17*512b的结果进行计算,然后进行查找。
`c`是按照字节搜索。

[root@DevOps ~]# find . -size 17c
./abc

4、按照修改时间搜索

Linux中的文件有访问时间(atime)数据修改时间(mtime)、**状态修改时间(ctime)**这三个时间,我们也可以按照时间来搜索文件。(注意:如果以time结尾的时间单位,默认单位时间是天。)

命令格式:
[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-atime[+|-]时间:按照文件访问时间搜索
-mtime[+|-]时间:按照文件数据修改时间搜索
-ctime[+|-]时间:按照文件状态修改时间搜索

提示:也有-amin、-mmin等时间选项,时间单位为分钟。

用mtime数据修改时间来举例,重点说说+-时间的含义。
我们画一个时间轴,来解释一下

img

说明:
-5:代表5天内修改的文件。
5:代表前5~6天,那一天修改的文件。
+5:代表6天前修改的文件。

5、按照权限搜索

命令格式:
[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-perm: 权限模式:查找文件权限刚好等于“权限模式”的文件
-perm: -权限模式:查找文件权限全部包含“权限模式”的文件
-perm: +权限模式:查找文件权限包含“权限模式”的任意一个权限的文件

举例:

1.查看文件夹内容
[root@DevOps test]# ll
总用量 0
-rw-r--r--. 1 root root 0 19 18:17 abc
-rw-r--r--. 1 root root 0 19 18:17 def

2.按照权限查找文件
[root@DevOps test]# find . -perm 644
./def
./abc

注:644代表权限rw-r--r--

3.修改文件def权限为600,然后进行+、-查找
[root@DevOps test]# chmod 600 def 
[root@DevOps test]# ll
总用量 0
-rw-r--r--. 1 root root 0 19 18:17 abc
-rw-------. 1 root root 0 19 18:17 def

查找
[root@DevOps test]# find . -perm +444
.(代表当前目录不用考虑)
./def
./abc
[root@DevOps test]# find . -perm -444
.
./abc
[root@DevOps test]# 

说明:
如果是+,代表所有者,所属组,其他人这三个权限中,只要有一个权限大于搜索的权限,就能够找到该权限。
如果是-,代表三个权限都要满足每项权限,如abc文件的权限是644,每个权限全都大于444,所以被搜索到。
总结说,`+`就是三个权限满足一个即可,`-`三个全满足才可以。

find的权限搜索,能理解就好,+-工作中一般用不太多。

6、按照所有者和所属组搜索

命令格式:
[root@localhost ~ ] #find 搜索路径 [选项] 搜索内容
选项:
-uid 用户ID:按照用户ID查找所有者是指定ID的文件
-gid组ID:按照用户组ID查找所属组是指定ID的文件
-user用户名:按照用户名查找所有者是指定用户的文件
-group组名:按照组名查找所属组是指定用户组的文件
-nouser:查找没有所有者的文件

举例:

按照所有者查找文件
[root@DevOps test] # find . -user root
.
./def
./abc

提示:

(重要)上边这种方式并不常用,在按照所有者和所属组搜索时,“-nouser”选项比较常用,主要用于查找垃圾文件。
(重要)只有一种情况例外,那就是外来文件。比如光盘和U盘中的文件如果是由Windows复制来的(也就是文件是由windows建立的),在Linux中查看就是没有所有者的文件;再比如手工源码包安装的文件,也有可能没有所有者(由其他系统打的源码包)。
除了外来文件,Linux系统下所有的文件都应该有所有者,否则至少是一个垃圾文件。是需要用户来处理掉的。

而关于所有者和所属组搜索常用的命令为:

[root@DevOps test] # find / -nouser
find: “/proc/5244/task/5244/fd/5”: 没有那个文件或目录
find: “/proc/5244/task/5244/fdinfo/5”: 没有那个文件或目录
find: “/proc/5244/fd/5”: 没有那个文件或目录
find: “/proc/5244/fdinfo/5”: 没有那个文件或目录

注意:这四行之前说过,是find命令在执行时,在内存中自己产生的临时文件,执行完既消失。
上边命令结果证明Linux系统中没有垃圾文件。

7、按照文件类型搜索

命令格式:
[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容
选项:
-type d:查找目录
-type f:查找普通文件
-type l:查找软链接文件

举例

查找当前文件中的目录
[root@DevOps ~]# find . -type d
.
./test

其他选项同理

8、逻辑运算符

find命令支持一些复杂的搜索方式:逻辑与、逻辑或、逻辑非。

命令格式:
[root@localhost ~ ] #find 搜索路径 [选项] 搜索内容
选项:
-a:and逻辑与
-o:or逻辑或
-not:not 逻辑非
  • 1)-a:and逻辑与
    find命令也支持逻辑运算符选项,其中-a代表逻辑与运算,也就是-a的两个条件都成立,find搜索的结果才成立(其中有一个不成立都不行)。举个例子:
#在当前目录下搜索大于2KB,并且文件类型是普通文件的文件
[root@localhost ~ ] # find . -size +2k -a -type f
  • 2)-o:or逻辑或
    -o选项代表逻辑或运算,也就是-o的两个条件只要其中一个成立,find命令就可以找到结果。例如:
#在当前目录下搜索文件要么是cangls的文件,要么是bols的文件,两个都可以搜索到。 
[root@localhost ~ ] # find . -name cangls -o -name bols
./cang1s
./bols
  • 3)-not:not 逻辑非
    -not是逻辑非,也就是取反的意思。举个例子:
#在当前目录下搜索文件名不是cangls的文件
[root@localhost ~] # find . -not -name cangls

# 下面!的写法和上边-not是一个意思,都是逻辑非运算符。
[root@localhost ~] # find . ! -name cangls
(注意!左右两边都有要空格)

9、其他选项
这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看看“-exec”选项的格式。

  • 1)-exec选项
[root@localhost ~ ] # find 搜索路径 [选项] 搜索内容 -exec 命令2 {} \;

说明:
1.基本格式,只要写-exec,命令最后一定要写\;
2.作用是,把命令1的搜索结果(find 搜索路径 [选项] 搜索内容),作为命令2的操作对象。(其实可以理解成把命令1的操作结果,放在命令2后边的{ }中,然后用命令2去搜索{ }中的内容。)
3.在命令2种不识别别名,就是在命令2种不能用别名,如果ll命令

  • 2)-ok选项
    “-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。
在删除自己产生的一些零时文件,且很久不用的时候,可以用下面命令删除。
[ root@ localhost ~] # find /var/log -mtime +10 -ok rm -rf 0\; 
〈 rm.../var/log/samba/old〉?n
〈 rm.../var/log/sssd〉?n
〈 rm...I/var/log/ntpstats〉?n
〈 rm.../var/log/cups〉?n
2种不识别别名,就是在命令2种不能用别名,如果`ll命令`。

- 2)-ok选项
  “-ok”选项和“-exec”选项的作用基本一致,区别在于:“-exec”的命令2会直接处理,而不询问;“-ok”的命令2在处理前会先询问用户是否这样处理,在得到确认命令后,才会执行。

```shell
在删除自己产生的一些零时文件,且很久不用的时候,可以用下面命令删除。
[ root@ localhost ~] # find /var/log -mtime +10 -ok rm -rf 0\; 
〈 rm.../var/log/samba/old〉?n
〈 rm.../var/log/sssd〉?n
〈 rm...I/var/log/ntpstats〉?n
〈 rm.../var/log/cups〉?n

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

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

相关文章

力扣213打家劫舍2(简单动态规划)

题目描述: 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如…

1790_给通过USB连接到树莓派的NTFS硬盘设置固定的挂载名称

全部学习汇总: GreyZhang/little_bits_of_raspberry_pi: my hacking trip about raspberry pi. (github.com) 我用过好几个树莓派形式的单板电脑,但是遇到过磁盘挂载位置不确定的时候。有些甚至不会自动挂载。这些行为跟对应的OS的行为是相关的&#xff…

Mallox勒索病毒:最新变种.mallox_lab袭击了您的计算机?

引言 在数字化时代,数据是我们生活和工作的重要组成部分,但同时也引发了各种网络威胁,.mallox_lab勒索病毒便是其中之一。这种恶意软件以其加密文件并勒索赎金的方式而闻名,给个人和组织带来了巨大的风险和损失。本文将深入探讨.…

【小沐学C++】C++ MFC中嵌入64位ActiveX控件(VS2017)

文章目录 1、简介1.1 MFC1.2 ActiveX 2、VS2017添加ActiveX控件结语 1、简介 1.1 MFC Microsoft 基础类 (MFC) 库针对大部分 Win32 和 COM API 提供面向对象的包装器。 虽然此包装器可用于创建极为简单的桌面应用程序,但当你需要开发具有多个控件的更复杂的用户界…

你真的懂ArrayList吗?

ArrayList底层原理 ​ 1.ArrayList动态扩容的方法? 使用空参创建集合,在底层创建一个长度默认为0的数组;添加第一个元素时,底层会创建一个数组长度为10的数组;存满的时候,数组会自动扩容1.5倍;…

【算法思想-排序】按出现频率排序 - 力扣 1636

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

基于STM32+华为云IOT设计的智能车库管理系统

一、项目介绍 随着城市化进程和汽车拥有率的不断提高,停车难的问题也日益凸显。在城市中,停车场是一个非常重要的基础设施,但是传统的停车场管理方式存在很多问题,比如车位难以管理、停车费用不透明等。为了解决这些问题&#xf…

基于Vue+ELement搭建登陆注册页面实现后端交互

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《ELement》。🎯🎯 &#x1…

C语言入门Day_24 函数与指针

目录 前言: 1.指针和数组 2.函数和指针 3.易错点 4.思维导图 前言: 我们知道数组是用来存储多个数据的,以及我们可以用指针来指向一个变量。那么我们可以用指针来指向一个数组中的数据么? 指针除了可以像指向一个变量一样指…

【C++心愿便利店】No.6---C++之拷贝构造函数

文章目录 一、拷贝构造函数的引入二、拷贝构造函数 👧个人主页:小沈YO. 😚小编介绍:欢迎来到我的乱七八糟小星球🌝 📋专栏:C 心愿便利店 🔑本章内容:拷贝构造函数 记得 评…

python安全工具开发笔记(四)——python网络编程

一、C/S架构 什么是C/S架构 C : Client S : Server。客户机和服务器结构。 Server 唯一的目的就是等待Client 的请求,Client 连上 Server 发送必要的数据,然后等待Server端完成请求的反馈。 C/S网络编程 Server端进行设置,首先创建一个通信…

怎么选择AI伪原创工具-AI伪原创工具有哪些

在数字时代,创作和发布内容已经成为了一种不可或缺的活动。不论您是个人博主、企业家还是网站管理员,都会面临一个共同的挑战:如何在互联网上脱颖而出,吸引更多的读者和访客。而正是在这个背景下,AI伪原创工具逐渐崭露…

ReadPaper论文阅读工具

之前看文献一直用的EndNote嘛,但是突然发现了它的一个弊端,就是说每次没看完退出去之后,下次再接着看的时候它不能保留我上一次的位置信息,又要重头开始翻阅,这让我感到很烦躁哈哈。(当然也不知道是不是我哪…

6条优势,anzo capital昂首资本相信MT5替代MT4的原因

投资者都知道MT5是在MT4基础上升级换代的多资产平台,MT5于2010年6月首次发布。anzo capital昂首资本认为MT5将完全取代MT4,就像MT4取代之前版本一样,因为有以下6条优势: 一.市场深度(DOM)数据。在MT4中,DOM几乎没有用…

GoAccess实时分析Nginx日志

GoAccess 是一个基于终端的实时 Web 日志分析仪。用 C 语言编写,它是快速,互动的,并以优雅而直观的方式显示日志。它提供了各种 Web 日志文件的支持,包括 Apache,Nginx,Caddy,Amazon S3 和 Clou…

c++STL概述

目录 STL基本概念 STL六大组件 STL的优点 STL三大组件 容器 算法 迭代器 普通的迭代器访问vector容器元素 算法for_each实现循环 迭代器指向的元素类型是自定义数据类型 迭代器指向容器 常用容器 string容器 string的基本概念 string容器的操作 string的构造函…

Python函数绘图与高等代数互融实例(六): 条形图|直方图|饼状图

Python函数绘图与高等代数互融实例(一):正弦函数与余弦函数 Python函数绘图与高等代数互融实例(二):闪点函数 Python函数绘图与高等代数互融实例(三):设置X|Y轴|网格线 Python函数绘图与高等代数互融实例(四):设置X|Y轴参考线|参考区域 Python函数绘图与高等代数互融实例(五…

代码随想录刷题 Day 16

104.二叉树的最大深度 class Solution { public:int get_max(TreeNode* root) {if(root NULL) return 0;int left_depth get_max(root->left);int right_depth get_max(root->right);int depth max(left_depth, right_depth) 1;return depth;}int maxDepth(TreeNod…

Kafka的消息传递保证和一致性

前言 通过前面的文章,相信大家对Kafka有了一定的了解了,那接下来问题就来了,Kafka既然作为一个分布式的消息队列系统,那它会不会出现消息丢失或者重复消费的情况呢?今天咱们就来一探。 实现机制 Kafka采用了一系列机…

Node2Vec实战---《悲惨世界》人物图嵌入

1. pip各个包后导入 import networkx as nx # 图数据挖掘 import numpy as np # 数据分析 import random # 随机数# 数据可视化 import matplotlib.pyplot as plt %matplotlib inline plt.rcParams[font.sans-serif][SimHei] # 用来正常显示中文标签 plt.rcParams[axes.uni…