Qual é a maneira correta de solicitar um recurso no GNU Linux?


35

Estou tentando enviar um relatório de erro para o arquivo do aplicativo, / usr / bin / file

Mas consultar o homem e enviar um email

ERROS Por favor, reporte erros e envie correções para o rastreador de erros em http://bugs.gw.com/ ou a lista de discussão em ⟨file@mx.gw.com⟩ (visite http://mx.gw.com/mailman/ listinfo / arquivo primeiro a se inscrever).

Me fez descobrir que o endereço de email não existe.

Existe outra maneira de se comunicar com a comunidade? Espero que esta pergunta aqui já faça parte dela :)

Então aqui está o meu email:

possível falha do recurso: a --extensionopção parece não produzir nada

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

Seria útil poder usar facilmente a saída disso para renomear um arquivo para sua extensão correta.

algo como arquivo --likely_extensionsó produziria a extensão provavelmente detectada ou um erro se a detecção fosse muito baixa

assim:

$ file --likely_extension "ab.gif"
gif

melhor ainda seria uma --correct_extensionopção:

$ file --correct_extension "ab.jpg"

$ ls
ab.gif

Tyvm para este aplicativo :)


8
A segunda parte da descrição do problema é uma solicitação de recurso pura que pode ser contrária à filosofia de design mantida por alguns autores de ferramentas unix - faça apenas uma coisa, faça bem. Alguém pode querer manter a funcionalidade de arquivo (1), mas se ressentem ter que manter builtin basename (1) e mv (1) funcionalidade :)
rackandboneman

3
Escreva ........
JoelFan

Você deseja que um recurso faça o que já pode ser realizado usando as ferramentas comuns suportadas (como o awk)? O autor do software pode estar inclinado a informar você, ou pelo menos estar pensando em The Linux Philosophy . Depois de ter um patch de trabalho, você será levado mais a sério.
TOOGAM

Na v5.25, file --extension faz trabalho para alguns tipos de arquivo (como .jpg). Talvez não "funcione" .gif porque não há outras extensões de arquivo válidas.
31419 RonJohn

2
Como exemplo, no meu sistema: file --extension calf.jpg flower.gifoutputs: calf.jpg: jpeg/jpg/jpe/jfife flower.gif:mostrando as possíveis outras extensões para esses arquivos (nenhuma no caso do arquivo GIF). Observe que fileapenas adivinha o tipo de arquivo - ele usa um conjunto de heurísticas para fazer isso. Não está detectando a extensão do nome. Se eu renomeá calf.jpg- calf.txtlo, ele ainda é um arquivo JPEG e filediz que, quando executo file calf.txt, também informa que as extensões possíveis são jpeg/jpg/jpe/jfifquando executo file --extension calf.txt.
Pausado até novo aviso.

Respostas:


48

Você está seguindo o procedimento correto para registrar um problema ou solicitação de aprimoramento: se a documentação de um programa mencionar como fazer isso, siga essas instruções.

Infelizmente, muitas vezes acontece que os projetos morrem ou que as instruções na versão que você possui não são mais precisas. Nesses casos, as coisas se tornam um pouco mais difíceis. Uma abordagem geral possível é registrar um erro em sua distribuição; No entanto, pode haver algum sucesso ou falha ... (devo mencionar que geralmente é melhor relatar um bug na distribuição da qual você recebeu o pacote, se você estiver usando um pacote; isso é especialmente verdadeiro se o pacote versão é mais antiga que a versão "upstream" atual e se você não verificou se o problema ainda está presente lá.)

Para fileespecificamente, a documentação oficial foi atualizado para mencionar que o bug tracker e lista de discussão estão para baixo, e também fornece um endereço de e-mail direto para o mantenedor atual, que você poderia usar para entrar em contato com ele.


23

Além da resposta de Stephen Kitt , você pode considerar (especialmente se você é um desenvolvedor e se o programa - fileno seu caso - possui código fonte que não é muito difícil de entender) buscar o código fonte desse programa (talvez do seu distribuição) - por ser um software livre - e corrigi-lo, além de enviar um patch.

Se você reservar um tempo para estudar o código fonte , provavelmente fará um relatório de erro melhor.

Se você demorar mais para propor um patch de correção , provavelmente será considerado com mais seriedade (e IMHO está agindo mais no espírito do software livre).

Portanto, use a liberdade fornecida pelo software livre : estude seu código-fonte (liberdade nº 1) e melhore-a (liberdade nº 3).

