Alles ist eine Datei und Dateitypen in Linux
Wenn Sie neu bei Linux sind oder es seit einigen Monaten verwenden, müssen Sie Aussagen wie "Unter Linux ist alles eine Datei" gehört oder gelesen haben.
Das ist in der Tat wahr, obwohl es nur ein Verallgemeinerungskonzept ist, in Unix und seinen Derivaten wie Linux wird alles als Datei betrachtet. Wenn etwas keine Datei ist, muss es als Prozess auf dem System ausgeführt werden.
Um dies zu verstehen, nehmen Sie zum Beispiel die Menge an Speicherplatz in Ihrem Stammverzeichnis (/), die immer von verschiedenen Arten von Linux-Dateien belegt wird. Wenn Sie eine Datei erstellen oder auf Ihr System übertragen, belegt sie einen gewissen Speicherplatz auf der physischen Festplatte und wird als in einem bestimmten Format (Dateityp) betrachtet.
Außerdem unterscheidet das Linux-System nicht zwischen Dateien und Verzeichnissen, aber Verzeichnisse erfüllen eine wichtige Aufgabe, nämlich andere Dateien in Gruppen in einer Hierarchie zu speichern, um das Auffinden zu erleichtern. Alle Ihre Hardwarekomponenten werden als Dateien dargestellt, und das System kommuniziert mit ihnen über diese Dateien.
Die Idee ist eine wichtige Beschreibung einer großartigen Eigenschaft von Linux, bei der Eingabe-/Ausgaberessourcen wie Dokumente, Verzeichnisse (Ordner in Mac OS X und Windows), Tastatur, Monitor, Festplatten, Wechselmedien, Drucker, Modems, virtuelle Terminals sowie die Interprozess- und Netzwerkkommunikation Byteströme sind, die durch den Dateisystemspeicher definiert sind.
Ein bemerkenswerter Vorteil davon, dass alles eine Datei ist, besteht darin, dass derselbe Satz von Linux-Tools, Dienstprogrammen und APIs für die oben genannten Eingabe-/Ausgaberessourcen verwendet werden kann. Obwohl alles in Linux eine Datei ist, gibt es bestimmte spezielle Dateien, die mehr als nur eine Datei sind, z. B. Sockets und Named Pipes.
Verschiedene Arten von Dateien unter Linux?
Unter Linux gibt es grundsätzlich drei Arten von Dateien:
- Gewöhnliche/reguläre Dateien
- Spezielle Dateien
- Verzeichnisse
Gewöhnliche/reguläre Dateien
Dies sind Dateien, die Daten enthalten, Text, Daten oder Programmanweisungen, und sie sind die gebräuchlichsten Dateitypen, die Sie auf einem Linux-System erwarten können, zu dem sie gehören:
- Lesbare Dateien
- Binärdateien
- Bilddateien
- Komprimierte Dateien und so weiter.
Spezielle Dateien
Zu den Spezialdateien gehören die folgenden:
Linux-Blockdateien
Dabei handelt es sich um Gerätedateien, die gepufferten Zugriff auf Systemhardwarekomponenten ermöglichen. Sie bieten eine Methode zur Kommunikation mit Gerätetreibern über das Dateisystem.
Ein wichtiger Aspekt von Blockdateien ist, dass sie einen großen Block von Daten und Informationen zu einem bestimmten Zeitpunkt übertragen können.
Auflisten von Blockdateien, Sockets in einem Verzeichnis mit dem Befehl ls:
# ls -l /dev | grep "^b"
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop0
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop1
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop2
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop3
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop4
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop5
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop6
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop7
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 sda
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 sda1
brw-rw---- root disk 0 B Wed Apr 26 08:39:10 2023 sda2
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 sdb
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 sdb1
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 sdb2
brw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 sdb3
...
Linux-Zeichendateien
Dabei handelt es sich auch um Gerätedateien, die ungepufferten seriellen Zugriff auf Systemhardwarekomponenten ermöglichen. Sie funktionieren, indem sie eine Art der Kommunikation mit Geräten bereitstellen, indem sie Daten Zeichen für Zeichen übertragen.
Auflisten von Zeichendateien, Sockets in einem Verzeichnis:
# ls -l /dev | grep "^c"
crw-r--r-- root root 0 B Wed Apr 26 08:39:09 2023 autofs
crw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 btrfs-control
crw--w---- root tty 0 B Wed Apr 26 08:39:09 2023 console
crw------- root root 0 B Wed Apr 26 08:39:09 2023 cpu_dma_latency
crw------- root root 0 B Wed Apr 26 08:39:09 2023 cuse
crw------- root root 0 B Wed Apr 26 08:39:09 2023 ecryptfs
crw-rw---- root video 0 B Wed Apr 26 08:39:09 2023 fb0
crw-rw-rw- root root 0 B Wed Apr 26 08:39:09 2023 full
crw-rw-rw- root root 0 B Wed Apr 26 08:39:09 2023 fuse
crw------- root root 0 B Wed Apr 26 08:39:09 2023 hidraw0
crw------- root root 0 B Wed Apr 26 08:39:09 2023 hidraw1
crw------- root root 0 B Wed Apr 26 08:39:09 2023 hidraw2
crw------- root root 0 B Wed Apr 26 08:39:09 2023 hidraw3
crw------- root root 0 B Wed Apr 26 08:39:09 2023 hpet
crw------- root root 0 B Wed Apr 26 08:39:09 2023 hwrng
crw------- root root 0 B Wed Apr 26 08:39:09 2023 i2c-0
crw------- root root 0 B Wed Apr 26 08:39:12 2023 i2c-1
crw------- root root 0 B Wed Apr 26 08:39:12 2023 i2c-2
crw------- root root 0 B Wed Apr 26 08:39:12 2023 i2c-3
crw-r--r-- root root 0 B Wed Apr 26 08:39:09 2023 kmsg
crw-rw----+ root kvm 0 B Wed Apr 26 08:39:09 2023 kvm
crw-rw---- root disk 0 B Wed Apr 26 08:39:09 2023 loop-control
crw-rw---- root lp 0 B Wed Apr 26 08:39:09 2023 lp0
crw------- root root 0 B Wed Apr 26 08:39:09 2023 mcelog
crw------- root root 0 B Wed Apr 26 08:39:09 2023 mei0
...
Symbolische Linux-Link-Dateien
Ein symbolischer Link ist ein Verweis auf eine andere Datei auf dem System. Daher sind symbolische Verknüpfungsdateien Dateien, die auf andere Dateien verweisen, und es kann sich entweder um Verzeichnisse oder reguläre Dateien handeln.
Auflisten symbolischer Link-Sockets in einem Verzeichnis:
# ls -l /dev/ | grep "^l"
lrwxrwxrwx root root 13 B Wed Apr 26 08:39:04 2023 fd ⇒ /proc/self/fd
lrwxrwxrwx root root 11 B Wed Apr 26 08:39:04 2023 core ⇒ /proc/kcore
lrwxrwxrwx root root 12 B Wed Apr 26 08:39:09 2023 initctl ⇒ /run/initctl
lrwxrwxrwx root root 28 B Wed Apr 26 08:39:09 2023 log ⇒ /run/systemd/journal/dev-log
lrwxrwxrwx root root 4 B Wed Apr 26 08:39:09 2023 rtc ⇒ rtc0
lrwxrwxrwx root root 15 B Wed Apr 26 08:39:04 2023 stderr ⇒ /proc/self/fd/2
lrwxrwxrwx root root 15 B Wed Apr 26 08:39:04 2023 stdin ⇒ /proc/self/fd/0
lrwxrwxrwx root root 15 B Wed Apr 26 08:39:04 2023 stdout ⇒ /proc/self/fd/1
...
Sie können symbolische Verknüpfungen mit dem Dienstprogramm ln unter Linux erstellen, wie im folgenden Beispiel gezeigt.
# touch file1.txt
ln -s file1.txt /home/tecmint/file1.txt [create symbolic link]
ls -l /home/tecmint/ | grep "^l" [List symbolic links]
Im obigen Beispiel habe ich eine Datei mit dem Namen file1.txt im Verzeichnis /tmp erstellt und dann den symbolischen Link /home/tecmint/file1.txt erstellt, der auf /tmp/file1.txt zeigt.
Linux-Pipes oder Named Pipes
Dabei handelt es sich um Dateien, die die Kommunikation zwischen Prozessen ermöglichen, indem sie die Ausgabe eines Prozesses mit der Eingabe eines anderen Prozesses verbinden. Eine Named Pipe ist eigentlich eine Datei, die von zwei Prozessen verwendet wird, um miteinander zu kommunizieren, und sie fungiert als Linux-Pipe.
Auflisten von Pipes und Sockets in einem Verzeichnis:
# ls -l | grep "^p"
prw-rw-r-- 1 tecmint tecmint 0 Apr 18 17:47 pipe1
prw-rw-r-- 1 tecmint tecmint 0 Apr 18 17:47 pipe2
prw-rw-r-- 1 tecmint tecmint 0 Apr 18 17:47 pipe3
prw-rw-r-- 1 tecmint tecmint 0 Apr 18 17:47 pipe4
prw-rw-r-- 1 tecmint tecmint 0 Apr 18 17:47 pipe5
Sie können das Dienstprogramm mkfifo verwenden, um eine Named Pipe unter Linux wie folgt zu erstellen.
# mkfifo pipe1
echo "This is named pipe1" > pipe1
Im obigen Beispiel habe ich eine Named Pipe namens pipe1 erstellt, dann habe ich ihr mit dem Befehl echo einige Daten übergeben, danach wurde die Shell während der Verarbeitung der Eingabe nicht mehr interaktiv.
Dann öffnete ich eine weitere Shell und führte einen weiteren Befehl aus, um auszudrucken, was an die Pipe übergeben wurde.
# while read line ;do echo "This was passed-'$line' "; done<pipe1
Linux-Socket-Dateien
Dabei handelt es sich um Dateien, die ein Mittel zur Kommunikation zwischen Prozessen bieten, aber auch Daten und Informationen zwischen Prozessen übertragen können, die in verschiedenen Umgebungen ausgeführt werden.
Das bedeutet, dass Sockets die Daten- und Informationsübertragung zwischen Prozessen ermöglichen, die auf verschiedenen Rechnern in einem Netzwerk ausgeführt werden.
Ein Beispiel, um die Arbeit von Sockets zu veranschaulichen, wäre ein Webbrowser, der eine Verbindung zu einem Webserver herstellt.
# ls -l /dev/ | grep "^s"
srw-rw-rw- 1 root root 0 Apr 18 10:26 log
Dies ist ein Beispiel für einen Socket, der in C mithilfe des Systemaufrufs socket() erstellt wurde.
int socket_desc= socket(AF_INET, SOCK_STREAM, 0 );
In den obigen Fällen:
AF_INETist die Adressfamilie (IPv4)SOCK_STREAMist der Typ (Verbindung ist TCP-Protokoll-orientiert)0ist das Protokoll (IP-Protokoll)
Um auf die Socket-Datei zu verweisen, verwenden Sie den socket_desc, der mit dem Dateideskriptor identisch ist, und verwenden Sie read()- und write()-Systemaufrufe, um aus dem Socket zu lesen bzw. zu schreiben.
Spezielle Linux-Verzeichnisse
Dabei handelt es sich um spezielle Dateien, die sowohl gewöhnliche als auch andere spezielle Dateien speichern und auf dem Linux-Dateisystem in einer Hierarchie organisiert sind, die vom Stammverzeichnis (/) ausgeht.
Auflisten von Sockets in einem Verzeichnis:
# ls -l / | grep "^d"
drwxr-xr-x root root 4.0 KB Fri Apr 21 10:21:42 2023 boot
drwxr-xr-x root root 4.0 KB Wed Oct 6 22:55:05 2021 cdrom
drwxr-xr-x root root 4.4 KB Wed Apr 26 08:39:12 2023 dev
drwxr-xr-x root root 12 KB Sat Apr 22 10:59:02 2023 etc
drwxr-xr-x root root 4.0 KB Wed Oct 6 22:55:12 2021 home
drwx------ root root 16 KB Wed Oct 6 22:52:31 2021 lost+found
drwxr-xr-x root root 4.0 KB Thu Oct 7 18:03:09 2021 media
drwxr-xr-x root root 4.0 KB Mon Jul 18 11:34:54 2022 mnt
drwxr-xr-x root root 4.0 KB Tue Apr 4 15:09:01 2023 opt
dr-xr-xr-x root root 0 B Wed Apr 26 08:39:04 2023 proc
drwx------ root root 4.0 KB Fri Apr 7 11:28:42 2023 root
drwxr-xr-x root root 1.1 KB Wed Apr 26 08:44:09 2023 run
drwxr-xr-x root root 4.0 KB Wed Dec 15 13:23:40 2021 srv
dr-xr-xr-x root root 0 B Wed Apr 26 08:39:04 2023 sys
drwxrwxrwt root root 4.0 KB Wed Apr 26 10:14:23 2023 tmp
drwxr-xr-x root root 4.0 KB Sat Jul 3 22:29:26 2021 usr
drwxr-xr-x root root 4.0 KB Thu Mar 30 10:46:04 2023 var
Sie können ein Verzeichnis mit dem Befehl mkdir erstellen.
# mkdir -m 1666 linux-console.net
mkdir -m 1666 news.linux-console.net
mkdir -m 1775 linuxsay.com
Zusammenfassung
Sie sollten jetzt ein klares Verständnis dafür haben, warum alles in Linux eine Datei ist und welche verschiedenen Dateitypen auf Ihrem Linux-System vorhanden sein können.
Sie können mehr dazu hinzufügen, indem Sie mehr über die einzelnen Dateitypen lesen, und sie werden erstellt. Ich hoffe, Sie finden diesen Leitfaden hilfreich und für Fragen und zusätzliche Informationen, die Sie gerne teilen möchten, hinterlassen Sie bitte einen Kommentar und wir werden mehr besprechen.
