Linux chọn ứng dụng nào để mở tệp?


38

Nếu một tệp cho HĐH định dạng tệp của nó, thì HĐH chọn ứng dụng nào để mở ứng dụng theo mặc định?

Trong Windows, hiệp hội được lưu trữ trong bảng đăng ký?

Linux chọn ứng dụng nào để mở tệp?

Tôi đã từng sử dụng Nautilus rất nhiều, nhưng bây giờ tôi đổi sang thiết bị đầu cuối. Có đúng là trong thiết bị đầu cuối, chúng ta luôn phải chỉ định rõ ràng ứng dụng nào để mở tệp? Các cài đặt của ứng dụng nào để mở tệp có định dạng nhất định theo mặc định có thuộc về trình quản lý tệp (ví dụ: Nautilus) không và đó không phải là vấn đề khi chúng ta đang sống trong các thiết bị đầu cuối?


24
Linux chỉ là nhân hệ điều hành. Tôi cho rằng bạn có nghĩa là môi trường máy tính để bàn hoặc trình quản lý tệp của bạn ở đây. Điều đó có thể sẽ khác trên các hệ điều hành Android, ChromeOS, Linux (hoặc không phải Linux) chạy KDE, Gnome, XFCE ... hoặc khác)
Stéphane Chazelas

có lẽ. Tôi không biết công việc nào. Tôi đang sử dụng gnome, nhưng cũng muốn biết về chung.
Tim

Sau đó, làm rõ môi trường và ứng dụng HĐH và máy tính để bàn. Giống như nautilus trong Ubuntu 12.04 với máy tính để bàn "thống nhất".
Stéphane Chazelas

(1) Tôi thuộc Ubuntu 12.04. Là máy tính để bàn của tôi Gnome hay "Unity"? (2) Tôi đã từng sử dụng Nautilus rất nhiều, nhưng bây giờ tôi đổi sang thiết bị đầu cuối. Có đúng là trong thiết bị đầu cuối, chúng ta luôn phải chỉ định rõ ràng ứng dụng nào để mở tệp? Các cài đặt của ứng dụng nào để mở tệp có định dạng nhất định theo mặc định có thuộc về trình quản lý tệp (ví dụ: Nautilus) không và đó không phải là vấn đề khi chúng ta đang sống trong các thiết bị đầu cuối?
Tim

Câu trả lời:


35

Có thể có các cơ chế khác nhau để xử lý các cài đặt mặc định này. Tuy nhiên, các câu trả lời khác có xu hướng tập trung vào các môi trường máy tính để bàn hoàn chỉnh, mỗi môi trường có cơ chế riêng. Tuy nhiên, những thứ này không phải lúc nào cũng được cài đặt trên một hệ thống (tôi sử dụng OpenBox rất nhiều) và trong trường hợp này, các công cụ như xdg-opencó thể được sử dụng.

Trích dẫn Arch Wiki :

xdg-open là một công cụ độc lập với máy tính để bàn để định cấu hình các ứng dụng mặc định của người dùng. Nhiều ứng dụng gọi lệnh xdg-open bên trong.

Tại thời điểm này, tôi đang sử dụng Ubuntu (12.04) và xdg-opencó sẵn. Tuy nhiên, khi bạn sử dụng một môi trường máy tính để bàn hoàn chỉnh như Gnome, xdg-openhoạt động như một công cụ chuyển tiếp đơn giản và chuyển tiếp các yêu cầu tệp đến DE của bạn, sau đó có thể xử lý miễn phí theo ý muốn (ví dụ: xem các câu trả lời khác cho Gnome và Nautilus) .

Bên trong môi trường máy tính để bàn (ví dụ: Gnome, KDE hoặc Xfce), xdg-open chỉ đơn giản chuyển các đối số cho ứng dụng mở tệp của môi trường máy tính đó (gvfs-open, kde-open hoặc exo-open), có nghĩa là các hiệp hội được để lại cho môi trường máy tính để bàn.

... Điều đó đưa bạn trở lại với các câu trả lời khác trong trường hợp đó. Tuy nhiên, vì đây là Unix & Linux và không hỏi Ubuntu:

Khi không phát hiện thấy môi trường máy tính để bàn (ví dụ: khi một người chạy trình quản lý cửa sổ độc lập, ví dụ Openbox), xdg-open sẽ sử dụng các tệp cấu hình của riêng nó.

Tất cả trong tất cả:

                            |-- no desktop env. > handle directly.
