在文件的传输以及文件的整理过程中我们经常会用到压缩。虽然linux下文件名与文件的属性没有多大关系,但是为了辅助我们人脑的记忆方式,通常在压缩文件时会以不同的扩展名来命名压缩文件。常见的扩展名有:
*.Z #compress程序压缩的文件
*.gz #gzip程序压缩的文件
*.bz2 #bzip2程序压缩的文件
*.zip #zip程序压缩的文件
*.xz #xz程序压缩的文件
*.tar #tar程序打包的数据,并没有压缩过
*.tar.gz #tar程序打包的文件,经过gzip的压缩
*.tar.bz2 #tar程序打包的文件,经过bzip2的压缩
linux上最常见的压缩命令就是gzip与bzip2了,不管是compress还是gzip或是bzip2这些压缩命令都只能针对一个文件来压缩与解压缩,这样一来每次压缩与解压缩都要一大堆文件,非常的不方便。
tar可以将很多文件打包成一个文件,甚至可以是目录。单纯的tar功能仅仅是”打包”,就是将文件集结成一个文件,事实上并没有提供压缩的功能。将tar和压缩命令结合起来使用实现强大的打包压缩功能。
- compress命令
这是一个非常老旧的命令现在已经很少用了,而且gzip也可以解开compress压缩的文件。但是我们还是来学习一下这个命令的使用。
yum intsall ncompress -y 安装这个命令
compress [-rcv] 文件或者目录
-r : 连同目录下的文件也同时给与压缩
-c : 将压缩数据标准输出(打印屏幕)
-v : 可以显示出压缩后的文件信息以及压缩过程中的一些文件名的变化
可以看到压缩后文件明显变小了,源文件会不见,新压缩文件生成,而且扩展名是.Z,用uncompress再解压就行了,-c这个参数会将压缩过程写入到标准输出,而不是写入成为.Z的压缩文件。所以我们可以通过输出重定向将数据输出成为另一个文件名。
2.gzip与zcat
gzip可以解开compress,zip与gzip等软件所压缩的文件
gzip [-vdtv] 文件名
zcat 文件名.gz
参数:
-c : 将压缩的数据输出到屏幕上,可通过数据流重定向来处理
-d :解压缩的参数
-t :可以用来检验一个压缩文件的一致性,看看文件有无错误
-v :可以显示出原文件/压缩文件的压缩比等信息
-# :压缩等级,-1最快,但是压缩比差,-9最慢,压缩比最好默认是-6
zcat 会将gzip压缩的文件解压之后的内容读出来显示到屏幕上,(cat可以读取纯文本文件,zcat可以读取纯文本被压缩后的压缩文件)
相比compress gzip提供了更好的压缩比,而且gzip也能解压compress压缩的文件,从而取代了compress,使用gzip压缩的文件还可以被windows下的WRAR解压
3 . bzip2,bzcat
这个命令的压缩比要比gzip更好,用法几乎和gzip相同
命令格式:bzip2 [-cdkzv#] 文件名
bzcat 文件名.bz2
参数:
-c : 将压缩的数据输出到屏幕上,可通过数据流重定向来处理
-d : 解压缩的参数
-k : 保留源文件,而不会删除原始的文件
-z :压缩的参数(与-d相对应)
-v : 可以显示出原文件/压缩文件的压缩比等信息
-# : 与gzip一样
bzcat可以将压缩文件的内容读出来,如果我们仅想读取文件的内容,那我们大可不必解压缩,直接用bzcat来查看文件的内容就可以了。
注意:不管是gzip还是bzip2解压都不仅可以使用-d参数还可以使用
gunzip 和bunzip2来进行比如:
4.tar打包
如前所述,打包就是将很多文件整合成一个文件,虽然gzip与bzip2也能对目录进行压缩,但是,这两个命令也只不过是对目录下的所有文件分别进行压缩,而不像在windows下我们可以用WinRAR,7zip等软件将好多文件打包成一个文件。在linux下,我们用tar这个命令可以将多个目录或文件打包成一个大文件,同时支持gzip/bzip2将该文件进行压缩。由于这个命令使用广泛,目前windows的WinRAR也支持tar.gz文件名的解压缩。
tar [-j][-z][cvf] 指定生成的文件名 需要打包压缩的文件名或目录
参数:
-f ##指定生成包的名字
-c ##创建包
-v ##显示创建过程
-t ##查看包中内容
-x ##解包
-r ##添加文件到包中
--delete filename ##删除包中指定文件
--get filename ##取出包中指定文件
示例:
gzip
gzip xxxx.tar ##压缩=====>xxxx.gz
gunzip xxxx.tar.gz ##解压=====>xxxx.tar
tar zcvf xxxx.tar.gz 目标文件 ##打包压缩文件
tar zxvf xxxx.tar.gz ##解包解压缩xxxx.tar.gz===>xxxx
bz2
bzip2 xxxx.tar ##压缩=====>xxxx.bz2
bunzip2 xxxx.tar.bz2 ##解压=====>xxxx.tar
tar jcvf xxxx.tar.bz2 目标文件 ##打包压缩文件
tar jxvf xxxx.tar.bz2 ##解包解压缩xxxx.tar.bz2===>xxxx
xz
xz xxxx.tar ##压缩=====>xxxx.xz
unxz xxxx.tar.xz ##解压=====>xxxx.tar
tar Jcvf xxxx.tar.xz 目标文件 ##打包压缩文件
tar Jxvf xxxx.tar.xz ##解包解压缩xxxx.tar.xz===>xxxx
zip
zip -r xxx.tar.zip ##压缩=====>
unzip xxx.tar.zip ##解压=====>
远程文件传输
1.scp远程复制,scp是基于ssh的登陆进行安全的远程文件拷贝命令。
scp file user@ip:/directory ##上传文件
scp -r dir user@ip:/directory ##上传目录
scp user@ip:/filename /direcotry ##下载文件
scp -r user@ip:/directory /direcotry ##下载目录
2.rsync
是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好.
rsync file|direcotry user@ip:/directory
rsync user@ip:/directory /directory
-r ##同步目录
-l ##不忽略链接 ##新建连接:ln -s 原文件 链接文件
-t ##不忽略时间戳
-p ##不忽略特殊权限
-g ##不忽略组id信息
-o ##不忽略用户id信息
-D ##不忽略设备文件
3.sftp 常用于文件推送
(安全文件传输协议)与ftp 有着几乎一样的语法和功能。但是与lftp不同的是它并不使用ftp的守护进程进行连接。sftp本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作。使用SFTP是非常安全的。但是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多。
sftp root@172.25.20.1:/root/test.sh #直接将172.25.20.1主机上的文件复制到本地
sftp root@172.25.20.1:/root #直接连接到172的root目录下,这样就可以使用getput等命令了