文件查找与压缩-1

   1、 locate命令(非实时查找即数据库查找)

1)、查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db

     依赖于事先构建的索引;索引的构建是在系统较为空闲时自动进行( 周期性任务) 或者管理员手动更新数据库即是执行#updatedb命令;引构建过程需要遍历整个根文件系统,极消耗资源;

     工作特点:查找速度快、模糊查找、非实时查找、搜索的是文件的全路径-不仅仅是文件名、可能只搜索用户具备读取和执行权限的目录

2)、locate KEYWORD

     有用的选项

-i 执行不区分大小写的搜索

-n X 只列举前X 个匹配项目

#locate foo

搜索名称或路径中带有“foo ”的文件

#locate -r ‘\.foo$’

使用Regex来搜索以“.foo”结尾的文件

2、find命令(实时查找,通过遍历指定路径完成文件查找)

1)、工作特点:查找速度略慢、精确查找、实时查找、可能只搜索用户具备读取和执行权限的目录

2)、find [OPTION]… [ 查找路径] [ 查找条件] [ 处理动作]

(查找的是符合指定条件的查找路径各目录层级下的文件)

查找路径:指定具体目标路径,也即是查找范围,默认为当前目录

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

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

3)、查找条件

     ①、根据文件名和inode(#ll -i命令可以查看文件的inode) 查找:

-name " 文件名称" :支持使用glob通配符*, ?, [], [^]等等

    例如#find / -name *checkint*

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

-inum n :按inode号查找

-samefile name :相同inode号的文件

-links n :链接数为n的文件

-regex "PATTERN" :以PATTERN匹配整个文件路径字符串,而不仅仅是文件名称

         例如#find /root/bin –regex “.*\.sh$”

    ②、根据属主、属组查找:

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

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

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

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

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

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

③、根据文件类型查找:

-type TYPE

f: 普通文件

d: 目录文件

l: 符号链接文件

s:套接字文件

b: 块设备文件

c: 字符设备文件

p: 管道文件

④、根据文件大小来查找:

-size [+|-]#UNIT

常用单位:k, M, G

#UNIT: (#-1, #] ,如:6k

-#UNIT :[0,#-1], 如:-6k

+#UNIT :(#, ∞ ), 如:+6k

⑤、根据时间戳:

以“天”为单位;

-atime [+|-]#,

#: [#,#+1)

+#: [#+1, ∞ ]

-#: [0,#)

-mtime

-ctime

以“分钟”为单位:

-amin

-mmin

-cmin

⑥、根据权限查找:

-perm [/|-]MODE

MODE: 精确权限匹配

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

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

0表示不关注

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

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

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

  只有当其它人(other )有写权限时,find -perm -002才会匹配,不关注属主和属组是否具有写权限

    4)、组合条件

    与:-a

    或:-o

    非:-not, !

    德·摩根 定律:

    非(P 且 Q) = (非 P) 或 (非 Q)

    非(P 或 Q) = (非 P) 且 (非 Q)

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

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

    示例:

    找出/tmp 目录下,属主不是root ,且文件名不是fstab 的文件

    #find /tmp \( -not -user root -a -not -name 'fstab' \) -ls

    #find /tmp -not \( -user root -o -name 'fstab' \) –ls

小括号要进行转义

    排除目录(查找路径/etc,如果是/etc/sane.d目录下的全部剪除,否则查找查找 .conf结尾的文件)

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

    5)、处理动作

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

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

   -delete:删除查找到的文件;

   -fls file:查找到的所有文件的长格式信息保存至指定文件中

      例如[root@centos7 ~]# find -name data -fls fi

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

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

   {}:上面的大括号用于引用查找到的文件名称自身

   find 传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性递给后面的命令,有些命令不能接受过多参数,此时命令执行可能会失败,下面方式可规避此问题

find | xargs COMMAND

示例如下:

#find -name “*.conf” -exec cp {} {}.orig \;

备份查找到的符合要求的所有配置文件,添加.orig这个扩展名

#find /tmp -ctime +3 -user joe -ok rm {} \;

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

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

在你的主目录中寻找可被其它用户写入的文件

#find /data –type f -perm 644 -name *.sh -exec chmod 755 {} \;

# #find / -nouser -o –nogroup –atime -7 | xargs chmod o+x

   6)、压缩、解压缩及归档工具

     ①、compress [-dfvcVr] [-b maxbits] [file …]

         #compress file ,把file压缩为file.Z,同时原file不再存在

-d: 解压缩,相当于uncompress,原文件不再存在

例如#compress -d file.Z ,把file.Z解压缩为file,同时file.Z不再存在

