Який правильний спосіб запросити функцію в GNU Linux?


35

Я намагаюся надіслати звіт про помилку для файлу програми / usr / bin / file

Але порадитися з людиною та надіслати електронний лист

БУГИ Будь ласка, повідомляйте про помилки та надсилайте виправлення в трекер помилок на веб-сайті http://bugs.gw.com/ або у списку розсилки за адресою ⟨file@mx.gw.com⟩ (відвідайте http://mx.gw.com/mailman/ список info / файл спочатку підписатися).

Змусив мене з’ясувати, що поштова адреса не існує.

Чи є інший спосіб спілкування з громадою? Сподіваємось, це питання тут вже є частиною його :)

Тож ось мій електронний лист:

можливий збій функції: --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 - зробіть лише одне, зробіть це добре. Хтось може захотіти підтримувати функціональність файлу (1), але обурюватися необхідністю підтримувати вбудовану
базову назву

3
Напишіть це ........
JoelFan

Ви хочете, щоб функція робила те, що вже можна досягти, використовуючи наявні загальноприйняті інструменти (наприклад, awk)? Автор програмного забезпечення, можливо, схильний повідомити вам про або хоча б задуматися про філософію Linux . Після того, як у вас буде робоча латка, ви поставитеся серйозніше.
TOOGAM

В v5.25, file --extension робить роботу для деяких типів файлів (наприклад , .jpg). Можливо, це не працює "fir .gif", оскільки немає інших дійсних розширень файлів.
РонДжон

2
Наприклад, в моїй системі: file --extension calf.jpg flower.gifoutputs: 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у вашому випадку - має вихідний код, який не надто складно зрозуміти) отримання вихідного коду цієї програми (можливо, з вашої розповсюдження) - оскільки це вільне програмне забезпечення - і виправлення його, а також відправлення патча.

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

Якщо вам потрібно більше часу, щоб запропонувати виправлення виправлення , ви, швидше за все, будете розглядатися серйозніше (і в IMHO ви дієте більше в дусі вільного програмного забезпечення).

Тому використовуйте свободу, яку надає вільне програмне забезпечення : вивчіть її вихідний код (свобода №1) та вдосконаліть його (свобода №3).

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

Обов’язково мати останню версію fileпрограми. У багатьох дистрибутивах це не використовується (можливо, помилка у вашому дистрибутиві вже виправлена ​​вище).

Я не впевнений, що ваша --correct_extensionповедінка належить file(це програма для запиту , а не зміни ваших даних). Але якщо це так, це, ймовірно, має бути написано --correct-extensionабо --rename-extension... І коли ви спробуєте реалізувати це, ви зможете виявити, що існують дивні кутові випадки (як щодо файлу gzipped tar, або стисненого вихідного файлу C, або чогось, що може потрібно кілька розширень файлів).

Зауважте, що (на відміну від Windows) на Linux & Unix файл насправді є inode (див. Inode (7) ) і може мати кілька імен (або жодне), і їх можна відкрити відразу декількома процесами (читайте про дескриптори файлів ) - або жоден, навіть якщо більшість файлів мають лише одне ім’я (але див. посилання (2) та stat (2) ). Оскільки той самий файл можна було б назвати foo.txtі bar.gzне має великого сенсу надавати розширення файлів значення. Дивіться також path_resolution (7) .

Отже, якщо ви спробуєте реалізувати свою correct-extensionідею, ви дізнаєтесь, що реалізувати (і навіть вказати) це не так просто і що для цього немає очевидної простої поведінки.

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

Тому я рекомендую уникати навіть подання запиту на функцію (у початковій формі це втрата часу як для вас, так і для розробників file). Або ж, попрацюйте над цим багато, вдосконаліть його технічні характеристики та подайте виправлення .... Звичайно, ви витратите на це багато роботи (і я дійсно не вважаю, що це варто болю).

Можливо, також прочитайте книгу програмування Unix (наприклад, старий ALP чи щось нове; а також вступ (2) & syscalls (2) ) та операційні системи: Три простих фрагмента .


10
Як я можу забути, що - дійсно, найкращий спосіб "попросити" функцію - це реалізувати її!
Стівен Кітт

