结合使用netcat和tar
Netcat被称为Linux上的瑞士军刀,这意味着可以使用它做很多事情。您可以用netcat在一台计算机上开启一个端口,并通过那个端口以管 道的形式从另一台计算机获取数据。例如,像下面结合netcat和tar的例子命令所示,您可以轻松地拷贝一个目录的内容。在接收端的计算机上,启动一个 netcat监听进程。下面的命令告诉netcat监听端口1968,并将从该端口接收的数据管道传送给tar x命令,以便从归档文件中解出文件。
netcat -l -p 1968 | tar x
连接的另一端是netcat接收者。在这个例子中,它是一个创建归档文件并通过netcat管道传送给目标主机的命令:
tar c . | netcat 10.0.0.10 1968
这个命令的第一部分对当前目录的内容开启了一个tar归档任务,第二部分则将结果发送到在主机10.0.0.10端口1968上监听的netcat。
结合使用tee和netcat命令实现组播
您已经看到,netcat是将文件从一台计算机传送到另一台计算的一个简单方法。但这个方法存在一个缺点,该命令不支持组播。也就是说您不可以在多 台计算机上开启netcat作为监听者,并让一台计算机将数据发送到组播端口。但是,您可以使用工作区并在一个netcat链里连接多台计算机。我们假设 有10台计算机。您想要将10.0.0.10上的一些iso文件通过网络发布到IP地址为10.0.0.11到10.0.0.20的主机上。首先,您需要 在所有的计算机上准备一个netcat会话,然后在存有iso文件的计算机上执行下面的命令:
tar c . | netcat 10.0.0.11 1968
这个命令将归档的tar文件发送到10.0.0.11。这时,在10.0.0.11上需要有一个netcat进程来等待传入的数据,并从tar管道 中解出数据。与此同时,如果还需要将数据发送到另一台计算机,您可以使用tee命令。使用tee命令,您可以在一个管道的输出上再执行两个命令。如下面的 命令所示:
netcat -l -p 1968 | tee > (tar x) | netcat 10.0.0.12 1968
正如您所看到的,通过tee命令和输出重定向,数据被发送到tar x以被解出。同时,会发送数据到IP地址为10.0.0.12的计算机,该计算机上必须有一个netcat进程在监听端口1968。从而,在那台计算机上,也有一个netcast进程在等待传入的数据。
netcat -l -p 1968 | tee (tar x) | netcat 10.0.0.13 1968
在netcat链上一直重复执行这个过程,直到最后一台IP地址为10.0.0.20的计算机。在这台计算机上,您只要有netcat监听传入的数据并直接将数据发送到tar进程。因此,在10.0.0.20上,执行下面的命令进行等待:
netcat -l -p 1968 | tar x
您必须从10.0.0.20上的监听器开始,启动这个类似于序列的组播,然后,在10.0.0.19上输入命令,并一直往前到10.0.0.10上 的netcat发送者。您会看到文件很快地被拷贝到链上的所有机器里。但是,这只是一个测试。一旦确认在您的Linux上有效,您就可以正式进行工作,并 用这个方法将一个镜像分发到多台计算机上。
刚才尝试了一下使用tar分发一些测试用的驱动器文件。其实,这个过程也可以通过dd命令来完 成,该命令可以克隆整个硬盘驱动器。首先,考虑下面的命令:
/z|\X
r;D%X0IXPUB技术博客
i3w"X-K:e
dd if=/dev/sda f=/dev/sdb bs=4096IXPUB技术博客0X g/e.f Ns4VW#P
IXPUB技术博客�~[1]N8ZZ0}[1]}B2J2p"W
通过这个命令,可以逐块的将整个/dev/sda磁盘拷贝到/dev/sdb。例如,如果/dev/sdb是连接到您计算机的一个USB硬盘驱动器,当 命令执行完成以后,就会得到原始硬盘驱动器的一个一对一的拷贝。请尝试着做一下并确保已经理解了该过程,然后,再进入下一步。
bVA,S1?X)DJ8W0IXPUB技术博客&p5[4r$G~
任何您可以通过本地硬盘驱动器做的都可以通过网络来做。也就是说可以将连接到 10.0.0.10的硬盘驱动器/dev/sdb克隆到10.0.0.11上的/dev/sda,方法是结合使用dd和netcat命令。但是:要确保该 过程有效,必须从live CD启动这两台计算机,以便没有在本地硬盘上使用任何文件。如果两台计算机都已经从live CD启动,那么启动10.0.0.11上的监听进程:
v9R0L*T‑B-?4r�T5u/}0IXPUB技术博客}.h[1]e\ K:Y1S&v
netcat -l -p 1968 | dd f=/dev/sdaIXPUB技术博客
NF5p
W[1]A7y6`N
IXPUB技术博客7h4XA‑G
J)o然后在10.0.0.10上启动发送进程:IXPUB技术博客\&Yu7y?W n!z
IXPUB技术博客-~/E;]4a8}8o
dd if=/dev/sdb | netcat 10.0.0.11 1968
5t/S3j8oq3\)[A0IXPUB技术博客9OD5L9Q~
在验证其有效后,您可以从范围内的最后一台计算机(10.0.0.20)开始创建一个netcat-dd链。IXPUB技术博客{.d(k Y‑X5m
IXPUB技术博客1VYJ"M
b;aC
netcat -l -p 1968 | dd f=/dev/sda
%V-v*ujoNX:s0
M"@m D/[ z[0 接着,在10.0.0.19上,启动下面的命令:
/_h!b DF0
p'HJ(m}�kr p
?‑j-H0 netcat -l -p 1968 | tee > (dd f=/dev/sda) | netcat 10.0.0.20 1968
K#u jm+?
g8Ps!Ym0r:Uf0DGFoO3u0 在10.0.0.18上,输入的命令为:IXPUB技术博客B Wf6}3I6w`Go:O
T5fiv‑X[0 netcat -l -p 1968 | tee > (dd f=/dev/sda) | netcat 10.0.0.19 1968IXPUB技术博客V.g;b#Wz
IXPUB技术博客!R&A_)Sziol(k
照此继续下去,直到已经启动触发netcat进程的第一台计算机:
s |7b0B9kx K0d0IXPUB技术博客.t^&Zz `K;x.Y+_
dd if=/dev/sdb | netcat 10.0.0.11 1968
IXPUB技术博客 Vx,Mo:fKA
IXPUB技术博客P'S#Nb#Nz5w/^5b
当这些都完成后,您就已经将一个硬盘驱动克隆到了网络上的多台计算机。
|%h4s1aD2y{K0IXPUB技术博客%lX1I-o6t5r
使用netcat将Linux硬盘驱动器通过网络克隆到多台计算机是一个很好的方 法。不过,如果您需要频繁地进行此类工作,您就应该考虑其它的解决方案。比如说Clonezilla。但是和使用 netcat的方法不同的是,那个工具需要您建立一台服务器。