第8章,文件查找与压缩工具

笔记整理开始时间:2018年4月13日20:39:04

本章内容:

        使用locate命令

        使用find命令

        压缩和解压缩工具

        

文件查找:

        在文件系统上查找符合条件的文件

        文件查找:locate,find

               非实时查找(数据库查找):locate

               实时查找:find

        

locate:

        查询系统上预建的文件索引数据库

               /var/lib/mlocate/mlocate.db

        依赖于事先构建的索引

        索引的构建是在系统较为空闲是自动进行(周期性任务),管理员手动更新数据库

               updatedb

        索引构建过程需要便利整个根文件系统,极消耗资源

        工作特点:

               查找速度快

               模糊查找

               非实时查找

               搜索的是文件的全路径,不仅仅是文件名

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

                     (比如普通用户不能搜索/root下的文件)

locate命令:

        locate KEY1 KEY2...        

               搜索文件,默认全路径匹配,且key1 key2之间是或关系

               -i            忽略大小写

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

               -r          使用正则表达式

               -b          只匹配文件名

               -c            只打印匹配条数,不显示搜索到的文件

               -A key1 key2         搜索同时满足所有关键词的文件且关系

               -e           只显示目前存在的文件

               -S            不搜索文件,显示数据库信息

        实例:

               locate -c net conf          

                     搜索路径或文件名中带有net或conf 的文件,仅显示匹配的数量

                            [root@sentos7 ~]$locate -c  net  conf  

                            9616

               locate -A -c net conf

                     搜索路径或文件名中带有net和conf 的文件,仅显示匹配的数量

                            [root@sentos7 ~]$locate -A -c  net  conf

                            238

               搜索.conf或者.net结尾的文件

               [root@sentos7 ~]$locate -c -r  '\(\.conf$\)\|\(\.net$\)'

               2439

               [root@sentos7 ~]$locate -c -r '\(\.net$\)'               

               6

               [root@sentos7 ~]$locate -c -r  '\(\.conf$\)'

               2433

        

        PS:使用正则表达式(regex)的时候,key只能有一个,不能多个

        

find:

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

        工作特点:

               查找速度略慢

               精确查找

               实时查找

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

        

语法:

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

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

               查找条件:指定的查找标准,可以文件名,大小,类型,权限等标准进行

                             默认为找出指定路径下的所有文件

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

        

查找条件:

        指定搜索层级:

                     -maxdepth level  最大搜索目录深度,指定目录为第1级

                     -mindepth level    最小搜索目录深度

        

        根据文件名和inode查找:

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

                             *,?,[],[^]

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

               -inum n                       按照inode号查找

               -samefile name            相同inode号的文件

               -links n                  链接数为n的文件

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

               

               例:

                     find /etc/ -maxdepth 2  -name passwd

                     find / -name  f12*

                     find / -regex .*f123.*

                     find / -maxdepth 5  -mindepth 5 -links 4

                     find / -inum  68645312

        

        根据属主、属组查找:

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

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

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

               -gid GroupID         查找属主为指定的GID号的文佳

               -nouser                        查找没有属主的文件

               -nogroup                     查找没有属组的文件

        

        根据文件类型查找:

               -type TYPE:

                            f             普通文件

                            d            目录文件

                            l             符号链接文件

                            s             套接字文件

                            b            块设备文件

                            c             字符设备文件

                            p            管道文件

               空文件或目录

               -empty

                     find / -type d  -empty

        

        组合条件:

               与:        -a          

               或:        -o

               非:        -not,!

        德·摩根定律

               (非a)或(非b)=非(a且b)

               (非a)且(非b)=非(a或b)

        

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

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

        示例:

               find / -name snow

               find / -inmae Snow

               find / -name *.txt

               find /var -name *.log* -a -regex ".*log$"

               find -user joe -group joe

               fing / -user joe -o -group joe

               find -not \( -user joe -o -user jane  \)

               find -not -user joe -not -user jane

               find / -user joe -o -uid 500

        

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

                     find / -not -user root  -name "[^f]*"  |wc -l

                     563

                     find / \(  -not -user root -a -not -name "f*" \)|wc -l

                     563

                     find / -not \( -user root -o -name "f*" \)|wc -l

                     563

        排除目录        

        示例:

               查找/etc下,除/etc/sane.d目录的其他所有.conf后缀的文件

               find /etc -path "/etc/same" -a -prune -o -name *.conf

               查找/etc/下,除/etc/sane.d和/etc/fonts两个目录的所有.conf后缀的文件

               find /etc \( -path "/etc/sane.d" -o  -path "/etc/fonts" \) -a -prune  -o -name *.conf

        根据文件大小来查找:

               -size [+|-]#unit

                     常用单位:k M G c(byte)

                     #UNIT:(#-1,#]

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

                     -#UNIT:(0,#-1]

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

                     +#UNIT: (#,以上]

                            如:+6k 表示(6k,以上)

        

        根据时间戳:

               以“天”为单位;

                     -atime[+|-]#,

                            #:[#,#+1)        find / -atime 5  表示5-6天

                             +#:[#+1,以上]                     +5   6天以内

                            -#:[0,#)                             -5    5天以上

                     -mtime

                     -ctime

               以”分钟“为单位

                     -amin            find / -amin 5  5-6分钟

                     -mmin                                -5    5分钟以内

                     -cmin                                 +5   6分钟以上

        根据权限查找:

               -perm[/|-]mode

                     mode            精确权限匹配

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

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

               find -perm -222

               要转换成010 010 010 ugo必须要都写权限才符合             

               find -perm /421                   

                     100 010 001          u+r g+w o+x 只需要有一位满足就行了

               0表示不关注

               find -perm 002             只要o 有 w 权限就匹配  不关注ug位

