Я должен выполнить некоторые вычисления на машине, к которой я могу только получить доступ удаленно, но также и служу рабочей станцией. Существуют многие из них, и я хочу выбрать "свободный". Свободный означает в этом случае, что никто не зарегистрирован локально.
Моя первая попытка была who
команда, но по некоторым причинам это только перечисляет "выбранных" пользователей, и я не могу действительно узнать, как они выбраны. Затем попробуйте: ps aux | cut -d " " -f1 | sort | uniq
: лучше показывая набор демонов, но также и локального пользователя, который не был отображен who
.
Мое текущее решение состоит в том, чтобы войти и сделать ps aux | grep "gnome-session"
который лучше, но все еще дает мне много спама. Идеально я ищу что-то, что я могу включать в свой профиль ssh, который предупреждает меня об (активных) локальных пользователях, когда я вхожу в систему.
who
ни w
действительно возвращал локального пользователя. Действительно ли это - неожиданное поведение?uptime
с другой стороны, показал мне правильное количество пользователей (локальный и удаленный минус пользователи системы как корень)finger
не установлен Используйте w
Из w man page:
Показать, кто вошел в систему и что они делают.
Пример вывода:
$ w
09:15:10 up 43 min, 2 users, load average: 0.74, 0.38, 0.24
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
kucing tty7 :0 08:32 43:15m 57.73s 0.18s x-session-manager
kucing pts/0 :0.0 08:48 0.00s 0.24s 0.00s w´
Установлена ли команда finger
или нет? Это должно дать список всех пользователей, которые вошли в систему и откуда (то есть с другого компьютера или непосредственно на компьютер), а также сообщить, сколько времени этот пользователь простаивал.
Для получения дополнительной информации см. справочную страницу по Ubuntu finger .
Я бы пошел с:
who | cut -d' ' -f1 | sort | uniq
Это покажет список реальных пользователей. Если список пуст - машина находится в состоянии выхода из системы, ожидая, чтобы кто-то вошел в систему.
ps aux
также покажет некоторых пользователей системы, которых вы, вероятно, не хотите видеть.
Подумайте только о том, чтобы установить максимальную точность для ваших расчетов. Следует избегать перегрузки ресурсов для любых других пользователей, которые могут войти в систему.
nice -n 19 your_calculation_command
Мой ответ перечислить каждого пользователя, вошедшего в систему, уникальным способом.
w | tail -n +3 | cut -d " " -f1 | sort | uniq
просматривает / var / log / wtmp и отображает журнал последних пользователей, вошедших в систему, включая , которые в настоящее время вошли в систему.
Быстрая и грязная попытка:
ps au --no-heading | cut -d " " -f1 | uniq
Мне нравится этот:
for i in $(ls /dev/pts/*);do echo "TTY $i - $(ps e -t $i|grep -oP "(?<=(RUSER\=))[a-z]*"|uniq)";done ; echo -e '\n+++\n'; for i in $(pgrep ssh);do pstree -paul $i;done