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

ful*_*inu 36 file-format files

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

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

错误 请报告错误并将补丁发送到http://bugs.gw.com/上的错误跟踪器 或 ?file@mx.gw.com 的邮件列表?(先访问 http://mx.gw.com/mailman/listinfo/file订阅)。

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

是否有另一种与社区沟通的方式?希望这里的问题已经是其中的一部分:)

所以这是我的电子邮件:

可能的功能失败:该--extension选项似乎没有输出任何内容

$ file --extension "ab.gif" 
ab.gif: ???
Run Code Online (Sandbox Code Playgroud)

能够轻松地使用它的输出将文件重命名为其正确的扩展名会很有用。

--likely_extension如果检测太低,文件之类的东西只会输出可能检测到的扩展名或错误

像这样:

$ file --likely_extension "ab.gif"
gif
Run Code Online (Sandbox Code Playgroud)

更好,但将是一个--correct_extension选择:

$ file --correct_extension "ab.jpg"

$ ls
ab.gif
Run Code Online (Sandbox Code Playgroud)

此应用程序的 Tyvm :)

Ste*_*itt 48

您正在按照正确的程序提交问题或增强请求:如果程序的文档中提到了如何执行此操作,请按照这些说明进行操作。

不幸的是,经常发生项目死亡,或者您拥有的版本中的说明不再准确的情况。在这些情况下,事情变得有点困难。一种可能的通用方法是在您的发行版中提交错误;但是,成功可能会碰巧失败......(我应该提到,如果您使用的是软件包,通常最好向您从中获得软件包的发行版报告错误;如果打包版本比当前的“上游”版本旧,如果您还没有检查问题是否仍然存在。)

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


Bas*_*tch 23

除了Stephen Kitt 的回答之外,您还可以考虑(特别是如果您自己是开发人员,并且如果该程序(file就您而言)具有不太难理解的源代码)获取该程序的源代码(可能来自您的发行版) - 因为它是免费软件- 并修补它,并发送补丁。

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

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

所以使用自由软件提供的自由研究它的源代码(freedom#1)并改进它(freedom#3)。

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

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

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

请注意(与 Windows 相反)在 Linux 和 Unix 上,文件实际上是一个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认同)
  • +1 指出 `file` 提供信息,并且不会改变任何内容。此外,文件的“扩展名”以任何方式指示应该使用什么应用程序来打开它的概念是非常面向 Windows 的。Linux 一直遵循“幻数”方法,即在文件的前几个字节中放置一个独特的签名,然后允许名称任意。打个比方,我是 Windows 系统中的一个文件,我必须是“Monty Harder.human”才能让任何人知道我是什么,但 Linux 将其视为我内容的一部分,名称是不受约束。 (2认同)
  • @StephenKitt 甚至在 Linux 之前,Unix 就有 shebangs 和带有 `magic` 文件的 `file`,所以我不知道它是多么“复古”。MacOS 的方法在文件元数据(“资源分叉”)中放置了一个明确的文件类型,该元数据存储在文件内部但在一个单独的容器中。 (2认同)
  • @l0b0 我明白你的意思,但我确实认为,如果可以的话,说_best_(不是_only_)请求功能的方式涉及自己实现它是有帮助的。没有必要的编程技能的人可以放心地忽略这一点,但会的人会发现它很有用。 (2认同)

mat*_*tdm 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 中,我建议使用开发邮件列表。)
  3. 如果您使用的是商业发行版,例如 Red Hat Enterprise Linux*,则可以提交支持票证。作为付费客户,您可以影响您的供应商以找到解决方案。
  4. 如果所有其他方法都失败了,那么您感兴趣的项目可能已死在上游。在这种情况下,您可以“分叉”该项目——创建您自己的版本,并围绕它构建一个新的上游社区。如果您的版本得到维护而另一个版本已死,则发行版很可能会随之而来。

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

  • 或者从其中任何一个请求非 GNU 实用程序的功能。 (3认同)
  • “重要的是要知道没有“GNU Linux”这样的单一事物”——特别是,重要的是要意识到 Linux 与 GNU 无关,而 GNU 与 Linux 无关。从 GNU 项目要求 Linux 功能或从 Linux 开发人员要求 GNU 实用程序的功能很可能会被忽略。 (2认同)

小智 5

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

  • 不,这不是发行版中的错误:[上游手册页](https://github.com/file/file/blob/master/doc/file.man)仍然提供相同的信息。 (4认同)