User Request > xdg-open > --|
                            |-- desktop env.    > pass information to the DE.

Nếu là trường hợp đầu tiên, bạn sẽ cần phải định cấu hình xdg-opentrực tiếp , sử dụng xdg-mimelệnh (cũng sẽ cho phép bạn xem ứng dụng nào được cho là xử lý tệp nào). Trong trường hợp thứ hai ...

                        |-- GNOME? > gvfs-open handles the request.
                        |
Info. from xdg-open > --|-- KDE?   > kde-open handles the request.
                        |
                        |-- XFCE?  > exo-open handles the request.

... Bạn sẽ cần định cấu hình trình mở tệp được liên kết với môi trường máy tính để bàn của bạn. Trong một số trường hợp, cấu hình được thực hiện thông qua xdg-mimecó thể được chuyển hướng đến công cụ cấu hình phù hợp trong môi trường của bạn.


11
Trong một thế giới lý tưởng, Gnome và KDE sẽ sử dụng cài đặt xdg để chọn ứng dụng nào để mở tệp và sẽ cung cấp UI để thay đổi tùy chọn xdg. Sau đó, chúng ta có thể chỉ có một cơ sở dữ liệu cài đặt, thay vì một cơ sở dữ liệu cho mỗi DE. Than ôi xdg xuất hiện quá muộn.
joeytwiddle

2
Trong một thế giới lý tưởng, bạn sẽ không có ba DE.
Russell Borogove

1
@RussellBorogove - sau đó tất cả chúng ta nên chuyển sang Windows. Đó là một thế giới lý tưởng.
don_crissti

@don_crissti Tôi nghĩ điều này có nghĩa là "lý tưởng cho nhà phát triển hoặc quản trị viên". Mặc dù đó là một điều tuyệt vời để cung cấp sự đa dạng cho người dùng cuối, nhưng nó thực sự sẽ dễ dàng hơn nhiều (nhưng không nhất thiết là "tốt hơn") cho các nhà thiết kế tập trung vào một hệ thống duy nhất. xdg-openchỉ là một trong những thành phần này cố gắng mang cả hai đầu lại với nhau.
John WH Smith

1
@ John - về quản trị viên và các nhà phát triển / nhà thiết kế ứng dụng khác nhau: đã đồng ý ... nhưng sau đó, các nhà phát triển thượng nguồn chỉ có thể làm được rất nhiều. Trong một thế giới lý tưởng, thay vì phàn nàn về điều này hay điều đó, tất cả chúng ta sẽ đóng góp cho các dự án thượng nguồn như KDE, Gnome, v.v để cải thiện khả năng sử dụng và khả năng lặp lại giữa các DE. Nếu tất cả chúng ta (hàng triệu người) chỉ cần một nỗ lực nhỏ, tất cả những vấn đề này sẽ được giải quyết trong vài ngày.
don_crissti

11

Từ mục wiki ,

GUI dựa trên Linux, như KDE và Gnome, hỗ trợ các hiệp hội dựa trên loại MIME. Ví dụ: văn bản / đơn giản loại MIME sẽ được liên kết với trình soạn thảo văn bản.

Ngoài ra, này câu trả lời có biết thêm chi tiết.

Trình quản lý tệp thường sử dụng một số kết hợp của tùy chọn a và b (ví dụ: nhìn vào phần mở rộng tệp trước, nếu không biết (hoặc tệp không có phần mở rộng), hãy xem nội dung).

Loại tệp không được lưu trữ dưới dạng siêu dữ liệu trên các hệ thống tệp linux phổ biến.

Từ câu trả lời này , tôi thấy thông tin dưới đây.

Trình quản lý tệp (Nautilus, theo mặc định) sử dụng loại MIME của tệp để xác định chương trình nào sẽ mở. Khi một ứng dụng được cài đặt, nó có thể chỉ định loại MIME nào nó có thể mở và lệnh sử dụng để mở các tệp trong tệp .desktop được đặt trong / usr / share / application. Đây là tập tin được sử dụng cho menu, phím tắt trên màn hình, v.v.


1
Câu hỏi của tôi là "đưa ra loại định dạng của một tệp", xác định ứng dụng nào để mở tệp.
Tim

11

Một tệp không cho hệ điều hành định dạng tệp của nó, với một ngoại lệ:

Nếu một tệp thực thi bắt đầu bằng một dòng shebang, như

#! /usr/bin/perl

