文件查找、压缩、归档

一、文件查找

非实时查找(数据库查找)locate;实时查找find

locate:从系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db查找,但是依赖于事先构建的索引;

索引的构建是在系统较为空闲时自动进行,管理员手动的更新数据库(updatedb),得用updatedb命令跟新数据库,才能快速查找,也要根据权限搜索;

索引构建过程需要遍历整个根文件系统,极其消耗资源;

1.1 locate

locate搜索特点:查找速度快;模糊查找;非实时查找;搜索的文件的全路径,不仅仅是文件名

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

locate KEYWORD

v  -i 执行区分大小写的搜索 ;  -n N 只列举前N 个匹配项目  ;-r:支持正则表达式

v locate foo

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

v locate -r ‘\.foo$’

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

1.2 find 查找条件

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

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

find option 查找路径|查找条件|处理动作   (全盘搜索影响磁盘性能)

查找路径:指定具体目标路径;默认为当前目录;处理动作:对符合条件的文件做操作,默认输出至屏幕

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

1.2.1根据文件名和inode查找

-name " 文件名称" :支持使用通配符 *, ?, [], [^]等  find  /  -name “*.txt”  ; find  /var  –name “*log*”

find -name snow.png  ( 搜索名为snow.png)

-iname " 文件名称" :不区分字母大小写 ; -inum n 按inode 号查找

find -iname snow.png  (不分大小写地搜索名为snow.png 、Snow.png、SNOW.PNG)

-samefile name 相同inode 号的文件 ;     -links n 链接数为n 的文件

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

1.2.2根据属主、属组查找 

find  -user  joe  -group  joe(搜索被用户joe  以及组群joe)

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

-uid UserID :查找属主为指定的UID 号的文件   ;     -gid GroupID :查找属组为指定的GID 号的文件

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

1.2.3 根据文件类型查找 

-type TYPE:    f:  普通文件 ;d:  目录文件; l:  符号链接文件; s :套接字文件

b:  块设备文件; c:  字符设备文件 ; p:  管道文件

find  /home  –type  d  -ls (找到家目录下的目录文件,并列举出来)

1.2.4 组合条件

与:-a  ;  或:-o  ;  非:-not, !

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

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

find  -user  joe  -not  -group  joe    ;   find  -user  joe  -o  -user  jane

find  -not \( -user  joe  -o  -user  jane \)     ;find  /  -user  joe  -o  -uid  500

1.2.4.1find示例

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

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

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

v   排除目录示例:查找/etc/ 下,除/etc/sane.d 目录的其它所有.conf 后缀的文件

find  /etc  -path  ‘/etc/sane.d’  -a  –prune  -o  -name  “*.conf”  -print

1.2.5根据文件大小来查找

-size  [ +|- ]  #UNIT常用单位:k, M, G

#UNIT: (#-1, #]  ;如:6k  表示(5k,6k]      -#UNIT :[0,#-1]  ;如:-6k  表示[0,5k]

+#UNIT :(#, ∞ ) ; 如:+6k  表示(6k ,∞)

find /var  -size +1M -a -size -10M  | xargs ls -lh

1.2.6根据时间戳

以“天”为单位;-atime [+|-]#    ;#:[#,#+1)    ;+#: [#+1, ∞ ]    ;-#: [0,#)

-mtime         ;-ctime

以“分钟”为单位:-amin   ;-mmin    ;-cmin

1.2.7 根据权限查找

-perm  [/|-]  MODE   ;mode:精确权限匹配

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

-MODE:每一类对象都必须同时拥有指定权限;  与的关系 ,没有即为0表示不关注

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

只要当任意人有写权限时,find -perm +222 就会匹配;只有当每个人都有写权限时,find -perm -222 才会匹配;只有当其它人(other )有写权限时,find -perm -002才会匹配处理动作:

-print :默认的处理动作,显示至屏幕;   -ls :类似于对查找到的文件执行“ls -l” 命令

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

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

1.2.7.1 find示例

    对于每个文件执行命令之前,都会交互式要求用户确认

例如:find  /tmp -ctime +3 -user  joe  -ok  rm  {}  \(提示删除存在时间超过3天以上的joe 的临时文件)

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

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

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

例如:v find  -name  “*.conf”  -exec  cp  {}  {}.orig  \  (备份配置文件,添加.orig 这个扩展名)

find  ~  -perm  -002  -exec  chmod o-w  {}  \ (在你的主目录中寻找可被其它用户写入的文件)

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

(在/data下查找权限为644以.sh结尾的普通文件改文件为权限755)

1.3参数代换

    xargs 用于产生某个命令的参数

xargs可以读入stdin的数据,并且以空格符或回车符将stdin的数据分隔成为arguments

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

有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决

v  示例:find | xargs COMMAND   ;    find  /sbin  -perm  +7000  |  xargs  ls  -l

二、压缩、解压缩

2.1 compress /uncompress

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

-d:  解压缩,相当于  ;-c:  结果输出至标准输出, 不删除原文件  ;-v:  显示详情

v uncompress 解压缩:zcat file.Z >file

2.2 gzip/gunzip

gzip [OPTION]… FILE …

–d: 解压缩,相当gunzip  ;-c:  将压缩或解压缩的结果输出至标准  -#:1-9 ,指定压缩比,值越大压缩比越大

v zcat :不显式解压缩的前提下查看文本文件内容                             默认为6