Hoje é muito fácil publicar (por exemplo, no github ) sua versão aprimorada e compartilhá-la (liberdade nº 2).

Certifique-se de ter a versão mais recente do fileprograma. Muitas distribuições não estão usando isso (e talvez o bug na sua distribuição já tenha sido corrigido antes).

Não tenho certeza de que seu --correct_extensioncomportamento pertence file(que é um programa para consultar , não alterar, seus dados). Mas se isso acontecer, provavelmente deve ser escrito --correct-extensionou --rename-extension... E quando você tentar implementar isso, poderá descobrir que existem casos de canto estranhos (que tal um arquivo tar compactado com gzip ou um arquivo de origem C compactado ou algo que possa precisa de várias extensões de arquivo).

Observe que (ao contrário do Windows) no Linux e Unix, um arquivo é realmente um inode (consulte inode (7) ) e pode ter vários nomes (ou nenhum) e pode ser aberto por vários processos ao mesmo tempo (leia sobre descritores de arquivos ) - ou nenhum, mesmo que a maioria dos arquivos tenha apenas um nome (mas consulte o link (2) e stat (2) ). Como o mesmo arquivo pode ser nomeado foo.txte bar.gznão faz muito sentido atribuir importância às extensões de arquivo. Veja também path_resolution (7) .

Portanto, se você tentar implementar sua correct-extensionideia, descobrirá que não é tão simples de implementar (e até mesmo especificar) e que não existe um comportamento simples óbvio para isso.

Provavelmente, sua ideia não é muito boa e não pode ser facilmente implementada nos sistemas Linux e POSIX (pelo menos, não para todos os casos).

Portanto, recomendo evitar o envio de uma solicitação de recurso (em sua forma inicial, é uma perda de tempo para você e para os desenvolvedores file). Ou então, trabalhe bastante, melhore suas especificações e envie um patch ... É claro que você gastará muito trabalho nisso (e eu realmente não acho que valha a pena).

Talvez também leia alguns livros de programação Unix (como o antigo ALP , ou algo mais novo; e também a introdução (2) e syscalls (2) ) e Sistemas Operacionais: Three Easy Pieces .


10
Como eu poderia esquecer isso - de fato, a melhor maneira de "pedir" um recurso é implementá-lo!
Stephen Kitt

2
+1 por apontar que filefornece informações e não altera nada. Além disso, a noção de que a "extensão" de um arquivo indica de qualquer forma quais aplicativos devem ser usados ​​para abri-lo é muito orientada ao Windows. O Linux sempre seguiu a abordagem do "número mágico" de colocar uma assinatura distinta nos primeiros bytes de um arquivo e permitir que o nome fosse qualquer coisa. Por analogia, eu era um arquivo em um sistema Windows, teria que ser "Monty Harder.human" para que qualquer coisa soubesse o que eu sou, mas o Linux vê isso como parte do meu conteúdo e o nome é sem restrições.
Monty mais dura

1
Se você conseguir localizar o código-fonte correto, também poderá localizar o emissor.
Thorbjørn Ravn Andersen

2
@StephenKitt Mesmo antes do Linux, o Unix tinha shebangs e filecom o magicarquivo, então eu não sei o quão "retro-ajustado" é. A abordagem do MacOS coloca um tipo de arquivo explícito nos metadados do arquivo ("bifurcação de recursos"), que é armazenado dentro do arquivo, mas em um contêiner separado.
precisa saber é o seguinte

2
@ l0b0 Entendo seu ponto de vista, mas acho útil dizer que a melhor (não apenas ) maneira de solicitar um recurso envolve implementá-lo, se você puder. Pessoas que não possuem a habilidade de programação necessária podem ignorá-lo com segurança, mas as pessoas que o acham útil.
David Z

11

Você pergunta:

Qual é a maneira correta de solicitar um recurso no GNU Linux?

e para responder a isso, é importante saber que não existe nada como "GNU Linux", por si só. O Projeto GNU é um esforço colaborativo para desenvolver software livre. Parte desse software livre - junto com grandes quantidades de outros softwares livres e de código aberto - é coletada por outros projetos: projetos colaborativos e abertos como o Fedora * ou Debian, ou esforços corporativos com diferentes graus de abertura, ou mesmo indivíduos. Essas coleções são chamadas de "Distribuições Linux" ou "Distribuições GNU / Linux" (existe um debate político no qual não vou entrar).

