Haben Dateierweiterungen einen Zweck (für das Betriebssystem)?

73

Linux bestimmt den Typ einer Datei über einen Code im Datei-Header. Es hängt nicht von den Dateierweiterungen ab, welche Software zum Öffnen der Datei verwendet wird.

Daran erinnere ich mich aus meiner Ausbildung. Bitte korrigieren Sie mich, falls ich falsch liege!

Arbeiten ein wenig mit Ubuntu - Systemen vor kurzem: Ich sehe eine Menge von Dateien auf den Systemen , die Erweiterungen wie haben .sh, .txt, .o,.c

Jetzt frage ich mich: Sind diese Erweiterungen nur für Menschen gedacht? Damit man eine Vorstellung davon bekommt, um welche Art von Datei es sich handelt?

Oder haben sie auch einen Zweck für das Betriebssystem?

mizech
quelle
5
Wenn Sie hier keine gute Antwort erhalten, denken Sie daran, dass es auch unix.stackexchange.com
mchid
Verwandte, fast doppelt: askubuntu.com/questions/390015/…
Zzzach ...
5
In Windows tun sie das, in Linux / Unix tun sie das meistens nicht. Die wichtigste Ausnahme sind die Komprimierungsprogramme - gzip, bzip2, xz- und so weiter. Diese Programme verwenden Suffixe, um die komprimierte Version einer Datei von der nicht komprimierten zu trennen, die sie ersetzen. Komprimierungsprogramme beschweren sich häufig über ein falsches Suffix, obwohl es sich bei der Datei tatsächlich um eine komprimierte Datei des Typs handelt, den sie verarbeiten sollte.
Baard Kopperud
6
Ich denke, ein Teil des Problems bei dieser Frage ist, dass "das Betriebssystem" kein genau definiertes Konzept ist. Was ist ein Teil des Betriebssystems und was ist eine Anwendung darüber? Nicht viele Teile des Betriebssystems (unabhängig davon, um welches Betriebssystem es sich handelt) kümmern sich um den Dateityp - sie tun einfach das, was ihnen gesagt wird. Daher sind Unterscheidungen darüber, woher sie wissen, irrelevant. sie tun beides nicht. Anwendungen können andererseits gut eine oder beide Sachen tun.
IMSoP

Antworten:

39

Linux bestimmt den Typ einer Datei über einen Code im Dateiheader. Es hängt nicht von den Dateierweiterungen ab, ob Software zum Öffnen der Datei verwendet wird.

Daran erinnere ich mich aus meiner Ausbildung. Bitte korrigieren Sie mich, falls ich falsch liege!

  • richtig erinnert.

Sind diese Erweiterungen nur für Menschen gedacht?

  • Ja mit einem aber.

Wenn Sie mit anderen Betriebssystemen interagieren, bei denen es darauf ankommt, dass Erweiterungen das sind, was sie sind, ist es die klügere Idee, diese zu verwenden.

In Windows wird die Öffnungssoftware an die Erweiterungen angehängt.

Das Öffnen einer Textdatei mit dem Namen "file" ist in Windows schwieriger als das Öffnen derselben Datei mit dem Namen "file.txt" (Sie müssen das Dialogfeld *.txtzum Öffnen von zu *.*jedem Mal wechseln ). Gleiches gilt für durch TAB und Semikolon getrennte Textdateien. Gleiches gilt für den Import und Export von E-Mails (Erweiterung .mbox).

Insbesondere, wenn Sie Software codieren. Das Öffnen einer Datei mit dem Namen "software1", die eine HTML-Datei ist, und "software2", die eine JavaScript-Datei ist, wird im Vergleich zu "software.html" und "software.js" schwieriger.


