Ketika PC mengedit file, apakah itu menghapus file asli?

55

Jika code.txt(atau file apa pun) diedit dan disimpan, saya punya dua ide tentang bagaimana PC akan menangani proses:

  1. PC menghapus code.txtsepenuhnya dan membuat yang baru code.txt(versi yang diedit) dari awal.

  2. PC mengedit bagian hex code.txt. Jadi tidak ada penghapusan terjadi.

Ide mana yang mewakili cara kerja komputer?

Pria Meja
sumber
Salam pembuka! Bekerja dari jawaban luar biasa yang diberikan oleh pengguna Grawity, berikut adalah beberapa pertanyaan klarifikasi:
18
@ HaakonDahl pertanyaan klarifikasi apa? Anda tidak memposting apa pun.
The Great Duck
Dangit. Harus menunggu sampai saya kembali ke PC saya. Tetapi intinya adalah level apa - perangkat keras, sistem file, OS, atau aplikasi? Dan aplikasi apa?
Mengapa itu penting bagimu? Bahkan program yang membuat file "baru" mungkin akan mengubah waktu pembuatan sehingga cocok dengan aslinya. Satu-satunya perbedaan yang terlihat adalah nomor inode (atau konsep yang setara) yang mungkin penting (misalnya jika Anda memiliki hardlink di sekitar mereka akan mendapatkan "tidak sinkron").
Bakuriu
1
Voting untuk menutup pertanyaan ini terlalu luas. Itu semua tergantung pada OS, perangkat lunak dan kemampuan sistem file yang mendasarinya.
JakeGould

Jawaban:

121

Bisa jadi - itu tergantung pada editor teks yang digunakan.

Konsep 'file teks' tidak dibangun ke dalam komputer - setiap sistem operasi dapat mengelola file secara berbeda, dan setiap editor teks dapat menggunakan file-file tersebut secara berbeda.

Dalam praktiknya, Anda akan menemukan editor teks yang memiliki kedua mekanisme. Praktis semua sistem operasi memungkinkan penimpaan langsung dari isi file yang ada, sehingga editor sederhana seperti Notepad biasanya hanya meminta OS untuk menulis langsung ke file asli, karena itu paling mudah untuk diterapkan - tetapi berisiko jika Anda kehilangan daya saat menulis. Jadi untuk alasan keandalan, banyak editor sengaja menyimpan data yang diperbarui ke file baru dan menghapus yang asli.

(Saya pikir pembaruan di tempat lebih umum di antara hex editor, di mana sebagian besar pengeditan tidak memasukkan / menghapus byte tetapi hanya mengubah lokasi yang ada, sehingga file penulisan ulang penuh tidak diperlukan.)

Bahkan ada mode operasi ketiga - editor mungkin pertama-tama membuat salinan cadangan dari file lama, lalu langsung menulis data baru ke dalam file.


Ini juga tergantung pada sistem file yang menyimpan file. Dengan kebanyakan filesystem tradisional, jika suatu program meminta untuk menulis ke file yang ada, filesystem tersebut hanya akan menimpa data lama di tempat.

Namun, beberapa filesystem melakukan pekerjaan di "copy-on-write" mode, di mana setiap data baru selalu ditulis ke lokasi yang berbeda, apakah program menginginkannya atau tidak. Sekali lagi, ini memiliki kemungkinan keuntungan dari peningkatan keandalan karena perubahan yang terputus dapat sepenuhnya dikembalikan.

Dalam beberapa sistem file (seperti Btrfs atau ext4) ini adalah fitur opsional; pada yang lain (misalnya filesystem log-terstruktur) itu adalah bagian dari desain inti.

grawity
sumber
30
Ini bukan hanya pada level sistem file. Memori flash, misalnya, harus menghapus blok sebelum dapat menulisnya. Jadi, dalam praktiknya, sering kali akan menulis ke file hanya dengan menulis perubahan baru ke blok baru, dan membatalkannya di blok lama. Dengan memiliki hal semacam ini ditangani secara otomatis oleh perangkat itu sendiri, OS hanya dapat menggunakan sistem file hard drive normal.
trlkly
7
@ CtrlKly: Semua perangkat memori flash modern dibagi menjadi daerah hapus yang urutan besarnya lebih besar dari sektor disk, dan tidak dapat mendaur ulang bagian mana pun dari wilayah tersebut tanpa menghapus semuanya. Akibatnya, jika suatu daerah berisi 32 sektor yang bernilai data usang dan 224 sektor data berguna, ia harus menyalin 224 sektor data berguna di tempat lain sebelum dapat membebaskan ruang dari salah satu sektor usang. Sistem operasi modern menggunakan perintah "trim" untuk menunjukkan sektor disk yang isinya dapat ditinggalkan jika blok yang ada di dalamnya didaur ulang.
supercat
Beberapa editor memilih pada saat run-time perilaku mana yang akan digunakan (misalnya tergantung pada apakah file hanya memiliki satu entri direktori penamaan, atau banyak).
Toby Speight
2
Banyak editor hanya akan membaca file ke dalam memori dan melakukan semua perubahan di sana. (Mungkin secara otomatis menyimpan salinan pekerjaan yang sedang berlangsung ke yang berbeda.) File asli tidak berubah sama sekali sampai Anda menyimpan perubahan, misalnya dengan perintah vi's: w.
jamesqf
4
@ jamesqf: Ya, pertanyaannya adalah tentang apa yang terjadi ketika file "diedit dan disimpan " ...
grawity
6

