Unix bash, les commandes que l'on ne devrait pas oublier
Par placeoweb, jeudi 14 septembre 2006 à 18:33 :: Bash :: #13 :: rss
Un bref rappel pour les utilisateurs et les administrateurs sous linux. A coup de vi, awk, sed pour expression régulières, .sh, etc... pour se simplifier les taches quotidiennes d'édition, substitution en faisant des scripts.
awk
Lister un ligne précisée et numérotée d'un fichier
Lister le contenu de la ligne 33 du fichier
awk 'NR == 33 {print $0 }' fichier
Imprimer de la ligne 5 à la ligne 10 , chaque ligne précédée par son numéro
awk 'NR == 5 , NR == 10 {print NR" : " $0 }' fichier
Utiliser une variable dynamique
get=$(($i + 5)) awk -F '&' '{print $'"$get"'}' // Resultat de awk -F '&' '{print $5}'
#!/bin/bash var="variable" variable="dynamique" echo "Ma $var est une ${var} ${!var}" // Resultat : Ma variable est une variable dynamique
find
Sites Bash utiles et utilisés
- Une exploration en profondeur de l'art de la programmation shell, le guide avancé (4.0-fr) d'écriture des scripts Bash et ses exemples de scripts (18 juin 2006)
- Approfondir Bash
- Toutes les comandes linux
- http://www.shellunix.com/
- Les Principales commandes
- Les expressions régulières
- La commande sed
- La commande awk
Guide avancé d'écriture des scripts Bash
Traduction française, Guide avancé d'écriture des scripts Bash de l'Advanced Bash-Scripting Guide
Effacer un fichier ayant un nom débutant par un tiret "-fichier.txt".
rm -- -fichier.txt
Note : -- est utilisable pour toutes les commandes shell.
Renommer plusieurs fichiers simultanément.
Exemple : pour renommer les fichiers *.jpeg en *.jpg
for i in *.jpeg; do mv "$i" "${i%.jpeg}.jpg"; done
Afficher les lignes d'un fichier sans les lignes commentées.
Les lignes commentées sont celles qui commencent par # dans les fichiers. Pour afficher à l'écran le contenu du fichier sans ces lignes, tapez :
sed -e "/^#/d" fichier
Explication de la commande :
- sed (Stream Editor) permet de travailler sur les flux.
- ^ signifie tout ce qui commence par (dans notre cas, ce qui commence par #).
- d permet de supprimer les lignes qui correspondent à l'expression indiquée entre les barres obliques (/^#/ dans notre exemple).
Supprimer les ^M en fin de ligne d'un fichier texte écrit sous Windows.
tr -d 'r' < fichier_windows.txt > fichier_windows_converti.txt
Supprimer les lignes vides (ou ne contenant que des espaces) dans un fichier
sed '/^[[:space:]]*$/d' /TMP/fichier
Changer de répertoire, revenir au repertoire précedent
cd $OLDPWD
ou
cd - #permet de remonter autant de fois que l'on veut
Vider le contenud'un fichier existant ou qui n'existe pas
:>fichier
Calculer en bash
Calculs : faire des additions, soustractions, multiplications, divisons, modulos... La liste des opérations est la suivante :
- + , - , *, / : addition, soustraction, multiplication, division
- % : reste de la division entière
- ** : exponentiel
a=2 b=4 c=1 d=$(( a**b + c )) #retourne "2 puissance 4 plus 1" = "17" echo $d
Remarque : à l'interieur des doubles parenthèses, les noms des variables n'ont pas besoin d'être prefixés par le caractère $. Vous pouvez néanmoins le faire quand même, les deux syntaxes seront acceptés.
# Incrémente une variable, de la même manière que let y=y+1 et y=$(($y+1)) y=`expr $y + 1` y=$(($y+1))
Un subtring en bash
# Extrait une sous-chaîne de caractères de $longueur caractères, en partant de $position.
z=`expr substr $chaine $position $longueur`
Convertir en majuscule et minuscule en bash
Tiré de Le shell Bash et plus encore
# Convertit le premier caractère en majuscule word=abce123azreaz first=`echo ${word:0:1} | tr 'a-z' 'A-Z'` rest=`echo ${word:1} | tr 'A-Z' 'a-z'` echo "$first-$rest" # Retourne : A-bce123azreaz
Purger et/ou déplacer des fichiers obsoletes, idéal pour l'archivage
cd /monRepertoire/quiContient/lesVieuxFichiers # Compresser en tar.gz les fichiers vieux d'il ya plus d'un jour tar -czvf - `find . -daystart -mtime +0 -type f -print` > `date +"%Y%m%d"`/ftparchives/$maDate.tar.gz # Supprimer les vieux fichiers > 80 jours find . -mtime +80 -type f -exec rm -fv {} \;
Impossible de supprimer tous les fichiers d'un dossier, surement car il y en a trop dans votre répertoire
# rm -f * -bash: /bin/rm: Liste d'arguments trop longue
Utilisez find :
find . -exec rm -f {} \;
Le nombre d'utilisateurs connectés, leur détail et heure de connection sont accessibles depuis les commandes : finger who w
serveurLinux:~# finger Login Name Tty Idle Login Time Office Office Phone root root *pts/0 Jan 25 01:07 (ags84-1-83-242-241-7.fbx.proxad.net) root root *pts/4 17:12 Jan 22 11:27 (lns-zfv-48f-61-157-154-112.adsl.proxad.net) serveurLinux:~# who root pts/0 2008-01-25 01:07 (ags84-1-83-242-241-7.fbx.proxad.net) root pts/4 2008-01-22 11:27 (lns-zfv-48f-61-157-154-112.adsl.proxad.net) serveurLinux:~# w 03:20:50 up 3 days, 14:45, 2 users, load average: 0,12, 0,05, 0,01 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 ags84-1-83-242-2 01:07 0.00s 0.25s 0.00s w root pts/4 lns-zfv-48f-61-1 Tue11 17:14 2:42m 0.75s -bash
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.