Cách chính xác để yêu cầu một tính năng trong GNU Linux là gì?


35

Tôi đang cố gắng gửi báo cáo lỗi cho tệp ứng dụng, / usr / bin / tệp

Nhưng hỏi ý kiến ​​người đàn ông và gửi email

LGSI Vui lòng báo cáo lỗi và gửi các bản vá cho trình theo dõi lỗi tại http://bugs.gw.com/ hoặc danh sách gửi thư tại file@mx.gw.com⟩ (truy cập http://mx.gw.com/mailman/ listinfo / tập tin đầu tiên để đăng ký).

Làm cho tôi tìm ra địa chỉ thư không tồn tại.

Có cách nào khác để giao tiếp với cộng đồng không? Hy vọng rằng câu hỏi ở đây đã là một phần của nó :)

Vì vậy, đây là email của tôi:

lỗi tính năng có thể xảy ra: --extensiontùy chọn dường như không xuất ra bất cứ thứ gì

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

Sẽ rất hữu ích khi có thể dễ dàng sử dụng đầu ra của cái này để đổi tên một tệp thành phần mở rộng chính xác của nó.

một cái gì đó như tập tin --likely_extensionsẽ chỉ xuất ra phần mở rộng có khả năng được phát hiện hoặc lỗi nếu phát hiện quá thấp

như vậy:

$ file --likely_extension "ab.gif"
gif

tốt hơn mặc dù sẽ là một --correct_extensionlựa chọn:

$ file --correct_extension "ab.jpg"

$ ls
ab.gif

Tyvm cho ứng dụng này :)


8
Phần thứ hai của mô tả vấn đề của bạn là một yêu cầu tính năng thuần túy có thể chạy ngược lại triết lý thiết kế được tổ chức bởi một số tác giả công cụ unix - chỉ làm một việc, làm tốt. Ai đó có thể muốn duy trì chức năng của tệp (1) nhưng bực bội phải duy trì chức năng tên cơ sở dựng sẵn (1) và mv (1) :)
rackandboneman

3
Viết nó ........
JoelFan

Bạn muốn một tính năng để thực hiện những gì đã có thể được thực hiện bằng các công cụ thường được hỗ trợ (như awk)? Tác giả phần mềm có thể có xu hướng cho bạn biết về, hoặc ít nhất là suy nghĩ về Triết lý Linux . Một khi bạn có một bản vá làm việc, bạn sẽ được thực hiện nghiêm túc hơn.
TUYỆT ĐỐI

Trong v5.25, file --extension không hoạt động đối với một số loại tệp (như .jpg). Có thể nó không "hoạt động" linh hoạt .gif vì không có phần mở rộng tệp hợp lệ nào khác.
RonJohn

2
Ví dụ, trên hệ thống của tôi: file --extension calf.jpg flower.gifđầu ra: calf.jpg: jpeg/jpg/jpe/jfifflower.gif:hiển thị các tiện ích mở rộng khác có thể có cho các tệp đó (không có trong trường hợp tệp GIF). Lưu ý rằng filechỉ mất một phỏng đoán có giáo dục về loại tệp - nó sử dụng một tập hợp các phương pháp phỏng đoán để làm điều đó. Nó không phát hiện phần mở rộng từ tên. Nếu tôi đổi tên calf.jpgthành calf.txttệp JPEG và filecho tôi biết rằng khi tôi chạy, file calf.txtnó cũng cho tôi biết các tiện ích mở rộng có thể có jpeg/jpg/jpe/jfifkhi tôi chạy file --extension calf.txt.
Tạm dừng cho đến khi có thông báo mới.

Câu trả lời:


48

Bạn đang làm theo đúng quy trình để gửi một vấn đề hoặc yêu cầu nâng cao: nếu tài liệu của chương trình đề cập đến cách thực hiện, hãy làm theo các hướng dẫn đó.

Thật không may, các dự án thường chết hoặc các hướng dẫn trong phiên bản bạn có không còn chính xác nữa. Trong những trường hợp này, mọi thứ trở nên khó khăn hơn một chút. Một cách tiếp cận chung có thể là gửi một lỗi với phân phối của bạn; thành công có thể được thay hit-or-miss dù ... (Tôi nên đề cập đến rằng nó thường là tốt hơn để báo cáo lỗi với sự phân bố bạn đã gói từ, nếu bạn đang sử dụng một gói phần mềm, điều này đặc biệt đúng nếu đóng gói phiên bản cũ hơn phiên bản hiện tại của dòng ngược dòng hiện tại và nếu bạn chưa kiểm tra xem sự cố có còn tồn tại ở đó không.)

