2018-02-22 文件查找和压缩

1、locate

查询系统上预建的文件索引数据库:/var/lib/mlocate/mlocate.db
依赖于事先构建的索引
索引的构建是在系统较为空闲时自动进行(周期性任务),管理员手动更新数据库(updatedb)
索引构建过程需要遍历整个根文件系统,极消耗资源
工作特点:

  • 查找速度快
  • 模糊查找
  • 非实时查找
  • 搜索的是文件的全路径,不仅仅是文件名
  • 可能只搜索用户具备读取和执行权限的目录
    有用的选项
    -i不区分大小写的搜索
    -n N只列举前N个匹配项目
  • 举例
locate conf  ---搜索名称或路径中带有“conf”的文件
locate -r "\.conf$" ---使用Regex来搜索以“.conf”结尾的文件

2、 find

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

  • 查找速度略慢
  • 精确查找
  • 实时查找
  • 可能只搜索用户具备读取和执行权限的目录
    语法:
    find [OPTION]... [查找路径] [查找条件] [处理动作]
    查找路径:指定具体目标路径;默认为当前目录
    查找条件:指定的查找标准,可以文件名、大小、类型、权限等标准进行;默认为找出指定路径下的所有文件
    处理动作:对符合条件的文件做操作,默认输出至屏幕
  • 举例
find /etc/ -name "*.conf"  ---文件名称支持使用通配符glob
find /etc/ -maxdepth 1 -name "*.conf"  ---最大搜索目录深度为1
find /etc/ -maxdepth 2 -mindepth 2 -name "*.conf"  ---只搜索第二层级
find / inum 2 -ls  ---从根开始搜节点编号为2的文件并显示出来
find / -samefile f1  ---从根开始搜和f1节点号相同的文件
find /etc/ -regex ".*\.conf$"  --- -regex 支持正则表达式,匹配的是整个文件的路径,而不仅仅是文件名
find / -user zhang -group zhang 所有者和所属组都是zhang的文件
-uid -gid -nouser -nogroup
find /etc/ -type l -ls  ---按文件类型查找
f 普通文件 d目录文件 l链接文件 s套接字文件 c字符文件 d设备文件 p管道文件
find /etc/ -size +10k -size -20k  ---根据文件大小查找
find / -size 1024k  ---表示(1023-1024k]
find / -size 1M ----表示(0-1M] 这个搜出来的结果比较多,因为是从0开始的
-size +10k ----表示(10k-∞)
-size -10k ----表示[0-9k]
-size 10k  ----表示(9-10k]

3、德摩根定律

组合条件:
与:-a
或:-o
非:-not, !
德·摩根定律:
(非A) 或(非B) = 非(A 且B)
(非A) 且(非B) = 非(A 或B)
示例:
!A -a !B = !(A -o B)
!A -o !B = !(A -a B)
  • 举例
find / ! \( -user root -o -user zhang \) =find / ! -user root -a ! -user zhang  --- !也可以用 -not表示
find /tmp -user root -o -not -name "f*"  
[root@centos6 ~]#find /tmp -user root -o -not -name f*  ---文件名用通配符表示必须用双引号,不然无法显示
find: paths must precede expression: f3
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
[root@centos6 ~]#find /tmp \( -user root -o -not -name "f*" \) -ls|wc -l
155  ---如果前面有或者的关系,用ls显示时要加括号,否则只显示或者之后匹配的内容
[root@centos6 ~]#find /tmp -user root -o -not -name "f*" -ls|wc -l
2
find /etc/ \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a -prune -o -name "*.conf"  ---表示遇到括号里面的路径就挑出来不去搜索,但列出来这两个路径,搜索/etc/下文件名为以.conf结尾的文件。
[root@centos6 ~]#find /etc/ \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a -prune -o -name "*.conf"|wc -l
263
[root@centos6 ~]#find /etc  \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a -prune -o -name "*.conf"|grep "sane.d"
/etc/sane.d  ---只列出目录
[root@centos6 ~]#find /etc  \( -path '/etc/sane.d' -o -path '/etc/fonts' \) -a -prune -o -name "*.conf"|grep "fonts"
/etc/fonts  ---只列出目录,不进入搜

4、根据时间戳

以“天”为单位;
-atime[+|-]#, 10表示[10,11) ;+10表示[11,∞)-10表示[0,10)
-mtime
-ctime
以“分钟”为单位:
-amin
-mmin
-cmin

[root@centos7 app]#useradd haha;find /etc/ -mmin -1
useradd: user 'haha' already exists
/etc/
/etc/group
/etc/gshadow
/etc/passwd
/etc/shadow
[root@centos7 app]#userdel -r haha;find / \( -path "/proc" -o -path "/sys" \) -a -prune -o -mmin -1 |wc -l
21

5、根据权限

