Как правильно запрашивать функцию в GNU Linux?

35

Я пытаюсь отправить отчет об ошибке для файла приложения, / 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: ???

Было бы полезно иметь возможность легко использовать выходные данные этого, чтобы переименовать файл с его правильным расширением.

что-то вроде файла --likely_extensionбудет выводить только обнаруженное расширение или ошибку, если обнаружение будет слишком низким

вроде так:

$ file --likely_extension "ab.gif"
gif

лучше хотя бы --correct_extensionвариант:

$ file --correct_extension "ab.jpg"

$ ls
ab.gif

Tyvm для этого приложения :)

fullmooninu
источник
8
Вторая часть описания вашей проблемы - это чисто функциональный запрос, который может идти вразрез с философией дизайна, которой придерживаются некоторые авторы Unix-инструментов - делать только одно, делать это хорошо. Кто-то может захотеть сохранить функциональность файла (1), но не хочет поддерживать встроенные функции basename (1) и mv (1) :)
rackandboneman
3
Напишите это ........
JoelFan
Вы хотите, чтобы функция делала то, что уже может быть выполнено с помощью существующих обычно поддерживаемых инструментов (например, awk)? Автор программного обеспечения может быть склонен сообщить вам о философии Linux или хотя бы подумать о ней . Когда у вас будет рабочий патч, вы будете более серьезно относиться.
TOOGAM
В v5.25, file --extension делает работу для некоторых типов файлов (например , .jpg). Может быть, это не «работает» fir .gif, потому что нет других допустимых расширений файлов.
RonJohn
2
Например, в моей системе: file --extension calf.jpg flower.gifoutput: calf.jpg: jpeg/jpg/jpe/jfifи flower.gif:показаны возможные другие расширения для этих файлов (нет в случае файла GIF). Обратите внимание, что fileтребуется только обоснованное предположение о типе файла - для этого используется набор эвристик. Это не обнаружение расширения по названию. Если переименовать calf.jpgв calf.txtэто еще файл JPEG и fileговорит мне , что , когда я запускаю file calf.txtэто также говорит мне , что возможные расширения , jpeg/jpg/jpe/jfifкогда я бег file --extension calf.txt.
Приостановлено до дальнейшего уведомления.

Ответы:

48

Вы выполняете правильную процедуру для подачи запроса о проблеме или расширении: если в документации программы указано, как это сделать, следуйте этим инструкциям.

К сожалению, часто случается, что проекты умирают или что инструкции в имеющейся у вас версии более не точны. В этих случаях все становится немного сложнее. Один из возможных общих подходов - сообщить об ошибке в вашем дистрибутиве; хотя успех может быть скорее неудачным ... (я должен отметить, что обычно лучше сообщать об ошибке в дистрибутив, из которого вы получили свой пакет, если вы используете пакет; это особенно верно, если упакованный пакет версия старше текущей версии «upstream», и если вы еще не проверили, присутствует ли проблема там.)

В fileчастности, официальная документация была обновлена, чтобы упомянуть, что трекер ошибок и список рассылки недоступны, а также предоставляет прямой адрес электронной почты для текущего сопровождающего, который вы можете использовать, чтобы связаться с ним.

Стивен Китт
источник
23

В дополнение к ответу Стивена Китта , вы можете подумать (особенно, если вы сами разработчик, и если программа - fileв вашем случае - имеет исходный код, который не слишком сложен для понимания), чтобы получить исходный код этой программы (возможно, из вашего распространение) - так как это бесплатное программное обеспечение - и исправление его, а также отправка патча.

Если вы потратите время на изучение исходного кода , вы, вероятно, составите лучший отчет об ошибках.

Если вы потратите больше времени на предложение исправления , вы, вероятно, будете восприниматься более серьезно (и ИМХО вы действуете в духе свободного программного обеспечения).

Поэтому используйте свободу, предоставляемую свободным программным обеспечением : изучите его исходный код (свобода № 1) и улучшите его (свобода № 3).

Сегодня очень легко опубликовать (например, на github ) вашу улучшенную версию и поделиться ею (свобода № 2).

Убедитесь, что у вас последняя версия fileпрограммы. Во многих дистрибутивах это не используется (и, возможно, ошибка в вашем дистрибутиве уже исправлена).