Đối với fileđặc biệt, các tài liệu chính thức đã được cập nhật kể rằng kiểm tra lỗi và mailing list là xuống, và nó cũng cung cấp một địa chỉ email trực tiếp cho nhà duy trì hiện tại, mà bạn có thể sử dụng để liên lạc với anh.


23

Ngoài câu trả lời của Stephen Kitt , bạn có thể xem xét (đặc biệt nếu bạn là nhà phát triển và nếu chương trình - filetrong trường hợp của bạn - có mã nguồn không quá khó hiểu) lấy mã nguồn của chương trình đó (có lẽ từ của bạn phân phối) - vì đây là phần mềm miễn phí - và vá nó, đồng thời gửi một bản vá.

Nếu bạn dành thời gian để nghiên cứu mã nguồn , có thể bạn sẽ tạo một báo cáo lỗi tốt hơn.

Nếu bạn mất nhiều thời gian hơn để đề xuất một bản vá sửa lỗi , bạn có thể sẽ được xem xét nghiêm túc hơn (và IMHO bạn đang hành động nhiều hơn theo tinh thần của phần mềm miễn phí).

Vì vậy, sử dụng quyền tự do được cung cấp bởi phần mềm miễn phí : nghiên cứu mã nguồn của nó (tự do số 1) và cải thiện nó (tự do số 3).

Ngày nay, rất dễ dàng để xuất bản (ví dụ trên github ) phiên bản cải tiến của bạn và chia sẻ nó (tự do số 2).

Hãy chắc chắn để có bản phát hành mới nhất của filechương trình. Nhiều bản phân phối không sử dụng điều đó (và có lẽ lỗi trong bản phân phối của bạn đã được sửa lỗi ngược dòng).

Tôi không chắc chắn rằng --correct_extensionhành vi của bạn thuộc về file(đó là một chương trình để truy vấn , không thay đổi, dữ liệu của bạn). Nhưng nếu có, có lẽ nó nên được đánh vần --correct-extensionhoặc --rename-extension... Và một khi bạn cố gắng thực hiện điều đó, bạn có thể phát hiện ra rằng có những trường hợp góc kỳ lạ (về tệp tar được nén, hoặc tệp nguồn C bị nén hoặc thứ gì đó có thể cần một số phần mở rộng tập tin).

Lưu ý rằng (trái với Windows) trên Linux & Unix, một tệp thực sự là một nút (xem inode (7) ) và có thể có một số tên (hoặc không có) và có thể được mở bằng nhiều quy trình cùng một lúc (đọc về mô tả tệp ) - hoặc không có, ngay cả khi hầu hết các tệp chỉ có một tên (nhưng xem liên kết (2) & stat (2) ). Vì cùng một tệp có thể được đặt tên foo.txtbar.gznó không có ý nghĩa nhiều để coi trọng các phần mở rộng tệp. Xem thêm path_resolution (7) .

Vì vậy, nếu bạn thử thực hiện correct-extensioný tưởng của mình , bạn sẽ thấy rằng việc thực hiện (và thậm chí để chỉ định) không đơn giản và không có hành vi đơn giản rõ ràng nào cho việc đó.

Có thể, ý tưởng của bạn không tốt lắm và không thể thực hiện dễ dàng trên các hệ thống Linux và POSIX (ít nhất, không phải cho tất cả các trường hợp).

Vì vậy, tôi khuyên bạn nên tránh thậm chí gửi yêu cầu tính năng (ở dạng ban đầu, nó làm mất thời gian cho bạn và cho các nhà phát triển file). Hoặc nếu không, hãy làm việc với nó thật nhiều, cải thiện thông số kỹ thuật của nó và gửi một bản vá .... Tất nhiên bạn sẽ dành rất nhiều công sức cho việc đó (và tôi thực sự không nghĩ rằng nó đáng để chịu đựng nỗi đau).

Có lẽ cũng nên đọc một số cuốn sách lập trình Unix (như ALP cũ , hoặc một cái gì đó mới hơn, và cả phần giới thiệu (2) & tòa nhà (2) ) và Hệ điều hành: Three Easy Pieces .


