Mengapa terminal bisa menghapus sendiri?

25

tangkapan layar

Bagaimana caranya apt-get remove xterm? Dan setelah itu dihapus, xtermtidak menutup dan terus berfungsi secara normal.

Apakah xtermproses di-cache dalam RAM saat sedang berjalan?

Kwik
sumber
6
Tepatnya, itu tidak benar-benar menghapus sendiri - apt-getadalah menghapus xterm, dan tidak tahu bahwa itu entah bagaimana tergantung pada suatu xtermproses - jadi ini tentang "Mengapa xterm dapat dihapus saat menjalankan?". Pertanyaan yang bagus
Volker Siegel
2
Ini mirip dengan bagaimana Anda dapat menghapus hard disk saat menjalankan OS.
jkd

Jawaban:

53

Tidak terlalu. File sudah dibuka oleh program. Menghapus file (dan kemudian menggantinya dengan versi lain) tidak mempengaruhi program yang sedang berjalan karena file asli disimpan terbuka (meskipun tanpa nama pada disk untuk membukanya lagi) sampai program selesai dengan itu. Hanya ketika semua menangani file ditutup blok data pada disk dirilis. Sampai saat itu file terbuka dapat dibaca dan ditulis seperti biasa - satu-satunya perubahan adalah tidak ada orang lain yang dapat membukanya karena namanya telah dihapus.

Sementara sebagian dari program mungkin sudah dibaca menjadi ram ketika dihapus, mereka mungkin masih dibuang dan dibaca kembali nanti, atau bagian-bagian baru dari program yang sebelumnya tidak pernah dieksekusi masih dapat diambil dari file yang dihapus.

psusi
sumber
4
Ini adalah alasan sebenarnya .... ini juga alasan mengapa rm -rf /bekerja .....
heemayl
6
Jika Anda ingin menggunakan kata "berfungsi" untuk menggambarkan berhasil mengacaukan semuanya. ;) Menariknya, rm -rf /tidak akan berfungsi jika Anda mencoba menjalankannya untuk kedua kalinya segera setelah itu;)
thomasrutter
1
Saya sering melihat "/ some / file / name (dihapus)" di lsofoutput, dan saya tahu seperti itulah bentuk file 'zombie' ... tetapi apakah ada cara untuk menyimpan konten file seperti itu agar tidak hilang? ketika pegangan file terakhir mati?
Kilian Foth
1
@KilianFoth, jika Anda dapat menemukan proses yang masih membuka file tersebut, maka Anda dapat menyalinnya dari / proc / $ PID / fd / $ ID ke file lain, tetapi sepertinya saya tidak dapat menemukan cara untuk memulihkan file tersebut di tempat karena semua upaya keras menghubungkan file gagal.
psusi
3
@KilianFoth Jika ada pegangan file, maka rootmungkin dapat membuat nama untuk itu (dan dengan demikian mencegah penghapusan) dengan menggunakan linkatsystem call. Tetapi executable dan library dipetakan dalam memori, yang tidak memerlukan file handle. Saya tidak tahu cara untuk menangani file yang hanya ada karena memori dipetakan. Meskipun executable dapat diakses melalui /procsaat mereka sedang berjalan, jadi itu hanya perpustakaan dan file memetakan memori lainnya yang mungkin berada di luar pemulihan. Jika Anda ingin detail lebih lanjut tentang itu, Anda harus menanyakannya sebagai pertanyaan terpisah.
kasperd
8

Apakah xtermproses di-cache dalam RAM saat sedang berjalan?

Persis. Ini mirip dengan proses yang memungkinkan Anda untuk menginstal pembaruan untuk hal-hal saat mereka sedang berjalan tanpa mereka crash. Dan juga mengapa Anda harus memulai kembali layanan setelah Anda memperbaruinya. Setelah sesuatu berjalan, binernya ada di memori.

Jika itu tergantung pada file lain (yang tidak dalam keadaan "terbuka" ditahan) yang dihapus atau diganti, yang mungkin menyebabkan masalah tetapi untuk sesuatu yang terpisah xterm, itu bukan masalah.

Oli
sumber
6
Tidak cukup .. bagian dari program dibaca ke dalam memori hanya bila diperlukan, dan dapat dibuang kapan saja untuk mengosongkan memori untuk penggunaan lain, dan karenanya perlu dibaca lagi nanti (ketika program mencoba mengakses bagian-bagian itu) lagi).
psusi
17
Ini belum tentu dalam RAM. Tetapi file tidak benar-benar dihapus sampai tidak terbuka, termasuk xterm yang dapat dieksekusi.
user253751
@immibis, karenanya, jawabanku;)
psusi
2

Ini sebenarnya adalah fitur bagaimana komputer bekerja: Ketika suatu program dipanggil itu memang dimuat ke dalam memori dan itu bekerja dari sana.

File sebenarnya bekerja dengan cara yang sama. Untuk menghindari masalah, banyak file di sistem UNIX-ish membuat kunci.

Teka-teki yang sebenarnya adalah mengapa Anda tidak bisa melakukan hal-hal yang serupa di Windows.

Fitur ini sebenarnya yang memungkinkan Anda untuk memperbarui seluruh sistem, termasuk program yang aktif di sistem Anda. ;)

runlevel0
sumber
+1 untuk "iddle yang sebenarnya adalah mengapa Anda tidak dapat melakukan hal-hal serupa dan serupa di Windows"
arielf