Sonntag, 28. Mai 2017

Analyse der Ausführungszeit eines Kommandos in der bash

Für diesen Anwendungsfall -- das Messen der Ausführungszeit eines Programms -- existiert das UNIX-Kommando time. Es ermittelt diese drei Werte:
  • real: die gesamte, tatsächliche Ausführungszeit (elapsed real time)
  • user: die Zeit, in der die CPU tatsächlich den (User-)Code des Programms ausführt (Total number of CPU-seconds that the process spent in user mode)
  • sys: jene Zeit, in der die CPU mit Ausführung von Kernel-Code für das Programm beschäftigt ist (Total number of CPU-seconds that the process spent in kernel mode) 

Beispiel 1

Um die Zeit zu ermitteln, rufen Sie time vor ihrem eigentlichen Kommando auf:

$ time find . -user frank
...
real   0m3.681s
user   0m0.248s
sys    0m0.916s
$

Das Beispiel ermittelt alle Dateien, die dem Benutzer frank gehören. time rechnet aus, dass find dafür 3.6s benötigt.

Skripting in der Praxis

Spannender wird die Zeitmessung, wenn mehrere Kommandos zusammenspielen, bspw. in einem Shellskript. Nachfolgend geht es darum, die User ID und den dazugehörigen Namen des UNIX-Nutzers zu ermitteln, der ein Skript gerade aufruft. Variante 1 greift auf interne Variablen und das Kommando whoami zurück:

#!/bin/bash
userId=$UID
userName=$(whoami)
echo "the script runs as user $userName with UNIX id $userId"

Variante 2 nutzt stattdessen grep und cut:

#!/bin/bash
userId=$UID 
userName=$(grep ":$UID:" /etc/passwd | cut -d: -f 1)
echo "the script runs as user $userName with UNIX id $userId"

In Variante 3 kommen grep und awk zum Einsatz:

#!/bin/bash
userId=$UID
userName=$(grep ":$UID:" /etc/passwd | awk -F : '{ print $1 }')
echo "the script runs as user $userName with UNIX id $userId"

Für Puristen ist die Variante 4 -- diese nutzt ausschließlich awk:

#!/bin/bash
userId=$UID
userName=$(awk -F : '/:'$userId':/ { print $1 }' /etc/passwd)
echo "the script runs as user $userName with UNIX id $userId"

Das das auch mit einer Skriptsprache wie Perl geht, zeigt das Variante 5:

#!/usr/bin/perl -w
$username=$ENV{'LOGNAME'};

# read /etc/passwd
open(FH, "/etc/passwd") || die "Cannot open /etc/passwd: $!";
{
  while(<FH>) {
    # look for the user name
    if (m/^${username}:/) {
      @fields=split(/:/, $_); 
 
      # extract user id
      $uid=$fields[2];
      print "the script runs as user $username with UNIX id $uid\n";
     }
   }
}
close(FH);

Auswertung der Laufzeit

Nun wird es spannend, welche der fünf Varianten am flinkesten ist. Rufen Sie die Konstrukte alle einzeln auf, liefert time bei allen einen Wert von etwa 1s. Um die Unterschiede deutlicher sichtbar werden zu lassen, bauen wir eine Schleife drumherum und lassen das ganze 10000 Mal durchlaufen:

#!/bin/bash
# define loops
loops=10000

time {
  for((i=$loops; i>0; i--))
  do
    userId=$UID
    userName=$(whoami)
    echo "the script runs as user $userName with UNIX id $userId"
  done
} | grep "real"

Analog erfolgt das auch für die Varianten 2 bis 5. Folgendes Ergebnis wird sichtbar:

Variante Ausführungszeit
Variante 1 mit whoami 8.25s
Variante 2 mit grep und cut 11.03s
Variante 3 mit grep und awk 17.1s
Variante 4 nur mit awk 13.9s
Variante 5 mit Perl 15.22s

Fazit

Eindeutiger Gewinner ist Variante 1, gefolgt Variante 2 und Variante 4. Es hilft also doch, bei der Programmierung stets die Laufzeit im Blick zu behalten.

Links

Samstag, 27. Mai 2017

Beweiszettel. Linux-Zertifizierungen kurz angerissen

