2023年12月3日发(作者:)

文件查找工具,sed的基本用法及打包工具的用法### 文件查找

- #### locate

非实时查找,也叫数据库查找基于(/var/lib/locatedb)

> 默认大概每天更新一次,如果想用locate实时查找,可以用命令updatedb升级数据库

备注:如果在白天线上服务器比较忙最好不要用updatadb 命令。(索引构建过程需要历遍整个根文件消耗资源比较大,会耗费时间)

> 优点:速度快,不占用内存

> 缺点:常更新的文件不一定会搜索得到

语法:lacate KEYWORD

会显示所有带KEYWORD的文件或者目录(包括路径中带有KEYRORD的)

示例

```

[root@zhangxiao data]# locate /root/87*

/root/87_a

/root/87_jitu

/root/

[root@zhangxiao data]#

```

find

实时查找

优点:比较准确

缺点:速度略慢会占用内存

语法:find [查找路径] [查找条件] [处理动作]

查找路径:指定具体的目录路径,默认为当前路径

查找条件:指定查找的标准,可以以文件名、大小、类型、权限等

处理动作:对符合条件的文件做什么操作;默认输出至屏幕

默认递归 查看文件夹中的文件

1.-name “FILENAME”,支持使用通配符

```

示例

[root@zhangxiao etc]# find /root/ -name "87*"

/root/87_a

/root/

/root/87_jitu

[root@zhangxiao etc]#

```

2.-iname "FILENAME"查找文件名称不区分大小写

```

示例

[root@zhangxiao ~]# touch IiIiU

[root@zhangxiao ~]# find /root -iname ii*

/root/IiIiU

[root@zhangxiao ~]#

```

"PATTERN" 以PATTERN匹配整个文件路径查找字符串而不仅仅是文件名

``` 示例

[root@zhangxiao etc]# find /etc -regex "/etc/i.*"

/etc/inittab

/etc/

/etc/

/etc/inputrc

/etc/init/

/etc/init/

/etc/init/

/etc/init/

/etc/init/

/etc/init/

/etc/init/

/etc/init.d

[root@zhangxiao etc]#

```

根据属主属组查找

1. -user USERNAME以属主为username的文件

```

示例

[root@zhangxiao data]# find /data -user "zhangxiao"

/data/dir11

/data/dir11/fa1

/data/dir11/passwd

/data/ff2

/data/dd23

/data/23

[root@zhangxiao data]#

```

2. -group GROUPNAME 以属组为指定组的文件

```

示例

[root@zhangxiao data]# find /data -group xiaoxiao

/data/fa1

/data/23

[root@zhangxiao data]#

```

3. -uid:查找属主为指定UID的文件

```

示例

[root@zhangxiao data]# find /data -uid "0"

/data

/data/testdir1

/data/testdir1/fa1

/data/testdir1/passwd

/data/testdi1

/data/lost+found

/data/passwd

/data/test1

/data/test1/passwd

[root@zhangxiao data]#

```

4. -gid:查找属组为指定GID的文件

```

示例 [root@zhangxiao data]# find /data -gid "500"

/data/dir11

/data/dir11/fa1

/data/dir11/passwd

/data/ff2

/data/dd23

[root@zhangxiao data]

```

5. -nouser: 查找没有属主的文件

```

[root@zhangxiao xiaoxiao]# find /data -nouser

/data/f33

/data/f30

/data/f32

/data/f31

[root@zhangxiao xiaoxiao]#

```

6. -nogroup:查找没有属组的文件

```

根据文件类型查找

```

1. -type

f:文件

d:目录

```

示例

[zhangxiao@zhangxiao ~]$find /data -type "d"

/data

/data/dir11

/data/testdir1

/data/testdi1

/data/lost+found

find: `/data/lost+found': Permission denied

/data/test1

[zhangxiao@zhangxiao ~]$

```

l:符号链接

s:套接字文件

b:块设备文件

c:字符设备文件

p:管道文件

``` 组合条件

```

-a :与

```

[root@zhangxiao zhangxiao]# find /data -name "f*" -a -user "zhangxiao"

/data/dir11/fa1

/data/fa1

/data/ff2

[root@zhangxiao zhangxiao]#

```

-o :或

-not,-! :非

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

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

```

示例

[root@zhangxiao firmware]# find /etc -size "+1M" -type "f"

/etc/selinux/targeted/policy/policy.24

/etc/selinux/targeted/modules/active/

/etc/gconf/ts/%

[root@zhangxiao firmware]#

```

根据文件大小查找

```

1. -size [+|-]

常用单位:K、M、G

(-size 3k:是指大于等于2K到3K的文件)

(-size -3k:0-2K的文件)

(-size +3k:大于3K的文件)

```

以时间戳为单位

以天为单位的

```

-atime

-ctime

-mtime

(-atime 3大于等于3天不到4天 )

(-atime +3 四天之前)

(-atime -3 不到三天 ```

以分钟为单位

```

-amin

-cmin

-mmin

```

按权限查找

```

-perm 222精确匹配222

-perm 【+|-】mode

在此种情况下0表示不关心,7包括1、2、4.

-perm +222 (加号表示或者的关系)

-perm -222

(减号表示每一类对象都需要有这个权限)

```

-maxdepth:查找的最大层级

-mindepth:查找的最小层级

示例

```

[root@zhangxiao zhangxiao]# find /data -maxdepth "1" -size "2k" -ls

12 4 -rw-r--r-- 1 root root 1682 Mar 31 11:18 /data/passwd

[root@zhangxiao zhangxiao]#

```

处理动作:

```

-print:默认的处理动作。输出到屏幕

-ls:对查到的文件执行ll命令

-delete:删除查找到的文件

-fls:查找到的文件信息以长格式保存在指定的目录中

-ok CMD {};:对查找到的每一个文件执行CMD,执行前交互式要求用户确认

-exec CMD {};:批量执行前面的CMD不需要确认

```

find传递查找到的文件至后边指定的命令是有些命令不能接受这么多参数此时 执行命令就会失败,我们可以用一个方法解决

```

find | xargs CMD

指的是一条一条命令传给CMD

```

find常配合cpio使用 cpio

```