2
+1, щоб вказати, що fileнадає інформацію, і нічого не змінює. Крім того, поняття про те, що "розширення" файлу будь-яким чином вказує, які програми (програми) слід використовувати для його відкриття, дуже орієнтоване на Windows. Linux завжди дотримувався підходу "магічного числа", щоб в перші кілька байтів файлу ставити відмінний підпис, а потім дозволяти імені бути будь-чим. За аналогією, я був файлом у системі Windows, я мав би бути "Monty Harder.human", щоб щось могло знати, що я є, але Linux бачить це як частину мого вмісту, а ім'я - нестримний.
Monty Harder

1
Якщо ви можете знайти правильний вихідний код, ви також можете знайти виконавця.
Thorbjørn Ravn Andersen

2
@StephenKitt Ще до Linux, Unix була shebangs і fileз magicфайлом, так що я не знаю , як «ретро встановлені» це. Підхід MacOS вводить явний тип файлу у метадані файлу ("вилка ресурсу"), які зберігаються всередині файлу, але в окремому контейнері.
Monty Harder

2
@ l0b0 Я бачу вашу думку, але я думаю, що корисно сказати, що найкращий (не тільки ) спосіб запиту функції передбачає реалізацію її самостійно, якщо можете. Люди, які не мають необхідних навичок програмування, можуть спокійно проігнорувати це, але люди, які це роблять, вважатимуть це корисним.
David 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-сховища файлів CVS, оновлюване кожні півгодини. ПРИМІТКА: не надсилайте сюди запитів на тягнення і не коментуйте жодних зобов’язань, не надсилайте їм звичайний спосіб пошуку помилок або до списку розсилки. Це не відразу допомагає, але зауважую, що єбули зміни до цього репо за останній тиждень. Отже, один з можливих наступних кроків - побачити, хто зробив ці зобов’язання, і зв’язатися з ними.
  2. Ви можете попросити людину, відповідальну за пакунок, у дистрибутиві, який ви використовуєте. Про fileFedora див. На цій сторінці . Оскільки вони працюють із програмним забезпеченням регулярно, вони можуть мати інші способи зв’язатися з верхнім потоком. Залежно від дистрибутиву, це найкраще зробити, подавши помилку або за допомогою прямого контакту - вам начебто потрібно знати окрему культуру. (У Fedora я пропоную список розсилки розробок .)
  3. Якщо ви використовуєте комерційний дистрибутив, наприклад Red Hat Enterprise Linux *, ви можете подати квиток на підтримку. Як платний клієнт, ви, можливо, зможете вплинути на свого продавця, щоб знайти рішення.
  4. Якщо все інше не вдасться, проект, який вас зацікавив, може бути мертвим за течією . У такому випадку ви можете "розкрутити" проект - створити власну версію та створити навколо неї нову спільноту вище за течією. Якщо ваша версія зберігається, а інша померла, швидше за все, розповсюдження розпочнеться.

* Я працюю над Fedora. І я працевлаштована в Red Hat.


2
"Важливо знати, що немає такого єдиного поняття, як" GNU Linux "" - Зокрема, важливо усвідомити, що Linux не має нічого спільного з GNU, а GNU не має нічого спільного з Linux. Попросити функцію Linux від проекту GNU або попросити функцію утиліти GNU від розробника Linux, швидше за все, буде просто проігноровано.
Йорг W Міттаг

3
Або запитати функцію для утиліти, яка не є GNU, від будь-якого з них.
користувач253751

4

Це помилка у вашому розповсюдженні. Якщо дистрибутив доставляє застарілі сторінки, вам слід подати помилку щодо пакета, який його надав. Якщо ви використовуєте debian, ви можете скористатися інструментом, таким як помилка звітів, щоб зробити це простішим.


3
Ні, це не помилка в розповсюдженні: сторінка man man все ще надає ту саму інформацію.
Стівен Кітт

1
У будь-якому випадку, обслуговуючий пакет в дистрибутиві повинен знати, як подавати помилки з оригінальним обслуговуючим пакетом
Vincent Fourmond,

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

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

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

Це працює лише для зображень. Я не знаю, як це зробити для загальних файлів. ffmpeg повертає "avc1" для випадкового файлу mp4 (інші файли mp4 можуть повертати різні рядки, і вам все одно доведеться розбирати його), і я не бачу способу дістатися з цього пункту до "mp4". 'avc1' ніде в / usr / share / mime.

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

Вхід № 0, mov, mp4, m4a, 3gp, 3g2, mj2, від. . .
[. . .]
Відео: h264 (Основне) (avc1 / 0x31637661)

для png це говорить

Введення № 0, png_pipe, від. . .
[. . .]
Відео: png, rgb24 (ПК)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.