Karena Anda berbicara tentang "menyimpan file", maka file tidak akan diedit di tempat pada disk.

Dengan file dalam sistem file yang biasa, ada dua hal yang perlu dipertimbangkan. Ada entri direktori, dan kemudian ada data file aktual di suatu tempat di disk.

Ketika Anda mengedit file di editor normal, itu akan memuat data file ke dalam RAM, dan setiap editing akan terjadi pada salinan data tersebut. Kemudian ketika Anda menyimpan file, pada dasarnya ada dua opsi:

Opsi 1: file asli diganti namanya , sehingga entri direktori asli dan data asli akan tetap ada di disk. Ganti nama mungkin misalnya mengubah akhiran file ke .bak(biasanya menghapus .bakfile sebelumnya ). Kemudian file baru dibuat dan data dari memori ditulis di sana.

Opsi 2: entri direktori asli dimodifikasi sehingga file dipotong ke 0 panjangnya. Area pada disk yang digunakan untuk data file akan ditandai sebagai tidak terpakai, tetapi konten file lama akan tetap di disk sampai mereka ditimpa. Kemudian data baru ditulis. Dalam hal ini entri direktori tetap, hanya data yang ditunjuknya diubah.

Ada beberapa variasi yang mungkin, satu yang umum, data yang diedit pertama kali disimpan ke file sementara, jadi jika komputer Anda crash pada saat ini, file asli kemungkinan tidak akan rusak. Kemudian file asli dihapus dan file baru diganti nama dengan nama yang benar. Atau, file asli bisa dihapus sebelum menulis yang baru.

Jadi teori Anda 1 dekat dengan apa yang dilakukan kebanyakan editor.


Lalu ada kasus khusus. Yang paling jelas adalah editor disk, yang memungkinkan membaca dan menimpa byte secara langsung pada disk. Lain mungkin file database, di mana catatan mungkin ukuran tetap, sehingga mudah untuk hanya menimpa catatan. Tetapi data tidak dapat ditambahkan di tengah file, dan karena itu mengedit file teks atau file lain di mana panjang data di tengah file biasanya berubah, trik ini tidak dapat digunakan.

Jadi teori Anda 2 mungkin dalam beberapa kasus, tetapi editor teks biasa dan semacamnya tidak melakukannya.

Hyde
sumber
1
"Karena Anda berbicara tentang" menyimpan file ", maka file tidak akan diedit di tempat pada disk." - Saya pikir setiap kali Anda "membuka" file, mengeditnya, dan menulis perubahan kembali ke disk, Anda "menyimpan file", terlepas dari apakah file itu "ditulis di tempat" (ditimpa), atau file lama dihapus atau diganti namanya dan file baru dibuat. Bagaimanapun, Anda biasanya, pada suatu saat memutuskan untuk "menyimpan perubahan", atau "membuang perubahan".
Kevin Fegan
@KevinFegan Nah, Anda dapat membuka file dalam disk atau hex editor yang sesuai, mengedit konten, dan menyimpan perubahan . Atau, Anda mungkin membuka file database (seperti file database SQLite), dan memodifikasi database, dan memiliki perubahan yang dilakukan pada file tersebut. Jadi hanya membuka file untuk modifikasi dapat berarti memodifikasinya di tempat, tetapi "menyimpan file" biasanya menyiratkan pembuatan file baru, dan alternatif lain ini memiliki tindakan yang berbeda untuk menyimpan perubahan.
Hyde
4

