Prozesse, RegEx, Textverarbeitung, vi - Hausaufgabe

  • Arbeite vimtutor bis Kapitel 5.3 durch

  • Wieviele Benutzer haben /bin/bash als Loginshell auf deinem System?:

    grep /bin/bash /etc/passwd
    
    grep /bin/bash /etc/passwd | wc -l
    
  • Bereite die Ausgabe von ls $HOME für den Druck vor. Die Auflistung soll in 3 Spalten dargestellt werden:

    ls ~ | pr -3
    
  • Lasse dir die ersten 30 Zeichen der Datei /etc/issue anzeigen:

    head -c 30 /etc/issue
    
  • Folge als Benutzer ‘root’ der Datei /var/log/messages. Rufe dann parallel in einer anderen Shell folgendes Kommando auf: logger Hallo von der Kommandozeile:

    • Alt+F1

      sudo tail -f /var/log/messages
      
    • Alt+F2

      logger Hallo
      
    • Alt+F1

      >> Mar 06 11:29:15 hostname user: Hallo
      
  • Lasse dir eine Textdatei mit allen darin enthaltenen Steuerzeichen anzeigen:

    cat -A
    
    cat -vET
    
  • Wieviele Zeilen enthält deine /etc/inputrc?:

    c -l /etc/inputrc
    
  • Sortiere die Datei /etc/passwd nummerisch nach GruppenID (Spalte 4):

    sort -t : -n -k 4,4 /etc/passwd
    
  • Filtere alle Zeilen aus der Datei /etc/inittab aus, die mit einem ‘#’ beginnen (Kommentare). Wieviele Kommentarzeilen sind in der Datei enthalten?:

    grep -v '^#' /etc/inittab
    
    grep '^#' /etc/inittab | wc -l
    
  • Was passiert bei folgender Kommandozeile und warum? sed -e 's/foo/FOO/g' text.txt > text.txt

    • Eigentlich sollte jedes ‘foo’ durch ‘FOO’ im Text ersetzt werden, jedoch ist die Umleitung falsch

      • Resultat: leere test.txt
  • Wie könnte man trotzdem die Datei direkt editieren?

    • mit text.txt > neuertext.txt oder mit sed -i

Das Trennzeichen in sed kann auch anders gewählt werden:

sed -i -e 's//etc/issue//etc/foo/g' test.txt sed -i -e 's/etc/foo|g' test.txt
  • Lasse dir alle Dateien in /usr/bin anzeigen, die mit einem ‘b’ beginnen, dann einen beliebigen Buchstaben enthalten, dann einmal ein ‘c’ bzw. kein ‘c’ enthalten:

      ls /usr/bin | grep ^b.c
    
      ls /usr/bin | grep ^b.[^c]
    
  • Starte das Kommando dd if=/dev/zero of=/dev/null mit niedrigster Priorität. Schicke es nach dem Start in den Hintergrund (CTRL+z) und lasse es danach im Hintergrund weiterlaufen. Beende das Programm, indem du das ‘Terminate’ Signal an den Prozess schickst:

    nice -n 19 dd if=/dev/zero of=/dev/null
    

    CTRL+z

    [1]+ Stopped nice -n 19 dd if=/dev/zero of=/dev/null
    
    bg
    
    [1]+ nice -n 19 dd if=/dev/zero of=/dev/null &
    
    kill -9 %nice
    
  • Starte den Editor ‘vi’. Schicke Ihn in den Hintergrund. Nun schau dir die Handbuchseite zum Befehl ‘df’ an:

    vi
    

    CTRL+z

    man df
    
  • Schicke nun auch die Handbuchseite in den Hintergrund. Wechsele dann wieder zum Editor zurück:

    CTRL+z

    fg 1
    
  • Warum ist das beenden eines Prozesses via kill -9 $prozess mit Vorsicht zu genießen?

    • Offene Dateien werden nicht zu Ende geschrieben..
    • Alle Unterprozesse von sterben mit (und werden Zombieprozesse)
  • Starte das Kommando dd if=/dev/zero of=/dev/null im Hintergrund. Lasse das Programm dann ‘netter’ zu den anderen sein, indem du dessen Nice-Wert auf 10 erhöhst:

    dd if=/dev/zero of=/dev/null &
    
    renice -n 10 2342
    
  • Darfst du den Nice-Wert eines Prozesses nach dessen Start erniedrigen?

    • Normalerweise nicht
  • Was ist die höchste Priorität, die ein Prozess haben kann, wenn er von einem unpriviligierten User ausgeführt wird?

    • je kleiner der Wert, umso weniger ‘nice’ ist der Prozess zu anderen…
      • root darf von -20 bis 19
      • user darf nur von 0 bis 19