Jak poprawnie poprosić o funkcję w GNU Linux?


35

Próbuję wysłać raport o błędzie dla pliku aplikacji / usr / bin / file

Ale skonsultowanie się z mężczyzną i wysłanie e-maila

BŁĘDY Proszę zgłaszać błędy i wysyłać łaty do narzędzia do śledzenia błędów pod adresem http://bugs.gw.com/ lub na listę mailingową pod adresem ⟨file@mx.gw.com⟩ (odwiedź stronę http://mx.gw.com/mailman/ listinfo / plik, który najpierw zasubskrybuje).

Sprawiło, że dowiedziałem się, że adres e-mail nie istnieje.

Czy istnieje inny sposób komunikowania się ze społecznością? Mam nadzieję, że to pytanie jest już częścią tego :)

Oto mój e-mail:

możliwa awaria funkcji: --extensionopcja nie wydaje niczego

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

Przydałaby się możliwość łatwego wykorzystania danych wyjściowych do zmiany nazwy pliku na jego prawidłowe rozszerzenie.

coś takiego jak plik --likely_extensionwyświetliłoby prawdopodobne wykrycie rozszerzenia lub błąd, jeśli wykrycie było zbyt niskie

jak w ten sposób:

$ file --likely_extension "ab.gif"
gif

lepsza byłaby jednak --correct_extensionopcja:

$ file --correct_extension "ab.jpg"

$ ls
ab.gif

Tyvm dla tej aplikacji :)


8
Druga część opisu problemu jest czystym żądaniem funkcji, które może być sprzeczne z filozofią projektowania utrzymywaną przez niektórych autorów narzędzi uniksowych - zrób tylko jedną rzecz, zrób to dobrze. Ktoś może chcieć zachować funkcjonalność pliku (1), ale nie chce utrzymywać wbudowanej funkcjonalności basename (1) i mv (1) :)
rackandboneman 30.04.2018

3
Napisz to ........
JoelFan

Chcesz, aby funkcja zrobiła to, co już można osiągnąć za pomocą istniejących powszechnie obsługiwanych narzędzi (takich jak awk)? Autor oprogramowania może być skłonny poinformować Cię, a przynajmniej pomyśleć o filozofii Linux . Gdy masz działającą łatkę, będziesz traktowany poważniej.
TOOGAM

W v5.25, file --extension czyni pracę dla niektórych typów plików (jak .jpg). Może to nie „działa” na .gif, ponieważ nie ma innych prawidłowych rozszerzeń plików.
RonJohn

2
Na przykład w moim systemie: file --extension calf.jpg flower.gifoutput: calf.jpg: jpeg/jpg/jpe/jfifi flower.gif:pokazując możliwe inne rozszerzenia dla tych plików (brak w przypadku pliku GIF). Zauważ, że filezgaduje tylko typ pliku - używa do tego zestawu heurystyk. Nie wykrywa rozszerzenia z nazwy. Jeśli zmienić nazwę calf.jpg, aby calf.txtto jeszcze plików JPEG i filemówi mi, że gdy uruchamiam file calf.txtgo też mówi mi, że ewentualne rozszerzenia są jpeg/jpg/jpe/jfifpodczas uruchamiania file --extension calf.txt.
Wstrzymano do odwołania.

Odpowiedzi:


48

Postępujesz zgodnie z prawidłową procedurą, aby zgłosić problem lub prośbę o ulepszenie: jeśli w dokumentacji programu jest mowa o tym, jak to zrobić, postępuj zgodnie z tymi instrukcjami.

Niestety często zdarza się, że projekty giną lub instrukcje w wersji, którą posiadasz, nie są już dokładne. W takich przypadkach sprawy stają się trochę trudniejsze. Jednym z możliwych ogólnych podejść jest zgłoszenie błędu do twojej dystrybucji; sukces może być raczej trafiony lub nieudany ... (Powinienem wspomnieć, że zwykle lepiej jest zgłosić błąd do dystrybucji, z której otrzymałeś pakiet, jeśli używasz pakietu; jest to szczególnie prawdziwe, jeśli pakiet jest zapakowany wersja jest starsza niż bieżąca wersja „nadrzędna”, a jeśli nie sprawdziłeś, czy problem nadal tam występuje).

