Retour au cours

reseau cli

Objectifs

  • Télécharger des fichiers depuis Internet avec wget.
  • Interagir avec des APIs web et transférer des données avec curl.
  • Copier des fichiers de manière sécurisée sur un réseau avec scp et rsync.
  • Effectuer des diagnostics réseau de base (ex: tester un port) avec nc.

Explications détaillées

Notions clés

La ligne de commande est un outil exceptionnel pour interagir avec le réseau. Voici les commandes les plus courantes.

wget : Le téléchargeur simple

wget est un outil simple et robuste dont le but principal est de télécharger des fichiers depuis le web.

  • wget URL : Télécharge le fichier à l’URL donnée.
  • -c : Continue un téléchargement interrompu.
  • -O nom_fichier : Sauvegarde sous un nom de fichier différent.

curl : Le couteau suisse du transfert de données

curl (Client URL) est un outil extrêmement puissant et polyvalent pour transférer des données. Il supporte des dizaines de protocoles (HTTP, HTTPS, FTP, etc.) et est l’outil de choix pour interagir avec des APIs.

  • curl URL : Affiche le contenu de l’URL sur la sortie standard.
  • -o fichier : Écrit la sortie dans un fichier (minuscule o).
  • -O : Sauvegarde dans un fichier portant le même nom que le fichier distant (majuscule O).
  • -L : Suit les redirections HTTP.
  • -X METHODE : Spécifie la méthode HTTP (GET, POST, PUT, DELETE).
  • -H "Header: Valeur" : Ajoute un en-tête HTTP.
  • -d 'data' : Envoie des données dans une requête POST.

scp et rsync : La copie sécurisée

Pour copier des fichiers vers ou depuis un serveur distant, on utilise des outils qui s’appuient sur SSH (Secure Shell).

  • scp (Secure Copy) : Simple et efficace pour copier un ou plusieurs fichiers. La syntaxe est similaire à cp. scp source.txt user@serveur:/chemin/destination/
  • rsync : Bien plus puissant pour synchroniser des dossiers entiers. Il ne transfère que les différences, ce qui le rend très rapide après la première copie. C’est l’outil à privilégier pour les sauvegardes. rsync -avz source/ user@serveur:/destination/
    • -a : mode archive (préserve tout), -v : verbeux, -z : compresse pendant le transfert.

nc (netcat) : Le débogueur réseau

netcat est un outil de bas niveau pour lire et écrire des données sur des connexions réseau TCP ou UDP. Son usage le plus simple est de tester si un port est ouvert sur un serveur.

  • nc -zv host port : Tente de se connecter au port. -z scanne sans envoyer de données, -v est verbeux.

Syntaxe / Usages

# Télécharger une image avec wget
wget https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png

# Faire un appel API simple avec curl
curl -L https://api.github.com/users/torvalds

# Envoyer du JSON à une API avec curl
curl -X POST -H "Content-Type: application/json" -d '{"nom":"test"}' https://httpbin.org/post

# Copier un fichier de log vers un serveur
scp mon_app.log admin@serveur.exemple.com:/var/log/

# Synchroniser un dossier de projet vers un serveur de déploiement
rsync -avz mon_projet/ deploy@serveur.exemple.com:/var/www/mon_projet/

# Tester si un serveur web est accessible sur le port HTTPS
nc -zv github.com 443
# -> Connection to github.com port 443 [tcp/https] succeeded!

Bonnes pratiques

  • Utilisez curl pour les APIs et les interactions complexes. Utilisez wget pour les téléchargements simples de fichiers.
  • Préférez rsync à scp dès que vous devez copier plus qu’un simple fichier. C’est plus efficace et plus flexible.
  • Dans les scripts, utilisez toujours des timeouts pour vos commandes réseau (curl --connect-timeout 10 ...) afin d’éviter que votre script ne reste bloqué indéfiniment.
  • Pour curl, utilisez -f ou -sS en combinaison avec des tests sur le code de retour pour gérer les erreurs HTTP.

Pièges courants

  • curl qui inonde le terminal : Par défaut, curl écrit sur stdout. Si vous téléchargez un gros fichier binaire, il va remplir votre console de caractères illisibles. Pensez à utiliser -o ou -O.
  • Les slashs de fin avec rsync : rsync -a source/ dest/ (avec un / à la fin de la source) copie le contenu de source dans dest. rsync -a source dest/ (sans /) copie le dossier source lui-même dans dest. C’est une différence subtile mais cruciale.

Exercices

  1. Téléchargement :

    • Utilisez wget pour télécharger la page d’accueil du site example.com et la sauvegarder dans un fichier exemple.html.
  2. Appel API :

    • Utilisez curl pour interroger l’API publique https://api.coindesk.com/v1/bpi/currentprice/EUR.json.
    • Utilisez un pipe avec jq (si installé) ou grep pour extraire uniquement le taux de change du Bitcoin en EUR.
  3. Test de port :

    • Utilisez nc pour vérifier si votre machine locale a le port 22 (SSH) ouvert. (nc -zv localhost 22).
    • Testez ensuite un port qui est probablement fermé, comme le port 12345.
  4. Transfert de fichier (si vous avez accès à un serveur distant) :

    • Créez un fichier test_transfert.txt.
    • Utilisez scp pour le copier sur votre serveur distant.
    • Utilisez rsync pour copier un dossier entier.