设为首页 收藏本站
查看: 1243|回复: 0

[经验分享] Linux 命令与文件搜寻

[复制链接]
发表于 2018-5-22 07:47:54 | 显示全部楼层 |阅读模式
  1:命令的搜寻
  which [-a] command
  选项与参数:
            -a :将所有由 PATH 目录中可以找到的命令均列出,而不止第一个被找到的命令名称
   # which ifconfig
      which是根据$PATH路径来搜寻命令的,所以shell内部命令是找不到的,但可以用type命令查看
  

  2:whereis (寻找特定文件)
  whereis [-bmsu] 文件或目录名
      选项与参数:
               -b    :只找 binary 格式的文件
               -m    :只找在说明档 manual 路径下的文件
               -s    :只找 source 来源文件
               -u    :搜寻不在上述三个项目当中的其他特殊文件
    # whereis ls
  

  3:find [OPTION]... [查找路径] [查找条件] [处理动作]
  查找路径:默认为当前路径;
  查找条件:指定的查找标准,可以根据文件名、大小、属主属组、类型等进行;默认为找出指定路径下的所有文件;
  处理动作:对符合条件的文件做什么操作;默认为输出至屏幕;
  查找条件:
  (1) 根据文件名进行查找:
  -name 文件名:同时-name也支持统配符,范例 -name filename
  -iname 文件名:不区分大小写
  # find /home -name "*.txt

  # find /home -iname "*.txt"

  

  
  -newer  <参考文件或目录> : 修改时间.说明:find找出结果比<参照文件或目录修改时间新>
  # find ./ -newer test.txt
  -anewer <参考文件或目录> :访问时间.find找出结果比<参照文件或目录访问时间新>
  -cnewer <参考文件或目录> : 状态改变时间,find找出结果比<参照文件或目录状态时间新>
  

  (2)根据属主,属主查找
  -user USERNAME: 根据属主来找文件,USERNAME为属主名
  -group GROUPNAME:根据属组来找文件,GROUPNAME为属组名
  -uid    USERUID:根据用户帐号的UID找文件,USERUID为用户主UID
  -gid     GROUPGID:根据用户组的GID找文件,GROUPGID为用户组GID
  -nouser:找没有用户主的文件
  -nogroup:找没用用户组的文件
  

  (3) 根据文件类型查找
  -type TYPE:表示找的类型为TYPE,
          f:普通文件
          d:目录
          l:符号连接
          b:块设备
          c:字符设备
          p:命名管道
          s:套接字
  

  (4)  组合查找条件:
  -a:与条件
  -o:或条件
  -not:非条件
  !:非条件
  # find /home ! -name "*.txt"
  

  非条件优先线最高,-a条件第2,-o件优先级最低
  写个范例:假如我们要找一个普通文件,并且没有用户,我们可以这样写
     find /tmp --type f -a -nouser -ls
  假如我们找tmp下所有没有属主,或者是属组是www 的文件
    find /tmp \(-nouser -o -group www\)     因为是或条件,所以最好()括起来。
  假如我们要找/etc/下不以.conf结束的文件
    find /etc  ! -name *.conf
  

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

  (5) 根据文件大小的查找
  -size [+-]  SIZE
     常用单位为K,M,G
  
     搜索大于10KB的文件
  # find . -type f -size +10k
     搜索小于10KB的文件
  # find . -type f -size -10k
     搜索等于10KB的文件
  #find . -type f -size 10k
  

  也就说当 我们找5M的文件时,所找出的文件范围为4<X≤5
  也就是大于5M,x>5M
  也就是说找小于5M的文件时,所找出的范围是0≤x≤(5-1)。4M以下文件包括4M
  5M:4M<X≤5 M
  +5M:  X>5M
  -5M: 0M≤X≤4M
  

  (6)  根据时间查找:   以天为单位的分别是下面3个
  -atime  访问时间         -ctime 属性改变时间        -mtime 内容修改时间
  -amin    以分钟计算访问时间           -cmin                               -mmin   
  -atime +#: 表示#+1,也就是x≥#+1     举例:-atime +3 表示从≥第4天开始。
  - atime -#: 表示#-1,也就是x≤#       举例:   -atime  -3 表示≤ 3天,3天以内包括3天
  -atime  #:   就是#<x<#+1  举例:   -atime 3 表示找的时间段3<x<4
  # find ./ -mtime 0
     那个 0 是重点!0 代表目前的时间,所以,从现在开始到 24 小时前。
  

  (7)
  根据权限查找:
  -perm [+|-]MODE
  MODE:  精确匹配
  +MODE:找出的文件的权限"包括任一mode的权线"
  -MODE: 找出的文件的权限"必须要包括全部mode的权线"

  

  范例:我们找一个权限为644的脚本。
  # find ./ -type f -name "*.sh" -perm -644
  # ll remove_after.sh
  -rwxr-xr-x1 root root 119 Jun 14 14:07 remove_after.sh
  这个脚本权限为755,755就包括了mode模式中的所有权限。所以就会显示出来
  

  (8)
  
  -maxdepth <指定寻找最大层数>
  # find . -maxdepth 1 -regex ".*\(\.sh\|\.log\)$"
     说明:只查找当前目录下的.sh或.log
  # find . -maxdepth 3 -regex ".*\(\.sh\|\.log\)$"
     说明:从当前目录开始向下查找最大深度限制为3
  

  -mindepth <指定最小寻找层数>
  # find . -mindepth 1 -regex ".*\(\.sh\|\.log\)$"
     说明:1为从当前目录开始向下的目录查找文件
  # find . -mindepth 2 -regex ".*\(\.sh\|\.log\)$"
     说明:会从第2层目录开始向下找文件。
  

  (9) 基于正则:-regex
  基于正则表达式匹配文件路径
  # find . -regex ".*\(\.txt\|\.pdf\)$"
  同上,-iregex 但忽略大小写
  # find . -iregex ".*\(\.txt\|\.pdf\)$"
  

  (10)-path 或 -ipath   匹配路径和目录
  查找rpm文件,但是不查找当前目录test,同时把查找到的文件拷贝到/tmp目录下
  # find ./ -path "./test" -prune -o -name "*.rpm" -exec cp {} /tmp/ \;
  说明:-path 匹配路径和目录,这里为匹配test目录, -ipath同理,但不区分大小写。-prune:排出文件或目录

