C#: XML-Serialisierung mit dem XmlSerializer Teil 2

Im vorhergehenden Beitrag haben wir aus einer einfachen Adressklasse eine XML-Datei generiert. In diesem Beitrag werden wir eine Kundenklasse erstellen, die entweder eine B2B- oder B2C-Adresse enthält und dann in eine XML-Datei geschrieben wird. Dazu erstellen wir zuerst eine Kundenklasse:


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    [XmlRoot("Kunde")]
    public class Customer
    {
        [XmlAttribute("Kundennummer")]
        public int CustomerID { get; set; }

        [XmlElement("Adresse")]
        public Address CustomerAddress { get; set; }
        
        public Customer(bool b2c)
        {
            if (b2c == true)
            {
                this.CustomerAddress = new AddressB2C();
            }
            else
            {
                this.CustomerAddress = new AddressB2B();
            }
        }
        /*default constructor*/
        public Customer() {
            this.CustomerAddress = new AddressB2C();
        }
    }
}

Wird jetzt versucht diese Klasse zu serialiseren wird eine Exception geworfen:


System.InvalidOperationException wurde nicht behandelt.
  Message="Beim Generieren des XML-Dokuments ist ein Fehler aufgetreten."
  Source="System.Xml"
  StackTrace:
       bei System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
       bei System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
       bei XML_Serialisierung.Program.Main(String[] args) in D:\data\Projects\intern\blog\src\XML-Serialisierung\Program.cs:Zeile 59.
       bei System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       bei Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       bei System.Threading.ThreadHelper.ThreadStart()
  InnerException: System.InvalidOperationException
       Message="Der Typ XML_Serialisierung.AddressB2B wurde nicht erwartet. Verwenden Sie das XmlInclude- oder das SoapInclude-Attribut, um Typen anzugeben, die nicht statisch sind."
       Source="uwky4mcz"
       StackTrace:
            bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCustomer.Write2_Address(String n, String ns, Address o, Boolean isNullable, Boolean needType)
            bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCustomer.Write3_Customer(String n, String ns, Customer o, Boolean isNullable, Boolean needType)
            bei Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterCustomer.Write4_Kunde(Object o)

Da das Property “CustomerAddress” vom Typ Address ist, beim serialisieren jedoch als Typ AddressB2B oder AddressB2C erscheint, weiss der XmlSerializer nicht, wie er diesen Datentyp verarbeiten soll. Damit der XmlSerializer damit korrekt umgehen kann, müssen wir ihn mit den möglichen Datentypen bekannt machen. Dazu wird das Attribut [XmlInclude(“”)] verwendet.


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    [XmlInclude(typeof(AddressB2C))]
    [XmlInclude(typeof(AddressB2B))]

    [XmlRoot("Kunde")]
    public class Customer
    {
        [XmlAttribute("Kundennummer")]
        public int CustomerID { get; set; }

        [XmlElement("Adresse")]
        public Address CustomerAddress { get; set; }
        
        public Customer(bool b2c)
        {
            if (b2c == true)
            {
                this.CustomerAddress = new AddressB2C();
            }
            else
            {
                this.CustomerAddress = new AddressB2B();
            }
        }
        /*default constructor*/
        public Customer() {
            this.CustomerAddress = new AddressB2B();
        }
    }
}

Klasse mit dem XmlSerializer serialisieren

Starten wir nun nochmals einen Versuch, wird das Serialsieren funktionieren.


/*create a customer object*/
Customer customer = new Customer(false);
customer.CustomerID = 175;

AddressB2B b2bAddress = ((AddressB2B)(customer.CustomerAddress));
b2bAddress.AddressNumber = 123456789;
b2bAddress.CompanyName = "Muster AG";
b2bAddress.Division = "Musterkreation";
b2bAddress.Street  = "Musterstrasse";
b2bAddress.HouseNumber = "77a";

b2bAddress.City = "Musterhausen";
b2bAddress.ZIP = "1234";
b2bAddress.Country = "In einem Land";


XmlSerializer xmls2 = new XmlSerializer(typeof(Customer));
StreamWriter mwriter2 = new StreamWriter("CustomerWithb2bAddress.xml");
xmls2.Serialize(mwriter2, customer);
mwriter.Close();