find -perm 755会匹配权限模式恰好是755的文件 ---表示精确匹配必须是权限为755的文件
find -perm +222或find -perm /222 ---表示三种人有一种人至少有写权限的文件,centos7中+被淘汰,使用/
find -perm -222 ---表示三种人都必须至少有写权限
find -perm -022 ---表示所有者不关心,其他两种人必须都至少有写权限

总结:0只有在不是精确匹配的情况下才表示不关心。

6、参数替换xargs

由于很多命令不支持管道|来传递参数,而日常工作中有这个必要,所以就有了xargs命令
xargs用于产生某个命令的参数,xargs可以读入stdin(标准输出)的数据,并且以空格符或回车符将stdin的数据分隔成为arguments
注意:文件名或者是其他意义的名词内含有空格符的情况
有些命令不能接受过多参数,命令执行可能会失败,xargs可以解决

举例

echo f{1..100}|xargs touch
echo f*|xargs rm -f

总结:用echo显示多个文件可以避免ls显示时因参数过多无法显示的情况,用xargs将参数一个一个的传给touch和rm也可以避免文件过多无法创建或删除的情况

7、文件解压缩

(一)gzip/gunzip

  • gzip 压缩,生成.gz后缀压缩文件,程序对后缀名敏感
    -d 解压缩,相当于gunzip
    -c 结果输出至标准输出,可使用重定向在压缩/解压缩时保留源文件
    -# 指定压缩比1-9,值越大压缩比越高,默认为6
  • gunzip 解压缩,程序对后缀名敏感
  • zcat 解压缩结果输出至标准输出,可视作gunzip -c
    实验:


    image.png

(二)bzip2/bunzip2

  • bzip2 压缩,生成.bz2后缀压缩文件,程序对后缀名敏感
    -d 解压缩,相当于bunzip2
    -k 保留源文件
    -# 指定压缩比1-9,值越大压缩比越高,默认为9
  • bunzip2 解压缩,程序对后缀名敏感
  • zcat 解压缩结果输出至标准输出,可视作gunzip -c
    实验:


    image.png

(三)xz/unxz/xzcat

  • xz 压缩,生成.xz后缀压缩文件,程序对后缀名敏感
    -d 解压缩,相当于unxz
    -k 保留源文件
    -# 指定压缩比1-9,值越大压缩比越高,默认为6
  • unxz 解压缩,程序对后缀名敏感
  • xzcat 解压缩结果输出至标准输出,可视作unxz -c
    实验:
    image.png

    从结果可以看出,当改变压缩文件的后缀.xz后无法解压。unxz解压对文件后缀名敏感。上文的uncompress,gunzip,bunzip2都是后缀名敏感的。

(四)zip/unzip

  • 可以打包压缩解压缩,而之前的compress,gzip,bzip2,xz只能压缩单个文件
  • 语法:
    zip 压缩后文件 压缩前文件
    -r 递归压缩文件夹,用于打包压缩
    -p 解压缩结果输出至标准输出,可重定向至文件
    实验:


    image.png

(五)tar 磁带归档

  • 语法:tar [option...] [file]...
  • 用法:
tar cf file.tar file...        //创建归档
tar rf file.tar file...        //追加文件至归档,不支持对压缩文件追加归档
tar tf file.tar                //查看归档文件中的文件列表
tar xf file.tar                //展开归档,解包文件输出至当前目录
tar xf file.tar -C path        //展开归档,解包文件输出至指定目录path
tar zcf file.tar.gz file...    //创建归档并使用gzip压缩,bzip2使用选项j,xz使用选项J
tar zxf file.tar.gz 
//解压缩tar.gz压缩包,bzip2使用选项j,xz使用选项J,系统会自动识别压缩文件类型,z、j、J可以省略
tar zcf file.tar.gz -T includefilelist -X excludefilelist 
//T选项指定压缩文件列表includefilelist,X选项指定排除压缩文件列表excludefilelist
  • split 分割压缩文件 split -b size -d tar-file-name prefix-name
  • -b选项指定分割单位,-d选项指定被分割的压缩文件和分割后的文件群前缀
  • 使用cat配合重定向合并被分割压缩文件cat file-part* > file.tar.gz
  • 实验:
    1、将/etc目录下所有以f开头的文件和目录压缩为file.tar.gz文件
    2、查看file.tar.gz文件内的文件列表的前5行
    3、将file.tar.gz文件解压缩,解压缩文件输出至/boot目录
    image.png

    4、分割file.tar.gz文件,以3k为分割单位,分割文件前缀为file-part
    5、将分割的文件合并为文件file1.tar.gz
    image.png

    6、cpio工具

可以把文件打包压缩成.cpio或.tar结尾的文件

find ./etc |cpio -ov >etc.cpio ---打包
cpio -t <etc.cpio  ---预览包
cpio -iv <etc.cpio ---解包
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容