Secara historis, drive dikendalikan langsung oleh OS, yang pada gilirannya dikendalikan oleh aplikasi. Dalam konteks itu, Teori 2 adalah cara utama PC bekerja. OS menentukan lokasi fisik untuk menaruh data, dan ia memiliki kontrol penuh atas proses ini. Akibatnya, sistem file awal memiliki tabel "bad sector", jadi setelah data Anda hilang, komputer dapat memberi tahu Anda data yang hilang dan menandai sektor sebagai tidak dapat digunakan untuk menghindari lebih banyak kehilangan data. Pemindaian disk dan defragmentasi adalah urutan hari itu.

Namun, setelah pergantian abad, kami pindah ke LBA, jadi sekarang OS hanya akan mereferensikan blok "logis" yang ia ingin baca atau tulis. Hard drive itu sendiri sekarang memiliki kecerdasan untuk mengaduk-aduk data di belakang OS tanpa ia sadari. Ini berarti keandalan yang lebih baik, karena sektor-sektor yang gagal memverifikasi dapat dengan mudah dipindahkan ke lokasi fisik baru tanpa memengaruhi pengetahuan OS tentang di mana data itu berada.

Dalam perangkat keras modern, disk drive "platter" biasanya hanya menimpa apa pun yang ada di sana sebelumnya dengan data yang masuk baru, dan secara opsional memetakan ulang LBA jika sektor tersebut sepertinya tidak menyimpan data (sektor ini rusak atau aus). Drive "Flash" biasanya menghapus sel-sel lama dan kemudian menulis data ke sel-sel baru, sebuah proses yang dikenal sebagai level-wear.

Dalam kedua kasus, ini dimungkinkan karena selalu ada kapasitas yang tidak digunakan di luar nilai yang dilaporkan. Overprovisioning ini memungkinkan drive untuk memiliki kehidupan yang dapat digunakan lebih lama daripada teknologi yang agak tidak dapat diandalkan dari teknologi abad sebelumnya. Mode LBA memungkinkan media fisik untuk diabstraksi dari OS sehingga drive itu sendiri dapat mengambil tindakan apa pun yang menurut drive diperlukan untuk mencegah kehilangan data.

Pada tingkat aplikasi, Anda biasanya membuka file dalam mode "MENULIS", yang memberitahu OS untuk menghapus file ("menghapus" konten, tetapi bukan file itu sendiri), kemudian menulis data baru. Semua ini buffered di tingkat OS, kemudian "memerah" ke drive, yang membuat perubahan yang diminta.

Mengingat informasi itu, Teori 1 adalah apa yang secara teknis terjadi pada tingkat pemrograman aplikasi, setidaknya secara default, karena ada juga mode "tulis dengan menambahkan" untuk menghindari membersihkan konten file. OS itu sendiri akan menyajikan perubahan yang dibuat lebih seperti Theory 2, tetapi disarikan melalui LBA. Drive itu sendiri mungkin akan melakukan sesuatu yang merupakan campuran dari Teori 1 dan Teori 2.

Ya. Ini rumit, dan sangat tergantung pada pabrikan / pengembang OS / pengembang aplikasi. Namun, semua kompleksitas ini ditujukan untuk membuat penyimpanan data lebih dapat diandalkan sambil meningkatkan penggunaan daya / masa pakai baterai.

phyrfox
sumber
3

Tergantung. AFAIK Microsoft Word, saat menyimpan .doc(bukan .docx) file dengan opsi Simpan cepat diaktifkan, menambahkan perubahan yang dibuat ke dokumen sejak penyimpanan terakhir lakukan file yang ada.

milet
sumber
1

Secara umum, komputer akan mengalokasikan memori di mana file asli berada sebagai 'dihapus', tetapi semua ini benar-benar berarti bahwa itu tidak akan muncul di browser file Anda lagi, dan sel-sel di memori tempat ditulisnya diperbolehkan untuk ditimpa di masa depan.

Seperti apakah file baru ditulis di tempat yang sama adalah ke sejumlah faktor, terutama perangkat lunak yang Anda gunakan dan bagaimana ia dirancang untuk menggunakan memori.

GigaJoules
sumber
2
Saya pikir Anda mungkin membingungkan "memori" dengan gagasan sistem operasi tautan tautan file. Dan ini tidak benar - benar ada hubungannya dengan pertanyaan yang dinyatakan, yang menanyakan apakah file konkret ditimpa atau jika ada semacam pembaruan n-arah.
Yah jika perangkat lunak dirancang untuk melakukan itu secara khusus maka itu mungkin, meskipun sejauh yang saya tahu ini umumnya bagaimana penyimpanan jangka panjang dan RAM bekerja.
GigaJoules
Sayangnya, penjelasan Anda (sejauh yang saya bisa memecahkan kode yang Anda maksud) jelas bukan bagaimana "penyimpanan jangka panjang dan RAM" bekerja. Tetapi, pada akhirnya, ini tidak ada hubungannya dengan pertanyaan yang ada. Saya ulangi, yang menanyakan bagaimana peranti lunak memperbarui informasi tekstual ke sebuah file pada perangkat komputasi serba guna dengan sistem file modern yang khas. Kami tidak harus mempertimbangkan bagaimana sesuatu seperti "memori" bekerja atau tidak berfungsi untuk menjawab pertanyaan ini.
1

