Linux - Der Kernel  
Fangen wir mit der Geschichte des Kernels an. Dieser ist schließlich auch das Herz des Betriebssystems, welcher die Kommunikation zwischen den einzelnen Hardwarebestandteilen wie CPU, Arbeitsspeicher etc. regelt. Der Kernel heißt Linux im Gegensatz zum Namen des Betriebssystems, welches den Namen GNU(GNU is Not Unix)/Linux trägt. Warum das so ist wird im nächsten Abschnitt angesprochen.

1991 begann Linus Torvalds auf seinem Intel 80386, basierend auf dem Betriebssystem Minix ein Betriebssystem, welches Ähnlichkeiten zu Unix aufweist, für x86 PCs zu schreiben. Seine Beweggründe waren relativ einfach: Er fand kein Betriebssystem welches seinen Anforderungen entsprach und das er sich leisten konnte (MS Dos war nicht umsonst).
Folglich programmierte er sich sein Eigenes. Seit einiger Zeit prozessiert übrigens die SCO Group gegen IBM (wegen Linux), die felsenfest davon überzeugt ist, dass Teile des Linuxcodes geklaut seien!Wens interessiert kann hier alles über die fast unendliche Geschichte lesen! Die erste lauffähige Linuxversion(Linux 0.01) wurde am 17. September 1991 auf einem öffentlichen FTP-Server der Uni Helsinki, wo Linus Torvalds Informatik studierte, freigegeben. Der Quellcode war nur ca. 241 kb groß und die makefile war nur 96 Zeilen lang.
Am 01.04.1994 erschien Linux 1.0 und wurde in dieser Version Netzwerkfähig und Torvalds stellte den Quelltext von Linux offiziell unter die GPL. Ferner wurde eine GUI (Graphical User Interface=Benutzeroberfläche)an den Kernel angepasst. Diese wurde von dem XFree86 Projekt beigesteuert welches allerdings in Zukunft augrund neuer (und komplizierterer) Lizenzgebung durchxorg abgelöst wird und in einigen Distributionen, wie FedoraCore jetzt schon und bei Suse ab Noveber, zum Standart gehört. Mit Linux 2.0(Juni 96) wurde das ansteueren mehrerer Prozessoren eingeführt, was besonders im Server und vorallem im Clusterbereich eine große Rolle spielt. Die "aktuelle", stabile Kernel Version ist der 2.6.9 er Kernel.

Was ist nun GNU/Linux?
Wie schon vorher erwähnt ist dies der eigentlich Name des Betriebssystems welches den Linux-Kernel beinhaltet. Dies wurde von Richard Stallmans Free Software Foundation so festgelegt und die erste Distribution die GNU/Linux im Namen trug war Debian, wobei die Distribution Slackware als Ur-Distribution gilt! Die Vorsilbe GNU soll darauf hinweisen, dass das Betriebssystem nicht nur aus dem Kernel besteht sondern Werkzeuge aus dem GNU Projekt beinhaltet, wie z.B die GCC (Gnu Compiler Collection) die Bibliotheken für C,C++,Java,Fortran,Objective-C und ADA und naürlich eben die Compiler selbst enthält. Eine kleine Auflistung unter welchen Prozessoren die GCC läuft kann man hier finden. Zunächst wollte man für das GNU Projekt einen anderen Kernel nehmen als Linux, welcher sich Hurd nannte. Allerings stellte sich das Unterfangen einen Kernel zu schreiben als so schwierig heraus, dass man zunächst auf Linux zurückgriff und offensichtlich ist man auch dabei geblieben.

