Jeśli plik informuje system operacyjny o jego formacie, w jaki sposób system operacyjny wybiera, która aplikacja ma go domyślnie otworzyć?
Czy w systemie Windows skojarzenie jest przechowywane w tabeli rejestru?
Jak Linux wybiera aplikację do otwarcia pliku?
Kiedyś często korzystałem z Nautilusa, ale teraz zmieniam na terminal. Czy to prawda, że w terminalu zawsze musimy wyraźnie określić, która aplikacja ma otworzyć plik? Czy ustawienia aplikacji, która domyślnie otwiera plik określonego formatu, należą do menedżera plików (np. Nautilus) i czy nie jest to problemem, kiedy mieszkamy w terminalach?
files
file-opening
Tim
źródło
źródło
Odpowiedzi:
Mogą istnieć różne mechanizmy obsługi tych ustawień domyślnych. Jednak inne odpowiedzi zwykle koncentrują się na kompletnych środowiskach komputerowych, z których każda ma własny mechanizm. Jednak nie zawsze są one instalowane w systemie (często używam OpenBox), w tym przypadku
xdg-open
można użyć takich narzędzi .Cytując Arch Wiki :
W tej chwili używam Ubuntu (12.04) i
xdg-open
jest dostępny. Jednak w przypadku korzystania z pełnego środowiska pulpitu, takiego jak GNOME,xdg-open
działa on jako prosty program do przesyłania dalej i przekazuje żądania dotyczące plików do DE, który może je dowolnie obsłużyć (na przykład zobacz inne odpowiedzi dla GNOME i Nautilusa) .... co prowadzi cię do innych odpowiedzi w tej sprawie. Mimo to, ponieważ jest to Unix i Linux, a nie Zapytaj Ubuntu:
W sumie:
Jeśli pierwszy przypadek, musisz skonfigurować
xdg-open
bezpośrednio , za pomocąxdg-mime
polecenia (które pozwoli ci również zobaczyć, która aplikacja ma obsłużyć który plik). W drugim przypadku ...... musisz skonfigurować otwieracz plików powiązany ze środowiskiem pulpitu. W niektórych przypadkach dokonana konfiguracja
xdg-mime
może zostać przekierowana do odpowiedniego narzędzia konfiguracyjnego w twoim środowisku.źródło
xdg-open
jest tylko jednym z tych elementów, które starają się połączyć oba końce razem.Z wiki wpisu,
Również ta odpowiedź zawiera więcej szczegółów.
Z tej odpowiedzi widzę poniższe informacje.
źródło
Plik nie informuje systemu operacyjnego o jego formacie, z jednym wyjątkiem:
Jeśli plik wykonywalny zaczyna się od tak zwanej linii shebang, np
następnie ten wiersz informuje jądro Linuksa, że należy go uruchomić
/usr/bin/perl
(to znaczy, zamiast wykonywać ten plik, powinien on wykonaćusr/bin/perl
i podać ten plik jako argument). To oczywiście działa tylko z formatami plików, które ignorują (lub rozumieją) taką linię shebang.Poza tym system operacyjny jako taki nie wie nic o typach plików. Jednak wiele programów, które umożliwiają otwieranie innych plików, ma własny mechanizm decydujący, który program ma zostać użyty do otwarcia tego pliku. Może to być lista wewnątrz samego programu (na przykład Firefox utrzymuje taką listę) lub program może przekazać ją do środowiska pulpitu (których jest kilka dla Linuksa).
Zazwyczaj te mechanizmy uwzględniają nazwę pliku tylko w celu podjęcia decyzji o typie pliku; wyjątkiem są klienci poczty e-mail i przeglądarki internetowe, w których typ pliku jest jawnie podany przez serwer / podany w wiadomości e-mail.
Mechanizm jest zwykle dwuetapowy:
źródło
gnome-open
. Jestem pewien, że istnieją podobne narzędzia wiersza poleceń dla innych środowisk pulpitu. Edycja: Po prostu zauważam, że John WH Smith wydaje polecenie niezależne od środowiska pulpitu.Odbywa się to podobnie do MS-Windows.
Nie jest to wykonywane przez system operacyjny. Odbywa się to przez menedżera plików, część systemu okienkowego. Zwykle
.
do podjęcia decyzji używana jest część nazwy pliku po ostatniej kropce . Istnieje sposób, aby ustawić je w ustawieniach lub po kliknięciu pliku prawym przyciskiem myszy.Tak więc plik nie informuje systemu operacyjnego, plik nie jest aktywny, więc nie może samodzielnie nic zrobić, ale menedżer plików patrzy na nazwę pliku, menedżer plików może również zaglądać do pliku, podobnie jak
file
narzędzie.źródło
shell32!ShellExecute()
, i chociaż shell32 jest częścią systemu Windows Shell, to nie jest częścią Windows Explorer, która jest domyślny menedżer plików.Jak mówi @richard, jest podobny do Windows. Ogólny menedżer plików może najpierw spojrzeć na nazwę pliku i spróbować rozpoznać rozszerzenie pliku powiązane z programem. Jeśli to się nie powiedzie, może spróbować otworzyć plik i poszukać nagłówka. Jeśli spróbujesz odczytać plik nietekstowy (powiedzmy .jpeg), zobaczysz ciąg danych opisujący ten plik. Na przykład jest to pierwsza linia pliku .jpeg, który miałem wokół:
'\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'
źródło
file.png
pliku PNG nafile.gif
nadal otworzy przeglądarkę obrazów. A jeśli opróżnisz plik, otworzy się on w edytorze tekstu.Spróbuję udzielić podstawowej odpowiedzi, w jaki sposób systemy uniksowe obsługują pliki. Jak zauważyli inni, sformułowanie pytania jest mylące, ponieważ same pliki nie informują o ich typie, a samo jądro nie decyduje, których aplikacji użyć.
W systemach operacyjnych Unix i Windows pliki mają prostą sekwencję bajtów. Z systemów operacyjnych Tanenbaum , trzecie wydanie:
Dlatego w środowisku pulpitu
xdg-open
służy do określania domyślnych aplikacji do otwierania określonych typów plików.W systemie Unix pliki są rozróżniane na zwykłe i specjalne . Zwykły plik to tylko dane użytkownika, które mogą być plikiem tekstowym (kodowanie ASCII lub Unicode) lub binarnym (kod wykonywalny). Pliki specjalne to pliki niezbędne do uruchomienia systemu operacyjnego. Należą do nich katalogi, łącza, potoki, gniazda i pliki urządzeń. ¹
Zgodnie z konwencją nazwy plików zawierają rozszerzenia wskazujące, jaki to może być typ pliku, np. * .C dla kodu źródłowego C, * .html dla stron internetowych itp. Z Tanenbaum:
Jeśli plik zostanie zapisany lub zostanie zmieniona jego nazwa bez odpowiedniego rozszerzenia, nadal zachowuje ten sam format dla tego typu pliku. W ten sposób większość menedżerów plików decyduje, za pomocą których aplikacji otwierać pliki i dlaczego bez rozszerzenia większość wyświetli monit „Wybierz program, którego chcesz użyć do otwarcia tego pliku:”.
Wreszcie zmienne środowiskowe są używane do definiowania ustawień ogólnosystemowych i na poziomie użytkownika. Na przykład, zmienna
EDITOR
jest używana do określenia, który tekst, aby otworzyć edytor tekstowy np podczas pracyvim
,nano
itp ten sposób procesy wiedzieć, którego edytora otwarte, podobnie jak podczas edycjigit
popełnić wiadomość. W przeciwnym razie masz rację, że musisz określić, której aplikacji użyć. Należy zauważyć, żevim
wykrywa typy plików, sprawdzając rozszerzenia i sprawdzając zawartość pliku, jeśli to ustawieniefiletype on
jest ustawione, a następnie stosuje prawidłowe podświetlanie składni, wcięcia itp. ²TL; DR
Podsumowując, to aplikacje na poziomie użytkownika określają programy, w których należy otworzyć określony typ pliku, a nie sam system operacyjny.
źródło