Semoga ini tidak berlebihan, sedikit info / latar belakang tambahan.

PC biasanya tidak memiliki banyak kendali atas bagaimana suatu file diedit, itu adalah aplikasi yang melakukannya.

Beberapa contoh bagaimana beberapa aplikasi dapat menangani pengeditan:

Notepad memuat seluruh dokumen ke dalam memori dan kemudian menyimpan semuanya di atas dokumen asli Anda (atau yang baru Anda tentukan).

Hampir semua editor kecil lainnya akan menyimpan file "baru" saat Anda mengedit dan kemudian menyalinnya di dokumen asli Anda menghapusnya ketika Anda "menyimpan".

Editor Dokumen berukuran besar yang mungkin Anda gunakan untuk mengedit buku cenderung membaca / memodifikasi bagian dokumen karena mereka dapat mengedit dokumen yang lebih besar daripada memori. Ini sebenarnya dapat mengedit dokumen "Di tempat". Mereka mungkin menulis ulang satu halaman dan meninggalkan sisanya sendirian. Ini sering memiliki representasi di-disk yang diindeks lebih kompleks daripada file .txt sederhana untuk memungkinkan perilaku ini.

Editor besar mungkin juga hanya menyimpan file sementara dengan "pembaruan" ke dokumen asli Anda. Ketika Anda melakukan final save Anda dapat menggabungkan semuanya dan menulis ulang dokumen Anda.

Sebagian besar editor dapat dikonfigurasikan untuk membiarkan versi yang ada tidak tersentuh dan membuat yang baru dengan perubahan Anda (pertahankan versi lama).

Mengenai bagian pertanyaan Anda mengenai apa yang dilakukan "PC", beberapa sistem operasi akan mengingat setiap versi file dan selalu membuat yang baru. Ini cukup langka akhir-akhir ini, tetapi saya ingat "Komputer Mini" lama (Apa yang sekarang kita sebut mainframe) di mana setiap file memiliki versi pada akhirnya seperti "File.text.1" dan itu akan menambah versi setiap kali Anda mengeditnya. Perilaku semacam ini akan lebih baik berlaku untuk sesuatu seperti tape drive atau CD rom di mana menimpa versi lama sama sekali tidak praktis.

Bill K
sumber
1

2 bukan tidak mungkin, tetapi itu bodoh karena berbagai alasan.

Editor file teks yang ditulis dengan baik akan:

  1. Tulis file dengan nama berbeda dan konten baru. Jika aslinya myfile.txt, yang baru mungkinmyfile.txt.new
  2. Asalkan 1. berhasil, ganti nama aslinya ke file cadangan, misalnya myfile.txt~
  3. Ganti nama file baru dengan nama aslinya myfile.txt
  4. Jika semuanya telah berhasil, hapus file cadangan. Banyak editor tetap meninggalkannya, sehingga pengguna dapat pulih jika dia segera mengetahui bahwa apa yang dia lakukan dengan editor bukanlah yang dia ingin lakukan.

Jika komputer crash atau kehabisan ruang pada disk selama di atas, tidak ada situasi di mana file lama dan yang baru hilang atau hanya disimpan sebagian.

nigel222
sumber
Perilaku terpotong-di-tempat-dan-menulis ulang banyak editor teks untuk sistem operasi non-IBM / non-Microsoft selama setengah abad terakhir bukanlah "bodoh".
JdeBP
1

Jawaban singkat

Sangat tergantung pada editor Anda, perangkat lunak / driver yang mendasarinya, penyimpanan.


Jawaban paranoiac

Dapat dipulihkan kecuali Anda menghapusnya secara permanen.


Jawaban panjang

Ada informasi yang hilang dalam pertanyaan Anda (perangkat lunak, perangkat keras, dll), jadi alih-alih menjawab sendiri, saya akan membantu Anda menjawab pertanyaan Anda sendiri.