Zu den Distributionen
Eine Distribution hat als Kernel logischerweise Linux. Was der Distributor an Paketen(die "Programme") zusammenstellt ist individuell, deshalb gibt es auch soviele davon. Hier erstmal eine kleine Aufzählung: Slackware(Die Ur Distribution), Debian, Suse(wohl eine der Bekanntesten), Red-Hat, wobei der Nachfolger von Red-Hat Fedora-Core ist, Mandrake, und eine der aufstrebensten die ich selbst benutze: Gentoo (natürlich gibt es sehr sehr viele mehr). Grundsätzlich ist Linux OpenSource und prinzipiell gibt es jede Distribution zum freien Download, allerdings wollen die Distributoren auch irgendwie Geld verdienen und entwickeln selbst Software oder packen auf ihre Distribution kommerzielle Pakete, die sie dann verkaufen. Hierbei gibts dann oftmals besseren Support von Hardware und eben mehr Pakete, was sich bei der Anzahl der CDs oftmals zeigt(8-10 CDs für die gekaufte "Professional" Version, 1-3 bei der Download-Version). Suse z.B packt für die Fritz! - Produkte Treiber mit auf die Distribution, welche bei der Installation, soweit vorhanden, gleich erkannt werden und somit dann beim ersten Start gleich genutzt werden können. Bei anderen Distributionen muß man sich dann halt erstmal den Treiber runterladen und installieren, wobei wir schon gleich beim nächsten Thema sind: Die Installation von Software. Diese läuft etwas anders ab als bei Windows. Grundsätzlich kann man mit jeder Distribution seine Software von grundauf selbst kompilieren. Dazu muss man sich nur die Sourcen runterladen(meist als .tar), und so vorgehen wie es in der Readme-Datei(in 99,9% der Fälle) steht. Einem Linux-Anfänger ist dies aber 1. Viel zu kompliziert, da man oftmals noch die ganzen Abhängigkeiten beachten muss, sonst tut sich nämlich gar nix und 2. weiß dieser auch nicht in welche Verzeichnisse die ganzen Dateien installiert werden und wenn man mal das Programm dennoch deinstallieren will, kann das kompliziert werden! Deshalb nutzen viele Distributionen sogenannte .rpms. Diese kann man in etwa mit .exe Dateien vergleichen, denn diese kann man relativ einfach installieren, außerdem werden die Abhängigkeiten in der Regel gleich mitbeachtet und sehr viele .rpms sind schon auf den zahlreichen CDs(gerade wenn man sich eine Distribution gekauft hat)dabei. Hier muss man allerdings aufpassen, da viele .rpms auf die jeweilige Distribution zugeschnitten sind, hierbei ist allerdings rpmseek sehr hilfreich. Wenn man sich ein wenig mehr auskennt kann man sich auch seine eigenen .rpms machen. RPMs werden übrigens mithilfe von Systemverwaltungstools(welche der Systemsteuerung bei Windows entsprechen)installiert. Diese heißen bei z.B bei Suse YAST (yet another setup tool), bei Mandrake HardDrake...Diese sind prinzipiell für Dasselbe zuständig. Die Installation der meisten Distributionen ist nicht sehr schwer und verläuft teilweise sehr viel angenehmer als bei Windows. Ein großer Vorteil dabei ist, dass man wählen kann welche Pakete nun installiert werden sollen und welche nicht. So kann man sich schon ein sehr kleines Betriebssystem mit ca. 200-300 MB installieren, muss dann aber auch auf den Komfort von großen grafischen Benutzeroberflächen verzichten und hauptsächlich mit der Konsole arbeiten. Für ältere Systeme mit schwächeren Prozessoren und wenig Arbeitsspeicher ist dies übrigens sehr empfehlenswert, da aufwändige Desktop Umgebungen sehr viel "Power" benötigen und man dies so umgehen kann, ohne auf die Aktualität des Betriebssystems verzichten zu müssen. Mittlerweile selbstverständlich, ist es ohne Weiteres möglich auf einen "Windowsrechner" eine Distribution zu installieren. Gebootet wird mithilfe eines sogenannten Bootloaders welcher bei der Installation einer Distribution gleich mitinstalliert wird. Standartmäßig dabei sind Lilo und Grub. Es gibt noch wesentlich mehr davon, aber das sind die beiden Gängisten. Darüber hinaus gibt es auch welche für Windows. Fat, fat32, ntfs etc. sind für Linux übrigens kein Problem. Windows erkennt allerdings keines der Linux Dateisysteme wie ReiserFs, ext2, ext3 (welche im Übrigen nicht fragmentieren)ohne zusätzlichen Programme. Somit ist es auch möglich von einer gestarten Linux-Umgebung auf Windows Dateien zuzugreifen und, falls man kein ntfs-Partition hat, auch auf diese zu schreiben. Gelesen werden können alle Partitionen und demnächst wird es wohl auch einen gut funktionierenden ntfs-writing support geben, im Kernel ist er jedenfalls schon vorhanden. Eine Installation von z.B Mandrake Linux dauert übrigens (ist natürlich abhängig von der Größe der Pakete die installiert werden sollen und der Aktualität der Hardware) im Schnitt ca. 15 min (AMD Athlon 800, 256 MB SD-Ram, 20 GB Samsung HD, 48xCD-ROM), was mittlerweile mit einem aktuelleren System nur ca. 7-8 min dauert.
Grafische Benutzeroberflächen
Die 2 größten und am meisten genutzen grafischen Benutzeroberflächen sind wohl KDE und GNOME. Bei Windows gibt es keine Wahl eines Desktops, denn er ist einfach da und das wars dann auch schon. Wie so oft läuft das unter Linux gänzlich anders. Ein laufendes System ist nämlich in keinster Weise von einem Desktop abhängig. Man kann nämlich wie im vorigen Abschnitt schon erwähnt eine ziemlich sporadische Oberfläche wie z.B Blackbox verwenden.

Dies ist möglich, da man als Basis für eine grafische Benutzeroberfläche den sogenannten XServer verwendet der die "Kommunikation" mit der Hardware(insbesondere mit der Grafikkarte, der Eingabegeräte Maus und Tastatur und natürlich dem Bildschirm) regelt. Die 2 erwähnenswerten XServer unter Linux sind X.Org und XFree, wobei mittlerweile alle großen Distributionen X.org nutzen.

Bei der Blackbox hat man bei einem Rechtsklick ein kleines Menü (welches man aber beliebig gestalten und erweitern kann) und eben die Shell, welches das wichtigste Werkzeug bei Unix und Linux-Systemen ist. Beispiel für die