Und als Ergebnis erhalten wir:




Musterstrasse
77a
In einem Land
1234
Musterhausen
Muster AG
Musterkreation




Nützliche Links:

C#: XML-Serialisierung mit dem XmlSerializer Teil 1
msdn: xml.serialization

C#: XML-Serialisierung mit dem XmlSerializer Teil 1

Mit dem XmlSerializer können auf einfache Weise XML-Dokumente erstellt werden. Zum Beispiel wollen wir eine XML-Datei mit Adressdaten generieren, die folgendermassen aussehen soll:




    Musterstrasse
    77a
    In einem Land
    1234
    Musterhausen
    Max
    Mustermann

Dazu erstellen wir zuerst einmal eine einfache Adressklasse, in der die Adressdaten gespeichert werden können:


namespace XML_Serialisierung
{
    public class Address
    {
        public int AddressNumber { get; set; }        
        public string Street { get; set; }
        public string HouseNumber { get; set; }
        public string Country { get; set; }
        public string ZIP { get; set; }
        public string City { get; set; }
    }
}

Würden man diese Klasse jetzt serialisieren, hätten die XML-Tags nicht die gewünschten Namen. Der XmlSerializer würde die Namen der Properties verwenden.

Mit Hilfe von Attributen kann man die Ausgabe der XML-Datei steuern. Im obigen XML ist die Adressnummer ein Attribut des Wurzelelment Adresse. Um dies zu erreichen, wird das Attribut [XmlAttribute] verwendet. Das Attribut [XmlElement(“”)] wird verwendet um den Namen des XML-Tag festzulegen.


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    public class Address
    {
        [XmlAttribute("Adressenummer")]
        public int AddressNumber { get; set; }
        
        [XmlElement("Strasse")]
        public string Street { get; set; }

        [XmlElement("Hausnumer")]
        public string HouseNumber { get; set; }

        [XmlElement("Land")]
        public string Country { get; set; }

        [XmlElement("Postleitzahl")]
        public string ZIP { get; set; }

        [XmlElement("Stadt")]
        public string City { get; set; }
    }
}

In unserer Adressklasse fehlen uns aber noch ein paar Angaben wie Name, Vorname, Firmenname.. usw. Dazu werden wir 2 neue Klassen erstellen. Eine Klasse für Firmenadressen (B2B) und Privatadressen (B2C).


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    [XmlRoot("Adresse")]
    public class AddressB2C: Address
    {
        [XmlElement("Vorname")]
        public string Firstname { get; set; }

        [XmlElement("Nachname")]
        public string Lastname { get; set; }
    }
}

Das Attribut [XmlRoot(“”)] wird verwendet um den Namen des Wurzelelements (Rootelement) festzulegen.


using System.Xml.Serialization;

namespace XML_Serialisierung
{
    [XmlRoot("Adresse")]
    public class AddressB2B:Address
    {
        [XmlElement("Firmenname")]
        public string CompanyName { get; set; }

        [XmlElement("Abteilung")]
        public string Division { get; set; }

        [XmlElement("Kontaktperson")]
        public string ContactPerson { get; set; }
    }
}

Klasse mit dem XmlSerializer serialisieren

Das serialisieren der erstellten Adressklassen kann nun mit sehr wenig Code-Zeilen erledigt werden.
Dazu wird zuerst das gewünschte Objekt AddressB2B oder AddressB2C erstellt und dann die Werte zugewiesen. Damit der XmlSerializer den Typ der zu serialsierenden Klasse kennt, muss dieser beim Instanziieren des XmlSerializer mitgegeben werden.


/*********************************************************/
//example 1
/*********************************************************/
/*b2c addresse*/
AddressB2C addressB2C = new AddressB2C();
addressB2C.AddressNumber = 123456789;
addressB2C.Firstname    = "Max";
addressB2C.Lastname     = "Mustermann";
addressB2C.Address1     = "Musterstrasse";
addressB2C.HouseNumber  = "77a";
addressB2C.City         = "Musterhausen";
addressB2C.ZIP          = "1234";
addressB2C.Country      = "In einem Land";

