Créer un script en BASH qui prend en paramètre (ou en saisie en cas d'absence du paramètre) un fichier qui contient des lignes comme ceci :
“Login Groupe Password Critere” (voir le fichier users1.txt).
Le script devra vérifier l'existence dans votre machine des utilisateurs listés dans le fichier et s'ils n'existent pas créera les utilisateurs, leur mot de passe, leur dossier personnel et les groupes (qui seront créés s’ils n’existent pas) tels que listé dans le fichier.
Le primary group de l’utilisateur sera son nom mais chaque utilisateur sera ajouté au groupe cité dans le fichier.
Ainsi, à titre d’exemple Kristina appartiendra au groupe Kristina (son primary group) mais sera ajoutée au groupe students.
Votre script devra indiquer clairement ce qui est créé !
Pour chaque utilisateurs créés le script copiera ensuite dans le répertoire personnel de l’utilisateur l'ensembles des fichiers du répertoire /usr/share (et ses sous-répertoires) qui satisfont au critère suivant : ne seront copiés que les fichiers dont la nom commence par la lettre indiquée dans le champ critere
Ainsi, à titre d’exemple voici une sortie possible de Q1 :
Réponses :
#!/bin/bash
# script qui prend en paramètre un fichier de type "Login Groupe Password Critere"
# sinon demande le nom d'un fichier
# teste si l'utilisateur existe
# sinon le crée
# si aucun paramètre n'est donne, demande poliment le nom d'un fichier et met ce nom dans la variable file
# sinon utilise le premier parametre passe comme nom de fichier
[ $# -eq 0 ] && read -p "Veuillez s'il-vous-plaît entrer le nom d'un fichier : " file || file="$1"
# vérifie si la variable file n'est pas nulle, si c'est bien un fichier et s'il peut etre lu
# met dans les variables new_login new_group new_password et critere les différents mots de la ligne
[ "$file" ] && [ -f "$file" ] && [ -r "$file" ] && while read new_login new_group new_password critere; do
# CREATION DES UTILISATEURS
echo -n "$new_login: "
# verifie l'existence du groupe
if grep -q "^$new_group:" /etc/group; then
echo -n "(group $new_group) "
#sinon le cree
else
groupadd "$new_group"
echo -n "(group $new_group created) "
fi
# verifie l'existence de l'utilisateur
if grep -q "^$new_login:" /etc/passwd; then
echo -n "already exists "
# sinon le cree
else
# creation de l'utilisateur avec un home directory (-m) et un shell bash
useradd "$new_login" -m -g "$new_group" -s /bin/bash
# assignation du mot de passe
echo "$new_login:$new_password" | chpasswd
echo -n "created! "
fi
# COPIE DES FICHIERS
# initialisation du compteur
files_copied=0
# pour tout fichier du directory qui commence par la lettre critere (majuscule ou minuscule)
for new_file in $(find /usr/share -type f -iname "$critere"*); do
# copie ce fichier dans le home directory du user
cp $new_file /home/$new_login
# et incremente le compteur
files_copied=$(($files_copied+1))
done
echo "($files_copied files copied)"
done < "$file"
sudo ./Q1.sh users1.txt
cat /etc/passwd
su Malcolm
Les numéros des groupes correspondent bien aux numéro des groupes repris après le nom des utilisateurs au point précédent.
students:x:1001: profs:x:1002:
ls -l /home/Kristina | head
ls -l /home/Paige | head
Créer un script en BASH qui prend en paramètre (ou en saisie en cas d'absence du paramètre) un fichier qui contient des lignes comme ceci : “Login Groupe Password Delete” (vous utiliserez le fichier users2.txt). Le script devra vérifier l'existence des utilisateurs enregistrés dans le fichier et s'ils existent et que la colonne Delete indique “yes” le script devra effectuer ces deux tâches :
Voici une sortie possible de Q2
Réponses :
#!/bin/bash
# prend en parametre ou en saisie le nom d'un fichier de type "Login Groupe Password Delete"
# si aucun parametre n'est donne, demande poliment le nom d'un fichier et met ce nom dans la variable file
# sinon utilise le premier prametre passe comme nom de fichier
# archive le home directory de l'utilisateur dans /old-users
# supprime le home directory
# supprime l'utilisateur
# supprime le groupe s'il n'a plus aucun utilisateur
[ $# -eq 0 ] && read -p "Can you please enter a filename: " file ||file="$1"
# verifie si la variable file n'est pas nulle, si c'est bien un fichier et s'il peut etre lu
[ "$file" ] && [ -f "$file" ] && [ -r "$file" ] && while read line; do
user=$(echo "$line" | cut -d " " -f1)
group=$(echo "$line" | cut -d " " -f2)
delete=$(echo "$line" | cut -d " " -f4)
# verifie l'existence de l'utilisateur
if grep -q "^$user:" /etc/passwd; then
echo -n "$user to delete ? "
# verifie si la variable delete n'est pas nulle et si elle correspond a "yes"
if [ "$delete" ] && [ "$delete" = yes ]; then
#archive le home directory
# -j avec bzip2
# -c cree une archive sur Linux
# -f nom de l'achive
tar -jcf "/old-users/$user.tar.gz" "/home/$user/" 2>/dev/null
# supprime le home directory et tout ce qu'il contient
rm -rf "/home/$user"
#supprime l'utilisateur
userdel "$user"
echo "yes : delete user $user"
# si le groupe est vide, le supprime et affiche le message d'execution de delgroup
# sinon renvoie une erreur qui n'est pas affichee
delgroup "$group" 2>/dev/null
else
echo "no !"
fi
fi
done < "$file"
sudo ./Q2.sh users2.txt
ls -l /old-users/
tar -jxf Elsie.tar.gz -C /tmp ls -l /tmp/home/Elsie/
cat /etc/passwd