Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Python für Systemadministratoren Grundkurs

Dictionary-Zugriff auf eine Datei

Testen Sie unsere 2016 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Mit einem Dictionary lässt sich schnell der komfortable Zugriff auf eine Konfigurationsdatei erzeugen und, wie der Trainer hier demonstriert, aus der passwd eine Verknüpfung zwischen user und uid herstellen. Das Gleiche klappt auch mit Services und Ports.
10:52

Transkript

In dieser Lektion möchte ich Ihnen zeigen, wie Sie mit Dictionaries einen komfortablen Zugriff auf Dateien erzeugen können. So werde ich Ihnen zeigen, wie Sie "passwd" so auswerten können, dass Sie User auf User-IDs abwickeln, oder auch User-IDs auf User. Ein weiteres Beispiel wird sein, Services auszuwerten, indem Sie Services auf Ports oder Ports auf Services abbilden. Wie funktioniert das Ganze? Die zentrale Funktion ist "makeDict", die bekommt "keys" und "values". Das ist eine Liste von "keys" und eine Liste von "values", und wendet "zip" und "dict" drauf an. Hier nochmal die Details: Ich habe zwei Eingabesequenzen, k und v, die aus k[0], k[1], k[2], v[0], v[1], v[2] und so weiter bestehen. Da lege ich einen "zip" drüber. "zip" ist ein Reißverschluss, der macht aus den zwei Listen eine Liste von Paaren, Paare k[0], v[0], k[1], v[1], bis k[n, v[n]. Und wenn ich da jetzt nochmal "dict" drüberlege, wird aus meiner Liste von Paaren ein Dictionary, in dem k der Schlüssel und v der value ist. Und hier habe ich noch eine Funktion drumrum geschrieben, damit es ein bisschen komfortabler wird. "dictAccessTo", was macht die Funktion? Sie bekommt eine Liste von Zeilen, "lines", einen Separator, jede Zeile hat einen typischen Separator, und sie bildet dann einen Key Index auf einem Value Index ab. Ich will ein paar Teile dieser Funktion ihnen genauer vorstellen, insbesondere hier, hier splitte ich jede Zeile am Separator. Nachdem ich die Zeile gesplittet habe, gehe ich über die einzelnen Einträge drüber, und schiebe den "keyInd"-Index auf die Liste drauf. Und das Gleiche machen wir mit dem "val"-Index. Das sind sozusagen meine "keys" dann, und das sind meine "values", und jetzt wende ich einfach wieder "zip" und "dict" an, und schon habe ich einen Dictionary-Zugriff auf die Zeilen, die mit "lines" hier oben reinkommen. So kann ich "dictAccessTo" zum Beispiel alle Zeilen aus "/etc/passwd" einlesen, durch "readlines", ich bekomme also eine Liste von Zeilen, diese Zeilen sind per Doppelpunkt separiert, und jetzt bilde ich den nullten Index auf den zweiten Index ab, was in diesem Fall bedeutet, Name of User-ID. Oder ich bilde den zweiten auf den nullten Index ab, da habe ich genau die entgegengesetzte Relation, User-ID auf Name, weiter kann ich zum Beispiel 5 auf 2 abbilden, Home of User-ID, oder auch 0 auf 6, Name of Login-Kommando. Und das will ich Ihnen jetzt in der Anwendung zeigen. Zuerst muss ich die Datei natürlich importieren, "import *", OK. Dann interessieren mich alle Zeilen von "etc/passwd". Die kriege ich raus, indem ich "readlines" aufrufe. Ja, jetzt zeige ich Ihnen die Zeilen der Datei. Sie sehen, jede Zeile hat Einträge, die durch einen Doppelpunkt separiert sind. Der erste Eintrag ist der User, und der dritte Eintrag ist die User-ID. Ja, diese Information ziehe ich mir jetzt raus aus diesen Zeilen. Hier sehe ich den nullten Index, den ersten Eintrag als "allUsers", das gleiche mache ich hier noch mal, aber diesmal für "allUids". Da gehe ich auf den dritten Eintrag, oder den Index mit der Nummer 2. Ja, und jetzt bin ich schon in der Situation, um im Dictionary aus diesen zwei Eingabesequenzen "allUsers" und "allUids" aufzubauen. Die gebe ich Ihnen jetzt hier mal aus. Und Sie sehen's, hier ist das Dictionary. Jetzt kann ich die "keys" drauf aufrufen, und ich kann auch die Frage beantworten, welche ist die User-ID von "root", und Sie wissen, das ist die 0. Und jetzt mache ich die Assoziation genau andersrum, in dem Fall bilde ich User-IDs auf Users ab. und jetzt kann ich zum Beispiel die spiegelbildliche Abfrage anwenden. Wer verbirgt sich hinter der User-ID 0? Ja, "root". Das war "etc/passwd", das Gleiche verwende ich jetzt in "etc/services", da stehen alle Services drin, die Ihr System zur Verfügung stellt. Zuerst brauche ich natürlich alle Zeilen, und wenn ich mir die ausgebe, sehen Sie, das da ein paar Einträge drin sind, die mich nicht interessieren, zum Beispiel durch einen Gartenzaun oder Doppelkreuz wird ein Kommentar eingeleitet. Den will ich natürlich nicht in meinen Auswertungen drin haben. Also lege ich mir hier eine zweite Liste mal leer an, "allPurLines", und was mache ich jetzt, ich fülle die Struktur "allPurLines" mit Zeilen, die nicht mit dem Gartenzaun beginnen und den Namen "udp" oder "tcp" enthalten. Und jetzt sehen Sie, jetzt schaut die ganze Sache viel schöner aus. Die reinen Einträge. Was ich jetzt machen will im nächsten Schritt, ist eine Abbildung von Service auf Port, und Sie sehen, diesmal ist der Separator der Space, die Leerzeichen hier, und natürlich interessieren mich auch nicht zu zur "/udp". Ich muss also ein bisschen intelligenter meine "keys" und meine "values" aufbauen. Das sind meine "keys", der nullte Eintrag, repräsentiert den Service, und jetzt, beim zweiten Eintrag, das ist der Port, interessiere ich mich für den ersten Eintrag, das ist der hier, aber ohne die letzten vier Zeichen, das ist das hier. Also, ohne die letzten vier Zeichen, und damit habe ich alle Services und Ports, und das zeige ich Ihnen jetzt einfach mal. Services - Sie sehen, zum Beispiel habe ich hier den Service "traceroute", oder die höheren sind die bekannteren, wo haben wir einen bekannten, zum Beispiel "http". Das waren die Services, und die Ports, die sind Zahlen zwischen 0 und 64.000, in diesem Fall nur 50.000. Ja, und jetzt lege ich da wieder ein Dictionary rum, das erste Dictionary bildet Services auf Ports ab, und das zweite Dictionary bildet Ports auf Services ab. Und was kann ich jetzt machen? Ich kann es natürlich ausgeben, sehen Sie, der Service "wbem-rmi" läuft auf dem Port 5987, und genausogut kann ich mir natürlich ausgeben lassen "por2Ser", das sehen Sie zum Beispiel auf dem Port 5630, läuft "precise-com", was auch immer das für ein Dienst ist. Aber ich kann natürlich jetzt noch mehr machen, weil ich habe ja meine Daten in der Dictionary drin. Ich kann zum Beispiel mir alles als Items rausgeben lassen, sprich als "Key Value Parts", ich kann mir zum Beispiel nur alle "keys", sprich alle Services ausgeben lassen, und ich kann zum Beispiel auch fragen, auf welchem Port läuft "https"? 443. Aber genauso gut kann ich natürlich auch die spiegelbildliche Abfrage machen, und fragen, was läuft auf 443? Wir wissen es jetzt natürlich schon, "https", aber es läuft auf 6000, ich denke, Sie wissen es nicht. Mir fällt's auch nicht ein, ist ja kein priviligierter Port, ja, "x11", das Protokoll. Das war doch relativ mächtig, aber doch einiges an Schreibarbeit. Drum wende ich jetzt die Funktion "dictAccessTo" an, indem ich das Ganze noch ein bisschen abstrahiere, "dictAccessTo" - was macht die Funktion? Sie empfängt eine Liste von Zeilen, separiert jeden Eintrag am Doppelpunkt, und bildet den nullten auf dem zweiten Eintrag ab. Der nullte ist der "key", der zweite Eintrag ist der "value". In diesem Fall ist das eine Abbildung von "user2Uid", und das kann ich hier jetzt ausgeben, und Sie sehen, "kdm", der User hat die User-ID 486. Natürlich kann ich jetzt auch die Relation auf den Kopf stellen, das heißt, ich bilde zwei auf null ab, und damit habe ich die umgekehrte Relation. Jetzt mache ich das Spielchen noch ein bisschen weiter, ich bilde hier 2 auf 5 ab, was bedeutet, "uid" auf "Home". Sie sehen, der User mit Uid 30 hat das Home "var/lib/wwwrun". Das ist aber ein relativ uninteressanter User, da gefällt mir der schon besser, das ist gut, und der hat naürlich sein "home" in "root". Jetzt kann ich noch zum Beispiel auch "name of login" abbilden, welche Log-in-Shell besitzt der User? Schauen wir doch gleich, welche Log-in-Shell besitzt der "root"? "name2Log-in", halt hier im Original. "bin/bash". OK. "Log-in" von "root" ist "bin/bash". Aber ich kann auch zum Beispiel Log-in von "mysql" abfragen, und Log-in ist "/bin/false", was bedeutet, ist jetzt keine Shell. "etc/group" hat eine ähnliche Struktur wie "etc/passwd", also kann ich das auch gleich hier anwenden, und dann sehen Sie zum Beispiel, welche Gruppen gibt es auf meinem System, zum Beispiel "wheel", und das hat die Group-ID, nicht die User-ID, 10. In dieser Lektion habe ich Ihnen vorgestellt, wie Sie in einem Dictionary über eine Datei drüberlegen können. Der Vorteil ist, dass Sie dann einen mächtigen Key Value-Zugriff auf Ihre Datei haben.

Python für Systemadministratoren Grundkurs

Lernen Sie die zahlreichen Funktionen der Kernsprache und die wichtisgten Bibliotheken für den Administrationsalltag kennen.

1 Std. 53 min (22 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
Erscheinungsdatum:10.03.2017
Laufzeit:1 Std. 53 min (22 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!