1、find命令的基本信息

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

find命令格式:

[root@localhost ~ # find 搜索路径 [选项] 搜索内容

选项:
-name:按照文件名搜索
-iname:按照文件名搜索,不区分文件名大小写
-inum:按照inode号搜索

2、find命令基本使用

# 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 12月 30 18:24 abcde
1043285 -rw-r--r--. 2 root root 0 12月 30 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[+|-]大小:按照指定大小搜索文件

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

(1)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)

(2)示例:

# 1.查看root目录下文件信息
[root@DevOps ~]# ll -h
总用量 48K
-rw-r--r--. 1 root root 17 1月 9 17:08 abc
-rw-------. 1 root root 1.3K 12月 23 20:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 28K 12月 23 20:46 install.log
-rw-r--r--. 1 root root 7.4K 12月 23 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 1月 9 17:08 abc
-rw-------. 1 root root 1.3K 12月 23 20:46 anaconda-ks.cfg
-rw-r--r--. 1 root root 28K 12月 23 20:46 install.log
-rw-r--r--. 1 root root 7.4K 12月 23 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数据修改时间来举例,重点说说+-时间的含义。

我们画一个时间轴,来解释一下,如下图:

说明:

  • -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 1月 9 18:17 abc
-rw-r--r--. 1 root root 0 1月 9 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 1月 9 18:17 abc
-rw-------. 1 root root 0 1月 9 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

『学了就忘』Linux基础命令 — 30、find命令详细说明的更多相关文章

  1. 『学了就忘』Linux基础 — 17、远程服务器关机及重启时的注意事项

    目录 1.为什么远程服务器不能关机 2.远程服务器重启时需要注意两点 3.不要在服务器访问高峰运行高负载命令 4.远程配置防火墙时不要把自己踢出服务器 5.指定合理的密码规范并定期更新 6.合理分配权 ...

  2. 『学了就忘』Linux基础命令 — 20、文件操作的相关命令

    目录 1.touch 命令 2.stat命令 3.cat命令 4.more命令 5.less命令 6.head命令 7.tail命令 1.touch 命令 touch命令用于创建空文件或修改文件时间, ...

  3. 『学了就忘』Linux基础命令 — 26、帮助命令

    目录 1.man命令 (1)man命令的快捷键 (2)man命令的帮助级别(了解即可) (3)man命令的使用 2.info命令 3.help命令 4.--help选项 1.man命令 man是最常见 ...

  4. 『学了就忘』Linux基础命令 — 27、搜索操作相关命令

    目录 1.whereis命令 2.which命令 3.locate命令 1.whereis命令 whereis是搜索系统命令的命令,也就是说,whereis命令不能搜索普通文件,而只能搜索系统命令. ...

  5. 『学了就忘』Linux基础命令 — 29、关机和重启

    目录 1.sync数据同步 2.shutdown命令 3.reboot命令 4.halt和poweroff命令 5.init命令 1.sync数据同步 sync命令的基本信息如下: 命令名称:sync ...

  6. 『学了就忘』Linux基础命令 — 32、压缩和解压缩相关命令

    目录 1.".zip"格式压缩 2.".gz"格式压缩 3.".bz2"格式压缩 4.".tar"格式打包 5.打包和压 ...

  7. 『学了就忘』Linux基础命令 — 35、网络中与其他机器通信的命令

    目录 1.write命令 2.wall命令 3.mail 命令 使用1:发送邮件 使用2:查看已经接收的邮件 使用3:发送文件内容 1.write命令 (1)write命令的基本信息 命令名称:wri ...

  8. 『学了就忘』Linux基础命令 — 36、查看系统痕迹相关命令

    目录 1.w命令 2.who命令 3.last命令 4.lastlog命令 5.lastb命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./var/run/utmp./var/lo ...

  9. 『学了就忘』Linux基础 — 6、VMware虚拟机安装Linux系统(超详细)

    目录 1.打开VMware虚拟机软件 2.选择Linux系统的ISO安装镜像 3.开启虚拟机安装系统 (1)进入Linux系统安装界面 (2)硬件检测 (3)检测光盘 (4)欢迎界面 (5)选择语言 ...

  10. 『学了就忘』Linux基础命令 — 25、文件基本权限的管理

    目录 1.文件和目录的默认权限 2.umask默认权限 (1)查看系统的umask权限 (2)用八进制数值显示umask权限 (3)umask权限的计算方法 (4)注意:umask默认权限的计算绝不是 ...

随机推荐

  1. 一文让你彻底理解SQL连接查询

    表结构 内连接 笛卡尔积问题 普通内连接:inner join on 隐式内连接: 外连接 内连接与外连接查询的区别 内连接查询是查询两张表交集的数据,主外键关联的数据. 左连接查询是查询左表中的所有 ...

  2. 『GoLang』语法基础

    标识符 字母或下划线开头 之后只能出现数字.字母.下划线 大小写敏感 Go语言关键字 break default func interface select case defer go map str ...

  3. centos7 .net core 使用supervisor守护进程后台运行

    安装supervisor yum install supervisor 配置supervisor vi /etc/supervisord.conf 拉到最后,这里的意思是 /etc/superviso ...

  4. AT4502-[AGC029C]Lexicographic constraints【二分,栈】

    正题 题目链接:https://www.luogu.com.cn/problem/AT4502 题目大意 给出\(n\)个长度\(S\),求一个最小\(m\)表示用大小为\(m\)的字符集构造出\(n ...

  5. 通过Python收集MySQL MHA 部署及运行状态信息的功能实现

    一. 背景介绍 当集团的MySQL数据库实例数达到2000+.MHA集群规模数百个时,对MHA的及时.高效管理是DBA必须面对的一个挑战.MHA 集群 节点信息 和 运行状态 是管理的基础.本篇幅主要 ...

  6. 实验3:OpenFlow协议分析实践

    作业链接:实验3:OpenFlow协议分析实践 一.实验目的 能够运用 wireshark 对 OpenFlow 协议数据交互过程进行抓包: 能够借助包解析工具,分析与解释 OpenFlow协议的数据 ...

  7. Go语言之结构体与方法

    一.结构体 结构体是一系列属性的集合(类似于 Python 中的类) 1.结构体的定义与使用 // 定义 type Person struct { Name string Age int Sex st ...

  8. Spring Boot中使用PostgreSQL数据库

    在如今的关系型数据库中,有两个开源产品是你必须知道的.其中一个是MySQL,相信关注我的小伙伴们一定都不陌生,因为之前的Spring Boot关于关系型数据库的所有例子都是对MySQL来介绍的.而今天 ...

  9. 《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)

    1.简介 有些测试场景或者事件,Selenium根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停在某 ...

  10. 创业公司用 Serverless,到底香不香?

    作者 | Mike Butusov 来源 | Serverless 公众号 在过去的 5 年里,使用云厂商处理应用后台的流行程度大幅飙升.其一,初创企业主采用 Serverless 方式,以节省基础设 ...