W fileszczególności oficjalna dokumentacja została zaktualizowana, aby wspomnieć, że moduł śledzenia błędów i lista mailingowa są wyłączone, a także zapewnia bezpośredni adres e-mail dla bieżącego opiekuna, za pomocą którego można się z nim skontaktować.


23

Oprócz odpowiedzi Stephena Kitta możesz rozważyć (zwłaszcza jeśli sam jesteś programistą i jeśli program - filew twoim przypadku - kod źródłowy nie jest zbyt trudny do zrozumienia) pobranie kodu źródłowego tego programu (być może z twojego dystrybucja) - ponieważ jest to wolne oprogramowanie - i łatanie go, a także wysyłanie łatki.

Jeśli poświęcisz trochę czasu na przestudiowanie kodu źródłowego , prawdopodobnie zrobisz lepszy raport o błędzie.

Jeśli poświęcisz więcej czasu na zaproponowanie poprawki , prawdopodobnie będziesz traktowany poważniej (i IMHO działasz bardziej w duchu wolnego oprogramowania).

Wykorzystaj więc swobodę zapewnianą przez wolne oprogramowanie : przestudiuj jego kod źródłowy (wolność nr 1) i popraw go (wolność nr 3).

Dzisiaj bardzo łatwo opublikować (np. Na github ) swoją ulepszoną wersję i udostępnić ją (wolność nr 2).

Pamiętaj, aby mieć najnowszą wersję fileprogramu. Wiele dystrybucji tego nie używa (i być może błąd w twojej dystrybucji został już naprawiony).

Nie jestem pewien, czy twoje --correct_extensionzachowanie należy do file(który jest programem do sprawdzania , a nie zmiany twoich danych). Ale jeśli tak, to prawdopodobnie powinien być napisany --correct-extensionlub --rename-extension... A kiedy spróbujesz to zaimplementować, możesz odkryć, że istnieją dziwne przypadki narożne (co z plikiem tar spakowanym gzipem lub skompresowanym plikiem źródłowym C lub czymś, co może potrzebujesz kilku rozszerzeń plików).

Zauważ, że (w przeciwieństwie do Windows) w systemach Linux i Unix plik jest w rzeczywistości i- węzłem (patrz i- węzeł (7) ) i może mieć kilka nazw (lub żadnych) i może być otwierany przez kilka procesów jednocześnie (czytaj o deskryptorach plików ) - lub żaden, nawet jeśli większość plików ma tylko jedną nazwę (ale patrz link (2) i stat (2) ). Ponieważ ten sam plik można nazwać foo.txti bar.gzprzywiązywanie wagi do rozszerzeń plików nie ma większego sensu. Zobacz także path_resolution (7) .

Tak więc, jeśli spróbujesz wdrożyć swój correct-extensionpomysł, przekonasz się, że nie jest to takie proste do wdrożenia (a nawet do określenia) i że nie ma w tym oczywistego prostego zachowania.

Prawdopodobnie twój pomysł nie jest zbyt dobry i nie można go łatwo wdrożyć w systemach Linux i POSIX (przynajmniej nie we wszystkich przypadkach).

Dlatego zalecam unikanie przesyłania prośby o funkcję (w jej początkowej formie jest to strata czasu dla ciebie i dla programistów file). Albo dużo, popracuj nad tym, popraw jego specyfikacje i prześlij łatkę ... Oczywiście poświęcisz na to dużo pracy (i naprawdę nie sądzę, żeby było warto).

Być może przeczytaj także książkę o programowaniu w Uniksie (jak stary ALP lub coś nowszego; a także intro (2) i syscalls (2) ) oraz Systemy operacyjne: trzy łatwe kawałki .


10
Jak mogłem zapomnieć o tym - rzeczywiście najlepszym sposobem na „poproszenie” o funkcję jest jej wdrożenie!
Stephen Kitt

2
+1 za wskazanie, które filedostarcza informacji i niczego nie zmienia. Ponadto pojęcie, że „rozszerzenie” pliku w jakikolwiek sposób wskazuje, które aplikacje należy otworzyć, jest bardzo zorientowane na system Windows. Linux zawsze stosował podejście „magicznej liczby”, polegające na umieszczeniu wyróżniającej sygnatury w pierwszych kilku bajtach pliku, a następnie dopuszczeniu, by nazwa była dowolna. Przez analogię byłem plikiem w systemie Windows, musiałbym być „Monty Harder.human”, aby cokolwiek wiedzieć, kim jestem, ale Linux postrzega to jako część mojej zawartości, a nazwa to niewymuszony.
Monty Harder

1
Jeśli możesz zlokalizować poprawny kod źródłowy, możesz także zlokalizować komisarz.
Thorbjørn Ravn Andersen

2
@StephenKitt Jeszcze przed Linux, Unix i miał shebangs filez magicpliku, więc nie wiem jak „retro-wyposażone” jest. Podejście MacOS umieściło jawny typ pliku w metadanych pliku („rozwidleniu zasobów”), które są przechowywane w pliku, ale w osobnym pojemniku.
Monty Harder

2
@ l0b0 Rozumiem, o co ci chodzi, ale uważam, że warto powiedzieć, że najlepszym (nie tylko ) sposobem żądania funkcji jest jej samodzielne wdrożenie, jeśli możesz. Ludzie, którzy nie mają niezbędnej umiejętności programowania, mogą bezpiecznie to zignorować, ale ludzie, którzy ją posiadają, uznają ją za przydatną.
David Z

11

Ty pytasz:

Jak poprawnie poprosić o funkcję w GNU Linux?

i aby na nie odpowiedzieć, ważne jest, aby wiedzieć, że nie ma czegoś takiego jak „GNU Linux” jako taki. Projekt GNU to wspólny wysiłek na rzecz rozwoju wolnego oprogramowania. Część tego wolnego oprogramowania - wraz z dużą ilością innego wolnego i otwartego oprogramowania - jest gromadzona przez inne projekty: albo wspólne, otwarte projekty, takie jak Fedora * lub Debian, lub wysiłki korporacyjne o różnym stopniu otwartości, a nawet osoby. Te kolekcje nazywane są „Dystrybucjami Linuksa” lub „Dystrybucjami GNU / Linux” (jest tam debata polityczna, do której nie wejdę).

Ogólnie rzecz biorąc, jeśli jesteś zainteresowany ulepszeniem funkcji , najlepszą rzeczą do zrobienia jest współpraca z programistą, który napisał oprogramowanie - dystrybucje mają dużo pracy, aby po prostu zebrać różne programy i sprawić, by działały razem, i zwykle wolałby, żeby te zmiany miały miejsce „w górę”.

Więc zrobiłeś tutaj właściwą rzecz - znalazłeś udokumentowane źródło źródłowe i próbowałeś tam zgłosić.

