Linux/Datei/Name

Aus Foxwiki

Dateieigenschaften

Wenn sie sich ein Verzeichnis mit dem Kommando "ls·-l" ansehen, erhalten wir eine solche Liste:

total 1093
-rw-r--r-- 1 root root 116547 May 25 1997 System.map
drwxr-xr-x 2 root root 1024 Sep 23 1996 bin/
drwxr-xr-x 2 root root 1024 May 25 1997 boot/
drwxr-xr-x 2 root root 1024 Oct 27 1996 cdrom/
drwxr-xr-x 3 root root 20480 May 4 15:28 dev/
drwxr-xr-x 7 root root 2048 May 4 16:05 etc/
drwxr-xr-x 5 root root 1024 Dec 7 1997 home/
drwxr-xr-x 3 root root 1024 Sep 23 1996 lib/
drwxr-xr-x 5 root root 1024 Sep 23 1996 local/
drwxr-xr-x 2 root root 12288 Sep 23 1996 lost+found/
drwxr-xr-x 2 root root 1024 Sep 23 1996 mnt/
dr-xr-xr-x 5 root root 0 May 4 1999 proc/
drwx------ 5 root root 1024 Sep 21 1997 root/
drwxr-xr-x 4 root root 2048 Sep 23 1996 sbin/
drwxrwxrwx 4 root root 1024 Apr 6 09:18 tmp/
drwxr-xr-x 18 root root 1024 Apr 25 1997 usr/
drwxr-xr-x 14 root root 1024 Apr 25 1997 var/
Ausgabe von rechts nach links
  • Dateiname, jede Zeile ist der Eintrag für eine Datei.
  • Datum und Uhrzeit der letzten Modifikation der Datei
  • Größe der Datei in Bytes (1 Byte entspricht einem Zeichen, also z. B. 
  • einem Buchstaben
  • Gruppe der Datei
  • Besitzer der Datei
  • Zugriffsrechte
  • Dateityp (erstes Zeichen)
- Normale Datei
d Verzeichnis
c Character (Zeichen)- Gerätedatei
b Block – Gerätedatei
l Softlink
p Pipe
s Socket

Dateiname

  • Ein Dateiname identifiziert eine Datei auf einem Datenträger oder bei einer Datenübertragung.
  • Meist wird eine Datei zusätzlich durch einen Verzeichnisnamen charakterisiert, sodass ein vollständiger Pfadname entsteht.
  • Erst diese Kombination zu einem vollständigen Pfadnamen ist in der Regel eindeutig.
  • Ein Dateiname kann – abhängig vom jeweiligen Betriebssystem – aus mehreren Teilen bestehen.
  • Die einzelnen Teile sind durch bestimmte Zeichen, die in der Regel nicht Teil des Dateinamens sein können, getrennt; die Liste von Dateinamenserweiterungen verschafft einen Überblick.
  • Einige Betriebssysteme machen die Behandlung der Dateien von der jeweiligen Dateinamenserweiterung abhängig, andere arbeiten ohne diese Konvention und erkennen den Dateityp anhand des Inhalts (beispielsweise anhand einer sogenannten magischen Zahl).
  • Auch auf diesen Systemen werden aber oft Dateien mit solchen Dateiendungen versehen, da es den Datenaustausch vereinfacht.
  • Die maximale Länge eines Dateinamens wird sowohl durch das Betriebssystem als auch durch das Dateisystem des Datenträgers begrenzt.
  • So können etwa auf einer CD-ROM bei Verwendung des Joliet-Dateisystems maximal 64 Zeichen genutzt werden.
  • Eine indirekte Begrenzung kann zudem durch eine maximale Länge von Pfadnamen im Betriebssystem entstehen.
  • Ein Unterschied zwischen MS-Windows und Linux/Unix besteht darin, dass Windows bei Dateinamen nicht zwischen Groß- und Kleinschreibung unterscheidet, während Unix dies tut (zum Beispiel bezeichnen dort Haustuer.txt und hausTuer.txt unterschiedliche Dateien).

Groß-/Kleinschreibung

  • Im Unterschied zu Windows wird bei Linux zwischen Groß- und Kleinschreibung unterschieden.
  • Daher ist die Datei test nicht identisch mit der Datei Test.
  • Was am Anfang bei Umsteigern womöglich zur Verwirrung beiträgt, erweist sich nach einer Einarbeitungszeit häufig als eine praktische Eigenschaft.
  • Der folgende Einzeiler wandelt alle Dateinamen im aktuellen Verzeichnis in Kleinbuchstaben um:
for i in * ; do mv -i $i $(echo $i | tr [A-ZÄÖÜ] [a-zäöü]) ; done
  • Mit dem ß hat der Einzeiler noch Probleme. (Warum? Es gibt kein großes ß.)

Länge von Dateinamen

Ein Dateiname darf 255 Zeichen lang sein.

  • Damit sollte es jedem gelingen, seine Dokumente aussagekräftig zu benennen.
  • Wie die Erfahrung zeigt, sind Dateinamen in der Praxis selten auch nur annähernd so lang.

Dateiendungen

Eine Datei muss unter Linux keine bestimmte Endung haben, wie dies bei Windows der Fall ist (beispiel.exe oder beispiel.txt).

  • Auch dies verwirrt am Anfang den Umsteiger, doch gewöhnt man sich auch daran.

Die meisten Dateien haben aber eine Endung, nicht ungewöhnlich sind auch mehrere - durch Punkte getrennte - Endungen (beispiel.tar.bz2).Unix- und Unix-ähnliche Betriebssysteme wie zum Beispiel Solaris oder Linux betrachten Dateinamen als Ganzes.

Eine Datei kann mehrere Namen haben und sich in mehreren Verzeichnissen befinden („hard links“ oder „bind mounts“).

  • Alle Zeichen außer dem Schrägstrich "/" und dem Nullzeichen sind erlaubt.
  • Frühe Versionen hatten 1 bis 14 Zeichen lange Dateinamen.
  • Die BSD-Varianten führten bis zu 255 Zeichen lange Namen ein.

Ein relativer Dateipfad kann aus mehreren Segmenten bestehen und beginnt mit einem Segment.

  • Jedes Segment unterliegt den Regeln des Dateinamens, kann also 14 bzw. 255 Zeichen lang sein.
  • Die Segmente der Dateipfade werden durch das Zeichen "/" getrennt.

Das letzte Segment kennzeichnet die eigentliche Datei.

  • Die vorhergehenden Segmente sind entweder Verzeichnisnamen oder symbolische Verweise (englisch „symbolic links“) auf Verzeichnisnamen.
  • Ein relativer Dateipfad geht vom aktuellen Arbeitsverzeichnis aus, das jeder Prozess individuell setzen kann.

Ein absoluter Dateipfad beginnt hingegen bereits mit "/" und ist unabhängig vom aktuellen Arbeitsverzeichnis.

  • Er geht vom Wurzelverzeichnis aus. Über das Wurzelverzeichnis sind alle Dateien eines Systems erreichbar.

Beim Zugriff wird zwischen Groß- und Kleinschreibung unterschieden.

Wichtige Dateiendungen
Zip.gz Mit dem ZIP Algorithmus komprimierte Datei
.so Shared Object - Entspricht in der Bedeutung in etwa einer DLL Datei unter Windows
.h Header Datei - Teil eines C Quellcodes
.c.cpp C bzw. 
  • C++ Quelltext
.o Object File - compilierter C (C++) Quellcode
.html Hypertext - Dieser Text ist in Hypertext geschrieben
.db Datenbankdatei im DBASE Format
.sh Shellscript (selten verwandtes Suffix), entspricht in etwa einer DOS .BAT Datei
.a siehe .so
.gif.jpg.tiff.png.xbm.xpm Verschiedene Bildformate
.au.wav.mp3.mod Verschiedene Audioformate
.rpm.tar.tgz.deb Verschiedene Packetformate.
  • Packete werden verwendet, um Software zu installieren
.conf Konfigurationsdatei (selten verwendetes Suffix)
.ps Postscript - Eine Seitenbeschreibungssprache der Firma Adobe
.tex LaTeX Datei, LaTeX ist für UNIX, was Word für Windows ist
.dvi Device Independent - Übersetzte .tex Datei

Beispiele

/home/user/Dokumente/brief.txt

/usr/bin/texteditor

Der Dateiname '.' (Punkt) bezeichnet das aktuelle Arbeitsverzeichnis.

  • Der Name '..' verweist auf das übergeordnete Verzeichnis.

Auch das Leerzeichen, der Zeilentrenner oder die sogenannten Wildcards '*' und '?' können Teil eines Pfadnamens sein.

  • Solche Zeichen bringen allerdings manchmal später Probleme mit sich, da zum Beispiel schlecht programmierte Skripte damit nicht umgehen können.

Weiterhin kann es Probleme mit Dateinamen geben, die Zeichen enthalten, die im aktuell verwendeten Zeichensatz eines Programms nicht vorkommen (zum Beispiel japanische Zeichen auf einem amerikanisch eingerichteten System).

Die nicht darstellbaren Zeichen werden dann oft als Fragezeichen oder kleine Kästchen angezeigt, was den Zugriff auf die Daten sehr schwierig macht.

Diese Dateien können dann oft nur bearbeitet werden, nachdem sie auf einer niedrigen Dateisystem-Abstraktionsebene umbenannt wurden (zum Beispiel durch Angabe der sogenannten inode statt des Dateinamens mit ls -i und find . -inum […] -exec mv {} […] \;).

Ein Unix-System verwendet keine speziellen Erweiterungen, wie .EXE oder .CMD.

  • Es hat sich allerdings eingebürgert, Dateien eines bestimmten Types, wie in anderen Betriebssystemen, auch mit einem Punkt und einer entsprechenden Erweiterung zu versehen, um die Übersichtlichkeit zu erhöhen.

Beispielsweise wird die Endung .c für C-Quellprogramme verwendet.

  • Ausführbare Dateien, also Programme und Skripte, erhalten keine Endung.
  • Dateitypen können ansonsten mit dem einfachen Programm "file", unabhängig von einer eventuell vorhandenen Erweiterung ermittelt werden.

Dateien oder Verzeichnisse, deren Namen mit einem Punkt beginnen, werden üblicherweise als „versteckte“ Dateien behandelt und nur angezeigt, wenn der Benutzer dies explizit angibt (zum Beispiel mit ls -a). Ähnliches gilt für Verzeichnispfade.

Dateisysteme

Dateisystem typische Anwendung max. Anzahl Zeichen in einem Dateinamen Zeichensatz
FAT ohne VFAT (DOS) Festplatten, Speicherkarten (Foto) 8+3 OEM (meist Codepage 437)
ISO 9660 Level 2 CD, DVD 31 ASCII
Joliet CD, DVD 64 Unicode
ISO 9660:1999 CD, DVD 179 - 221 je nach sonstigen Attributen ASCII/unspezifiziert
FAT mit VFAT (Windows) Festplatten, USB-Sticks 255 Unicode
ext3 Festplatten 255 (1) Unicode (2)
HFS plus Festplatten 255 Unicode (UTF-16)
UDF CD, DVD 255 Unicode
NTFS Festplatten 256 (3) Unicode (UTF-16) (4)
ReFS Festplatten 32000 Unicode

(1) Bei Verwendung von UTF-8-Codierung und Benutzung von Nicht-ASCII-Zeichen stehen zwar 255 Byte, aber weniger als 255 Zeichen zur Verfügung.

(2) Die Codierung ist nicht genormt; als Voreinstellung wird meist UTF-8 verwendet.

(3) Bei Verwendung langer Unicode-Pfade sind lediglich 255 Zeichen möglich

Dateieistatus anzeigen

stat

Zeitstempel

Linux/Datei:Zeitstempel

TMP

Dateinamen bereinigen

Werkzeug Beschreibung
detox benennt Dateien um, damit sie leichter zu handhaben sind
convmv konvertiert den Zeichensatz von Dateinamen
fslint Utility to Fix Problems with Filesystems Data
mv/sed sed -e 's/[^A-Za-z0-9._-]/_/g')
rename
rename 's/[^\x00-\x7F]//g' *
find . -exec rename 's/[^\x00-\x7F]//g' "{}" \;y
find/perl
find /path/to/files -type f -print0 | \
perl -n0e '$new = $_; if($new =~ s/[^[:ascii:]]/_/g) {
 print("Renaming $_ to $new\n"); rename($_, $new);
}'
bleachbit Unnötige Dateien entfernen, Speicherplatz freigeben und die Privatsphäre wahren

