在GNU Linux中要求功能的正确方法是什么?


35

我正在尝试发送有关应用文件/ usr / bin / file的错误报告

但是咨询这个人并发送电子邮件

错误请报告错误,并将修补程序发送到错误跟踪器,网址http://bugs.gw.com/ 或listfile@mx.gw.com⟩的邮件列表(请访问 http://mx.gw.com/mailman/ listinfo / file首先订阅)。

让我发现邮件地址不存在。

有没有其他与社区沟通的方式?希望这里的问题已经成为问题的一部分:)

所以这是我的电子邮件:

可能的功能故障:该--extension选项似乎未输出任何内容

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

轻松使用此输出将文件重命名为其正确扩展名将很有用。

诸如文件之类的内容--likely_extension只会输出可能检测到的扩展名,或者如果检测到的检测值太低则显示错误

像这样:

$ file --likely_extension "ab.gif"
gif

更好的--correct_extension选择是:

$ file --correct_extension "ab.jpg"

$ ls
ab.gif

该应用的Tyvm :)


8
问题描述的第二部分是一个纯功能请求,它可能与某些Unix工具作者所持的设计理念背道而驰-只做一件事,就做好。有人可能想维护file(1)的功能,但又不得不维护内置的basename(1)和mv(1)的功能:)
rackandboneman 18/04/30

3
写出来.....
乔尔凡(JoelFan)'18年

您希望某个功能执行使用现有的常用支持工具(如awk)已经可以完成的工作吗?软件作者可能倾向于让您了解或至少正在考虑Linux哲学。有了有效的补丁程序后,您将变得更加认真。
TOOGAM '18年

在v5.25中,file --extension 确实适用于某些文件类型(例如.jpg)。因为没有其他有效的文件扩展名,所以它可能无法正常工作。
罗恩·约翰(RonJohn)'18年

2
例如,在我的系统上:file --extension calf.jpg flower.gif输出:calf.jpg: jpeg/jpg/jpe/jfifflower.gif:显示这些文件可能的其他扩展名(对于GIF文件,则没有)。请注意,file仅对文件类型进行有根据的猜测-它使用一组试探法来做到这一点。它没有从名称中检测到扩展名。如果我重新命名calf.jpg,以calf.txt它仍然是一个JPEG文件,并file告诉我,当我运行file calf.txt它也告诉我说,可能的扩展是jpeg/jpg/jpe/jfif,当我运行file --extension calf.txt
暂停,直到另行通知。

Answers:


48

您正在按照正确的步骤提出问题或增强请求:如果程序的文档中提到了这样做的方法,请遵循这些说明。

不幸的是,经常会发生项目死机,或者您所使用的版本中的说明不再准确的情况。在这些情况下,事情变得有些困难。一种可能的通用方法是在您的发行版中提交错误。成功的话可能是命中注定的...(我应该指出,如果使用的是包,通常最好向从您的包中发布的发行版报告错误;如果已打包,则尤其如此。版本早于当前的“上游”版本,并且如果您尚未检查问题是否仍然存在。)

对于file具体而言,官方文档已被更新一提的是bug跟踪系统和邮件列表下降,而且还提供了一个直接的电子邮件地址当前的维护者,你可以用它来与他联系。


23

除了Stephen Kitt的答案外,您还可以考虑(尤其是如果您自己是开发人员,并且该程序(file在您的情况下)具有不太难理解的源代码)(例如,可能是从您的发行)-因为它是免费软件 -对其进行修补,然后发送补丁。

如果您花时间研究源代码,则可能会做出更好的错误报告。

如果您花更多的时间提出修复补丁,那么您可能会被更认真地考虑(恕我直言,您的行为更多地体现了自由软件的精神)。

