linux 查找locate、find
一、文件查找:在文件系统上查找符合条件的文件
locate命令: 用来查找文件或目录,locate命令查找比find快,比如在/tmp下新建了一个xx文件夹,此时再使用locate去查找xx文件夹时发现无法找到文件夹,
因为locate是事先把系统内所有档案名称及路径都索引到数据库了,在使用时尽量手动操作updatedb更新数据库。
选项
-i:不区分大小写的搜索 示列locate -i pasSSWd
-n:只列出查询出结果的前三个 示列:locate -n3 passwd
-r:使用基本正则表达式需要加r 示列:locate -r '\.conf$'
find命令:实时查找工具,通过遍历指定路径完成文件查找
选项
-maxdepth:最大搜索目录深度,指定目录下的文件为1级
-depth:先处理目录内的文件,再处理指定目录
示列:find /tmp/ -maxdepth 2 -name wujiancong
-mindepth:查看不小于多深的文件,不低于所限内容
示列:find /etc -mindepth 4 -name *.conf
-name:“文件名称” 支持glob函数 *,?,[],[^]
-iname:“文件名称” 不区分大小写查找
-inum:按inode号查找
-samefile name 相同inode号的文件
-regex:以模式匹配整个文件路径,而非文件名称
示列:find /etc -regex “.*\.sh$"
根据属主、属组查找
-user username :查找属主为指定用户UID的文件
示列:find -user wjc
-group grpname:查找属组为指定组GID的文件
示列:find -user joe -not -group joe
-uid userID:查找属主为指定的UID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
根据文件类型查找
-type
f:普通文件 d:目录文件 l:符号链接文件
p:管道文件 s:套接字文件 b:块设备文件
c:字符设备文件 -empty:空文件或目录
find /tmp -type d 查找tmp下的目录文件
find /tmp -type f 查找tmp下的普通文件
find / -type p 查找/下的管道文件
组合条件查找
组合条件:
与:-a 或:-o 非:-not !
德.摩根定律:
(非A)或(非B)=非(A且B)
(非A)且(非B)=非(A或B)
查找tmp下非用户root与非f开头的文件
示列: find /tmp/ \(-not -user root -a -not -name 'f*'\)
根据文件大小查找
-size [+|-]#UNIT
常用单位:k, M, G,c(byte)
#UNIT: (#-1, #]如:6k 表示(5k,6k]
-#UNIT:[0,#-1]如:-6k 表示[0,5k]
+#UNIT:(#,∞)如:+6k 表示(6k,∞)
查找大于5k文件:find /tmp/ -size +5k
查找小于5k文件:find /tmp/ -size -5k
以时间为单位查找
-amin 查找n分钟以前被访问过的所有文件。
-atime 查找n天以前被访问过的所有文件。
-cmin 查找n分钟以前文件状态被修改过的所有文件。
-ctime 查找n天以前文件状态被修改过的所有文件。
-mmin 查找n分钟以前文件内容被修改过的所有文件。
-mtime 查找n天以前文件内容被修改过的所有文件。
以权限查找
find /tmp -perm 755
查询到的标准输出再进行处理动作
-print:默认的处理动作,显示至屏幕
-ls:类似于对查找到的文件执行“ls -l”命令
-delete:删除查找到的文件
-fls file:查找到的所有文件的长格式信息保存至指定文件中
-ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
-exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身
find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性
传递给后面的命令
由于很多命令不支持管道|来传递参数,xargs用于产生某个命令的参数,xargs
可以读入 stdin 的数据,并且以空格符或回车符将 stdin 的数据分隔成为参数
许多命令不能接受过多参数,命令执行可能会失败,xargs可以解决
注意:文件名或者是其他意义的名词内含有空格符的情况
find和xargs的组合:find | xargs COMMAND
示例:
ls | xargs rm 删除当前目录下的大量文件
find /sbin/ -perm +700 | ls -l 这个命令是错误的
find /bin/ -perm /7000 | xargs ls -Sl 查找有特殊权限的文件,并排序
find /bin/ -perm -7000 | xargs ls -Sl 此命令和上面有何区别?
find -type f -name “*.txt” -print0 | xargs -0 rm 以字符nul分隔
find使用示例
备份配置文件,添加.orig这个扩展名
find -name “*.conf” -exec cp {} {}.orig \;
提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +3 -user joe -ok rm {} \;
在主目录中寻找可被其它用户写入的文件
find ~ -perm -002 -exec chmod o-w {} \;
查找/data下的权限为644,后缀为sh的普通文件,增加执行权限
find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
查看/home的目录
find /home –type d -ls

浙公网安备 33010602011771号