Notes prises lors d'un cours BASH donné par Bzizou
toto=coucou echo $toto
renvoie “coucou”.
declare -i compteur=0 echo $compteur 0
ici -i ===== integer
let compteur++ echo $compteur 1
expr 1+1 2 expr 2/*2 4
` Touches "ALTgr+7" compteur= `expr $compteur +1` echo $compteur
Recherche de chaine de caractere dans un fichier ou un flux via une redirection
egrep "^[0-9].*" nom fichier
. n'importe qu”elle carat�res * 0 ou plusieurs
plus d'info sur man perlre ( manuel des expression regulirere de PERL )
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
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
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
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
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 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)
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.
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
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.
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
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
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
/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 -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 ” ” ” ” ” ”
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)
$Id: $ (rajout un identifiant)
Si nouveau fichier ou repertoire :
cvs add test cvs -commit -m "Un test" cvs log