Brauche Hilfe bei Lösunge einer Aufgabe

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von todd#6, 22.11.2012.

  1. todd#6

    todd#6 Jungspund

    Dabei seit:
    22.11.2012
    Beiträge:
    13
    Zustimmungen:
    0
    In der Dateil /etc/passwd sind zeilenweise alle User aufgelistet. Der Name ist dabei vom Zeilenanfang bis zum ersten Doppelpunkt.
    Erstellen Sie ein Shellskript für folgende Ausgabe: Es listet alle in /etc/passwd genannten Benutzer auf,
    für die zur Ausführungszeiten des Programms KEIN Prozess läuft.

    Kann mir da vll jemand helfen??
    Habe leider kA wie ich an die Sache herangehen muss.

    ps befehl?

    wäre super cool wenn mir einer helfen könnte
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. nighT

    nighT Guest

    Als Gedankensütze:

    1. For-Schleife in dem Bash-Script, welche die erste Zeile ausliest
    2. Die gelesene Zeile mit sed / awk o.Ä. so kürzen, dass du nur den Username hast
    3. "ps aux" gibt eine Liste aller Prozesse aus. Per "grep -c $USERNAME" kommst du an die Anzahl der Prozesse unter dem Benutzer
    4. Per If schaust du, ob der Wert > 1 ist (1x ist immer das Grep selbst). Wenn ja gibst du Username aus / Wenn nein machst du nichts
    5. Zurück zum Anfang der For

    Hier könntest du jetzt das "ps aux" evtl. auch auslagern, so dass du es nicht mehrfach ausführen musst. Spart evtl. minimal performance.

    Den Code solltest du aber versuchen selbst du schreiben. Sonst bringt dir die ganze Aufgabe nichts.
     
  4. todd#6

    todd#6 Jungspund

    Dabei seit:
    22.11.2012
    Beiträge:
    13
    Zustimmungen:
    0
    cool danke für deine hilfe werde das dann mal ausprobieren
     
  5. #4 floyd62, 22.11.2012
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    nur als Ergänzung/Anregung:

    - "ps -u $USERNAME" liefert die Prozesse, "pgrep -u $USERNAME" nur die IDs aller Prozesse für einen User
    - "cut" kann aus Zeilen einzelne Felder ausschneiden, die z.B. durch : getrennt sind - praktisch für die Felder in /etc/passwd
    - xargs kann oft als Ersatz für eine for- oder while-Loop herhalten, wenn die Kommandos für die einzelnen Durchläufe nicht zu kompliziert werden

    Damit lässt sich das Ganze schon als Einzeiler schreiben - wie nighT bereits erwähnt hat, kann es aber leicht ineffizient werden, wenn man pgrep oder ps für jeden User (also mehrmals) ausführt.

    Daher der alternative Ansatz:

    - "ps -e -o ruser=" liefert nur die Namen der aktiven Benutzer,
    - "sort -u" entfernt die Duplikate,
    - daraus kann man mit sed/paste/etc. einen "egrep -v"-Filter bauen,
    - durch den man dann die Liste der Namen aus der /etc/passwd jagt (die man wieder mit cut erhält).

    Das ergibt bei mir auch einen Einzeiler, der aber bei meinem Test um dem Faktor 25 schneller läuft (weil ps nur einmal ausgeführt werden muss).

    Gruss, A.
     
  6. todd#6

    todd#6 Jungspund

    Dabei seit:
    22.11.2012
    Beiträge:
    13
    Zustimmungen:
    0
    finde es richtig cool, das ihr mir bei der aufgabe hilfestellungen gibt. werde eure ratschläge mal am wochenende versuchen anzuwenden.
     
  7. todd#6

    todd#6 Jungspund

    Dabei seit:
    22.11.2012
    Beiträge:
    13
    Zustimmungen:
    0
    ps -e -o ruser | sort -u > prozess
    grep -E "^[a-z]*" pass | cut -d: -f1 > pass2
    diff prozess pass2 | grep '^<' > ergeb

    kann man das auch so machen.. ist sicherlich nciht schoen aber selten.
    die pass= passwd
    wie bekomme ich den pfad der passwd in mein script??
     
  8. #7 floyd62, 27.11.2012
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    sieht doch schon mal ganz interessant aus ... noch ein paar Tipps:

    - mit "ps -e -o ruser=" eliminierst du auch gleich die Überschrift ("RUSER").
    - "cut" kann auch direkt aus Dateien lesen, also sollte "cut -d: -f1 /etc/passwd" dir die Liste der existierenden User-Accounts liefern.
    - diff ist eine Möglichkeit; aber schau dir doch mal die Manual-Page von "comm" an, damit kommst du in diesem Fall einfacher ans Ziel, denke ich.

    ;-)

    A.
     
  9. #8 todd#6, 27.11.2012
    Zuletzt bearbeitet: 27.11.2012
    todd#6

    todd#6 Jungspund

    Dabei seit:
    22.11.2012
    Beiträge:
    13
    Zustimmungen:
    0
    ist dann die aufgabe denn so gelößt??

    das mit deinem cut befehl ist ncoh viel leichter.
    deinen ersten punkt habe ich leider ncith verstanden!
    kann man hier auch fragen zu SED posten.
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. todd#6

    todd#6 Jungspund

    Dabei seit:
    22.11.2012
    Beiträge:
    13
    Zustimmungen:
    0
    ps -e -o ruser | sort -u > PID
    cut -d: -f1 /etc/passwd > passwd
    comm -3 passwd PID

    so sollte das einwenig eleganter sein.. sicherlich noch nciht schoen aber selten :D
    finde es cool das ihr mir hilfestellungen gibt.
     
  12. #10 floyd62, 27.11.2012
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Was ich mit dem ersten Punkt sagen wollte: wenn du "ps -e -o ruser" ausführst, bekommst du in der ersten Zeile die Überschrift (also "RUSER") geliefert. Das ist natürlich kein echter Benutzername - das kannst du aber unterdrücken, indem du statt "-o ruser" einfach "-o ruser=" verwendest. Der relevante Abschnitt aus der Manual-Page:

    "Headers may be renamed (ps -o pid,ruser=RealUser -o comm=Command) as desired. If all column headers are empty (ps -o pid= -o comm=) then the header line will not be output."

    A.
     
