VPS测评 VPS推荐 VPS优惠
Linux运维

linux find命令的用法

find命令介绍

find 是实时查找工具,通过遍历指定路径完成文件查找

特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 查找条件丰富

格式:

find [OPTION]... [查找路径] [查找条件] [处理动作]

查找路径:指定具体目标路径;默认为当前目录。

查找条件:指定的查找标准,比如文件名、大小、类型、权限等;默认为找出指定路径下的所有文件。

处理动作:对符合条件的文件做操作,默认输出至屏幕(-print)


find命令的查找条件

指定搜索目录的层级

/etc/aaa 是1级 /etc/aaa/bbb 是2级 以此类推

-maxdepth level #最大搜索目录深度
-mindepth level #最小搜索目录深度

例子:

find /etc -mindepth 1 -maxdepth 2

先处理文件,再处理目录本身

-depth

例子:

find /root -depth

根据文件名和inode查找

-name "文件名称" #支持通配符:*, ?, [], [^],通配符要加双引号引起来
-iname "文件名称" #不区分大小写
-inum n #按inode号查找
-samefile name #相同inode号的文件
-links n #链接数为n的文件
-regex “PATTERN” #以PATTERN匹配整个文件路径,而非文件名称

例子:

find /etc/nginx -name "*.conf"
find /etc/nginx -regex ".*\.conf"

根据文件所属用户、组查找

-user USERNAME #查找属主为指定用户(UID)的文件
-group GRPNAME #查找属组为指定组(GID)的文件
-uid UserID #查找属主为指定的UID号的文件
-gid GroupID #查找属组为指定的GID号的文件
-nouser #查找没有属主的文件
-nogroup #查找没有属组的文件

根据文件类型查找

-type TYPE

TYPE可以是以下形式

f: 普通文件
d: 目录文件
l: 符号链接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件

例子:

find /dev -type b

查找空文件或目录

-empty

例子:

find /root -empty

组合条件

与:-a -and

或:-o -or

非:! -not

两个表达式之间如果什么都没有,默认是”与“的关系,所以:

expr1 expr2
expr1 -a expr2
expr1 -and expr2

以上这三种情况表达的是同一种意思

德摩根定律

!A -a !B = !(A -o B)
!A -o !B = !(A -a B)

查找时不进入某个目录

查找/etc下,除了/etc/security目录以外其它所有.conf后缀的文件

find /etc -path '/etc/security' -a -prune -o -name '*.conf'

根据文件大小来查找

-size n[cwbkMG]
n #表示(n-1, n] 例如:6k 表示(5k,6k]
-n #表示[0,n-1] 例如:-6k 表示[0,5k]
+n #表示(n,∞) 例如:+6k 表示(6k,∞)

所以,-size -1M其实只能找到空文件。

find /root -size -1M -ls

以上命令-size -1M表示[0M,0M]等于空文件。

根据时间戳

time表示天、min表示分

-[a|m|c]time n
-[a|m|c]min n

n的含义

n [n,n+1)
+n [n+1,∞]
-n [0,n)

根据权限查找

perm [/|-]MODE

MODE有三种形式

MODE #不加任何符号表示精确的权限匹配
/MODE #或,任何一类(u,g,o)对象的权限中只要能一位匹配即可
-MODE #与,每一类对象都必须同时拥有指定权限
0表示不关注

处理动作

-print 默认的处理动作,显示至屏幕
-ls 类似于对查找到的文件执行"ls -dils"命令格式输出
-fls file 查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file
-delete 删除查找到的文件,此命令慎用
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{} 用于引用查找到的文件名称自身
\;放在结尾是语法要求,不可以省略

例子

查找 /usr 下所有大小在50K~10m 之间且具有修改组 ID权限的文件,将这些文件放置于/root下

find /usr -perm -2000 -a -size +50k -size -11M -exec cp -a {} /root \; 

xargs命令

xargs可以读取标准输入并生成参数。

许多命令不能接受过多参数,命令执行可能会失败,xargs 可以解决。

例子:

显示十个数字

seq 10 | xargs

删除当前目录的文件

ls | xargs rm

批量创建和删除用户

echo user{1..10}|xargs -n1 useradd
echo user{1..10}|xargs -n1 userdel -r
未经允许不得转载:青蛙主机 » linux find命令的用法

VPS相关常用工具

PING测试工具自用毛子接码站