文件的搜素命令(which whereis locate find)
1、which 查找可执行的文件 搜索命令所在路径以及别名
路径:在PATH环境指定的路径中:
[root@localhost ~]# which ll
alias ll='ls -l --color=auto'
/usr/bin/ls
2、whereis 查看文件的位置( 只能用于搜索程序名 搜索命令所在的路径以及帮助文档所在位置)
b:只查找可执行文件
-m:只查找帮助文件
[root@localhost ~]# whereis find
find: /usr/bin/find /usr/share/man/man1/find.1.gz
[root@localhost ~]# whereis -b find
find: /usr/bin/find
[root@localhost ~]# whereis -m find
find: /usr/share/man/man1/find.1.gz
3、locate
locate:
依赖于事先构建好的索引库,定时更新索引库 updatedb更新
查找速度快,模糊查找
yum install mlocate -y
-b:只匹配路径中的基名
-c:统计总共有多少符合条件个文件
4.find: 实时查找工具
find 路径 模式:
find [options] [查找的起始路径] [查找条件] [处理动作]
查找的起始路径:指定具体的搜索目录,默认为当前目录
查找条件:指定查找的标准,大小,文件名,类型。默认是指定路径下的所有文件
处理动作:符合查找条件的文件做出的操作,例如cp,rm,默认为输出到标准输出
-
组合测试
与 -a 或 -o 非:-not !
-
文件名查找:
-name “pattern” 引号需要加
支持通配符 * ? [] [^]
-iname “pattern” 不区分大小写
基于正则表达式模式查找
-regex “pattern” 匹配整个路径 而不是文件名
find / -regex /t./f.
-
根据文件的从属关系查找
-user 属主 -group 属组 -uid GID 属主ID -gid GID 属组ID -nouser 没有属主的文件 -nogroup 没有属组的文件
-
根据文件类型查找
-type TYPE f:普通文件 d:目录 b:块设备文件 l:链接文件 c:字符设备文件 p:管道文件 s:socket套接字文件
-
根据文件的大小查找
-size [+|-] #UNIT #UNIT:(#-1,#] -#UNIT:[0,#-1) +#UNIT:(#,OO)
-
根据时间戳查找
1.以天为单位 -atime [+|-]# 文件最后访问时间 -mtime [+|-]# 文件最后修改时间 -ctime [+|-]# 文件最后改变时间 #:[#,#-1): 10 大于等于10天前,小于9天前 -#:(#,0] -10 最后的访问时间10天以内 +#:(oo,#-1] +10 最后的访问时间在9天以前,包括9天 查找最近10天访问的文件 2.以分钟为单位 -amin [+|-]# -mmin [+|-]# -cmin [+|-]#
-
根据文件权限来查找
-perm mode 777 rwx 421 权限对象:三类 属主 属组 其他 权限位: 读 写 执行 r w x 4 2 1 mode 精确查找 /mode:任何一个权限对象中满足其一即可 -mode:所有都需要满足 421 精确,9位权限位所有的权限位保持一致 /421 只要包含,且9位权限中每个权限中有一个满足即可 或 -421 只要包含,且9位权限中每个权限均要满足 与
-
目录层级
-path 基于目录层级
基于目录深度查找 -maxdepth 最大深度 -mindepth 最小深度 查找/tmp目录下第三层目录中的文件 [root@nebula tmp]# find /tmp/ -maxdepth 3 -mindepth 3 -name "file*" /tmp/test/test/file_test [root@nebula tmp]# find /tmp/ -maxdepth 4 -mindepth 4 -name "file*" /tmp/test/test/test/file_new
处理动作:
-print: 默认动作,输出到标准输出
-fls /path/to/somefile:将查找到的文件的长格式信息写入到指定文件中
-ok commond {} ; 对执行的每个文件做commond操作,每次的操作需要用户确认
-exec commond {} ; 对执行的每个文件做commond操作
-xargs -0 commond {} ;
练习:整理find用法,熟练掌握使用
1)查找/var目录下属主为root,且属组为mail的所有文件或目录;
[root@localhost ~]# find /var -user root -group mail -ls
50351457 0 drwxrwxr-x 2 root mail 6 4月 11 2018 /var/spool/mail
- 查找/etc目录下大于1M且类型为普通文件的所有文件; -type f 普通文件; ls -lh较查看的详细信息
[root@localhost ~]# find /etc -type f -size +1M -exec ls -lh {} ;
-r–r--r–. 1 root root 7.6M 4月 8 22:32 /etc/udev/hwdb.bin
-rw-------. 1 root root 3.8M 11月 3 2018 /etc/selinux/targeted/active/policy.kern
- 查找/etc目录下所有用户都没有写权限的文件; -type f
[root@localhost ~]# find /etc -not -perm /222 -type f -ls
- 查找/etc目录至少有一类用户没有执行权限的文件
[root@localhost ~]# find /etc -not -perm -111 -type f -ls