nc stands for Netcat and often point out as “Swiss Army knife” is a networking tool used for network debugging and investigation and also it is used for creating network connections using TCP or UDP, port scanning, file transfer and more. It is created to be a dependable back-end and specially used in programs and scripts, since it can generate almost any kind of network connection and has a number of built-in features.
pv in short Pipe Viewer is a terminal based tool for monitoring progress of data send through a pipeline, it allows a user to see the progress of data with progress bar, shows time elapsed, percentage completed, current throughput rate, total data transferred, and Estimated Time to complete the process.
Let’s now move further and see how we can combine both commands to transfer files between two Linux computers, for the purpose of this article we will be using two Linux machines as follows:
Machine A with IP : 192.168.0.4 Machine B with IP : 192.168.0.7
I strongly advise not to use netcat to send and receive data over the pubic network, as it doesn’t use any logins or authentication.
Now let’s start with some real easy example of nc and pv commands, but before doing that both utilities must installed on the system, if not install them using your respective distribution package manager tool as suggested:
# yum install netcat pv [On RedHat based systems] # dnf install netcat pv [On Fedora 22+ versions] # apt-get install netcat pv [On Debian and its derivatives]
How to Transfer Files Between Two Linux Machines?
Let’s assume that you want to send one large file called CentOS-7-x86_64-DVD-1503.iso from computer A to B over the network, the quickest way to achieve this using nc a network utility used to send files over TCP network, pv to monitor the progress of data and tar utility to compress data to improve transfer speed.
On Linux Machine A
First login into the machine ‘A‘ with IP address 192.168.0.4 and run the following command.
# tar -zcf - CentOS-7-x86_64-DVD-1503.iso | pv | nc -l -p 5555 -q 5
Let me explain the options used in the above command:
tar -zcf = tar is a tape archive utility used to compress/uncompress archive files and arguments -c creates a new .tar archive file, -f specify type of the archive file and -z filter archive through gzip.
CentOS-7-x86_64-DVD-1503.iso = Specify the file name to send over the network, it can be file or path to a directory.
pv = Pipe Viewer to monitor progress of data.
nc -l -p 5555 -q 5 = Networking tool used for send and receive data over tcp and arguments -l used to listen for an incoming connection, -p 555 specifies the source port to use and -q 5 waits the number of seconds and then quit.
On Linux Machine B
Now login into machine ‘B‘ with IP address 192.168.0.7 and run the following command.
# nc 192.168.1.4 5555 | pv | tar -zxf -