Was ist der richtige Weg, um nach einer Funktion in GNU Linux zu fragen?

35

Ich versuche, einen Fehlerbericht für die App-Datei / usr / bin / file zu senden

Aber den Mann zu Rate ziehen und eine E-Mail senden

BUGS Bitte melden Sie Bugs und senden Sie Patches an den Bug Tracker unter http://bugs.gw.com/ oder an die Mailingliste unter ⟨[email protected]⟩ (besuchen Sie http://mx.gw.com/mailman/). listinfo / Datei zuerst abonnieren).

Ich musste herausfinden, dass die Mail-Adresse nicht existiert.

Gibt es eine andere Art der Kommunikation mit der Community? Hoffentlich ist diese Frage hier schon dabei :)

Also hier ist meine E-Mail:

Möglicher Funktionsfehler: Die --extensionOption scheint nichts auszugeben

$ file --extension "ab.gif" 
ab.gif: ???

Es wäre nützlich, wenn Sie die Ausgabe von this verwenden könnten, um eine Datei in die richtige Erweiterung umzubenennen.

so etwas wie Datei --likely_extensionwürde nur die wahrscheinlich erkannte Erweiterung oder einen Fehler ausgeben, wenn die Erkennung zu niedrig war

wie so:

$ file --likely_extension "ab.gif"
gif

Besser wäre allerdings eine --correct_extensionOption:

$ file --correct_extension "ab.jpg"

$ ls
ab.gif

Tyvm für diese App :)

fullmooninu
quelle
8
Der zweite Teil Ihrer Problembeschreibung ist eine reine Funktionsanforderung, die möglicherweise der Designphilosophie einiger Unix-Tool-Autoren zuwiderläuft. Tun Sie nur eines, tun Sie es gut. Jemand möchte vielleicht die Funktionalität von Datei (1) beibehalten, muss aber weiterhin die eingebauten Funktionen basename (1) und mv (1)
beibehalten
3
Schreiben Sie es ........
JoelFan
Sie möchten, dass eine Funktion das leistet, was bereits mit vorhandenen, allgemein unterstützten Tools (wie awk) erreicht werden kann? Der Software-Autor ist möglicherweise geneigt, Sie über die Linux-Philosophie zu informieren oder zumindest darüber nachzudenken . Sobald Sie einen funktionierenden Patch haben, werden Sie ernster genommen.
TOOGAM
In v5.25, file --extension tut Arbeit für einige Dateitypen (wie .jpg). Möglicherweise "funktioniert" fir .gif nicht, da es keine anderen gültigen Dateierweiterungen gibt.
RonJohn
2
Als Beispiel auf meinem System: file --extension calf.jpg flower.gifAusgaben: calf.jpg: jpeg/jpg/jpe/jfifund flower.gif:Anzeigen der möglichen anderen Erweiterungen für diese Dateien (keine im Fall der GIF-Datei). Beachten Sie, dass filenur eine fundierte Schätzung des Dateityps erforderlich ist. Hierzu werden verschiedene Heuristiken verwendet. Die Erweiterung wird nicht anhand des Namens erkannt. Wenn ich es in umbenenne calf.jpg, ist calf.txtes immer noch eine JPEG-Datei und filesagt mir, dass wenn ich file calf.txtes starte, es mir auch sagt, dass die möglichen Erweiterungen sind, jpeg/jpg/jpe/jfifwenn ich es starte file --extension calf.txt.
Bis auf weiteres angehalten.

Antworten:

48

Um ein Problem oder eine Erweiterungsanforderung einzureichen, gehen Sie wie folgt vor: Befolgen Sie diese Anweisungen, wenn in der Dokumentation eines Programms erwähnt wird, wie dies getan wird.

Leider kommt es häufig vor, dass Projekte abstürzen oder dass die Anweisungen in Ihrer Version nicht mehr korrekt sind. In diesen Fällen wird es etwas schwieriger. Ein möglicher allgemeiner Ansatz besteht darin, einen Fehler bei Ihrer Distribution zu melden. Erfolg gibt es allerdings eher als Treffer oder Misserfolg ... (Ich sollte erwähnen, dass es normalerweise besser ist, einen Fehler an die Distribution zu melden , von der Sie Ihr Paket erhalten haben, wenn Sie ein Paket verwenden. Dies gilt insbesondere, wenn das Paket gepackt ist Version ist älter als die aktuelle "Upstream" -Version, und wenn Sie nicht überprüft haben, ob das Problem noch vorhanden ist.)

