Copyright 2018 Brian Davis - CC-BY-NC-SA

There are several protocols that I use to copy data between machines. The first is the simplest to setup: SSH. SSH comes preinstalled with most Linux distributions, although you sometimes have to install the server component. It allows shell access and file transfer.

ssh username@host
scp file username@host:/path/to/destination


Samba is the Linux server that is compatable with Windows File Sharing. You can setup a samba server to share a folder in your Linux system with your other Linux or Windows computers.

First install the packages: samba, samba-client, and cifs-utils. Then add the following section to the end of /etc/samba/smb.conf

   comment = Shared Files
   path = /home/share
   browseable = yes
   read only = no
   guest ok = no
   valid users = filesharer

Alternatively setup [homes] to only read/write access and change the path with something like

path = /home/data/%S

List shares

smbclient -L \\hostname
smbclient -L \\IP

Mount a share

sudo mount -t cifs //host/share /mnt/dest -o user=username

A possible fstab entry (UNTESTED)

// /mnt/Files cifs auto,x-systemd.automount,cache=none,rsize=130048,wsize=57344,users,username=brian,password={mypassword},workgroup=WORKGROUP,ip= 0 0

Note: If you are mounting a homes share you refer to it as //host/username.

Note on Users: Samba has it's own user/password database that must mirror the unix passwd.

sudo smbpasswd -a <username>


Webdav is a filesharing protocol that uses HTTP. You setup an apache webserver and then configure it for webdav.



Rsync is the utility that most people use to synchronize lots of files between Linux computers. There is such a thing as an rsync server but my normal use case is to mount a remote filesystem (using fuse if necessary) and then use rsync on the local machine between the two filesystems. Once gotcha is the path name syntax. To sync a local folder blob to a remote folde /mnt/foo/blob you want to make sure you use the trailing slash on the source but not the destination.

rsync -r blob/ /mnt/foo/blob

# --delete will remove files on the receiver that do not exist locally
# -a = recursive and preserve permissions/modification times
# -P = allow resume of partials
# --modify-window=2 helps with ntfs timestamp issues
# -u skips newer files on the receiver
rsync -auPv --modify-window=2 --delete ~/me/cur/ ~/h/cur