web-dev-qa-db-ja.com

ログインしている他のすべてのユーザーをキックオフしますか?

wと入力すると、ログインしているすべてのユーザーのリストを取得できます。

また、killall -u USERNAMEがユーザーUSERNAMEに関連付けられているすべてのプロセス(bash /シェル、sshdプロセスなどを含む)をキックすることも知っています。私の知る限り、これがサーバーの「ユーザーをキックオフ」する方法です。

ただし、すべてのユーザーをキックオフする方法はわかりません。ユーザーのリストを取得するために何らかの方法でw | cut -d' ' -f1を取得し(そして何とかして空白行とUSERフィールドと自分のユーザー名を削除し)、それをkillallの-​​uコマンドにフィードする必要がありますか?

または、より良い方法がありますか?

2
AJJ

あなたはすべてで殺すことができます:

who | awk '$1 !~ /root/{ cmd="/sbin/pkill -KILL -u " $1; system(cmd)}'

Rootになるか、Sudoを使用する必要があります。

すべてのユーザーを殺すことは危険であり、ファイルシステムを損傷する可能性があることに注意してください。さらに、ユーザーを困らせます。あなたがそれらを殺したときにそれらの1つがmysqlのメンテナンスのようなことをしている場合、あなたは何が起こると期待していますか?

本当にps -ef | grep "user"などを使用して、プロセスを検査する必要があります。

代わりに警告しないのはなぜですか?

shutdown -h +10 "Server is going down 10 minutes. Save your work and logout."
2
Rinzwind

動作しているように見えるこのスクリプトも書きました:

#!/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