====== Le shell Bash de GNU Linux ====== ===== Introduction ===== Le shell Bash est une version améliorée du Shell Unix sh. Les commandes shell permettent d'administrer une machine, un parc de machines, un réseau, des parcs de réseaux. On peut regrouper les commandes shell dans des fichiers que l'on nomme des scripts. Tous les administrateurs réseaux « unix like » Unix, BSD, Linux, Mac OS X, utilisent le shell pour gérer leurs réseaux et créer des scripts. Le shell (mot anglais signifiant « coquille ») est un logiciel fournissant une interface pour un utilisateur. Le shell est l'interface utilisateur du système d'exploitation. http://fr.wikipedia.org/wiki/Shell_(informatique) http://www.tuteurs.ens.fr/unix/shell/ Le guide avancé d'écriture des scripts bash : livre de référence traduit en français http://abs.traduc.org/abs-fr/ ===== Serveur Linux sans interface graphique (sans X) ===== Si vous voulez installer un serveur GNU Linux, vous pourrez installer le noyau Linux et les paquets de base permettant de gérer avec le shell le serveur, ceci sans installer de serveur X c'est à dire sans interface graphique. Le serveur pourra être entièrement géré à distance avec Secure Shell (SSH) shell sécurisé ou par page web http ou https. ===== Les commandes et la programmation ===== Le shell peut se séparer en 2 parties. * Les commandes Unix * La programmation shell, avec des mots clefs : if, while, repeat, for, case, do, done … ==== Quelques commandes Unix. ==== **cd :** change directory, change de répertoire de travail. **cat :** pour visualiser un fichier texte, par exemple la liste des dépots : cat /etc/apt/sources.list . **ls :** liste des fichiers du répertoire de travail. On verra des ls spécifiques ensuite lspci, lsusb, lshw … === Les outils de recherche, de tri, de « découpe », de traitement de flux. === **grep :** recherche de terme dans un fichier ou une liste. **find :** recherche dans les répertoires, commande très puissante. **sort :** tri d'un fichier ou flux ; tr : Traduire ou éliminer des caractères **cut :** supprimer une partie de chaque ligne d'un fichier **sed :** éditeur de flux, outil très puissant et complexe pour traiter des textes, fichiers, flux ... cmd_Unix.html **//Exemple ://** on désire afficher le fichier .bashrc sans les lignes de commentaires commençant par #. - On affiche le fichier .bashrc avec la fonction cat ; dans un terminal taper cat .bashrc - Le fichier .bashrc sans les lignes qui commencent par # ; taper egrep -v '^#' .bashrc - On peut aussi enlever les lignes vides ; taper egrep -v '^(#|$)' .bashrc - On peut le faire avec sed ;taper sed "/^#/d;/^$/d" .bashrc ou sed "/#\|^$/d" .bashrc * le caractère ^ indique début de ligne * le caractère $ indique fin de ligne * le caractère | signifie ou logique * les caractères ^$ signifient une ligne vide : rien entre début et fin de ligne. Avec sed le caractère | doit être protégé avec \ === Entrées sorties et fichiers. === Sans précision l'entrée est le clavier et la sortie l'écran. //**Exemple :**// vous avez fait une commande que vous souhaitez conserver echo 'ma_commande ' >astuce.txt va écrire ma_commande dans le fichier astuce.txt, s' il existait il est écrasé sinon il est créé (commande >) et il ne contiendra que ma_commande, pour les commandes, il faut mieux mettre des simples quotes ' car les expressions ne seront pas interprétées. N'oubliez pas de mettre des commentaires avec par exemple après\\ echo « # explication de ma_commande blablabla » >> astuce.txt\\ >> ajoute la ligne # explication de ma_commande blablabla dans le fichier astuce.txt\\ Ici on peut utiliser les doubles quotes car les commentaires qui commencent par # ne sont pas interprétés. La commande < fichier.txt redirige l'entrée fichier.txt vers la commande, très utile pour les commandes indirectes. **Exercice :** exo1.html === Tube ou Pipe | === Le tube, ou pipe permet de chaîner des processus de sorte que la sortie d'un processus (stdout) alimente directement l'entrée (stdin) du suivant. Exemple : savoir si le paquet nano est installé. La liste des paquets est donné par dpkg -l , grep nano permet de rechercher nano dans un fichier ou un flux, dpkg -l |grep nano si la réponse est vide il n'est pas installé si il répond ii puis le nom du paquet, le paquet est installé. Explication : on aurait pu le faire en deux parties - dpkg -l >paquets_installés ; on met la sortie de dpkg -l (liste des paquets intallés) dans le fichier paquets_installés - grep nano paquets_installés ; on recherche le nom nano dans le fichier paquets_installés. ===== Éditeur de texte pour les serveurs sans X ou serveur géré en ssh ===== ==== Emacs ou Vim ==== Ce sont les deux éditeurs de texte les plus puissants, chacun ayant ses avantages. Chacun demande un minimum d'apprentissage pour la prise en main. ==== Nano ==== C'est un petit éditeur de texte simple très pratique pour travailler sans X. la seule chose à connaître pour commencer : ^ = la touche contrôle. Pour l'aide F1 ou ^G (Ctrl G) Pour les PC avec interface graphique, on peut écrire un fichier avec un éditeur de texte graphique et utiliser le copier coller évidemment. Il en existe plein gedit, kate, kwrite, mousepad mais aussi scite ... ===== Pages Man de manuel. ===== Pour toutes les commandes vous avez une aide qui se trouve dans les pages man . Man grep : Une aide de 400 lignes sur la commande de recherche grep. Sans oublier man bash et man bash-builtins pour les commandes internes. [[linux:debian_lenny |retour au menu]]