Ceci est une ancienne révision du document !
Table des matières
Divers
Cette page est un fourre-tout de tout ce qui ne peut pas faire l'objet d'une page. Quand il y aura plusieurs choses qui pourront faire l'objet d'une page, elles seront déplacées.
- Afficher la liste des paquets installés avec Cygwin
- Afficher les entêtes d'une requête HTTP avec cURL
- Ajouter un type dans ack
- Concaténer des fichiers sous Windows
- Copier un répertoire avec rsync
- Déplacer des colonnes de données dans Excel
- Envoyer un courriel en CLI
- Exclure un répertoire des recherches de ack
- Extraire des fichiers d'une archive en ligne
- Extraire les images d'un site
- Extraire une liste de chaînes de caractères
- Génération d'une archive en changeant les chemins des fichiers
- Génération d'un pdf à partir d'un md
- Lancer un programme Java
- Lancer un serveur HTTP
- Modifier le contenu d'un fichier avec Perl
- Naviguer sur un site pour trouver les liens morts
- Partager un point d'accès WiFi avec un QR-code
- Redirection du traffic en HTTPS avec Apache
- Redémarrer un router D-link
- Relancer l'explorer de Windows
- Renommer des fichiers
- Récupérer l'identifiant d'une chaîne Youtube
- Trouver les lignes communes à 2 fichiers
- Vérifier la somme de contrôle d'un fichier
# génération d'une archive en changeant les chemins des fichiers tar -C test.tar/ --transform="s/\./hello/" --transform="s/toto1/tata/" -cvzf tar.tar . # génération d'un pdf à partir d'un md pandoc --from=markdown --to=latex -o Config.Switch.pdf --toc -N -V colorlinks -H head.tex -V geometry:"top=2cm,bottom=2cm,left=2cm,right=2cm" Config.Switch.md
Naviguer sur un site pour trouver les liens morts
# Version courte wget -r -l2 -H --spider -np -D ainw.org -nv -T 20 https://www.ainw.org # Version longue wget --recursive --level=2 --span-hosts --spider --no-parent --domains=ainw.org --no-verbose --timeout=20 http://www.ainw.org
-r
ou--recursive
active la récupération récursive.-l
ou--level
détermine le niveau de récursion maximum.-H
ou--span-hosts
étend la recherche sur d'autres hôtes.--spider
vérifie la présence des pages mais ne les télécharge pas.-np
ou--no-parent
limite la recherche aux répertoires enfants.-D
ou--domains
liste les domaines à suivre.-nv
ou--no-verbose
affiche uniquement les messages d'erreurs et les informations minimales.-T
ou--timeout
fixe la limite d'attente sur le réseau.
Extraire les images d'un site
# Version courte wget -nd -r -P ainw.org -Ajpg,jpeg --reject-regex ".*thumb.*" -l2 https://www.ainw.org # Version longue wget --no-directories --recursive --directory-prefix ainw.org --accept jpg,jpeg --reject-regex ".*thumb.*" --level 2 https://www.ainw.org
-nd
ou--no-directories
ne cré pas l'arbre des répertoires.-r
ou--recursive
active la récupération récursive.-P
ou--directory-prefix
indique le répertoire d'enregistrement des fichiers téléchargés.-A
ou--accept
conditionne la fin des noms des fichiers à télécharger.--reject-regex
rejette les URL ne respectant pas le motif.-l
ou--level
détermine le niveau de récursion maximum.
Extraire des fichiers d'une archive en ligne
# Version courte curl -L https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz | tar -x -J -f - -C /usr/local/sbin --strip 2 wkhtmltox/bin/wkhtmltopdf wkhtmltox/bin/wkhtmltoimage # Version longue curl --location https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz | tar --extract --xz --file - --directory /usr/local/sbin --strip 2 wkhtmltox/bin/wkhtmltopdf wkhtmltox/bin/wkhtmltoimage
- Option de
curl
-L
ou--location
refait la requête en cas de redirection.
- Option de
tar
-x
ou--extract
extrait les fichiers de l'archive.-f
ou--file
utilise l'archive spécifiée.-C
ou--directory
change le répertoire de travail avant toute opération.--strip
supprime les n répertoires précédant le fichier.
Cette syntaxe est obligatoire lors de l'écriture de fichier Docker. Dans le cas de l'utilisation dans bash, on peut écrire la commande différemment :
curl -L https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz | tar -x -J -f - -C /usr/local/sbin --strip 2 wkhtmltox/bin/wkhtmlto{pdf,image}
Renommer des fichiers
Pour renommer des fichiers numérotés avec espaces de la forme mon fichier 01.txt
en 01-mon fichier 01.txt
, on peut utiliser sed
et mv
de la manière suivante :
IFS=$'\n' for SOURCE in *; do TARGET=$(echo $SOURCE| sed -e 's/\(.*\([0-9][0-9]\).*\)/\2-\1/') mv $SOURCE $TARGET done IFS=$' \t\n'
Il faut noter que l'utilisation de sed
dans cette configuration est gourmande. Si on essaye de renommer mon fichier 01 - 55.txt
, on aura le fichier 55-mon fichier 01 - 55.txt
au lieu de 01-mon fichier 01 - 55.txt
. Dans ce cas, il faudra utiliser la commande suivante :
IFS=$'\n' for SOURCE in *; do TARGET=$(echo $SOURCE| sed -e 's/\([^0-9]*\([0-9][0-9]\).*\)/\2-\1/') mv $SOURCE $TARGET done IFS=$' \t\n'
Il existe aussi un script Perl qui permet de faire cela à l'aide d'expressions régulières. Il est installé par défaut sur certaines distributions (ex : Ubuntu) mais pas sur d'autres (ex : Archlinux). On peut l'utiliser de la manière suivante :
# Renommer "fichier1" et "fichier2" en "fichier1.bak" et "fichier2.bak" rename 's/$/.bak/' fichier{1,2} # Renommer "fichier 1" et "fichier 2" en "fichier1.bak" et "fichier2.bak" rename 's/ ([1,2])$/$1.bak/' fichier\ {1,2} # Renommer "premier gros fichier" en "premier.Gros.Fichier" rename 's/ (.)/.\u$1/g' premier\ gros\ fichier # Renommer "exemple d'un gros fichier" en "exemple.D.Un.Gros.Fichier" rename 's/[ '"'"'](.)/.\u$1/g' exemple\ d\'un\ gros\ fichier # Renommer "fichier1" et "fichier2" en "FICHIER1" et "FICHIER2" rename 's/(.)/\u$1/g' fichier{1,2} rename 'y/a-z/A-Z/' fichier{1,2} # Renommer "FICHIER1" et "FICHIER2" en "fichier1" et "fichier2" rename 's/(.)/\l$1/g' FICHIER{1,2} rename 'y/A-Z/a-z/' FICHIER{1,2}
Sur Ubuntu, les commandes sont utilisables directement. Sur Archlinux, il faut préfixer toutes les commandes par perl-
. Par exemple :
perl-rename 's/$/.bak/' fichier{1,2} # au lieu de rename 's/$/.bak/' fichier{1,2}
Ajouter un type dans ack
Il faut modifier le fichier .ackrc et utiliser --type-set
de la manière suivante :
- .ackrc
# Type défini par une seule extension --type-set=api:ext:apib # Type défini par plusieurs extensions --type-set=markdown:ext:md,apib # Type défini par un motif --type-set=blade:match:/blade\.php$/
On peut visualiser le nouveau type en lançant la commande :
ack --help-types
Pour plus d'information, voir ici et dans la documentation officielle
Ne pas chercher dans un répertoire avec ack
Il faut modifier le fichier .ackrc et utiliser --ignore-dir
de la manière suivante :
- .ackrc
--ignore-dir=<dirname>
Cette option peut être utilisées plusieurs fois pour ignorer plusieurs répertoires. Elle ne supporte que les noms de répertoires simples.
Elle peut-être aussi utilisée directement lors de l'exécution de ack
.
Extraire une liste de chaînes de caractères
J'ai envie de récupérer l'ensemble des codes d'erreurs générés par mon API pour pouvoir les documenter.
# Version courte grep -roh --exclude="*.apib" "api.error[^'\"]*" src/ # Version longue grep --recursive --only-matching --no-filename --exclude="*.apib" "api.error[^'\"]*" src/
-r
ou--recursive
traite les répertoires récursivement.-o
ou--only-matching
affiche ce qui correspond à la recherche.-h
ou--no-filename
supprime l'affichage des noms de fichiers.--exclude
exclus les fichiers correspondants lors du traitement.
Redirection du traffic en HTTPS avec Apache
Il faut placer un fichier .htaccess
à la racine du site avec le contenu suivant :
- .htaccess
RewriteEngine On RewriteCond %{HTTPS} !=on RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
Trouver les lignes communes à 2 fichier
Il faut utiliser la commande comm
. Celle-ci va afficher le résultat sous la forme de 3 colonnes. La première contient les lignes présentes uniquement dans le premier fichier, la seconde contient les lignes présentes uniquement dans le second fichier, la troisième contient les lignes communes aux 2 fichiers.
Il est possible de n'afficher que certaines colonnes en pointant celles que l'on veut supprimer.
# Affiche les 3 colonnes comm -- a.txt b.txt # Affiche les lignes qui ne sont que dans un des 2 fichiers comm -12 -- a.txt b.txt # Affiche les lignes communes aux 2 fichiers comm -3 -- a.txt b.txt
Vérifier la somme de contrôle d'un fichier
La somme de contrôle1) est le résultat, de longueur fixe, de la transformation d'un fichier par une fonction de hachage. Selon la théorie des codes, à chaque empreinte correspond un seul et unique fichier. Mais ce n'est que de la théorie, car la recherche faisant des progrès, ce n'est plus tout à fait vrai. De ce fait, il est facile ensuite de vérifier si le fichier est bien ce qu'il prétend être en comparant son empreinte réelle avec son empreinte théorique.
Il existe différentes fonctions de hachages, mais les plus courantes (en tout cas sur GNU/Linux) sont MD5, SHA1 et SHA256. On préfèrera l'utilisation de l'algorithme SHA pour des raisons évidentes de sécurité.
# Première méthode — Avec un programme externe echo "<chaîne de contrôle>" | sha256sum -c - # Deuxième méthode — Avec une chaîne here-string sha256sum -c - <<< "<chaîne de contrôle>" # Troisième méthode — Avec un fichier sha256sum -c <fichier de contrôle>
-c
permet de vérifier un fichier et son empreinte.
La chaîne de contrôle est composée de l'empreinte du fichier à vérifier, d'un espace, d'un astérisque et du nom de fichier à vérifier dans cette ordre.
Par exemple, 47ccc37db256387b70857f53a6067e8d50e692c9aa85e45e63e5190c5d1e0942 *Fedora-13-i686-Live.iso
.
Le fichier de contrôle contient une chaîne de contrôle par ligne, ce qui permet de traiter plusieurs vérifications simultanément.
Envoyer un courriel
cat message.A.Envoyer | mail -s "Sujet du message" -a 'From: "Mon nom" <from@example.org>' -b bcc@example.org -c cc@example.org to@example.org
-s
permet de définir un sujet.-a
permet d'ajouter un entête additionnel. Ce paramètre peut être utilisé plusieurs fois.-b
permet d'ajouter une copie carbone invisible. Ce paramètre accepte une liste d'adresses séparées par des virgules.-c
permet d'ajouter une copie carbone. Ce paramètre accepte une liste d'adresses séparées par des virgules.
- Voir si je peux utiliser la syntaxe here-string.
- Voir si je peux utiliser la syntaxe complète pour les adresses.
Lancer un programme Java
# Sans paramètre java -jar <fichier JAR> # Avec l'utilisation d'un répertoire externe (utile pour l'inclusion de bibliothèques) java -Djava.ext.dirs=/usr/share/java/ -jar <fichier JAR>
Lancer un serveur HTTP
Depuis n'importe quel répertoire, il faut lancer la commande suivante :
python -m http.server
Récupérer l'identifiant d'une chaîne Youtube
document.querySelector('meta[itemprop="channelId"]').content
Afficher les entêtes d'une requête HTTP avec cURL
curl -D - www.ainw.org -o /dev/null
-D
indique le fichier dans lequel enregistrer les entêtes de la réponse (ici - ou sortie standard).-o
indique le fichier dans lequel enregistrer le corps de la réponse (ici /dev/null).
Partager un point d'accès WiFi avec un QR-code
# Génère un QR-code qrencode -s 7 -l H -o Guest.Wifi.png 'WIFI:S:<SSID>;T:<WEP|WPA|blank>;P:<PASSWORD>;H:<true|false|blank>;;' # Génère un QR-code avec icône au centre qrencode -s 7 -l H -o - 'WIFI:S:<SSID>;T:<WEP|WPA|blank>;P:<PASSWORD>;H:<true|false|blank>;;' | \ convert - -gravity center \ \( /usr/share/icons/Adwaita/64x64/status/network-wireless-signal-excellent-symbolic.symbolic.png -bordercolor white -border 10x10 -bordercolor black -border 5x5 \) \ -composite -trim -bordercolor white -border 10x10 -bordercolor black -border 1x1 wifi.png # Génère un QR-code avec icône au centre ainsi que les informations en clair qrencode -s 7 -l H -o - 'WIFI:S:<SSID>;T:<WEP|WPA|blank>;P:<PASSWORD>;H:<true|false|blank>;;' | \ convert \( - -gravity center \( /usr/share/icons/Adwaita/64x64/status/network-wireless-signal-excellent-symbolic.symbolic.png \ -bordercolor white -border 10x10 -bordercolor black -border 5x5 \) -composite -trim -bordercolor white -border 10x10 \) \ \( -size 500x500 xc:white -font /usr/share/fonts/TTF/DejaVuSansMono.ttf -fill black -pointsize 16 -draw "text 0,16 'SSID: <SSID>'" \ -trim -bordercolor white -border 10x10 \) \( -size 500x500 xc:white -font /usr/share/fonts/TTF/DejaVuSansMono.ttf -fill black \ -pointsize 16 -draw "text 0,16 'PWD: <PASSWORD>'" -trim -bordercolor white -border 10x10 \) -gravity center -append -border color black -border 1x1 wifi.png
S
défini le SSID du réseau.T
défini le protocole de sécurité utilisé.P
défini le mot de passe.H
défini si le réseau est caché ou non.