I am sure at some point you have wanted to back things (Data) up or at least wanted to move things properly from one place to another. There are a few ways to do this, you can use a multitude of tools online or you can use rsync which is what most of those tools is based on. Rsync is a super lightweight and quick tool that I feel people should know how to use. The tool is also super easy to script and put into cronjobs so that your data can be easily transfered or backed up regularly
One of rsyncs uses is to use it locally meaning, using it to move data from one location on a drive to another, or from one drive to another. An example of the command can be seen below. This is just one example and there are quite a few additions or subtractions that can be made to the command, however, this is a basic one that gets the job done and explains the process. The -a flag is for archive, which recursively copies directories and preserves metadata on files/the data (Owner, permissions, timestamps, systemlinks, and more). The -v is verbose which tells you what is happening during the execution of the command. --partial keeps partially transfered files in case the transfer is interrupted, which means if it is started later you are not starting from scratch. --inplace writes directly to the destination files instead of creating temporary files.
rsync -av --partial --inplace --progress /path/to/source/ /path/to/destination/
Rsync can also be used in conjunction with ssh, which is great for your offsite backups. Again, a basic command is below with most the flags being the same. The -e ssh means that the connection with be handled/authenticated/encrypted by ssh. The user@x.x.x.x:/path/to/destination/ is taking the ssh user on the x.x.x.x (ip address/target computer) and then putting it into that systems target directory
rsync -av -e ssh --partial --inplace --progress /path/to/source/ user@x.x.x.x:/path/to/destination/
You can also run these commands to output to a log file so that if you need a history of the backups, you have it. An example is below. The >> means that the output of the command is being appended to the file afterwords. You can make it a whole script that adds timestamps and such if needed
rsync -av --partial --inplace --progress /path/to/source/ /path/to/destination/ >> /path/to/log
date >> /path/to/log
rsync -av --partial --inplace --progress /path/to/source/ /path/to/destination/ >> /path/to/log