文件查找&压缩

locate

  • 文件查找:locate, fifindhtml

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

    实时查找:fifind正则表达式

    locate 查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db数据库

    索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb能够更新数据库centos

    索引构建过程须要遍历整个根文件系统,很消耗资源bash

    工做特色:markdown

    查找速度快并发

    模糊查找ide

    非实时查找oop

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

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

    -i 不区分大小写的搜索

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

    -r 使用基本正则表达式

    #搜索名称或路径中包含“conf”的文件
    locate conf
    #使用Regex来搜索以“.conf”结尾的文件
    locate -r '\.conf$
    
    [root@centos8 ~]#locate -n 10 -ir '\.CONF$'
    /boot/loader/entries/5b85fc7444b240a992c42ce2a9f65db5-0-rescue.conf
    /boot/loader/entries/5b85fc7444b240a992c42ce2a9f65db5-4.18.0-147.el8.x86_64.conf
    /etc/autofs.conf
    /etc/autofs_ldap_auth.conf
    /etc/dracut.conf
    /etc/fuse.conf
    /etc/host.conf
    /etc/idmapd.conf
    /etc/kdump.conf
    /etc/krb5.conf
[root@centos8 Test]#yum install mlocate -y
[root@centos8 Test]#locate  passwd
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
[root@centos8 Test]#updatedb  更新数据库
[root@centos8 Test]#locate  passwd

-r 正则表达式,搜索以某某后缀的
[root@centos8 Test]#locate  -r '\.conf$'
[root@centos8 Test]#touch  abc.txt
[root@centos8 Test]#locate  'abc.txt'
[root@centos8 Test]#updatedb      更新数据库才能够搜索到
[root@centos8 Test]#locate  'abc.txt'
/data/Test/abc.txt
[root@centos8 Test]#rm -rf abc.txt     滞后性。删除了也可找到
[root@centos8 Test]#locate  'abc.txt'
/data/Test/abc.txt

-i 匹配时忽略大小写
-c 不显示匹配内容。只显示匹配到的行
--regex 支持扩展的正则表达式

find

-maxdepth   -mindepth
[root@centos8 Test]#find /boot -maxdepth 1        #最大深度1级
[root@centos8 Test]#find /boot -mindepth 1        #最小深度1级
[root@centos8 Test]#find /boot -mindepth 1 -maxdepth  1       #只找一级

-depth 或者 -d    对每一个目录先处理目录内的文件,再处理目录自己
[root@centos8 data]#find /data/test
/data/test
/data/test/f1.txt
/data/test/f2.txt
/data/test/test2
/data/test/test2/test3
/data/test/test2/test3/f3.txt
/data/test/test2/test3/f4.txt
[root@centos8 data]#find /data/test -depth
/data/test/f1.txt
/data/test/f2.txt
/data/test/test2/test3/f3.txt
/data/test/test2/test3/f4.txt
/data/test/test2/test3
/data/test/test2
/data/test

-name "文件名称":支持使用glob,如:*, ?, [], [^],通配符要加双引号引发来
-iname "文件名称":不区分字母大小写
-inum n 按inode号查找
-samefile name 相同inode号的文件
-links n   连接数为n的文件
-regex “PATTERN”:以PATTERN匹配整个文件路径,而非文件名称
-name   通配符的加双引号引发来
[root@centos8 Test]#find  不指定条件就所有搜索
[root@centos8 Test]#find /etc  -name "*.txt"     #加双引号
/etc/pki/nssdb/pkcs11.txt
[root@centos8 Test]#find  /etc/   -name *.txt    #加双引号
[root@centos8 Test]#find  /etc/   -name "*.txt"   #加双引号
/etc/pki/nssdb/pkcs11.txt

-iname 根据文件名查找,可是不区分大小写
[root@wang ~]# find ./ -name "anaconda-ks.cfg"
./anaconda-ks.cfg
支持glob通配符
?任意单个字符
* 任意长度任意字符
[root@wang ~]# find ./ -name "*.cfg"
./anaconda-ks.cfg
./initial-setup-ks.cfg
[]匹配指定范围内的的任意单个字符
[root@wang ~]# find ./ -name " (0-9)*.cfg"
./anaconda-ks.cfg
./initial-setup-ks.cfg
[^]匹配指定范围内的单个字符取反
遍历查找
find+option+查找路径+查找条件+处理动做
根据文件的属组和属主来查找

 -inum 根据节点编号来搜索
