『学了就忘』Linux基础命令 — 30、find命令详细说明
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 {} \;
说明:
- 基本格式,只要写
-exec
,命令最后一定要写\;
。 - 作用是,把命令1的搜索结果(
find 搜索路径 [选项] 搜索内容
),作为命令2的操作对象。(其实可以理解成把命令1的操作结果,放在命令2后边的{ }
中,然后用命令2去搜索{ }
中的内容。) - 在命令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命令详细说明的更多相关文章
- 『学了就忘』Linux基础 — 17、远程服务器关机及重启时的注意事项
目录 1.为什么远程服务器不能关机 2.远程服务器重启时需要注意两点 3.不要在服务器访问高峰运行高负载命令 4.远程配置防火墙时不要把自己踢出服务器 5.指定合理的密码规范并定期更新 6.合理分配权 ...
- 『学了就忘』Linux基础命令 — 20、文件操作的相关命令
目录 1.touch 命令 2.stat命令 3.cat命令 4.more命令 5.less命令 6.head命令 7.tail命令 1.touch 命令 touch命令用于创建空文件或修改文件时间, ...
- 『学了就忘』Linux基础命令 — 26、帮助命令
目录 1.man命令 (1)man命令的快捷键 (2)man命令的帮助级别(了解即可) (3)man命令的使用 2.info命令 3.help命令 4.--help选项 1.man命令 man是最常见 ...
- 『学了就忘』Linux基础命令 — 27、搜索操作相关命令
目录 1.whereis命令 2.which命令 3.locate命令 1.whereis命令 whereis是搜索系统命令的命令,也就是说,whereis命令不能搜索普通文件,而只能搜索系统命令. ...
- 『学了就忘』Linux基础命令 — 29、关机和重启
目录 1.sync数据同步 2.shutdown命令 3.reboot命令 4.halt和poweroff命令 5.init命令 1.sync数据同步 sync命令的基本信息如下: 命令名称:sync ...
- 『学了就忘』Linux基础命令 — 32、压缩和解压缩相关命令
目录 1.".zip"格式压缩 2.".gz"格式压缩 3.".bz2"格式压缩 4.".tar"格式打包 5.打包和压 ...
- 『学了就忘』Linux基础命令 — 35、网络中与其他机器通信的命令
目录 1.write命令 2.wall命令 3.mail 命令 使用1:发送邮件 使用2:查看已经接收的邮件 使用3:发送文件内容 1.write命令 (1)write命令的基本信息 命令名称:wri ...
- 『学了就忘』Linux基础命令 — 36、查看系统痕迹相关命令
目录 1.w命令 2.who命令 3.last命令 4.lastlog命令 5.lastb命令 系统中有一些重要的痕迹日志文件,如/var/log/wtmp./var/run/utmp./var/lo ...
- 『学了就忘』Linux基础 — 6、VMware虚拟机安装Linux系统(超详细)
目录 1.打开VMware虚拟机软件 2.选择Linux系统的ISO安装镜像 3.开启虚拟机安装系统 (1)进入Linux系统安装界面 (2)硬件检测 (3)检测光盘 (4)欢迎界面 (5)选择语言 ...
- 『学了就忘』Linux基础命令 — 25、文件基本权限的管理
目录 1.文件和目录的默认权限 2.umask默认权限 (1)查看系统的umask权限 (2)用八进制数值显示umask权限 (3)umask权限的计算方法 (4)注意:umask默认权限的计算绝不是 ...
随机推荐
- redis被360禁止,设置启动
https://blog.csdn.net/blick__winkel/article/details/77986481 一.下载windows版本的Redis 去官网找了很久,发现原来在官网上可以下 ...
- python学习笔记(六)-集合
集合是一个无序不重复元素的集.基本功能包括关系测试和消除重复元素.集合对象还支持union(联合),intersection(交),difference(差)和sysmmetric differenc ...
- 使用亚马逊服务器报错:Signature not yet current: 20190726T070253Z is still later than 20190726T070246Z (20190726T065746Z + 15 min.)时间不同步的解决办法
1.首先获取亚马逊的时间: $ curl http://s3.amazonaws.com -v 2.更改当前服务器时间,使之与亚马逊时间同步 $ date -s 'xxxx-xx-xx xx:xx:x ...
- P6563-[SBCOI2020]一直在你身旁【dp,单调队列】
正题 题目链接:https://www.luogu.com.cn/problem/P6563 题目大意 长度为\(n\)的序列\(a_i\),现在有一个随机\([1,n]\)的整数,每次你可以花费\( ...
- Springboot实现VNC的反向代理
背景 用户需要通过前端HTML页面的noVNC(noVNC是什么?)客户端连接底层VNC Server服务端,为了防止VNC Server的IP暴露,因此需要做一层代理.正常情况下使用Nginx. ...
- 羽夏闲谈——VSCode 配置 C/C++环境
前言 VSCode是微软发布一款跨平台的源代码编辑器,其拥有强大的功能和丰富的扩展,使之能适合编写许多语言.我的环境是64位Win10,如果是其他系统请自行判断调整.本人根据网上的配置方法在结合本 ...
- Go语言之Goroutine与信道、异常处理
一.Goroutine Go 协程可以看做成一个轻量级的线程,Go 协程相比于线程的优势: Goroutine 的成本更低大小只有 2 kb 左右,线程有几个兆. Goroutine 会复用线程,比如 ...
- 易华录 X ShardingSphere|葫芦 App 后台数据处理的逻辑捷径
"ShardingSphere 大大简化了分库分表的开发和维护工作,对于业务的快速上线起到了非常大的支撑作用,保守估计 ShardingSphere 至少为我们节省了 4 个月的研发成本.& ...
- 洛谷P7078 [CSP-S2020] 贪吃蛇 题解
比赛里能做出这题的人真的非常厉害,至少他的智商和蛇一样足够聪明. 首先有一个结论: 当前最强的蛇吃了最弱的蛇之后,如果没有变成最弱的蛇,他一定会选择吃! 证明: 假设当前最强的蛇叫石老板. 如果下一条 ...
- 关于 我的博客和Git-hub
欢迎大家到我的GitHub 热烈讨论 https://github.com/ljj-19951010 由于另一个博客忘了怎么登陆了,换用此博客(仅供个人学习使用,请勿传播) 如果想看 特别详细的教程请 ...