Warum unterstützen *nix-Dateisysteme Dateinamen mit Zeilenumbrüchen?

Warum unterstützen *nix-Dateisysteme Dateinamen mit Zeilenumbrüchen?

Entsprechenddiese Seite:

Dateinamen in Linux können beliebige Zeichen enthalten außer (1) einem Schrägstrich ( / ), der für den Namen des Stammverzeichnisses (also des Verzeichnisses, das alle anderen Verzeichnisse und Dateien enthält) und als Verzeichnistrennzeichen reserviert ist, und (2) dem Nullzeichen (das zum Beenden von Textsegmenten verwendet wird). Leerzeichen sind zulässig, sollten jedoch vermieden werden, da sie in manchen Fällen mit älterer Software inkompatibel sein können.

Großartig, beide Einschränkungen machen viel Sinn. Da es offensichtlich möglich ist, die Verwendung bestimmter Zeichen in Dateinamen zu verbieten, warum wurden Zeilenumbrüche zugelassen? Soweit ich das beurteilen kann, besteht ihr einziger Nutzen darin,unsere Skripte komplizierenGibt es jemals einen gültigen Grund, in einem Dateinamen eine neue Zeile einzufügen?

Antwort1

NULund /verfügen über die ihnen zugewiesenen Systemfunktionen. Andere Charaktere verfügen nicht über diese Funktionen.

Das sind die Grundlagen – der Rest sind Meinungen, Spekulationen und Geschichte. Gehört, gelesen usw. und nur alsFüllstoffkeine Debatte oder Auseinandersetzung:

  • Durch das Verbot bestimmter Zeichen erhöhen Sie die Komplexität des Dateisystems selbst, was einer Gefährdung gleichkommt.
  • Wie sieht es mit den Bytes aus, die auf verschiedenen Systemen als Zeilenumbruch gelten? <CR>vs. <LF>usw.
  • Was passiert, wenn ein Remote-System beschließt, eine Datei mit Newline auf einem NFS zu erstellen?
  • Was passiert, wenn der Dateiname beschädigt wird, der Dateiinhalt jedoch intakt ist?
  • Was passiert, wenn eine Anwendung Informationen im Dateinamen kodiert?

Und weiter geht es

  • Ist es die Aufgabe des Systems, Fehler in der Benutzersoftware zu beheben?
  • Sollte ein System die Benutzer auf der Stammebene vor sich selbst schützen?
  • Sollte die Art und Weise, wie die verschiedenen Shells intern implementiert werden, die Entscheidung darüber beeinflussen, welche Dateinamen als zulässig gelten?

Das grundlegende Betriebssystem setzt keine Beschränkungen. Informationen zum und vom System sind Byte-Streams. Wenn ein Byte keine besondere Bedeutung hat, erzeugen Sie keinen Overhead durch das Hinzufügen von Prüfungen, die im Benutzerbereich behandelt werden sollten.


Das größte Problem dürfte jedoch die ziemlich lange Geschichte der Zulassung von Zeilenumbrüchen und anderen Steuerzeichen sein.

Ein anderer Fall ist, was verboten werden soll. Sie erwähnen Newline, aber in Diskussionen aus der Steinzeit von UNIX wurde dies diskutiert, damals auch andere Zeichen. Sollte es *verboten werden? Was ist mit Dateinamen, die mit beginnen -? Was ist mit DELund ESC? Sollten alle Steuerzeichen verboten werden? Und so weiter und so fort.

Leider fallen mir keine Zitate der Gründerväter oder Code-Betreuer zu diesem Thema ein.

verwandte Informationen