第十二章 文件归档压缩和系统间文件传输



12.1 使用tar管理归档文件



c创建新的归档文件


x对归档文件解包


t列出归档文件里的文件列表


v输出命令的归档或解包的过程


f指定文件


z使用gzip压缩归档后的文件(.tar.gz)


j使用bzip2压缩归档后的文件(.tar.bz2)


J使用xz压缩归档后的文件(tar.xz)


使用例子:



归档:


# tar cf archive.tar file1 file2 file3


# tar cf /root/etc.tar /etc

# tar tf /root/etc.tar



解包:


# mkdir /root/etcbackup


# cd /root/etcbackup


# tar xf /root/etc.tar 

或者 # tar xf /root/etc.tar -C /root/etcbackup 




归档并压缩:


# tar czf /root/etc.tar.gz /etc


# tar cjf /root/etc.tar.bz2 /etc


# tar cJf /root/etc.tar.xz  /etc



解压缩并且解包


# tar xf /etc.tar.xz 




12.2 使用scp、sftp、rsync实现远程文件传输


scp从本地把文件拷贝到远程

# scp /etc/fstab   server0:/tmp

root@server0's password: 


scp把远程的文件拷贝到本地, -r 拷贝目录

# scp server0:/etc/hosts  /tmp/

scp -r /var/log  server0:/tmp




sftp是一个使用ssh加密文件传输的ftp服务,能够保证文件传输过程是安全的

$ sftp server0 输入系统帐号对应的密码 ,sftp  user@server0  指定登陆用户名

sftp> mkdir /tmp/sftptest

sftp> put /etc/hosts /tmp/sftptest/hosts

Uploading /etc/hosts to /tmp/sftptest/hosts

/etc/hosts                                    100%  231     0.2KB/s   00:00    

sftp> cd /tmp/sftptest

sftp> put /etc/fstab

Uploading /etc/fstab to /tmp/sftptest/fstab

/etc/fstab                                    100%  313     0.3KB/s   00:00    

sftp> ls

fstab  hosts  

sftp> get /etc/rc.d/rc.local

Fetching /etc/rc.d/rc.local to rc.local

/etc/rc.d/rc.local                            100% 2652     2.6KB/s   00:00    

sftp> quit





rsync远程同步命令

-r 同步整个目录

-l 同步字符连接文件

-p 保留文件权限

-t 保留文件时间

-g 保留文件属组关系

-o 保留文件所有关系

-D 同步设备文件

-a 保留文件以上的所有属性,但acl和selinux扩展属性忽略

-A 保留文件以上所有属性,同时保留acl和selinux扩展属性


# rsync -av /var/log/ /tmp

# rsync -av /var/log/  server0:/tmp







12.1

需要用root用户才可以归档



创建归档文件 


[root@desktop0 Desktop]# tar cf /tmp/test.tar /bin/touch /bin/cp /bin/mv

tar: Removing leading `/' from member names

[root@desktop0 Desktop]# ls -lh /tmp/test.tar

-rw-r--r--. 1 root root 340K Jun  7 09:31 /tmp/test.tar

[root@desktop0 Desktop]# tar tf /tmp/test.tar

bin/touch

bin/cp

bin/mv

[root@desktop0 Desktop]# 




创建归档目录 



[root@desktop0 Desktop]# tar cf /root/etc.tar /etc

tar: Removing leading `/' from member names

ls -lh[root@desktop0 Desktop]# ls -lh /root/etc.tar

-rw-r--r--. 1 root root 30M Jun  7 09:41 /root/etc.tar

[root@desktop0 Desktop]# tar tf /root/etc.tar


所谓归档,就是把文件或目录入到一个文件夹中。






[root@desktop0 Desktop]# mkdir /root/etcbackup   新建一个目录 

[root@desktop0 Desktop]# ls /root/etc

ls: cannot access /root/etc: No such file or directory

[root@desktop0 Desktop]# tar xf /root/etc.tar -C /root/etcbackup    解压到另外一个/root/etcbackup  目录

tar: etc/sysconfig/network-scripts: time stamp 2017-06-07 17:18:44 is 26434.752572334 s in the future

tar: etc/sysconfig: time stamp 2017-06-07 17:18:44 is 26434.751629293 s in the future

[root@desktop0 Desktop]# ls /root/etc

etcbackup/ etc.tar    

[root@desktop0 Desktop]# ls /root/etc

etcbackup/ etc.tar    

[root@desktop0 Desktop]# ls /root/etcbackup

etc




[root@desktop0 etcbackup]# pwd

/root/etcbackup

[root@desktop0 etcbackup]# 

[root@desktop0 etcbackup]# tar xf /tmp/test.tar    也解包到这里,没有指定目录则就解压到当前目录。

[root@desktop0 etcbackup]# ls

bin  etc

[root@desktop0 etcbackup]# 




打包并压缩


[root@desktop0 etcbackup]# tar czf /root/etc.tar.gz /etc/

tar: Removing leading `/' from member names

[root@desktop0 etcbackup]# ls -lh /root/etc.tar*

-rw-r--r--. 1 root root  30M Jun  7 09:41 /root/etc.tar  没压缩30M

-rw-r--r--. 1 root root 8.4M Jun  7 10:10 /root/etc.tar.gz   压缩后8.4M



另外两种压缩:

[root@desktop0 etcbackup]# tar cjf /root/etc.tar.bz2 /etc

tar: Removing leading `/' from member names

[root@desktop0 etcbackup]# ls -lh /root/etc.tar*

-rw-r--r--. 1 root root  30M Jun  7 09:41 /root/etc.tar

-rw-r--r--. 1 root root 7.0M Jun  7 10:20 /root/etc.tar.bz2

-rw-r--r--. 1 root root 8.4M Jun  7 10:10 /root/etc.tar.gz

[root@desktop0 etcbackup]# tar cJf /root/etc.tar.xz /etc/

tar: Removing leading `/' from member names

[root@desktop0 etcbackup]# ls -lh /root/etc.tar*

-rw-r--r--. 1 root root  30M Jun  7 09:41 /root/etc.tar

-rw-r--r--. 1 root root 7.0M Jun  7 10:20 /root/etc.tar.bz2

-rw-r--r--. 1 root root 8.4M Jun  7 10:10 /root/etc.tar.gz

-rw-r--r--. 1 root root 5.7M Jun  7 10:21 /root/etc.tar.xz



解压缩

不管什么压缩方式 ,都用一条命令

tar xf 


[root@desktop0 ~]# tar xvf etc.tar.gz -C /root/etc/etcbackup

tar: /root/etc/etcbackup: Cannot open: No such file or directory

tar: Error is not recoverable: exiting now

[root@desktop0 ~]# 

[root@desktop0 ~]# tar xvf etc.tar.gz -C /root/etcbackup



12.2

一、从本机传到server

[root@desktop0 Desktop]# scp /etc/fstab server0:/tmp   从desktop这台传文件到server




[root@server0 ~]# ls /tmp          在server上可以看到这个文件

fstab                   systemd-private-Sd4Pvr

ssh-qYEFuBYtxIdP        systemd-private-sYE7tE

systemd-private-6Mbvio  vmware-root

systemd-private-aFr06s  yum_save_tx.2017-06-03.14-46.oJnMrN.yumtx

systemd-private-KJ2QWO

[root@server0 ~]# 


二、远程到server,从一个目录拷到另外一个目录


[root@server0 ~]# scp server0:/etc/hosts /tmp/

root@server0's password: 

hosts                                         100%  231     0.2KB/s   00:00    

[root@server0 ~]# ls /tmp/

fstab                   systemd-private-KJ2QWO

hosts                   systemd-private-Sd4Pvr

ssh-qYEFuBYtxIdP        systemd-private-sYE7tE

systemd-private-6Mbvio  vmware-root

systemd-private-aFr06s  yum_save_tx.2017-06-03.14-46.oJnMrN.yumtx

[root@server0 ~]# 




三、把本地的一个目录给远程


[root@desktop0 tmp]# scp -r /var/log server0:/tmp/  把整个目录给到远端的服务器



四SFTP


上传:

sftp> put /etc/hosts /tmp/sftptest/hosts

Uploading /etc/hosts to /tmp/sftptest/hosts

/etc/hosts                                    100%  231     0.2KB/s   00:00    

sftp> cd /tmp/sftptest

sftp> ls

hosts  

sftp> 


下载:



sftp> get /etc/rc.d/rc.local

sftp从哪里远程的,就下载到哪个路径




删除多个文件 


[root@desktop0 ~]# ls

anaconda-ks.cfg  Downloads  etc.tar.bz2  Music     rc.local

Desktop          etcbackup  etc.tar.gz   Pictures  Templates

Documents        etc.tar    etc.tar.xz   Public    Videos

[root@desktop0 ~]# rm -rf rc.local etc*




quit   bye 退出登陆 



五 rsync 同步命令

scp  sftp都不是最常用的,而是rsync 

1、同步到本地

[root@desktop0 Desktop]# rsync -av /var/log /tmp/1

2、同步到另外一台

[root@desktop0 Desktop]# rsync -av /var/log /tmp/1


用root才可以同步保留所有属性


[root@desktop0 1]# rsync -av /etc/ student@server0:/tmp


本机用root,对端用student同步,过去后是student