Wenn es in Linux ein System gibt, auf dem Dateierweiterungen wichtig sind, würde ich das einen Fehler nennen. Wenn Software von Dateierweiterungen abhängt, ist dies ausnutzbar. Wir verwenden eine Interpreter-Direktive , um zu identifizieren, was eine Datei ist ("die ersten zwei Bytes in einer Datei können die Zeichen" #! "Sein, die eine magische Zahl bilden (hexadezimal 23 und 21, die ASCII-Werte von" # "und"! "). ") oft als shebang bezeichnet,").

Das bekannteste Problem mit Dateierweiterungen war LOVE-LETTER-FOR-YOU.TXT.vbs unter Windows. Dies ist ein Visual Basic-Skript, das im Datei-Explorer als Textdatei angezeigt wird.

Wenn Sie in Ubuntu eine Datei von Nautilus aus starten, erhalten Sie eine Warnung, was zu tun ist. Das Ausführen eines Skripts von Nautilus aus, in dem eine Software gestartet werden soll, mit der gEdit geöffnet werden soll, ist ein offensichtliches Problem, und es wird eine Warnung angezeigt.

Wenn Sie etwas ausführen, können Sie in der Befehlszeile visuell sehen, um welche Erweiterung es sich handelt. Wenn es auf .vbs endet, werde ich misstrauisch (nicht, dass .vbs unter Linux ausführbar ist. Zumindest nicht ohne weiteren Aufwand;)).

Rinzwind
quelle
31
Ich verstehe überhaupt nicht, was Sie in Ihrem letzten Satz sagen wollten. Erstens ist es ein Problem, die Erweiterung zu verbergen, anstatt sie zu haben, zweitens würde der Exploit unter Linux genauso funktionieren - Sie benennen eine Binärdatei readme.txtund machen sie ausführbar. Wenn der Benutzer es ausführt, wird der Editor nicht geöffnet, sondern der Code ausgeführt. In dieser Hinsicht ist es sicherer und einfacher, Erweiterungen für nicht versierte Benutzer zu erklären, wenn sie wichtig sind (aber nicht ausgeblendet werden). Es gibt andere Unterschiede (insbesondere, dass keine Dateien aus dem aktuellen Verzeichnis ausgeführt werden), aber sie haben nichts mit Erweiterungen zu tun.
Techraf
4
@techraf Eigentlich wird der Dateimanager wahrscheinlich versuchen, die readme.txtDatei mit einem Texteditor zu öffnen . Ich habe es gerade mit Delphin in KDE versucht, indem ich ein Shell-Skript erstellt habe, das ausführbare Berechtigungen hinzufügt. .txtWenn ich es speichere und darauf klicke, wird es in Kate geöffnet. Wenn ich es umbenenne und .shdann darauf klicke, wird es ausgeführt.
Bakuriu
9
linux: da make um regeln herum aufgebaut ist, die von der dateierweiterung abhängen, würde das nicht die erweiterungen machen (kein wortspiel beabsichtigt), die für mehr als nur menschen gedacht sind?
Bolov
15
Dies ist eine monumental falsche Antwort. Einige Teile von Linux verwenden magische Zahlen, um Dateitypen zu bestimmen. Ausführen von Dateien in der Befehlszeile. Aber andere große Teile des Systems verwenden Dateierweiterungen, um zu wissen, worauf es ankommt, ob es sich um dynamische Linker (die .so-Dateien benötigen), Modprobe, Build-Systeme, Plugins, Bibliotheken für Python, Ruby usw. handelt. Sie haben keine magischen Zahlen, sie filebasieren auf Heuristiken und sind nicht eindeutig.
Alan Shutko
3
"Linux ermittelt den Dateityp über einen Code im Dateiheader" "Richtige" WTF? Was "Code im Dateiheader"? Es gibt keinen solchen Code und keinen generischen "Datei-Header" in Linux.
Leonbloy
68

Hier gibt es keine 100% schwarze oder weiße Antwort.

Normalerweise verlässt sich Linux nicht auf Dateinamen (und Dateierweiterungen, dh den Teil des Dateinamens nach dem normalerweise letzten Zeitraum) und ermittelt stattdessen den Dateityp, indem die ersten Bytes seines Inhalts untersucht und mit einer Liste bekannter magischer Zahlen verglichen werden .

