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 :
Chronique Speed Game - Mirror's Edge de retour, fini en 30:45
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 4cut 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.mp4On 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
Décryptage d’une commande “compliquée” sous Linux
Reviewed by 0x000216
on
Saturday, September 19, 2015
Rating: 5
[Gnu/Linux] Quelques lignes de commande utiles
- Opérations sur les dossiers :
cd dir Changer le répertoire courant vers le répertoire "dir"
cd Aller vers le dossier "home"
cd .. Ouvrir répertoire parent
cd - Ouvrir répertoire précédent
cd . Ouvrir répertoire courant
mkdir dir Créer un nouveau répertoire nommé "dir"
rmdir Supprimer le répertoire "dir"
ls dir Lister le contenu du répertoire "dir"
ls -a Lister le contenu du répertoire (les dossiers cachés sont inclus)
ls -l Lister le contenu du répertoire en format longue (plus de détails)
ls -t Lister le contenu du répertoire en fonction du temps de création du contenu
ls -S Lister le contenu du répertoire en fonction de la taille de son contenu
ls -r Lister le contenu du répertoire en renversant l'ordre
ls -R Lister le contenu du répertoire d'une manière récursive
- Opérations sur les fichiers :
cp file1 file2 Copier le contenu du "file1" dans "file2"
mv file1 file2 Copier "file1" et le renommer en "file2"
rm file Supprimer "file"
cat file Afficher le contenu du "file"
cat file1 file2 Concaténer "file1" et "file2"
less file Afficher le contenu du "file" petit à petit. "q" pour quitter
head file Afficher les 10 premières lignes du fichier "file"
tail file Afficher les 10 dernières lignes du fichier "file"
tail -n 5 file Afficher les 5 dernières lignes du fichier "file"
taile -f file Afficher les 10 dernières lignes avec mise à jour continue d'affichage
- Aide (help) :
man -k word Rechercher dans le manuel du mot "word"
-h Option "-h" affiche l'aide de la commande
- Recherche des fichiers :
grep -v file Inverser la recherche
grep -r file Recherche récursive
grep -e patt -e patt file Recherche méthodique multiples "patt"
locate file Recherche rapide d'un fichier
wich cmd Rechercher l'endroit binaire dans l'OS de la commande "cmd"
find dir -name pattern Recherche le répertoire "dir" avec une méthode "pattern".
Exemple : find photos -name photos
- Les standards IO Streams :
stdout Données de sortie affichées dans l'écran
stderr Erreurs de sortie affichées dans l'écran
echo string Afficher "string" dans l'écran
- Redirections
cmd < file "File" est utilisé comme donnée d'entrée à la commande "cmd"
cmd >> file Ajouter la sortie de la commande "cmd" au fichier "file"
cmd 2> file Écrire les erreurs de sortie dans "file"
cmd &> file Écrire les erreurs et la sortie de la commande "cmd" dans "file"
- Les Pipes et les commandes multiples :
cmd1 | &cmd2 Stderr de la commande "cmd1" sont utilisées comme données d'entrée de la commande "cmd2"
cmdPart1 \
cmdPart2 Continuer la commande dans dans la ligne suivante
cmd1; cmd2 Exécuter "cmd1" puis "cmd2"
- Processus :
ps Afficher les processus de l'utilisateur
ps -e Afficher tous les processus
ps -fA Afficher tous les processus en détails
top Afficher les processus en temps réel
cmd & Exécuter la commande "cmd" en arrière plan
Ctrl + C Stopper (tuer) le processus en action
Ctrl + Z Suspendre le processus en action
bg Placer le processus suspendu en arrière plan
fg Amener le processus en arrière plan au premier plan d'exécution
kill Pid Tuer un processus par son ID Pid
kill -9 Pid Tuer un processus (d'une manière forte) par son ID Pid
- Opérations sur les fichiers texte :
wc file Compter les lignes, les mots et les caractères du fichier "file"
sort file Classer "file" ligne par ligne
sed 's/abc/def/g' file Remplacer les occurrences de "abc" par "def" dans le fichier "file"
Pour de commandes, veuillez consulter : Bash Commands
[Gnu/Linux] Quelques lignes de commande utiles
Reviewed by 0x000216
on
Saturday, October 18, 2014
Rating: 5