Wydaje się jednak, że udokumentowane metody komunikacji dla interesującego Cię oprogramowania nie działają. W takim przypadku masz kilka opcji:

  1. Spróbuj znaleźć inne sposoby skontaktowania się z twórcami oprogramowania. W tym przypadku większość dystrybucji zawiera filepolecenie napisane pierwotnie przez Iana Darwina i nominalnie umieszczone na stronie http://www.darwinsys.com/file/ , z podanymi przez ciebie listami adresowymi. Ale podobnie jak te listy mailingowe, główna strona wydaje się nie działać. W dzisiejszych czasach sprawdzanie GitHub jest dobrym drugim krokiem i znalazłem https://github.com/file/file - który mówi, że lustro tylko do odczytu repozytorium CVS pliku, aktualizowane co pół godziny. UWAGA: nie wysyłaj tutaj żądań ściągania, nie komentuj żadnych zatwierdzeń, przesyłaj je w zwykły sposób do trackera błędów lub na listę mailingową. Nie jest to natychmiast pomocne, ale zauważam, że takzmiany w tym repozytorium w ostatnim tygodniu. Tak więc jednym możliwym ruchem jest sprawdzenie, kto popełnił te zmiany i skontaktowanie się z nimi.
  2. Możesz zapytać osobę odpowiedzialną za paczkę w używanej dystrybucji. W fileFedorze zobacz tę stronę . Ponieważ regularnie pracują z oprogramowaniem, mogą mieć inne sposoby skontaktowania się z poprzednią wersją oprogramowania. W zależności od dystrybucji najlepiej jest to zrobić, zgłaszając błąd lub kontaktując się bezpośrednio - potrzebujesz znajomości kultury. (W Fedorze sugerowałbym listę mailingową devel .)
  3. Jeśli korzystasz z dystrybucji komercyjnej, takiej jak Red Hat Enterprise Linux *, możesz złożyć zgłoszenie do pomocy technicznej. Jako klient płacący możesz mieć wpływ na dostawcę, aby znaleźć rozwiązanie.
  4. Jeśli wszystko inne zawiedzie, projekt, który Cię interesuje, może być martwy . W takim przypadku możesz „rozwidlić” projekt - stworzyć własną wersję i zbudować wokół niego nową społeczność upstream. Jeśli twoja wersja zostanie utrzymana, a druga nie działa, prawdopodobnie nastąpi dystrybucja.

* Pracuję na Fedorze. Jestem zatrudniony przez Red Hat.


2
„ważne jest, aby wiedzieć, że nie ma czegoś takiego jak„ GNU Linux ””. W szczególności ważne jest, aby zdawać sobie sprawę, że Linux nie ma nic wspólnego z GNU, a GNU nie ma nic wspólnego z Linuksem. Pytanie o funkcję Linuksa z projektu GNU lub prośba o funkcję narzędzia GNU od dewelopera Linuksa najprawdopodobniej zostanie po prostu zignorowane.
Jörg W Mittag

3
Lub poprosić o funkcję dla narzędzia innego niż GNU w którymkolwiek z nich.
user253751

4

To jest błąd w twojej dystrybucji. Jeśli dystrybucja wysyła nieaktualne strony podręcznika, powinieneś zgłosić błąd dotyczący dostarczonego pakietu. Jeśli używasz Debiana, możesz użyć narzędzia takiego jak reportbug, aby uprościć to.


3
Nie, to nie jest błąd w dystrybucji: strona podręcznika użytkownika nadal zawiera te same informacje.
Stephen Kitt

1
W każdym razie opiekun pakietu w dystrybucji powinien wiedzieć, jak zgłaszać błędy do oryginalnego opiekuna pakietu
Vincenta Fourmonda

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

Format pliku obrazu% m (magia pliku)

[0] oznacza pierwszą klatkę, co może pomóc, jeśli przypadkowo użyjesz jej na filmie, ponieważ w przeciwnym razie korzysta z bibliotek ffmpeg, aby utworzyć tymczasową kopię każdej klatki.

Działa to tylko w przypadku obrazów. Nie wiem jak to zrobić dla plików ogólnych. ffmpeg zwraca „avc1” dla losowego pliku mp4 (inne pliki mp4 mogą zwracać różne ciągi, a ty nadal musisz je parsować), i nie widzę sposobu, aby przejść z tego do „mp4”. „avc1” nie ma nigdzie w / usr / share / mime.

ffmpeg, lub równoważnie ffprobe, wymienia niektóre formaty plików, których demuxer używa na początku danych wyjściowych. W przypadku pliku MP4 jest to napisane

Wprowadź nr 0, mov, mp4, m4a, 3gp, 3g2, mj2, z. . .
[. . .]
Wideo: h264 (główny) (avc1 / 0x31637661)

za png mówi

Wpisz nr 0, png_pipe, z. . .
[. . .]
Wideo: png, rgb24 (pc)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.