v    2.1实例: 

   gzip -c messages >messages.gz

   gzip -c -d messages.gz > messages

zcat messages.gz > messages

2.3 bzip2  

bzip2 [OPTION]… FILE …

-k: keep,  保留原文件  ;-d :解压缩   ;-# :1-9 ,压缩比,默认为6

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

2.4 xz  

xz [OPTION]… FILE …

-k: keep,  保留 原文件   ;-d :解压缩   ;-# :1-9 ,压缩比,默认为 为6

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

xz:互联网上的新软件一般都用此压缩工具 ,压缩比大,但是压缩的时间也长,解压缩耗时也久一些

2.5 zip

虽然压缩比较差,但是能与windows兼容

打包压缩:zip –r sysconfig sysconfig/     ;  解包解压缩:unzip sysconfig.zip

cat  /var/log/messages  |  zip  message  –

unzip  -p  message > message

三、归档工具 

3.1 tar工具 

(现在企业里面常用磁带归档工具 、打包工具)

–c:创建新的档案文件(打包) ;-t:列出打包内容 ;-x:从档案文件中释放文件(拆包)

-f:使用的归档名,立即接档名,不加参数 ; -p:使用原文件的属性 ;-v:压缩过程可见

-r:追加      -zcvf :打包压缩,,但是不会破坏原来的文件,会把目录中的/删除

(1)  创建归档    tar -c -f / PATH/TO/SOMEFILE .tar   FILE… 指定解压目录file

(2)  追加文件至归档:  注:不支持对压缩文件追加    tar -r -f /PATH/TO/SOMEFILE.tar FILE…

(3)  查看归档文件中的文件列表    tar -t -f  /PATH/TO/SOMEFILE .tar

(4)  展开归档(编译时用到)  tar -x -f  /PATH/TO/SOMEFILE .tar  ; tar -x -f  /PATH/TO/SOMEFILE .tar  -C  /PATH/

(5)  结合压缩工具实现:归档并压缩     -j: bzip2, -z: gzip, -J: xz    

-T 选项指定输入文件;-X 选项指定包含要排除的文件列表

tar  zcvf mybackup.tgz  -T  /root/includefilelist  –X  /root/excludefilelist

3.2 spilt分割打包文件

分割大的 tar 文件为多份小文件:

split –b 1M -d Size tar-file-name prefix-name  ;split –b 1M –d mybackup.tgz mybackup-parts

     合并:cat mybackup-parts* > mybackup.tgz

3.3 cpio复制到文件

cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,它可以解压以“.cpio”或者“.tar”结尾的文件。

cpio [ 选项] >  文件名或者设备名

v    cpio [ 选项] <  文件名或者设备名

v  选项:-o  将文件拷贝打包成文件或者将文件输出到设备上

-i  解包,将打包文件解压或将设备上的备份还原到系统

-t  预览,查看文件内容或者输出到设备上的文件内容

-v  显示打包过程中的文件名称。

-d  解包生成目录,在cpio 还原时,自动的建立目录

将etc 目录备份:find ./etc -print |cpio -ov >etc.cpio

v  内容预览:cpio –tv < etc.cpio

v  要解包文件:cpio –iv <etc.cpio  ;cpio –idv < etc.cpio

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

赞 (0)
lyxlyx
上一篇 2016-11-27 20:34
下一篇 2016-11-27 21:05

相关推荐

  • 人志建,则无敌—vim练习题

    马哥网络班21期-第六周博客 1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@caicai ~]# cp -a /etc/rc.d/rc.sysinit /tmp [root@caicai&nbsp…

    Linux干货 2016-08-15
  • 习题

    1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符 2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 3、在/root/install.log每一行行首增加#号 4、在/etc/fstab文件中不以#开头的行的行首增加#号 5、处理/etc/fstab路径,使用sed命令取出其目录名和基…

    Linux干货 2016-08-10
  • 脚本初学者

    期待已久的脚本终于在这一周学到了,对于脚本,我感觉就是有两点,第一:考验一个人的思维能力,如果能把你想要的结果用脚本正确的表示出来。第二:以前学的基础命令,怎么组合起来使用。达到以上两点,再难写的脚本都可以写出来的。 一、编写,执行一个脚本        脚本的格式  &nbsp…

    2017-08-05
  • SSH协议详解

    OpenSSH 一、 前言 使用SSH可以在本地主机和远程服务器之间进行加密地传输数据,实现数据的安全。而OpenSSH是SSH协议的免费开源实现,它采用安全、加密的网络连接工具代替了telnet、ftp等古老明文传输工具。 SSH(Secure Shell)是建立在应用层和传输层基础上的安全协议。SSH是目前较可靠,专为远程登陆会话和其他网络服务提供安全性…

    Linux干货 2016-12-16
  • GPG——另一种加密信息的方式

    GPG ·使用gpg实现对称加密 ·对称加密file文件          gpg -c file          ls file.gpg ·在另一台主机上解密file   &n…

    Linux干货 2016-09-22
  • 磁盘管理作业

    创建一个2G的文件系统,块大小为2048byte, 预留1%可用空间,文件系统ext4,卷标为TEST,要求此分区开机后自动挂载至/testdir目录,且默认有acl挂载选项 [root@English6 ~]# fdisk /dev/sdc Device contains neither a&nb…

    Linux干货 2016-09-01