来自: http://man.linuxde.net/find

  
  要忽略两个以上的路径如何处理?代码如下:
  find /home/zth /( -path “/home/zth/astetc” -o -path “/home/zth/etc” /) -prune -o -type f -print
  注意:/( 和/) 前后都有空格。
  

  (11) ls  fls print fprint fprint0 区别
  
  # find . -regex ".*\(\.sh\|\.log\)$" -ls
      说明:-ls 以列表方式直接在屏幕显示出来
  # find . -regex ".*\(\.sh\|\.log\)$" -fls test.txt
      说明:-fls是把找到文件以详细列表的方式保存到test.txt文件里
  #  find . -regex ".*\(\.sh\|\.log\)$" -print
       说明:-print是把找到文件显示在屏幕上,只是找到内容以格式为每列一个名称,每个名称前皆有“./”字符串;默认已经加了-print 这个参数
  #  find . -regex ".*\(\.sh\|\.log\)$" -fprint test.txt

       说明:把找出来结果以列的方式保存到指定的文件test.txt里
  #  find . -regex ".*\(\.sh\|\.log\)$" -fprint0 test.txt
      说明:把找出来结果以行的方式保存到指定的文件test.txt里
  

  (12) -fstype 指定系统文件格式
  #  find . -fstype ext4 -regex ".*\(\.sh\|\.log\)$"
      说明:只寻找ext4该文件系统类型下的所有以.sh或.log 结尾的文件
  

  (13)要列出所有长度为零的文件
   find . -empty

  

  (14)动作处理:
  -exec  command  {} \;
   找出当前目录下一天前的以log 结尾日志并删除
  find ./ -mtime +1 -iname "*.log" -exec rm -v {} \;
  -ok command {} \;   

    此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
  

  $  find -mtime -31 -a -iname "confcmd*"  | xargs tar zcvf confcmd.tar.gz
  $ find -iname "confcmd-201708*" -exec tar cvf confcmd.tar.gz {} \;
  

  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-478879-1-1.html 上篇帖子: linux sort 用法 下篇帖子: NTP for LINUX
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表