Thema:

Brauche Hilfe bei Lösunge einer Aufgabe

Die Seite wird geladen...

Brauche Hilfe bei Lösunge einer Aufgabe - Ähnliche Themen

  1. Brauche hilfe bei einen Shell Script "-eq Parameter"

    Brauche hilfe bei einen Shell Script "-eq Parameter": Hallo miteinander, bin Neuling in shell Programmierung und brauche etwas Hilfe: und zwar möchte ich einige Zeilen aus einer Datei "user.db"...
  2. 1:1 NAT brauche Hilfe bei der Erstellung eines Shellscripts

    1:1 NAT brauche Hilfe bei der Erstellung eines Shellscripts: Hi, ich brauche Hilfe bei der Erstellung eines Shellskripts, was nach OpenVPN Neueinwahl die Datei /var/db/opt1_ip parst (in dieser Datei steht...
  3. Brauche hilfe von Profis mit opensuse 11.2

    Brauche hilfe von Profis mit opensuse 11.2: Irgend wie bekomme ich keine internet verbindung hin ob über kde manger oder manuell kann man es auch über der shell einrichten wäre nett wenn ich...
  4. Brauche dringend Hilfe nach System Rücksetzung

    Brauche dringend Hilfe nach System Rücksetzung: Hallo. Leider habe ich nicht viel Ahnung von Linux Programmen und habe nach einem Telefonat mit dem technischen Support von Hercules bei meinem...
  5. Prüfungsvorbereitung Posix Aufgaben, brauche Meinungen oder Hilfe,Danke

    Prüfungsvorbereitung Posix Aufgaben, brauche Meinungen oder Hilfe,Danke: Hallo Leute, habe dieses Semester noch eine Prüfung in Systemprogrammierung und wollte gerne hier die einzelnen Übungsaufgaben vorstellen bzw. mit...