Le shell BASH

Notes prises lors d'un cours BASH donné par Bzizou

Les variables

String

toto=coucou

echo $toto

renvoie “coucou”.

Entier / Integer

declare -i compteur=0
echo $compteur
0

ici -i ===== integer

let compteur++
echo $compteur
1

Le calcul

expr 1+1
2
expr 2/*2
4

Valable pour tout les shells

`  Touches "ALTgr+7"
compteur= `expr $compteur +1`
echo $compteur

Commande "egrep"

Recherche de chaine de caractere dans un fichier ou un flux via une redirection

egrep "^[0-9].*" nom fichier

Les expressions rationnelles

. n'importe qu”elle carat�res * 0 ou plusieurs

plus d'info sur man perlre ( manuel des expression regulirere de PERL )

wc : (word count)

Compte des lignes + les mots

wc -l pour les lignes

Exemples pratiques :

NBLIGNES= `grep "^[1-9].*" introduction.txt | wc -l`
echo $NBLIGNES

donne un chiffre mais attention c'est une string pour avoir un entier, il faut ;

declare -i NBLIGNES avec -x pour l'export

tail ou head

Permet l'affichage de n ligne d'un fichier

tail � partir de la fin head � partir du d�but

Exemple :

tail -6 /var/log/messages
Sep 16 16:10:45 localhost kernel: EXT3-fs warning: maximal mount count reached, running e2fsck is recommended
Sep 16 16:10:45 localhost kernel: EXT3 FS 2.4-0.9.19, 19 August 2002 on sd(8,6), internal journal
Sep 16 16:10:45 localhost kernel: EXT3-fs: mounted filesystem with ordered data mode.
Sep 16 16:10:45 localhost kernel: usb.c: registered new driver usbdevfs
Sep 16 16:10:45 localhost kernel: usb.c: registered new driver hub
Sep 16 16:10:45 localhost kernel: e1000: eth0 NIC Link is Up 100 Mbps Full Duple

head -6 /var/log/messages
Sep 16 00:00:12 s5382920 syslogd 1.4.1: restart.
Sep 16 18:08:03 s5382920 exiting on signal 15
Sep 16 16:10:43 localhost syslogd 1.4.1: restart.
Sep 16 16:10:45 localhost kernel: klogd 1.4.1, log source = /proc/kmsg started.
Sep 16 16:10:45 localhost kernel: Cannot find map file.
Sep 16 16:10:45 localhost kernel: Loaded 69 symbols from 3 modules

pour avoir un affichage au fils de l'eau :

tail -f /var/log/messages

La redirection !

Commande exécuté séquentiellement :

commande bidon1;echo "ce message"

si on mets entre () on forme un groups

sortie standard 1 > /tmp/sortie
sortie erreur	2 > /tmp/erreur
1 > /tmp/sortie 2>&1 on concat�ne la sortie standard et d'erreur

Boucle for ou while

for i in *;do echo $i;done (fonction euivqlente � un ls *)

for i in *;do "mv $i $i.test";done

for i in 123;do echo $i;done

declare -i compteur=0

while [ $compteur -lt 10 ]; do echo $compteur; let compteur++;done

lt lowerthan attention < pour les strings

Variable ? code d'erreur 0 ou 1 echo $?

test 3 -lt 2; echo  $?

test == [ ]  voir man test

Commande if

if [ "1" = "1"  ]; then echo "vrai";else echo "faux";fi

<Attention> aux espaces dans les crochets

Exemple :

ping -w1 -c 1 IP.IP.IP.IP ; echo $?

vi script.bash

#!/bin/bash

if [ "$#" -lt 1 ]
then
	echo "il manque un parametre"
	exit 1

fi
ping -w1 -c 1  $1 > /dev/null  2>&1


if [ "$?" = "0" ]
then
	echo "$1 est en vie"
else
	echo "$1 ne reponds pas"
fi
exit 0

getent

getent passwd (donne le listing des utilisateurs comme le fichier /etc/passwd, cela �vite de travailler directement sur le fichier passwd)

getent group (liste des groupes)

sort

Son contraire 'sort -r'

-r pour 'reverse'

Tri des fichiers par lignes

getent passwd | sort -t: -k5

-t pour d�finir le s�parateur de champs ici : -k champs sur lequel on fait le tri.

uniq

Enleve les doublons dans un fichier. (si les doublons ne sont pas cote à cote on trie avant avec sort)

sort test | uniq

grep -i denied /var/log/message | sort | uniq | grep -V named

cut

Extrait un champs donn� dans un fichier

getent passwd | cut -d: -f1

-d pour d�finir le s�parateur de champs ici : -f numero du champ (field) sur lequel on fait la coupe.

sed

Substitution a partir d'expression régulière (rationnelles)

getent passwd | sed “s/home/maison/” première occurrence trouvées getent passwd | sed “s/home/maison/g” sur toute la ligne sed “s,5,CINQ,g” traitre, ici on a , comme séparateur

awk

Editeur texte en ligne de commande.

useradd test -d /home/test
getent passwd | grep test
usermod -d /maison/test test

getent passwd | grep home | awk -F: '{print "usermod -d /home/" $1 " -c\" "$5", Carmi\" "$1}' > /tmp/script

sans le paramètre -F:

getent passwd | grep home | cut -d: -f1 |  awk  '{print "chown admin."$1" /home/" $1 "/mail" }' > /tmp/script

Annexe RedHat

chkconfig httpd on
chkconfig --list

dans le r�pertoire /etc/rc.d

K param�tre STOP S param�tre START

Lancé au démarrage

Equivalent debian ou gentoo :

start-stop-daemon 
Usage:
  start-stop-daemon -S|--start options ... -- arguments ...
  start-stop-daemon -K|--stop options ...
  start-stop-daemon -H|--help
  start-stop-daemon -V|--version

Les répertoires, ref : http://perso.wanadoo.fr/mathias.linux.mandrake/linux

/tmp le répertoire temporaire /dev les devices

/proc <F4><F4» info mémoire, etc.. /proc/uptime –> nombre de seconde depuis le démarrage

free mémoire libre

/dev/shm zone de la mémoire reservé comme un disque

/home répertoires utilisateurs

/root home de root

/opt <F4> répertoires de programme (origine solaris)

/usr/local –> prog pour le super utilisateur de la machine ex : mkcd.bash

/usr/src –> source en C des applications et noyau

/usr/local/src –> idem

/var –> données divers

/var/lib –> données lib

/var/log –> données de log du système

/var/log/messages messages

/var/spool données temporaire, de transition de données

/var/run –> fichier qui contient le numéro de process d'un deamon

/var/lock –> fichier de lock pour ne pas lancer 2 fois une même application, la commande associée est :

lockfile

SYSTEM V

/etc/rc.d

/etc/init.d

machine en runlevel

S–> démarrer numéro d'ordre K–> arrêter numéro d'ordre

tune2fs –> options de journaux man option locst+found

dans /boot il y a : initrd.img –> mini noyau qui contient les modules de démarrage comme les DD scsi.

tune

Administration syst�me :

ps

ps -aux –forest (pour voir les fils)

avec -w on a tout la ligne

processus pere de tout les p�res =⇒ unit –> pid = 1

kill : envoie un signal

kill -9 (tuer)

kill -l tout les signaux possibles

kill 3 SIGQUIT (demande de sortir)

kill 2 SIGINT (demande une interruption)

kill 9 SIGKILL (tuer le + fort)

kill 1 SIGHUP (demande de rechager le fichier de conf en général)

kill -HUP “Numéro de proccess père”

dans /var/run/*.pid (fichier texte qui contient le PID du proccessus père)

Exemple:

s5382920 root # xmessage test&
[1] 26863 

[numero du job] numéro du proccessus

fg –> foreground premier plan fg %1

bg –> background arrière plan bg %1

nohup =⇒ permet de lancer une commande en la “détachant” du shell en cours.

top —> load average ” ” ” ” ” ”

CVS : mode Client Serveur

Commande : reposit / dépose

1ere connection :

cvs -d:pserver:bszizou@trinity.ac-grenoble.fr/home/data/cvs login 

pserver : mode de fonctionement Client/Serveur

cvs checkout . (récupérer)

cvs update (regarde le repertoire et le mets à jour)

cvs commit (par defaut tout ce qu'il y a dans le répertoire)

Rajout commentaire

$Id: $          (rajout un identifiant)

Si nouveau fichier ou repertoire :

cvs add test

cvs -commit -m "Un test"

cvs log
 
 quelques_commandes_bash.txt · Dernière modification: 2009/12/09 23:00 par froumi
 
Sauf mention contraire, le contenu de ce wiki est placé sous la licence suivante:CC Attribution-Noncommercial-Share Alike 3.0 Unported
Recent changes RSS feed Driven by DokuWiki