10
Làm sao tôi có thể quên điều đó - thực sự, cách tốt nhất để Yêu cầu một tính năng là thực hiện nó!
Stephen Kitt

2
+1 để chỉ ra filecung cấp thông tin và không thay đổi bất cứ điều gì. Ngoài ra, khái niệm rằng "phần mở rộng" của một tệp theo bất kỳ cách nào chỉ ra (các) ứng dụng nào sẽ được sử dụng để mở nó theo định hướng rất Windows. Linux luôn tuân theo cách tiếp cận "số ma thuật" là đặt một chữ ký đặc biệt trong vài byte đầu tiên của tệp và sau đó cho phép tên đó trở thành bất cứ thứ gì. Theo cách tương tự, tôi là một tệp trong hệ thống Windows, tôi phải là "Monty Harder.human" để mọi thứ biết tôi là gì, nhưng Linux coi đó là một phần nội dung của tôi và tên là không ràng buộc.
Monty Harder

1
Nếu bạn có thể xác định mã nguồn chính xác, bạn cũng có thể xác định vị trí committer.
Thorbjørn Ravn Andersen

2
@StephenKitt Ngay cả trước Linux, Unix đã có shebang và filevới magictệp, vì vậy tôi không biết nó "được trang bị theo kiểu retro" như thế nào. Cách tiếp cận của MacOS đặt một loại tệp rõ ràng trong siêu dữ liệu tệp ("fork tài nguyên"), được lưu trữ bên trong tệp nhưng trong một thùng chứa riêng biệt.
Monty Harder

2
@ l0b0 Tôi thấy quan điểm của bạn nhưng tôi nghĩ thật hữu ích khi nói rằng cách tốt nhất (không chỉ ) để yêu cầu một tính năng liên quan đến việc tự thực hiện nó, nếu bạn có thể. Những người không có kỹ năng lập trình cần thiết có thể bỏ qua điều này một cách an toàn, nhưng những người làm sẽ thấy nó hữu ích.
David Z

11

Bạn hỏi:

Cách chính xác để yêu cầu một tính năng trong GNU Linux là gì?

và để trả lời điều đó, điều quan trọng cần biết là không có thứ duy nhất nào như "GNU Linux", mỗi giây. Dự án GNU là một nỗ lực hợp tác để phát triển phần mềm miễn phí. Một số phần mềm miễn phí đó - cùng với một lượng lớn phần mềm nguồn mở và miễn phí khác - được thu thập bởi các dự án khác : hoặc các dự án hợp tác, mở như Fedora * hoặc Debian, hoặc các nỗ lực của công ty với mức độ mở khác nhau hoặc thậm chí là các cá nhân. Các bộ sưu tập này được gọi là "Phân phối Linux" hoặc "Phân phối GNU / Linux" (có một cuộc tranh luận chính trị mà tôi sẽ không tham gia).

Nói chung, nếu bạn quan tâm đến việc tăng cường tính năng , điều tốt nhất nên làm là làm việc với nhà phát triển đã viết phần mềm - các bản phân phối có rất nhiều việc phải làm để chỉ thu thập các phần mềm khác nhau và làm cho nó hoạt động cùng nhau, và thông thường sẽ thích những thay đổi đó xảy ra "thượng nguồn".

Vì vậy, bạn đã làm đúng ở đây - bạn đã tìm thấy nguồn tài liệu ngược dòng và cố gắng báo cáo ở đó.

