Script d'administration Linux

Décembre 2016


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

A voir également :

Ce document intitulé «  Script d'administration Linux  » issu de CommentCaMarche (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.