文件查找与压缩-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)
1861276386318612763863
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • Sed及Vim作业

      Sed及Vim作业题:     1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符    [root@localhost 7 ~]# sed -r  's/^[[:space:]]…

    Linux干货 2016-08-09
  • 20160804课堂作业

    grep正则表达式课堂作业 1、用正则表达式表示IP地址 #grep -E "(\<[1-9]|[1-9][[:digit:]]|1[[:digit:]][[:digit:]]|2[0-4][[:digit:]]|25[0-5]\>)\.(\<[[:digit:]]|[1-9][[:digit:]]|1[[:digit:]] [[…

    Linux干货 2016-08-05
  • 文本三剑客之sed用法总结

    描述:    sed是Stream EDitor(行编辑器)的简写,是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space ),接着用sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你…

    Linux干货 2016-08-10
  • 压缩和归档——释放你的磁盘空间

    压缩和解压缩工具 压缩比:文件压缩比就是指文件经过压缩后的文件大小与源文件大小的一个比差,经过压缩工具包可以把文件压缩 压缩的目的:      时间换空间      CPU时间换硬盘的空间 压缩工具: compress/uncompress 以.Z作为文件后缀 gzip/gunz…

    Linux干货 2016-08-18
  • bash工作特性之命令执行状态返回值和命令行展开的讲解和实例

    命令执行状态返回值 在Linux bash中可以用命令执行状态返回值来判断命令是否运行成功,而不需去关心命令返回的结果是多少。 bash通过状态返回值来得到输出结果; 成功:返回值 0 [root@localhost tmp]# ls aaa [root@localhost tmp]# mkdir $(date +%H-%m-%S) [root@localh…

    Linux干货 2018-03-01
  • Linux nginx服务之反向代理

                       Linux nginx服务之反向代理 Nginx服务之反向代理: GSLB:Global Service LB 全局服务负载均衡: SLB:Service LB 应用程序发布: 灰度模型:   ngx_http_…

    系统运维 2016-11-18