%
Puffy image/svg+xml Puffy 2019-06-14 Stéphane HUC OpenBSD Team Inkscape Puffy OpenBSD https://www.openbsd.org/art4.html English "Puffy", it's a symbol of OpenBSD

lftp : client ftp, sftp CLI / OpenBSD

Article publié, le et modifié le
7 minutes de lecture

Cet article contient 1489 mots.
Source brute de l'article :
Commit version : 4ebab03

Description

lftp est un outil en ligne de commande, qui permet de transférer des fichiers. Il supporte les protocoles Bittorent, FISH, FTP, FTPS, HTTP, HTTPS, SFTP et a un support partiel pour WebDAV. IPv(4|6).

Ses fonctionnalités sont :

  • la reconnexion automatique et la possibilité de ré-essai après erreurs ou timeout
  • préservation de l’heure de modification
  • mirroring, reverse mirroring, re-get, re-put
  • mise en file d’attente par job, multiplier les transferts en tâche de fond
  • gestion de “bookmarks” et d’alias

Installation

installez le paquet lftp.

Utilisation

En tant que client CLI, il peut autant s’utiliser dans une ligne de commande que dans un script sh.

Options

Les options :

  • -c : suivi d’un ensemble de commandes et quitte
  • -d : le mode de déboguage
  • -e : suivi d’un ensemble de commandes et ne quitte pas
  • -f : suivi d’un nom de fichier, permet d’exécuter les commandes dans ce fichier et quitte. Cette option DOIT s’utiliser toute seule, sans aucun autre argument (sauf --norc).
  • --norc : ne pas exécuter les fichiers rc depuis votre répertoire $HOME.
  • -p : spécifie le numéro de port sur lequel se connecter
  • --rcfile : suivi d’un nom de fichier, permet d’exécuter un ensemble de commandes dans ce fichier et d’être exécuté plusieurs fois.
  • -u : permet de spécifier le couple d’identification utilisateur + mot de passe. Il est recommandé d’utiliser le fichier ~/.netrc dans lequel préciser le mot de passe, plutôt que dans la ligne de commande, ou par le biais de la variable d’environnement LFTP_PASSWORD qui sera ensuite appelée par l’option --env-password. De manière alternative, il est possible d’utiliser une connexion SSH par authentification par clé autorisée.

Variables d’environnement

Si les variables d’environnement suivantes sont précisées avant l’appel système, lftp est/sera capable de les utiliser :

  • EDITOR : l’éditeur de texte qui sera appelé lors de l’usage de la commande edit.
  • HOME : le répertoire personnel local
  • LFTP_HOME : utilisée pour localiser le répertoire des fichiers de configurations locaux spécifiques à l’utilisateur.
    • Par défaut, sans spécification, il sera utilisé ~/.lftp.
  • LFTP_MODULE_PATH : initialise la variable module:path
  • LFTP_PASSWORD : utilisée par l’argument open lors de l’usage de l’option --env-password.
  • LS_COLORS : permet de paramétrer la variable color:dir-colors qui ajoutera des couleurs.
  • PAGER : le nom du pager à utiliser lors de l’usage des commandes more et zmore.
  • SHELL : utilisée par la commande ! pour déterminer quel shell utiliser
  • XDG_CONFIG_HOME, XDG_DATA_HOME, XDG_CACHE_HOME : utilisée pour localiser les répertoires spécifiques utilisateur si ~/.lftp ou la variable d’environnement LFTP_HOME ne sont pas précisés.
    • Par défaut, il sera recherché respectivement ~/.cache, ~/.config, ~/.local/share. Il sera ajouté le préfixe /lftp pour restituer le chemin absolu du répertoire en question.
  • ftp_proxy : initialise la variable pour le mandataire FTP
  • http_proxy, https_proxy : initialise les variables pour les mandataires HTTP(S)
  • no_proxy : initialise la variable net:no_proxy.

Les commandes

ll existe énormément de commandes utilisables avec lftp ; veuillez lire le manpage ; seules certaines seront précisées ici sur cette page :

!

Cette commande spéciale ! exécute un shell suivi d’une autre commande

alias

Pour définir un nom d’alias ; c’est le même principe que les alias de shell

at

Exécutera une commande au moment donné. Voir le manpage at(1).

edit

Permettra l’édition d’un fichier distant par le biais de l’éditeur texte spécifié. Dans les faits, lftp récupérera le fichier vers un répertoire temporaire local, exécutera l’éditeur de texte local et téléversera sur le serveur le fichier.

Les options :

  • -k : pour garder le fichier temporaire
  • -o : pour spécifier le répertoire temporaire

mirror

Faire une copie en miroir d’un répertoire source spécifié vers un répertoire cible. (c’est l’équivalent de l’outil rsync).

Par défaut, la source est distante et la cible est le répertoire local. Il faut utiliser l’option -R pour inverser la source et la cible ; ainsi le répertoire source sera le répertoire local et la cible sera le répertoire distant.

Si le répertoire cible est omis, la base du nom du répertoire source sera utilisée. Si les deux sont omis, les répertoires courants local et distant seront utilisés.

Si le répertoire cible termine avec un / (hormis le répertoire racine) alors la base du nom du répertoire source sera ajouté.

