Script d'administration Linux
Script d'administration Linux
Ce script entièrement rédigé pour ceux qui souhaitent approfondir leurs connaissances en scripting Linux. Vous pouvez reprendre des briques de code, l'améliorer, il est là pour ça !
NOTA :
- Il se peut qu'il reste des caractères spéciaux.
- L'indentation des notes peut être décalée, elles sont commentées par le #
#!/bin/bash #********************************************************************************* #************************************* SCRIPT D'ADMINISTRATION Version 1.2 *********** #********************************************************************************* # # Notes : # # ce script peut être modifié en implémentant de nouvelles fonctions # l'indentation doit être claire et les commandes commentées # le menu principal d'administration est en fin de script # ce script ne peut-être exécuter qu'en tant que root # en cas de rajout de fonction penser à rappeler la fonction dans le menu principal ou dans le sous menu auquel # elle est implémentée # en cas de modification l'interface doit restée au maximum intuitive # # # # # #************************************************************************************* #***********************************************Fonction gestion des utilisateurs #************************************************************************************* function gestion_utilisateur () { function creation_supp_utilisateur () { # fonction creation_supp_utilisateur echo -e " \033[31m Supprimer ou créer un utilisateur ? \033[00m" echo " Taper x pour supprimer / Taper c pour créer :" read choix if [ $choix = "c" ] ; then echo "Entrer le login de l'utilisateur souhaité :" read user adduser -a $user 2>/dev/null # 2>/dev/null redirection vers la if [ $? -eq 0 ] # poubelle de la commande précédente then # si le résultat est faux echo -e "\033[31m L'utilisateur $user à bien été créé ! \033[00m" else echo -e "\033[31m Echec, l'utilisateur $user n'a pas été créé, vérifier vos données... \033[00m" fi echo "Appuyer sur la touche <Entrée> pour revenir au menu..." read touche # lecture de la touche entrée case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac else if [ $choix = "x" ] ; then echo "Donner le nom de l'utilisateur à supprimer :" read utildel userdel -r $utildel 2>/dev/null # suppression avec userdel -r if [ $? -eq 0 ] # et vérification then echo -e "\033[31m La suppression de l'utilisateur $utildel est confirmée \033[00m" else echo -e "\033[31m Echec, de la suppression de l'utilisateur $utildel, vérifier vos données... \033[00m" fi echo "Appuyer sur la touche <Entrée> pour revenir au menu..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac else exit 0 fi fi menu_utilisateur # retour au sous menu de la fonction } function creation_supp_group () { echo -e " \033[31m Supprimer ou créer un groupe ? \033[00m" echo " Taper x pour supprimer / Taper c pour créer :" read choix if [ $choix = "c" ] ; then echo "Entrer le nom du groupe souhaité :" read group groupadd $group 2>/dev/null if [ $? -eq 0 ] then echo -e "\033[31m Le group $group a bien été créé ! \033[00m" else echo -e "\033[31m Echec, le group $group n'a pas été créé, vérifier vos données... \033[00m" fi echo "Voulez-vous vérifier en regardant le fichier /etc/group ? (y/n)" read rep if [ $rep = "y" ] ; then vi /etc/group # vi permet d'éditer et cat est else # plus adapté pour cette echo "Appuyer sur la touche <Entrée> pour revenir au menu..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_utilisateur fi else if [ $choix = "x" ]; # deuxième partie du choix then echo "Donner le nom du groupe à supprimer :" read group groupdel $group2>/dev/null # suppression avec groupdel if [ $? -eq 0 ] then echo -e "\033[31m La suppression du group $group est confirmée \033[00m" else echo -e "\033[31m Echec, de la suppression du group $group, vérifier vos données... \033[00m" fi echo "Voulez-vous vérifier en regardant le fichier /etc/group ? (y/n)" read rep if [ $rep = "y" ] ; then vi /etc/group else echo "Appuyer sur la touche <Entrée> pour revenir au menu..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_utilisateur # retour au menu de la sous fonction fi else exit 0 fi fi menu_utilisateur # rappel du sous menu de la fonction } function voir_utilisateur () { who -q # montre tous les logins des utilisateurs echo "Appuyer sur la touche <Entrée> pour continuer..." # connectés read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_utilisateur } function ajout_user_samba () { echo "Donner le nom de l'utilisateur à implémenter à Samba :" read nom smbpasswd -a $nom 2>/dev/null # rajout de l'utilisateur à samba par if [ $? -eq 0 ] # smbpasswd et vérification then echo -e "\033[31m L'utilisateur $nom a bien été rajouté à Samba \033[00m" else echo -e "\033[31m Echec l'utilisateur $nom n'a pas été rajouté à Samba, vérifier le nom... \033[00m" fi echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_utilisateur } function ajout_user_group () { echo "Donner le nom de l'utilisateur à rajouter dans un groupe :" # Note : l'interface doit être intuitive read nom echo "Donner le nom du groupe dans lequel vous voulez implémenter cet utilisateur :" read group adduser $nom $group 2>/dev/null # rajout avec adduser d'un utilisateur à if [ $? -eq 0 ] # un groupe then echo -e "\033[31m L'utilisateur $nom a bien été rajouté au groupe $group \033[00m" else echo -e "\033[31m Echec l'utilisateur $nom n'a pas été rajouté au groupe $group, vérifier vos données... \033[00m" fi echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_utilisateur } function capacite_user () { echo "La taille des dossiers utilisateurs est de :" du -s -h /home/* echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_utilisateur } function Menu_principal () { Menu } function menu_utilisateur () { # menu de la sous fonction clear # "gestion des utilisateurs" echo "" echo -e "\033[36mProjet Linux eXia 2008 \033[00m" echo -e " \033[36m3ème année RIR \033[00m " echo -e " \033[37m________________________________\033[00m " echo -e " \033[37m| Gestion des utilisateurs |\033[00m " echo"" echo -e "\033[33m*** MENU *** :\033[00m" echo"" echo "1 - Créer / Supprimer un utilisateur" echo "2 - Créer / Supprimer un groupe" echo "3 - Voir les utilisateurs connectés" echo "4 - Rajouter un utilisateur à Samba" echo "5 - Rajouter un utilisateur à un groupe" echo "6 - Voir la taille des dossiers des utilisateurs" echo "7 - Revenir au menu Principal" echo "" echo "Entrez votre choix :" read CHOIX # lecture du choix et appel case $CHOIX in # de la fonction concernée 1)creation_supp_utilisateur;; 2)creation_supp_group;; 3)voir_utilisateur;; 4)ajout_user_samba;; 5)ajout_user_group;; 6)capacite_user;; 7)Menu_principal;; *)exit 0;; esac } menu_utilisateur } # FIN de la sous fonction # gestion_utilisateur #********************************************************************************** #******************************************************Fonction tuer un processus #********************************************************************************** function tuer_proc () { ps ax --sort=tty,pid | more # défilements des processus petit à petit echo " VEUILLEZ TAPER LE(S) "PID" DU(DES) PROCESS A TUER: " # par l'utilisation de |more read PROCESS # lecture de la saisie avant la boucle POUR for TRUC in $PROCESS; do kill -9 $TRUC 2>/dev/null # arrêt des processus par kill -9 if [ $? -eq 0 ] then echo -e "\033[31m Le(s) processus $PROCESS on été arrêtés \033[00m" else echo -e "\033[31m Echec le(s) processus $PROCESS n'on pas été arrêtés, vérifier le PID \033[00m" fi done echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac Menu } # *********************************************************************************** # *******************************************Fonction Récupérer les processus # *********************************************************************************** function recuperer_processus () { ps -aux >> proccessus_du_$(date +%d_%m_%y).log # récup et supp de l'ancien fichier de log par >> echo -e "\033[31m Le fichier Log de récupération des processus a été créé sur le bureau \033[00m" echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac Menu } # *********************************************************************************** # ****************Fonction sauvegarder / rechercher par taille / nom fichier ou répertoire # *********************************************************************************** function sauv_recherche_fichier () { function sauv_resol_conf () { rsync -a /etc/resolv.conf /home/dyllan/Bureau/sauv_resol.conf_du_$(date +%d_%m_%y).log # utilisation de rsync pour une echo -e "\033[31m Le fichier resolv.conf du $(date +%d_%m_%y) est bien sauvegardé sur le bureau \033[00m" # sauvegarde distante mais non echo "Appuyer sur la touche <Entrée> pour continuer..." # présentée ici read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_sauv } function sauv_suppr_autre() { echo -e " \033[31m Supprimer ou Sauvegarder ? \033[00m" echo " Taper x pour supprimer / Taper s pour sauvegarder :" read choix if [ $choix = "s" ] ; then echo "Entrez le chemin du repertoire à sauvegarder" # demande du chemin relatif pour la supp ou read chemin # la sauvegarde echo "Entrez le chemin de l'endroit où vous voulez le sauvegarder" read dest cp -r $chemin $dest 2>/dev/null # copie du répertoire et tous les fichiers if [ $? -eq 0 ] # par le rajout du -r pour récursif then echo -e "\033[31m La sauvegarde a été réalisée \033[00m" else echo -e "\033[31m Echec, la sauvegarde n'a pas été réalisée, vérifier vos données... \033[00m" fi echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac else if [ $choix = "x" ]; # 2ème partie du choix : la suppression then echo "Entrez le chemin du repertoire à supprimer" read chem rm -r $chem 2>/dev/null if [ $? -eq 0 ] then echo -e "\033[31m La suppression de $chem est confirmée \033[00m" else echo -e "\033[31m Echec de la suppression de $chem, vérifier vos données... \033[00m" fi echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac else exit 0 fi fi menu_sauv } function creer_rep () { echo "Quel est le nom du répertoire ? (tapez le nom) :" read nom if test -x $nom ; then echo -e "\033[31m Echec, le répertoire existe déjà !\033[00m" else mkdir "$nom" chmod 0733 $nom echo -e "\033[31m Le dossier $nom a été créé avec les droits sur le bureau \033[00m" fi echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_sauv } function recherche_taille () { echo -e "\033[31m La recherche est orientée supérieure ou inférieure à la taille du fichier ? \033[00m" echo " Taper s pour supérieure / Taper i pour inférieure :" read choix if [ $choix = "s" ] ; then echo "Donner la taille minimum (en kilo):" read taille echo -e "\033[37m Résultat avec une taille minimum de $taille kilo :\033[00m" find /* -size +$taille -print # recherche par taille orientée supérieure else # donc demande d'une taille minimum if [ $choix = "i" ]; then echo "Donner la taille maximum (en kilo):" read taille echo -e "\033[37m Résultat avec une taille maximum de $taille kilo :\033[00m" find /* -size -$taille -print # recherche par taille orientée inférieure else # donc demande d'une taille max exit 0 fi fi echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_sauv } function recherche_nom () { echo " Quel est le fichier ou répertoire que vous souhaitez rechercher ?" read nom_fic echo -e "\033[37m Résultat de votre recherche :\033[00m" find /* -name $nom_fic # recherche dans tout le / par le nom echo "Appuyer sur la touche <Entrée> pour continuer..." # cette recherche peut prendre du temps read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac menu_sauv } function Menu_principal () { # retour au menu Principal du script Menu } function menu_sauv () { clear echo "" echo -e "\033[36mProjet Linux eXia 2008 \033[00m" echo -e " \033[36m3ème année RIR \033[00m " echo -e " \033[37m______________________________\033[00m " echo -e " \033[37m| Sauvegarde et Recherche |\033[00m " echo"" echo -e "\033[33m*** MENU *** :\033[00m" echo"" echo "1 - Sauvegarder le fichier resolv.conf" echo "2 - Sauvegarder / Supprimer un fichier ou répertoire" echo "3 - Créer un répertoire" echo "4 - Recherche d'un fichier / répertoire par sa taille" echo "5 - Recherche d'un fichier / répertoire par son nom" echo "6 - Revenir au menu Principal" echo "" echo "Entrez votre choix :" read CHOIX case $CHOIX in 1)sauv_resol_conf;; 2)sauv_suppr_autre;; 3)creer_rep;; 4)recherche_taille;; 5)recherche_nom;; 6)Menu_principal;; *)exit 0;; esac } menu_sauv } #******************************************************************************** #***********************************************Fonction Service Networking #******************************************************************************** function networking () { function restart () { /etc/init.d/networking restart # redémarrage du service networking echo "revenir au menu ? [y/n]" read reponse if [ $reponse = "y" ] ; then menu else echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac Menu fi } function stop () { /etc/init.d/networking stop # arrêt du service networking par stop echo "revenir au menu ? [y/n]" read reponse if [ $reponse = "y" ] ; then menu else echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac Menu fi } function start () { # redémarrage du service networking par /etc/init.d/networking start # start echo "revenir au menu ? [y/n]" read reponse if [ $reponse = "y" ] ; then menu else echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac Menu fi } function edit () { vi /etc/resolv.conf # vi permet d'éditer en ligne de commande clear # le fichier resolv.conf echo"" echo "Revenir au menu Administration du service Networking ? [y/n]" read reponse if [ $reponse = "y" ] ; then menu else echo "Appuyer sur la touche <Entrée> pour continuer..." read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac Menu fi } function Menu_principal () { Menu } function menu () { # configuration de l'apparence et de la clear # syntaxe du menu d'administration echo "" # du service Networking echo -e "\033[36mProjet Linux eXia 2008 \033[00m" echo -e " \033[36m3ème année RIR \033[00m " echo -e " \033[37m____________________________________________\033[00m " echo -e " \033[37m| Administration du service Networking |\033[00m " echo"" echo -e "\033[33m*** MENU *** :\033[00m" echo"" echo "1 - Restart" echo "2 - Stop" echo "3 - Start" echo "4 - Editer le fichier resolv.conf" echo "5 - Revenir au menu Principal" echo "" echo "Entrez votre choix :" read CHOIX case $CHOIX in 1)restart;; 2)stop;; 3)start;; 4)edit;; 5)Menu_principal;; *)exit 0;; esac } menu } #**************************************************************************** #*************************************************Fonction Quitter #**************************************************************************** function quitter () { exit } #**************************************************************************** #************************************************Fonction MENU #**************************************************************************** function Menu () { # conception du menu Principal du script appelant echo "" # les sous fonctions echo -e "\033[36mProjet Linux eXia 2008 \033[00m" echo -e " \033[36m3ème année RIR \033[00m " echo -e " \033[37m _______________________________ \033[00m " echo -e " \033[37m| Script d'administration |\033[00m " echo"" echo -e "\033[33m*** Menu Principal *** :\033[00m" echo"" echo "1 - Gestion des utilisateurs" echo "2 - Gérer les processus" echo "3 - Récupérer les processus" echo "4 - Sauvegarde et Recherche" echo "5 - Administration du service Networking" echo "6 - Quitter" echo "" echo "Entrez votre choix :" read CHOIX # lecture du choix et appel des fonctions case $CHOIX in 1)gestion_utilisateur;; 2)tuer_proc;; 3)recuperer_processus;; 4)sauv_recherche_fichier;; 5)networking;; 6)quitter;; *)exit 0;; esac } # FIN de la fonction du menu Principal if [ ! `id -u` = 0 ]; # Vérification de l'identifiant du user then # si l'identifiant n'est pas celui de root echo -e "\033[31m Ce script doit être exécuté en root \033[00m" # le script n'est pas exécute, echo"" # Sinon accès au menu Principal echo "**********************************************" echo "Appuyer sur la touche <Entrée> pour quitter..." echo "**********************************************" read touche case $touche in *)echo -e "\033[37m**** Reprise du script... ****\033[00m";; esac exit 0 else Menu fi
Ce document intitulé « Script d'administration Linux » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.