• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] verbundene Benutzer abfragen - kleines Script?

Hi Forum,

mit awk bin ich nicht ganz so gut drauf - deshalb:
Kennt jemand eine scriptzeile die mit Hilfe von "smbstatus"-Abfrage, mit anschließendem gekonnten Filtern, nur die noch verbundenen Benutzer ausgibt?

Danke im Voraus
 
Habe in awk Doku gesucht und selbst etwas probiert:
- die smbstatus Ausgabe-Zeilen für die verbundenen Benutzer fangen bei mir alle mit einem Leerzeichen und Ziffern (PID) an
- damit kann ich gut nach diesem Muster suchen - ich weiß bloß nicht ob das bei allen so ist (das mit dem führenden Leerzeichen meine ich)

Die AWK-Zeile lautet nun:
Code:
/usr/bin/smbstatus | /bin/awk '/^ [0-9].*/ { printf("  => "$2" auf PC "$4"\n") }'

Da ich diese Infos in meinem Webmin für normale Benuzter einfach zugänglich machen möchte (unter "Eigene Befehle", dort auch Script zum runterfahren nach 3 min Wartezeit hinterlegt) habe ich noch ein ganz einfaches Shell-Skript drumherum gebaut, welches dies bei Bedarf mit ein bißchen HTML formatiert.

Hier das Skritpt:
Code:
#!/bin/bash
# Script to show the connected smb-user

# define the vars
AWK="/bin/awk"
SMBSTAT="/usr/bin/smbstatus"
MAX_LOOP=500

TXT1="verbundene Benutzer: "

# set HTM=1 if you want to get out with HTML-tags
# -> for use e.g. in webmin-output
HTM=0
ZAEHL=0

case "$1" in
    -h|--help|/h|-?|/?)
	echo "Usage: $0 [option]"
	echo "           => get out all just now connected smb-users"
	echo "      -htm => get out the result with html-tags"
	echo " "
	exit 0
	;;
    -htm)
	HTM=1
	;;
esac

if [ "$HTM" = 1 ]; then
    echo "<h2>Ausgabe der aktuell mit Samba verbundenen Benutzer</h2>"
    echo "<ul>"
    $SMBSTAT | $AWK '/^ [0-9].*/ { printf("<li>=> "$2" auf PC "$4"</li>\n") }'
    echo "</ul>"
else
    echo "Ausgabe der aktuell mit Samba verbundenen Benutzer"
    echo "--------------------------------------------------"
    $SMBSTAT | $AWK '/^ [0-9].*/ { printf("  => "$2" auf PC "$4"\n") }'
fi


exit 0
[/code]
 
Hi linux-club,

leider war es so wie ich schon fast vermutet hatte:
bei meinem heutigen Versuch mit smbsatus waren keine Leerzeichen mehr vor den "PID"'s und schon klappte mein Skript nicht mehr. Da auch in Zeilen ohne das Vorkommen dern User- und Maschinennamen Zahlen am Zeilenanfang stehen können habe ich mich nach Suche im Internet der Lösung eines anderen Linuxers bedient:
Ich suche nach den IP-Adressen in Klammern als regulären Ausdruck, die nur in den betreffenden Zeilen vorkommen und gebe dann mit "awk" den zweiten String je Zeile aus:
Code:
# Definition von benötigten Variablen
$SMBSTAT=/usr/bin/smbstatus
$GREP=/bin/grep
$AWK=/bin/awk

$SMBSTAT | $GREP -E "\("[0-9]*"\."[0-9]*"\."[0-9]*"\."[0-9]*"\)" | $AWK '{ print $2 }' | sort -u

Ich hoffe dass dies fürs erste funktioniert. Falls noch jemand Anregungen hat - bitte melden.
 
Für smb.conf gibt's ne "utmp" Option, mit der ist das einfach und portabel (das zeigen dir dann alle Systemprogramme an):
Code:
 20:51:52 up  4:46,  7 users,  load average: 0.73, 0.37, 0.23
USER     TTY        LOGIN@   IDLE   JCPU   PCPU WHAT
jengelh  :0        16:06   ?xdm?  19:03   0.21s /usr/bin/icewm-session
jengelh  smb6160   20:51    0.00s  0.00s  0.05s /usr/sbin/smbd -D -s /etc/samba
 
Hi jengelh,

danke für den Tip. Diese Option hatte ich bisher noch nicht bemerkt.

Habe es gerade getestet (Eintrag in smb.conf unter [global], "utmp dir" auf /var/log/samb gesetzt, dann rcsmb restart). Es erscheint nach Zugriffen über "cifs" oder von einem Windowsclient keine "utmp"-Datei. Wahrscheinlich ist diese Option beim Kompilieren meiner Samba-Version (3.0.26a-0.1.83-1478-SUSE-SL10.2) nicht genutzt worden.
 
Oben