星期二, 十二月 12, 2006

Unix/Linux间数据的传输

http://www-128.ibm.com/developerworks/aix/library/au-speakingunix5.html
Speaking UNIX, Part 5: Data, data everywhere
Move and manage files stored across multiple systems

主要是讲如何在unix服务器之间传递数据。偶看了之后总结了一下,写了个中文版的。
习惯看英文的还是看原文会好些。

1.tar + ssh

(cd /mydir && tar czf - .) | ssh user@dest "(cd /destdir && tar xzvf
-)"

说明:&& 表示如果前一个命令成功则进行后一个命令(if true then do)
- 在tar命令后面表示标准输入输出。此例中第一个"-"表示tar的输出(压缩的包)不是写到磁盘文件,而是输出到标准输出。第二个"-"则表示tar的输入(需要解压的包)不是来自磁盘文件,而是来自标准输入
()这里的括号,表示是一个subshell。在subshell做的一些操作不影响整个命令的执行,比如cd到/mydir,只是子Shell的一个操作。

从远端拿回来
ssh user@dest "(cd /destdir && tar czf -)"|(cd /mydir && tar xzvf - .)

2.scp

scp -pr /localdir dest:/destdir

说明:-p表示保留所有的文件属性不变
-r表示递归,拷贝整个目录(否则会略过目录)

也可以从远端拿回来
scp -pr dest:/destdir /localdir

3.rsync + ssh

rsync -e ssh -avzP --exclude "logs/" --delete /localdir/ dest:/destdir/

说明:-e ssh 表示通过ssh传送
-a表示achive模式,保持所有的属性不变
-z表示传输过程中压缩

--exclude 不同步此目录
--delete 在远端删除本地已经删除的文件

rsync只会传输改变了的文件,是同步服务器很好的工具。
另外也可以从远端拿目录到本地

rsync -av dest:/destdir/ /localdir

需要注意它的本地目录和远端目录的格式:
rsync -av /src/foo/ /dest
最后一个"/"表示把/src/foo目录下的所有内容拷贝到/dest目录
rsync -av /src/foo /dest
表示把/src/foo这个目录拷贝到/dest目录下

没有评论: