当前位置 : 主页 > 网络编程 > 其它编程 >

『无欲则无求』Linux常用命令—27、find命令

来源:互联网 收集:自由互联 发布时间:2023-07-02
文章目录1、find命令的基本信息2、按照文件名搜索3、按照文件大小搜索1find命令的单位2举例1find 命令的单位 2举例 4、按照修改时间搜索 5、按照权限搜索 6、按照所有者和所属组搜索
文章目录1、find命令的基本信息2、按照文件名搜索3、按照文件大小搜索1find命令的单位2举例1find 命令的单位
  • 2举例
  • 4、按照修改时间搜索
  • 5、按照权限搜索
  • 6、按照所有者和所属组搜索
  • 7、按照文件类型搜索
  • 8、逻辑运算符
    • 1-aand逻辑与
    • 2-oor逻辑或
    • 3-notnot 逻辑非
  • 9、其他选项
    • 1-exec选项
    • 2-ok选项
  • 1、find命令的基本信息

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

    2、按照文件名搜索

    [rootlocalhost ~ ] # find 搜索路径 [选项] 搜索内容选项-name按照文件名搜索-iname按照文件名搜索不区分文件名大小写-inum按照inode号搜索#1.find命令基本使用[root192 ~]# find . -name abcde./abcde提示搜索位置越大消耗系统资源越多。在生产服务器上搜索的时候尽量不在根目录下搜索把搜索的范围尽量控制在最小。#2.-iname[root192 ~]# find . -iname abcde./ABCDE./abcde提示i表示忽略的意思就是忽略大小写。#3.-inum之前我们通过文件名可以查看到文件的i节点号[root192 ~]# ls -i abcde 1043285 abcde这里通过find命令的-inum选项可以实现通过i节点号查看文件的名字。[root192 ~]# find . -inum 1043285./abcde这两个是一对命令记忆比较方便。

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

    [root192 ~]# ls -il abcde /tmp/abcde_h 1043285 -rw-r--r--. 2 root root 0 12月 30 18:24 abcde1043285 -rw-r--r--. 2 root root 0 12月 30 18:24 /tmp/abcde_h

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

    [root192 ~]# find / -inum 1043285find: “/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、按照文件大小搜索

    [rootlocalhost ~ ] # find 搜索路径 [选项] 搜索内容选项-size[|-]大小按照指定大小搜索文件这里的“”的意思是搜索比指定大小还要大的文件“-”的意思是搜索比指定大小还要小的文件。

    1find 命令的单位

    [rootlocalhost ~ ] # man find-size n[cwbkMG]File uses n units of space.The following suffixes can be used#这是默认单位如果单位为b或不写单位则按照512 Byte搜索。 bfor 512-byte blocksthis is the default if no suffix is used#搜索单位是c按照字节搜索。cfor bytes#搜索单位是w按照双字节中文搜索。wfor two-byte words#按照KB单位搜索必须是小写的k。kfor Kilobytesunits of 1024 bytes#按照MB单位搜索必须是大写的MMfor Megabytesunits of 1048576 bytes#按照GB单位搜索必须是大写的G Gfor Gigabytesunits of 1073741824 bytes

    2举例

    1.查看root目录下文件信息[rootDevOps ~]# 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.syslog2.在当前目录下搜索文件大小为28k的文件[rootDevOps ~]# find . -size 28k./install.log3.在当前目录下搜索文件大小大于1k的文件。[rootDevOps ~]# find . -size 1k../install.log./anaconda-ks.cfg./install.log.syslog注意具体单位字母看上边列表。4.注意一个小问题如果按文件大小搜索并且文件的大小没有写单位默认是按b字节进行查找的但是我们可以看到下面并没有查询处abc文件。[rootDevOps ~]# 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[rootDevOps ~]# find . -size 17[rootDevOps ~]# 原因是看上边的单位说明 bfor 512-byte blocksthis is the default if no suffix is used说b默认单位是按照512byte查找这是一个默认的属性值如上边我们输入的17就是17*512b的结果进行计算然后进行查找。c是按照字节搜索。[rootDevOps ~]# find . -size 17c./abc

    4、按照修改时间搜索

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

    命令格式[rootlocalhost ~ ] # find 搜索路径 [选项] 搜索内容选项-atime[|-]时间按照文件访问时间搜索-mtime[|-]时间按照文件数据修改时间搜索-ctime[|-]时间按照文件状态修改时间搜索提示也有-amin、-mmin等时间选项时间单位为分钟。

    用mtime数据修改时间来举例重点说说和-时间的含义。

    我们画一个时间轴来解释一下

    在这里插入图片描述

    说明

    • -5代表5天内修改的文件。
    • 5代表前5~6天那一天修改的文件。
    • 5代表6天前修改的文件。

    5、按照权限搜索

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

    举例

    1.查看文件夹内容[rootDevOps 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 def2.按照权限查找文件[rootDevOps test]# find . -perm 644./def./abc注644代表权限rw-r--r--3.修改文件def权限为600然后进行、-查找[rootDevOps test]# chmod 600 def [rootDevOps 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查找[rootDevOps test]# find . -perm 444.代表当前目录不用考虑./def./abc[rootDevOps test]# find . -perm -444../abc[rootDevOps test]# 说明如果是代表所有者所属组其他人这三个权限中只要有一个权限大于搜索的权限就能够找到该权限。如果是-代表三个权限都要满足每项权限如abc文件的权限是644每个权限全都大于444所以被搜索到。总结说就是三个权限满足一个即可-三个全满足才可以。

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

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

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

    举例

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

    提示

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

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

    [rootDevOps test] # find / -nouserfind: “/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、按照文件类型搜索

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

    举例

    查找当前文件中的目录[rootDevOps ~]# find . -type d../test其他选项同理。

    8、逻辑运算符

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

    命令格式[rootlocalhost ~ ] #find 搜索路径 [选项] 搜索内容选项-a:and逻辑与-o:or逻辑或-not:not 逻辑非

    1-aand逻辑与

    find命令也支持逻辑运算符选项其中-a代表逻辑与运算也就是-a的两个条件都成立find搜索的结果才成立其中有一个不成立都不行。举个例子

    #在当前目录下搜索大于2KB并且文件类型是普通文件的文件[rootlocalhost ~ ] # find . -size 2k -a -type f

    2-oor逻辑或

    -o选项代表逻辑或运算也就是-o的两个条件只要其中一个成立find命令就可以找到结果。例如

    #在当前目录下搜索文件要么是cangls的文件要么是bols的文件两个都可以搜索到。 [rootlocalhost ~ ] # find . -name cangls -o -name bols./cang1s./bols

    3-notnot 逻辑非

    -not是逻辑非也就是取反的意思。举个例子

    #在当前目录下搜索文件名不是cangls的文件[rootlocalhost ] # find . -not -name cangls# 下面的写法和上边-not是一个意思都是逻辑非运算符。[rootlocalhost ] # find . -name cangls注意左右两边都有要空格

    9、其他选项

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

    1-exec选项

    [rootlocalhost ~ ] # 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【文章原创作者:美国服务器 https://www.68idc.cn处的文章,转载请说明出处】

    上一篇:oraclelistener详解(DEDICATEDestablished:0refused:0)
    下一篇:没有了
    网友评论