Für fileInsbesondere die offizielle Dokumentation wurde aktualisiert , zu erwähnen , dass die Bug - Tracker und Mailing - Liste sind unten, und es bietet auch eine direkte E - Mail - Adresse für den aktuellen Betreuer, die Sie nutzen könnten , ihn zu kontaktieren.

Stephen Kitt
quelle
23

Zusätzlich zu Stephen Kitts Antwort könnten Sie überlegen (insbesondere wenn Sie selbst Entwickler sind und das Programm - filein Ihrem Fall - einen nicht allzu schwer verständlichen Quellcode hat), den Quellcode dieses Programms abzurufen (vielleicht von Ihrem Distribution) - da es sich um freie Software handelt - und Patchen und auch Versenden eines Patches.

Wenn Sie sich Zeit nehmen, um den Quellcode zu studieren , werden Sie wahrscheinlich einen besseren Fehlerbericht erstellen.

Wenn Sie sich mehr Zeit nehmen, um einen Fixing-Patch vorzuschlagen , werden Sie wahrscheinlich ernsthafter in Betracht gezogen (und IMHO verhalten Sie sich eher im Geiste freier Software).

So verwenden Sie die Freiheit , bereitgestellt durch freie Software : studieren seinen Quellcode (Freiheit # 1) und verbessern es (Freiheit # 3).

Heute ist es sehr einfach, Ihre verbesserte Version zu veröffentlichen (z. B. auf Github ) und zu teilen (Freiheit 2).

Stellen Sie sicher, dass Sie die neueste Version des fileProgramms haben. Viele Distributionen verwenden das nicht (und vielleicht wurde der Fehler in Ihrer Distribution bereits behoben).

Ich bin nicht sicher, ob Ihr --correct_extensionVerhalten dazu gehört file(das ist ein Programm , mit dem Sie Ihre Daten abfragen und nicht ändern können). Aber wenn ja, sollte es wahrscheinlich buchstabiert werden --correct-extensionoder --rename-extension... Und wenn Sie versuchen, dies zu implementieren, werden Sie möglicherweise feststellen, dass es seltsame Eckfälle gibt (wie wäre es mit einer gezippten TAR-Datei oder einer komprimierten C-Quelldatei oder etwas anderem, das dies könnte) mehrere Dateierweiterungen benötigen).

Beachten Sie, dass eine Datei (im Gegensatz zu Windows) unter Linux & Unix tatsächlich eine Inode ist (siehe Inode (7) ) und mehrere Namen (oder keine) haben kann und von mehreren Prozessen gleichzeitig geöffnet werden kann (Informationen zu Dateideskriptoren ). oder keine, auch wenn die meisten Dateien nur einen Namen haben (siehe aber link (2) & stat (2) ). Da die gleiche Datei benannt werden könnte foo.txtund bar.gzes wenig sinnvoll ist, Dateierweiterungen Bedeutung beizumessen. Siehe auch path_resolution (7) .

Wenn Sie also versuchen, Ihre correct-extensionIdee umzusetzen , werden Sie feststellen, dass es nicht so einfach ist, sie umzusetzen (und sogar anzugeben), und dass es dafür kein offensichtliches einfaches Verhalten gibt.

Wahrscheinlich ist Ihre Idee nicht sehr gut und kann nicht einfach auf Linux- und POSIX-Systemen implementiert werden (zumindest nicht in allen Fällen).

Ich empfehle daher, nicht einmal eine Funktionsanfrage zu stellen (in der ursprünglichen Form ist dies ein Zeitverlust für Sie und die Entwickler von file). Oder arbeiten Sie viel daran, verbessern Sie die Spezifikationen und reichen Sie einen Patch ein ... Natürlich werden Sie viel daran arbeiten (und ich denke wirklich nicht, dass es den Schmerz wert ist).

Vielleicht lesen Sie auch ein Unix-Programmierbuch (wie das alte ALP oder etwas neueres) sowie Intro (2) & Syscalls (2 ) und Betriebssysteme: Three Easy Pieces .

