扩展: 之前我们说过,硬连接是非常不好识别链接,源文件和硬链接文件只是引用计数增加了,其他信息是无法识别的。如下:
[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命令在运行时产生的临时文件。同时这种临时文件找到也是立刻消失的,所以会出现每行最后的没有那个文件或目录。
Linux中的文件有访问时间(atime)、数据修改时间(mtime)、**状态修改时间(ctime)**这三个时间,我们也可以按照时间来搜索文件。(注意:如果以time结尾的时间单位,默认单位时间是天。)
命令格式: [root@localhost ~ ] # find 搜索路径 [选项] 搜索内容 选项: -atime[+|-]时间:按照文件访问时间搜索 -mtime[+|-]时间:按照文件数据修改时间搜索 -ctime[+|-]时间:按照文件状态修改时间搜索 提示:也有-amin、-mmin等时间选项,时间单位为分钟。用mtime数据修改时间来举例,重点说说+和-时间的含义。
我们画一个时间轴,来解释一下
说明:
-5:代表5天内修改的文件。5:代表前5~6天,那一天修改的文件。+5:代表6天前修改的文件。举例:
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的权限搜索,能理解就好,+和-工作中一般用不太多。
举例:
按照所有者查找文件 [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系统中没有垃圾文件。举例:
查找当前文件中的目录 [root@DevOps ~]# find . -type d . ./test 其他选项同理。find命令支持一些复杂的搜索方式:逻辑与、逻辑或、逻辑非。
命令格式: [root@localhost ~ ] #find 搜索路径 [选项] 搜索内容 选项: -a:and逻辑与 -o:or逻辑或 -not:not 逻辑非find命令也支持逻辑运算符选项,其中-a代表逻辑与运算,也就是-a的两个条件都成立,find搜索的结果才成立(其中有一个不成立都不行)。举个例子:
#在当前目录下搜索大于2KB,并且文件类型是普通文件的文件 [root@localhost ~ ] # find . -size +2k -a -type f-o选项代表逻辑或运算,也就是-o的两个条件只要其中一个成立,find命令就可以找到结果。例如:
#在当前目录下搜索文件要么是cangls的文件,要么是bols的文件,两个都可以搜索到。 [root@localhost ~ ] # find . -name cangls -o -name bols ./cang1s ./bols-not是逻辑非,也就是取反的意思。举个例子:
#在当前目录下搜索文件名不是cangls的文件 [root@localhost ~] # find . -not -name cangls # 下面!的写法和上边-not是一个意思,都是逻辑非运算符。 [root@localhost ~] # find . ! -name cangls (注意!左右两边都有要空格)这里我们主要讲解两个选项“-exec”和“-ok”,这两个选项的基本作用非常相似。我们先来看看“-exec”选项的格式。
说明: 1.基本格式,只要写-exec,命令最后一定要写\;。 2.作用是,把命令1的搜索结果(find 搜索路径 [选项] 搜索内容),作为命令2的操作对象。(其实可以理解成把命令1的操作结果,放在命令2后边的{ }中,然后用命令2去搜索{ }中的内容。) 3.在命令2种不识别别名,就是在命令2种不能用别名,如果ll命令。
“-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