查找和压缩

  • 查找工具
    • locate
    • find
      • find语法
      • 查找路径
      • 查找类型
      • 查找条件
      • 查找动作
  • 压缩工具
    • compress
    • gzip
    • bzip
    • xz
    • zip
    • tar
    • cpio

locate

特点查找速度很快,原因是linux系统会将索引生成一个数据库,locate根据这个数据库查找,如果数据库没有文件,需要用updatedb更新数据库(生产环境忙的时候别用)

工作特点:

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

选项

-i 不区分大小写的搜索

-n N 只列举前N 个匹配项目 locate conf

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

locate -r ‘\.conf$’

使用Regex 来搜索以“.conf

find

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

工作特点:

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 可能只搜索用户具备读取和执行权限的目录 #在find例用到*号要转义或者用双引号引起来

find语法:

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

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

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

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

查找条件

指搜索层级

-maxdepth level  最大搜索目录深度,  #找到第几层路径

例: find -maxdepth 1 -name f
find -maxdepth 2 -name f

-mindepth level  最大 搜索目录深度

#从第几层路径开始找

例:find -mindepth 2 -name f   #从第二层开始往下层路径找

面试题让你找第二层的名叫f的文件

find -mindepth 2 -maxdepth 2 -name f

查找条件

文件名和inode查找

-name " 文件名称" :支持使用glob

*, ?, [], [^]
    

查找条件

根据属主、属组查找:

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

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

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

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

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

根据文件类型查找: -type TYPE:

f:  普通文件

d:  目录文件

l:  符号链接文件

s :套接字文件

b:  块设备文件

c:  字符设备文件

p: 管道文件

组合条件:

与:-a

或:-o

非:-not, !

例:find /etc/ \( -name "*.conf" -o -type f \) -ls

德· 摩根 定律:

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

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

示例:

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

find示例:

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

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

查找条件 根据文件大小来查找:

-size [+|-]#UNIT

常用单位:k, M, G

10k的意思是9k-10k不包括9k

-size -10k   #表示0-9k

#UNIT: [#-1, #]

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

-#UNIT :[0,#-1]

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

+#UNIT :(#, ∞ )

如: :+6k 表示(6k ,∞ )

根据时间戳: 以“天”为单位:

  -atime [+|-]n       #+多少天以前,-多少天以内,n或刚好多少天被访问过

  n:[n,n+1)    #大于等于我们给的数字,但是小于这个数字加1

  +n:[n+1,oo]  #n天以前+1到无穷大

  -n:[0,n]       #从n这个时间到我们现在的时间

  -mtime   #修改时间

  -ctime   #改变时间

以“分钟”为单位:

  -amin

  -mmin

  -cmin

查找条件——权限 根据权限查找:

  -perm [/|-]MODE

MODE: 精确权限匹配

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

  例:find /etc -perm /222 -ls          # 只要一个人有权限就能匹配到

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

  例:find /etc -perm -222 -ls         #只要一个人条件不匹配就不显示

  例:find /etc -perm 220              #220在前面没有+号的情况下表示精确匹配,有就表示不关心。   0  表示不关注

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

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

  只有当每个人都有写权限时,find -perm -222 才会匹配
  
  只有当其它人(other )有写权限时,find -perm -002才 才会匹配

处理动作:

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

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

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

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

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

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

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

注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令;有些命令不能接受过多参数,此时命令执行可能会失败。

另一种方式可规避此问题:

find | xargs COMMADN

处理动作 -exec COMMAND {} ;

对查找到的每个文件执行由后面命令指定的命令

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

find 传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令

例:find /etc -perm 002 -exec chmod o-w {} \;

参数代换:xargs 用于 产生 某个命令 的 参数。 。 xargs 入 可以读入 stdin 的数据,并且以 空格符 或 回车符将 将 stdin 的数据 分隔 成为arguments

注意:文件 名 或者是其他意义的名词内含 有 空格符 的情况 有些命令不能接受过多参数 ,命令执行 可能会 失败,xargs可以解决

示例:
find | xargs COMMAND
find /sbin -perm +7000 | xargs ls -l
#find命令是将结果(参数)全部传给你,而xargs是将其一个个的传给你

 1 find 示例
 2 find -name “*.conf” -exec cp {} {}.orig \;
 3 
 4 备份配置文件,添加.orig 这个扩展名
 5 find /tmp -ctime +3 -user joe -ok rm {} \;
 6 
 7 提示删除存在时间超过3天以上的joe 的临时文件
 8 find ~ -perm -002 -exec chmod o-w {} \;
 9 
