web-dev-qa-db-fra.com

Lancer tous les autres utilisateurs connectés?

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?

2
AJJ

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."
2
Rinzwind

É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
1
AJJ