Linux bir dosyayı açmak için hangi uygulamayı seçer?


38

Bir dosya işletim sistemine dosya biçimini bildirirse, işletim sistemi varsayılan olarak hangi uygulamayı açacağını seçer?

Windows'ta dernek kayıt defterinde saklanıyor mu?

Linux bir dosyayı açmak için hangi uygulamayı seçer?

Nautilus'u çok kullanırdım ama şimdi terminale geçiyorum. Terminalde her zaman bir dosyayı açmak için hangi uygulamayı açıkça belirtmemiz gerektiği doğru mu? Hangi uygulamanın belirli bir formatta dosyayı varsayılan olarak açacağı ayarları dosya yöneticisine (örn. Nautilus) ait midir ve terminallerde yaşarken sorun olmaz mı?


24
Linux sadece işletim sistemi çekirdeğidir. Sanırım masaüstü ortamınızı veya dosya yöneticinizi burada kastediyorsunuz . Muhtemelen Android, ChromeOS, Linux (ya da Linux dışı) bazlarında KDE, Gnome, XFCE ... ya da diğer işletim
sistemli

muhtemelen. İşi kimin yaptığını bilmiyorum. GNOME kullanıyorum ama generali de bilmek istiyorum.
Tim

Sonra işletim sistemi ve masaüstü ortamını ve uygulamasını netleştirin. Ubuntu 12.04'deki "birlik" masaüstüne sahip nautilus gibi.
Stéphane Chazelas

(1) 12.04 Ubuntu altındayım. Masaüstüm Gnome veya "Unity" mi? (2) Nautilus'u çok kullanırdım ama şimdi terminale geçiyorum. Terminalde her zaman bir dosyayı açmak için hangi uygulamayı açıkça belirtmemiz gerektiği doğru mu? Hangi uygulamanın varsayılan olarak belirli bir formatta bir dosyayı açacağı ayarları dosya yöneticisine mi ait (örn. Nautilus) ve terminallerde yaşarken sorun değil mi?
Tim

Yanıtlar:


35

