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
posted @ 2019-08-18 18:21  建聪  阅读(182)  评论(0)    收藏  举报