Les options :

  • -a : l’équivalent des options --allow-suid et --no-umask.
  • -c, --continue : continue un job si possible
  • -e, --delete : supprime les fichiers qui ne sont pas présent sur la source
    • --delete-excluded : supprimera les fichiesr exclus sur la cible
    • --delete-first : supprimera en premier les vieux fichiers avant de transférer les nouveaux
    • --depth-first : descendra dans les sous répertoires avant de transférer les fichiers
    • --scan-all-first : analysera tous les répertoires récursivement avant de transférer les fichiers
  • -F, --directory= : fera une copie miroir du seul répertoire spécifié, ou selon un glob précis, tel /path/dir*.
  • -f, --file= : fera une copie miroir du seul fichier spécifié, ou selon un glob précis, tel que /path/*.txt.
  • -I GP, --include-glob=GP : inclue les fichiers correspondants au glob pattern. À-propos de GP, voir la note ci-dessous.
  • -i RX, --include=RX : inclue les fichiers correspondants à l’expression régulière. À-propos de RX, voir la note ci-dessous.
  • -L, --dereference : télécharge les liens symboliques comme étant des fichiers
    • --no-overwrite : supprime d’abord les fichiers et les recréer ensuite
    • --overwrite : ré-écrit les fichiers sans les supprimer en premier
  • -O, --target-directory= : cible le chemin ou l’URL
  • -N, --never-than= : téléchargera seulement les fichiers les plus récents selon une date spécifiée
    • --older-than= : téléchargera seulement les fichiers anciens selon une date spécifiée
    • --size-range= : téléchargera seulement les fichiers ayant telle taille
  • -n, --only-newer : téléchargera seulement les fichiers les plus récents - dans ce cas, l’option -c ne fonctionnera pas.
    • --upload-older : téléchargera sur la cible même les fichiers plus vieux que les actuels.
    • --transfer-all : transférera tous les fichiers, même ceux qui ressemblent à ceux existant sur la cible.
  • -P, --parallel : téléchargera N fichiers en même temps
    • --loop : répétera le miroir jusqu’à ce que plus aucun changement ne soit trouvé
    • --on-change= : exécutera la commande spécifiée lors d’un changement
    • --use-pget : utilisera l’outil pget pour transférer chaque fichier
  • -p, --no-perms : ne paramétrera pas les permissions de fichiers
    • --no-umask : n’appliquera pas le mode umask
  • -R, --reverse : inverse le miroir
  • -r, --no-recursion : ne parcourra pas les sous répertoires
    • --recursion= : parcourra les sous répertoires selon un mode choisi
    • --no-symlinks : ne créera pas les liens symboliques
  • -s, --allow-suid : paramétrera les bits suid et sgid selon la source
    • --allow-chown : paramétrera les droits utilisateur et groupe sur les fichiers
    • --ascii : utilisera le mode de transfert ascii - ce qui implique l’option --ignore-size.
    • --ignore-size : ignore la taille
    • --ignore-time : ignore l’heure de téléchargement
    • --only-existing : téléchargera seulement les fichiers déjà existant sur la cible
    • --only-missing : téléchargera seulement les fichiers non existant sur la cible.
  • -v, --verbose : restitue les informations de manière verbeuse ; il est possible de spécifier un niveau, tel que =level.
    • --log= : écrit le retour des commandes lftp exécutées dans le fichier journal spécifié
    • --max-errors= : arrête l’exécution après N erreurs.
    • --Move : identique à l’option --Remove-source-dirs.
    • --Remove-source-dirs : supprime les répertoires et les fichiers sources après le transfert - à utiliser avec précaution !
    • --Remove-source-files : supprime les fichiers sources après le transfert - à utiliser avec précaution !
    • --script= : lis les commandes lftp depuis un fichier, sans les exécuter. Autres noms de l’option : --just-print, ou --dry-run.
    • --skip-noaccess : ne pas essayer de transférer les fichiers qui n’ont pas d’accès en lecture.
    • --use-cache : utilise une liste de répertoire mis en cache
  • -X GP, --exclude-glob=GP : exclue les fichiers selon le pattern glob. À-propos de GP, voir la note ci-dessous.
    • --exclude-glob-from=, --exclude-rx-from=, --include-glob-from=, --include-rx-from= : inclura ou exclura les fichiers selon le fichier renfermant l’expression régulière ou le glob pattern fourni - un par ligne.
  • -x RX, --exclude=RX : exclue les fichiers selon l’expression régulière. À-propos de RX, voir la note ci-dessous.

Notes :

  • GP est un glob pattern à fournir, tel *.zip
  • RX est une expression régulière à fournir
  • sachez qu’il existe énormément de notes relatives à certaines options, pour plus d’informations, veuillez lire le manpage.

Exemples

SFTP

Se connecter en ligne de commande :

$ lftp -p $port sftp://$user@$address

  • -p $port : est le numéro de port de connexion vers le serveur.
    • Par défaut, pour SSH, c’est le 22, mais cela dépend de votre configuration serveur.
  • $user : l’identifiant de connexion
  • $adress : l’adresse ip ou le nom d’hôte FQDN du serveur sur lequel se connecter.

Dans un script shell :

/usr/local/bin/lftp -p $port sftp://$user@$host

Une des fonctionnalités intéressantes est le fait de pouvoir faire du “mirroring” - de la copie en miroir d’un ensemble de fichiers, répertoires vers un autre endroit ; l’équivalent de rsync -

Mirroring par SFTP

$ lftp -e "mirror -e -R /repertoire_local/ /repertoire_distant/ ; quit" -p $port sftp://$user@$host

Documentation


Historique

J’ai écrit historiquement cette documentation sur le wiki de la communauté “OpenBSD Pour Tous”.