Beispielsweise müssen alle Bitmap-Bilddateien (normalerweise mit Namenserweiterung .bmp) mit den Buchstaben BMin den ersten beiden Bytes beginnen. Skripte in den meisten Skriptsprachen wie Bash, Python, Perl, AWK usw. (im Grunde genommen alles, was Zeilen behandelt, die mit einem #Kommentar beginnen) können einen Schebang wie #!/bin/basheine erste Zeile enthalten. Dieser spezielle Kommentar teilt dem System mit, mit welcher Anwendung die Datei geöffnet werden soll.

Normalerweise stützt sich das Betriebssystem auf den Dateiinhalt und nicht auf seinen Namen, um den Dateityp zu bestimmen. Die Aussage, dass unter Linux keine Dateierweiterungen erforderlich sind, ist jedoch nur die halbe Wahrheit.


Anwendungen können natürlich ihre Dateiprüfungen nach Belieben implementieren, einschließlich der Überprüfung des Dateinamens und der Dateierweiterung. Ein Beispiel ist das Eye of Gnome ( eogStandard-Bildbetrachter), das das Bildformat anhand der Dateierweiterung bestimmt und einen Fehler ausgibt, wenn es nicht mit dem Inhalt übereinstimmt. Ob dies ein Fehler oder eine Funktion ist, kann diskutiert werden ...

Allerdings sind auch einige Teile des Betriebssystems auf Dateinamenerweiterungen angewiesen, z. B. wenn Sie die Quelldateien Ihrer Software analysieren. /etc/apt/sources.list.d/Nur Dateien mit der *.listErweiterung werden analysiert, alle anderen werden ignoriert. Es wird möglicherweise nicht hauptsächlich verwendet, um den Dateityp zu bestimmen, sondern um das Parsen einiger Dateien zu aktivieren / deaktivieren. Es handelt sich jedoch weiterhin um eine Dateierweiterung, die sich auf die Behandlung einer Datei durch das System auswirkt.

Und natürlich die menschlichen Benutzer Gewinne am meisten von Dateierweiterungen wie der Typen einer Datei offensichtlich macht und erlaubt auch mehrere Dateien mit dem gleichen Basisnamen und verschiedene Erweiterungen wie site.html, site.php, site.js, site.cssusw. Der Nachteil ist natürlich , dass die Dateierweiterung und die tatsächlichen Dateityp / Inhalt müssen nicht unbedingt übereinstimmen.

Außerdem wird es für die plattformübergreifende Interoperabilität benötigt, da z. B. Windows nicht weiß, was mit einer readmeDatei zu tun ist , sondern nur a readme.txt.

Byte Commander
quelle
Sie widersprechen sich hier leicht: Wenn der Standard-Bildbetrachter einen Dateinamen mit der Endung .bmp benötigt, welcher Teil des Betriebssystems ist Ihrer Meinung nach auf den Dateiinhalt angewiesen, der mit "BM" beginnt? AFAIK, die einzigen "magischen Zahlen, um die sich der Kernel kümmert, sind ausführbare Typen, einschließlich des Sonderfalls von #!. Alles andere hängt von der Entscheidung einer Anwendung ab.
IMSoP
@IMSoP Ich kenne die genaue Implementierung von nicht eogund ich weiß nicht, warum ihnen der Dateiname überhaupt wichtig ist . Dies ist meiner Meinung nach ein Fehler. Und wenn die Datei den Namen "bmp" hat, aber das Inhaltsformat nicht übereinstimmt, tritt natürlich auch ein Fehler auf. Natürlich entscheidet jede Anwendung, wie Dateien überprüft werden sollen, aber im Allgemeinen sollten Linux-Anwendungen nicht auf den Namen angewiesen sein. Übrigens können Sie den fileBefehl verwenden, um Dateitypen anhand ihres Inhalts zu untersuchen.
Byte Commander
1
Der Satz, den ich herausfordere, lautet: "Linux ... bestimmt den Dateityp, indem es die ersten Bytes untersucht". Welche Definition von "Linux" verwenden Sie in diesem Satz? Die Existenz des fileDienstprogramms beweist eigentlich nichts; Es ist ein nützliches Tool, das auf jedem Betriebssystem existieren kann. Welcher grundlegende Teil des Betriebssystems macht das Ausführen file"korrekter" als das Verschieben des Dateinamens?
IMSoP
Beachten Sie, dass Dateien ohne Erweiterung können mit einem Programm zugeordnet werden.
Isanae
24

Wie bereits von anderen erwähnt, wird unter Linux eine Interpreter-Direktiven-Methode verwendet (die einige Metadaten in einer Datei als Header oder magische Zahl speichert, damit der richtige Interpreter zum Lesen aufgefordert wird) und nicht die von Windows verwendete Dateierweiterungs-Zuordnungsmethode.

Das bedeutet, dass Sie mit wenigen Ausnahmen eine Datei mit fast jedem beliebigen Namen erstellen können

jedoch

Ich möchte ein Wort der Vorsicht hinzufügen.

Wenn auf Ihrem System Dateien vorhanden sind, die mit Dateinamen verknüpft sind, enthalten die Dateien möglicherweise keine magischen Zahlen oder Überschriften. Dateinamenerweiterungen werden verwendet, um diese Dateien durch Anwendungen zu identifizieren, die sie lesen können. Wenn Sie solche Dateien umbenennen, kann dies zu unerwarteten Effekten führen. Zum Beispiel:

Wenn Sie eine Datei My Novel.docin umbenennen My-Novel, kann Libreoffice sie weiterhin öffnen, sie wird jedoch als "Unbenannt" geöffnet, und Sie müssen sie erneut benennen, um sie zu speichern (Libreoffice fügt standardmäßig eine Erweiterung hinzu zwei Dateien My-Novelund My-Novel.odt, was nervig sein könnte)

Wenn Sie eine Datei "My Spreadsheet.xlsx" in "My-Spreadsheet" umbenennen und versuchen, sie mit "My-Spreadsheet" zu öffnen, erhalten xdg-open My-SpreadsheetSie Folgendes (da es sich tatsächlich um eine komprimierte Datei handelt):

Und wenn Sie eine Datei My Spreadsheet.xlsin umbenennen My-Spreadsheet, erhalten xdg-open My-SpreadsheetSie eine Fehlermeldung

Fehler beim Öffnen des Speicherorts: Es ist keine Anwendung registriert, die diese Datei verarbeitet

(Obwohl es in beiden Fällen in Ordnung ist, wenn Sie dies tun soffice My-Spreadsheet)

Wenn Sie dann die Datei ohne Dateierweiterung in My-Spreadsheet.odsmit umbenennen mvund versuchen, sie zu öffnen, erhalten Sie Folgendes:

(Reparatur schlägt fehl)

Und Sie müssen die ursprüngliche Erweiterung wieder herstellen, um die Datei korrekt zu öffnen (Sie können das Format dann konvertieren, wenn Sie möchten)

TL; DR:

Wenn Sie nicht native Dateien mit Namenserweiterungen haben, entfernen Sie die Erweiterungen nicht, da sonst alles in Ordnung ist!

Zanna
quelle
4
Ein neuartiges MS Office-Dokument (docx, xlsx, pptx usw.) ohne Dateierweiterung wird im Archivmanager geöffnet, da es sich bei diesen Dateitypen eigentlich nur um ZIP-komprimierte Dateien handelt, die alle XML-Dokumente und Mediendateien enthalten, die zum Definieren des Dokumentinhalts erforderlich sind. Das Dateiformat eines ZIP-komprimierten Verzeichnisses ist heutzutage üblich.
Byte Commander
1
Schon viele gute Antworten, aber nur eine speziellere für libreoffice, die mir aufgefallen ist. Sie erstellen eine Datei mit kommagetrennten Werten (CSV) und speichern diese als "test.csv". Daraufhin wird ein Fenster geöffnet, in dem Sie gefragt werden, welchen Trennzeichentyp Sie verwenden (z. B. libreoffice Calc). Wenn Sie diese Datei beispielsweise in "test.cs" umbenennen, wird sie von libreoffice's Writer geöffnet. Abgesehen vom obigen ZIP-Beispiel scheint libreoffice die Dateierweiterung zu verwenden.
Ray
3
Das Linux-Dateisystem macht nichts in Bezug auf Dateitypen. Das hängt alles von den darauf ausgeführten Programmen ab.
Peter Green
@PeterGreen Ja, aber die Tatsache, dass die Programme diese Bedeutung zuweisen, bedeutet, dass es nicht "nur für Menschen" ist, wie es zB das klassische MacOS getan hat. t Teil des Dateinamens, so dass das Betriebssystem und die Anwendungen alle erforderlichen Informationen hatten, ohne auf Dateierweiterungen zu suchen]
Random832
3
@PeterGreen Das Windows-Dateisystem unternimmt auch hinsichtlich der Dateitypen nichts. Die grafische Shell (Windows Explorer) verwendet die Dateierweiterung, um eine Aktion für einen Doppelklick auszuwählen. Technisch ist dies jedoch nur ein Programm, das auf dem Betriebssystem ausgeführt wird, genau wie Nautilus. Es ist durchaus möglich, einen Linux-Dateimanager mit diesem Verhalten oder einen Windows-Dateimanager zu schreiben, der den Inhalt der Datei untersucht.
IMSoP
20

