Dosya uzantılarının herhangi bir amacı var mı (işletim sistemi için)?

66

Linux, dosya tipini dosya başlığı içindeki bir kod aracılığıyla belirler. Dosya açmak için hangi yazılımın kullanılacağını bilmek için dosya uzantılarına bağlı değildir.

Bu benim eğitimimden hatırladığım şey. Lütfen yanlış olduğumda beni düzeltin!

Son zamanlarda Ubuntu sistemleriyle biraz çalışıyorum: .sh , .txt , .o , .c

gibi uzantıları olan sistemlerde çok fazla dosya görüyorum

Şimdi merak ediyorum: Bu uzantılar sadece insanlar içindir? Öyleyse, ne tür bir dosya olduğuna dair bir fikir olmalı?

Yoksa işletim sistemi için de bir amacı var mı?

    
sordu mizech 27.07.2016 08:46

7 cevap

37
  

Linux, dosya tipindeki bir kod aracılığıyla bir dosyanın türünü belirler. Dosya açmak için kullanmak için yazılım ile bilmek için dosya uzantılarına bağlı değildir.

     

Bu benim eğitimimden hatırladığım şey. Yanlış olduğumda lütfen beni düzeltin!

  • doğru hatırlanmış.
  

Bu uzantılar sadece insanlar içindir?

  • Evet, ama ama.

Uzantılara bağlı olan diğer işletim sistemleriyle etkileşimde bulunduğunuzda, bunları kullanmak daha akıllı bir fikirdir.

Windows'ta, açılış yazılımları uzantılara eklenir.

"dosya" adında bir metin dosyası açmak, Windows'ta "file.txt" adlı aynı dosyayı açmaktan daha zordur (dosya açık iletişim kutusunu *.txt 'dan *.* ' ye her zaman değiştirmeniz gerekir). Aynı SEKME ve yarı-kolon ayrılmış metin dosyaları için de geçerlidir. Aynı şey e-postaları (.mbox uzantısı) içe ve dışa aktarmak için de geçerlidir.

Özellikle yazılımı kodladığınızda. Bir HTML dosyası olan "software1" adlı bir dosyayı ve bir JavaScript dosyası olan "software2" dosyasını açmak, "software.html" ve "software.js" ye göre daha zor hale gelir.

Linux'ta dosya uzantılarının önemli olduğu bir sistem varsa, buna bir hata derim. Yazılım dosya uzantılarına bağlı olduğunda, bu kullanışlıdır. Bir dosyanın ne olduğunu tanımlamak için bir yorumlayıcı yönergesi kullanıyoruz ("bir dosyadaki ilk iki bayt karakter olabilir" # ! ", sihirli bir sayı (onaltılık 23 ve 21," # "ve"! "ASCII değerleri) genellikle shebang olarak adlandırılır.).

Dosya uzantılarıyla ilgili en bilinen sorun, Windows'ta LOVE-LETTER-FOR-YOU.TXT.vbs idi. Bu, dosya gezginde bir metin dosyası olarak gösterilen görsel bir temel komut dosyasıdır.

Ubuntu’da Nautilus’tan bir dosya başlattığınızda ne yapacağına dair bir uyarı alırsınız. Nautilus'tan gEdit'i açmak istediği bazı yazılımları başlatmak istediği bir betiği çalıştırmak bir problemdir ve bu konuda bir uyarı alırız.

Bir şey yürüttüğünüzde komut satırında, uzantının ne olduğunu görsel olarak görebilirsiniz. Eğer .vbs ile biterse şüphelenmeye başlayacağım (.vbs Linux üzerinde çalıştırılabilir değil. En azından biraz daha çaba harcamadan;))

    
verilen cevap Rinzwind 27.07.2016 09:01
64

Burada% 100 siyah veya beyaz cevap yok.

Genellikle Linux, dosya adlarına (ve dosya uzantılarına, yani normalde son dönemden sonra dosya adının bir kısmına) güvenmez ve bunun yerine, içeriğinin ilk birkaç baytını inceleyerek dosya türünü belirler. ve bunu bilinen sihirli numaralar listesine göre karşılaştırmak.