Bu varsayılan ayarları ele almak için farklı mekanizmalar olabilir. Bununla birlikte, diğer cevaplar, her biri kendi mekanizmasına sahip olan masaüstü ortamlarının tümüne odaklanma eğilimindedir. Ancak, bunlar her zaman bir sisteme kurulmaz (OpenBox'u çok kullanırım) ve bu durumda xdg-openkullanılabilecek araçlar kullanılabilir.

Arch Wiki'den alıntı :

xdg-open, bir kullanıcının varsayılan uygulamalarını yapılandırmak için masaüstünden bağımsız bir araçtır. Birçok uygulama, xdg-open komutunu dahili olarak çağırır.

Şu anda, Ubuntu (12.04) kullanıyorum ve xdg-openkullanılabilir durumda. Bununla birlikte, GNOME gibi eksiksiz bir masaüstü ortamı kullandığınızda, xdg-openbasit bir iletici görevi görür ve dosya isteklerini DE'nize iletir; bu durumda istediği gibi kullanmakta özgürdür (örneğin, GNOME ve Nautilus için diğer cevaplara bakınız). .

Bir masaüstü ortamı içinde (örneğin GNOME, KDE veya Xfce), xdg-open basitçe bu masaüstü ortamının dosya açıcı uygulamasına (gvfs-open, kde-open veya exo-open) argümanlarını iletir; ilişkilendirmeler masaüstü ortamına bırakılır.

... bu durumda sizi diğer cevaplara geri getirir. Yine de, çünkü bu Unix ve Linux'tur ve Ubuntu'ya sormayın:

Masaüstü ortamı algılanmadığında (örneğin, bağımsız bir pencere yöneticisi, örneğin Openbox çalıştırıldığında), xdg-open kendi yapılandırma dosyalarını kullanır.

Neticede:

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

İlk durumda, komutu kullanarak doğrudan yapılandırmanızxdg-open gerekir xdg-mime(bu, hangi uygulamanın hangi dosyayı işlemesi gerektiğini görmenize izin verir). İkinci durumda ...

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

... masaüstü ortamınızla ilişkili dosya açıcıyı yapılandırmanız gerekir. Bazı durumlarda, yapılan xdg-mimekonfigürasyon, ortamınızdaki uygun konfigürasyon aracına yönlendirilebilir.


11
İdeal bir dünyada, Gnome ve KDE hangi dosyayı açacağını seçmek için xdg ayarlarını kullanır ve xdg seçeneklerini değiştirmek için kullanıcı arayüzleri sağlar. O zaman her DE için bir tane yerine sadece bir tane ayar veritabanına sahip olabilirdik. Ne yazık ki xdg çok geç göründü.
joeytwiddle

2
İdeal bir dünyada, üç DE'niz olmazdı.
Russell Borogove

1
@RussellBorogove - o zaman hepimiz Windows'a taşınmalıyız. Bu ideal bir dünya.
don_crissti

@ don_crissti Bunun daha çok "geliştirici veya yönetici için ideal" olduğunu düşünüyorum. Bir son kullanıcıya çeşitlilik sunmak harika bir şey olsa da, tasarımcılar için tek bir sisteme odaklanmak gerçekten çok daha kolay (ancak mutlaka "daha iyi" değil) olurdu. xdg-openİki ucu da bir araya getirmeye çalışan bu bileşenlerden sadece bir tanesi.
John WH Smith,

1
@John - yöneticiler ve çeşitli uygulamalar hakkında devs / tasarımcıları: anlaştılar ... ama sonra memba devs sadece bu kadarını yapabilir. İdeal bir dünyada, bundan ya da bundan şikayet etmek yerine, DE'lerin kullanılabilirliğini ve iteroperatifliğini geliştirmek için KDE, Gnome vb. Yukarı yöndeki projelere katkıda bulunacağız. Eğer hepimiz (milyonlarca) küçük bir çaba sarf etmiş olsaydık, bütün bu meseleler birkaç gün içinde çözülürdü.
don_crissti

11

Gönderen wiki girişi,

KDE ve GNOME gibi Linux tabanlı GUI'ler, MIME türü tabanlı ilişkilendirmeleri destekler. Örneğin, MIME tipi metin / düz bir metin editörüyle ilişkilendirilir.

Ayrıca, bu cevap daha fazla ayrıntıya sahiptir.

Dosya yöneticisi genellikle a ve b seçeneğinin bir birleşimini kullanır (örneğin, biliniyorsa ilk önce dosya uzantısına bakın (veya dosyanın bir uzantısı yoksa), içeriğe bakın).

Bir dosyanın türü, ortak linux dosya sistemlerinde meta veriler olarak depolanmaz.

Gönderen bu cevap, aşağıda bilgileri görebilirsiniz.

Dosya yöneticisi (Nautilus, varsayılan olarak) hangi programın açılacağını belirlemek için MIME türünü kullanır. Bir uygulama yüklendiğinde, hangi MIME türlerini açabileceğini ve / usr / share / apps içine yerleştirilen .desktop dosyasındaki dosyaları açmak için kullanılacak komutu belirtebilir. Bu, menüler, masaüstü kısayolları vb. İçin kullanılan dosyadır.


1
Sorum şu ki, "bir dosya formatı verilir", dosyayı açacağınız uygulamayı belirler.
Tim

11

Bir dosya bir istisna dışında, işletim sistemine dosya biçimini söylemez:

Yürütülebilir bir dosya, sözde shebang çizgisiyle başlarsa,

#! /usr/bin/perl

daha sonra bu satır Linux çekirdeğine başlaması gerektiğini söyler /usr/bin/perl(bu dosyayı çalıştırmak yerine, bu dosyayı çalıştırıp usr/bin/perlargüman olarak vermelidir). Elbette bu sadece böyle bir shebang satırını yok sayan (veya anlayan) dosya biçimleriyle çalışır.

Bunun dışında işletim sistemi de dosya türleri hakkında hiçbir şey bilmiyor. Bununla birlikte, başka dosyaların açılmasına izin veren birçok program, hangi dosyanın hangi dosyanın açılması için kullanılacağına karar verme mekanizmasına sahiptir. Bu programın içinde bir liste olabilir (örneğin Firefox böyle bir listeyi korur) veya program onu ​​masaüstü ortamına devredebilir (bunlardan Linux için birkaç tane vardır).

Genellikle, bu mekanizmalar sadece dosyanın türüne karar vermek için dosya adını düşünür; bunun bir istisnası, genellikle dosya türünün sunucu tarafından açıkça belirtildiği / postada belirtildiği e-posta istemcileri ve web tarayıcılarıdır.

Mekanizma genellikle iki adımlıdır:

  • İlk olarak, dosya adından veya verilen bilgilerden, dosyanın MIME türünü belirleyin (MIME türü standart, ancak genişletilebilir bir dosya türü listesidir).
  • İkincisi, MIME türünden, genellikle programın kendisi tarafından veya programın yazıldığı masaüstü ortamı tarafından tutulan bir tür kayıt defteri aracılığıyla hangi programın yürütüleceğini belirler.

Teşekkürler. Terminalde, bir dosyayı açmak için hangi uygulamanın (shebang'lı script hariç) her zaman açıkça belirtilmesi gerektiği doğru mu? Hangi uygulamanın belirli bir formatta bir dosyayı açacağı varsayılan olarak, dosya yöneticisine (örn. Nautilus) ait midir, terminallerde yaşarken sorun olmaz mı?
Tim

Gnome ilişkilerini komut satırından kullanmak istiyorsanız, komutu kullanabilirsiniz gnome-open. Diğer masaüstü ortamları için benzer komut satırı araçları olduğundan eminim. Düzenleme: Ben sadece John WH Smith masaüstü ortamınızdan bağımsız bir komut verdiğini not ediyorum.
celtschk

6
Düzeltme : Shebang hattı çekirdeğe bir mesaj değildir ; bu kabuğa bir mesaj .
Kazark


2
Bağlantılı sayfadaki gerçek koda olan bağlantı şimdi çalışmıyor gibi göründüğü için, işte shebang satırlarını kullanan çekirdek koduna başka bir bağlantı: lxr.free-electrons.com/source/fs/binfmt_script.c - tabii ki sadece çekirdek kaynaklarını kendiniz kurun ve dosyaya bakın.
celtschk

4

MS-Windows'a benzer şekilde yapılır.

OS tarafından yapılmaz. Pencereleme sisteminin bir parçası olan dosya yöneticisi tarafından yapılır. Genellikle dosya adının son noktadan sonraki .kısmı karar vermek için kullanılır. Bunları ayarlarda veya bir dosyaya sağ tıkladığınızda ayarlamanın bir yolu vardır.

Yani dosya işletim sistemi söylemez, dosya aktif değil, bu yüzden kendi başına hiçbir şey yapamaz, ancak dosya yöneticisi dosya adına bakar, dosya yöneticisi de fileyardımcı programın yaptığı gibi dosyanın içine bakabilir .


Muhtemelen, Windows'ta kendi başına dosya yöneticisi tarafından yapılmamıştır. Herhangi bir uygulama çağırabilir shell32!ShellExecute()ve shell32 Windows Kabuğunun bir parçası olmasına rağmen , varsayılan dosya yöneticisi olan Windows Gezgini'nin bir parçası değildir .
Ruslan

3

@Richard'ın dediği gibi, Windows'a benzer. Genel bir dosya yöneticisi, önce bir dosyanın adına bakabilir ve bir programla ilişkili bir dosya uzantısını tanımayı deneyebilir. Bu başarısız olursa, dosyayı açmayı ve bir başlık aramayı deneyebilir. Metin olmayan bir dosyayı (örneğin bir .jpeg) okumaya çalışırsanız, dosyayı tanımlayan bir veri dizisi görürsünüz. Mesela, bu etrafta yattığım bir .jpeg çizgisinin ilk satırı:

'\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
Bazı dosya yöneticileri, dosya adı uzantısından önce dosya içeriğini analiz eder (belki uzantıyı her zaman yok sayarlar, emin değiller). Örneğin, bir tarayıcıyla ve PNG ile resim görüntüleyiciyle ilişkilendirilmiş GIF görüntüleriniz varsa, file.pngPNG dosyasını yeniden adlandırmak file.gifiçin resim görüntüleyiciyi açacak olan KDE Dolphin'te . Ve eğer dosyayı boşaltırsanız, metin editöründe açılacaktır.
Ruslan

3

Unix sistemlerinin dosyaları nasıl işlediği konusunda temel bir cevap vermeye çalışacağım. Diğerlerinin de belirttiği gibi, sizin sorularınızla ilgili terimleriniz yanıltıcıdır, çünkü dosyalar kendilerinin ne tür olduklarını rapor etmedikleri ve çekirdeğin hangi uygulamaları kullanacağına karar vermediği için.

Unix ve Windows işletim sistemlerinde, dosyalar basit bir bayt dizisi olarak yapılandırılmıştır. Tanenbaum'un İşletim Sistemlerinden üçüncü baskı:

Aslında, işletim sistemi dosyada ne olduğunu bilmiyor veya umursamıyor. Tek gördüğü bayt. Herhangi bir anlam, kullanıcı seviyesindeki programlar tarafından empoze edilmelidir.

Bu nedenle, bir masaüstü ortamında, xdg-openbelirli dosya türlerini açmak için varsayılan uygulamaları belirlemek için kullanılır.

Bir Unix sisteminde, dosyalar normal dosyalar ve özel dosyalar arasında farklılık gösterir . Normal bir dosya yalnızca bir metin dosyası (ASCII veya Unicode kodlama) veya ikili (çalıştırılabilir kod) olabilen kullanıcı verileridir. Özel dosyalar, işletim sistemini çalıştırmak için gerekli olan dosyalardır. Bunlar; dizinleri, bağlantıları, boruları, soketleri ve cihaz dosyalarını içerir. ¹

Dosya adlarının, C kaynak kodu için * .c, web sayfaları için * .html, vb. Gibi olabilecek dosya türlerini belirten uzantılar içerdiği kabul edilir . Tanenbaum'dan:

Bazı sistemlerde (örneğin, UNIX) dosya uzantıları yalnızca kurallardır ve işletim sistemi tarafından zorlanmaz. File.txt adlı bir dosya bir tür metin dosyası olabilir, ancak bu ad, sahibine herhangi bir gerçek bilgiyi bilgisayara iletmekten çok hatırlatmak içindir. Öte yandan, bir C derleyicisi aslında dosyaların derlemek için ısrar edebileceği konusunda ısrar edebilir ve eğer yapmazsa onları derlemeyi reddedebilir.

Bir dosya uygun uzantı olmadan kaydedilir veya yeniden adlandırılırsa, o dosya türü için aynı formatta kalır. Bu, çoğu dosya yöneticisinin hangi uygulamalarla dosyaları açacağına nasıl karar verdiğini ve niçin birçoğunun uzantısı olmasın neden kullanıcıyı "Bu dosyayı açmak için kullanmak istediğiniz programı seçin:" diye soracaktır.

Son olarak, ortam değişkenleri sistem genelinde ve kullanıcı seviyesindeki ayarları tanımlamak için kullanılır. Örneğin, değişken EDITORmetin örneğin işlerken açılacak bir metin editörü belirtmek için kullanılır vim, nanovb işlemler düzenlerken gibi açık hangi düzenleyicisi olduğunuzu gösterir gitmesajı işlemek. Aksi takdirde, hangi uygulamayı kullanacağınızı belirtmeniz doğru olur. Not o vimayar eğer, uzantıları kontrol ve dosya içeriğini inceleyerek algılar dosya türleri filetype onardından doğru dizim, girinti, vb uygulandığı, ayarlanmış ²

TL; DR

Özetle, OS'nin kendisiyle değil, belirli bir dosya türünü hangi programların açacağını belirleyen kullanıcı düzeyinde uygulamalardır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.