Je sais que si je tape w
je peux obtenir une liste de tous les utilisateurs connectés.
Je sais aussi que killall -u USERNAME
lance tous les processus associés à l'utilisateur USERNAME
(y compris bash/leur shell, leur processus sshd, etc.). Autant que je sache, voici comment vous êtes censé "renvoyer un utilisateur" de votre serveur.
Cependant, je ne sais pas comment lancer tous les utilisateurs. Dois-je en quelque sorte w | cut -d' ' -f1
pour obtenir une liste d'utilisateurs (puis effacer d'une manière ou d'une autre la ligne vide, le champ USER et votre propre nom d'utilisateur) et l'envoyer à la commande -u pour killall
?
Ou y a-t-il un meilleur moyen?
Vous pouvez tous me tuer avec:
who | awk '$1 !~ /root/{ cmd="/sbin/pkill -KILL -u " $1; system(cmd)}'
Vous devez être root ou utiliser Sudo.
Attention, tuer tous les utilisateurs peut être dangereux et endommager votre système de fichiers. De plus, agacer vos utilisateurs; Qu'attendez-vous si l'un d'entre eux fait quelque chose comme la maintenance de MySQL lorsque vous les tuez?
Vous devriez vraiment utiliser ps -ef | grep "user"
ou quelque chose de similaire pour inspecter leurs processus.
Pourquoi ne pas les avertir à la place?
shutdown -h +10 "Server is going down 10 minutes. Save your work and logout."
Écrit aussi ce script qui semble fonctionner:
#!/bin/bash
ME=$Sudo_USER
if [[ -z $ME ]]
then
echo "Must run script using Sudo."
exit 1
fi
who | while read NAME REST
do
if [[ $NAME != $ME ]]
then
killall -u "${NAME}"
if [[ "$?" = "0" ]]
then
echo "Disconnecting ${NAME} from the system..."
else
echo "Could not disconnect ${NAME} from the system..."
fi
fi
done