/*Create a XmlSerializer from type AddressB2C*/
XmlSerializer xmls = new XmlSerializer(typeof(AddressB2C));
StreamWriter mwriter = new StreamWriter("b2cAddress.xml");
xmls.Serialize(mwriter, addressB2C);
mwriter.Close();

Als Ergebnis erhalten wir in der Datei “b2cAddress.xml” die gewünschte XML-Struktur.

Nützliche Links:

msdn: xml.serialization
C#: XML-Serialisierung mit dem XmlSerializer Teil 2

pfSense: Erweitern mit Zusatzpaketen (Erweiterungen)

Installieren

pfSense Package Manager
pfSense Package Manager
Die Firewall Distribution pfSense lässt sich sehr einfach mit Zusatzpaketen erweitern. Im “Package Manager” findet man im Register “Available Packages” die Erweiterungen, welche sich mit einem Mausklick installieren lassen. Den “Package Manager” findet man über das Menü “System > Packages”.

Wichtig: Beachten sollte man die Spalte “Status”. Dort wird angegeben für welche Plattform (pfSense Version) das Paket erstellt wurde. Oft funktionieren die älteren Pakete auch auf neueren Versionen, jedoch muss dies nicht so sein.

Deinstallieren

Die installierten Erweiterungen lassen sich auch sehr einfach wieder deinstallieren. Um eine Erweiterung zu deinstallieren, wechselt man in das Register “Installed Packeges”. Sucht die betreffende Zeile und kann mit einem Mausklick auf den oberen Button (“Remove this Package”) das Zusatzpaket entfernen.

pfSense Package Manager - Installed Packages
pfSense Package Manager – Installed Packages

Updaten der Zusatzpakete

Gelegentlich sollte man im “Package Manager” prüfen, ob eine neue Version für ein installiertes Paket vorhanden ist. Ist eine neuere Version vorhanden, wird die Spalte “Package Version” in rot hervorgehoben.

Neue Version eines Paketes vorhanden
Neue Version eines Paketes vorhanden
Die neue Version kann nun mit einem Mausklick auf den Button “pkg” automatisch installiert werden.

Nützliche Links

pfSense Webseite
pfSense – Manually uninstall packages

Buch: Computer-Forensik Hacks

Computer-Forensik Hacks
Computer-Forensik Hacks

Wenn man die Einleitung des Buches gelesen hat, in der man einen kleinen Überblick zur Thematik Computer-Forensik erhält, startet das erste Kapitel mit der Datensicherung. Dabei werden nicht nur die Daten von Speichermedien wie Festplatten oder USB-Sticks berücksichtigt, es werden auch die flüchtigen Daten aus dem RAM-Speicher gesichert. Wie kommt man an diese wertvollen Daten? Dies klingt nach einer sehr schwierigen Aufgabe, ins besonders wenn der Rechner noch passwortgeschützt ist… Mit der Hilfe des Buches “Computer-Forensik Hacks” ist dies beinahe kein Problem mehr. Es werden verschiedene Möglichkeiten aufgezeigt, um an diese Daten zu gelangen. Wie erfährt der interessierte in den Hack’s 4 und 5.

Das Buch “Computer-Forensik Hacks” ist eine Sammlung von Methoden, Tipps und Tricks aus der Computer-Forensik. Das Buch ist in 8 Kapitel unterteilt, in denen praktische Lösungen zu verschiedenen Problemstellungen in der Computer-Forensik, in sogenannten Hacks, Schritt für Schritt erläutert werden.

Mein Fazit

Los geht’s! Dies ist das ideale Buch, bei dem man das Gelesene gleich selber ausprobieren kann. In diesem Buch wird grundsätzlich kostenlose Software verwendet, so kann auch selber experimentiert werden. Egal ob unter Windows oder Linux, es werden beide Betriebssysteme berücksichtigt. Es macht wirklich Spass auf diese Weise spannende und komplexe Themen zu erarbeiten!

Die Webseite zum Buch

Webknight: Calling LoadLibraryEx on ISAPI filter “Webknight.dll” failed

Nach dem Installieren der 64-Bit Version von der “Application Firewall” Webknight, erhält man beim Aufruf von Webseiten die Fehlermeldung “Calling LoadLibraryEx on ISAPI filter “C:\Program Files\AQTRONIX Webknight\Webknight.dll” failed” angezeigt. Eine mögliche Ursache ist, dass die falsche Version von Webknight installiert wurde.

