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

简介: [20130110]linux传输文件-tar+nc+各种压缩方式.txt以前在linux下传输文件,特别一些大文件以及很多小文件,我个人经常喜欢tar+nc的传输方式。
[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"


目录
相关文章
|
24天前
|
Linux Shell
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
Linux手动清理Linux脚本日志定时清理日志和log文件执行表达式
78 1
|
27天前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
30 0
|
22天前
|
人工智能 安全 Linux
【Linux】Linux之间如何互传文件(详细讲解)
【Linux】Linux之间如何互传文件(详细讲解)
|
2天前
|
固态存储 Ubuntu Linux
Linux(29) 多线程快速解压缩|删除|监视大型文件
Linux(29) 多线程快速解压缩|删除|监视大型文件
11 1
|
2天前
|
Ubuntu Linux 数据安全/隐私保护
Linux(24) 如何在Ubuntu中操作rootfs.img文件
Linux(24) 如何在Ubuntu中操作rootfs.img文件
3 0
|
7天前
|
安全 Linux 开发工具
Linux中可引起文件时间戳改变的相关命令
【4月更文挑战第12天】Linux中可引起文件时间戳改变的相关命令
14 0
|
8天前
|
Linux Shell 开发工具
Linux文件常用操作
Linux文件常用操作(几乎覆盖所有日常使用)
81 0
|
9天前
|
Linux 内存技术 Perl
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
【ZYNQ】制作从 QSPI Flash 启动 Linux 的启动文件
|
15天前
|
Linux
linux 超过4个G的文件传不上去的解决办法
linux 超过4个G的文件传不上去的解决办法
9 0
|
15天前
|
Linux 索引
linux 文件查找 和文件管理常用命令
linux 文件查找 和文件管理常用命令
22 0