gtxyzz

Linux常用命令-find命令详解

gtxyzz linux 2023-01-25 457浏览 0

一、find命令常用功能

Linux常用命令-find命令详解
find命令

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

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

2、按照文件名搜索

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

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

4、按照修改时间搜索

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

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

5、按照权限搜索

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

举例:

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

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

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

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

举例:

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

7、按照文件类型搜索

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

举例:

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

8、逻辑运算符

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

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

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

举个例子:

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

-o:or逻辑或

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

例如:

#在当前目录下搜索文件要么是cangls的文件,要么是bols的文件,两个都可以搜索到。 
[root@localhost ~ ] # find . -name cangls -o -name bols
./cang1s
./bols
  • -not:not 逻辑非

-not是逻辑非,也就是取反的意思。

举个例子:

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

继续浏览有关 Linux命令 的文章
发表评论