Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

heeelp SHELL

94 réponses
Avatar
yvslart
bonjour tout le monde,
J esp=E8re trouver r=E9ponse =E0 mes questions sur ce forum et j esp=E8re
que
vous aurez un peu de patience parce que je suis d=E9butante en
programmation et j aimerai faire un programme qui semble un
peu .....dur puisque je n ai pa encore trouver de r=E9ponses!
Bon on suppose qu on est l administrateur d un parc informatique et
qu on veut:
1.Etre alert=E9 par e mail si jamais :
-l un des utilisateurs a d=E9pass=E9 le quota ceci dit 1Mo
-ou bien s il a d=E9pass=E9 1000 copies d impression

2.Eteindre tous les ordinateurs chaque vendredi =E0 19h
3.Faire une sauvegarde de donn=E9es de chaque ordinateur et l
enregistrer dans un r=E9pertoire qui aura de nom la date du jour o=F9 la
sauvegarde a =E9t=E9 faite et ce r=E9pertoire doit avoir pour
extension .tgz
(archiv=E9 et compress=E9)
Je note que cette sauvegarde doit aussi se faire chaque dimanche =E0
minuit.
Voil=E0 ceci est le programme et j ai des difficult=E9s avec ....je sais
que je dois utiliser le CRONTAB pour les taches planifi=E9es mais =E0
part
sa....rien!!!
Plz help et je vous remercie =E0 l avance

10 réponses

6 7 8 9 10
Avatar
Jacques L'helgoualc'h
Le 16-01-2010, Cyrille Lefevre <cyrille.lefevre-news% a écrit :
[...]
users=$(awk -F: '$3 > 1000 {print $1}' /etc/passwd)
# > 1000 pour éviter les comptes admin (réservé), etc.



Plutôt « >= 1000 » ?...

--
Jacques L'helgoualc'h
Avatar
Che Averell
Arnaud Launay écrit :
Ça marche aussi. BSD ou Linux, très franchement, c'est comme
choisir entre un cognac et un armagnac pour accompagner le cigare
à la fin du repas, c'est un choix personnel... :)



Tout dépend du cigare, évidemment.

;-)
Avatar
yvslart
> 2/ la solution la mieux à mon sens, plusieurs nouvelles notions :
IFS=: read -r => en général, toujours mettre l'option -r à read
pas d'espace entre IFS=: et read, on exporte temporairement la
variable IFS à la commande read avec : comme valeur. caque variable
passé à la commande read sera rempli avec le champ correspondant du
fichier /etc/passwd. petit truc à propos de read x y z, s'il y a plus d e
3 champs à lire, la variable z contiendra le champ 3 et tous les champs
restant.

limite00
while IFS=: read -r user passwd uid gid gecos home shell; do
        taille=$(du -sk "${home}" | cut -f1)
        if [ "${taille}" -ge "${limite}" ]; then
                mail_quota.sh "${user}" "${home}"
                        "${taille}" "${limite}"
        fi
done < /etc/passwd

alternative, mais pour le fun, c'est histoire de parler de la syntaxe
$(< ...), qui équivaut à un $(cat /etc/passwd), mais sans forker.

done << EOF
$(< /etc/passwd)
EOF

pour finir, s'il faut éliminer des lignes, il est toujours possible
d'ajouter un case avec les tests adéquat :

while ...; do
        case $user in
        '') continue ;; # ligne vide
        '#') continue ;; # ligne en commentaire

done < /etc/passwd

l'idée est de toujours avoir le contenu de la boucle dans le shell
courant et non dans nu sous shell, mais ailleurs, le nom de
l'utilisateur n'est pas nécessairement

*/ le truc que je déteste le plus :

IFS='
'
for ligne in $(cat /etc/passwd); do
        user=$(echo $ligne | cut -f1)
        home=$(echo $ligne | cut -f6)
        ...
done

il n'y a rien de plus anti-shell et de plus dégueulasse que cette forme !

puis le script d'envoi mail :

mail_quota.sh

# plus tard, ajouter un contrôle sur les arguments
user=$1 home=$2 taille=$3 limite=$4
sujet="attention, limite de quota atteinte"
# plus tard, ajouter une méthode pour déterminer l'email
# d'un utilisateur, en attendant :
to=${user}
mail -s "${sujet}" ${to} << EOF
Bonjour ${user},

votre limite de quota (${limite}K) a été atteinte (${taille}K)
dans le répertoire : ${home}

vous êtes prié de faire de la place dans les prochaines jours,
sans quoi, votre compte sera bloqué.

Cordialement
EOF