Basile Starynkevitch
quelle
10
Wie könnte ich das vergessen - in der Tat ist der beste Weg, um nach einem Feature zu "fragen", es zu implementieren!
Stephen Kitt
2
+1 für Hinweise, filedie Informationen liefern und nichts ändern. Der Gedanke, dass die "Erweiterung" einer Datei in irgendeiner Weise angibt, mit welcher (n) Anwendung (en) sie geöffnet werden soll (en), ist sehr Windows-orientiert. Linux ist immer dem "Magic Number" -Ansatz gefolgt, in den ersten Bytes einer Datei eine eindeutige Signatur zu setzen und dann zuzulassen, dass der Name beliebig ist. In analoger Weise war ich eine Datei in einem Windows-System, ich müsste "Monty Harder.human" sein, damit alles weiß, was ich bin, aber Linux sieht das als Teil meines Inhalts und der Name ist ungezwungen.
Monty Harder
1
Wenn Sie den richtigen Quellcode finden können, können Sie auch den Committer finden.
Thorbjørn Ravn Andersen
2
@StephenKitt Schon vor Linux hatte Unix Shebangs und filemit der magicDatei, daher weiß ich nicht, wie "nachgerüstet" es ist. Bei MacOS wurde ein expliziter Dateityp in die Dateimetadaten ("Resource Fork") eingefügt, der in der Datei, jedoch in einem separaten Container gespeichert ist.
Monty Harder
2
@ l0b0 Ich verstehe Ihren Standpunkt, aber ich denke, es ist hilfreich zu sagen, dass die beste (nicht nur ) Möglichkeit, ein Feature anzufordern, darin besteht, es selbst zu implementieren, wenn Sie können. Leute, die nicht über die notwendigen Programmierkenntnisse verfügen, können dies ignorieren, aber Leute, die dies tun, werden es nützlich finden.
David Z
11

Du fragst:

Was ist der richtige Weg, um nach einer Funktion in GNU Linux zu fragen?

und um das zu beantworten, ist es wichtig zu wissen, dass es an sich kein "GNU Linux" gibt. Das GNU-Projekt ist eine gemeinsame Anstrengung, um freie Software zu entwickeln. Ein Teil dieser freien Software - zusammen mit großen Mengen anderer freier und Open-Source-Software - wird von anderen Projekten gesammelt : entweder von kollaborativen, offenen Projekten wie Fedora * oder Debian oder von Unternehmensanstrengungen mit unterschiedlichem Grad an Offenheit oder sogar von Einzelpersonen. Diese Sammlungen heißen "Linux Distributions" oder "GNU / Linux Distributions" (es gibt dort eine politische Debatte, auf die ich nicht eingehen werde).

Wenn Sie an der Funktionserweiterung interessiert sind, ist es im Allgemeinen am besten, mit dem Entwickler zusammenzuarbeiten, der die Software geschrieben hat. Die Distributionen müssen eine Menge Arbeit auf sich nehmen, um die verschiedenen Softwareprogramme zu sammeln und sie normal zusammenarbeiten zu lassen Ich würde es vorziehen, wenn diese Änderungen "vorgelagert" erfolgen.

Also haben Sie hier das Richtige getan - Sie haben die dokumentierte Quelle gefunden und versucht, dort zu berichten.