[root@localhost ~]# find /etc  -inum 16802309
/etc/yum.repos.d
[root@localhost ~]# find /etc/ -regex .*\.conf$
[root@localhost ~]# find /etc/ -regex \.conf$
第二种方法错误,由于regex匹配的要是全路径,而不是文件名

-type TYPE
TYPE能够是如下形式:
f: 普通文件
d: 目录文件
l: 符号连接文件
s:套接字文件
b: 块设备文件
c: 字符设备文件
p: 管道文件
#查看/home的目录
[root08:22 AMcentos8 /scripts]#find /home -type d -ls

-user USERNAME:查找属主为指定用户(UID)的文件
-group GRPNAME: 查找属组为指定组(GID)的文件
-uid UserID:查找属主为指定的UID号的文件
-gid GroupID:查找属组为指定的GID号的文件
-nouser:查找没有属主的文件
-nogroup:查找没有属组的文件
 -user
[root@localhost ~]# find  / -user  wanghua  -ls
-ls  是find命令自带的处理动做

 -regex  #加 .* 由于匹配的是路径,而不是文件名
[root@localhost ~]# find  /etc/ -regex ".*\.conf$"

[root@localhost ~]# useradd xiaowang
[root@localhost ~]# userdel xiaowang
[root@localhost ~]# find / -nouser  -ls  查找没有属主的文件
[root@localhost ~]# find / -nogroup  -ls  查找没有属组的文件

-empty
[root@localhost ~]# find  /etc -empty  -type  f -ls   #ls 至关于  ll

#条件组合:
-o  或者
-a  与
! 或者 not  否认

#优先级问题:    -a 的优先级比-o高
[root@localhost ~]# find  /etc/ -empty -o -not  -type d -ls |wc -l
917
[root@localhost ~]# find  /etc/ -empty -o -not  -type d  |wc -l
988
由于:-not  -type  d  -ls  被当作了一块来执行
[root@localhost ~]# find  /etc/ \( -empty -o -not -type d \) -ls  |wc -l
988

#找出/tmp目录下,属主不是root,且文件名不以f开头的文件
find /tmp ( -not -user root -a -not -name 'f*' ) -ls
find /tmp -not ( -user root -o -name 'f*' ) –ls                 -ls 的前面必定要跟一个括号

#摩根定律:
(非A)或(非B)==非(A且B)
(非A)且(非B)==非(A或B)
!A  -a  !B = !(A -o B)
!A  -o  !B = !(A -a B)
[root@localhost ~]# find  /tmp \( -not -user root -a -not  -name 'f*' \) -ls
101371615    0 -rw-rw-r--   1 wanghua  wanghua         0 Apr 11 06:57 /tmp/wanghua

[root08:32 AMcentos8 /scripts]#find ! \( -type d -a -empty \)| wc -l
2
[root08:33 AMcentos8 /scripts]#find ! -type d -o ! -empty |wc -l
2

#文件夹的排除

#查找/etc/下,除/etc/sane.d目录的其它全部.conf后缀的文件
find /etc             -path '/etc/sane.d' -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"
#排除/proc和/sys目录
find /         \( -path "/sys" -o -path "/proc" \) -a -prune                          -o -type f -a -mmin -1

-size
[root@centos8 Test]#find  -size 6k -ls   
201727784      8 -rw-r--r--   1  root     root         6144 Apr 11 19:29 ./f1
201727806      8 -rw-r--r--   1  root     root         6000 Apr 11 19:30 ./f3
201727817      8 -rw-r--r--   1  root     root         5121 Apr 11 19:35 ./f4

[root@centos8 Test]#find  -size 6144c 
./f1
[root@centos8 Test]#find  -size  -6k    表示0到6k的文件

[root@centos8 Test]#find  -size  +6k   表示6K以上的文件
.
./f6

