--- categories: ['OpenBSD','Système','Réseau','Client'] date: 2020-01-19T17:56:42+02:00 description: "Utiliser le client (s)ftp, en mode console/terminal, nommé lftp, sous OpenBSD" draft: false include_toc: true show_comments: false tags: ['OpenBSD','lftp'] title: "lftp : client ftp, sftp CLI / OpenBSD" translationKey: 'openbsd-lftp' --- ## 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 {{< inside2 l="sys/openbsd/pkg" t="installez" a="installer" >}} 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)](https://man.openbsd.org/at). #### 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 * le manpage : `man ltfp` * le site web : https://lftp.tech/ --- ## Historique J'ai écrit historiquement cette documentation sur le wiki de la communauté "OpenBSD Pour Tous". ---