Commandes utiles en vrac
Table des matières
Il peut arriver qu'en raison de problèmes de caractères (UTF-8, latin1, ...) certains soient mal reconnus. Il est donc impossible de déplacer, renommer ou supprimer un fichier. Une astuce consiste à renommer le fichier en question via son numéro d'inode. Les inodes sont consultables via la commande ls -i.
où xxxxxx est le numéro renvoyé par ls.
Il est possible d'ajouter un préfixe ou un suffixe à un nom de fichier par le biais de cette commande:
J'avais des séries nommées "SERIE - S02E117 - EPISODE" mais d'autres en "SERIE s02e117 - EPISODE". Pour renommer les premières dans le format de la deuxième, la commande rename n'a pas fonctionné. En bash ça donne :
Sur les ordinateurs portable, les écrans n'ont parfois pas de bouton pour éteindre l'écran, ou le mettre en veille.
Sur Linux, une commande existe pour éteindre l'écran. Il se rallumera après un mouvement de la souris:
Pour retrouver un fichier en fonction de son nom, on utilise la commande find:
Mais il est possible aussi de retrouver un fichier avec une expression, ou un mot qu'il contient:
Si on veut compter combien de fois se trouvent des mots d'une liste dans un fichier, classé par ordre croissant, par exemple, combien de fois trouvons nous dans les logs les mots kernel, iwlwifi et dhcp :
Si le log est gzippé:
Par Adresse IP :
Par Adresse IP et par User Agent :
Exemple avec Fun Radio :
Pour aspirer un site web, on peut utiliser la commande wget :
On peut aussi utiliser ces 2 arguments aussi :
Si on veut un dossier précis sans remonter dans l'arborescence, avec un certificat SSL qui ne passe pas, et où on a besoin d'une authentification, on peut utiliser ceci :
Si on veut récupérer toutes les images dans le dossier courant, d'un blogue, on peut utiliser ceci :
Dans le dossier courant :
De manière récursive :
Si on veut synchroniser un FTP en local, on ne peut pas utiliser la commande rsync. On peut alors le faire via FTP avec la commande lftp :
Voici le code à insérer dans son .bashrc pour exécuter une commande en tant qu'autre utilisateur sur son système :
Après vous voulez lancer un programme ou une commande en tant qu'utilisateur "henri" (exemple avec firefox) et bien vous faites :
- Renommer un fichier en fonction de son inode
- Renommer massivement des fichiers sous Linux
- Renommer des fichiers en fonction d'une expression
- Eteindre l'écran
- Rechercher un fichier par son nom ou par ce qu'il contient
- Rechercher des noms et compter leur fréquence dans un fichier
- Compter les accès apache par jour
- Compter le nombre de visiteurs différents pour un jour donné
- Top URL visitées d'un site
- Quand ai-je installé mon serveur ?
- Compter les caractères d'un texte
- Enregistrer la radio
- Aspirer un site web
- Calculer la RAM réellement utilisée
- Générer un mot de passe aléatoire de 10 caractères
- Pile ou face en BASH
- Compter le nombre de fichiers par extension
- Créer un miroir FTP
- Lancer une commande en tant qu'autre utilisateur
Renommer un fichier en fonction de son inode
Il peut arriver qu'en raison de problèmes de caractères (UTF-8, latin1, ...) certains soient mal reconnus. Il est donc impossible de déplacer, renommer ou supprimer un fichier. Une astuce consiste à renommer le fichier en question via son numéro d'inode. Les inodes sont consultables via la commande ls -i.
Code BASH :
ls -i find . -inum xxxxxx -exec mv {} nouveauNom \;
où xxxxxx est le numéro renvoyé par ls.
Renommer massivement des fichiers sous Linux
Il est possible d'ajouter un préfixe ou un suffixe à un nom de fichier par le biais de cette commande:
Code BASH :
ls -c1|xargs -I {} mv {} "prefixe{}suffixe"
Renommer des fichiers en fonction d'une expression
J'avais des séries nommées "SERIE - S02E117 - EPISODE" mais d'autres en "SERIE s02e117 - EPISODE". Pour renommer les premières dans le format de la deuxième, la commande rename n'a pas fonctionné. En bash ça donne :
Code BASH :
for f in *.avi do mv "$f" "${f/- S02E/s02e}" done
Eteindre l'écran
Sur les ordinateurs portable, les écrans n'ont parfois pas de bouton pour éteindre l'écran, ou le mettre en veille.
Sur Linux, une commande existe pour éteindre l'écran. Il se rallumera après un mouvement de la souris:
Code BASH :
sleep 1; xset dpms force off
Rechercher un fichier par son nom ou par ce qu'il contient
Pour retrouver un fichier en fonction de son nom, on utilise la commande find:
Code BASH :
find <emplacement> -name <nom fichier> -print
Mais il est possible aussi de retrouver un fichier avec une expression, ou un mot qu'il contient:
Code BASH :
grep -ri "<expression>" <emplacement>
Rechercher des noms et compter leur fréquence dans un fichier
Si on veut compter combien de fois se trouvent des mots d'une liste dans un fichier, classé par ordre croissant, par exemple, combien de fois trouvons nous dans les logs les mots kernel, iwlwifi et dhcp :
Code BASH :
egrep -o "(kernel|iwlwifi|dhcp)" /var/log/messages |sort|uniq -c|sort -r 58082 kernel 7790 iwlwifi 682 dhcp
Compter les accès apache par jour
Code BASH :
cat access_log.1 | awk {'print $4'} | cut -c2-12 | sort | uniq -c 96 03/Mar/2013 434 04/Mar/2013 1 05/Mar/2013 112 07/Mar/2013 10 08/Mar/2013 3 10/Mar/2013 2 13/Mar/2013 207 14/Mar/2013 8 17/Mar/2013 208 19/Mar/2013 311 25/Mar/2013 155 26/Mar/2013 1 27/Mar/2013
Si le log est gzippé:
Code BASH :
zcat access_log.1.gz | awk {'print $4'} | cut -c2-12 | sort | uniq -c 96 03/Mar/2013 434 04/Mar/2013 1 05/Mar/2013 112 07/Mar/2013 10 08/Mar/2013 3 10/Mar/2013 2 13/Mar/2013 207 14/Mar/2013 8 17/Mar/2013 208 19/Mar/2013 311 25/Mar/2013 155 26/Mar/2013 1 27/Mar/2013
Compter le nombre de visiteurs différents pour un jour donné
Par Adresse IP :
Code BASH :
cat access.log | grep "\[08/Dec/2014" |awk '{print $1 }' | sort | uniq | wc -l
Par Adresse IP et par User Agent :
Code BASH :
cat access.log | grep "\[08/Dec/2014" |awk '{print $1 $13 $14 $15 $16 $17 $18 $19 $20 $21 $22 $23 $24 $25}' | sort | uniq | wc -l
Top URL visitées d'un site
Code BASH :
zcat access_log*.gz |cat - access_log |awk '{print $7}' |sed 's/\?.*//' |sort|uniq -c|sort -nr
Quand ai-je installé mon serveur ?
Code BASH :
ls -lct /etc | tail -1 | awk '{print $6, $7, $8}' févr. 27 13:20
Compter les caractères d'un texte
Code BASH :
TEXT="Combien de caractères comporte cette phrase" ; echo ${#TEXT} 43
Enregistrer la radio
Exemple avec Fun Radio :
Code BASH :
mplayer -ao pcm:file=radio.wav -aid 192 -srate 48000 -nocache http://streaming.radio.funradio.fr/fun-1-48-192
Aspirer un site web
Pour aspirer un site web, on peut utiliser la commande wget :
Code BASH :
wget -r -k -T 5 -t 2 -U 'Mozilla/5.0 (X11; Linux x86_64; rv:35.0) Gecko/20100101 Firefox/35.0' http://url
- -r : De manière récursive
- -k : Convertir les liens dans les pages pour renvoyer sur celles téléchargées
- -T : Nombre max de ré-essai (par défaut 20)
- -t : Timeout en secondes (par défaut 900)
- -U : UserAgent (utile car souvent, wget est bloqué).
On peut aussi utiliser ces 2 arguments aussi :
- --no-directories : Pas de sous dossiers dans les dossiers enfants (on met tout en vrac)
- --no-parent : Ne pas récupérer les dossiers parents (il y a toute l'arborescence mais pas les fichiers ni les dossiers parents)
Si on veut un dossier précis sans remonter dans l'arborescence, avec un certificat SSL qui ne passe pas, et où on a besoin d'une authentification, on peut utiliser ceci :
Code BASH :
wget --no-check-certificate -r --user=monutilisateur --password=supermdp --no-directories --no-parent https://url/dossier/
Si on veut récupérer toutes les images dans le dossier courant, d'un blogue, on peut utiliser ceci :
Code BASH :
wget -nd -H -p -A jpg,jpeg,png,gif -e robots=off kdeblog.tumblr.com
- nd : permet de ne pas créer de répertoires
- A : permet de spécifier le type de ficher à récupérer
- p : permet de télécharger toutes les pages nécessaires
- H : permet de remonter dans l'arborescence (si des images sont externes au sous-domaine par exemple)
Calculer la RAM réellement utilisée
Code BASH :
ps aux | awk '{sum+=$6} END {print sum / 1024}'
Générer un mot de passe aléatoire de 10 caractères
Code BASH :
date +%s | sha256sum | base64 | head -c 10 ; echo
Pile ou face en BASH
Code BASH :
shuf -i 0-1 -n 1 | sed -e 's/1/pile/' -e 's/0/face/'
Compter le nombre de fichiers par extension
Dans le dossier courant :
Code BASH :
ls | awk -F . '{print $NF}' | sort | uniq -c | awk '{print $2,$1}'
De manière récursive :
Code BASH :
find . -print | awk -F . '{print $NF}' | sort | uniq -c | awk '{print $2,$1}'
Créer un miroir FTP
Si on veut synchroniser un FTP en local, on ne peut pas utiliser la commande rsync. On peut alors le faire via FTP avec la commande lftp :
Code BASH :
lftp ftp://ftp.domaine.tld -e "mirror -e -x dossier_ignoré /dossier/sousdossier /home/adrien/dossierlocal ; quit"
Lancer une commande en tant qu'autre utilisateur
Voici le code à insérer dans son .bashrc pour exécuter une commande en tant qu'autre utilisateur sur son système :
Code BASH :
henri() { xhost +local: && su - henri -c $(which $1) }
Après vous voulez lancer un programme ou une commande en tant qu'utilisateur "henri" (exemple avec firefox) et bien vous faites :
Code BASH :
henri firefox