{{ :suivant.png?nolink&30|}} {{ :retour.png?nolink&30|}} [[raspberrypi:linux:bash|{{ :iconemaison.jpg?nolink&30|Sommaire Le shell Bash}}]] ===== BASH - Découvrir son système d'exploitation ===== {{ :raspberrypi:linux:bash.png?nolink&200|}} [Mise à jour le 13/3/2023] En cours de rédaction * **Sources** * Wiki Ubuntu-fr * Gestion des utilisateurs et des groupes en ligne de commande * Gérer les droits d'accès (propriétés et permissions) des fichiers et répertoires * **Ressources** * Manuel Linux en Français * Initiez-vous à Linux * Structure des fichiers et des dossiers * La console * Commandes Linux ==== Introduction ==== Le **shell** désigne un **interpréteur de lignes de commande**. Lorsque l’invite de commande s’affiche, l’utilisateur peut saisir une nouvelle ligne de commande. La ligne de commande regroupe **une ou plusieurs commandes** et se termine par un **retour à la ligne**. \\ Une **commande** est composée d’un **nom** qui décrit une action ou un programme, parfois suivie d’**arguments** qui précisent les **paramètres** de l’action à effectuer. # Exemple : affichage d'un calendrier # Remarque : n'est pas présent par défaut dans le Raspberry Pi, à installer avec sudo apt install ncal $ cal -m apr # nom : cal, option : m, argument d'option: apr Le shell Bash est en permanence associé à un répertoire dans lequel s’exécutent les commandes. Ce répertoire est appelé **répertoire courant**. ==== 1. La ligne de commande ==== {{ :raspberrypi:linux:invite2.png?nolink|}} === 1.1 L'invite de commande === Lorsque l'on démarre un terminal sur lequel le shell Bash est présent, on est accueilli avec l’**invite de commande** appelée **prompt** en anglais. {{ :raspberrypi:linux:invite.png?nolink |}} {{ :raspberrypi:linux:shell.jpg?nolink&120|}} ===1.2 Les commandes (généralités) === Le shell est une application qui sert d’**interface entre le noyau du système d'exploitation et l’utilisateur**. Il sert à exécuter des commandes qui proviennent d’un terminal (**mode interactif**) ou d’un fichier (**mode script**). Ces commandes peuvent être **internes** ou **externes** au shell. Les commandes externes font appel à des programmes séparés du shell tandis que les commandes internes sont exécutées par le shell. # La commande interne //type// suivie du nom d’une commande sert à indiquer le type de la commande # Exemple pi@Pi4Bp8Go:~ $ type echo man # Renvoie echo est une primitive du shell # echo est de type built-in (commande interne) man est /usr/bin/man # man est une commande externe située dans le répertoire /usr/bin Une commande (interne ou externe) est constituée par des mots séparés par des espaces. Le nombre d’arguments dépend de la commande et de l’action à effectuer par la commande. //Format// : **commande** **arg1** **arg2** ... **argn** //Exemples// : la commande **date** avec et sans arguments pi@Pi4Bp8Go:~ $ date mercredi 28 avril 2021, 17:16:16 (UTC+0200) pi@Pi4Bp8Go:~ $ date +%s 1619623002 # nombre de secondes écoulées depuis le 1e premier janvier 1970 Un argument peut être une **option**, il sera alors de la forme **-x** avec x la lettre identifiant l’option. Une lettre étant peu explicite, il est souvent possible d’identifier une option via **un ou plusieurs mots**. Elle sera alors préfixée de deux tirets hauts **--**. //Exemples// : la commande date avec une option pi@Pi4Bp8Go:~ $ date -u mercredi 28 avril 2021, 15:24:03 (UTC+0000) pi@Pi4Bp8Go:~ $ date --utc mercredi 28 avril 2021, 15:24:10 (UTC+0000) Pour qu’elle ait un sens, une **option** doit parfois être suivie d’une **valeur**, appelée **argument d’option**. //Exemples// : la commande cal (CALendar) pi@Pi4Bp8Go:~ $ cal -m apr # option: -m, valeur : apr Avril 2021 di lu ma me je ve sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 La valeur associée à l’option peut être spécifiée dans le même argument, mais séparée de l’identifiant d’option via un **caractère délimiteur**. //Exemple// : la commande **date** pi@Pi4Bp8Go:~ $ date --date="2021-04-28" # caractère délimiteur: = mercredi 28 avril 2021, 00:00:00 (UTC+0200) La norme **POSIX** (**P**ortable **O**perating **S**ystem **I**nterface) répond au besoin de compatibilité entre les systèmes d’exploitation qui se trouvent sur les différents équipements informatiques. Elle définit diverses interfaces d’outils, de commandes et d’interfaces pour la programmation en **langage C**. ==== 2. Trouver de l'aide ==== La documentation est fournie par les commandes elles-mêmes et l’utilisateur peut y accéder soit au travers de la commande, soit au travers d’utilitaires dédiés. * **Aide depuis la commande** La plupart des commandes disposent d’une **aide-interne** accessible avec **--help** ou **-h**. //Exemple// pi@Pi400mno:~ $ date --help Utilisation : date [OPTION]... [+FORMAT] ou : date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] * **La commande man** Les systèmes de type Unix disposent d’un outil de visualisation des manuels appelé **man** (MANual). La commande man interprète des fichiers de documentation 1 puis les affiche via le lecteur de fichier **less**. //Exemple// pi@Pi400mno:~ $ man date DATE(1) User Commands DATE(1) NAME date - print or set the system date and time SYNOPSIS date [OPTION]... [+FORMAT] date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][.ss]] DESCRIPTION Display the current time in the given FORMAT, or set the system date. etc. * **La commande apropos** **apropos** permet de lister les manuels dont la description comprend les mots passés en argument et donc de trouver une commande dont on ne connaît pas le nom. //Exemple// pi@Pi400mno:~ $ apropos encoding # recherche d'un convertisseur d'encodage bind_textdomain_codeset (3) - set encoding of message translations chardet (1) - universal character encoding detector chardet3 (1) - universal character encoding detector ... iconv (1) - convert text from one character encoding to another # c'est ce que l'on cherche * **La commande whatis** L’affichage de la description courte d’une commande s’obtient par la commande **whatis**. //Exemple// pi@Pi400mno:~ $ whatis apropos apropos (1) - Chercher le nom et la description des pages de manuel ==== 3. Système de fichiers et répertoire ==== ==== 4. Les utilisateurs, les groupes et les droits ==== Linux est un système **multi-utilisateur**. Cela signifie que plusieurs personnes peuvent travailler simultanément sur le même OS, en s'y connectant à distance notamment. * **Organisation des utilisateurs sous Linux** {{ :raspberrypi:linux:organisation.png?nolink&400 |}} * **Devenir super utilisateur** Pour passer de simple utilisateur à **super utilisateur**, on utilise la commande **sudo** (**S**ubstitute **U**ser **DO**) puis on entre le mot de passe super utilisateur. (**exit** pour revenir en simple utilisateur) //Exemple// sudo commande sudo su commande # su pour rester super utilisateur Seul le super utilisateur (**root**) peut créer des utilisateurs et des groupes. {{ :raspberrypi:linux:personne.jpg?nolink|}} === 4.1 Les utilisateurs === * **Source** * Wiki Ubuntu-fr : Gestion des utilisateurs et groupes en ligne de commande **Créer un utilisateur** Lorsque l'on crée un utilisateur, le répertoire personnel portant son nom est automatiquement créé : **/home/**//nom//. Un mot de passe est demandé. Pour des raisons de sécurité, ce qui est entré au clavier n'apparaît pas à l'écran. //Commande// sudo adduser nom_utilisateur **Supprimer un utilisateur** //Commandes// sudo deluser nom_utilisateur # Supprime l'utilisateur, mais pas son répertoire personnel sudo deluser --remove-home nom_utilisateur # Supprime l'utilisateur et son répertoire personnel **Changer le mot de passe d'un utilisateur** //Commande// sudo passwd nom_utilisateur **Afficher la liste des utilisateurs et des groupes** * **Source** : tuto.eu Le fichier **/etc/passwd** contient toutes les informations relatives aux utilisateurs (nom, mot de passe chiffré, UID, GID, nom complet, répertoire home utilisateur, connexion Shell (par défaut /bin/bash)). * **Liste des utilisateurs** //Exemple 1// cat /etc/passwd # ou less /etc/passwd si le fichier comprend plusieurs pages //Exemple 2// grep bash /etc/passwd | cut -f1 -d: # Filtrage et affichage des noms d'utilisateur ayant une connexion bash dans le fichier passwd {{ :raspberrypi:linux:groupe.png?nolink|}} === 4.2 Les groupes === Chaque utilisateur appartient à un groupe. Si on ne définit rien, un **groupe du même nom** que l'utilisateur est automatiquement créé. **Créer un groupe** //Commande// sudo addgroup nom_groupe //Exemple// sudo addgroup www-data **Mettre un utilisateur dans un ou plusieurs groupes** La commande **usermod** permet d'éditer un utilisateur. On utilise les paramètres : \\ * **-l** pour renommer l'utilisateur (il faudra également renommer son répertoire) * **-g** pour changer le groupe * **-G** pour mettre un utilisateur dans plusieurs groupes //Commandes// sudo usermod -g nom_groupe nom_utilisateur # place l'utilisateur nom_utilisateur dans le groupe nom_groupe sudo usermod -G goupe1,groupe2,groupe3 nom_utilisateur # place l'utilisateur nom_utilisateur dans # les groupes group1, groupe2 et groupe3 //Exemple// sudo usermod -g www-data ruche1 * **Lister le contenu d'un groupe** //Exemple// cat /etc/group # ou less /etc/group si le fichier comprend plusieurs pages # Exemples d'affichage # www-data:x:33:hickel, leguilloux, bailly, borracino, lefreteur, etc. sont dans le groupe www-data # tsin:x:1029:borracino,lefreteur sont dans le groupe tsin # borracino:x:1030 est dans son propre groupe **Supprimer un groupe** //Commande// delgroup nom_groupe **Afficher la liste des groupes** //Exemple// cat /etc/group | awk -F: '{print $ 1}' === 4.3 Gestion des droits === * **Source** * Wiki Ubuntu-fr - Gérer les droits d'accès (propriétés et permissions) des fichiers et des répertoires ==== 5.1 Traitement des fichiers texte ====