zoukankan      html  css  js  c++  java
  • 随堂练习 find

    find 是实时查找工具,通过遍历指定路径完成文件查找。

    工作特点

    1)查找速度略慢

    2)精确查找

    3)实时查找

    4)查找条件丰富

    5)可能只搜索用户具备读取和执行权限的目录

    格式

    find [OPTTON]...[查找路径] [查找条件] [处理动作]

    查找路径:指定具体目标路径;默认为当前目录。

    查找条件:指定的查找标准,可以文件名,大小,类型,权限等标准进行;默认为找出指定路径下的所有文件。

    处理动作:对符合条件的文件做操作,默认输出至屏幕。

    1,指定搜索目录层级

    -maxdepth  最大搜索目录深度,指定目录下的文件为1级。

    -mindepth  最小搜索目录深度。

    范例:

    find /etc -maxdepth 2 -mindepth 2

    2,对每个目录先处理目录内的文件,在处理目录本身

    -depth  -d

    范例:

    find /data/test  -depth

    3,根据文件名和iNode查找

    -name  "文件名称":支持使用glob;如:*,?,[],[^],通配符要加双引号引起来

    -iname  "文件名称":不区分字母大小写

    -inum n  按iNode号查找

    -samefile  name 相同iNode号的文件

    -links n  链接数为 n 的文件

    -regex "PATTERN":以PATTERN匹配整个文件路径,而非文件名称

    范例:

    find -name  test.png

    find -iname test.png

    find / -name  ".txt"

    find /var -name  "log*"

    find -regex  ".*.txt$"

    4,根据属主,属组查找

    -user  USERNAME:查找属主为指定用户(UID)的文件

    -group  GRPNAME:查找属组为指定组(GID)的文件

    -uid  UserID:查找属主为指定的UID号的文件

    -gid  GroupID:查找属组为指定的GID号的文件

    -nouser:查找没有属主的文件

    -nogroup:查找没有属组的文件

    5,根据文件类型查找

    -type 可以是以下形式:

    f:普通文件

    d:目录文件

    l:符号链接文件

    s:套接字文件

    b:块设备文件

    c:字符设备文件

    p:管道文件

    范例:

    1)查找/home的目录

    find /home -type d  -ls

    2)空文件或目录   -empty

    find /apps  -type d   -empty

    3)组合条件

    :-a  ;默认多个条件是与关系

    :-o

    :-not    !

    范例:

    find  /etc/  -type d  -o  -type l | wc -l

    find /etc/  (-type d  -o  -type l )   -ls | wc -l

    德·摩根定律

    1)(非A)或(非B)=  非(A且B)

    2)(非A)且(非B)=  非(A或B)

    示例:

    !A -a !B = !(A -o B)

    !A -o !B = !(A -a B)

    范例:

    find -user long  -group long

    find -user long -not  -group long

    find -user long -o  -user  ling

    find -not ( -user long -o -user ling )

    find  / -user long -o -uid 500

    find ! ( -type d -a -empty ) | wc -l

    find ! -type d -o ! -empty | wc -l

    find ! -user long  !  -user lan

    1)找出/tmp目录下,属主不是root,且文件名不以f 开头的文件

    find /tmp -not ( -user root  -o  -name 'f*' )  -ls

    6,排除目录

    范例:

    1)查找/etc/下,除/etc/sane.d目录的其他所有.conf后缀的文件

    find /etc  -path '/etc/sane.d'  -a -prune -o -name  "*.conf"

    2),查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件

    find  /etc ( -path "/etc/sane.d" -o -path "/etc/fonts" ) -a -prune -o  -name "*.conf"

    3),排除/proc和/sys目录

    find  / ( -path "/sys"  -o -path "/proc" ) -a -prune -o -type f -a  -mmin -1

    7,根据文件大小来查找

    -size  [+|-] #UNIT

      常用单位:k,M,G,c(byte),注意大小写敏感

    #UNIT:(#-1,#)

      如:5k 表示(4k,5k]

    -#UNIT:[0,#-1]

      如:-5k 表示[0,4k]

    +#UNIT:(#,∞)

      如:+5k 表示(5k,无穷大)

    范例:

    find /  -size +10G

    8,根据时间戳

    #以天为单位

    -atime  [+|-]#

    -mtime

    -ctime

    #:[#,#+1)

    +#:[#+1,无穷大]

    -#:[0,#)

    #以分钟为单位

    -amin

    -mmin

    -cmin

    9,根据权限查找

    -perm [/|-]MODE

    MODE:精确权限匹配

    /MODE:任何一类(u,g,o)对象的权限中只要能一位匹配即可;或关系,+ 从CentOS7开始淘汰

    -MODE:每一类对象都必须同时拥有指定权限;与关系

    0  表示不关注

    说明

    find  -perm 755  会匹配权限模式恰好是755的文件

    只要当任意人有写权限时,find  -perm /222 就会匹配

    只有当每个人都有写权限时,find  -perm -222 才会匹配

    只有当其他人(other)有写权限时,find  -perm -002 才会匹配

    10,处理动作

    -print:默认的处理动作,显示至屏幕

    -ls:类似于对查找到文件执行 “ls -l”命令

    -fls file:查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file

    -delete:删除查找到的文件,慎用!

    -ok COMMAND {} ;  对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认

    -exec COMMAND {} ;  对查找到的每个文件执行由COMMAND指定的命令

    {}:用于引用查找到的文件名称自身

    范例:

    1)备份配置文件,添加.log这个扩展名

    find -name ".conf" -exec cp {}  {}.log  ;

    2)提示删除存在时间超过3天以上的 long的临时文件

    find /tmp -ctime +3 -user long  -ok  rm {} ;

    3)在主目录中寻找可被其他用户写入的文件

    find  ~  -perm -002  -exec chmod o-w  {} ;

    4)查找 /data下的权限为644 ,后缀为sh 的普通文件,增加执行权限

    find /data  -type f -perm 644  -name "*.sh"  -exec chmod +755 {} ;

    11,参数替换 xargs

    由于很多命令不支持管道| 来传递参数,xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔成为参数,另外许多命令不能接受过多参数,命令执行可能会失败,xargs可以解决

    注意:文件名或者是其他意义的名词内含有空格符的情况

    find 经常和 xargs 命令进行组合,形式如下:

    find  |  xargs COMMAND

    范例:

    1)显示10个数字

    seq 10 | xargs

    2)删除当前目录下的大量文件

    ls  |  xargs  rm

    3)对文件排序显示

    find  -name  "*.sh" | xargs ls -Sl

    4)批量创建和删除用户

    echo user{1..10}  | xargs -n1  useradd

    echo user{1..10}  | xargs -n1  userdel -r

    5)这个命令是错误的

    find /sbin/ -perm  /700  |  ls -Sl

    6)查找特殊权限的文件,并排序

    find /bin/  -perm /7000 | xargs  ls -Sl

    7)此命令和上面的有何区别

    find /bin/ -perm -7000  |  xargs ls -Sl

    8)以字符nul分隔

    find -type f  -name  "*.txt"  -print0 | xargs -0 rm

    9)并发执行多个进程

    seq 100 | xargs -i -P10 wget -P  /data    http://10.0.0.100/{}.html 

  • 相关阅读:
    天融信防火墙抓包
    windows2019jihuo
    CentOS多路径软件配置(光纤连接存储)
    listener.ora,tnsnames.ora中一个空格的威力
    excel 金额自动转中文大写
    js的点滴
    写ppt的助手
    珠峰-6-koa-express
    珠峰-6-http和http-server原理
    珠峰-6-node
  • 原文地址:https://www.cnblogs.com/xuanlv-0413/p/13200890.html
Copyright © 2011-2022 走看看