LINUX: Alles ist eine Datei

Unter Linux werden alle Ausgaben als Datei betrachtet.

LINUX: Alles ist eine Datei
Photo by Ian Parker / Unsplash

Linux ist ein Betriebssystem, das für seine Flexibilität, Stabilität und die engagierte Open-Source-Community bekannt ist. Im Vergleich zu Windows erleben viele Nutzer, dass Linux einfach Spaß macht, während Windows oft Frustration verursacht, da man seine Arbeitsweise nach den Vorgaben von Microsoft gestalten muss. In diesem Artikel werde ich die Besonderheiten von Linux beleuchten und zeigen, warum es eine bevorzugte Wahl für viele Technik-Enthusiasten ist.

Das Konzept "Alles ist eine Datei" in Linux

Ein zentrales Konzept von Linux ist, dass alles im System als Datei behandelt wird. Dieses Prinzip vereinfacht den Zugriff und die Verwaltung von Systemressourcen erheblich.

Beispiel

Geräte wie Festplatten (/dev/sda), Eingabegeräte (/dev/input/mice) oder Mikrofone und Webcams (z.B. /dev/dsp) werden als Dateien behandelt, was die Interaktion mit ihnen erleichtert. Man könnte quasi die Datei Mikrofon in die Datei Lautsprecher kopieren und somit direkt ausgeben, was das Mikrofon hört. Über das Netz vielleicht? Dazu später mehr.

Grundlegender Umgang mit Dateien

  • Pipes (|) ermöglichen das Verbinden von Programmen und Datenströmen. Dies bedeutet, dass Daten wie Dateien behandelt und flexibel zwischen Anwendungen übertragen werden können. Die Ausgabe eines Befehls wird so zur Eingabe eines anderen Befehls.
  • Umleitungen (>) leiten die Ausgabe eines Befehls in eine Datei auf dem Datenträger um.

Flexibilität von Linux

Linux bietet zahlreiche Anpassungsmöglichkeiten, die dieses Vorgehen äußerst flexibel machen.

Beispiel: Erstellen eines ISO-Images

cat /dev/sr0 > /home/user/cdrom.iso

Hier wird das CD-Laufwerk (/dev/sr0) wie eine Datei gelesen und die Daten werden in einer Datei gespeichert. Wer braucht also noch ein extra Programm, wie unter Windows, wenn man das Image einer CD auch einfach so abspeichern kann. Es gibt natürlich auch fehlerkorrigierende Alternativen zu cat, wie z.B. ddrescue...

Beispiel: Image auf einen USB-Stick schreiben

cat image.iso > /dev/sdb

Hier wird das Image für einen Boot-Stick (image.iso) wie eine Datei gelesen und die Daten werden auf den Stick (/dev/sdb) geschrieben. Wer braucht Etcher oder vergleichbare Windows-Programme.

Beispiel: Clonen einer Festplatte

dd if=/dev/sda status=progress of=/dev/sdb

Die Festplatte (/dev/sda) wird gelesen und auf eine andere Festplatte (/dev/sdb) geschrieben. Dabei wird auch gleich der Fortschritt der Aktion angezeigt.

Beispiel: Mit tar ganze Verzeichnisse über das Netz kopieren

tar czf - /home/user | ssh user@remotehost 'tar xzf - -C /home/user'

Das Verzeichnis /home/user wird durch tar komprimiert und die Daten werden direkt durch eine Pipe über ssh an einen anderen Rechner gesendet, wo sie direkt wieder entpackt werden. So kann die verfügbare Bandbreite im Netz optimal ausgenutzt werden. Wie würde ich diesen Einzeiler unter Windows umsetzen?

Beispiel: Das Mikrofon eines Rechners per ssh auf einem anderen Rechner wiedergeben

ssh user@remotehost 'cat /dev/dsp' | aplay

Dieser Befehl loggt sich per ssh auf einem fremden Rechner ein und gibt die Datei Mikrofon (/dev/dsp) aus. Diese Ausgabe wird auf den eigenen Rechner gepiped und dort zur Eingabedatei von aplay. Somit hat man den remotehost in eine Wanze umfunktioniert - eine Methode, die sich Spionagedienste gerne zunutze machen.

Beispiel: Die Webcam eines Rechners per ssh auf ein lokal laufendes VLC umleiten

ssh user@remotehost 'cat /dev/video0' | vlc -

Hier wird die Webcam (/dev/video0) auf dem remotehost ausgegeben. Dieser Stream wird auf das lokal laufende vlc umgeleitet. Auf diese Weise kann man durch die Webcam eines entfernten Rechners schauen.

Fazit

Dank des Konzepts "Alles ist eine Datei" bietet Linux tolle Möglichkeiten, beliebige Datenquellen mit beliebigen Tools weiterzuverarbeiten - und das alles in einem einzigen Befehl auf der Kommandozeile. Für viele Anwender stellt Linux daher eine bessere Wahl im Vergleich zu Windows dar. Die Möglichkeit, Aufgaben mithilfe von Pipes wie Legosteine zu verbinden, erlaubt es, Abläufe viel schneller und effizienter zu erledigen. Dies erspart die Installation zahlreicher Einzelprogramme und die mühsame Arbeit mit individuellen Lösungen.