Es scheint jedoch, dass die dokumentierten Kommunikationsmethoden für die Software, an der Sie interessiert sind, nicht funktionieren. In diesem Fall haben Sie mehrere Möglichkeiten:

  1. Versuchen Sie, auf andere Weise Kontakt mit den Entwicklern der Software aufzunehmen. In diesem Fall enthalten die meisten Distributionen den fileBefehl, der ursprünglich von Ian Darwin geschrieben und nominell unter http://www.darwinsys.com/file/ zusammen mit den von Ihnen erwähnten Mailinglisten abgelegt wurde . Aber wie bei diesen Mailinglisten scheint die Hauptseite nicht erreichbar zu sein. In der heutigen Zeit ist das Überprüfen von GitHub ein guter zweiter Schritt, und ich habe festgestellt, dass https://github.com/file/file - der schreibgeschützte Spiegel des Datei-CVS-Repositorys - jede halbe Stunde aktualisiert wird. HINWEIS: Machen Sie hier keine Pull-Anfragen, kommentieren Sie keine Commits und senden Sie diese nicht wie gewohnt an den Bug-Tracker oder an die Mailingliste. Das ist nicht sofort hilfreich, aber ich merke, dass es hatÄnderungen an diesem Repo in der letzten Woche. Ein möglicher nächster Schritt ist also, zu sehen, wer diese Verpflichtungen erfüllt hat, und sie zu kontaktieren.
  2. Sie können die Person fragen, die für das Paket in der von Ihnen verwendeten Distribution verantwortlich ist. Informationen filezu Fedora finden Sie auf dieser Seite . Da sie regelmäßig mit der Software arbeiten, haben sie möglicherweise andere Möglichkeiten, den Upstream zu kontaktieren. Je nach Distribution erfolgt dies am besten durch Einreichen eines Fehlers oder durch direkten Kontakt - Sie müssen die jeweilige Kultur kennen. (In Fedora würde ich die Entwickler-Mailingliste vorschlagen .)
  3. Wenn Sie eine kommerzielle Distribution wie Red Hat Enterprise Linux * verwenden, können Sie ein Support-Ticket einreichen. Als zahlender Kunde können Sie Ihren Lieferanten möglicherweise beeinflussen, um eine Lösung zu finden.
  4. Wenn alles andere fehlschlägt, sind das Projekt , das Sie interessiert sein könnte Upstream ist tot . In diesem Fall können Sie das Projekt "verzweigen" - erstellen Sie Ihre eigene Version und bauen Sie eine neue Upstream-Community darauf auf. Wenn Ihre Version gepflegt ist und die andere tot ist, werden die Distributionen wahrscheinlich folgen.

* Ich arbeite an Fedora. Und ich bin bei Red Hat angestellt.

mattdm
quelle
2
"Es ist wichtig zu wissen, dass es so etwas wie" GNU Linux "nicht gibt. Insbesondere ist es wichtig zu erkennen, dass Linux nichts mit GNU zu tun hat und GNU nichts mit Linux zu tun hat. Die Frage nach einer Linux-Funktion aus dem GNU-Projekt oder nach einer Funktion für ein GNU-Dienstprogramm von einem Linux-Entwickler wird höchstwahrscheinlich einfach ignoriert.
Jörg W Mittag
3
Oder fragen Sie nach einer Funktion für ein Nicht-GNU-Dienstprogramm.
user253751
4

Dies ist ein Fehler in Ihrer Distribution. Wenn die Distribution Man-Pages versendet, die nicht mehr aktuell sind, sollten Sie einen Fehler gegen das Paket einreichen, das sie bereitgestellt hat. Wenn Sie Debian verwenden, können Sie ein Tool wie reportbug verwenden, um dies zu vereinfachen.

Ein Gast
quelle
3
Nein, dies ist kein Fehler in der Distribution: Die Upstream-Manpage bietet weiterhin dieselben Informationen.
Stephen Kitt
1
In jedem Fall sollte der Betreuer des Pakets in der Distribution wissen, wie Fehler beim ursprünglichen Betreuer des Pakets
Vincent Fourmond,
2
identify -format %m file.gif[0]

% m Bilddateiformat (Dateimagie)

Die [0] steht für das erste Bild. Dies kann hilfreich sein, wenn Sie es versehentlich in einem Video verwenden, da ansonsten ffmpeg-Bibliotheken verwendet werden, um eine temporäre Kopie jedes Bilds zu erstellen.

Dies funktioniert nur für Bilder. Ich weiß nicht, wie ich es für generische Dateien machen soll. ffmpeg gibt 'avc1' für eine zufällige mp4-Datei zurück (andere mp4-Dateien geben möglicherweise andere Zeichenfolgen zurück, und Sie müssen sie noch analysieren), und ich sehe keine Möglichkeit, von dieser zu 'mp4' zu gelangen. 'avc1' ist nirgends in / usr / share / mime.

ffmpeg oder äquivalent ffprobe listet einige Dateiformate auf, die der Demuxer zu Beginn seiner Ausgabe verwendet. Für eine mp4-Datei heißt es

Eingang Nr. 0, mov, mp4, m4a, 3gp, 3g2, mj2, von. . .
[. . .]
Video: h264 (Main) (avc1 / 0x31637661)

für ein png heißt es

Eingabe # 0, png_pipe, von. . .
[. . .]
Video: png, rgb24 (pc)

Misaki
quelle