处理动作:

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

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

        -delete   删除查找到的文件

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

        -ok command  {} \;  找到的每个文件执行由command指定的命令,对于

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

               find /root -name "f*" -ok cp {} /data {}.org \;

        -exec command {} \;

               对查找到的每个文件执行由COMMAND指定的命令,不需要确认

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

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

               性传递给后面的命令

        

xargs:参数替换

               由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所有就有了

               xargs命令

               xargs用于产生某个命令的参数,xargs可以读入stdin的数据,并且以空格符

               或回车符将stdin的数据分隔成为  arguments

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

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

        示例:

               ls f* |xargs rm

               ls -R /data |xargs rm -rf

               find / -perm +666|ls -l              这个是个错误的,ls不支持stdin

               fing / -perm 666| xargs ls -l        用xargs 传递参数

               

               echo f{1..1000000} |xargs -n1 touch

               ls | xargs rm -f

        

find 示例:

        备份配置文件,添加.orig这个扩展名

        find /etc -name "*.conf" -exec cp -v {} {},orig  \;

               注意,如果更换目录备份,比如备份到/data下

                     find -name "*.conf" -exec cp {} /data/{},orig \;

               这是个错误命令,会提示目录不存在

                     /data//etc/mcelog/mcelog.conf,orig’: No such file or  directory

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

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

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

        find ~ -perm -002

        查找/data下的权限为644  后缀为sh的普通文件,增加执行权限

        find /data -type f -perm 644 -name "*.sh" exec chmod +x {} \;

        查看/home的目录

        find /home -type d   -ls

        

Gnome 搜索工具

        位置-->搜索文件。。

        图形化搜索工具,可搜索

               命令、内容、用户、组群、大小、修改时间

               

压缩、解压缩及归档工具

        file-roller

        compress/uncompress: .Z

        gzip/gunzip:                  .gz

        bzip2/bunzip2                      .bz

        xz/unxz                                .xz

        zip/unzip                      

        tar

        cpoi

compress/uncompress

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

               -d                  解压缩,相当于uncompress

               -c > file.Z        压缩和解压缩结果输出至标准输出,不删除源文件                    

               -v                  显示详情

               -r      如果对目录使用compress -r dir  会将目录内的文件分别进行压缩

        uncompress:       解压缩

        zcat file.Z >file       类似compress -c 利用重定向解压  不删除压缩文件

        PS:

               压缩比不高,且太小的文件不支持压缩

        

gzip/gunzip

        gzip []option]... file...

               -d          解压缩,相当于gunzip

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

               -#          指定压缩比,1-9

        zcat:m.gz > m    不解压的情况下查看内容,可以重定向解压

bzip2/bunzip2/bzcat

        bzip2 [option].. file..

               -k           保留原文件

               -d          解压缩

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

        bzcat:不解压的情况下查看文本文件内容

        

xz/unxz/xzcat

        xz [option]..file..

               -k           保留原文件

               -d         解压缩

               -#          压缩比1-9 默认6

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

        

zip/unzip

        zip -r file dir1 

               将dir1 打包压缩到file.zip

        解包解压缩:

               unzipfile file.zip

               man bash | zip man -  

                     接受输入且打包为man.zip(如果直接解压出来,文件名为 - )

               unzip -p man.zip > man      将文本解压写入文件

               

tar:

        tar -cpvf /pash/file.tar  /dir|file...

               将/dir或者file...  打包放到/pash/file.tar

               -c   指定文件file.tar

               -p   保留文件属性

               -v  可视

               -f  后面(必须)跟文件     不可写成-cfpv之类的

        tar -tvf file.tar

               预览打包中的文件列表

        tar -xvf fiel.tar

               解包到当前文件

        tar -xvf file.tar -C /dir

               解包到目录/dir

        

        打包的同时可以压缩:

               tar   -zcvpf file.tar.gz /dir     打包同时压缩成gz文件 .tgz

               tar -jcvpf file.tar.bz /dir 打包同时压缩成bz文件  .tbz

               tar -Jcvpf file.tar.xz /dir         打包同时压缩成xz文件  .txz

        解包不需要特殊处理,-xvf 可以全部解包解压缩

        

        -T 选项指定输入文件(目录)

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

               tar zcvf file.tgz   -T list.txt -X exlist.txt

               

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

        split -b 10M -d file.tar  a.tar

               -b size

               -d 指定后缀名为数字

               将file.tar 按照10M大小分割,且文件名为数字后缀 a.tar(00,01,..)

                     如不加-d 默认为字母后缀(a,b,c...)

        合并

               cat a.tar* > file.tar

        

cpio:

        功能:复制文件或归档

        cpio命令是通过重定向的方式将文件进行打包备份,还原恢复的工具,他可以

        解压以".cpio"或者".tar"结尾的文件

        cpio >|< 文件或者设备名

        选项:

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

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

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

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

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

               -c 一种较新的存储方式

        示例:

               find /etc -print | cpio -ov > etc.cpio ;rm -rf  /etc

                     将/etc目录备份;然后删除/etc目录

               cpio -tv < etc.cpio

                     预览文件

               cpio -idv < etc.cpio

                     恢复/etc目录

        

笔记整理完成时间:2018年4月15日17:52:26     

        

        

        

        


猜你喜欢

转载自blog.51cto.com/13683480/2104097
今日推荐