Dateien mit führendem Bindestrich

Einige Linux-Tools erzeugen Dateien mit führendem Bindestrich oder Bindestrich (-) in Dateinamen. Oder Ihr handgeschriebenes Programm kann versehentlich Dateinamen erzeugen, die mit einem Minus beginnen. Wenn Sie versuchen, solche Dateien mit ls, rm, cp, mv oder chmod zu entfernen, zu kopieren, umzubenennen oder anderweitig darauf zuzugreifen, erhalten Sie die folgenden Fehlermeldungen.

[cmd]: Ungültige Option --

Das liegt daran, dass Ihr Linux-System das führende Minus im Dateinamen als Teil einer Befehlszeilenoption interpretiert und eine ungültige Option oder einen nicht existierenden Modusfehler ausgibt.

Um mit einem führenden Bindestrich im Dateinamen unter der Linux-Shell umzugehen, können Sie eine der beiden folgenden Methoden ausprobieren.

Methode Eins

Da ein führendes Minuszeichen im Dateinamen zu Mehrdeutigkeiten bei der Erkennung des Dateinamens führt, müssen Sie diese Mehrdeutigkeit einfach beseitigen, indem Sie dem Dateinamen einen Pfadnamen voranstellen. Wenn Sie zum Beispiel eine Datei mit dem Namen -my.txt im aktuellen Verzeichnis haben, können Sie sie wie folgt aufrufen.

$ chmod 600 ./-mein.txt
$ rm ./-mein.txt
Methode zwei

Die zweite Methode, mit einem führenden Bindestrich umzugehen, besteht darin, ein spezielles Argument zu nutzen, das von getopt() als "Ende der Option" interpretiert wird. Die meisten Standard-Linux-Befehlszeilenprogramme verwenden getopt(), um Befehlszeilenargumente zu verarbeiten. Wenn getopt() auf -- stößt, stoppt es den Options-Scan-Prozess. Fügen Sie daher einfach -- vor dem Dateinamen ein, um deutlich zu machen, dass der Dateiname mit Bindestrich nicht Teil der Kommandozeilenargumente ist.

$ chmod -- 600 -meine.txt
$ rm -- -meine.txt


Verschieben von Dateien, die mit einem Bindestrich beginnen

Wie verschiebe ich inUnix- oder Linux-Betriebssystemen Dateien, die mit einem Bindestrich beginnen (z. B. /home/you/--filename.txt oder /home/you/-filename.txt)? Wie kopiere ich eine Datei, deren Name mit einem Bindestrich ("-") beginnt? Viele Meta-Zeichen wie Semikolon, Leerzeichen, Backslashes, Dollarzeichen, Fragezeichen und Sternchen sind Zeichen, die unter Linux und Unix-ähnlichen Betriebssystemen als Shell-Befehle interpretiert werden. Zum Beispiel wird - oder -- (Bindestrich oder Bindestrich) als Option interpretiert, die dem Befehl übergeben wird.

  • Probieren Sie die folgenden Vorschläge zum Verschieben (mv) oder Kopieren (cp) dieser Dateien aus.
  • Diese Optionen sind nicht auf den mv- oder cp-Befehl beschränkt.
  • Alle Befehle können die Tipps verwenden, wenn sie einen Dateinamen behandeln, der mit einem Bindestrich(- oder --) beginnt.