#时间戳
根据文件的时间戳来查找
以天为单位: -atime 访问时间  -mtime 修改时间  -ctime 改变时间
以分钟为单位  -amin  -mmin  -cmin
+3 访问时间距离如今已经超过了三天
-3 访问时间距离如今不足三天
3 距离今天正好达到三天的那一天
atime 以天为单位

[root09:14 AMcentos8 /scripts]#find / -mtime +10    # 11天之前的文件
[root09:17 AMcentos8 /scripts]#find /var -mtime -1 -ls  #一天内的
[root09:19 AMcentos8 /scripts]#find /var -mmin -1 -ls   #一分钟以内文件发生的变化

#权限来修改
-perm [/|-]MODE
MODE: 精确权限匹配
/MODE:任何一类(u,g,o)对象的权限中只要能一位匹配便可,或关系,+ 从CentOS 7开始淘汰
-MODE:每一类对象都必须同时拥有指定权限,与关系
0 表示不关注    因此说-002 与 /002 等价,这类权限是要关注的,由于其余人有写权限    
说明:
find -perm 755 会匹配权限模式刚好是755的文件
只要当任意人有写权限时,find -perm /222就会匹配
只有当每一个人都有写权限时,find -perm -222才会匹配
只有当其它人(other)有写权限时,find -perm -002才会匹配

#处理动做
-print:默认的处理动做,显示至屏幕
-ls:相似于对查找到的文件执行“ls -l”命令
-fls file:查找到的全部文件的长格式信息保存至指定文件中,至关于 -ls > file
-delete:删除查找到的文件,慎用!
-ok COMMAND {} \; 对查找到的每一个文件执行由COMMAND指定的命令,对于每一个文件执行命令以前,都会
交互式要求用户确认
-exec COMMAND {} \;   批量,不回答就操做, 对查找到的每一个文件执行由COMMAND指定的命令
{}: 用于引用查找到的文件名称自身

 -fls  至关于重定向
[root@centos8 Test]#find   -fls   /root/find.log
-delete 
[root@centos8 Test]#find -name "*.txt" -delete 
-ok
[root@centos8 Test]#for i in `find -name "f*"`;do mv $i /opt;done
[root@centos8 Test]#find -name "f*" -ok mv {} /opt \;
< mv ... ./f1 > ? y
< mv ... ./f2 > ? y
< mv ... ./f3 > ? 
< mv ... ./f4 > ? 
< mv ... ./f6 > ? 
< mv ... ./f7 > ? 

-exec
[root@centos8 Test]#find -name "f*" -exec mv {} /opt \;   无须要交互式,一次到位

#备份文件:
[root10:15 AMcentos8 /data]#find /data -name "*.txt" -exec cp {} {}.bak \;

#删除 此时的rm是动做,因此无须 rm  -rf 
[root10:16 AMcentos8 /data]#find /data -name "*.txt" -exec rm {}  \;

#修改权限
[root@centos8 Test]#find -perm  644 -a  -name "f*" -exec chmod 000  {} \;

#备份配置文件,添加.orig这个扩展名
find  -name  ".conf"  -exec  cp {} {}.orig \;
#提示删除存在时间超过3天以上的joe的临时文件
find /tmp -ctime +3 -user joe -ok rm {} \;
#在主目录中寻找可被其它用户写入的文件
find ~ -perm -002  -exec chmod o-w {} \;
#查找/data下的权限为644,后缀为sh的普通文件,增长执行权限
find /data –type f -perm 644  -name "*.sh" –exec chmod 755 {} \;

xargs 解决命令不支持标准输入,将标准输出的内容做为命令的参数
-n#   #行显示
[root@centos8 Test]#seq 3 |xargs 
1 2 3
[root@centos8 Test]#seq 3 |xargs -n2
1 2
3
#删除和建立帐户
[root@centos8 Test]#for i in {1..10};do useradd user$i;done  建立十个帐户
[root@centos8 Test]#echo user{1..10} |xargs -n1 userdel -r  删除十个帐户
  删除帐号只能一个一个的删除
  或者:
  [root@centos8 Test]#for i in {1..10};do userdel user$i;done

#删除文件名带空格的文件
[root@localhost ~]# find -type f  -print0 | xargs -0 rm {} \;

