Angemeldete User herausfinden

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
dirk11
Beiträge: 2840
Registriert: 02.07.2013 11:47:01

Angemeldete User herausfinden

Beitrag von dirk11 » 03.02.2014 01:11:23

Hi Leute,

ich muss in einem Bash-Script herausfinden, wie viele User auf einem System angemeldet sind (bzw. abfragen, ob die Zahl größer Null ist, sprich ob überhaupt jemand angemeldet ist).
Ich habe das in einem Script seit Jahren so gemacht

Code: Alles auswählen

if
  [ $(who | wc -l) -gt 0 ] ; then DO_SHUTDOWN=0;
fi
und erst jetzt ist mir durch einen dummen Zufall (in dem Script werden auch noch andere Parameter abgefragt) aufgefallen, dass who zumindest unter xfce angemeldete User überhaupt nicht erfasst. Wie kann ich den Befehl who bzw. den kompletten o.g. Code austauschen, so dass auch in xfce angemeldete User erfasst werden? Wheezy, dürfte hier aber egal sein.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Angemeldete User herausfinden

Beitrag von Cae » 03.02.2014 04:24:02

Man koennte gucken, ob's noch aktive Prozesse von "normalen" Benutzern gibt:

Code: Alles auswählen

$ ps axo euid,pid | awk 'BEGIN{while(getline<"/etc/login.defs"){if("UID_MIN"==$1)min=$2;if("UID_MAX"==$1)max=$2}}min<=$1&&max>=$1'
-- da kommt dann (e)UID und PID raus. Wenn man das als Abfrage in der Form "gibt es noch Prozesse dieser Art?" verwenden will, kann man

Code: Alles auswählen

if ps axo euid,pid | awk 'BEGIN{while(getline<"/etc/login.defs"){if("UID_MIN"==$1)min=$2;if("UID_MAX"==$1)max=$2}}{if(min<=$1&&max>=$1)exit(r=1)}END{exit(!r)}'; then
	# ...
fi
schreiben. Nochmal aufgedroeselt:

Code: Alles auswählen

if \
	ps axo euid,pid \
	| awk '
	BEGIN {
		while(getline<"/etc/login.defs") {
			if ("UID_MIN" == $1)
				min = $2;
			if ("UID_MAX" == $1)
				max = $2
		}
	}
	{
		if (min <= $1 && max >= $1)
			exit(r = 1)
	}
	END {
		exit(!r)
	}
'; then
	# ...
fi
Der BEGIN-Teil findet die Minimal- und Maximal-Werte fuer UIDs raus (Standard ist 1000..60000), im Hauptblock wird abhaengig von der PID der Zeile entweder exit() ausgeloest oder zur naechsten Zeile gesprungen.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Angemeldete User herausfinden

Beitrag von rendegast » 03.02.2014 09:41:23

dass who zumindest unter xfce angemeldete User überhaupt nicht erfasst.
Weiterhin fehlt eine ssh-Xforward-Session.
'who -l' listet mir nur die fgetty, nicht aber die ngetty-Konsolen.
Es scheint nur für "echte" resp. interaktive Konsolen-/Terminalsitzungen zu sein.

Die Lösung von Cae scheint mir so kompliziert, gibt es wirklich nichts einfacheres?
Wie läuft sowas zBsp. bei einer TerminalServer-Maschine?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

Antworten