Ich würde dies gerne anders angehen als andere Antworten und den Gedanken in Frage stellen, dass "Linux" oder "Windows" irgendetwas damit zu tun haben (ertrage es mit mir).

Das Konzept einer Dateierweiterung kann einfach ausgedrückt werden als "Konvention zum Identifizieren des Dateityps anhand eines Teils seines Namens". Die anderen gängigen Konventionen zum Identifizieren des Dateityps sind der Vergleich des Inhalts mit einer Datenbank bekannter Signaturen (der "Magic Number" -Ansatz) und das Speichern des Dateityps als zusätzliches Attribut im Dateisystem (der im ursprünglichen MacOS verwendete Ansatz). .

Da jede Datei auf einem Windows- oder Linux-System sowohl einen Namen als auch einen Inhalt hat, können Prozesse, die den Dateityp kennen möchten, nach Belieben entweder die "Erweiterung" oder die "magische Zahl" verwenden. Der Metadatenansatz ist nicht allgemein verfügbar, da dieses Attribut auf den meisten Dateisystemen nicht standardmäßig platziert ist.

Unter Windows gibt es eine lange Tradition, die Dateierweiterung als primäres Mittel zur Identifizierung einer Datei zu verwenden. Am sichtbarsten ist, dass der grafische Dateibrowser (Dateimanager unter Windows 3.1 und Explorer unter modernen Windows) ihn verwendet, wenn Sie auf eine Datei doppelklicken, um zu bestimmen, welche Anwendung gestartet werden soll. Unter Linux (und allgemein auf Unix-basierten Systemen) gibt es mehr Tradition für die Überprüfung der Inhalte. Vor allem betrachtet der Kernel den Anfang einer Datei, die direkt ausgeführt wird, um zu bestimmen, wie sie ausgeführt werden soll. Skriptdateien können einen zu verwendenden Interpreter angeben, indem sie mit #!gefolgt vom Pfad zum Interpreter beginnen.