Webknight loading failed

Welche Version von Webknight muss auf einem 64-Bit Windows installiert werden?

Grundsätzliche sollte die 64-Bit Version installiert werden. Beim Betrieb von älteren Webapplikationen, welche noch 32-Bit COM-Komponenten verwenden, muss der IIS 7.x im 32-Bit Modus betrieben werden.

Application Pool Advanced Settings
Application Pool mit aktiviertem 32-Bit Modus

Wird nun die 64-Bit Webknight-Version installiert erhält man die oben beschriebene Fehlermeldung, da der IIS 7.x im 32-Bit Modus ausgeführt wird. Bei dieser Konstellation installiert man die 32-Bit Version von Webknight.

Nützliche Links

Webknight Webseite
Webknight FAQ

Windows: Nützliche Konsolenbefehle

MAC-Adressen der Netzwerkkarten anzeigen


>getmac

Physikal. Adresse   Transportname
=================== ==================
B8-AB-61-A3-24-77   Nicht zutreffend
08-00-22-02-E4-99   Nicht zutreffend
  1. Mit dem Befehl getmac werden die MAC-Adressen der vorhandenen Netzwerkkarten angezeigt.

Eine weitere Möglichkeit die MAC-Adressen der installierten Netzwerkkarten anzuzeigen, ist mit Hilfe des Befehls “ipconfig /all”.

getmac Dokumentation
ipconfig Dokumentation

MAC-Adresse zu einer IP bestimmen


>ping -n 1 192.168.60.25 
Ping wird ausgeführt für 192.168.60.25 mit 32 Bytes Daten:
Antwort von 192.168.60.25: Bytes=32 Zeit<1ms TTL=128

Ping-Statistik für 192.168.60.25:
    Pakete: Gesendet = 1, Empfangen = 1, Verloren = 0
    (0% Verlust),
Ca. Zeitangaben in Millisek.:
    Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms

>arp -a 192.168.60.25

Schnittstelle: 192.168.60.22 --- 0xf
  Internetadresse       Physische Adresse     Typ
  192.168.60.25          00-04-76-ef-ac-c3     dynamisch
  • 1. Zuerst wird ein ICMP Paket an die IP-Adresse verschickt um die MAC-Adresse herauszufinden.
  • 11. Nun kann mit dem ARP-Befehl die MAC- IP-Zuordnung aus dem ARP-Cache gelesen werden.

ping Dokumentation
arp Dokumentation

Alle Netzwerkverbindungen anzeigen


>netstat -ano

  Proto  Lokale Adresse         Remoteadresse          Status           PID
  TCP    0.0.0.0:135            0.0.0.0:0              ABHÖREN         864
  TCP    0.0.0.0:445            0.0.0.0:0              ABHÖREN         4
  TCP    0.0.0.0:3389           0.0.0.0:0              ABHÖREN         932
  TCP    127.0.0.1:31416        127.0.0.1:49178        HERGESTELLT     4264
  1. Das Kommando “netstat -ano” listet sämtliche Verbindungen eines Computers auf. Der Parameter “o” ist erst ab Windows 2000 vorhanden. Dieser bewirkt, dass zu sämtlichen Verbindungen auch die PID-ID der einzelnen Prozesse angezeigt werden. Der Status “Abhören” (Listen) beschreibt Serverdienste die auf Verbindungen warten.

Mit der Hilfe der PID-ID kann im Task-Manager herausgefunden werden, welcher Prozess eine Verbindung geöffnet hat oder auf Verbindungen wartet.

Windows Task-Manager
Die Verbindung mit der PID-ID 4264, aus dem obigen Beispiel, gehört zum Prozess “boinc.exe”.

netstat Dokumentation

Anzeigen wer eine Verbindung auf die lokale Maschine hat


>net session

Computer            Benutzername     Clienttyp     Öffn. Ruhezeit
------------------------------------------------------------------
\\192.168.60.25     DEMO-MASCHINE$                  0 00:00:02
\\192.168.60.25     demouser                        2 00:00:02

