Commandes utiles en vrac

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.

Un inode contient toutes les informations concernant un fichier, sauf son nom. Il contient les numéros de plusieurs blocs de données, ceux qui sont utilisés pour stocker les données du fichier. Il est donc unique sur le système de fichiers.

Code BASH :
ls -i
find . -inum xxxxxx -exec mv {} nouveauNom \;


xxxxxx est le numéro renvoyé par ls.

Ajouter un exemple

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 

Le sleep 1 est ici pour retarder la commande d'une seconde, sinon, il est possible que l'écran se rallume de suite.


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>


Ajouter un exemple


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
Cette page a été vue 16033 fois