Я не уверен, что ваше --correct_extensionповедение относится к вашей fileпрограмме (которая запрашивает , а не изменяет ваши данные). Но если это произойдет, то, вероятно, следует записать это по буквам --correct-extensionили --rename-extension... И как только вы попытаетесь реализовать это, вы можете обнаружить, что существуют странные угловые случаи (как насчет gzip-файла tar, или сжатого исходного файла C, или чего-то, что могло бы нужно несколько расширений файлов).

Обратите внимание, что (в отличие от Windows) в Linux и Unix файл на самом деле является индексом (см. Inode (7) ) и может иметь несколько имен (или ни одного) и может открываться несколькими процессами одновременно (читайте о файловых дескрипторах ) - или нет, даже если большинство файлов имеют только одно имя (но смотрите ссылки (2) и stat (2) ). Поскольку один и тот же файл может быть назван, foo.txtи bar.gzне имеет большого смысла придавать важность расширениям файлов. Смотрите также path_resolution (7) .

Итак, если вы попытаетесь реализовать свою correct-extensionидею, вы обнаружите, что ее не так просто реализовать (и даже указать), и что для этого не существует очевидного простого поведения.

Возможно, ваша идея не очень хороша и не может быть легко реализована в системах Linux и POSIX (по крайней мере, не во всех случаях).

Поэтому я рекомендую избегать даже отправки запроса на функцию (в его первоначальной форме это потеря времени для вас и для разработчиков file). Или же, поработайте над этим, улучшите его спецификации и отправьте патч ... Конечно, вы потратите на это много работы (и я действительно не думаю, что это стоит того).

Возможно, также прочитайте какую-нибудь книгу по программированию для Unix (например, старый ALP или что-то более новое; а также intro (2) & syscalls (2) ) и Операционные системы: Три простых компонента .

Василий Старынкевич
источник
10
Как я мог забыть об этом - действительно, лучший способ «попросить» функцию - это реализовать ее!
Стивен Китт
2
+1 за указание на то, что file предоставляет информацию и ничего не меняет. Кроме того, представление о том, что «расширение» файла каким-либо образом указывает, какие приложения следует использовать для его открытия, очень ориентировано на Windows. Linux всегда придерживался подхода «магического числа», заключающегося в том, чтобы поставить отличительную сигнатуру в первые несколько байтов файла, а затем позволить имени быть любым. По аналогии, я был файлом в системе Windows, я должен был быть "Monty Harder.human", чтобы кто-нибудь знал, что я, но Linux видит это как часть моего контента, и имя неограниченный.
Монти Хардер
1
Если вы можете найти правильный исходный код, вы также можете найти коммиттер.
Торбьерн Равн Андерсен
2
@StephenKitt Еще до Linux, Unix была shebangs и fileс magicфайлом, так что я не знаю , как «ретро установлены» это. Подход MacOS помещает явный тип файла в метаданные файла («ветвь ресурса»), которые хранятся внутри файла, но в отдельном контейнере.
Монти Хардер
2
@ l0b0 Я понимаю вашу точку зрения, но думаю, что полезно сказать, что лучший (не только ) способ запроса функции - это реализовать ее самостоятельно, если вы можете. Люди, у которых нет необходимых навыков программирования, могут смело игнорировать это, но люди, которые это сделают, сочтут это полезным.
Дэвид Z
11

Ты спрашиваешь:

Как правильно запрашивать функцию в GNU Linux?

и чтобы ответить на это, важно знать, что не существует такого понятия, как «GNU Linux», как такового. Проект GNU - это совместная работа по разработке свободного программного обеспечения. Часть этого бесплатного программного обеспечения - наряду с большим количеством другого бесплатного программного обеспечения с открытым исходным кодом - собирается другими проектами: совместными, открытыми проектами, такими как Fedora * или Debian, или корпоративными усилиями с различной степенью открытости, или даже отдельными лицами. Эти коллекции называются «дистрибутивами Linux» или «дистрибутивами GNU / Linux» (там есть политические дебаты, в которые я не буду вступать).

В общем, если вас интересует улучшении функций , лучше всего поработать с разработчиком, написавшим программное обеспечение - дистрибутивам предстоит проделать большую работу, чтобы просто собрать различное программное обеспечение и заставить его работать вместе, и обычно предпочел бы, чтобы эти изменения произошли «вверх по течению».

