文件查找工具
locate PATH
默认模糊搜索 搜索速度快,但数据文件不会实时更新,也可使用updataedb手动更新,鉴于非生产环境或磁盘空间较小的环境下,全局搜索会造成一瞬间或者一段时间的磁盘I/O提升
常用选项:
-i 不区分大小写搜索
-n N 只显示前N个匹配项目
-r 支持使用基本正则表达式,不支持扩展
错误提示
locate: can not stat ()`/var/lib/mlocate/mlocate.db': No such file or directory
分析
默认系统安装生成数据库文件放置索引信/var/lib/mlocate/mlocate.db;如果系统才装好,或没怎么运行过命令,就不会或只有少量索引数据
解决
updatedb 该命令可以在磁盘空间扫描所有文件并建立索引生成/var/lib/mlocate/mlocate.db文件
find 实时寻找,效率过低,速度慢
find [option]… [查找路径] [查找条件] [处理动作]
查找路径: 默认为当前目目录
可执行查找条件: 如文件名、大小、类型、权限等,默认为当前目录递归搜索
处理动作: 默认输出屏幕
指定所搜层次:
-maxdepth level最大深度 从1-levelnumber
-mindepth level最小深度 从1-最后一层
find /etc/ --maxdepth 3 --mindepath 3 组合使用表示搜索第三层表示一个区间
-depth 先处理目录中的文件在处理目录,根据文件名和inode查找;配合-prune可是不显示指定目录下的文件
-name "filename": 支持使用glob *,?,[],[^]
-iname "filename": 不区分大小写
-inum n 按照inode号查找
-samefile name 相同inode号的文件
-links n 连接数为n的文件
-regex "PATTERN" :以扩展的正则,匹配整个文件路径,而非文件名称
例:# find /usr/share/pixmaps -regex ".*\.jpg$"
根据属主、数组查找:
-user USERNAME
-group GROUPNAME
-uid UserID
-gid GroupID
-nouser 没有属主的文件,如某普通用户被删除后,其家目录仍在的用户此时就属于该类
-nogroup
根据文件类型查找
-type TYPE
f 普通文件
d 目录文件
l 链接文件
s 套接字文件
b 块设备文件
c 字符设备文件
p 管道文件
空文件或空目录
-empty
示例: find / -type d -empty
file / -type f -empty
组合条件
与: -a 同时满足
[root@centos7 ~]# find / -name f2 -a -type f
或: -o 满足任意一个条件即可
# find /root -maxdepth 1 -name f2 -o -type d
非: -not ! 取反
# find /tmp -not -type d
德.摩根定律:
(非A)或(非B) = 非(A且B)
# find /tmp -not \( -name 10a -a -type d \)
# find /tmp ! -name 10a -o ! -type d
(非A)且(非B)= 非(A或B)
表示为:
!A -a !B = !( A -o B)
!A -o !B = !(A -a B)
根据大小查询
-size [+|-] #UNIT (K,M,G,c(byte))
6k (#-1,#] --> (5k,6k]
-6k [0,#-1]--> [0,5k]
+6k (#,∞)--> (6k,∞)
根据时间戳
-atime [+|-]#, 访问
#: [#,#+1)
+#: [#+1,∞]
#: [0,#)
-mtime 文件的数据最后一次修改是在n*24小时之前
-ctime 改变
-amin
-mmin 文件的数据最后一次修改是在n分钟之前。
-cmin
根据文件权限查找
-perm [/|-] MODE
MODE: 精确查找
/MODE: 模糊查找任意一小类(u,g,o)满足都可以
-MODE: 任何一大项满足都可以
例子:
(1)MODE
必须是700
[root@centos7 dev]# find /root -maxdepth 1 -perm 700 -ls
35647347 0 drwx------ 3 root root 19 Sep 19 21:21 /root/.local
68729848 4 drwx------ 15 root root 4096 Sep 19 21:23 /root/.cache
68729852 0 drwx------ 3 root root 25 Jul 20 00:06 /root/.dbus
68729884 0 drwx------ 15 root root 273 Sep 19 21:27 /root/.config
36339083 0 drwx------ 2 root root 80 Aug 31 10:21 /root/.ssh
(2) /MODE
包含其中任意小权限即可,u=r|w|x 都可以
[root@centos7 dev]# find /root -maxdepth 1 -perm /700 -ls
100663361 8 dr-xr-x--- 31 root root 4096 Oct 3 11:01 /root
102270905 4 -rw-r--r-- 1 root root 18 Dec 29 2013 /root/.bash_logout
35647347 0 drwx------ 3 root root 19 Sep 19 21:21 /root/.local
2104765 0 drwxr-xr-x 2 root root 6 Sep 19 21:21 /root/Desktop
36056676 0 drwxr-xr-x 2 root root 6 Sep 19 21:21 /root/Downloads
102496820 0 drwxr-xr-x 2 root root 6 Sep 19 21:21 /root/Videos
102270908 4 -rw-r--r-- 1 root root 100 Dec 29 2013 /root/.cshrc
(3)-MODE
包含有u=7满足,其他任意即可
[root@centos7 dev]# find /root -maxdepth 1 -perm -700 -ls
35647347 0 drwx------ 3 root root 19 Sep 19 21:21 /root/.local
2104765 0 drwxr-xr-x 2 root root 6 Sep 19 21:21 /root/Desktop
36056676 0 drwxr-xr-x 2 root root 6 Sep 19 21:21 /root/Downloads
102496820 0 drwxr-xr-x 2 root root 6 Sep 19 21:21 /root/Videos
68729848 4 drwx------ 15 root root 4096 Sep 19 21:23 /root/.cache
68729852 0 drwx------ 3 root root 25 Jul 20 00:06 /root/.dbus
68729884 0 drwx------ 15 root root 273 Sep 19 21:27 /root/.config
处理动作:
-print 默认项
-ls 列出找到的结果
-delete 删除
-fls file 相当于> 重定向结果到某个文件中
-ok COMMAND {} \; 对查找的结果执行COMMAND执行时会询问用户是否执行
-exec COMMAND {} \; 直接执行不询问
{}: 引用查找的文件名称本身
注: 执行处理动作是相当于有默认 [-a] 处理动作,-a是隐藏的,但不可忽略其存在性
如:
查找/root目录下名称为.ssh的文件和精确权限为700的文件,并使用ls列出其结果
36339083 0 drwx------ 2 root root 80 Aug 31 10:21 /root/.ssh
加上-ls后发现.ssh文件没有正常显示出来,分析下面的命令为 # find /root -maxdepth 1 -name.ssh -o -perm 700 -a -ls 模式权限执行时先执行了后面的与操作-a得到结果,再到生成结果后去或-o操作,找.sh所以没找到,解决方法先加上()先执行前面的或操作
[root@centos7 dev]# find /root -maxdepth 1 -name .ssh -o -perm 700 -ls
35647347 0 drwx------ 3 root root 19 Sep 19 21:21 /root/.local
68729848 4 drwx------ 15 root root 4096 Sep 19 21:23 /root/.cache
68729852 0 drwx------ 3 root root 25 Jul 20 00:06 /root/.dbus
68729884 0 drwx------ 15 root root 273 Sep 19 21:27 /root/.config
102480395 0 drwx------ 4 root root 27 Aug 25 14:18 /root/.ansible
68728660 0 drwx------ 5 root root 66 Sep 19 21:21 /root/.mozilla
[root@centos7 dev]# find /root -maxdepth 1 -name .ssh -o -perm 700
/root/.local
/root/.cache
/root/.dbus
/root/.config
/root/.ssh
/root/.ansible
/root/.mozilla
注: ()需要加转义符\转义,且( )里面有空格作为间隔
[root@centos7 dev]# find /root -maxdepth 1 \( -name .ssh -o -perm 700 \) -ls
35647347 0 drwx------ 3 root root 19 Sep 19 21:21 /root/.local
68729848 4 drwx------ 15 root root 4096 Sep 19 21:23 /root/.cache
68729852 0 drwx------ 3 root root 25 Jul 20 00:06 /root/.dbus
68729884 0 drwx------ 15 root root 273 Sep 19 21:27 /root/.config
36339083 0 drwx------ 2 root root 80 Aug 31 10:21 /root/.ssh
102480395 0 drwx------ 4 root root 27 Aug 25 14:18 /root/.ansible
68728660 0 drwx------ 5 root root 66 Sep 19 21:21 /root/.mozilla
xargs参数替换命令
xargs满足管道或其他命令只能传递标准输入,而不能传递参数而应运而生,可用于生成命令参数,把标准输入作为参数传递处来。xargs—从标准输入构建和执行命令行
可取一个文件中的指令或一个命令结果
[root@centos7 ~]# seq 100 |xargs echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
[root@centos7 ~]# cat f12|xargs whatis
vim (1) - Vi IMproved, a programmers text editor
vi (1) - Vi IMproved, a programmers text editor
vi (1p) - screen-oriented (visual) display editor
nano (1) - Nano's ANOther editor, an enhanced free Pico clone
bc (1) - An arbitrary precision calculator language
bc (1p) - arbitrary-precision arithmetic language
touch (1) - change file timestamps
touch (1p) - change file access and modification times
useradd (8) - create a new user or update default new user information
usermod (8) - modify a user account
userdel (8) - delete a user account and related files
[root@centos7 ~]# find /root -maxdepth 1 -name “f*” | xargs cat
ate default new user information
usermod (8) - modify a user account
userdel (8) - delete a user account and related files
>[root@centos7 ~]# find /root -maxdepth 1 -name "f*" | xargs cat