1.查找/usr目录下不属于 root bin 或hadoop的全部文件或目录
find /usr -not -user root -a -not -user bin -a -not -user 
hadoop
或者
find  /usr -not \(-user root -o -user bin -o -user hadoop\)
2.查找/etc目录下,一周内内容被修改过,属主不为root 也不为Hadoop的文件或目录
find -mtime -7 -a -not\(-user root -o -user hadoop\)
find -mtime -7 -a -not -user root -a -not -user hadoop
3.查找当前系统上没有属主或属组且最近一周内被访问过的文件或目录
find / -nouser -a -nogroup -a -atime -7
没有属组且没有属主==没有属组或属主
4.查找/etc目录下全部用户没有写权限
find /etc -not -perm +222
或者/ 加号被替换了
find /etc -not -perm /222
摩根定律 +222 表示或逻辑  取反就是且
5.查找/etc目录下至少有一类用户没有写权限
find /etc -not -perm -222
6.查找/etc目录下全部用户都有执行权限,且其余用户有写权限的文件或目录
find /etc  -perm -113

文件查找&压缩

文件查找&压缩
12.jpg11.jpg

-002 与 /002 等价 可是/7000与-7000不等价

0 表示不关注 因此说-002 与 /002 等价

文件查找&压缩

文件查找&压缩
03.jpg04.jpg

xargs

文件查找&压缩

文件查找&压缩

01.jpg02.jpg

[root10:36 AMcentos8 /data]#find -name "*.bak" |xargs ls -Sl
-rw-r--r--. 1 root root 29 Jun  5 10:16 ./t.txt.bak
-rw-r--r--. 1 root root 25 Jun  5 10:16 ./f1.txt.bak
-rw-r--r--. 1 root root 22 Jun  5 10:16 ./echo.txt.bak
-rw-r--r--. 1 root root 21 Jun  5 10:16 ./seq.txt.bak
-rw-r--r--. 1 root root  8 Jun  5 10:16 ./b.txt.bak
#显示10个数字
[root@centos8 ~]#seq 10 | xargs
1 2 3 4 5 6 7 8 9 10
[root10:57 AMcentos8 /data]#echo {1..10} 
1 2 3 4 5 6 7 8 9 10
[root10:58 AMcentos8 /data]#echo {1..10} |xargs 
1 2 3 4 5 6 7 8 9 10
[root10:58 AMcentos8 /data]#echo {1..10} |xargs -n1
1
2
3
4
5
6
7
8
9
10
[root10:58 AMcentos8 /data]#echo {1..10} |xargs -n2
1 2
3 4
5 6
7 8
9 10

#批量建立和删除用户
echo user{1..10} |xargs -n1 useradd 
echo user{1..10} | xargs -n1 userdel -r

#查找有特殊权限的文件,并排序
find /bin/ -perm /7000 | xargs ls -Sl

#并发执行多个进程
seq 100 |xargs -i -P10 wget -P /data   http://10.0.0.8/{}.html

#并行下载视频
seq 199 | xargs -i -P3 you-get https://www.bilibili.com/video/BV1Et411E7dx?p={}

find -print0 处理特殊文件

[root11:23 AMcentos8 /data]#ls
 a  'a b'   b.log  'c  d'
[root11:23 AMcentos8 /data]#find |xargs ls   -Sl
ls: cannot access 'b': No such file or directory
ls: cannot access './c': No such file or directory
ls: cannot access 'd': No such file or directory
-rw-r--r--. 1 root root 21 Jun  3 01:41 ./b.log
-rw-r--r--. 1 root root 11 Jun  4 15:23 ./a
-rw-r--r--. 1 root root 11 Jun  4 15:23 ./a
-rw-r--r--. 1 root root  0 Aug  7  2019 ./.a
-rw-r--r--. 1 root root  0 Aug  7  2019 ./.b
-rw-r--r--. 1 root root  0 Aug  7  2019 ./.c
-rw-r--r--. 1 root root  0 Aug  7  2019 ./.d

