====== 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 source monautrescript # ou . monautrescript ===== Regexp - Expressions régulières / rationnelles ===== * [[http://www.grymoire.com/Unix/Regular.html|Tutoriel complet (en)]] * [[http://www.commentcamarche.net/php/phpreg.php3|Tutoriel sur phpmanuel (fr)]] * {{regexp.html.txt|Aide mémoire Adobe}} * [[http://www.siteduzero.com/tutoriel-3-14663-memo-pour-les-regex.html|Aide mémoire - Site du zéro]] * http://www.lumadis.be/regex/tuto_pcre.php - Excellent tutoriel PCRE ===== Liens ===== * [[http://tldp.org/LDP/abs/html/index.html|Advanced Bash scripting guide]] * [[http://www.c-sait.net/cours/scripts.php|Tutoriel]] * [[http://marcg.developpez.com/ksh/|Tutoriel Ksh]] ====== 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 2005­10­07 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) 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 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=test_ext3fs bs=1M count=100 mkfs.ext3 test_ext3fs losetup /dev/loop1 test_ext3fs * Utiliser la cryptographie sur un fichier # On charge le module de cryptage modprobe cryptoloop losetup -e aes /dev/loop0 test_ext3fs # 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 test_ext3fs /mnt/virtualfs ==== 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 ==== * [[http://doc.ubuntu-fr.org/uuid_et_label|UUID et Label ]] * https://help.ubuntu.com/community/DataRecovery ===== 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) * [[http://www.shellunix.com/awk.html|Tutoriel (fr)]] ==== 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/' new * Supprimer des lignes vides en fin de fichier find -name "*.php" | xargs sed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}' === Liens === * [[http://www.english.uga.edu/humcomp/perl/sedtutorial.html|Tutoriel court(en)]] * [[http://www.gnulamp.com/sed.html|Tutoriel semi-complet (fr)]] * [[http://www.grymoire.com/Unix/Sed.html#uh-49|La référence sur sed]] ==== xargs ==== Exécute des commandes système en prenant l'entrée standard comme liste d'objets * Exemples #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 ==== 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 $ 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 ==== 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 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 ==== 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 /proc/ /media/disk/ /tmp/ /dev/ /sys/ /etc/fstab /var/tmp/ /var/cache/ */cache/* */Cache/* /var/lock/ /var/run/ /var/spool/ * commande rsync -uav --delete --exclude-from=/home/murielle/.rsync/exclude.lst / /media/disk/ === Liens === * [[http://www.sanitarium.net/golug/rsync_backups.html|Sauvegardes incrémentales (en)]] * [[http://olivier.sessink.nl/publications/hotcloning/index.html|Hotcloning(fr)]] ==== 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 ==== * [[http://www.lea-linux.org/cached/index/Les_sauvegardes.html|Les sauvegardes sur Lea-linux]] * [[http://www.securiteinfo.com/conseils/sauvegardes.shtml|Politique de sauvegarde ]] ===== Utilisateurs et groupes ===== ==== groupadd ==== * Créer un groupe groupadd web #en précisant le gid (supérieur à 500, sinon réservé au système) groupadd –g gid groupe ==== useradd ==== * Créer un utilisateur, fichier de conf : /etc/adduser.conf, fichier squelette (contenant une arborescence type): /etc/skel ## 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 2008­10­15 –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 ==== passwd ==== * Changer le mot de passe d'un utilisateur #en tant que root passwd #en tant qu'utilisateur passwd #Changer le mot de passe dans un script (pour des créations en série) echo compte:motdepasse | chpasswd ==== 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. ===== liens ===== * [[http://tldp.org/LDP/abs/html/index.html|Toutes les commandes sur tldp]] * [[http://winsa.free.fr/dotclear/index.php?2007/02/20/201-les-principales-commandes-de-linux|commandes]] * [[http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/TDTP2003/tp03.html|tutoriel]] * {{memento-commandes.pdf|}} - [[http://reseau.erasme.org/IMG/command_memento_fr.pdf|Aide mémoire]]