Diese Traditionen beeinflussen das Design der Benutzeroberfläche von Programmen, die für jedes System geschrieben wurden. Es gibt jedoch zahlreiche Ausnahmen, da jeder Ansatz in verschiedenen Situationen Vor- und Nachteile hat. Gründe für die Verwendung von Dateierweiterungen anstelle der Prüfung von Inhalten sind:

  • Das Untersuchen von Dateiinhalten ist im Vergleich zum Untersuchen von Dateinamen ziemlich kostspielig. So ist beispielsweise "Alle Dateien mit dem Namen * .conf finden" viel schneller als "Alle Dateien finden, deren erste Zeile mit dieser Signatur übereinstimmt".
  • Dateiinhalte können mehrdeutig sein; Bei vielen Dateiformaten handelt es sich eigentlich nur um Textdateien, die auf besondere Weise behandelt werden. Bei vielen anderen handelt es sich um speziell strukturierte ZIP-Dateien. Das Definieren genauer Signaturen für diese kann schwierig sein
  • Eine Datei kann tatsächlich als mehr als ein Typ gültig sein. Eine HTML-Datei kann auch gültiges XML sein. Eine ZIP-Datei und ein zusammengesetztes GIF bleiben für beide Formate gültig
  • Der magische Zahlenabgleich kann zu Fehlalarmen führen. Ein Dateiformat ohne Header beginnt möglicherweise mit den Bytes "GIF89a" und wird fälschlicherweise als GIF-Bild identifiziert
  • Das Umbenennen einer Datei kann eine bequeme Möglichkeit sein, sie als "deaktiviert" zu markieren. Beispiel: Wenn Sie "foo.conf" in "foo.conf ~" ändern, um anzuzeigen, dass ein Backup erstellt wurde, ist dies einfacher als das Bearbeiten der Datei, um alle Direktiven zu kommentieren. In ähnlicher Weise wird Apache durch das Umbenennen einer .php-Datei in .txt angewiesen, den Quelltext als Nur-Text-Datei bereitzustellen, anstatt ihn an die PHP-Engine zu übergeben

