Отключить всех других пользователей, которые вошли в систему?

iamgreat# /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) 

У вас не должно быть этого iamgreat. Убери это. Вы можете использовать эту команду для этого:

sudo sed -i '1s/^iamgreat//' /etc/profile

Или использовать редактор.

2
задан 15 October 2017 в 23:55

4 ответа

Написал также этот скрипт:

#!/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
ответ дан 18 July 2018 в 05:15

Вы можете убить всех:

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

Вам нужно быть root или использовать sudo.

Помните, что убивать всех пользователей может быть опасно и повредить файловую систему. Плюс раздражает ваших пользователей; что вы ожидаете, если один из них делает что-то вроде обслуживания mysql, когда вы их убиваете?

Вы действительно должны использовать ps -ef | grep "user" или что-то подобное, чтобы проверить их процессы.

Почему бы не предупредить их вместо этого?

shutdown -h +10 "Server is going down 10 minutes. Save your work and logout."
2
ответ дан 18 July 2018 в 05:15

Написал также этот скрипт:

#!/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
ответ дан 24 July 2018 в 18:16
  • 1
    who | awk 'l!=$1{l=$1;print $1}' (или who | awk '{print $1}' | uniq) сортирует имена пользователей, которые происходят несколько раз и только выдает их, поэтому нет необходимости в REST. – dessert 16 October 2017 в 00:43
  • 2
    Похоже, мне нужно узнать awk – Aruka J 16 October 2017 в 00:45
  • 3
    Это того стоит, гарантировано. – dessert 16 October 2017 в 00:47
  • 4
    Я предпочел бы делать echo -n "Disconnecting ${NAME} …"; killall … && echo " Success." || echo " Fail.", выход намного яснее, и он сохраняет инструкцию if. – dessert 16 October 2017 в 00:51

Вы можете убить всех:

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

Вам нужно быть root или использовать sudo.

Помните, что убивать всех пользователей может быть опасно и повредить файловую систему. Плюс раздражает ваших пользователей; что вы ожидаете, если один из них делает что-то вроде обслуживания mysql, когда вы их убиваете?

Вы действительно должны использовать ps -ef | grep "user" или что-то подобное, чтобы проверить их процессы.

Почему бы не предупредить их вместо этого?

shutdown -h +10 "Server is going down 10 minutes. Save your work and logout."
2
ответ дан 24 July 2018 в 18:16
  • 1
    Я не знаком с awk, что это такое? Я предполагаю, что $1 относится к первому полю / имя пользователя – Aruka J 16 October 2017 в 00:10
  • 2
    Да, он доставит вам 1-й столбец из команды перед ним (в этом случае кто, так пользователь) – Rinzwind 16 October 2017 в 00:14
  • 3
    Что произойдет, если пользователь открыл несколько сеансов? Как насчет who | awk '$1 !~ /root/ && l != $1 { l = $1; cmd="/sbin/pkill -KILL -u " $1; system(cmd) }? – dessert 16 October 2017 в 00:15
  • 4
    @Rinzwind Если я выключу машину, я тоже ничего не смогу сделать. То, что я хотел сделать, это создать файл /etc/nologin, чтобы PAM предотвращал вход в систему, а затем использовал wall MESSAGE для отправки предупреждающего сообщения всем, а затем убил всех других пользователей. Затем я смог удалить файл nologin для повторного включения логинов. – Aruka J 16 October 2017 в 00:36
  • 5
    «Помните, что ...» Хорошо сказано! – Elder Geek 16 October 2017 в 18:47

Другие вопросы по тегам:

Похожие вопросы: