Linux中find命令学习笔记
Posted mob604756f1200e
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux中find命令学习笔记相关的知识,希望对你有一定的参考价值。
LINUX系统上的文件查找命令
1.locate
依赖于实现构建好的索引库(最小化安装,无此命令),系统自动实现(周期执行),手动更新数据库(updatedb):需要遍历整个跟文件系统,所以非常消耗系统资源
工作特性:
查找速度快:键值库查找
模糊查找:包含目标字串即可匹配,不止是匹配基名。
非实时查找:根据数据库查找。
基本语法:locate [OPTION]... [PATTERN]...
-b:匹配基名
例如:locate -b passw
-c:统计出共有多少个符合条件文件
例如:locate -b passwd -c
-r:基于基本正则表达式,编写模式
2.find:
实时查找通过遍历指定路径下得文件系统层级结构完成文件查找
工作特性:
查找速度略慢:要实时遍历文件系统
精确查找:完全匹配给出目标字串
实时查找:不依赖数据库,实时进行查找
用法:find [OPTIONS]...[PATH] [条件] [处理动作]
查找起始路径:默认为当前路径
查找条件:指定得查找标准、比如文件名、类型、大小、属主、权限...
表达式:选项和测试
根据文件名查找:
-name "pattern" :
-iname "pattern"(忽略文件名大小写) :
支持glob通配符:*,?,[],[^]
基于正则表达式,根据整个文件路径名,而不仅是基名:
-regex pattern:
根据文件从属关系查找:
-user Username
-group Groupname
-uid uid
-gid gid
-nouser
-nogroup
根据文件类型查找:
-type f:普通文件
-type d:目录文件
-type b:块设备
-type l:链接文件
-type p:管道文件
-type s:套接字文件
-type c:字符设备文件
-ls 显示详细结果信息
根据文件大小查找:
-size +— # unit
常用单位:k,m,g,t
根据时间戳查找:
以天为单位:
-atime 访问时间
-mtime 修改时间
-ctime 改变时间
以分钟为单位:
-amin
-mmin
-cmin
根据权限查找:
-perm:
-perm mode:精确匹配mode所表示的条件。
-perm /mode:任何一类用户(ugo)的权限中的任何一位(rwx)符合mode所表示的条件即可。
-perm -mode:任何一类用户(ugo)的权限中的每一位(rwx)都要同时符合mode所表示的条件。
练习: 1.查找/tmp目录下,没有属主,且类型是普通文件 find /tmp/ -nouser -type f 2.找出/tmp目录下,属主为非root,且文件名包含fstab的文件
find /tmp -not -user root -name *fstab* -ls 3.找出/tmp目录下,文件名不包含fstab文件
find /tmp -not -name *fstab* 4.找出/tmp目录下,属主为非root,且文件名不包含fstab的文件 find /tmp/ -not \\( -user root -o -name "*fstab*" \\) -ls find /tmp/ -not -user root -not -name "*fstab*" -ls
组合测试:
-a:且,上面例子中 find /tmp/ -nouser -a -type f 表示没有属主,且类型是普通文件。
-o:或,上面例子中 find /tmp/ -nouser -o -type f 表示没有属主,或者类型是普通文件。
-not,!: 非,比如,查找/tmp目录下,非普通文件的文件
处理动作:对符合条件得文件做出操作,例如:删除、移动等等,默认为输出至标准输出
打印信息:
-print :输出至标准输出(默认)
-ls : 输出文件详细信息,就类似于对文件执行ll命令
-delete: 删除查找到的文件
-ok COMMAND {} \\; :对找到的每个文件使用commond表示的命令; {}在这里表示占位符,意思就是代表find命令查找到的文件名。
-exec COMMAND {} \\; :对找到的每个文件使用commond表示的命令,此命令对文件的操作将不会由用户进行确认。
注意:
以上-exec用法,会将find查找出的命令全部传递给后面的command命令,但是有些命令不能接收过长的参数,会导致命令执行报错,因此这里有另一种方法规避此问题:
find ** | xargs COMMAND
练习: 查找/var目录下,属主为root,属组为mail文件或目录 find /var/ -user root -group mail 查找/usr目录下不属于root、bin或hadoop的所有文件或目录,两种方法 find /usr/ -not -user root -not -user bin -not -user hadoop -ls find /usr/ -not \\( -user bin -o -user root -o -user hadoop \\) 查找/etc/目录下,最近一周内修改内容,且属主不是root用户也不是hadoop用户的目录或文件 find /usr/ -not \\( -user root -o -user hadoop \\) -mtime -7 查找当前系统上没有属主或属组,且最近一周内被访问过的文件或目录 find / -nouser -o -nogroup -atime -7 查找/etc目录下所有用户都没有写权限的文件 find /etc -perm /222 find /etc -not -perm -222 查找/etc目录下,至少有一个用户没有执行权限的文件 find / etc -not -perm -111 -ls 查找/etc/init.d目录下,所有用户都有执行权限,且其他用户有写权限的文件 find /etc -perm -113 -ls 查找/tmp/下,所有没有用户的文件,且访问时间超过7天,并删除这些文件 find /tmp -nouser -atime +7 -exec rm -rf {} \\;
以上是关于Linux中find命令学习笔记的主要内容,如果未能解决你的问题,请参考以下文章