GNU/Linux >> Belajar Linux >  >> Linux

Linux - Linux Melakukan Hal Berbeda Itu Memungkinkan Saya Untuk Menghapus / Mengganti File Di Mana Windows Akan Mengeluh File Saat Ini Digunakan?

Contoh yang saya miliki adalah Minecraft. Saat menjalankan Bukkit di Linux, saya dapat menghapus atau memperbarui file .jar di folder /plugins dan cukup menjalankan perintah 'reload'.

Di Windows, saya harus menghentikan seluruh proses server karena akan mengeluh bahwa file .jar sedang digunakan saat saya mencoba menghapus atau menggantinya.

Ini luar biasa bagi saya, tetapi mengapa itu terjadi?
Apa yang dilakukan Linux secara berbeda di sini?

Jawaban yang Diterima:

Linux menghapus file yang sama sekali berbeda dari cara Windows. Pertama, penjelasan singkat tentang bagaimana file dikelola di *sistem file asli unix.

File disimpan di disk dalam struktur bertingkat yang disebut i-node . Setiap i-node memiliki nomor unik pada sistem file tunggal. Struktur i-node menyimpan informasi yang berbeda tentang file, seperti ukurannya, blok data yang dialokasikan untuk file, dll., tetapi demi jawaban ini, elemen data yang paling penting adalah link counter . directories adalah file yang menyimpan catatan tentang file. Setiap record memiliki nomor i-node yang dirujuk, panjang nama file dan nama file itu sendiri. Skema ini memungkinkan seseorang untuk memiliki 'pointer', yaitu 'link' ke file yang sama di tempat yang berbeda dengan nama yang berbeda. Penghitung tautan dari i-node sebenarnya menyimpan jumlah tautan yang merujuk ke i-node ini.

Apa yang terjadi ketika beberapa proses membuka file? Pertama open() fungsi mencari file record. Kemudian memeriksa apakah struktur i-node dalam memori untuk i-node ini sudah ada. Ini mungkin terjadi jika beberapa aplikasi telah membuka file ini. Jika tidak, sistem akan menginisialisasi struktur i-node dalam memori yang baru. Kemudian sistem meningkatkan penghitung terbuka struktur i-node dalam memori dan mengembalikan ke aplikasi deskriptor filenya.

Panggilan perpustakaan Linux untuk menghapus file disebut unlink . Fungsi ini menghapus catatan file dari direktori dan mengurangi penghitung tautan i-node. Jika sistem menemukan bahwa struktur i-node dalam memori ada dan penghitung terbukanya tidak nol, maka panggilan ini mengembalikan kontrol ke aplikasi. Jika tidak, ia akan memeriksa apakah penghitung tautan menjadi nol dan jika ya maka sistem akan membebaskan semua blok yang dialokasikan untuk i-node dan i-node itu sendiri dan kembali ke aplikasi.

Apa yang terjadi bahwa aplikasi menutup file? Fungsi close() mengurangi penghitung terbuka dan memeriksa nilainya. Jika nilainya bukan nol, fungsi kembali ke aplikasi. Jika tidak, ia akan memeriksa apakah penghitung tautan i-node adalah nol. Jika nol, itu membebaskan semua blok file dan i-node sebelum kembali ke aplikasi.

Mekanisme ini memungkinkan Anda untuk "menghapus" file saat dibuka. Pada saat yang sama aplikasi yang membuka file masih memiliki akses ke data dalam file tersebut. Jadi, JRE, dalam contoh Anda, tetap membiarkan versi filenya dibuka sementara ada versi lain yang diperbarui di disk.

Terkait:File ODBK dan bagaimana cara mengembalikannya?

Terlebih lagi, fitur ini memungkinkan Anda untuk memperbarui glibc(libc) – pustaka inti dari semua aplikasi – di sistem Anda tanpa mengganggu operasi normalnya.

Windows

20 tahun yang lalu kami tidak tahu sistem file lain selain FAT di bawah DOS. Sistem file ini memiliki struktur dan prinsip manajemen yang berbeda. Prinsip-prinsip ini tidak mengizinkan Anda untuk menghapus file saat dibuka, sehingga DOS dan akhir-akhir ini Windows harus menolak permintaan penghapusan apa pun pada file yang terbuka. Mungkin NTFS akan mengizinkan perilaku yang sama seperti sistem file *nix tetapi Microsoft memutuskan untuk mempertahankan perilaku kebiasaan penghapusan file.

Ini adalah jawabannya. Tidak singkat, tapi sekarang Anda punya ide.

Sunting :
Bacaan yang bagus tentang sumber Win32 kekacauan:https://blogs.msdn.microsoft.com/oldnewthing/20040607-00/?p=38993 Kredit untuk @Jon


Linux
  1. Salin file di terminal Linux

  2. Di mana letak sistem file Subsistem Linux di Windows 10?

  3. Linux:Tempat meletakkan file swap

  1. Pindahkan file di terminal Linux

  2. Cara Menggunakan Perintah Tar di Linux

  3. Cara Menggunakan Netcat untuk Mentransfer File di Linux

  1. Gunakan Perintah Dig di Linux - Melakukannya dengan benar?

  2. 5 cara menggunakan perintah pindah di Linux

  3. Cara Menggunakan Perintah find Linux untuk Menemukan File