**Ceci est une ancienne révision du document !**
Table des matières
Aide mémoire Bash et commandes systèmes
Bash
Raccourcis clavier
Ctrl + A Go to the beginning of the line you are currently typing on Ctrl + E Go to the end of the line you are currently typing on Ctrl + L Clears the Screen, similar to the clear command Ctrl + U Clears the line before the cursor position. If you are at the end of the line, clears the entire line. Ctrl + H Same as backspace Ctrl + R Let’s you search through previously used commands Ctrl + C Kill whatever you are running Ctrl + D Exit the current shell Ctrl + Z Puts whatever you are running into a suspended background process. fg restores it. Ctrl + W Delete the word before the cursor Ctrl + K Clear the line after the cursor Ctrl + T Swap the last two characters before the cursor Esc + T Swap the last two words before the cursor Alt + F Move cursor forward one word on the current line Alt + B Move cursor backward one word on the current line Tab Auto-complete files and folder names
Evaluer une expression
let z=z+1 z=$(($z + 1))
Boucles
for
for i in * ; do # * retourne la liste des fichiers
echo $i
done
for i in `cat liste` ; do # i va prendre les valeurs
#contenues dans le fichier “liste”
ls $i
done
for i in 1 2 3 ; do # i prend successivement les valeurs 1, 2 et 3
echo $i
done
for ((i=0;i<10;i=i+1));do echo $i; done
until
a=0
until [ $a == 10 ] ; do
let a=a+1; echo $a;
done
while
while
Commande_Test
do
Commandes
done
I/O
read
echo n "Entrez votre nom :" read nom echo $nom
select
select choix in \
"Choix A" \
"Choix B";
do
case $REPLY in
1) echo "$CHOIX > $REPLY";;
2) echo "$CHOIX > $REPLY";;
*) echo "Vous avez tapé n'importe quoi !";;
esac
done
Tests
if test 3 eq 3 ... if [ 3 eq 3 ].... if test $1 == $2 ... if [ $1 == $2 ]...
Tests sur les fichiers
- -d, si c'est un répertoire
- -e, si le fichier existe
- -f, si le fichier existe et si c'est un fichier standard
Tests sur les chaînes
- s1 == s2, si les chaînes s1 et s2 sont identiques
- s1 != s2, si les chaînes sont différentes
if [ foo == foo ]; then echo true; fi
Tests sur les entiers
- n1 eq n2, si n1 est égal à n2
- opérateurs ne, eq, gt, lt, le ge (not equal, equal, greater, lower, lower or equal, greater or equal)
Variables spéciales
- Les paramètres sont passés dans $1, $2…$n
- $@, donne la liste des paramètres
- $#, donne le nombre de paramètres
- $$, donne le numéro (PID) du script
- $0, donne le nom du script
- $?, donne la valeur de retour d'un script ou d'une fonction
Variables d'environnement
- Lister les variables d'environnement
env #ou# printenv #ou# export
- Fichier de configuration global. Contient certaines variables d'environnement valables pour tous les utilisateurs du système.
cat /etc/profile
- Fichiers de configuration utilisateur
$HOME/.bash_profile et $HOME/.bashrc
- Placer une variable dans l'environnement (exemple : PS1, modèle de prompt).
PS1=“[\u@\h \w]\\$ ” export PS1
- Utiliser les variables d'un script dans un autre script <code bash> source monautrescript # ou . monautrescript </code>
Regexp - Expressions régulières / rationnelles
- http://www.lumadis.be/regex/tuto_pcre.php - Excellent tutoriel PCRE
Liens
Commandes
Démarrage
En général les options de démarrage sont dans le fichier /etc/inittab, exemple :
# Default runlevel. The runlevels used by Mandrakelinux are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault:
Dans ubuntu seulement, depuis 6.06 c'est upstart qui gère les niveaux de démarrage, répertoire /etc/event.d/
- Connaître le runlevel
runlevel
- Changer le runlevel à 2
telinit 2
- Menu de démarrage
cat /boot/grub/menu.lst
Arrêt
Ne pas utiliser les commandes halt et reboot
shutdown
- shutdown arrête dans l'ordre les services, démonte les partitions, envoie un message d'arrêt, coupe l'alimentation.
#halt shutdown -h now #reboot shutdwown -r now #halt avec message d'avertissement et délai shutdown -h+10 "les services réseaux vont s’arrêter et reprendre dans 2 heures"
Dépannage
Créer une disquette de démarrage
mkbootdisk --device /dev/fd0 `uname -r`
Disquette de root ou rescue
#Recupérer l'image de la disquette sur le cdrom d'install. Il s'agit d'un fichier ayant l'extension .img souvent dans le répertoire images mkbootdisk --device /dev/fd0 `uname -r` dd if=rescue.img of=/dev/fd0 bs=1440
Mot de passe de root oublié
- booter avec les disquettes de boot et de root ou en mode single, le système ne vous demandera pas de mot de passe,
- ouvrez une session root (pas besoin de mot de passe),
- monter le disque dur exemple
root:~# mount -t ext3 /dev/sda1 /mnt
- modifiez le fichier /mnt/etc/passwd. Attention, ne touchez pas directement au fichier /etc/passwd si les mots de passes sont cachés. Il faut vous “chrooter”.
cd /mnt chroot . # Là utiliser la commande passwd. passwd
Démarrer en single-user
Au message boot : entrez
linux single root=/dev/hdxx initrd=initrd-`uname -r`.img #Charger le clavier : loadkeys /usr/share/keymaps/i386/azerty/fr-latin1.kmap.gz #monter la racine : (-w = read+write ; -n = ne pas écrire dans /etc/mtab) mount -w -n -o remount /
Système de fichiers
mkdir
- Créer un répertoire en créant les parents en même temps s'ils n'existaient pas
mkdir -p /chemin/de/mon/répertoire
cp
- copier en conservant les droits
cp -cp
rm
- supprimer un répertoire non vide
rm -Rf répertoire
- Supprimer uniquement les fichiers cachés et tous les sous-répertoires (Les ?? servent à exclure le répertoire parent)
rm –rf .??*
chmod
- changer les droits d'accès (u:user, g: group, o:other)
chmod -R 775 ./* #Donner tous les droits pour utiliser avec Apache find LeRepertoire -type d | xargs chmod a+x find LeRepertoire -type f | xargs chmod a-x,+r
droits ugoa
- Sticky bit
drwxrwxrwt 15 root root 8192 20051007 18:05 tmp
Seul le propriétaire de chaque fichier de ce répertoire pourra supprimer le fichier en question.
- suid, sgid
Permet de donner à un programme les droits de l'utilisateur ou du groupe “root” lors de son exécution. Remplace le “x” par un “s”
#exemple
- rwsr-xr-x 1 root root 29104 2007-05-18 11:59 /usr/bin/passwd
- Valeurs des droits
| r | w | x | |
| Propriétaire | 400 | 200 | 100 |
| Groupe | 40 | 20 | 10 |
| Autres | 4 | 2 | 1 |
| suid | 4000 |
| sgid | 2000 |
| sticky | 1000 |
Remarque : pour un répertoire le droit d'exécution permet d'accéder au répertoire mais pas de le lister.
chown, chgrp
- changer le propriétaire
chown user.group fichier
- changer le groupe
chgrp groupe fichier
du
- Occupation disque
#Occupation du répertoire courant du -hs #Occupation des fichiers et répertoires courants for i in *; do du -hs $i; done;
ln
- Créer des liens
ln Fichier.origine Nom.lien # crée un lien physique ln -s Fichier.origine Nom.lien # crée un lien symbolique
fuser
- Lister les pid de processus utilisant un fichier donnée
fuser 139/tcp #Donne le pid du processus utilisant le port 139 en tcp
dd
- Créer un fichier vide de 100M
dd if=/dev/zero of=test_ext3fs bs=1M count=100
Partitions
df
- (disk free) : espace libre sur chaque partition des disques montés, informations en “human readable”.
df -h
fdisk
- Lister tous les disques (montés et non montés)
fdisk -l
blkid
- Lister les partitions avec leur UUID
blkid
mount / umount
- Lister les disques montés
mount
- Monter un lecteur CD ou DVD
mount -t iso9660 -r /dev/hda /mnt/cdrom
- Monter et démonter une image iso (le périphérique loop sert à monter des systèmes de fichiers virtuels) <code> cd /usr/local/fs # Copie ou téléchargement de l’image du CDROM dans un fichier cp /dev/cdrom image.iso # calcul de l’empreinte digitale de l’image du CDROM et de l’image # vérifiez que les deux empreintes sont identiques # c’est une bonne habitude à prendre. md5sum /dev/cdrom/ && md5sum image.iso mkdir /mnt/virtualcdrom mount -o loop -t iso9660 -v image.iso /mnt/virtualcdrom ls /mnt/virtualcdrom umount -d /mnt/virtualcdrom </code>
Inscription dans fstab
/usr/local/fs/image.iso /ou/vous/voulez iso9660 loop,noauto,ro,exec 0 0
mkisofs
- Créer une archive au format iso
cd /tmp && mkisofs -o ‘date +%d-%B-%Y‘-backup.home.iso /home
losetup
- Attribuer le type de périphérique loop à un fichier
dd if=/dev/zero of=testext3fs bs=1M count=100 mkfs.ext3 testext3fs losetup /dev/loop1 test_ext3fs
- Utiliser la cryptographie sur un fichier <code> # On charge le module de cryptage modprobe cryptoloop losetup -e aes /dev/loop0 testext3fs # Il faudra saisir un mot de passe mkfs.ext3 /dev/loop0 mount -t ext3 -v /dev/loop0 /mnt/virtualfs rsync -av /home/ /mnt/virtualfs/home find /mnt/virtualfs umount /mnt/virtualfs losetup -d /dev/loop0 # Le système est démonté. Pour le lire il faudra # le remonter et entrer le mot de passe. mount -t ext3 -v -o loop,encryption=aes testext3fs /mnt/virtualfs </code>
cfdisk
- changer les partitions d'un disque (attention efface le contenu !)
cfdisk /dev/hda
mkfs
- Formater une partition en reiserfs
mkfs -t reiserfs /dev/hda1
/etc/fstab
- Points de montage des partitions
cat /etc/fstab
Liens
Traitement des fichiers texte
awk
- Exemples
awk -F ":" '{ $2 = "" ; print $0 }' /etc/passwd # imprime chaque ligne du fichier /etc/passwd après avoir effacé le deuxième champs awk 'END {print NR}' fichier # imprime le nombre total de lignes du fichiers awk '{print $NF}' fichier # imprime le dernier champs de chaque ligne who | awk '{print $1,$5}' # imprime le login et le temps de connexion. awk 'length($0)>75 {print}' fichier # imprime les lignes de plus de 75 caractères. (print équivaur à print $0)
cut
Fait des coupes (sombres) dans les lignes qui lui sont transmises
- Afficher la liste des comptes système cat /etc/passwd | cut -d“:” -f1
sed
- Remplacer day par night dans old vers new
sed 's/day/night/' <old >new
- Supprimer des lignes vides en fin de fichier
find -name “.php” | xargs sed -i -e :a -e '/^\n$/{$d;N;ba' -e '}'
Liens
xargs
Exécute des commandes système en prenant l'entrée standard comme liste d'objets
- Exemples <code> #Liste toutes les droits du programme passwd which passwd | xargs ls -al #Faire la liste alphabétique sur une seule ligne des utilisateurs du système cut -d: -f1 < /etc/passwd | sort | xargs echo </code>
Découpage de chaînes
Bash possède de nombreuses fonctionnalités pour découper des chaînes de caractères. L'une des plus pratiques est basée sur des motifs. La notation ## permet d'éliminer la plus longue chaîne en correspondance avec le motif :
$ Var='tonari no totoro'
$ echo ${Var##*to}
ro
ici le motif est *to, et la plus longue correspondance “tonari no toto”1. Cette forme est utile pour récupérer l'extension (suffixe) d'un nom de fichier :
$ F='rep/bidule.tgz'
$ echo ${F##*.}
tgz
La notation # (un seul #) est similaire mais élimine la plus courte chaîne en correspondance :
$ Var='tonari no totoro'
$ echo ${Var#*to}
nari no totoro
De façon similaire, on peut éliminer la fin d'une chaîne :
$ Var='tonari no totoro'
$ echo ${Var%no*}
tonari
Ce qui permet de supprimer l'extension d'un nom de fichier :
$ F='rep/bidule.tgz'
$ echo ${F%.*}
rep/bidule
% prend la plus courte correspondance, et %% prend la plus longue :
$ Y='archive.tar.gz'
$ echo ${Y%.*}
archive.tar
$ echo ${Y%%.*}
archive
Hardware
lshw
- Lister la config matérielle
lshw | less
lsusb
- Lister les périphériques usb connectés
lsusb
lspci
- Lister les composants pci
lspci
paquets
dpkg
- installer un fichier .deb
dpkg –install fichier.deb
apt
- réparer des dépendances non résolues
apt-get -f install
- Sources d'apt
cat /etc/apt/sources.list
Programmes
symbole &
- Lancer un programme en tâche de fond
macommande &
jobs
- Lister les travaux en cours
jobs
fg, bg
- Passer du premier plan à l'arrière plan et réciproquement, exemple <code> $ sleep 20 #On tape [ctrl]+z dans la foulée et la commande est mise en pause [1]+ Stopped sleep 20 $ bg 1 #On la redémarre en arrière plan [1]- sleep 20 & $ fg 1 #On la repasse en premier plan </code>
nohup
- Lancer un programme insensible aux HangUPs et en tâche de fond
nohup macommande > fichier.log & #Redirige également les messages d'erreur vers le néant nohup macommande > /dev/null 2>&1 &
ps, pstree, pidof, top
- Lister les processus <code bash> ps # liste des processus du terminal courant. ps -u utilisateur # liste des processus appartenant à l’utilisateur user. # liste de tous les processus du système. ps -ef ps aux # (syntaxe BSD) pstree | less # Affiche l'arborescence des processus pidof postgres # Affiche les pid du service postgres top # Affiche une liste dynamique des processus </code>
Kill
Tuer ou envoyer des signaux à des processus
kill 546 #Tenter de détruire le processus n°546 kill -9 546 #Forcer la destruction du processus n°546 kill -15 -1 #Tente de détruire tous les processus de l'utilisateur courant kill -9 -1 #Force la destruction de tous vos processus kill `cat /var/run/squid.pid` #supprime le processus squid sur la base de son pid déclaré kill -CONT pid #Demander à un procesus de redémarrer
Killall
- Relancer un service sans changer son PID (Il relit ses fichiers de configuration)
killall -HUP service
- Tuer un processus dont on connait le nom
killall -9 service
réseau
- Connaître les machines actives sur le réseau local (ping de broadcast)
ping 192.168.1.255 - b
- Connaître les connexions actives et inactives
netstat -taupe | sort netstat -a | grep monservice
- Liste des ports prédéfinis
cat /etc/services
- Liste des alias de noms d'hôtes
cat /etc/hosts
- tester les ports ouverts
nmap adresseip nmap adresseip -p port
- Connaître les fichiers réseau ouverts
lsof -Pi
- Tracer une adresse IP
traceroute adresseIP
sauvegardes
Avec Tar
- décompresser en tar et gzip
tar xzvf cible.tgz
- Compresser en tar gzip
tar czvf cible.tgz source
- Consulter les fichiers de l'archive
tar tzvf archive.tgz
- Faire une sauvegarde de la distribution située en hda1 (source) vers hda2 (cible).
Passez en root :
su
Montez la cible en /mnt/disk par exemple :
mount /dev/hda2 /mnt/disk
Utilisez l'option -t pour préciser le type du système de fichiers si vous rencontrez un problème.
Placez-vous dans le répertoire cible :
cd /mnt/disk
Lancez la copie de la source :
(cd / ; tar cf - *) | tar xvf
Avec rsync
- fichier exclude.lst <code> /proc/ /media/disk/ /tmp/ /dev/ /sys/ /etc/fstab /var/tmp/ /var/cache/ /cache/ /Cache/ /var/lock/ /var/run/ /var/spool/ </code>
- commande
rsync -uav –delete –exclude-from=/home/murielle/.rsync/exclude.lst / /media/disk/
Liens
Avec cpio
- Créer une archive sur disquette
ls Document1 Photo1 Diaporama1 | cpio –ocvB > /dev/fd0
- Consulter l'archive
cpio tv < archive1
- Ouvrir l'archive
cpio i < archive1
Avec gzip
- Compresser et décompresser
#Compresser gzip docu gzip -9 docu #Précise le niveau de compression le plus élevé #Décompresser gzip -d docu.gz
Avec dd
- copie d'une disquette
dd if=/dev/fd0 of=Disquette
- Sauvegarder et restaurer le MBR (Master Boot Record)
dd if=/dev/hda of=sauve.mbr count=1 bs=512 dd if=sauve.mbr of=/dev/hda
liens
Utilisateurs et groupes
groupadd
- Créer un groupe <code> groupadd web #en précisant le gid (supérieur à 500, sinon réservé au système) groupadd –g gid groupe </code>
useradd
- Créer un utilisateur, fichier de conf : /etc/adduser.conf, fichier squelette (contenant une arborescence type): /etc/skel <code bash> ## Créer lutilisateur ulysse avec un commentaire, un répertoire home spécial ##+ une date dexpiration et un délai de 8 jours avant la désactivation, ##+ appartenant au groupe principal ulysse et aux groupes secondaires web et ##+ formateurs. Loption -m permet de créer le répertoire home sil nexiste pas. useradd –c “ceci est mon premier compte” –d /home/formation/ulysse –e 20081015 –f 8 –g ulysse –G web,formateurs –m ulysse
En précisant l'uid (supérieur à 100 sinon réservé au système)
useradd –u uid login </code>
passwd
- Changer le mot de passe d'un utilisateur <code> #en tant que root passwd <nomutilisateur> #en tant qu'utilisateur passwd #Changer le mot de passe dans un script (pour des créations en série) echo compte:motdepasse | chpasswd </code>
usermod / userdel
- Ajouter un groupe à un utilisateur
usermod -a -G nouveau-groupe nom_utilisateur
- Supprimer un compte utilisateur avec son répertoire personnel et ses fichiers
userdel -r nom_utilisateur
w, who, id
- w liste les utilisateurs et ce qu'ils font
- who liste les utilisateurs
- id indique les groupes d'un utilisateurs.
