Comment transférer des fichiers entre systèmes à l'aide de scp et rsync
Sommaire
Points clés à retenir
- scp et rsync peuvent transférer des fichiers en toute sécurité, mais rsync est meilleur pour les transferts régulièrement planifiés et la gestion des problèmes de réseau.
- Utilisez scp pour les transferts de fichiers manuels ; rsync est plus adapté aux scripts et aux tâches cron avec des options avancées telles que la compression.
- Les deux nécessitent SSH pour la sécurité, mais rsync doit également être installé sur les deux ordinateurs pour être utilisé.
Il existe de nombreux outils pour transférer des fichiers entre deux ordinateurs sur la ligne de commande Linux, mais les commandes scp et rsync couvriront presque tous les cas d'utilisation. Voici comment et quand les utiliser.
Quelle est la différence entre scp et rsync ?
Les commandes scp et rsync déplacent des fichiers entre deux ordinateurs, et les deux pourront le faire de manière très sécurisée. La principale différence entre les deux commandes ne réside pas dans ce qu’elles font, mais plutôt dans la manière dont elles le font.
La commande scp signifie « copie sécurisée » et, à bien des égards, elle fonctionne comme la commande standard unix cp ou « copie », mais entre deux ordinateurs. Le « sécurisé » dans le nom dans ce cas fait référence à SSH, le protocole qu'il utilise pour communiquer avec l'ordinateur distant.
Cette commande est aussi simple qu'elle en a l'air : elle lit des fichiers d'un ordinateur et les écrit sur un autre. Cette simplicité correspond bien à la philosophie UNIX de « bien faire une chose ».
La commande rsync fait également une chose bien, mais elle adopte une approche plus nuancée. La différence réside dans le nom. Alors que rsync copiera un fichier sur un autre ordinateur si ce fichier n'est pas déjà présent, toute opération future comparera uniquement les différences entre les fichiers de chaque ordinateur.
Si vous ne déplacez qu’un seul petit fichier, cette différence ne sera pas très visible. Cela dit, si vous utilisez rsync dans le cadre d'un script de sauvegarde, opérer uniquement sur les fichiers modifiés peut économiser beaucoup de temps et de bande passante. Bien entendu, cela nécessite que rsync soit installé à la fois sur l'ordinateur local et distant, tandis que la commande scp ne doit être installée que sur l'ordinateur exécutant la commande.
Ce n'est pas la seule différence. La commande rsync est également un peu plus résiliente et peut rétablir une connexion si elle s'interrompt au milieu d'un transfert. Combiné à la possibilité de transférer uniquement les différences, cela le rend bien mieux adapté aux transferts plus importants.
Cela dit, rsync présente également des similitudes avec scp. Par exemple, il peut également se connecter via SSH et vous pouvez utiliser une clé SSH pour vous connecter à une machine distante avec l'une ou l'autre commande.
Comment transférer des fichiers avec scp
Utiliser l'outil scp pour déplacer des fichiers uniques entre ordinateurs est simple. La commande peut être aussi basique que la suivante :
scp username@remotehost:/path/to/directory
Pour copier le fichier « foo.txt » sur un ordinateur distant, vous pouvez utiliser la commande ci-dessous :
scp foo.txt kris@some-computer:/home/kris/
Pour utiliser la commande scp pour copier ce fichier sur mon propre ordinateur (pour une raison quelconque), je pourrais utiliser ce qui suit :
scp kris@some-computer:/home/kris/foo.txt
Bien entendu, dans de nombreux cas, vous souhaiterez déplacer des répertoires entiers de fichiers entre ordinateurs. Heureusement, c'est aussi simple avec scp qu'avec la commande cp standard. Passez simplement l'indicateur -r pour copier un répertoire de manière récursive :
scp -r dotfiles kris@some-computer:/home/kris/
Ou pour copier un répertoire de manière récursive depuis un ordinateur distant, utilisez ce qui suit :
scp -r kris@some-computer:/home/kris/dotfiles
Pour des informations plus détaillées sur tout ce que vous pouvez faire avec cette commande, consultez notre guide d'utilisation de la commande scp sous Linux.
Comment transférer des fichiers avec rsync
Bien que rsync intègre de nombreuses fonctionnalités, il rend la gestion des transferts de base assez simple. La commande de base pour copier un fichier sur un ordinateur distant est la suivante :
rsync <local-filename> user@remotehost:<remote-filename>
Donc, pour copier le même fichier « foo.txt » de l'exemple scp ci-dessus, vous utiliserez la commande suivante :
rsync foo.txt kris@some-computer:foo.txt
En arrière-plan, rsync essaiera d'utiliser une connexion SSH et vous demandera votre nom d'utilisateur et votre mot de passe. Une fois authentifié, le transfert commencera.
À l’inverse, recopier le fichier sur votre ordinateur local est tout aussi simple :
rsync kris@some-computer:/home/kris/foo.txt .
Bien entendu, fonctionner de cette manière ne permet pas vraiment de tirer pleinement parti de la puissance de rsync et de ses différentes options. Bien que rsync dispose de nombreux indicateurs pour définir diverses options, celui auquel vous devrez vous habituer est l'indicateur -a ou « –archive ». Cela combine quelques options qui, entre autres choses, amènent rsync à analyser de manière récursive les répertoires, à préserver la propriété et les autorisations et à copier les liens symboliques en tant que liens symboliques.
Étant donné les cas d'utilisation pour lesquels rsync est généralement déployé, il est logique de regrouper ces options dans un seul indicateur facile d'accès. Pour la grande majorité de votre utilisation de rsync, vous souhaiterez probablement utiliser l'indicateur -a. Par exemple, pour synchroniser un répertoire avec un ordinateur distant :
rsync -av ~/dotfiles kris@some-computer:/home/kris/dotfiles
Le deuxième indicateur de la commande ci-dessus est « -v » pour « –verbose », ce qui vous donnera un résultat plus détaillé sur la progression de la commande lors de son exécution.
En fonction de la vitesse de votre connexion Internet (et probablement en fonction de ce que vous transférez exactement), vous pourrez peut-être accélérer les transferts en compressant les données en transit. Cela conserve les données non compressées sur votre machine locale et distante, mais les compresse pendant leur transfert. Pour ce faire, utilisez l'indicateur -z :
rsync -azv ~/dotfiles kris@some-computer:/home/kris/dotfiles
Encore une fois, cela n'est pas garanti pour accélérer les transferts, mais cela vaut la peine d'être étudié, en particulier pour les tâches fréquentes telles que les scripts de sauvegarde ou d'autres tâches qui prennent beaucoup de temps.
Ceci n'est qu'un aperçu de la puissance de la commande rsync. Pour plus d'idées, nous avons quelques exemples utiles de la commande rsync en action.
Quand devriez-vous utiliser scp ou rsync ?
Les commandes scp et rsync ont leurs forces et leurs faiblesses respectives, mais dans une utilisation quotidienne, déterminer laquelle est la meilleure dépend généralement de la façon dont vous les utilisez. Il existe une règle empirique assez simple que vous pouvez utiliser pour vous rappeler laquelle utiliser dans une situation donnée.
Si vous utilisez la commande manuellement pour déplacer des fichiers, vous aurez généralement plus de facilité à utiliser la commande scp. C'est plus simple et plus direct, et vous êtes probablement déjà au moins un peu familier avec les indicateurs de base liés à l'utilisation de la commande cp.
D'un autre côté, si vous écrivez un script ou exécutez une tâche cron, la commande rsync sera probablement votre meilleure option. Il est plus efficace pour gérer les problèmes de réseau inattendus, et sa nature davantage axée sur la synchronisation signifie qu'il dispose simplement d'options plus robustes que l'outil scp relativement simple.
Les deux commandes valent la peine d’être connues et il est utile de les avoir toutes deux dans votre ceinture d’outils de commandes Linux essentielles. Après tout, vous ne savez jamais quand vous pourriez être bloqué avec l'accès à une seule des commandes. Dans ce cas, il est bon de connaître au moins les bases des deux.