Beispiele für Linux-Programme, die standardmäßig Dateinamen verwenden (aber möglicherweise andere Modi haben):

  • gzip und gunzip haben eine spezielle Behandlung für jede Dateiendung ".gz"
  • gcc behandelt ".c" -Dateien als C und ".cc" oder ".C" als C ++
IMSoP
quelle
Windows hat auch eine starke Tradition darin, die Erweiterung zu verbergen, wenn sie "allgemein bekannt" ist und sogar DOS zulässt, dass ein Befehl .COM, .BAT und .EXE weglässt, um automatisch nach diesen zu suchen, um zu bestimmen, welches Programm tatsächlich ausgeführt werden soll. Es gibt keine solche Tradition in * nix.
Monty Harder
Dies ist eine viel bessere Antwort, hat aber einen tatsächlichen Fehler ... Ein Skript kann nicht durch Platzieren #!am Anfang ausführbar gemacht werden . Jede Datei, deren ausführbare Bits gesetzt sind, kann auf verschiedene Arten ausgeführt werden. #!/bin/bashund ähnliche Signaturen geben nur an, welcher Interpreter verwendet werden soll. Wird keine solche Signatur angegeben, wird der Standard-Shell-Interpreter verwendet. Eine Datei, die nur die zwei Wörter 'Hello World' enthält, aber deren Ausführungsbit gesetzt ist, versucht beim Ausführen, einen 'Hello'-Befehl zu finden.
DocSalvager
1
@ DocSalvager Guter Fang, das war so gut wie alles ungeschickte Formulierung. Ich habe es ein wenig umformuliert deutlich zu machen , dass der shebang nicht nicht macht das Skript ausführbar, es ist nur ändert , wie er ausgeführt wird.
IMSoP
15

Eigentlich einige Technologien haben auf Dateiendungen verlassen, wenn Sie also diese Technologien in Ubuntu verwenden, werden Sie auf Erweiterungen verlassen müssen. Einige Beispiele:

  • gccVerwendet Erweiterungen, um zwischen C- und C ++ - Dateien zu unterscheiden. Ohne die Erweiterung ist es so gut wie unmöglich, sie zu unterscheiden (stellen Sie sich eine C ++ - Datei ohne Klassen vor).
  • viele Dateien ( docx, jar, apk) sind nur besonders ZIP - Archive strukturiert. Während Sie normalerweise den Typ aus dem Inhalt ableiten können, ist dies möglicherweise nicht immer möglich (z. B. ist Java Manifest in Dateien optionaljar ).

In solchen Fällen ist es nur unter schwierigen Bedingungen möglich, keine Dateierweiterungen zu verwenden, und es ist wahrscheinlich, dass dies sehr fehleranfällig ist.

Dmitry Grigoryev
quelle
Gut, dass Sie die Programmierung erwähnt haben, aber Sie haben die meisten Details falsch verstanden. gccist das Front-End für C-Dateien. Für C ++ - Dateien benötigen Sie entweder das g++Front-End oder einen Befehlszeilenschalter, um die Sprache anzugeben. Wichtiger ist das makeProgramm, das entscheidet, ob eine bestimmte Datei verwendet gccoder g++erstellt wird - und dessen makeRegelübereinstimmung vollständig von Dateinamenmustern (meistens Erweiterungen) abhängt.
Ben Voigt
@BenVoigt Wenn Sie eine Datei mit einer .ccErweiterung mit gcckompilieren, wird sie tatsächlich als C ++ kompiliert. Dies ist dokumentiert in man gcc: "Für eine bestimmte Eingabedatei bestimmt das Dateinamensuffix, welche Art der Kompilierung durchgeführt wird:" gefolgt von einer Liste mit Erweiterungen und wie sie behandelt werden.
HDV
1
@hvd Dann ist es vielleicht der Standardsatz von Bibliotheken, der fürchterlich schief geht, wenn Sie nicht das richtige Frontend verwenden. Wie auch immer, make ist das beste Beispiel, da alles, was es tut, auf der Dateierweiterung basiert.
Ben Voigt
1
@BenVoigt makeist auch ein gutes Beispiel, ist aber gccgenauso stark auf Dateinamen angewiesen. Hier ist ein Beispiel, das klarer ist als .cvs .cc: Bei C gccwerden Suffixe verwendet, um festzustellen, ob der erste Schritt darin besteht, vorab zu verarbeiten ( .c), zu kompilieren ( .i), zusammenzusetzen ( .s) oder zu verknüpfen ( .o). Hier verwende ich -E, -Sund -czu sagen , gccwo zu stoppen , aber es nutzt Dateinamen zu wissen , wo zu beginnen . gcc something.ccnicht für C ++ auf die richtigen Bibliotheken verknüpfen , aber es wird die Datei als C ++, die viele Anwender ist zu behandeln , warum sie bekommen von den Fehlermeldungen sind verwirrt , wenn diese Fehler zu machen.
Eliah Kagan
7