.:
total 12
-rw-r--r--. 1 root root 21 Jun  3 01:41  b.log
-rw-r--r--. 1 root root 11 Jun  4 15:23  a
-rw-r--r--. 1 root root  3 Jun  5 11:07 'a b'
-rw-r--r--. 1 root root  0 Jun  5 11:05 'c  d'
[root11:23 AMcentos8 /data]#find -print0  |xargs -0  ls   -Sl
-rw-r--r--. 1 root root 21 Jun  3 01:41  ./b.log
-rw-r--r--. 1 root root 11 Jun  4 15:23  ./a
-rw-r--r--. 1 root root  3 Jun  5 11:07 './a b'
-rw-r--r--. 1 root root  0 Aug  7  2019  ./.a
-rw-r--r--. 1 root root  0 Aug  7  2019  ./.b
-rw-r--r--. 1 root root  0 Aug  7  2019  ./.c
-rw-r--r--. 1 root root  0 Jun  5 11:05 './c  d'
-rw-r--r--. 1 root root  0 Aug  7  2019  ./.d

.:
total 12
-rw-r--r--. 1 root root 21 Jun  3 01:41  b.log
-rw-r--r--. 1 root root 11 Jun  4 15:23  a
-rw-r--r--. 1 root root  3 Jun  5 11:07 'a b'
-rw-r--r--. 1 root root  0 Jun  5 11:05 'c  d'

#删除特殊文件
[root11:23 AMcentos8 /data]#
[root11:23 AMcentos8 /data]#find |xargs rm
rm: cannot remove '.': Is a directory
rm: cannot remove './a': No such file or directory
rm: cannot remove 'b': No such file or directory
rm: cannot remove './c': No such file or directory
rm: cannot remove 'd': No such file or directory
[root11:26 AMcentos8 /data]#find -print0  |xargs -0  rm
rm: cannot remove '.': Is a directory

练习

一、查找/var目录下属主为root,且属组为mail的全部文件

[root09:53 AMcentos8 /scripts]#find /var -user root -group mail -ls

二、查找/var目录下不属于root、lp、gdm的全部文件

方法一:
[root11:42 AMcentos8 /data]#find /var/    -not \( -user root -o -user lp -o -user gdm \)

方法二:
[root11:42 AMcentos8 /data]#find /var/  ! -user root ! -user lp ! -user gdm

三、查找/var目录下最近一周内其内容修改过,同时属主不为root,也不是postfifix的文件

方法一
[root11:46 AMcentos8 /data]#find /var/ -mtime -7 ! -user root ! -user postfifix 

方法二
[root11:46 AMcentos8 /data]#find /var/ -mtime -7 -not \( -user root -o -user postfifix \)

方法三
[root11:47 AMcentos8 /data]#find /var/ -mtime -7 !  \( -user root -o -user postfifix \)

四、查找当前系统上没有属主或属组,且最近一个周内曾被访问过的文件

[root11:55 AMcentos8 /data]#find / \( -nouser -o -nogroup \)  -mtime  -7

五、查找/etc目录下大于1M且类型为普通文件的全部文件

[root11:57 AMcentos8 /data]#find /etc -size +1M  -type d  -ls

六、查找/etc目录下全部用户都没有写权限的文件

[root12:00 PMcentos8 /data]#find /etc !  -perm /222 -ls

七、查找/etc目录下至少有一类用户没有执行权限的文件

[root12:02 PMcentos8 /data]#find /etc !  -perm -111 -ls

八、查找/etc/init.d目录下,全部用户都有执行权限,且其它用户有写权限的文件

[root07:21 AMcentos7 ~]#find /etc/init.d/ -perm -111 -a -perm -002

压缩和解压缩及打包

#compress
[root@centos8 data]#dd if=/dev/zero of=f  bs=1M count=10
[root@centos8 data]#yum  install  ncompress -y
[root@centos8 data]#compress f   压缩文件
[root@centos8 data]#uncompress f.Z  解压缩
参数
-c  压缩保留文件
[root@centos8 data]#compress -c f >f.z
[root@centos8 data]#ll
total 10252
-rw-r--r-- 1 root root 10485760 Apr 11 22:19 f
-rw-r--r-- 1 root root     6612 Apr 11 22:26 f.z
drwxr-xr-x 2 root root       95 Apr 11 21:40 Test
drwxr-xr-x 2 root root       45 Apr 11 11:57 testdir
-rw-r--r-- 1 root root     1281 Apr 11 10:50 user.log