Der Befehl wurde erfolgreich ausgeführt.

net session Dokumentation

Windows herunterfahren

Dieser Befehl ist nur in Windows 2000 mit installiertem “Resource Kit” oder in neueren Windows Versionen vorhanden.


>shutdown /s /t 180
  1. Windows wird in 3 Minuten heruntergefahren. Verwendet man den Parameter “/r” anstelle “/s” wird der Computer neu gestartet.

Mit dem Parameter “shutdown /a” kann das Herunterfahren abgebrochen werden.


>shutdown /i
  1. Startet die grafische Oberfläche um einen Remotecomputer neu zu starten oder herunterzufahren.
Grafisches Oberfläche des shutdown Befehls
Mit der grafisches Oberfläche kann ein Remotecomputer heruntergefahren oder neu gestartet werden.

Dazu noch einen Hinweis aus der Dokumentation:

Damit ein Remotecomputer heruntergefahren oder neu gestartet werden kann, müssen die Firewallausnahmen Remoteverwaltung und Windows-Verwaltungsinstrumentation auf dem Remotecomputer aktiviert sein.

shutdown Dokumentation

DNS client resolver cache löschen und anzeigen


>ipconfig /flushdns
  1. Löscht den DNS client resolver cache.

>ipconfig /displaydns > dns_resolved.txt
  1. Speichert den DNS client resolver cache in die Datei dns_resolved.txt.

ipconfig Dokumentation

Taskliste anzeigen


>tasklist 
  1. Zeigt eine Liste von allen Applikationen und Services sowie deren Prozess ID (PID) an.

tasklist Dokumentation

Einen Prozess beenden

In Windows 2000 (und früher) ist dieser Befehl nicht vorhanden. Für diese Systeme gibt es dieses Kommando als zusätzliches Tool “pskill”.


>taskkill /f /pid 12345
  1. Erzwingt das Beenden des Prozesses mit dem PID 12345.

taskkill Dokumentation

Dateien vergleichen

Um in der Konsole zwei Dateien zu vergleichen, gibt es das Kommando “fc”.


>fc datei.txt datei.txt
  1. Hier werden die Dateien “datei.txt” und “datei2.txt” miteinander verglichen

Als Output erhält man die Zeilen die sich unterscheiden:


Vergleichen der Dateien datei.txt und DATEI2.TXT
***** datei.txt
***** DATEI2.TXT
In der zweiten Datei..
*****

Die Datei “datei2.txt” enthält zusätzlich die Zeile “In der zweiten Datei..”

fc Dokumentation

Nützliche Links

Windows Command-Line Reference A-Z
DNS-Abfragen mit nslookup
nslookup: anzeigen einer Liste mit allen IP’s und Aliasse einer Domain
ARP-Übersetzungstabelle anzeigen und verändern

VBScript: Windows Service remote starten und stoppen

Dank der WMI-Schnittstelle ist es möglich ein Skript zu schreiben, das auf einem remote System einen Service überwacht und bei Bedarf auch neu starten oder stoppen kann.


Dim objWMIService
Dim lServices
Dim strService: strService = "MeinService"
Dim strComputer: strComputer ="."

Set objWMIService = objSWbemLocator.ConnectServer("10.0.200.33", "root\cimv2", _
"Benutzer", _
"Passwort", _
"","")


Set lServices = objWMIService.ExecQuery("Select * from Win32_Service Where Name='" & strService & "'")
For Each objService In lServices
    Select Case objService.State
     case "Stopped" 'start service
          errReturn = objService.StartService()
     case "Paused" 'resume service
          errReturn = objService.ResumeService()
     case "Running" 'nothing todo
          wscript.echo objService.Name & " with ID " & objService.ProcessId & " is already started."
     End Select
Next

Anmerkung zu den Codezeilen:

  • 03 Achtung: bei der Definition des Servicenamen handelt es sich nicht um den Anzeigenamen sondern um den Dienstnamen
  • 06 Remote WMI Service initiieren (auch lokaler möglich)
  • 12 Mit einer WQL Abfrage wird der gesuchte Dienst selektiert um dann mit diesem Arbeiten zu können
  • 14 Status des Dienstes abfragen (Mögliche Werte sind: “Stopped”, “Start Pending”, “Stop Pending”, “Running”, “Continue Pending”, “Pause Pending”, “Paused”, “Unknown”)