Bon puisque tu dis que c'est le plus intéressant donc je le fais mais
je ne comprends pas où je vais devoir mettre le contrôle sur les
arguments puisque le script du mail ne vient qu'après avoir déjà
utilisé les variables user home .....
Donc normalement avant de commencer de comparer la capacité du
répertoire je devrai définir /home et nom d'utilisateur n'est-ce pas?
Bon quelques explications me feront voir plus clair je pense...

Merci pour tout Cyrille.
Avatar
yvslart
Et pour le mail est-ce qu'il y a une commande pour connaitre l ' e-
mail d'un utilisateur??
Avatar
yvslart
Est-ce qu'on pourrait utuliser env j'ai lu que sa donnait les
variables locales et normalement parmi ces variables il y a l-email .
N'est-ce pas?
Avatar
Arnaud Launay
Le 18-01-2010, yvslart a écrit :
Est-ce qu'on pourrait utuliser env j'ai lu que sa donnait les
variables locales et normalement parmi ces variables il y a
l-email .
N'est-ce pas?



Non. Il n'existe aucune variable système permettant de déterminer
l'email de l'utilisateur avec certitude. Vous pouvez toujours
construire un mail avec $USER@$HOSTNAME , mais c'est même pas sûr
que ça fonctionne.

Arnaud.
--
Perso: http://launay.org/blog/
Hébergement: http://www.nocworld.com/
Avatar
Bruno Tréguier
Arnaud Launay wrote:
Le 18-01-2010, yvslart a écrit :
Est-ce qu'on pourrait utuliser env j'ai lu que sa donnait les
variables locales et normalement parmi ces variables il y a
l-email .
N'est-ce pas?



Non. Il n'existe aucune variable système permettant de déterminer
l'email de l'utilisateur avec certitude. Vous pouvez toujours
construire un mail avec $USER@$HOSTNAME , mais c'est même pas sûr
que ça fonctionne.



Bonjour,

Il faut replacer les choses en contexte, à mon avis, faute de quoi
yvslart va s'y perdre.

Bien entendu, Arnaud, je suis d'accord, il n'y a aucune commande qui
permette de savoir quel est l'email d'une personne à coup sûr, donc
votre réponse est exacte dans l'absolu, mais bon, le but étant
quand-même d'avancer, on va quand-même supposer qu'il y a une manière
simple de le déterminer si vous n'y voyez pas d'inconvénient. :-)

yvslart nous dit que ses machines sont censées être reliées en réseau,
mais nous n'avons aucune connaissance de la configuration en ce qui
concerne le mail. La configuration correcte de ce dernier me semblait
hors-sujet ici, il me semble raisonnable de "fixer" arbitrairement
l'email d'un utilisateur comme étant de la forme "login" ou
"", non ? Surtout que s'il s'agit de faire des tests,
c'est le genre de chose qui marchera d'emblée sur une distrib Linux,
même hors réseau.

Cordialement,

Bruno
Avatar
yvslart
Merci de prendre en considération le fait d'être novice et c'est tout
à fait vrai que je suis perdue et j'aimerai au moins pouvoir réaliser
les deux premières questions pour les envoyer à mon prof en attendant
la fin de mes exams afin d'entamer la 3ème question....

Bon login je comprends mais .....localhost ! est ce une autre façon
de dire $HOSTNAME ?


Amigos j'ai vraiment besoin de votre aide,parce que j'ai passé mon
exam d'os et ..... disons que je n'aurai pas la note que je désirerai
donc le seul moyen de me rattrapper c'est ce projet.
Je suis sure que vous comprendrez .

Dîtes moi alors qu'est-ce qu'il faut faire ,qu'est-ce qu'il faut que
je cherche.

Disons par exemple ce local host est $HOSTNAME,on pourra faire ceci
je suppose
while IFS=: read -r user passwd uid gid gecos home shell; do
for usr in ${user}
do
user=$(${usr}@$HOSTNAME)
done
Avatar
yvslart
Désolée je voulais mettre $LOGNAME mais dans ce cas pour le récupé rer
il faut entrer dans le home de l'utilisateur et taper la commande afin
de récupérer le nom de login.

Perduuuue.................. :(
Avatar
Bruno Tréguier
Le 18/01/2010 à 21:10, yvslart a écrit :
Désolée je voulais mettre $LOGNAME mais dans ce cas pour le récupérer
il faut entrer dans le home de l'utilisateur et taper la commande afin
de récupérer le nom de login.



Non, $LOGNAME ne changera pas en fonction de l'endroit où vous trouverez
! Cette variable est positionnée en fonction de l'identité sous laquelle
vous êtes connecté, c'est tout. Il ne faut donc pas l'utiliser dans
votre script.

Cordialement,

Bruno
6 7 8 9 10