Pour débuter
Outils de base
VIM
06 min
SSH
14 min
rsync
20 min
Shell fish
13 min
Serveur HTTP
Apache
40 min
Nginx
30 min
PHP
NodeJS
Base de données
MySQL
15 min
Redis
08 min
Emails
HTTPS
FTP
ProFTPD
14 min
Sécurité
Pour le confort
Déploiement

rsync est un outil de copie de fichiers très polyvalent. Il est surtout connu pour sa capacité à copier des fichiers depuis, ou vers, un shell distant mais aussi pour son algorithme de comparaison qui permet de ne transférer que les fichiers modifiés.

Utilisation de base

La commande s'utilise très simplement avec une signature proche de la commande cp.

rsync -av SOURCE DEST

La drapeau -a ou --archive est un racourci vers les drapeaux -rlptgoD, et correspond souvent à ce que l'on souhaite faire avec rsync :

  • -r pour une copie récursive (dossiers)
  • -l copie les liens symboliques.
  • -p conserve les permissions.
  • -t conserve les date de modifications (nécessaire au bon fonctionnement de l'algorythme de différence).
  • -g conserve le groupe auquel appartient le fichier.
  • -o conserve le propriétaire auquel appartient le fichier.
  • -D préserve les fichiers spéciaux et les fichier devices.

Le drapeau -v permet simplement une sortie plus "verbeuse" qui permettra de mieux comprendre les opérations effectuées par rsync.

En revanche, il faudra faire attention à votre manière d'écrire le chemin source. Si ce chemin finit par un / les fichiers (et les dossiers) à l'intérieur de la source seront copiés, sinon le dossier sera copié à l'intérieur du dossier de destination. Le drapeau -n ou --dry-run peut vous permettre de "simuler" les opérations faites par rsync et de vous assurer de ne pas faire de bétises. La commande peut aussi être utilisée pour une copie vers un dossier distant.

rsync -av ./MonApplication demo@domain.com:~/MonSite
# Ou dans le cas d'un port ssh non standart
rsync -av ./MonApplication -e 'ssh -p 3333' demo@domain.com:~/MonSite

En revanche, si un fichier n'est pas présent dans le dossier source, il ne sera pas supprimé sur le dossier distant. Si vous souhaitez obtenir ce comportement il vous faudra utiliser le drapeau --delete (je vous conseille alors de faire un --dry-run afin de vous assurer de l'étendu de la suppression).

Exclure des fichiers

Si vous souhaitez déployer (ou sauvegarder) une application web avec rsync il est possible de spécifier les fichiers à exclure via le drapeau --exclude.

rsync -a --exclude=*.sql --exclude=.env --exclude=.git ./MonApplication demo@domain.com:~/MonSite

Inversement, le drapeau --include vous permet de réinclure des fichiers que vous auriez exclue préalablement. Vous pouvez aussi utiliser des fichiers pour lister ces éléments à l'aide des drapeaux --include-from et --exclude-from.

Compresser ou non ?

Si vous copiez des fichiers assez important il peut être intéréssant de les compresser afin de les alléger pour le transfert avec -z. En revanche, cette opération a un coût au niveau des performances pour la machine source qui devra compresser les fichiers, et la machine cible qui devra les décompresser. Si vous ne copiez pas de fichiers volumineux ou que vous copier une archive déjà compressée ce drapeau peut être omit.

Enfin, toujours dans le cas de fichiers volumineux vous pouvez utiliser le drapeau -P qui est un racourci vers --progress et --partials.