-dc  解压缩
compress -dc f.z  >f    #解压缩保留原来的文件
# zcat  
不解压直接看文件
[root@centos8 data]#zcat  f.z

gzip 和ungzip
~]# gzip m  直接压缩删除原文件
-d 解压缩文件,丢失源文件
[root@centos8 data]#gzip -d httpd-2.4.46.tar.gz 

-k 压缩之后不丢失原文件  (centos8的功能)
[root@centos8 data]#gzip -k httpd-2.4.46.tar 
[root@centos8 data]#gzip -k -5  httpd-2.4.46.tar   #加上数字表示压缩比

[root@centos8 data]#ll
total 66504
drwxr-xr-x 86 root root     8192 Apr 11 22:34 etc
-rw-r--r--  1 root root     6612 Apr 11 22:26 f.z
-rw-r--r--  1 root root 42301440 Feb  2 18:16 httpd-2.4.46.tar
-rw-r--r--  1 root root  9424017 Feb  2 18:16 httpd-2.4.46.tar.gz

#标准输出之后重定向
[root@centos8 data]#cat user.log |gzip > user.log.gz

#bzip2 bunzip2  #压缩的比例比gz格式更高
[root@centos8 data]#yum install bzip2  -y
bzip2 -k xx     #压缩保留原文件
bzcat 不解压查看里面的内容
cat  xx |bzip -9  >x.bz2

#xz 和 unxz  压缩更多,可是花的时间也多
xzcat 不解压就能够查看

#zip unzip  支持压缩文件夹
zip 能够实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:全部者和组信
息,通常建议使用 tar 代替

#打包并压缩
zip –r /backup/sysconfig.zip /etc/sysconfig/
#不包括目录自己,只打包目录内的文件和子目录
cd /etc/sysconfig; zip -r /root/sysconfig.zip * 
#默认解压缩至当前目录
unzip /backup/sysconfig.zip  
#解压缩至指定目录,若是指定目录不存在,会在其父目录(必须事先存在)下自动生成
unzip /backup/sysconfig.zip  -d /tmp/config  
cat /var/log/messages | zip messages  -
#-p 表示管道
unzip -p message.zip   > message
-r 压缩文件夹
[root@centos8 data]#zip  -r  etc.zip etc
-rw-r--r--  1 root root 7.6M Apr 11 23:24 etc.zip
[root@centos8 data]#du -sh /etc
22M /etc
加密:
[root@centos8 data]#zip -h2 |grep pass
  -e        use standard (weak) PKZip 2.0 encryption, prompt for password  #输密码
  -P pswd   use standard encryption, password is pswd

[root@centos8 data]#zip -e -r etc2.zip /etc/
Enter password: 
Verify password: 
    压缩加密  

[root@centos8 opt]#unzip  /data/etc2.zip    #解压到当前的目录下

[root@centos8 opt]#unzip -P 123456  etc3.zip  #非交互式解压缩  非交互式输入密码

tar(压缩文件夹)

不带横线:bsb分格
--      GUN分格
-       UNIX分格

#拷贝:
[root@centos8 data]#tar c /etc |tar x -C /opt

z    gzp
c    建立tar包
v    显示详细过程
f    指定压缩文件名字
t    不解压就看里面的内容
p     保持文件的原有属性,可是acl权限没法保存
x    解开包
C     指定解压的目标路径
--exclude=PATTEND 打包时候排除不须要处理的文件和目录
-h 打包软连接文件指向真实源文件

                                     组合解压缩  xf  
                                     组合打包压缩
                                     zcf    gz
                                     bz2    j
                                     xz     J   安装了xz命令才能调用J