Em geral, se você estiver interessado em aprimorar os recursos , a melhor coisa a fazer é trabalhar com o desenvolvedor que escreveu o software - as distribuições têm muito trabalho a fazer para coletar os vários softwares e fazê-los funcionar juntos, e normalmente que preferem essas mudanças a acontecer "upstream".

Então, você fez a coisa certa aqui - encontrou a fonte upstream documentada e tentou reportar lá.

Parece, no entanto, que os métodos de comunicação documentados para o software em que você está interessado não estão funcionando. Nesse caso, você tem várias opções:

  1. Tente encontrar outras maneiras de entrar em contato com os desenvolvedores do software. Nesse caso, a maioria das distros inclui o filecomando originalmente escrito por Ian Darwin e abrigado nominalmente em http://www.darwinsys.com/file/ , com as listas de discussão que você mencionou. Mas, como essas listas de discussão, o site principal parece estar inativo. Atualmente, verificar o GitHub é um bom segundo passo, e encontrei https://github.com/file/file - que diz Espelho somente leitura do repositório CVS de arquivo, atualizado a cada meia hora. NOTA: não faça solicitações pull aqui, nem comente nenhuma confirmação, envie-as da maneira usual para o rastreador de erros ou para a lista de discussão. Isso não é imediatamente útil, mas eu aviso que não têmhouve mudanças nesse repo na semana passada. Portanto, um próximo passo possível é ver quem fez esses commits e contatá-los.
  2. Você pode perguntar à pessoa responsável pelo pacote na distribuição que você usa. Para fileno Fedora, veja esta página . Como eles trabalham com o software regularmente, eles podem ter outros meios de entrar em contato com o upstream. Dependendo da distribuição, é melhor arquivar um bug ou entrar em contato direto - você precisa conhecer a cultura individual. (No Fedora, sugiro a lista de discussão devel .)
  3. Se você estiver usando uma distribuição comercial, como o Red Hat Enterprise Linux *, poderá registrar um tíquete de suporte. Como cliente pagador, você pode influenciar seu fornecedor a encontrar uma solução.
  4. Se tudo mais falhar, o projeto que você está interessado pode estar morto . Nesse caso, você pode "bifurcar" o projeto - criar sua própria versão e criar uma nova comunidade upstream em torno dele. Se a sua versão for mantida e a outra estiver desativada, é provável que as distribuições sejam seguidas.

* Eu trabalho no Fedora. E eu sou funcionário da Red Hat.


2
"é importante saber que não existe" GNU Linux "" - Em particular, é importante perceber que o Linux não tem nada a ver com o GNU e o GNU não tem nada a ver com o Linux. Solicitar um recurso Linux do projeto GNU ou solicitar um recurso GNU de um desenvolvedor Linux provavelmente será simplesmente ignorado.
Jörg W Mittag

3
Ou solicitando um recurso para um utilitário não-GNU de qualquer um deles.
User253751

4

Este é um erro na sua distribuição. Se a distribuição estiver enviando páginas de manual desatualizadas, você deverá registrar um bug no pacote que a forneceu. Se você estiver usando o debian, poderá usar uma ferramenta como reportbug para tornar isso mais simples.


3
Não, isso não é um bug na distribuição: a página do manual upstream ainda fornece as mesmas informações.
Stephen Kitt

1
Em qualquer caso, o mantenedor do pacote na distribuição deve saber como apresentar erros com o mantenedor original do pacote
Vincent Fourmond

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

% m formato de arquivo de imagem (arquivo mágico)

O [0] significa o primeiro quadro, o que poderia ajudar se você o usar acidentalmente em um vídeo, caso contrário, ele usa as bibliotecas ffmpeg para fazer uma cópia temporária de cada quadro.

Isso funciona apenas para imagens. Não sei como fazer isso para arquivos genéricos. O ffmpeg retorna 'avc1' para um arquivo mp4 aleatório (outros arquivos mp4 podem retornar cadeias diferentes e você ainda precisa analisá-lo), e não vejo uma maneira de passar disso para 'mp4'. 'avc1' não está em nenhum lugar em / usr / share / mime.

ffmpeg, ou equivalentemente ffprobe, lista alguns formatos de arquivo que o desmuxer usa no início de sua saída. Para um arquivo mp4, ele diz

Entrada # 0, mov, mp4, m4a, 3gp, 3g2, mj2, de. . .
[. . .]
Vídeo: h264 (Principal) (avc1 / 0x31637661)

para um png diz

Insira # 0, png_pipe, de. . .
[. . .]
Vídeo: png, rgb24 (pc)

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.