Datei verschieben, die mit einem Bindestrich beginnt

Die Syntax lautet wie folgt:

cp -- Quelle-Zielcp [Option] -- Quelle-Ziel

Wir verwenden "--", damit Linux- und Unix-Befehle die Shell-Befehlszeilenoptionen nicht mehr parsen.

  • Sehen wir uns nun einige Beispiele an.

Erstellen Sie eine Testdatei

Geben Sie den folgenden Befehl ein:

cd /tmp/> '-foo.txt'> '--bar.txt'

Dateien auflisten, die mit einem Bindestrich beginnen

Versuchen Sie, sie aufzulisten, geben Sie ein:

ls -l *.txt

Sie erhalten eine Fehlermeldung wie folgt:

ls: nicht erkannte Option '--bar.txt' Versuchen Sie `ls --help' für weitere Informationen.

Um die Optionsliste zu begrenzen, verwenden Sie --, d. h. geben Sie den folgenden ls-Befehl ein:

ls -l -- *.txt

Die Befehle cp und mv

Wenn eine Datei, deren Name mit - oder -- beginnt, kopiert oder verschiebt man Dateien mit der folgenden Syntax:

cp -- '--bar.txt' /path/to/destcp -- '-test.doc' /home/vivek/backups/test.doc

ODER

cp -v -- '--bar.txt ' /pfad/nach/fest

Um Dateien zu verschieben:

mv -- '--bar.txt' /Pfad/nach/Ziel

ODER

mv -v -- '--bar.txt ' /Pfad/nach/Ziel

Unix und Linux kopieren Dateien, die mit einem Bindestrich beginnen

Das - oder -- gilt als Teil von Befehlszeilenoptionen.

  • Daher können Sie keine Dateien kopieren, auflisten, löschen oder verschieben, die mit diesen Zeichen beginnen.
  • Kurz gesagt, die Syntax lautet wie folgt:
cp options -- '--filename' /destmv options -- '--filename' /dest

Die -- begrenzen die Optionsliste.

  • Spätere Argumente, falls vorhanden, werden als Operanden behandelt, auch wenn sie mit - oder - beginnen.
  • Dies gilt für alle Linux/Unix/macOS/*BSD-Befehle wie rm, cp, mv, ls, ln und so weiter:
command -- 'file'command [options] -- 'file'rm -- '--filename'rm -fr -- '-dirname'rmdir -- '--dirname'

So verwenden Sie den Befehl find für denselben Zweck

Die Syntax lautet:

find /dir/to/search -maxdepth 1 -name '--filename' -delete

Siehe GNU find man page hier.

Tipp: Behandlung eines Dateinamens, der mit einem Bindestrich(-) beginnt

Sie können den Bindestrich aus dem Befehl "ausblenden", indem Sie den Dateinamen mit ./ (Punkt-Schrägstrich) beginnen.

  • Versuchen Sie zum Beispiel, eine Datei namens "-filename.txt" mit dem Befehl rm zu löschen:
> '-filename'rm -filename # wird eine Fehlermeldung #rm./-filename

Schlussfolgerung

Das -- ist technisch gesehen als Begrenzung der Optionsliste bekannt.

  • Spätere Argumente, falls vorhanden, werden als Operanden behandelt, auch wenn sie mit - beginnen und die Syntax lautet:

command -- -foo

command -- -bar

command -arg1 -option2 -- -foobar

## sort liest aus der Datei mit dem Namen '-filename' ##

sort -- -filename

## grep command findet den passenden String mit dem Namen '--dom' ##

virsh --help | grep --color -- '--dom'

Auf dieser Seite wurde erklärt, wie man mit einem Linux- oder Unix-Dateinamen umgeht, der mit einem Bindestrich(-) beginnt.

  • Der Trick ist, den Dateinamen entweder mit ./ zu beginnen oder das -- vor dem Dateinamen zu übergeben.