==========================================================================
[root01:40 PMlocalhost /opt]#ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Apr 15 08:42 /etc/rc.local -> rc.d/rc.local
[root01:41 PMlocalhost /opt]#tar zcf ./rc.local.tar.gz  /etc/rc.local #要用相对路径
tar: Removing leading `/' from member names
[root01:42 PMlocalhost /opt]#ll
total 4
-rw-r--r--. 1 root root 116 Apr 19 13:42 rc.local.tar.gz
[root01:42 PMlocalhost /opt]#tar xf rc.local.tar.gz 
[root01:43 PMlocalhost /opt]#ll
total 4
drwxr-xr-x. 2 root root  21 Apr 19 13:43 etc
-rw-r--r--. 1 root root 116 Apr 19 13:42 rc.local.tar.gz
[root01:43 PMlocalhost /opt]#ll  etc
total 0
lrwxrwxrwx. 1 root root 13 Apr 15 08:42 rc.local -> rc.d/rc.local  #是个连接文件
[root01:45 PMlocalhost /opt]#

#加 h
[root01:50 PMlocalhost /opt]#ll /etc/rc.local 
lrwxrwxrwx. 1 root root 13 Apr 15 08:42 /etc/rc.local -> rc.d/rc.local
[root01:50 PMlocalhost /opt]#cd /etc
[root01:52 PMlocalhost /etc]#tar hzcf /opt/rc.local.tar.gz  rc.local#这样打包的才不是连接文件
[root01:53 PMlocalhost /etc]#cd /opt/
[root01:53 PMlocalhost /opt]#ll
total 4
-rw-r--r--. 1 root root 429 Apr 19 13:53 rc.local.tar.gz
[root01:53 PMlocalhost /opt]#tar xf  rc.local.tar.gz 
[root01:54 PMlocalhost /opt]#ll
total 8
-rw-r--r--. 1 root root 473 Nov 19  2015 rc.local
-rw-r--r--. 1 root root 429 Apr 19 13:53 rc.local.tar.gz
[root01:54 PMlocalhost /opt]#

#当前目标的全部文件打包
[root01:09 PMlocalhost /data]#tar zcvf data.tar.gz ./*   进入不到这个目录里面,只打包目录里面的文件,不打包目录
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
[root01:09 PMlocalhost /data]#ls
1.txt  2.txt  3.txt  4.txt  5.txt  data.tar.gz
#查看里面的内容
[root01:11 PMlocalhost /data]#tar -tf data.tar.gz 
./1.txt
./2.txt
./3.txt
./4.txt
./5.txt
#解压  
文件解压出来是文件
[root01:20 PMlocalhost /data]#ls
data.tar.gz
[root01:20 PMlocalhost /data]#tar  xf  data.tar.gz 
[root01:21 PMlocalhost /data]#ls
1.txt  2.txt  3.txt  4.txt  5.txt  data.tar.gz
目录解压出来就是目录:
[root01:23 PMlocalhost /data]#ls
data1.tar.gz  data.tar.gz
[root01:23 PMlocalhost /data]#tar  xf  data1.tar.gz 
[root01:23 PMlocalhost /data]#ls
data1.tar.gz  data.tar.gz  txt

 --exclude
 [root01:58 PMlocalhost /opt]#ls
1.txt  2.txt  3.txt  4.txt  5.txt  6.txt  rc.local  rc.local.tar.gz
[root01:58 PMlocalhost /opt]#tar zcf wanghua.tar.gz ./* --exclude=4.txt --exclude=5.txt
[root01:59 PMlocalhost /opt]#tar tf wanghua.tar.gz 
./1.txt
./2.txt
./3.txt
./6.txt
./rc.local
./rc.local.tar.gz

#利用 tar 进行文件复制
[root02:09 PMcentos8 /data]# tar c /var/ |tar x  -C /data

split

split 命令能够分割一个文件为多个文件

范例

#分割大的 tar 文件为多份小文件
split -b Size –d tar-file-name prefix-name
split -b 1M mybackup.tgz mybackup-parts
#切换成的多个小分文件使用数字后缀
split -b 1M –d mybackup.tgz mybackup-parts

将多个切割的小文件合并成一个大文件

cat mybackup-parts* > mybackup.tar.gz

范例:

#切割文件

[root02:15 PMcentos8 /data]#split -b 1M var.tar.gz /data/var_zip  将 var.tar.gz 切割为大小1M的文件,文件的后缀是字母

[root02:19 PMcentos8 /data]#split -b  1M -d  var.tar.gz /data/dig_zip 将 var.tar.gz 切割为大小1M的文件,文件的后缀是数字

#合并文件
[root02:28 PMcentos8 /data]#cat /data/var_zip* > /data/var_zip
相关文章
相关标签/搜索