最佳搭档:tar 和 ssh
最佳搭档彼此相互补充,对于整体而言,搭档的每个成员具有独特和不可替代的作用。但是有些搭档非常奇怪。下面要介绍的这对就是今年最佳搭档的典范:tar
和 ssh
指令。是的没错,tar
和 ssh
命令以十分有趣的方式协作,尤其是用于 Standard I/O(STDIO),即 标准流 时。
ssh
ssh
指令是一种通过终端模拟器允许用户登录到远程计算机进行shell会话并运行指令的安全而复杂的方式。因此我可以登录到远程计算机,在远程计算机上运行ls
指令。结果显示在本地主机的ssh终端模拟器窗口。指令的标准输出(STDOUT)显示在终端窗口,但是数据还在远程主机上,因此不能被本地主机直接使用。
这些都不足为奇,每个人都这样使用。但是接下来的会更有趣。我可以像下面这样,在远程计算机上只运行一条指令并且结果显示在本地主机,而不需要在远程计算机上维护一个终端会话同时运行多条指令。这里假设SSH公钥和私钥(PPKP)已经在使用,我不需要每在远程主机上发布一条指令就输入一次密码:
ssh remotehost ls
因此现在我可以使用本地主机上指令执行的结果,因为标准输出数据流通过SSH通道传输到了本地主机。好,但是这意味着什么呢?
回答这个问题之前,让我们先看看tar
指令。
tar
tar
指令用于备份。tar
是Tape Archive(磁盘归档)的缩写,但是这个指令能被用于任何类型的记录介质如磁带、硬盘和优盘等。下面这条指令可以在本地主机上创建/home目录的备份:
tar -cvf /tmp/home.tar /home
这条指令在 /tmp
目录下创建了一个名称为 home.tar
的压缩文件。这个文件是 home
目录下所有文件的备份。很好,但是这些也不是很有趣,因为很常用。
虽然很多人没有意识到,但是有趣的是,如果不使用-f
选项指定目标输出文件,tar
指令的输出直接传输到STDOUT:
tar -cv /home
这意味着,tar
指令的完整输出,即备份好的文件被传输给终端,这开创了一些有趣的可能性,例如重定向STDOUT数据流到备份文件。看起来像下面这条指令:
tar -cv /home > /tmp/home.tar
这条指令和第一条tar
指令具有相同的功能,只是用了一种有点不同且更有意思的方式。
神奇的搭档
我们可以使用类似如下指令备份远程主机的home
目录到远程主机的/tmp
目录:
ssh remotehost “tar -cvf /tmp/home.tar /home"
注意在远程主机执行的指令用引号引起来,确保正确的指令在远端执行;这样做对于shell终端和人类来说都很明朗。对这条指令稍做修改,我们将tar
指令的输出重定向到远程主机的/tmp目录:
ssh remotehost “tar -cv /home > /tmp/home.tar"
这条指令和上一条指令作用一样。这种情况下,tar
指令的STDOUT数据流完全在远程主机维护,然后重定向到备份文件。然而下面这条指令开创了很多新的可能性。你知道它都干了什么吗?
ssh remotehost “tar -cv /home” > /tmp/home.tar
这种情况下,tar
指令的 STDOUT 数据流通过SSH连接发送到本地主机。然后数据流重定向到本地主机的/tmp/home.tar
备份文件。仅仅将引号移到左边,新的指令就可以备份远程主机的文件到本地主机。
我每天都使用这对年度搭档完成备份。我写了一个用ssh
和tar
指令,还有SSH公钥加密的脚本,来完成远程主机到本地外部USB硬盘的备份操作。这两个指令简化了很多必不可少的操作,更为重要的是,它们是免费的开源软件。
所以让我们用掌声欢迎今年的开源社区最佳搭档:tar和ssh。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
上一篇: OwnCloud 的六种创意玩法
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论