lftp par l’exemple

lftp est un client ftp en ligne de commande bien pratique. Il a des fonctionnalités avancées et peut être facilement intégré dans des scripts bash. Pour ma part je préfère utiliser scp lorsque j’ai des fichiers à rapatrier de mes serveurs, mais parfois on a pas le choix et on doit passer par ftp.

Installation
Selon votre système d’exploitation :

$ sudo dnf install lftp # Fedora 18+ 
$ sudo yum install lftp # Centos
$ sudo aptitude install lftp # Debian, Ubuntu

Mode intéractif

Connexion

Vous pouvez commencer par lancer lftp, simplement de la manière suivante

$ lftp

Vous rentrez dans un mode intéractif ou le programme attends que vous lui passiez des commandes.

lftp :~> open -umy-user my-server-host

Vous pouvez aussi vous connecter directement via au lancement de la commande, il y a deux solutions

 lftp login:password@host
 lftp -u login,password host

Maintenant que vous êtes connecté en mode interactif, vous devez avoir une ligne toute seul qui attends une commande et qui ressemble à ça

lftp my-user@host:/>

Les commandes

Testons donc quelques commandes :

# Pour avoir la liste de toute les commandes disponibles
lftp my-user@host:/> help
    !<commande-shell>                    (commandes)
    alias [<nom> [<valeur>]]             attach [PID]
    bookmark [SOUS-COMMANDE]             cache [SOUS-COMMANDE]
    cat [-b] <fichiers>                  cd <rép-dis>
    chmod [OPTS] mode fichier...         close [-a]
    [re]cls [opts] [chemin/][motif]      debug [OPTS] [<level>|off]
    du [options] <répertoires>           exit [<code>|bg]
    get [OPTS] <fichier-distant> -o <fichier-local>]
    glob [OPTS] <cmd> <args>             help [<cmd>]
    historique : -w fichier|-r fichier|-c|-l [num]
    jobs [-v] [<job_no...>]              kill all|<num>
    lcd <répertoire-local>               lftp [OPTS] <site>
    ln [-s] <file1> <file2>              ls [<args>]
    mget [OPTS] <fichiers>               mirror [OPTS] [distant [local]]
    mkdir [OPTS] <dirs>                  module nom [args]
    more <fichiers>                      mput [OPTS] <fichiers>
    mrm <fichiers>                       mv <fichier1> <fichier2>
    [re]nlist [<args>]                   open [OPTS] <site>
    pget [OPTS] <fichier-distant> [-o <fichier-local>]
    put [OPTS] <fichier-local> [-o <fichier-distant>]
    pwd [-p]                             queue [OPTS] [<cmd>]
    quote <cmd>                          repeat [OPTS] [délai] [commande]
    rm [-r] [-f] <fichiers>              rmdir [-f] <répertoires>
    scache [<num_session>]               set [OPT] [<var> [<val>]]
    site <site-cmd>                      source <fichier>
    torrent [-O <dir>] <file|URL>...     user <user|URL> [<pass>]
    wait [<num_travail>]                 zcat <fichiers>
    zmore <fichiers>
# lister les fichiers et dossiers
lftp my-user@host:/> ls
drwx---r-x    2 41429      users               3 Nov  3 19:27 .
drwx---r-x    2 41429      users               3 Nov  3 19:27 ..
-rw----r--    1 41429      users               6 Jan 16  2012 index.php
# Télécharger un fichier depuis le serveur vers votre poste local
lftp tickapp-tuto@ftp.cluster006.ovh.net:/> get index.php 
6 octets transférés                               
lftp tickapp-tuto@ftp.cluster006.ovh.net:/>
# Créer un dossier
lftp my-user@host:/> mkdir www
mkdir ok, « www » créé
# Se déplacer dans un dossier
lftp my-user@host:/> cd www/
lftp my-user@host:/www>

Dans l’ensemble la plupart des commandes sont aussi simple que celles-ci à utiliser.

À noter un comportement intéressant, si vous pouvez exécuter des commandes shell en local en les préfixant par un point d’exclamation. swag.

# ls sur le serveur distant
lftp my-user@host:/> ls
drwx---r-x    2 41429      users               3 Nov  3 19:27 .
drwx---r-x    2 41429      users               3 Nov  3 19:27 ..
-rw----r--    1 41429      users               6 Jan 16  2012 index.php
 
# ls sur votre poste local
lftp my-user@host:/> !ls
App  Bureau Documents  Images  kdenlive  Modèles  Musique  Projects  Public Téléchargements Vidéos

Vous constaterez que la commande ls applique automatique les options -la sur le serveur. Si vous souhaitez seulement la liste des fichiers il faut utiliser cls

Par ailleurs il y a un comportement particulier avec la commande !cd, elle est temporaire, exemple:

lftp my-user@host:/> !ls
App  Bureau Documents  Images  kdenlive  Modèles  Musique  Projects  Public Téléchargements Vidéos
 
lftp my-user@host:/> !cd App
lftp my-user@host:/> !ls
App  Bureau Documents  Images  kdenlive  Modèles  Musique  Projects  Public Téléchargements Vidéos
 
lftp my-user@host:/> !cd App && ls 
pycharm-4.5  android-studio  Sublime Text 2

Vous remarquerez, pas de point d’exclamation devant ls. Par ailleurs si vous voulez que le déplacement soit effectif il faut utiliser lcd.

Mode ligne de commande

Le mode intéractif c’est cool, mais clairement le plus intéressant c’est de pouvoir exécuter des commandes FTP en une seule ligne de commande, ce qui permet d’utiliser lftp dans un script bash.

Pour cela faut utiliser le paramètre -e. Exemple :

lftp login:password@host -e "cd /path/ftp; put monfichier.tar; exit"

On voit que le paramètre -e prends l’ensemble des commandes que l’on veut exécuter, ce qui est très pratique pour un script.

Toutes les commandes que je vous présentées juste au dessus sont utilisables de cette façon.

Sauvegarde de l’ensemble du dossier

Nous allons maintenant découvrir la commande qui va nous permettre de faire des savegardes de dossier distant vers votre poste local, et inversement. La bien nommée mirror

# Copier le dossier distant path/ftp en local
lftp login:password@host -e "mirror path/ftp/;exit"
# Copier le dossier distant path/ftp dans le dossier local /tmp/backup
lftp login:password@host -e "mirror path/ftp/ /tmp/backup;exit"
 
# En ajoutant l'option -R à mirror, on inverse le fonctionnement
# et on copie un dossier local vers le serveur
# Copier le dossier local /tmp/backup sur le serveur
lftp login:password@host -e "mirror -R /tmp/backup;exit"
# Copier le dossier local /tmp/backup dans le dossier distant toto/
lftp login:password@host -e "mirror -R /tmp/backup toto/;exit"

La commande mirror prends aussi une option -e qui permet de ne télécharger que les nouveaux fichiers et les fichiers modifiés.

On a fait plus ou moins le tour de lftp. Une vidéo arrive bientôt 😉

Aymeric DERBOIS

J'ai 27 ans et je suis développeur. Je travail la plupart du temps sur des techno web, mais pas que. Étant à l'affût des nouveautés, j'adore découvrir tout et n'importe quoi dans l'informatique. Je suis amoureux de CakePHP et j'utilise au quotidien Django. Je suis très ouvert d'esprit :). J'aime bien utiliser AngularJS aussi de temps à autre pour faire du front. Au quotidien j'utilise Fedora/Ubuntu pour le desktop et CentOS pour mes serveurs. Par ailleurs je maîtrise le C/C++/Python/PHP/...

More Posts - Website

Follow Me:
Twitter

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.