Décryptage d’une commande “compliquée” sous Linux



Le shell est un outil très puissant, mais qui fait peur, parce qu’il parait souvent très compliqué. Aujourd’hui, je vous propose de faire un pas à pas pour comprendre comment tout ça fonctionne, pour ne plus avoir peur.

Histoire de voir à quoi nous avons affaire, voici sans plus de préambule la commande kifépeur :

wget -q -O - $pagelink | grep "\.mp4" | cut -d\" -f 4 | sed 's/1080p/720p/g'
J’ai pondu ça en cherchant à récupérer le lien direct des vidéos sur le site Jeuxvideo.com, puisqu’ils ne sont plus disponibles depuis la refonte du site (ils étaient à destination des Mac’eux, qui n’ont pas l’horreur Flash). $pagelink contient donc un lien vers une des pages du site, qui contient la vidéo convoitée, comme cette page par exemple.

  Rappel sur le pipe: non j’ai pas fait d’erreur, le pipe, c’est le nom qu’on donne au “|”. Son utilité, renvoyer le résultat d’une commande à une autre commande. Notre ligne d’exemple est ainsi un enchaînement de commandes qui chacune travaille avec le résultat de la précédente. Voyons donc chaque étape, en commençant par le début, celle du téléchargement de la page :

<div class="header-video">
<div itemscope itemtype="http://schema.org/Organization">
 <span itemprop="name" content="Jeuxvideo.com"></span>
</div>
<meta itemprop="videoFrameSize" content="mp4" />
<meta itemprop="description" content="la derniere fois que coeurdevandale et realmyop se sont retrouves devant tag 140961 mirror s edge il..." />
<meta itemprop="contentUrl" content="http://video1080.jeuxvideo.com/chroniques/s/p/speed-game-mirror-s-edge-2-144960-1439971518-1080p.mp4" />
<meta itemprop="duration" content="PT0H41M41S" />
<meta itemprop="videoQuality" content="1080p" />
<meta itemprop="encodingFormat" content="mpeg4" />
<meta itemprop="thumbnail" content="http://image.jeuxvideo.com/images/videos/chroniques-images/s/p/speed-game-mirror-s-edge-2-144960-1439971518-low.jpg" />
<meta itemprop="playerType" content="Flash" />
<meta itemprop="name" content="Speed Game - Mirror&#039;s Edge de retour, fini en 30:45" />
<div class="titre-video">
 <span>Chronique</span> Speed Game - Mirror&#039;s Edge de retour, fini en 30:45
 </div>
 <div class="foot-video">
  <div class="date-comm">
  <time datetime="2015-08-22T12:02">22/08/2015 à 12:02</time>
Ce résultat est ensuite envoyé à cette partie :

grep "\.mp4"
grep est un outil pour vous retourner les lignes d’un fichier (ou ici, du résultat du wget), ici on cherche les lignes dans lesquelles se trouve le “mot” “.mp4” :
<" meta itemprop="contentUrl" content="http://video1080.jeuxvideo.com/chroniques/s/p/speed-game-mirror-s-edge-2-144960-1439971518-1080p.mp4" />
Yes, une seule ligne ! On la passe ensuite à la moulinette de la partie suivante :
cut -d\" -f 4
cut est un utilitaire qui, comme son nom l’indique dans la langue de Shakespeare, découpe la chaîne qu’on lui donne en morceaux suivant un séparateur, ici le “, et on lui dit de renvoyer le f-ième morceau :
 http://video1080.jeuxvideo.com/chroniques/s/p/speed-game-mirror-s-edge-2-144960-1439971518-1080p.mp4
On approche du but, ceci dit comme j’ai pas un débit de malade, je ne cherche pas le lien de la vidéo en Full HD, mais en 720p. Par chance, il suffit de remplacer le 1080p au bout du lien par 720p, et c’est sed qui s’en charge :
 sed 's/1080p/720p/g' 

En gros, remplacer “1080p” par “720p”. Pourquoi mettre le “p” à la fin ? Pour éviter de remplacer aussi video1080 par video720 au début du lien, au risque de rencontrer des erreurs :

http://video1080.jeuxvideo.com/chroniques/s/p/speed-game-mirror-s-edge-2-144960-1439971518-720p.mp4

Et voilà, j’ai mon lien final :)

Pour l’histoire, j’utilise ce lien ensuite pour télécharger la vidéo avec wget, appelé soit seul soit avec trickle. Ça vous parle ? C’est normal, j’en ai parlé de l’article sur le contrôle de vitesse de téléchargement. Sinon, Jeuxvideo.com fait partie des sites supportés par youtube-dl, mais j’ai découvert ça après avoir codé mon truc.

Des possibilités infinies

On le voit, au final, on a mis bout à bout plusieurs outils qui ne font chacun qu’une seule chose, mais qui le font bien. Imaginez que les commandes sont des blocs Lego différents, et pensez (ou cherchez sur le Web) à toutes les créations plus hallucinantes les unes que les autres que sont capables de créer les gens qui jouent avec. C’est pareil, difficile de ne pas trouver une solution à un problème avec de telles possibilités de combinaison.

Par exemple, quand on a pas la possibilité d’avoir Fail2ban sous la main, chercher dans les logs de votre serveur Web les IPs les plus violentes en les classant par fréquence d’occurrence, et pourquoi pas bannir les 5 du groupe de tête, les plus agressives. En clair, une fois maîtrisées ces commandes “de base”, seule votre imagination vous bridera. Amusez-vous bien.

Source: seboss666

Enregistrer un commentaire