Eigenschaften des Dienstes Anwendungsverwaltung
Bei der WQL-Abfrage den Dienstnamen verwenden und nicht den Anzeigenamen

Nützliche Links:

Managing Windows with WMI
WMI Query Language (WQL)
Win32_Service Class Proberties

WMI Scripting Primer: Part 1
WMI Scripting Primer: Part 2
WMI Scripting Primer: Part 3

Qt: Thumbnails von Webseiten erstellen

Thumbnail des monsterli.ch Blog
Thumbnail das mit Hilfe von QWebpage und QPainter erstellt wurde

Das Qt Framework bietet mit dem Modul QtWebKit eine vollständige “Browser-Engine”, welche das Anzeigen und Bearbeiten von Webseiten ermöglicht. Dieses Modul ermöglicht auf einfache Weise Thumbnails von Webseiten zu erstellen. In der Dokumentation zu der Klasse QWebPage befindet sich auch eine Beispielklasse zum Erstellen von Thumbnails ohne Widgets zu verwenden. Muss also ein “Command Line Tool” erstellt werden, ist das der ideale Startpunkt.

Thumbnailer Beispielklasse

Die Header-Datei der Thumbnailer-Klasse:


#ifndef THUMBNAILER_H
#define THUMBNAILER_H
#include 
#include 
#include 

class Thumbnailer : public QObject
 {
     Q_OBJECT

 public:
     Thumbnailer(const QUrl &url);

 signals:
     void finished();

 private slots:
     void render();

 private:
     QWebPage page;

 };

#endif // THUMBNAILER_H

Die Thumbnailer-Klasse:


#include "thumbnailer.h"

Thumbnailer::Thumbnailer(const QUrl &url)
{
    page.mainFrame()->load(url);
    connect(&page, SIGNAL(loadFinished(bool)),
        this, SLOT(render()));
}

void Thumbnailer::render()
{
    page.setViewportSize(page.mainFrame()->contentsSize());
    QImage image(page.viewportSize(), QImage::Format_ARGB32);
    QPainter painter(&image);

    page.mainFrame()->render(&painter);
    painter.end();

    QImage thumbnail = image.scaled(400, 300);
    thumbnail.save("thumbnail.png");

    emit finished();
}

Die main-Klasse:


#include "thumbnailer.h"
#include 

int main(int argc, char *argv[])
{
    QApplication a( argc, argv);
    Thumbnailer myThumb(QUrl("https://www.google.com"));
    QObject::connect(&myThumb, SIGNAL(finished()), QApplication::instance(), SLOT(quit()));

    return a.exec();
}

 

Verwenden von Browser Plugins wie Adobe Flash

Verwendung von Plugins aktiviert
Verwendung von Plugins aktiviert
Verwendung von Plugins deaktiviert
Verwendung von Plugins deaktiviert

Damit auch die Flash-Elemente einer Webseite auf dem Thumbnail dargestellt werden, muss das Flash-Plugin bereits auf dem System installiert sein und das QWebSetting “PluginsEnabled” aktiviert werden:


page.settings()->setAttribute(QWebSettings::PluginsEnabled, true);

 

Nützliche Links

QT Beispiel Projekt
WebScreenie is small qt command-line utility to create snapshot of webpages.
QT-Code websnap

Linux: Nützliche Konsolenbefehle

DHCP-Lease erneuern


>sudo dhclient -r
>sudo dhclient
  1. Gibt den aktuellen DHCP-Lease frei
  2. Holt eine neue IP-Adresse

man dhclient

Anzeigen der aktuellen IP-Adresse


>ifconfig
  1. Anzeigen aller “network interfaces” und deren IP-Adressen

man ifconfig

Anzeigen und bearbeiten der Routingtabelle

Routingtabelle: statische Routen definieren unter: Windows, Debian Linux und Esxi-Server
man route

Anzeigen der Festplattenbelegung


>df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sda1        16G    5.0G   11G   33% /
udev            2.0G    4.0K  2.0G    1% /dev
tmpfs           807M    764K  806M    1% /run
  1. Festplattenbelegung “einfach lesbar” (K, M, G) anzeigen