Итак, вы все сделали правильно - вы нашли документированный источник и попытались сообщить об этом.

Однако, похоже, что документированные методы связи для интересующей вас программы не работают. В этом случае у вас есть несколько вариантов:

  1. Попробуйте найти другие способы связаться с разработчиками программного обеспечения. В этом случае большинство дистрибутивов включают fileкоманду, изначально написанную Ианом Дарвином и номинально размещенную по адресу http://www.darwinsys.com/file/ , с указанными вами списками рассылки. Но, как и эти списки рассылки, основной сайт, кажется, не работает. В наше время проверка GitHub является хорошим вторым шагом, и я нашел https://github.com/file/file, в котором говорится, Доступное только для чтения зеркало» хранилища файлов CVS, обновляется каждые полчаса. ПРИМЕЧАНИЕ: не делайте здесь пулл-запросы, не комментируйте какие-либо коммиты, отправляйте их обычным способом в систему отслеживания ошибок или в список рассылки. Это не сразу полезно, но я заметил , что там естьбыли изменения в этом репо на прошлой неделе. Итак, один из возможных следующих шагов - увидеть, кто совершил эти коммиты, и связаться с ними.
  2. Вы можете попросить человека, ответственного за пакет в используемом вами дистрибутиве. Для fileв Fedora, см. Эту страницу . Поскольку они регулярно работают с программным обеспечением, у них могут быть другие способы связаться с вышестоящими. В зависимости от дистрибутива, это лучше всего сделать, заполнив сообщение об ошибке или путем прямого контакта - вам нужно знать индивидуальную культуру. (В Fedora я бы предложил список рассылки devel .)
  3. Если вы используете коммерческий дистрибутив, например Red Hat Enterprise Linux *, вы можете отправить заявку в службу поддержки. Как платящий клиент, вы можете повлиять на вашего поставщика, чтобы найти решение.
  4. Если все остальное терпит неудачу, интересующий вас проект может быть мертвым . В этом случае вы можете «раскошелиться» на проект - создать свою собственную версию и построить вокруг нее новое сообщество разработчиков. Если ваша версия поддерживается, а другая устарела, вероятно, дистрибутивы последуют.

* Я работаю на Fedora. И я работаю в Red Hat.

mattdm
источник
2
«важно знать, что нет такой единой вещи, как« GNU Linux »» - в частности, важно понимать, что Linux не имеет ничего общего с GNU, а GNU не имеет ничего общего с Linux. Запрашивание функции Linux из проекта GNU или запрос функции для утилиты GNU от разработчика Linux, скорее всего, будет просто проигнорировано.
Йорг Миттаг,
3
Или запросить функцию для не-GNU утилиты из любого из них.
user253751
4

Это ошибка в вашем дистрибутиве. Если дистрибутив отправляет устаревшие man-страницы, вы должны сообщить об ошибке в пакете, который его предоставил. Если вы используете debian, вы можете использовать такой инструмент, как reportbug, чтобы сделать это проще.

Гость
источник
3
Нет, это не ошибка в дистрибутиве: вышестоящая страница руководства по- прежнему предоставляет ту же информацию.
Стивен Китт
1
В любом случае, сопровождающий пакета в дистрибутиве должен знать, как
сообщать
2
identify -format %m file.gif[0]

% m формат файла изображения (магия файла)

[0] означает первый кадр, который может помочь, если вы случайно используете его на видео, так как в противном случае он использует библиотеки ffmpeg для создания временной копии каждого кадра.

Это работает только для изображений. Я не знаю, как это сделать для общих файлов. ffmpeg возвращает 'avc1' для случайного файла mp4 (другие файлы mp4 могут возвращать разные строки, и вам все равно придется его анализировать), и я не вижу способа перейти от этого к 'mp4'. 'avc1' нет нигде в / usr / share / mime.

ffmpeg, или, что то же самое, ffprobe, перечисляет некоторые форматы файлов, которые использует демультиплексор в начале своего вывода. Для файла mp4 написано

Вход № 0, MOV, MP4, M4A, 3GP, 3G2, MJ2, из. , ,
[. , .]
Видео: h264 (Main) (avc1 / 0x31637661)

для PNG это говорит

Введите # 0, png_pipe, from. , ,
[. , .]
Видео: png, rgb24 (pc)

Misaki
источник