sau đó dòng này nói với kernel Linux rằng nó nên được bắt đầu bằng /usr/bin/perl(nghĩa là, thay vì thực thi tệp này, nó sẽ thực thi usr/bin/perlvà đưa tệp này làm đối số). Điều này tất nhiên chỉ hoạt động với các định dạng tệp mà bỏ qua (hoặc hiểu) một dòng shebang như vậy.

Ngoài ra, hệ điều hành như vậy không biết gì về các loại tệp. Tuy nhiên, nhiều chương trình cho phép mở các tệp khác có cơ chế riêng để quyết định sử dụng chương trình nào để mở tệp nào. Đó có thể là một danh sách bên trong chính chương trình (ví dụ Firefox duy trì một danh sách như vậy) hoặc chương trình có thể ủy thác nó cho môi trường máy tính để bàn (trong đó có một số cho Linux).

Thông thường, các cơ chế đó chỉ xem xét tên tệp để quyết định loại tệp là gì; một ngoại lệ là các ứng dụng email và trình duyệt web, trong đó thông thường loại tệp được cung cấp rõ ràng bởi máy chủ / được nêu trong thư.

Cơ chế thường là hai bước:

  • Đầu tiên, từ tên tệp hoặc thông tin được cung cấp, hãy xác định loại MIME của tệp (loại MIME là danh sách tiêu chuẩn, nhưng có thể mở rộng các loại tệp).
  • Thứ hai, từ loại MIME, xác định chương trình nào sẽ thực thi, thường thông qua một loại sổ đăng ký được duy trì bởi chính chương trình hoặc bởi môi trường máy tính để bàn mà chương trình được viết cho.

cảm ơn. Có đúng là trong thiết bị đầu cuối, chúng ta luôn phải chỉ định rõ ràng ứng dụng nào để mở tệp (ngoại trừ tập lệnh với shebang) không? Có phải các cài đặt của ứng dụng mở tệp có định dạng nhất định theo mặc định thuộc về trình quản lý tệp (ví dụ: Nautilus), trong khi đó không phải là vấn đề khi chúng ta đang sống trong các thiết bị đầu cuối?
Tim

Nếu bạn muốn sử dụng các liên kết Gnome từ dòng lệnh, bạn có thể sử dụng lệnh gnome-open. Tôi chắc chắn có các công cụ dòng lệnh tương tự cho các môi trường máy tính để bàn khác. Chỉnh sửa: Tôi chỉ lưu ý rằng John WH Smith đưa ra một lệnh độc lập với môi trường máy tính để bàn của bạn.
celtschk

6
Sửa chữa : dòng shebang không phải là một thông báo cho kernel; đó là một thông điệp cho vỏ .
Kazark


2
Vì liên kết đến mã thực tế trong trang được liên kết đó dường như không hoạt động ngay bây giờ, đây là một liên kết khác đến mã hạt nhân xử lý các dòng shebang : lxr.free-electrons.com/source/fs/binfmt_script.c - tất nhiên bạn cũng có thể chỉ cần tự cài đặt các nguồn kernel và xem tập tin.
celtschk

4

Nó được thực hiện tương tự như MS-Windows.

Nó không được thực hiện bởi hệ điều hành. Nó được thực hiện bởi trình quản lý tập tin, một phần của hệ thống cửa sổ. Thông thường, một phần của tên tệp sau dấu chấm cuối cùng .được sử dụng để đưa ra quyết định. Có một cách để đặt chúng trong cài đặt hoặc khi bạn nhấp chuột phải vào tệp.

Vì vậy, tệp không báo cho HĐH, tệp không hoạt động nên không thể tự mình làm được, nhưng trình quản lý tệp nhìn vào tên tệp, trình quản lý tệp cũng có thể nhìn vào tệp nhiều như filetiện ích.


Có thể cho rằng, trong Windows, nó không được thực hiện bởi trình quản lý tệp. Bất kỳ ứng dụng nào cũng có thể gọi shell32!ShellExecute()và mặc dù shell32 là một phần của Windows Shell, nhưng nó không phải là một phần của Windows Explorer, đây là trình quản lý tệp mặc định.
Ruslan

3

Như @richard nói, nó tương tự như Windows. Trình quản lý tệp chung có thể nhìn vào tên của tệp trước và cố gắng nhận ra phần mở rộng tệp được liên kết với chương trình. Nếu thất bại, nó có thể cố gắng mở tệp và tìm kiếm một tiêu đề. Nếu bạn cố đọc một tệp không phải là văn bản (giả sử là .jpeg), bạn sẽ thấy một chuỗi dữ liệu mô tả tệp. Chẳng hạn, đây là dòng đầu tiên của .jpeg mà tôi đã nằm xung quanh:

