Linux menentukan jenis file melalui kode di header file. Itu tidak tergantung pada ekstensi file untuk mengetahui perangkat lunak mana yang digunakan untuk membuka file.
Itulah yang saya ingat dari pendidikan saya. Tolong koreksi saya kalau-kalau saya salah!
Bekerja sedikit dengan sistem Ubuntu baru-baru ini: Saya melihat banyak file pada sistem yang memiliki ekstensi seperti .sh
, .txt
, .o
,.c
Sekarang saya bertanya-tanya: Apakah ekstensi ini dimaksudkan hanya untuk manusia? Jadi, siapa yang harus tahu jenis file apa itu?
Atau apakah mereka memiliki tujuan untuk sistem operasi juga?
files
file-format
mime-type
mizech
sumber
sumber
gzip
,bzip2
,xz
- dan seterusnya. Program-program ini menggunakan akhiran untuk memisahkan versi file terkompresi dari file yang tidak terkompres yang mereka ganti. Program kompresi sering mengeluh tentang sufiks yang salah, meskipun file tersebut sebenarnya adalah file terkompresi dari jenis yang harus ditangani.Jawaban:
Ketika Anda berinteraksi dengan sistem operasi lain yang memang bergantung pada ekstensi apa adanya, itu ide yang lebih cerdas untuk menggunakannya.
Di Windows, perangkat lunak pembuka dilampirkan ke ekstensi.
Membuka file teks bernama "file" lebih sulit pada Windows daripada membuka file yang sama bernama "file.txt" (Anda akan perlu untuk beralih dialog terbuka file dari
*.txt
ke*.*
setiap kali). Hal yang sama berlaku untuk file teks yang dipisahkan oleh TAB dan semi-kolon. Hal yang sama berlaku untuk mengimpor dan mengekspor e-mail (ekstensi .mbox).Khususnya saat Anda membuat kode perangkat lunak. Membuka file bernama "software1" yang merupakan file HTML dan "software2" yang merupakan file JavaScript menjadi lebih sulit dibandingkan dengan "software.html" dan "software.js".
Jika ada sistem di Linux di mana ekstensi file penting, saya akan menyebutnya bug. Ketika perangkat lunak tergantung pada ekstensi file, itu dapat dieksploitasi. Kami menggunakan arahan juru bahasa untuk mengidentifikasi apa file itu ("dua byte pertama dalam file dapat berupa karakter" #! ", Yang merupakan angka ajaib (heksadesimal 23 dan 21, nilai ASCII dari" # "dan"! " ") sering disebut sebagai shebang,").
Masalah yang paling terkenal dengan ekstensi file adalah LOVE-LETTER-FOR-YOU.TXT.vbs di Windows. Ini adalah skrip visual basic yang ditampilkan dalam file explorer sebagai file teks.
Di Ubuntu saat Anda memulai file dari Nautilus Anda mendapat peringatan apa yang akan dilakukan. Menjalankan skrip dari Nautilus di mana ia ingin memulai beberapa perangkat lunak di mana ia seharusnya membuka gEdit jelas merupakan masalah dan kami mendapat peringatan tentang hal itu.
Di baris perintah ketika Anda menjalankan sesuatu, Anda dapat melihat secara visual apa ekstensi itu. Jika diakhiri dengan .vbs, saya akan mulai curiga (bukan .vbs yang dapat dieksekusi di Linux. Setidaknya bukan tanpa usaha lagi;)).
sumber
readme.txt
dan membuatnya dapat dieksekusi. Jika pengguna menjalankannya, itu tidak membuka editor, tetapi menjalankan kode. Dalam hal ini, membuat ekstensi penting (tetapi tidak menyembunyikannya) lebih aman dan lebih mudah dijelaskan untuk pengguna yang tidak mengerti. Ada perbedaan lain (terutama tidak mengeksekusi file dari direktori saat ini), tetapi mereka tidak ada hubungannya dengan ekstensi.readme.txt
file dengan editor teks. Saya baru saja mencoba dengan lumba-lumba di KDE, membuat skrip shell menambahkan izin yang dapat dieksekusi, menyimpannya.txt
dan mengkliknya akan membuatnya terbuka di Kate. Jika saya ganti nama untuk.sh
kemudian mengklik menjalankannya.file
berbasis heuristik, tidak pasti.Tidak ada jawaban 100% hitam atau putih di sini.
Biasanya Linux tidak bergantung pada nama file (dan ekstensi file yaitu bagian dari nama file setelah periode yang biasanya terakhir) dan sebagai gantinya menentukan jenis file dengan memeriksa beberapa byte pertama dari isinya dan membandingkannya dengan daftar angka ajaib yang diketahui. .
Misalnya semua file gambar Bitmap (biasanya dengan ekstensi nama
.bmp
) harus dimulai dengan hurufBM
dalam dua byte pertama. Skrip di sebagian besar bahasa skrip seperti Bash, Python, Perl, AWK, dll. (Pada dasarnya semua yang memperlakukan baris yang dimulai dengan#
komentar) dapat berisi shebang seperti#!/bin/bash
baris pertama. Komentar khusus ini memberi tahu sistem dengan aplikasi mana untuk membuka file.Jadi biasanya sistem operasi bergantung pada isi file dan bukan namanya untuk menentukan jenis file, tetapi menyatakan bahwa ekstensi file tidak pernah diperlukan di Linux hanya setengah dari kebenaran.
Aplikasi tentu saja dapat mengimplementasikan pemeriksaan file mereka seperti yang mereka inginkan, yang meliputi memverifikasi nama file dan ekstensi. Contohnya adalah Eye of Gnome (
eog
, penampil gambar standar) yang menentukan format gambar dengan ekstensi file dan melemparkan kesalahan jika tidak cocok dengan konten. Apakah ini bug atau fitur dapat didiskusikan ...Namun, bahkan beberapa bagian dari sistem operasi bergantung pada ekstensi nama file, misalnya ketika parsing perangkat lunak Anda sumber file dalam
/etc/apt/sources.list.d/
- hanya file dengan*.list
ekstensi dapat diuraikan semua yang lain diabaikan. Ini mungkin tidak terutama digunakan untuk menentukan jenis file di sini tetapi lebih untuk mengaktifkan / menonaktifkan parsing beberapa file, tetapi itu masih merupakan ekstensi file yang mempengaruhi bagaimana sistem memperlakukan file.Dan tentu saja keuntungan pengguna manusia yang paling dari ekstensi file sebagai yang membuat jenis file yang jelas dan juga memungkinkan beberapa file dengan nama dasar yang sama dan ekstensi yang berbeda seperti
site.html
,site.php
,site.js
,site.css
dll Kerugiannya tentu saja bahwa mengajukan perpanjangan dan aktual jenis file / konten tidak harus harus cocok.Selain itu diperlukan untuk interoperabilitas lintas-platform, seperti misalnya Windows tidak akan tahu apa yang harus dilakukan dengan
readme
file, tetapi hanya areadme.txt
.sumber
#!
. Segala sesuatu yang lain tergantung pada keputusan beberapa aplikasi.eog
dan saya tidak tahu mengapa mereka peduli tentang nama file sama sekali. Ini adalah bug menurut saya. Dan tentu saja jika file tersebut bernama "bmp" tetapi format kontennya tidak cocok, akan ada kesalahan juga, tentu saja. Tentu saja setiap aplikasi memutuskan cara memverifikasi file, tetapi secara umum aplikasi Linux tidak harus bergantung pada namanya. Btw, Anda dapat menggunakanfile
commend untuk memeriksa jenis file berdasarkan isinya.file
utilitas tidak benar-benar membuktikan apa pun; itu alat yang berguna, yang bisa ada di OS apa pun. Bagian fundamental apa dari OS yang membuat menjalankanfile
lebih "benar" daripada menggulung nama file?Seperti yang disebutkan oleh orang lain, di Linux metode interpreter directive digunakan (menyimpan beberapa metadata dalam file sebagai header atau angka ajaib sehingga interpreter yang tepat dapat diminta untuk membacanya) daripada metode asosiasi ekstensi nama file yang digunakan oleh Windows.
Ini berarti Anda dapat membuat file dengan hampir semua nama yang Anda suka ... dengan beberapa pengecualian
Namun
Saya ingin menambahkan kata hati-hati.
Jika Anda memiliki beberapa file di sistem Anda dari sistem yang menggunakan asosiasi nama file, file mungkin tidak memiliki angka atau header ajaib itu. Ekstensi nama file digunakan untuk mengidentifikasi file-file ini oleh aplikasi yang dapat membacanya, dan Anda mungkin mengalami beberapa efek yang tidak terduga jika Anda mengganti nama file tersebut. Sebagai contoh:
Jika Anda mengganti nama file
My Novel.doc
menjadiMy-Novel
, Libreoffice masih akan dapat membukanya, tetapi itu akan terbuka sebagai 'Tanpa Judul' dan Anda harus memberi nama lagi untuk menyimpannya (Libreoffice menambahkan ekstensi secara default, sehingga Anda kemudian akan memiliki dua fileMy-Novel
danMy-Novel.odt
, yang bisa mengganggu)Lebih serius lagi, jika Anda mengganti nama file My Spreadsheet.xlsx menjadi My-Spreadsheet, maka cobalah membukanya dengan
xdg-open My-Spreadsheet
Anda akan mendapatkan ini (karena itu sebenarnya file terkompresi):Dan jika Anda mengganti nama file
My Spreadsheet.xls
menjadiMy-Spreadsheet
, saatxdg-open My-Spreadsheet
Anda mendapatkan kesalahan mengatakan(Meskipun dalam kedua kasus ini berfungsi baik jika Anda melakukannya
soffice My-Spreadsheet
)Jika Anda kemudian mengganti nama file tanpa ekstensi
My-Spreadsheet.ods
denganmv
dan mencoba membukanya Anda akan mendapatkan ini:(perbaikan gagal)
Dan Anda harus meletakkan ekstensi asli kembali untuk membuka file dengan benar (Anda kemudian dapat mengkonversi format jika Anda mau)
TL; DR:
Jika Anda memiliki file non-asli dengan ekstensi nama, jangan hapus ekstensi dengan asumsi semuanya akan beres!
sumber
Saya ingin mengambil pendekatan yang berbeda untuk ini dari jawaban lain, dan menantang gagasan bahwa "Linux" atau "Windows" ada hubungannya dengan ini (bersabarlah dengan saya).
Konsep ekstensi file dapat secara sederhana dinyatakan sebagai "konvensi untuk mengidentifikasi jenis file berdasarkan bagian namanya". Konvensi umum lainnya untuk mengidentifikasi jenis file membandingkan isinya dengan basis data tanda tangan yang dikenal (pendekatan "angka ajaib"), dan menyimpannya sebagai atribut tambahan pada sistem file (pendekatan yang digunakan dalam MacOS asli) .
Karena setiap file pada sistem Windows atau Linux memiliki nama dan konten, proses yang ingin mengetahui jenis file dapat menggunakan pendekatan "ekstensi" atau "angka ajaib" sesuai keinginan mereka. Pendekatan metadata umumnya tidak tersedia, karena tidak ada tempat standar untuk atribut ini pada kebanyakan sistem file.
Di Windows, ada tradisi kuat menggunakan ekstensi file sebagai cara utama mengidentifikasi file; yang paling jelas, browser file grafis (File Manager pada Windows 3.1 dan Explorer pada Windows modern) menggunakannya ketika Anda mengklik dua kali pada file untuk menentukan aplikasi mana yang akan diluncurkan. Di Linux (dan, lebih umum, sistem berbasis Unix), ada lebih banyak tradisi untuk memeriksa konten; paling khusus, kernel melihat pada awal file yang dieksekusi langsung untuk menentukan cara menjalankannya; file skrip dapat menunjukkan juru bahasa untuk digunakan dengan memulai dengan
#!
diikuti oleh jalur ke juru bahasa.Tradisi-tradisi ini memengaruhi rancangan program UI yang ditulis untuk setiap sistem, tetapi ada banyak pengecualian, karena setiap pendekatan memiliki pro dan kontra dalam situasi yang berbeda. Alasan menggunakan ekstensi file daripada memeriksa konten meliputi:
Contoh program Linux yang menggunakan nama file secara default (tetapi mungkin memiliki mode lain):
sumber
#!
di awal. File apa pun dengan set bit yang dapat dieksekusi dapat dieksekusi dengan salah satu dari beberapa cara.#!/bin/bash
dan tanda tangan serupa hanya menentukan penerjemah mana yang akan digunakan. Jika tidak ada tanda tangan yang disediakan, penerjemah shell default diasumsikan. File yang tidak mengandung apa pun kecuali dua kata 'Hello World', tetapi dengan set bit pelaksanaannya, akan berusaha menemukan perintah 'Hello' saat dijalankan.Sebenarnya, beberapa teknologi memang mengandalkan ekstensi file, jadi jika Anda menggunakan teknologi itu di Ubuntu, Anda juga harus bergantung pada ekstensi. Beberapa contoh:
gcc
menggunakan ekstensi untuk membedakan antara file C an C ++. Tanpa ekstensi itu hampir tidak mungkin untuk membedakan mereka (bayangkan file C ++ tanpa kelas).docx
,jar
,apk
) hanya terutama terstruktur arsip ZIP. Meskipun Anda biasanya dapat menyimpulkan jenis dari konten, itu mungkin tidak selalu mungkin (misalnya Java Manifest adalah opsional dalamjar
file).Tidak menggunakan ekstensi file dalam kasus-kasus seperti itu hanya akan dimungkinkan dengan solusi yang bersifat meretas dan cenderung sangat rentan terhadap kesalahan.
sumber
gcc
adalah front-end untuk file C, untuk file C ++ Anda memerlukang++
switch front-end atau command-line untuk menentukan bahasa. Yang lebih penting adalahmake
program yang memutuskan apakah akan menggunakangcc
ataug++
membangun file tertentu - danmake
sepenuhnya bergantung pada pola nama file (kebanyakan ekstensi) untuk penyesuaian aturan..cc
ekstensigcc
, itu benar-benar akan dikompilasi sebagai C ++, dan ini didokumentasikan dalamman gcc
: "Untuk setiap file input yang diberikan, akhiran nama file menentukan jenis kompilasi yang dilakukan:" diikuti oleh daftar ekstensi dan cara penanganannya.make
adalah contoh yang baik juga, tetapigcc
sangat bergantung pada nama file. Berikut ini contoh yang lebih jelas daripada.c
vs.cc
: Untuk C,gcc
gunakan sufiks untuk mengetahui apakah langkah pertamanya adalah preprocess (.c
), compile (.i
), assemble (.s
), assemble ( ), atau tautan (.o
). Di sini, saya menggunakan-E
,-S
dan-c
memberi tahu digcc
mana harus berhenti , tetapi menggunakan nama file untuk tahu harus mulai dari mana .gcc something.cc
tidak akan menautkan ke pustaka yang tepat untuk C ++ tetapi itu akan memperlakukan file sebagai C ++, itulah sebabnya banyak pengguna bingung dengan pesan kesalahan yang mereka dapatkan ketika membuat kesalahan itu.Asumsi pertama Anda benar: ekstensi di Linux tidak masalah dan hanya berguna untuk manusia (dan OS non-Unix-like lainnya yang peduli tentang ekstensi). Jenis file ditentukan oleh 32 bit data pertama dalam file tersebut, yang dikenal sebagai angka ajaib. Inilah sebabnya skrip shell perlu
#!
baris - untuk memberi tahu sistem operasi apa yang harus ditafsirkan juru bahasa. Tanpanya, skrip shell hanyalah file teks.Sejauh pengelola file, mereka ingin mengetahui ekstensi beberapa file, seperti
.desktop
file, yang pada dasarnya sama dengan cara pintas versi Window tetapi dengan lebih banyak kemampuan. Tapi sejauh menyangkut OS, perlu tahu apa yang ada di file, bukan apa namanyasumber
gunzip
yang tidak akan mendekompresi file jika tidak dipanggilfoo.gz
.gunzip
adalah salah satu contoh,eog
adalah contoh lainnya. Juga, banyak alat tidak akan melengkapi nama secara otomatis tanpa ekstensi yang tepat. Yang saya katakan adalah bahwa ini sedikit lebih rumit daripada "ekstensi selalu tidak relevan".Ini terlalu besar untuk jawaban komentar.
Perlu diingat bahwa bahkan "ekstensi" memiliki banyak arti jika berbeda.
Apa yang Anda bicarakan tampaknya adalah 3 huruf setelah. DOS membuat format 8.3 sangat populer dan windows menggunakan bagian .3 hingga hari ini.
Linux memiliki banyak file seperti .conf atau .list atau .d atau .c yang memiliki arti, tetapi sebenarnya bukan ekstensi dalam arti 8.3. Misalnya Apache mencari di /etc/apache2/sites-enabled/website.conf untuk arahan konfigurasi itu. Walaupun sistem menggunakan MIME Types dan header konten dan apa yang tidak menentukan itu adalah file teks, Apache (secara default) masih tidak akan memuatnya tanpa berakhir dengan .conf.
.c adalah salah satu yang hebat. Ya itu file teks, tetapi gcc tergantung pada main.c menjadi main.o dan akhirnya main (setelah menautkan). Tidak pernah ada waktu sistem menggunakan ekstensi .c, .o atau tidak memiliki arti sejauh konten, tetapi hal-hal setelah. memang memiliki beberapa arti. Anda mungkin akan mengatur SCM Anda untuk mengabaikan main.o dan main.
Intinya adalah ini: Ekstensi tidak digunakan seperti di windows. Kernel tidak akan menjalankan file .txt karena Anda menghapus bagian .txt dari nama tersebut. Juga sangat senang untuk mengeksekusi file .txt jika izin eksekusi diatur. Yang sedang berkata, mereka memiliki makna, dan masih digunakan pada "level komputer" untuk banyak hal.
sumber
x.3
skema penamaan lagi, Anda sudah mendapat ekstensi lagi ada juga seperti.doxc
,.torrent
,.part
, dll Ini hanya bahwa banyak format file dan ekstensi yang sudah didefinisikan kembali dalam waktu ketika 8,3 penamaan masih hal dan kemudian format sebagian besar hanya mengadaptasi konvensi menggunakan hingga 3 huruf.gzip
Makefile Anda, dll) dapat ditulis untuk menggunakan konvensi ini untuk membuat asumsi tentang tindakan yang benar untuk dilakukan pada setiap file.dir
perintah prompt tidak akan memberitahuku hal seperti itu; itu tidak akan peduli. Mengeksekusi file tentu merupakan pengecualian, di kedua OS; jika pertanyaannya terbatas pada itu, jawabannya adalah bahwa DOS / Windows hanya peduli pada nama, dan Unix / Linux hanya peduli pada izin eksekusi dan byte pertama dari file. Di luar itu, selalu ada beberapa aplikasi memilih konvensi untuk diikuti.