Généralités système Linux

Commandes utiles en vrac

Cet article a été mis à jour, vous consultez ici une archive de cet article!
Table des matières

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é).



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