Bücher zur Vorbereitung -- eine kleine Auswahl.
Beschäftigen Sie sich mit dem freien Betriebssystem Linux, rutschen Sie heute vielfach noch in die Kategorie der Exoten. Dabei ist Linux inzwischen ein Vierteljahrhundert alt und gehört in der IT-Welt zum Alltag. Damit werden nicht nur vereinzelte Endgeräte betrieben, sondern komplette Rechenzentren gefüllt.

Mit Linux nur zu arbeiten, ist das eine. Hingegen mehr davon zu verstehen und es auch produktiv nutzen zu können, das andere. Ein guter Weg, nachzuweisen, dass Sie mehr als nur der Oberflächenklicker sind, ist ein Zertifikat. Dieses steht dann für eine oder mehrere Prüfungen.

Grundsätzlich sortieren sich die Zertifizerungen in zwei Klassen ein -- distributionsübergreifend und distributionsspezifisch. Als Anbieter umfaßt das auf der einen Seite das Linux Professional Instititute (LPI), die Linux Foundation und die Computing Technology Industry Association (CompTIA). Auf der anderen Seite stehen die Hersteller bzw. Distributoren RedHat und SuSe.

Diese Prüfungen für Zertifikate werden derzeit angeboten:

Form Anbieter/Programm Zertifikat (Auswahl)
distributionsübergreifend LPI, Linux Foundation, CompTIA
distributionsspezifisch RedHat, SuSe
Aufgrund der längeren Marktpräsenz gelten die LPIC-Zertifikate als etabliert und werden bspw. auch durch die Bundesagentur für Arbeit öffentlich gefördert.
Weitaus seltener unterstützt werden RHCE/RHCSA sowie die SUSE-Prüfungen, nicht zuletzt weil sie herstellerspezifisch sind.

Im Prinzip erst seit 2017 am deutschen Markt vertreten und daher noch nicht so bekannt in Deutschland sind die Abschlüsse der Linux Foundation. Neben einem ansehnlichen Angebotsumfang kann es mit zwei großen Namen auftrumpfen -- Linus Torvalds und Microsoft. CompTIA ist zwar ebenfalls schon lange in Deutschland vertreten, tritt aber weniger als Linux-Spezialist auf.

Montag, 8. Mai 2017

Gesucht und Gefunden

Recherche im Baumhaus Berlin
Neben einer sehr angenehmen Atmosphäre hat das Baumhaus Berlin eine sehr originelle Form für eine Pinnwand - Schnüre und Wäscheklammern. Ein Blick darauf lohnt sich ebenso :)

Auf einen Blick sehen, wo was los ist

Freitag, 5. Mai 2017

Die Mäuse kommen

11+4 Mäuse
Alle sind für einen guten Zweck. 15 Mäuse unterstützen soziale Projekte.

Montag, 1. Mai 2017

Training Linux/Programmierung mit der bash in Hamburg 6.+7. Juni 2017

Diese bash -- immer muss ich da so viel eintippen! Wenn das nicht alles irgendwie einfacher gehen würde. Aber das geht tatsächlich und Sie können das auch erlernen. Aber es ist eine ganze Menge an Stoff.

Hier findet der nächste Kurs statt -- es gibt noch freie Plätze:

dama.go Hamburg, Süderstraße 77, 20097 Hamburg
Dienstag, den 6. und Mittwoch, den 7. Juni 2017
9h00-16h30

Kontakt und Anmeldung zum bash-Kurs:
Stefanie Johannsen Cömert
Telefon: (040) 254 133 950

Und das steht bisher als Themen auf dem Plan:

  • Die bash im Detail
  • Die bash als Programmiersprache
  • Praktische Shellskripte
  • Interaktive Shellskripte
  • Der Stromeditor sed
  • Die Programmiersprache awk

Die Schulung findet auf einem Debian GNU/Linux statt.

Berliner Kleinkunst - die Hauptstadtpolka

Hauptstadtpolka live in der c-base am 30. April 2017
Das Trio aus Dirk, Dirk & Wulf bildet die Hauptstadtpolka. Berliner Kleinkunst, welche zwischen Swing, Jazz, Klezmer und Seemannsliedern unterhaltsam hin-und-her-maändert. Instrumentiert mittels Tuba, Akkordeon und dem Schlagzeug verleiht Wulfs Stimme den Melodien ihren einprägsamen Charakter. Spielt häufiger so schön, Jungs!