Itu tergantung pada beberapa faktor:

  1. Editor : Jika perangkat lunak editor menggantikan blok dari file yang sama, maka mungkin akan ditulis ulang. Dan ini juga tergantung pada pengaturan editor dan tipe file. Perhatikan bahwa kata mungkin dibuat miring. Bahkan ketika editor menulis ulang file, itu masih bisa tetap tidak tersentuh (baca poin berikutnya).

  2. Perangkat lunak / driver / sistem file yang mendasarinya : File akan tetap tidak tersentuh jika ada perangkat lunak / driver lain di bawahnya yang melindungi file awal agar tidak ditimpa. Jenis-jenis perangkat lunak tersebut termasuk sistem versi, disk diferensial virtual, beberapa perangkat lunak cadangan. Contohnya adalah Git , yang akan menyimpan blok file asli dan akan membuat file baru yang menampung blok yang dimodifikasi.

  3. Penyimpanan :

    • Penyimpanan itu sendiri dapat menulis blok yang diubah pada sektor baru , dan menandai blok lama sebagai "gratis". Kemudian file tersebut secara fisik akan tetap berada di penyimpanan (dan dapat dipulihkan), kecuali jika ditimpa oleh file lain. Contohnya adalah penyimpanan SSD modern , yang dapat melakukannya pada tingkat perangkat keras.

    • Ada beberapa cara untuk memulihkan data dari cakram magnetik HDD mekanis tipikal, bahkan ketika data ditimpa . Dan ada perusahaan khusus di dalamnya.

Jadi jika Anda ingin mendapatkan jawaban konkret apakah file Anda akan dihapus atau tidak, Anda juga harus memberi tahu editor, perangkat lunak / perangkat keras / penyimpanan dan penyimpanan VCS apa yang Anda gunakan. Jika saya melewatkan poin apa pun, silakan edit jawabannya.


Bagaimana cara memastikan bahwa file yang dihapus benar-benar dihapus dari penyimpanan?

Ini mungkin pertanyaan berikutnya yang akan Anda tanyakan pada diri sendiri. Yah ada banyak solusi perangkat lunak / perangkat keras. Karena SuperUser bukan untuk mempromosikan perangkat lunak / perangkat keras, alih-alih memberi tahu nama, saya akan memberi tahu Anda cara menemukannya: cari kata kunci "hapus file secara permanen". Untuk kecocokan yang lebih tepat, sebutkan OS Anda, jenis hard drive, atau info lain yang Anda miliki.

XX
sumber
1

Satu perilaku yang belum ada yang disebutkan adalah perilaku yang relevan dari beberapa versi sistem operasi MS Windows juga terkait dengan sistem file yang digunakan.

Perilaku ini bekerja seperti ini: Ketika Anda mengganti nama atau menghapus file, jika Anda membuat (membuat ulang) file (baru) dengan nama yang sama dalam waktu 15 detik ketika file asli dihapus (atau diganti namanya), tanggal pembuatan / cap waktu disalin dari file asli. Pada dasarnya, file baru "menjadi" file lama / asli.

Dalam hal ini, itu benar-benar tidak masalah jika aplikasi menyimpan perubahan pada file dengan metode Anda # 1: membuat file baru dengan nama yang sama, atau dengan metode Anda # 2: mengedit / memperbarui file di tempat (file tidak dihapus). Either way, file terakhir terlihat dalam (hampir) segala hal, seperti file asli. Satu-satunya hal adalah, ia kemungkinan akan menempati ruang drive fisik yang berbeda (cluster / sektor) dan entri direktori untuk file tersebut kemungkinan akan berada di lokasi yang berbeda.

Seperti yang saya katakan, ini adalah perilaku dari beberapa versi MS Windows / sistem file. Saya tidak tahu versi Windows mana dan sistem file mana ini dimulai, dan apakah masih perilaku versi yang lebih baru. Jika saya harus menebak saya akan mengatakan itu diperkenalkan pada Windows NT dan Windows XP dan masih merupakan perilaku Windows 10, dan (masih tebakan) perilaku memerlukan sistem file Fat32 atau NTFS (dan mungkin lebih baru).

Kevin Fegan
sumber
Sebenarnya, itu penting, karena NTFS mendukung tautan keras dan salah satu perbedaan yang terkenal di antara metode ini adalah efeknya pada file yang berlipat ganda. Tunneling sistem file sudah ada sejak setidaknya Windows NT 5.0.
JdeBP
@ JdeBP - Ya, kami setuju. Itu sebabnya saya mengatakan # 1) "Hampir" dalam "file terakhir terlihat (hampir) setiap cara, seperti file asli", dan # 2) entri direktori di lokasi yang berbeda.
Kevin Fegan
Anda tidak setuju jika Anda menyatakan, seperti yang Anda lakukan, bahwa itu tidak masalah.
JdeBP