Ihre erste Annahme ist richtig: Die Erweiterungen unter Linux spielen keine Rolle und sind nur für Menschen (und andere nicht-Unix-ähnliche Betriebssysteme, die sich um Erweiterungen kümmern) nützlich. Der Dateityp wird durch die ersten 32 Datenbits in der Datei bestimmt, die als magische Zahl bezeichnet werden. Aus diesem Grund benötigen Shell-Skripte eine #!Zeile, um dem Betriebssystem mitzuteilen, welcher Interpreter aufgerufen werden soll. Ohne es ist das Shell-Skript nur eine Textdatei.

Was Dateimanager anbelangt, möchten sie die Erweiterungen einiger Dateien kennen, z. B. .desktopDateien, die im Wesentlichen mit der Windows-Version von Verknüpfungen identisch sind, aber über mehr Funktionen verfügen. Was das Betriebssystem betrifft, muss es wissen, was in der Datei enthalten ist und nicht, was in ihrem Namen enthalten ist

Sergiy Kolodyazhnyy
quelle
3
Das ist nicht ganz richtig. Es gibt Programme, die eine bestimmte Erweiterung erwarten. Das am häufigsten verwendete Beispiel ist wahrscheinlich gunzip, dass eine Datei nicht dekomprimiert wird, wenn sie nicht aufgerufen wird foo.gz.
Terdon
Das ist eine Implementierung spezifischer Software. Dienstprogramme auf Unix-ähnlichen Systemen erwarten meist keine Erweiterung.
Sergiy Kolodyazhnyy
7
Meistens nicht, nein. Ihr erster Satz behauptet jedoch, dass sie niemals benutzt werden und nur für den Menschen von Bedeutung sind. Das stimmt nicht ganz. gunzipist ein Beispiel, eogist ein anderes. Außerdem werden viele Tools Namen ohne die richtige Erweiterung nicht automatisch vervollständigen. Ich sage nur, dass es etwas komplizierter ist als "Erweiterungen sind immer irrelevant".
Terdon
1
1 kleines Problem: OP fragte nach dem Betriebssystem. "gunzip" und "eog" sind nicht das Betriebssystem, sondern haben beschlossen, eigene Einschränkungen (im Fall von gunzip) oder Methoden (eog) zu erstellen. "Pantomimetypen" obwohl.
Rinzwind
1
@ Serg Klar, du kannst das Betriebssystem eng definieren und bekommst eine triviale Antwort auf die Frage. Dies ist jedoch keine besonders hilfreiche Antwort, da die überwiegende Mehrheit der Aktionen eines Benutzers mit einem Computer Software umfasst, die Sie ausgeschlossen haben. Beachten Sie, dass die Frage "nur für Menschen" im Gegensatz zu "dem Betriebssystem" steht; Ich glaube nicht, dass sie "den Kernel" meinten.
IMSoP
6

Dies ist eine zu große Antwort für einen Kommentar.

Denken Sie daran, dass auch "Erweiterung" eine Menge hat, wenn unterschiedliche Bedeutungen.

Worüber du redest, scheinen die 3 Buchstaben nach dem zu sein. DOS hat das 8.3-Format sehr populär gemacht und Windows verwendet bis heute den .3-Teil.

Linux hat viele Dateien wie .conf oder .list oder .d oder .c, die Bedeutung haben, aber keine wirklichen Erweiterungen im Sinne von 8.3 sind. Zum Beispiel sucht Apache in /etc/apache2/sites-enabled/website.conf nach seiner Konfigurationsanweisung. Während das System MIME-Typen und Inhaltsheader verwendet und nicht feststellt, dass es sich um eine Textdatei handelt, wird sie von Apache (standardmäßig) immer noch nicht geladen, ohne dass sie auf .conf endet.