Tuy nhiên, có vẻ như các phương thức giao tiếp được ghi lại cho phần mềm mà bạn quan tâm không hoạt động. Trong trường hợp đó, bạn có một số tùy chọn:

  1. Cố gắng tìm những cách khác để liên hệ với các nhà phát triển phần mềm. Trong trường hợp này, hầu hết các bản phân phối bao gồm filelệnh ban đầu được viết bởi Ian Darwin và trên danh nghĩa được đặt tại http://www.darwinsys.com/file/ , với các danh sách gửi thư bạn đã đề cập. Nhưng giống như những danh sách gửi thư, trang web chính dường như bị sập. Trong thời đại ngày nay, kiểm tra GitHub là một bước thứ hai tốt và tôi đã tìm thấy https://github.com/file/file - trong đó nói rằng bản sao chỉ đọc của kho lưu trữ CVS, được cập nhật mỗi nửa giờ. LƯU Ý: không thực hiện các yêu cầu kéo ở đây, cũng như nhận xét bất kỳ cam kết nào, gửi chúng theo cách thông thường để theo dõi lỗi hoặc vào danh sách gửi thư. Đó không phải là ngay lập tức hữu ích, nhưng tôi nhận thấy rằng có đã thay đổi repo đó trong tuần qua. Vì vậy, một động thái tiếp theo có thể là xem ai đã thực hiện những cam kết đó và liên hệ với họ.
  2. Bạn có thể yêu cầu người chịu trách nhiệm cho gói trong bản phân phối bạn sử dụng. Đối với fileFedora, xem trang này . Vì họ làm việc với phần mềm thường xuyên, họ có thể có các phương tiện khác để liên lạc ngược dòng. Tùy thuộc vào bản phân phối, điều này được thực hiện tốt nhất bằng cách gửi lỗi hoặc bằng cách liên hệ trực tiếp - bạn cần phải biết văn hóa cá nhân. (Ở Fedora, tôi muốn đề xuất danh sách gửi thư .)
  3. Nếu bạn đang sử dụng phân phối thương mại, như Red Hat Enterprise Linux *, bạn có thể gửi một vé hỗ trợ. Là một khách hàng trả tiền, bạn có thể ảnh hưởng đến nhà cung cấp của bạn để tìm giải pháp.
  4. Nếu vẫn thất bại, dự án bạn quan tâm có thể bị ngược dòng . Trong trường hợp đó, bạn có thể "rẽ nhánh" dự án - tạo phiên bản của riêng bạn và xây dựng một cộng đồng ngược dòng mới xung quanh nó. Nếu phiên bản của bạn được duy trì và phiên bản kia đã chết, có khả năng các bản phân phối sẽ tuân theo.

* Tôi làm việc trên Fedora. Và tôi được Red Hat tuyển dụng.


2
"Điều quan trọng cần biết là không có thứ duy nhất như" GNU Linux "" - Đặc biệt, điều quan trọng là phải nhận ra rằng Linux không liên quan gì đến GNU và GNU không liên quan gì đến Linux. Yêu cầu một tính năng Linux từ dự án GNU hoặc yêu cầu một tính năng cho tiện ích GNU từ nhà phát triển Linux rất có thể sẽ bị bỏ qua.
Jörg W Mittag

3
Hoặc yêu cầu một tính năng cho một tiện ích không phải GNU từ một trong hai tiện ích đó.
user253751

4

Đây là một lỗi trong phân phối của bạn. Nếu bản phân phối đang vận chuyển các trang man đã hết hạn, bạn nên gửi một lỗi đối với gói đã cung cấp. Nếu bạn đang sử dụng debian, bạn có thể sử dụng một công cụ như báo cáo để làm cho việc này đơn giản hơn.


3
Không, đây không phải là một lỗi trong phân phối: trang man ngược dòng vẫn cung cấp thông tin tương tự.
Stephen Kitt

1
Trong mọi trường hợp, người duy trì gói trong bản phân phối nên biết cách báo lỗi với người bảo trì ban đầu của gói
Vincent Fourmond

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

Định dạng tệp hình ảnh% m (tệp ma thuật)

[0] có nghĩa là khung đầu tiên, có thể hữu ích nếu bạn vô tình sử dụng nó trên video vì nếu không, nó sử dụng các thư viện ffmpeg để tạo một bản sao tạm thời của mỗi khung.

Điều này chỉ hoạt động cho hình ảnh. Tôi không biết làm thế nào để làm điều đó cho các tập tin chung. ffmpeg trả về 'avc1' cho một tệp mp4 ngẫu nhiên (các tệp mp4 khác có thể trả về các chuỗi khác nhau và bạn vẫn phải phân tích cú pháp), và tôi không thấy cách nào để chuyển từ đó sang 'mp4'. 'avc1' không ở bất cứ đâu trong / usr / share / mime.

ffmpeg, hoặc tương đương ffprobe, liệt kê một số định dạng tệp mà trình giải thích sử dụng khi bắt đầu xuất. Đối với một tập tin mp4, nó nói

Đầu vào # 0, Mov, mp4, m4a, 3gp, 3g2, mj2, từ. . .
[. . .]
Video: h264 (Chính) (avc1 / 0x31637661)

cho một png nó nói

Đầu vào # 0, png_pipe, từ. . .
[. . .]
Video: png, rgb24 (pc)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.