Selbstverständlich lässt sich auch ein Hintergrundbild einrichten und die Oberfläche lässt sich zusätzlich farblich gestalten. Einen Dateibrowser muss man installieren(gibt es auch wie Sand am Meer) wenn man weder Gnome noch KDE zusätzlich installiert hat, denn diese bringen ihre Eigenen standartmäßig mit. Man kann mehere Desktops installieren und sich vor jedem einloggen für einen entscheiden. Bei Gnome heißt der Standartfilebrowser Nautilus und bei KDE Konqueror(lässt sich bei beiden natürlich beliebig ändern!), wobei man den Konqueror zusätzlich auch als Internet Browser nutzen kann.
Es gibt noch zahlreiche weitere Desktops wie die Fluxbox(die Blackbox wird leider nicht mehr weiterentwickelt, aber diese gibt es sogar für Windows als Desktopersatz), icewm, WindowMaker... Besonders im Server Bereich braucht man oft keine großartigen grafischen Benutzeroberflächen und kann somit effizient ohne viel Aufwand ziemlich schnell zu einem Ergebnis kommen, vorausgesetzt man weiß was man tut.

 
Die Shell
Die Shell ist ein Kommandozeileninterpreter die geschrieben Text als Befehl interpretiert und schließlich ausführt indem sie zum Beispiel ein Programm startet. In Linux Systemen kommt die Bash zum Einsatz, aber auch unter Dos gibt es die cmd.com was ebenfalls eine shell ist und selbst Windows XP hat noch eine Eingabeaufforderung die allerdings in keinster Weise die selbe Bedeutung wie unter Linux hat. Wie eben erwähnt benutzt Linux Bash als Kommandozeileninterpreter, welche wiederum aus einem GNU-Projekt stammt. Jede grafische Benutzeroberfläche verwendet ihre eigene Konsole mit der dann die Bash angesprochen wird. Solche Terminals sind z.B Xterm, Gnome-Terminal... Eine Shell ist selbstverständlich nicht nur dazu da um Programme zu starten, man kann sogenante Bash-Scripts schreiben die selbst kleine Programm sind...man kann diese Scripts auch sehr leicht ausführbar machen, so dass man sich das lästige schreiben sparen kann und dann quasi nur das Script aufrufen muss, welches dann selbständig abläuft. Hier nun eine kleine Auflistung von den wichtigsten und am häufgisten gebrauchten Unix-Shell Kommandos( man beachte Leerzeichen und Groß- und Kleinschreibung sehr genau!):
- cp /quellverzeichnis/ /Zielverzeichnis/ : (copy)Kopieren einer Datei von einem Ort zum Anderen
- cd /wunschverzeichnis/ : (change directory) ins gewünschte Verzeinis wechseln bzw. nur cd um ins   Homeverzeichnis zu wechseln
- ls /wunschverzeichnis/ : (list) Auflisten des Inhalts eine Verzeichnisses
- rm /wunschverzeichnis/Wunnschdatei : (remove) löschen einer Datei
- rmdir /wunschverzeichnis/ : (rm Directory) löschen eines ganzen Verzeichnisses(allerdings nur Leere)
- su : (superuser) - sich als superuser anmelden um mit diesem Zugriff auf für normale User gesperrte   Befehle, Anwendungen etc.
- mount /mnt/Gerät : Gerät mouten um dann auf das Medium zugreifen zu können
- umount /mnt/Gerät : Gerät aushängen um z.B die CD weider aus dem Laufwerk zu bekommen
- sh /wv/script.sh : (shell) ein shell-script Ausführen
- mv /qv/datei /wv/datei : (move) Datei von einem Ort zum anderen verschieben
- kill(all) programmname : falls mal ein Programm nicht mehr reagiert um den Prozess zu beenden
- modprobe treibername : laden eines Treibers, der allerings im Kernel aktiviert sein muss
- nano -w /wv/textdatei : mit dem nano-Editor eine Textdatei öffnen und bearbeiten und mit angehängtem    -w auch abspeichern
- cat /wv/(Text)datei : schnellanzeige des Inhalts, allerdings bei Textdateien am sinnvollsten, da andere   Formate anders kodiert sind
- touch : erstellen einer Datei, bzw. wenn die Datei schon existiert kann man durch anhängen von-m und  dem richtigen ZeitDatumformat den letzten Zugriffszeitpunkt oder  den letzten Änderunsgzeitpunkt  ändern z.B: touch -m 12142100 für den 14. Dez 21:00 Uhr
- rpm -ivh xxxxx.rpm : um ein rpm Paket zu installieren (mit Statusanzeige und Ausgabe)
- startx : starten des Xserver
- dmesg : Ausgabe von Systeminfos
- halt(oder auch shutdown) : Runterfahren
- reboot : Neustart
- adduser : einen neuenBenutzer hinzufügen
- fsck.filesystem(ext3 z.B) : checkt das jeweilige Filesystem
- fdisk /dev/hda(oder auch b) : fdisk tool
- top : kleiner Systemmonitor