10 在你的主目录中寻找可被其它用户写入的文件
11 
12 find /data –type f -perm 644 -name “*.sh” –exec chmod 755 {} \;
13 find /home –type d -ls
View Code

 

压缩、解压缩及归档工具

file-roller

compress/uncompress: .Z

gzip/gunzip: .gz

bzip2/bunzip2: .bz2

xz/unxz: .xz

zip/unzip

tar

cpio

compress/uncompress

compress [-dfvcVr] [-b maxbits] [file ...]
-d:  解压缩 ,相当于uncompress
-c:  结果输出至标准输出, 不删除原文件        #默认删除源文件,-c不会压缩文件,只是打印压缩的数据,一般会将结果重定向为一个文件来进行压缩。
compress -c m > m.z
-v:  显示详情
uncompress 解压缩
zcat file.Z >file          #和-c原理差不多也是可以重定向出去

gzip/gunzip

gzip [OPTION]... FILE ...      #会将原本文件压缩后删除原文件

    -d:  解压缩,相当于gunzip

    -c:  将压缩或解压缩的结果输出至标准输出

    -# :1-9 ,指定压缩比,值越大压缩比越大
     
    zcat :不显式解压缩的前提下查看文本文件内容

实例:

gzip -c messages >messages.gz

gzip -c -d messages.gz > messages

zcat messages.gz > messages

bzip2/bunzip2/bzcat

bzip2 [OPTION]... FILE ...

  -k: keep,  保留原文件

  -d :解压缩

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

  bzcat :不显式解压缩的前提下查看

xz/unxz/xzcat

#最新的压缩方式,压缩性能更好,但使用的人还不多

xz [OPTION]... FILE ...

  -k: keep,  保留 原文件
  
  -d :解压缩

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

  xzcat:  不显式解压缩的前提下查看

zip/unzip

#可打包目录压缩,他压缩的时候会把绝对路径变成相对路径进行压缩,防止加压覆盖 打包压缩

  zip –r /testdir/sysconfig /etc/sysconfig/

解包解压缩

  unzip sysconfig.zip

  cat /var/log/messages | zip message -

  unzip -p message > message

tar 工具

Tar (Tape ARchive ,磁带归档的 缩写) tar [OPTION]...

(1)  创建归档
    tar -cf / path/tosomefile .tar FILE...      #-f 表示最终文件名
(2) : 追加文件至归档:  注:不支持对压缩文件追加
    tar -rf /PATH/TO/SOMEFILE.tar FILE...
(3)  查看归档文件中的文件列表
    tar -tf  /PATH/TO/SOMEFILE .tar    #-t是预览
(4)  展开归档
    tar -xf  /PATH/TO/SOMEFILE .tar
    tar -xf  /PATH/TO/SOMEFILE .tar -C  /PATH/   #-C指定解压的文件
(5)  结合 压缩工具实现:归档并压缩
    -j: bzip2, -z: gzip, -J: xz

tar 工具
-T 选项指定输入文件,-X 选项指定包含要排除的文件列表
tar zcvf mybackup.tgz -T /root/includefilelist 
tar zcvf mybackup.tgz -X /root/excludefilelist   
分割大的 tar  文件为多份小文件:
split –d -b Size tar-file-name prefix-name
split –d -b 1M mybackup.tgz mybackup-parts
合并:
cat mybackup-parts* > mybackup.tar.gz
View Code

 

 

cpio

复制 从或到文件

cpio 命令是通过重定向的方式将文件进行打包备份,还原恢复
的工具,它可以解压以“.cpio” 或者“.tar” 结尾的文件。
cpio [ 选项] >  文件名或者设备名
cpio [ 选项] <  文件名或者设备名
选项
    -o  将文件拷贝打包成文件或者将文件输出到设备上
    -i  解包,将打包文件解压或将设备上的备份还原到系统
    -t  预览,查看文件内容或者输出到设备上的文件内容
    -v  显示打包过程中的文件名称。
    -d  解包生成目录,在cpio 还原时,自动的建立目录
    -c  一种较新的存储方式

示例
将 将etc 目录备份:
    find ./etc -print |cpio -ov >etc.cpio
内容预览
    cpio –tv < etc.cpio
要 解包 文件
    cpio –idv < etc.cpio
posted @ 2017-04-10 19:21  Mr.暖阳  阅读(177)  评论(0编辑  收藏  举报