Shell-Script! Hilfe!

timtaylorrr

Grünschnabel
Hi

Ich möchte ein Script schreiben, das folgenden Aufgabe für mich löst. Es soll alle eingeloggten USER samt Prozesse anzeigen.

So sollte das aussehen:

Vorname Nachname
PID TTY TIME CMD


SED oder AWK dürfen nicht benutzt werden. Hat jemand einen Tipp?

Tausend Dank
 
Hallo!

Also mit "ps -el" erhälst Du die Prozessinfos, die Du brauchst, von allen Prozessen im System. Im Feld UID siehst Du, welcher Prozess zu welchem Benutzer gehört (Benutzer-ID). Mit der kannst Du dann in /etc/passwd nachsehen, wie der Benutzername lautet.

Jetzt musst Du das ganze bloss noch mit einem Skript verbinden :)

Ich würde das ganze in Python statt es über die Shell zu schreiben, aber ich weiss nicht recht, was Du für das Skript verwenden willst/kannst/darfst.

Viel Spass...
 
Na dann wird das ganze ja interessant...

Dann wirst Du wohl vor allem "cut" benötigen, um an Deine Information zu kommen.
 
Meine Idee besteht darin, mit finger den Realname herauszufinden und in einer Datei bei Scriptsausführung neu speichern zu lassen. Jedoch ist es extrem tricky mit cut nur den Realname herauszuholen.

Dann sollte der Rest eigentlich kein Problem mehr sein.
 
Bis jetzt bin ich soweit:

rm list | rm list2
finger | awk '{print $1}' | sort | uniq > list
while read record
do cat etc/passwd | grep $record | cut -d: -f5 >> list2
done | list;

Ja, ich weiss. awk ist nicht erlaubt. aber habe an der stelle noch keine Version mit cut hingekriegt.

Nun muss ich noch für die list2 für jeden Namen die ps Abfrage machen.

Bist du da schon weiter?

gruss

Mike

PS: Habe das Auslesen auch hingekriegt. Mit 2 verschachtelten While-Schleifen.
 
Zuletzt bearbeitet:
Das Ergebnis könnte dann so aussehen:

Code:
rm list | rm list2
who | cut -d' ' -f 1 | sort | uniq > list
while read record
do
        grep $record /etc/passwd | cut -d: -f 5 >> list2
done < list;

while read record
do
        echo `grep $record /etc/passwd | cut -d: -f 5 | cut -d, -f 1`
        ps -u $record
        echo '----'
done < list;
 
hi

ich habs so gelöst:

Code:
#!/bin/bash
clear
#Create a tempfile
who | cut -d ' ' -f1 > usertemp

#Create outputfile
touch outputfile

#Read the tempfile, fetch the realname from passwd and show the running processes
for i in $(cat usertemp | sort | uniq); do getent passwd $i | cut -d ':' -f5 >> outputfile; ps U $i >> outputfile; done

#Delete the tempfile
rm usertemp

Danke für Eure Unterstützung! Super Forum!

Gruß
Holger
 
Zurück