If you want to help people,
keep it simple!

Die Linux Dateitypen - oder - "Was zählt, ist der Inhalt"

Das Konzept “alles ist eine Datei” ist eine der wesentlichen Unix/Linux-Philosophien.

Die Idee dabei ist folgende:

Egal, was Du auf einem System erreichen möchtest - alles, was Du dafür brauchst, sind Werkzeuge, um irgendwie mit Dateien zu arbeiten.

Gib sie aus, bearbeite sie, kopiere sie, verschiebe sie… was immer du brauchst.

OK - das trifft nicht auf wirklich alles zu - aber je mehr Du mit Linux-Systemen arbeitest, desto öfter wirst Du dieses Muster erkennen.

Also lass uns über Dateien sprechen …

Die Dateinamenserweiterung spielt keine Rolle

Auf einem Linux-System wirst Du - wie auf anderen Systemen auch - Dateinamen sehen, die mit einer Erweiterung wie “.conf”, “.sh” oder “.pdf” enden, nur um einige zu nennen.

Aber auf einem Linux-System sind diese Erweiterungen nur Kosmetik.

Sie haben keine Bedeutung dafür, wie Du eine spezielle Datei verwenden kannst. Eine PDF-Datei könnte “bericht.txt” und ein Bild “kaetzchen.conf” genannt werden.

Die einzigen Dinge, die für ein Linux-System zählen, sind

  1. der Typ der Datei und
  2. der Inhalt der Datei

Sieben verschiedene Typen von Dateien

Auf einem Linux-System wirst Du mit mehreren verschiedenen Dateitypen in Kontakt kommen. Wobei für die ersten Schritte auf einem Linux-System wahrscheinlich die folgenden drei erst einmal am relevantesten sind: reguläre Dateien, Verzeichnisse und symbolische Links.

Typ 1: Reguläre Dateien

Reguläre Dateien (also “normale Dateien”) sind Dateien, wie wir sie von anderen Systemen auch kennen: Eine Art Objekt, das irgendwelche Daten als Inhalt „in sich“ hat.

In der Ausgabe von ls -l können normale Dateien durch den Bindestrich als erstes Zeichen der Ausgabezeile erkannt werden:

robert@demo:~$ ls -l afile
-rw------- 1 robert robert 1676 Jan 14 08:53 afile

Typ 2: Verzeichnisse

Verzeichnisse sind auch von anderen Systemen bekannt. Es handelt sich dabei nicht um Container für Daten, sondern um Container für andere Dateien.

Du kannst sie in der Ausgabe von ls -l am Buchstaben „d“ als erstes Zeichen der Ausgabezeile erkennen.

robert@demo:~$ ls -l adirectory
drwx------ 1 robert robert 1676 Jan 14 08:53 adirectory

Manchmal kann es praktisch sein, dieselbe Datei (oder dasselbe Verzeichnis) über mehrere unterschiedliche Namen und von verschiedenen Orten aus zu erreichen. Das lässt sich mit symbolischen Namen bewerkstelligen.

Diese Arten von Dateien sind lediglich Zeiger auf eine andere Datei.

Auf Linux-Systemen wirst Du an vielen Stellen symbolische Links sehen, und Du kannst sie leicht am führenden „l“ in der Ausgabe von ls -l erkennen:

robert@demo:~$ ls -l alink
lrwxrwxrwx 1 robert robert 1676 Jan 14 08:55 alink -> afile

In dieser Ausgabe kannst Du auch auf den ersten Blick erkennen, auf welche Datei der Link verweist (hier zeigt der symbolische Links “alink” auf die datei “afile” im selben Verzeichnis).

(Übrigens: Wenn Du dich dafür interessierst, wie Links auf einem Linux-System funktionieren, wie man sie erstellt und was der Unterschied zwischen einem Hardlink und einem Softlink ist: sieh Dir Linux - Hardlinks and Softlinks explained an.)

Die restlichen vier Dateitypen

Für die Vollständigkeit - hier die restlichen vier Dateitypen …

  • FiFO … erkennbar an einem führenden “p” (das kommt von “named pipe”)
    (Anwendung: Einwegkommunikation zwischen Prozessen)

  • Socket … erkennbar an einem führenden “s”
    (Anwendung: Zweiwegkommunikation zwischen Prozessen)

  • Blockgerätedateien … erkennbar an einem führenden “b”
    (Anwendung: Kommunikation mit blockorientierten Geräten)

  • Zeichengerätedateien … erkennbar an einem führenden “c”
    (Anwendung: Kommunikation mit zeichenorientierten Geräten)

Was wirklich zählt ist der Inhalt

(… und nicht die Dateinamenserweiterung)

Was zählt, ist alleine der Inhalt - das gilt besonders dann, wenn es um reguläre Dateien geht.

Wenn die Dateinamenserweiterung uns nicht sagt, welchen Typ von Daten wir in einer Datei erwarten können, haben wir keine andere Wahl: Wir müssen die Datei öffnen und versuchen, ihren Inhalt zu interpretieren.

Und das ist durchaus machbar: Jeder Inhaltstyp kann irgendwie erkannt werden, indem man sich den Anfang des Inhalts anschaut. Eine PNG-Datei würde beispielsweise mit “.PNG” beginnen, eine PDF-Datei mit “%PDF-“ und ein Linux-Executable mit “.ELF”.

Aber zum Glück müssen wir uns die Arbeit der Interpretation der Daten nicht selbst machen.

Stattdessen können wir die Fähigkeiten des Tools file nutzen.

Das Kommando “file” vollbringt die eigentliche Magie

Wenn Du den Inhaltstyp einer Datei wissen möchtest, verwende einfach den Befehl file und gib ihm als Parameter den Namen der Datei, die Du analysieren möchtest:

robert@demo:~$ file somefile
somefile: PDF-Dokument, Version 1.5

und voilà - geschafft.

Übrigens: Der Befehl file verwendet zur Erkennung des Inhalts-Typs eine zentrale Bibliothek, die für jedes System unerlässlich ist: Die Bibliothek “libmagic”. Es ist eben reine Magie! ;-)

Here is what to do next

LBFCoverSmall

If you followed me through this article, you certainly have realized that knowing some internals about how things are working at the Linux command line, can save you a lot of time and frustration.

And sometimes it’s just fun to leverage these powerful mechanics.

If you wanna know more about such “internal mechanisms” of the Linux command line - written especially for Linux beginners

have a look at “The Linux Beginners Framework”

In this framework I guide you through 5 simple steps to feel comfortable at the Linux command line.

This framework comes as a free pdf and you can get it here.

Wanna take an unfair advantage?

ToolboxCoverSmall

If it comes to working at the Linux command line - at the end of the day it is always about knowing the right tool for the right task.

And it is about knowing the tools that are most certainly available on the Linux system you are currently on.

To give you all the tools for your day-to-day work at the Linux command line, I have created “The ShellToolbox”.

This book gives you everything

  • from the very basic commands, through
  • everything you need for working with files and filesystems,
  • managing processes,
  • managing users and permissions, through
  • hardware analyses and
  • simple shell-scripting to the tools you need for
  • doing simple “networking stuff”.

Everything in one single, easy to read book.

With explanations and example calls for illustration.

If you are interested, go to shelltoolbox.com and have a look (as long as it is available).