-c: 结果输出至标准输出即是屏幕, 不删除原文件

   例如#compress -c file > file.Z

-v: 显示详情

        uncompress 解压缩

        zcat file.Z >file

其中#zcat file.Z 直接打印于屏幕

# zcat file.Z >file把file.Z定向解压为file,同时不删除file.Z原文件

     ②、gzip [OPTION]… FILE …

-d: 解压缩,相当于gunzip,原文件不再存在

例如[root@centos7 testdir]# gzip fstab messages,结果是fstab.gz、messages.gz

    [root@centos7 testdir]# gzip fstab.gz、messages.gz,结果是fstab messages

 

-c: 将压缩或解压缩的结果输出至标准输出,不删除原文件

-#:1-9 ,指定压缩比,值越大压缩比越大

        zcat :不显式解压缩的前提下查看文本文件内容

        实例:

gzip -c messages > messages.gz

gzip -c -d messages.gz > messages

zcat messages.gz > messages

③、bzip2 [OPTION]… FILE …

-k: keep,保留原文件

-d:解压缩

-#:1-9,压缩比,默认为6

    bzcat:不显式解压缩的前提下查看文本文件内容

     例如#bzcat messages.bz2 > messages 如果不重定向,则会打印于屏幕上

④、xz [OPTION]… FILE …

-k: keep,保留原文件

-d :解压缩

-# :1-9,压缩比,默认为6

    xzcat: 不显式解压缩的前提下查看文本文件内容

⑤、zip/unzip

打包压缩

#zip -r sysconfig.zip sysconfig/,即是把sysconfig/打包压缩为sysconfig.zip

#zip messages会提示错误,因为zip不能直接压缩单个文件

    解包解压缩

#unzip sysconfig.zip

#cat /var/log/messages | zip message –

#cat /var/log/messages | zip message.zip –,用于压缩单个文件,生成压缩文件message.zip

#unzip -p message > message,重定向输出到message,否则不显式解压缩的前提下查看文本文件内容



练习题:

1 、查找/var 目录下属主为root ,且属组为mail 的所有文件

#find /var –user root -group mail -ls

2 、查找/var 目录下不属于root 、lp 、gdm 的所有文件

#find /var ! \(-user root -o -user lp -o -user gdm\) -ls

#find /var ! -user root !-user lp ! -user gdm -ls

其中第一条命令中括号要进行转义

3 、查找/var 目录下最近一周内其内容修改过,同时属主不为root ,也不是postfix 的文件

#find /var mtime -7 ! -user root ! -user postfix –ls

4 、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

#find / -nouser -o –nogroup –atime -7 | xargs ls –ld

#find / \(-atime -7 -nouser -o -nogroup\) –ls

#find / -atime -7 -nouser -o -nogroup -ls 缺少括号不能达到题目要求

5 、查找/etc 目录下大于1M 且类型为普通文件的所有文件

#find /etc -size +1M –type f –ls

#find /etc -size +1M -size -10M –type f -ls

6 、查找/etc 目录下所有用户都没有写权限的文件

#find /etc !-perm /222 –ls

7 、查找/etc 目录下至少有一类用户没有执行权限的文件

#find /etc ! -perm -111 -ls

8 、查找/etc/init.d 目录下,所有用户都有执行权限,且其它用户有写权限的文件

#find /etc/init.d/ -perm -113 –ls

因为/etc/init.d是链接目录,所以命令中要写成/etc/init.d/的形式








原创文章,作者:18612763863,如若转载,请注明出处:http://www.178linux.com/35858

(0)
上一篇 2016-08-15 14:31
下一篇 2016-08-15 14:31

相关推荐

  • 马哥linux运维第一天感受

    101个人的大家庭

    Linux干货 2018-03-26
  • N21_第二周练习

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 文件管理类命令:cp,mv.rm 复制命令:cp 格式:        cp [OPTION]… [-T] SOURCE DEST        cp [OPTION]… SOU…

    Linux干货 2016-07-16
  • linux终端类型

    人机交互界面:GUI、CLI GUI: gnome:c,gtk kde:c++,qt CLI: bash,zsh,sh,csh,ksh 不同CLI间跳转:alt+f1\f2\f3\f4   终端类型: 物理终端、控制台终端:/dev/console,控制台console 计算机显示器通常被称为控制台终端(Console) 虚拟终端:/dev/tty…

    Linux干货 2016-10-14
  • 2

    2

    Linux干货 2018-03-26
  • Linux运维之路-Linux基础学习二

    Linux系统的一切皆文件思想会帮助我们学习

    2017-11-18
  • sed用户小结

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed [-nefri] ‘command’ 输入文本  …

    Linux干货 2016-08-12