[20130110]linux传输文件-tar+nc+各种压缩方式.txt

[20130110]linux传输文件-tar+nc+各种压缩方式.txt

以前在linux下传输文件,特别一些大文件以及很多小文件,我个人经常喜欢tar+nc的传输方式。

实际上很简单:

在A机器上执行:
tar -cvzf - /data/orcl/users01.dbf | nc -l 55555

在B机器上执行:
nc A_IP 55555 | tar xvzf - -C /tmp

--注意:-czf 后面有一个-,我曾经忘记写,导致1个文件破坏(切记!!!)。这样解压在B机器的/tmp目录。
--也可以使用j参数替换z,这样解压缩采用bzip2.
--另外注意端口不要冲突(也就是没有别的应用软件不使用该端口)。

在A机器上执行:
tar -cvjf - /data/orcl.0000/users01.dbf | nc -l 55555

在B机器上执行:
nc A_IP 55555 | tar xvjf - -C /tmp

-- tar也可以指定别的压缩程序(有一些新版本还支持lzop压缩,我的测试centos 6.2)
-- -I, --use-compress-program=PROG
-- 使用lzop可以直接使用参数--lzop(好像一些版本没有这个参数)

-- 另外注意一点gzip等压缩工具,都是单线程的。如果压缩并行,可以提高效率,找到pigz可以实现。
-- 我下载的rpm包。 http://pkgs.repoforge.org/pigz/

tar -cvf - /tmp/data/orcl_20121108.bak/users01.dbf | pv -s `du -sb /tmp/data/orcl_20121108.bak/users01.dbf | awk '{s += $1} END {print s}'` | pigz   |nc -l 55555
解压:
nc A_IP 55555 | tar xvf - -C /tmp -I pigz

--为了获得良好的显示效果以及测试相关数据,必须安装pv软件包。执行如下:
tar -cvf - /tmp/data/orcl_20121108.bak/users01.dbf | pv -s `du -sb /tmp/data/orcl_20121108.bak/users01.dbf | awk '{s += $1} END {print s}'` | gzip   |nc -l 55555
tar -cvf - /tmp/data/orcl_20121108.bak/users01.dbf | pv -s `du -sb /tmp/data/orcl_20121108.bak/users01.dbf | awk '{s += $1} END {print s}'` | bzip2  |nc -l 55555
tar -cvf - /tmp/data/orcl_20121108.bak/users01.dbf | pv -s `du -sb /tmp/data/orcl_20121108.bak/users01.dbf | awk '{s += $1} END {print s}'` | lzop   |nc -l 55555
tar -cvf - /tmp/data/orcl_20121108.bak/users01.dbf | pv -s `du -sb /tmp/data/orcl_20121108.bak/users01.dbf | awk '{s += $1} END {print s}'` | pigz   |nc -l 55555

--我的测试结果:[不是太精确,我仅仅做2次每种压缩方式]
gzip   1.43GB 0:00:44 [32.6MB/s]
bzip2  1.43GB 0:02:52 [8.47MB/s]
lzop   1.43GB 0:00:25 [57.1MB/s]
pigz   1.43GB 0:00:10 [ 142MB/s]

-- 很明显bzip2很慢,而pigz最好[注意:也许服务器其他应用会受很大影响],我自己一直以为lzop感觉不明显,实际上效果也不错。

--这样传输文件还有一个缺点,要在两个机器上执行相关命令,参考:
http://intermediatesql.com/wp-content/uploads/2012/05/ncp.txt
http://intermediatesql.com/linux/scrap-the-scp-how-to-copy-data-fast-using-pigz-and-nc/

#! /bin/bash

FILE_FULL=$1
REMOTE_HOST=$2

FILE_DIR=$(dirname $FILE_FULL)
FILE_NAME=$(basename $FILE_FULL)
LOCALHOST=$(hostname)

ZIP_TOOL=pigz
NC_PORT=8888

tar -cf - -C $FILE_DIR $FILE_NAME | pv -s `du -sb $FILE_FULL | awk '{s += $1} END {printf "%d", s}'` | $ZIP_TOOL | nc -l $NC_PORT &
ssh $REMOTE_HOST "nc $LOCALHOST $NC_PORT | $ZIP_TOOL -d | tar xf - -C $FILE_DIR"

--写这样一个shell脚本,命名ncp! ,执行如下:
ncp! /tmp/data/orcl_20121108.bak/users01.dbf remote_host
-- 注意一点:脚本使用覆盖方式,远端的文件[相同路径的文件将会覆盖,并且这个目录要存在,不然会报错]将会覆盖!使用要注意这点。
-- 而且我做了一些修改.而且主机名必须存在/etc/hosts文件中,总之写的不是太严谨,谨慎使用!
-- 如果有错,可能要杀一些后台进程。

我做一点小修改:

#! /bin/bash

FILE_FULL=$1
REMOTE_HOST=$2

FILE_DIR=$(dirname $FILE_FULL)
FILE_NAME=$(basename $FILE_FULL)
LOCALHOST=$(hostname)

ZIP_TOOL=pigz
NC_PORT=55555

tar -cf - -C $FILE_DIR $FILE_NAME | pv -s `du -sb $FILE_FULL | awk '{s += $1} END {printf "%d", s}'` | $ZIP_TOOL | nc -l $NC_PORT &
ssh $REMOTE_HOST "mkdir -p $FILE_DIR; [-e $FILE_FULL ] || nc $LOCALHOST $NC_PORT | $ZIP_TOOL -d | tar xvf - -C $FILE_DIR"