'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xfe\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), quality = 90'


2
Một số người quản lý tệp phân tích nội dung tệp trước khi mở rộng tên tệp (có thể họ thậm chí luôn bỏ qua phần mở rộng, không chắc chắn). Ví dụ: trong Cá heo của KDE nếu bạn có hình ảnh GIF được liên kết với trình duyệt và PNG với trình xem hình ảnh, đổi tên file.pngtệp PNG thành file.gifvẫn sẽ mở trình xem hình ảnh. Và nếu bạn làm trống tập tin, nó sẽ mở trong trình soạn thảo văn bản.
Ruslan

3

Tôi sẽ cố gắng đưa ra một câu trả lời cơ bản về cách các hệ thống Unix xử lý các tệp. Như những người khác đã chỉ ra, việc đặt câu hỏi của bạn là sai lệch vì bản thân các tệp không báo cáo loại đó là gì và chính hạt nhân không quyết định sử dụng ứng dụng nào.

Trong các hệ điều hành Unix và Windows, các tệp được cấu trúc đơn giản như một chuỗi các byte. Từ hệ điều hành của Tanenbaum , phiên bản thứ ba:

Trong thực tế, hệ điều hành không biết hoặc quan tâm những gì trong tập tin. Tất cả những gì nó thấy là byte. Bất kỳ ý nghĩa phải được áp đặt bởi các chương trình cấp người dùng.

Đây là lý do tại sao, trong môi trường máy tính để bàn, xdg-openđược sử dụng để xác định các ứng dụng mặc định để mở các loại tệp cụ thể.

Trên hệ thống Unix, các tệp được phân biệt giữa các tệp thông thườngcác tệp đặc biệt . Một tệp thông thường chỉ là dữ liệu người dùng có thể là tệp văn bản (mã hóa ASCII hoặc Unicode) hoặc nhị phân (mã thực thi). Các tệp đặc biệt là các tệp cần thiết để chạy HĐH. Chúng bao gồm các thư mục, liên kết, đường ống, ổ cắm và tập tin thiết bị. ¹

Theo quy ước, tên tệp chứa các phần mở rộng để cho biết loại tệp nào có thể là ví dụ * .c cho mã nguồn C, * .html cho các trang web, v.v. Từ Tanenbaum:

Trong một số hệ thống (ví dụ UNIX), phần mở rộng tệp chỉ là quy ước và không được hệ điều hành thi hành. Một tệp có tên file.txt có thể là một loại tệp văn bản, nhưng tên đó là để nhắc nhở chủ sở hữu hơn là truyền đạt bất kỳ thông tin thực tế nào đến máy tính. Mặt khác, một trình biên dịch C thực sự có thể nhấn mạnh rằng các tệp đó là để biên dịch kết thúc bằng .c và nó có thể từ chối biên dịch chúng nếu không.

Nếu một tệp được lưu hoặc đổi tên mà không có phần mở rộng thích hợp, nó vẫn giữ nguyên định dạng cho loại tệp đó. Đây là cách hầu hết các trình quản lý tệp quyết định ứng dụng nào để mở tệp và tại sao không có tiện ích mở rộng nhất sẽ nhắc người dùng "Chọn chương trình bạn muốn sử dụng để mở tệp này:".

Cuối cùng, các biến môi trường được sử dụng để xác định cài đặt toàn hệ thống và cấp độ người dùng. Ví dụ, các biến EDITORđược sử dụng để xác định các văn bản soạn thảo để mở ra khi xử lý văn bản ví dụ vim, nanovv Đây là cách các quy trình biết được soạn thảo để mở, giống như khi chỉnh sửa một gitthông điệp cam kết. Mặt khác, bạn đúng rằng bạn phải chỉ định ứng dụng nào sẽ sử dụng. Lưu ý rằng vimphát hiện các loại tệp bằng cách kiểm tra các phần mở rộng và kiểm tra nội dung tệp, nếu cài đặt filetype onđược đặt, sau đó áp dụng tô sáng cú pháp chính xác, thụt lề, v.v. ²

TL; DR

Tóm lại, chính các ứng dụng cấp người dùng sẽ xác định chương trình nào sẽ mở một loại tệp cụ thể chứ không phải hệ điều hành.

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.