man df

Grösse eines Ordners anzeigen


>du -h -s lib/
388M    lib/
  1. Summierte Grösse des Unterverzeichnisses lib/ anzeigen

man du

Dateien löschen die älter als x Tage sind


>find /pfad/zu/den/dateien* -type f -mtime +7 -delete
  1. Argument: Vollständiger Pfad mit den Dateien
  2. Argument: Nur Dateien berücksichtigen (Keine Ordner oder Links)
  3. Argument: Findet alle Dateien die älter als 7 Tage sind
  4. Argument: Lösche alle im Suchresultat gefundenen Dateien

Alternative für nicht GNU Unixes:


>find /pfad/zu/den/dateien* -mtime +7 -exec rm {} \;
  1. Argument: Vollständiger Pfad mit den Dateien
  2. Argument: Findet alle Dateien die älter als 7 Tage sind
  3. Argument: Lösche alle im Suchresultat gefundenen Dateien

Delete Files Older Than x Days on Linux
man find

Prozesse aller Benutzer durchsuchen


>ps aux | grep konsole
  1. Argument: Alle laufenden Prozesse aller Systembenutzer anzeigen
  2. Argument: Filtern: alle Prozesse mit dem Namen Konsole anzeigen

Ausgabe:


usr  1755  0.0  0.7 119892 29364 ?      Sl   00:41   0:04 /usr/bin/konsole
usr  6515  0.0  0.0   4384   836 pts/1  S+   02:10   0:00 grep --color=auto konsole

Alternative:


>pgrep -l konsole

man ps
man grep
man pgrep

Änderungen der Datei syslog in Echtzeit anzeigen


>tail -f /var/log/syslog
  1. Neue Einträge der Syslogdatei in der Konsole ausgeben

man tail

Nützliche Links

Fosswire Linux Reference Card
One page Linux Manual
Auflistung mit verschiedenen Linux Cheat Sheets

Windows 7: Windows Kontextmenü bringt den Explorer zum Absturz

Problembeschreibung

Windows Explorer Crash
Windows Explorer Absturz
Nach dem Installieren, Deinstallieren oder Updaten einer Applikation, wird das “Windows Kontextmenü” nicht mehr angezeigt. Die mehrmaligen Versuche, mit der rechten Maustaste das Kontextmenü zu öffnen, scheitern und bringen den Explorer zum Absturz. Obwohl Windows den Explorer neu startet, kann das Kontextmenü immer noch nicht angezeigt werden.

Mögliche Ursache

In der Registry ist nach dem In-, Deinstallieren oder Updaten ein falscher Kontextmenüeintrag vorhanden. Dieser Eintrag zeigt auf eine nicht mehr vorhandene oder fehlerhafte Datei. Der Explorer wird versuchen diese fehlerhafte Verknüpfung zu laden und stürzt ab.

Mögliche Lösung

In der Registry müssen die fehlerhaften Kontextmenüeinträge entfernt werden, damit diese nicht mehr geladen werden. Die meisten Einträge sind unter folgenden Registry-Pfade zu finden:


HKEY_CLASSES_ROOT\*\shell
HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers
HKEY_CLASSES_ROOT\AllFileSystemObjects\ShellEx

Um nicht direkt in der Registry arbeiten zu müssen, gibt es ein gutes Tool von Sysinternals. Das Tool “Autoruns” ermöglicht das Aktivieren und Deaktivieren von Registry-Einträgen mit einem einzelnen Mausklick. Fehlerhafte Einträge werden hervorgehoben und so sind falsche Einträge schnell gefunden. Ist man sich nicht sicher welcher Eintrag den Absturz verursacht, so können diese einzeln deaktiviert werden, bevor man den Verursacher endgültig entfernt.

Autoruns: deaktivieren eines Kontextmenüeintrages
Hier in diesem Beispiel wurde der Kontextmenüeintrag der Sonic Software Roxio deaktiviert. Nach dem Deaktivieren wurde das Menü wieder erfolgreich angezeigt.

Nützliche Links

Sysinternals Autoruns for Windows v11.22
How to Clean Up Your Messy Windows Context Menu