因此,请使用自由软件提供的自由研究其源代码(freedom#1)并对其进行改进(freedom#3)。

今天,很容易发布(例如在github上)您的改进版本并共享它(freedom#2)。

确保具有该file程序的最新版本。许多发行版没有使用它(也许发行版中的错误已在上游修复)。

我不确定您的--correct_extension行为所属file(这是一个用于查询而不是更改数据的程序)。但是,如果确实如此,则可能应该将其拼写为--correct-extension--rename-extension...并且,一旦尝试实现这一点,您可能会发现存在一些奇怪的极端情况(关于压缩的tar文件,压缩的C源文件,或者可能需要几个文件扩展名)。

请注意,在Linux和Unix上(与Windows相反),文件实际上是一个inode(请参见inode(7)),并且可以具有多个名称(或没有名称),并且可以一次由多个进程打开(请参阅文件描述符)-甚至没有,即使大多数文件只有一个名称(但请参阅link(2)stat(2))。由于可以命名相同的文件foo.txtbar.gz因此重视文件扩展名没有多大意义。另请参见path_resolution(7)

因此,如果您尝试实现自己的correct-extension想法,就会发现实现(甚至指定)并不是那么简单,并且没有明显的简单行为。

可能您的想法不是很好,并且不能在Linux和POSIX系统上轻松实现(至少并非在所有情况下都如此)。

因此,我建议甚至避免提交功能请求(以其初始形式,这对您和的开发人员来说都是时间的浪费file)。否则,需要进行大量工作,改进其规格并提交补丁。...当然,您将为此花费很多工作(我真的不认为这值得付出痛苦)。

也许还读过一些Unix编程书籍(例如旧的ALP或更新的书籍;以及intro(2)syscalls(2))和《操作系统:三篇简单的书》


10
我怎么会忘记这一点-实际上,“征求”功能的最佳方法就是实施它!
Stephen Kitt '18

2
+1指出可以file提供信息,并且不会改变任何内容。另外,文件的“扩展名”以任何方式指示应使用哪种应用程序打开文件的观念都是面向Windows的。Linux一直遵循“魔术数字”的方法,即在文件的前几个字节中放入一个独特的签名,然后允许该名称为任何东西。打个比方,我是Windows系统中的文件,我必须是“ Monty Harder.human”,以便任何人都知道我是什么,但是Linux将其视为内容的一部分,并且名称是不受约束。
Monty Harder '18

1
如果可以找到正确的源代码,那么也可以找到提交者。
托尔比约恩Ravn的安徒生

2
@StephenKitt甚至在Linux之前,Unix都具有爆炸性并file带有magic文件,因此我不知道它的“复古风格”。MacOS的方法将明确的文件类型放在文件元数据(“资源派生”)中,该文件元数据存储在文件内部,但存储在单独的容器中。
Monty Harder '18

2
@ l0b0我明白您的意思,但是我认为最好的不仅是)请求功能的方法涉及到自己实现(如果可以),这很有用。没有必要的编程技能的人可以放心地忽略它,但是有经验的人会发现它很有用。
David Z

11

你问:

在GNU Linux中要求功能的正确方法是什么?

要回答这个问题,重要的是要知道,本质上没有“ GNU Linux”这样的东西。GNU项目是开发免费软件的一项共同努力。其中一些自由软件以及大量其他自由和开源软件被其他项目收集:Fedora *或Debian之类的协作,开放项目,或者具有不同程度开放性的企业努力,甚至是个人。这些集合被称为“ Linux发行版”或“ GNU / Linux发行版”(这里不存在政治辩论,我不会涉及)。

通常,如果您对功能增强感兴趣,最好的方法是与编写该软件的开发人员合作-发行版中有很多工作要做,只是收集各种软件并使之一起工作,通常会喜欢这些变化发生的“上游”。

因此,您在这里做对了—找到了记录在案的上游资源并尝试在此报告。

但是,看来您感兴趣的软件的书面通信方法不起作用。在这种情况下,您有几种选择:

  1. 尝试找到其他与软件开发人员联系的方法。在这种情况下,大多数发行版都包含file最初由Ian Darwin编写并名义上位于http://www.darwinsys.com/file/的命令,以及您提到的邮件列表。但是像那些邮件列表一样,主站点似乎已关闭。在当今时代,检查GitHub是不错的第二步,我发现https://github.com/file/file —表示 文件CVS存储库的只读镜像,每半小时更新一次。注意:请勿在此处提出拉取请求,也不要评论任何提交,也不能以常规方式将其提交给错误跟踪器或邮件列表。那不是立即有帮助,但是我注意到那里在过去一周内对该存储库进行了更改。因此,下一步可能的办法是查看谁做了这些提交并与他们联系。
  2. 您可以在使用的发行版中询问包装负责人。对于fileFedora,请参阅此页面。由于他们定期使用该软件,因此他们可能还有其他联系上游的方式。根据发行版的不同,最好通过提交错误或直接联系来完成-您有点需要了解各自的文化。(在Fedora中,我建议使用devel邮件列表。)
  3. 如果您使用商业发行版(如Red Hat Enterprise Linux *),则可以提交支持票。作为付费客户,您可能可以影响供应商以找到解决方案。
  4. 如果所有其他方法都失败了,那么您感兴趣的项目可能已经死在上游。在这种情况下,您可以“分叉”项目-创建您自己的版本,并围绕该项目建立一个新的上游社区。如果您的版本得到维护,而另一个版本已失效,则可能会遵循发行版。

*我在Fedora上工作。我受雇于Red Hat。


2
“重要的是要知道没有“ GNU Linux”这样的东西。” –特别是,重要的是要认识到Linux与GNU无关,而GNU与Linux无关。从GNU项目中请求Linux功能或从Linux开发人员中请求GNU实用程序功能很可能会被忽略。
约尔格W¯¯米塔格

3
或从其中任何一个请求非GNU实用程序的功能。
user253751 '18

4

这是您的发行版中的错误。如果发行版的手册页过时,则应针对提供该手册的软件包提交错误。如果您使用的是debian,则可以使用诸如reportbug之类的工具来简化此过程。


3
不,这不是发行版中的错误:上游手册页仍提供相同的信息。
Stephen Kitt '18

1
在任何情况下,包分配的维护者应该知道如何与包的原始维护者提交bug
文森特Fourmond

2
identify -format %m file.gif[0]

%m个图像文件格式(文件魔术)

[0]表示第一帧,如果您不小心在视频上使用它,可能会有所帮助,否则,它会使用ffmpeg库制作每个帧的临时副本。

这仅适用于图像。我不知道如何对通用文件执行此操作。ffmpeg为随机的mp4文件返回“ avc1”(其他mp4文件可能返回不同的字符串,您仍然必须对其进行解析),但我没有找到一种方法将其转换为“ mp4”。'avc1'在/ usr / share / mime中不存在。

ffmpeg或等效的ffprobe列出了解复用器在其输出开始时使用的某些文件格式。对于mp4文件,它说

从输入#0,mov,mp4,m4a,3gp,3g2,mj2。。。
[。。。]
影片:h264(主要)(avc1 / 0x31637661)

对于png它说

从输入#0,png_pipe。。。
[。。。]
视频:png,rgb24(pc)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.