.c ist eine andere großartige. Ja, es ist eine Textdatei, aber gcc hängt davon ab, dass main.c zu main.o und schließlich main (nach dem Verlinken) wird. Das System verwendet zu keinem Zeitpunkt die Erweiterung .c, .o oder no, um irgendeinen Sinn für den Inhalt zu haben, sondern nur das Zeug nach dem. hat eine Bedeutung. Sie würden Ihren SCM wahrscheinlich so einrichten, dass main.o und main ignoriert werden.

Der springende Punkt ist: Erweiterungen werden nicht wie in Windows verwendet. Der Kernel führt keine TXT-Datei aus, da Sie den TXT-Teil des Namens entfernen. Es ist auch sehr erfreut, eine TXT-Datei auszuführen, wenn die Ausführungsberechtigung festgelegt ist. Davon abgesehen haben sie eine Bedeutung und werden für viele Dinge immer noch auf "Computerebene" verwendet.

coteyr
quelle
1
Windows ist auch nicht auf das gebundenen x.3noch mehr Namensschema, hast du mehr Erweiterungen auch dort wie .doxc, .torrent, .partusw. Es sind nur , dass viele Dateiformate und Erweiterungen wurden bereits zurück in der Zeit definiert , wenn 8.3 - Name noch eine Sache ist , und später Formate passten meist einfach die Konvention der Verwendung von bis zu 3 Buchstaben an.
Byte Commander
Ich sehe nicht, wie ".conf", ".c" usw. "eine andere Bedeutung" als "der 8.3-Sinn" haben. Das Konzept einer Dateierweiterung kann einfach ausgedrückt werden als "Konvention zum Identifizieren des Dateityps anhand eines Teils seines Namens". Nicht einmal DOS / Win3.1 benötigte die richtige Erweiterung (Sie könnten ein Word-Dokument "STUPIDN.AME" aufrufen und es mit Strg-O in WinWord öffnen). Es ist nur so, dass einige Systeme (z. B. ein Doppelklick auf Windows, gzipIhr Makefile usw.) so geschrieben sind, dass diese Konvention verwendet wird, um Annahmen über die richtige Aktion für jede Datei zu treffen.
IMSoP
@ByteCommander Das stimmt, aber die Erweiterung bestimmt immer noch die verwendete App. Ich bin mir nicht sicher, wie ich die Antwort bearbeiten soll, um dies widerzuspiegeln.
Coteyr
1
@coteyr Auch hier kommt es darauf an, was wir unter "dem Betriebssystem" verstehen. Der Dateimanager sucht mit Sicherheit nach einem Registrierungsschlüssel für "AME" und teilt mir mit, dass "foo.txt" eine Textdatei ist. Aber dirwenn ich an einer Eingabeaufforderung lasse, kann ich nichts davon erfahren. es ist einfach egal. Das Ausführen von Dateien ist auf beiden Betriebssystemen sicherlich eine Ausnahme. Wenn die Frage auf diese beschränkt wäre, würde die Antwort lauten, dass sich DOS / Windows nur um den Namen und Unix / Linux nur um die Ausführungsberechtigung und die ersten Bytes der Datei kümmern. Abgesehen davon gibt es immer eine Anwendung, die eine zu befolgende Konvention auswählt.
IMSoP
1
@coteyr Sie haben * .scr (Bildschirmschoner-Binärdatei) in Windows 3.1 und höher vergessen. Das heißt, ist die Dateierweiterung auch in DOS / Windows - Systemen auch für ausführbare Dateien nach wie vor nur eine Bequemlichkeit. Die Einzelheiten hängen sehr davon ab, wo Sie die Grenze des "Betriebssystems" ziehen, aber Sie können immer eine Binärdatei in den Speicher laden und selbst hineinspringen, um die Arbeit zu erledigen, die normalerweise vom Betriebssystem verlangt wird. Wenn Sie in MS-DOS Command.com durchsehen, bin ich mir ziemlich sicher, dass es eine Liste wie EXE COM gibt, die Sie so bearbeiten können, dass nach anderen Erweiterungen gesucht wird, wenn keine angegeben ist (ohne zu sagen, dass dies eine gute Idee wäre, wohlgemerkt).
einen Lebenslauf vom