Shell Bash : exemples de commandes Linux qui vont sauver votre journée !
Travailler en ligne de commande sur un serveur ou un poste de travail Linux peut sembler ardu aux débutants. Et pourtant, il n’y a rien de plus efficace ! Voici quelques exemples de commandes shell Bash qui me font gagner un temps précieux.
Attention ! Les éléments de cette page sont parfois très anciens. À vous de vérifier qu’ils sont toujours applicables dans votre contexte 😉
Manipulations sur le système de fichiers
Lister tous les fichiers d’un dossier et de ses sous-dossiers
ls -lR
Obtenir l’espace disque utilisé par des dossiers
Se placer dans le dossier parent et entrer :
du -h --max-depth=1
--max-depth
indique la profondeur de l’analyse. La valeur 1
permet de ne lister que les dossiers et fichiers placés dans le dossier courant.
Modifier en une seule passe des droits d’accès sur un ensemble de dossiers ou de fichiers
Pour modifier les droits d’accès sur tous les dossiers placés dans le chemin courant :
find . -type d -print0 | xargs -0 chmod 755
Pour faire de même avec les fichiers seulement :
find . -type f -print0 | xargs -0 chmod 644
Très utile quand les dossiers et les fichiers doivent avoir des droits d’accès différents !
Purger un dossier contenant d’anciens fichiers
find . -mtime +5 | xargs rm -f
+5
détermine le nombre de jours. Ici, tous les fichiers datant de plus de 5 jours seront détruits.
Une commande très utile pour purger des logs ou des sessions anciennes, sans perturber le fonctionnement actuel d’une application !
Supprimer les dossiers qui portent un nom précis
Par exemple, supprimer tous les dossiers .svn
à partir du chemin courant :
find . -type d -name '.svn' | xargs rm -rf
Et ça marche évidemment très bien pour les .DS_Store
ou tout autre type de dossier envahissant !
Recherches
Rechercher une chaîne dans des fichiers
Pour lister les fichiers qui contiennent une chaîne :
find . | xargs grep 'ma chaîne'
L’analyse est récursive, la commande parcourt donc un dossier (ici le dossier courant) et ses sous-dossiers.
On peut filtrer le résultat sur certaines extensions de fichiers :
find . -type f -name '*.php' -print0 | xargs -0 grep 'ma chaîne'
-type f
précise que l’on effectue l’analyse sur les noms des fichiers, ce qui exclut les noms des dossiers. -print0
et xargs -0
évitent quelques surprises avec les noms de fichiers comportant des caractères spéciaux (en particulier les espaces).
On peut également exclure certaines extensions de l’analyse :
find . -type f -name '*.php' ! -name '*.phtml' -print0 | xargs -0 grep 'ma chaîne'
Autre possibilité de recherche :
grep -lir 'ma chaîne' *
On peut également remplacer :
find . | xargs grep 'ma chaîne'
par :
grep -Rn 'ma chaîne'
L’option -R
permettant de réaliser un grep récursivement et l’option -n
affiche les numéros de lignes des occurrences trouvées dans chaque fichier.
Encodage et conversions de fichiers
Obtenir le type d’encodage d’un fichier
file -i fichier.txt
Lister les fichiers encodés en UTF-8 avec BOM
grep -rl $'\xEF\xBB\xBF' .
Convertir un fichier vers UTF-8
iconv -c -f latin1 -t utf-8 monfichier.txt > monfichier-utf8.txt
Très utile pour récupérer les données d’une vieille base MySQL !
Développement web
Vérifier la compatibilité PHP5 d’un code source PHP4
Très ancienne commande… Je n’ai pas cherché d’équivalent pour PHP7 et PHP8.
find /source/repertoire -name \*.php | xargs -n1 /chemin/vers/php -ddisplay_errors=1 -derror_reporting=8191 -l
Mesurer rapidement les performances d’un serveur web Apache
ab -kc 10 -t 30 http://127.0.0.1/
Commentaires