Örneğin, tüm Bitmap görüntü dosyaları (genellikle .bmp isim uzantısına sahip), ilk iki baytında BM harfiyle başlamalıdır. Bash, Python, Perl, AWK, vb. Gibi çoğu betik dilinde betikler (temel olarak yorum olarak # ile başlayan satırları işleyen her şey) ilk satır olarak #!/bin/bash gibi bir shebang içerebilir. Bu özel yorum, dosyayı hangi uygulamanın açacağını söyler.

Yani normalde, işletim sistemi dosya türünü belirlemek için dosya içeriğine değil, dosya içeriğine dayanır, ancak Linux'ta dosya uzantılarına asla gerek duyulmadığını bildirmek, gerçeğin sadece yarısıdır.

Başvurular, dosya isimlerini ve uzantılarını doğrulamayı da içeren dosya kontrollerini gerçekleştirebilirler. Bir örnek, Gnome'nin Gözü ( eog , standart resim görüntüleyici) olup, dosya formatı ile görüntü formatını belirler ve içeriğe uymuyorsa bir hata atar. Bunun bir hata mı yoksa bir özellik mi olduğu tartışılabilir ...

Ancak, işletim sisteminin bazı bölümleri dosya adı uzantılarına, ör. Yazılım kaynak dosyalarınızı /etc/apt/sources.list.d/ 'de ayrıştırırken - sadece *.list uzantılı dosyalar ayrıştırılırken diğerleri yok sayılır. Buradaki dosya türünü belirlemek için değil, bazı dosyaların ayrıştırılmasını etkinleştirmek / devre dışı bırakmak için kullanılmaz, ancak yine de sistemin bir dosyaya nasıl davrandığını etkileyen bir dosya uzantısıdır.

Ve tabii ki insan kullanıcı dosya uzantılarından en çok kazanç sağlar, çünkü bir dosya türünü belirginleştirir ve aynı temel ada sahip birden çok dosyaya ve site.html , site.php , site.js ,% gibi farklı uzantılara izin verir. co_de% vb. Dezavantaj, elbette, dosya uzantısı ve gerçek dosya tipi / içeriğinin mutlaka eşleşmesi gerekmemektedir.

Ayrıca, örneğin platformlar arası birlikte çalışabilirlik için gereklidir. Windows, site.css dosyasıyla ne yapacağını bilmez, ancak yalnızca readme .

    
verilen cevap Byte Commander 27.07.2016 09:22
23

Başkaları tarafından da belirtildiği gibi, Linux'ta bir yorumlayıcı yönerge yöntemi (bir dosyadaki bazı meta verileri başlık veya sihirbaz numarası olarak saklamak için doğru tercümanın okunması söylenebilir) yerine Windows tarafından kullanılan dosya adı uzantısı ilişkilendirme yöntemi kullanılır. .

Bu, istediğiniz herhangi bir adla bir dosya oluşturabileceğiniz anlamına gelir ... birkaç istisna dışında

Ancak

Dikkatli bir kelime eklemek istiyorum.

Sisteminizde dosya adı ilişkilendirmesi kullanan bir sistemden bazı dosyalarınız varsa, dosyalar bu sihirli numaralara veya başlıklara sahip olmayabilir. Dosya adı uzantıları, bu dosyaları okuyabilen uygulamalarla tanımlamak için kullanılır ve bu dosyaları yeniden adlandırırsanız bazı beklenmedik etkilerle karşılaşabilirsiniz. Örneğin:

My Novel.doc dizinini My-Novel olarak yeniden adlandırırsanız, Libreoffice bunu yine de açabilir, ancak 'Adsız' olarak açılır ve bunu kaydetmek için yeniden adlandırmanız gerekir (Libreoffice, uzantı varsayılan olarak, bu yüzden daha sonra iki dosya My-Novel ve My-Novel.odt olur, bu da can sıkıcı olabilir)

Daha da önemlisi, Spreadsheet.xlsx adlı dosyayı My-Spreadsheet olarak yeniden adlandırırsanız, bunu xdg-open My-Spreadsheet ile açmayı deneyin (aslında sıkıştırılmış bir dosya olduğundan):

Ve eğer My Spreadsheet.xls 'si My-Spreadsheet dosyasına yeniden adlandırırsanız, xdg-open My-Spreadsheet ' si bir hatayla karşılaştığınızda

  

konumu açma hatası: Bu dosyayı işlemek için hiçbir uygulama kayıtlı değil

(Her iki durumda da soffice My-Spreadsheet yaparsanız Tamam çalışır)

Ardından, uzantı dosyasını My-Spreadsheet.ods ile% co_de olarak yeniden adlandırırsanız ve bunu açmaya çalışırsanız şunu alırsınız:

(onarım başarısız)

Ve dosyayı doğru bir şekilde açmak için orijinal uzantıyı tekrar açmanız gerekir (daha sonra isterseniz biçimi dönüştürebilirsiniz)

TL; DR:

Yer uzantılarına sahip yerel olmayan dosyalarınız varsa, her şeyin yolunda gideceği varsayımıyla uzantıları kaldırmayın!

    
verilen cevap Zanna 27.07.2016 10:06
19

Diğer yanıtlardan buna farklı bir yaklaşım benimsemeyi ve "Linux" veya "Windows" un bununla bir ilgisi olduğu fikrine meydan okuyor (yanımda).

Bir dosya uzantısı kavramı, "adının bir kısmına dayalı bir dosyanın türünü tanımlamak için bir anlaşma" olarak ifade edilebilir. Bir dosyanın türünü tanımlamak için kullanılan diğer genel kurallar, içeriğini bilinen imzalardan oluşan bir veritabanına karşı ("sihirli sayı" yaklaşımı) karşılaştırır ve dosya sisteminde ek bir öznitelik olarak saklar (orijinal MacOS'ta kullanılan yaklaşım). .

Bir Windows veya bir Linux sistemindeki her dosya hem bir isme hem de içeriğe sahip olduğundan, dosya türünü bilmek isteyen süreçler, uygun gördükleri şekilde "uzantı" veya "büyü numarası" yaklaşımlarını kullanabilir. Çoğu dosya sisteminde bu özellik için standart bir yer olmadığı için meta veri yaklaşımı genellikle mevcut değildir.

Windows'ta, dosya uzantısını bir dosyayı tanımlamanın birincil yolu olarak kullanma konusunda güçlü bir gelenek vardır; En gözle görülür biçimde, grafiksel dosya tarayıcısı (Windows 3.1'deki Dosya Yöneticisi ve modern Windows'daki Explorer), hangi uygulamanın başlatılacağını belirlemek için dosyayı çift tıklattığınızda kullanır. Linux'ta (ve daha genel olarak Unix tabanlı sistemler), içeriği denetlemek için daha fazla gelenek vardır; En önemlisi, çekirdek, nasıl çalıştırılacağını belirlemek için doğrudan yürütülen bir dosyanın başlangıcına bakar; komut dosyaları, #! ile başlayıp yorumlayıcıya giden yol ile başlayacak bir yorumlayıcı gösterebilir.

Bu gelenekler, her sistem için yazılmış programların UI tasarımını etkiler, ancak birçok istisna vardır, çünkü her yaklaşımın farklı durumlarda artıları ve eksileri vardır. İçeriği incelemek yerine dosya uzantılarını kullanma nedenleri şunları içerir:

  • dosya içeriğinin incelenmesi, dosya adlarının incelenmesine kıyasla oldukça maliyetlidir; örneğin, ".conf adlı tüm dosyaları bul", "ilk satırı bu imza ile eşleşen tüm dosyaları bul" dan çok daha hızlı olacaktır.
  • dosya içeriği belirsiz olabilir; Birçok dosya formatı aslında sadece metin dosyaları özel bir şekilde ele alınır, diğerleri özel olarak yapılandırılmış zip dosyalarıdır ve bunlar için doğru imzaları tanımlamak zor olabilir
  • bir dosya birden fazla türde geçerli olabilir; Bir HTML dosyası da geçerli XML olabilir, bir zip dosyası ve birleştirilmiş bir GIF her iki formatta da geçerli kalır
  • sihirli numara eşleşmesi yanlış pozitiflere yol açabilir; başlık içermeyen bir dosya biçimi, bayt "GIF89a" ile başlayıp bir GIF görüntüsü olarak yanlış tanımlanabilir
  • olabilir.
  • bir dosyayı yeniden adlandırmak, onu "devre dışı" olarak işaretlemek için uygun bir yol olabilir; Örneğin. bir yedeklemeyi göstermek için "foo.conf" ifadesini "foo.conf ~" olarak değiştirmek, tüm yönergelerini açıklamak için dosyayı düzenlemek ve otomatik olarak yüklenen bir dizinden dışarı taşımaktan daha kolaydır; benzer şekilde, bir .php dosyasını .txt olarak yeniden adlandırmak Apache'nin kaynağını PHP motoruna iletmekten ziyade düz metin olarak sunacağını söyleyecektir.

Dosya adlarını varsayılan olarak kullanan Linux programlarının örnekleri (ancak başka modları olabilir):

  • gzip ve gunzip, ".gz" ile biten herhangi bir dosyanın özel işlemlerini yapıyorlar
  • gcc ".c" dosyalarını C ve ".cc" veya ".C" olarak C ++ olarak ele alacaktır
verilen cevap IMSoP 27.07.2016 19:13
14

Aslında, bazı teknolojiler dosya uzantılarına güveniyor, dolayısıyla bu teknolojileri Ubuntu'da kullanırsanız, uzantılara da güvenmeniz gerekir. Birkaç örnek:

  • gcc C an C ++ dosyaları arasında ayrım yapmak için uzantılar kullanır. Uzantı olmaksızın onları ayırt etmek neredeyse imkansızdır (sınıfsız bir C ++ dosyası hayal edin).
  • birçok dosya ( docx , jar , apk ) özellikle yapılandırılmış ZIP ​​arşivleridir. Genellikle içerikten tür çıkartabilirsiniz, her zaman mümkün olmayabilir (örneğin Java Manifest isteğe bağlı jar dosyasında).

Bu gibi durumlarda dosya uzantılarını kullanmamak yalnızca geçici çözümlerle mümkün olabilir ve büyük olasılıkla çok hataya açık olabilir.

    
verilen cevap Dmitry Grigoryev 27.07.2016 17:52
7

İlk varsayımınız doğru: Linux'taki uzantılar önemli değil ve sadece insanlar (ve uzantıları önemseyen Unix benzeri olmayan diğer işletim sistemleri) için yararlıdır. Bir dosyanın türü, dosyadaki ilk 32 bit veri tarafından belirlenir. Dosya, sihirli sayı Bu nedenle, kabuk komut dosyalarının #! satırına gereksinim duymasıdır. Bu olmadan, kabuk betiği sadece metin dosyasıdır.

Dosya yöneticileri gittikçe, bazı dosyaların uzantılarını bilmek isterler, örneğin .desktop dosyaları gibi, Windows'un kısayolların sürümü ile aynı olan, ancak daha fazla yetenekleri olan. Ancak OS söz konusu olduğunda, dosyada ne olduğunu değil, adında ne olduğunu bilmek zorundadır.

    
verilen cevap Sergiy Kolodyazhnyy 27.07.2016 09:02
5

Bu, yorum yanıtı için çok büyük.

Farklı anlamlarda bile "uzantı" nın çok fazla olduğunu unutmayın.

Konuştuğunuz şey, bundan sonra 3 harf gibi görünüyor. DOS 8.3 formatını gerçekten popüler hale getirdi ve pencereler bu güne .3 bölümünü kullanıyor.

Linux, anlamı olan .conf veya .list veya .d veya .c gibi birçok dosya içeriyor, ancak 8.3 anlamda gerçekten uzantı değiller. Örneğin Apache, yapılandırma yönergesi için /etc/apache2/sites-enabled/website.conf dosyasına bakar. Sistem MIME Türlerini ve içerik başlıklarını ve bunun bir metin dosyası belirlememesini sağlarken, Apache (varsayılan olarak) yine de .conf ile bitmeden onu yüklemez.

.c başka bir harika. Evet bu bir metin dosyası, ancak gcc main.c'nin main.o haline gelmesine ve nihayetinde ana bağlantısına (bağlantıdan sonra) bağlıdır. Hiçbir zaman sistem, içerik olarak hiçbir anlam ifade etmemek için .c, .o veya uzantı kullanmaz. bir anlamı var. Muhtemelen SCM'nizi main.o ve main'i görmezden atacaksınız.

Şu anki nokta şudur: Uzantılar pencerelerdeki gibi kullanılmaz. Çekirdeğin .txt bölümünü kaldırdığınız için çekirdek .txt dosyasını yürütmeyecektir. Yürütme izni ayarlanmışsa, bir .txt dosyası yürütmek de çok mutludur. Söyleniyor ki, anlamları var ve hala birçok şey için "bilgisayar düzeyinde" kullanılıyorlar.

    
verilen cevap coteyr 27.07.2016 11:15

Etiketlerdeki diğer soruları oku