时间: 2024-09-20 07:44:12

[20130110]linux传输文件-tar+nc+各种压缩方式.txt的相关文章

C#用SFTP向Linux传输文件

问题描述 用了这个地址的方法http://www.cnblogs.com/binw/p/4065642.html但是连接时就报错,这是错误:Session.connect:System.IO.FileNotFoundException:未能加载文件或程序集"DiffieHellman,Version=0.0.0.0,Culture=neutral,PublicKeyToken=893fce744c3d0315"或它的某一个依赖项.系统找不到指定的文件.各位如果知道怎样实现这一功能的话麻

Linux的文件压缩——tar和zip命令

今天因为准备远程压缩个文件,结果用tar命令失败了好几次.看来命令还是常用才熟悉啊. tar命令: 简介:tar命令只是把目录打包成一个归档(文件),并不负责压缩.在tar命令中可以带参数调用gzip或bzip2压缩.因为gzip和bzip2只能压缩单个文件. 在linux下是不需要后缀名的,但通常tar归档后缀名为.tar,gzip压缩后的后缀名为.gz,bzip2压缩后的后缀名为.bz2. 命令用法: tar [参数]  [文件或目录] 1 #比如把x文件夹打包并用gzip压缩. 2 tar

利用tar或dd在不同操作系统间传输文件的新方法

在不同操作系统之间进行文件传送的方式有很多种.如果网络可通,可以使用FTP.SFTP.NFS.SAMBA(CIFS).HTTP等方式进行传输:如果网络不通,则可以使用两个操作系统之间共同支持的文件系统进行传输,比如软盘.光盘或最常用的FAT文件系统等:还可以使用两个操作系统共同支持的备份设备进行传输,比如磁带备份(严格讲,也是基于共同支持的依赖于硬件的文件系统). 可现在我遇到的一个XENIX系统就麻烦得多了:网络不工作(可能是我不会,呵呵),mkdev dos也不支持,试图mount一个msd

linux使用scp实现服务器A向服务器B传输文件_Linux

scp是有Security的文件copy,基于ssh登录.操作起来比较方便,比如要把当前一个文件copy到远程另外一台主机上,可以如下命令. 复制代码 代码如下: scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root 然后会提示你输入另外那台172.19.2.75主机的root用户的登录密码,接着就开始copy了. 如果想反过来操作,把文件从远程主机copy到当前系统,也很简单. 复制代码 代码如下: scp root@172.19.2.

如何在linux主机和windows主机之间传输文件

首先下载pytty,解压开发现里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可执行文件,如果只是想要链接主机做一些操作那么使用putty.exe就可一,具体使用可以参见上面给出的链接,要想要上传下载文件,那么需要使用pscp.exe这个文件. 下面讲解使用pscp命令在Linux和Windows之间传输文件. 通过命令行进入pscp.exe所在的文件夹,直接输入pscp会看到如下提示: PS:推荐像我一样将

Linux中文件的压缩与解压缩命令操作示例集锦

  所谓压缩就是将原有的文件通过不同的编码技术进行运算,以减少数据存储所需要的空间,使用前再利用解压缩还原源文件的内容即可. 和windows一样,在linux下也存在多种压缩与解压缩方法. 1.zip压缩与解压缩 zip是最为广泛使用的压缩程序,经它压缩的文件会产生扩展名为zip的压缩文件,而且这种格式在多种系统上可以使用,像windows中的winzip 下面看一下在linux中如何建立zip文件. 我们在终端中输入zip会出现这个命令的一些介绍和参数的意义. 代码如下: xiaopeng@

嵌入式arm linux蓝牙文件传输移植

嵌入式arm linux蓝牙文件传输移植目前,蓝牙技术已经比较成熟,特别是基于手机和PC得蓝牙文件传输. 本文主要讲述基于嵌入式arm linux的蓝牙文件传输.    现行2.6.x的linux内核都已经集成了bluez蓝牙驱动,对于2.4版本内核的需要到bluez官方网站下载并安装bluez蓝牙驱动.http://www.bluez.org/download/    本为基于2.6版本的内核讲述.对于2.4下载bluez后安装即可.有了bluez蓝牙驱动还需要安装bluez-libs库和bl

linux之间copy传输文件方法

不同的Linux之间copy文件通常有4种方法 1.ftp 2.samba服务 3.sftp 4.scp 前三种方法都比较繁琐,最简单的方法就是scp 命令scp 介绍 scp 本地用户名@IP地址:文件名1 远程用户名@IP地址:文件名2 [本地用户名@IP地址:] 可以不输入,可能需要输入远程用户名所对应的密码. 可能有用的几个参数: -v 和大多数linux命令中的-v意思一样,用来显示进度.可以用来查看连接,认证,或是配置错误. -C 使能压缩选项. -P 选择端口.注意-p已经被rcp

ARM 开发板嵌入式linux系统与主机PC通过串口传输文件

本文转载自http://useless20.blog.163.com/blog/static/237409982010227127576/ 嵌入式linux系统与主机通过串口传输文件      我想如果要从PC机下载东西到开发板的嵌入式linux系统里面,很多人首先会想到用tftp sftp等网络工具从网口下载.但如果网络用不了,只能通过串口下载怎么办呢?这个时候有两个工具能帮到你:一个是zmrx.zmtx,另外一个是lsz.lrz.个人觉得zmrx/zmtx没有lsz/lrz稳定,建议还是用后