查找和压缩
- 查找工具
- 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
压缩、解压缩及归档工具
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
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