Sabit bir bağlantıyı sildiğinizde ne olur?


Yanıtlar:


110

Unix'te tüm normal dosyalar Hardlinks'tir. Bir Unix'teki (ve çoğu (tümü?)) Dosya sistemindeki sabit bağlantılar, adlandırılmış olana referanslardır inode. inodeBir referans sayaç var sen, üçüncü, dördüncü, vb bağlantı bir saniye oluşturduğunuzda sayaç 1'dir (normal çalışma biçimi olan) dosyasına bir "bağlantı" olduğunda, sayaç (artmış) her artırılır birer birer zaman. Bir rmbağlantıyı sildiğinizde ( ), sayaç birer birer azalır (azalır). Bağlantı sayacı 0'a ulaşırsa, dosya sistemi kaldırır inodeve boşluğu kullanım için uygun olarak işaretler.

Kısacası, son bağlantıyı silmediğiniz sürece dosya kalacaktır.

Edit:Son bağlantı kaldırılsa bile dosya kalacaktır . Bu, bir dosyada bulunan verilerin güvenliğini sağlama işleminin başka hiçbir işlem için erişilebilir olmadığından biridir. Verileri dosya sisteminden tamamen kaldırmak, yalnızca verinin meta verilerinde 0 bağlantı verilmiş olması ve herhangi bir işlem tarafından kullanılmaması durumunda yapılır.

Bu IMHO, hard-linkleri (ve softlinks'den farkı) anlamanın en kolay yoludur.


7
Ayrıca, sistem bir dosyayı silmek için yapılan çağrıdır unlink().
mouviciel

1
Bu, son bağlantı kurulduğunda dosyanın açık olduğu durumu kapsamaz unlink.
cjm

5
@OrangeDog, tam olarak değil, çünkü hardlinkler dosya sistemlerini geçemez ve /procayrı (sanal) bir dosya sistemidir.
cjm

2
/ proc, aynı zamanda çekirdeğin iç veri yapılarını da yansıtır (Linux çekirdeğinin, bazı verileri çekirdek belleğine doğrudan ve çeşitli şekilde doğrudan erişim vermeden, oldukça iyi tanımlanmış bir biçimde göstermesinin bir yolu). Bu nedenle, çekirdeğin dosyanın açık olduğu gerçeğini takip ettiğini ve bu bilgiyi procfs yoluyla gösterdiğini söylemek daha doğrudur.
12'de CVn

1
Ve evet, unlink()bir dosyayı silmek için arama yapmak, 1990'ların ilk yarısında MS-DOS'ta C programlaması ile oynamaya başladığımda beni şaşırtmadı. :)
08: 12'de CVn

12

Test yapmak düşündüğümden daha kolaydı: Bir metin dosyası oluşturdum, sonra zor bir şekilde bağlantı kurdum. Sert bağlantısı siliniyor mu değil o kadar hardlinked dosyayı ve öyle kalıntıları bağlantılıydı dosyayı silin.


1
bu doğru, ama tam bir resim değil
xenoterracide 8:12

3
Önemli olan, metin dosyasını oluşturmanın da sabit bir bağlantı eklemesidir. * NIX dosya sistemlerinde, tüm dosyalar (inode), en az bir kez dizin yapısına bağlanmalıdır.
OrangeDog

0

Diskinizdeki tüm dosyalar aslında sürücünüzdeki gerçek verilere işaret eder. görüntü tanımını buraya girin

bu dosya için bir hardlink yaptığınızda hardlink dosyası, orijinal dosyanın işaret ettiği verilere işaret edecektir.

görüntü tanımını buraya girin

Bu örnekte olduğu gibi, a.txt, sürücüdeki dosyanın verisine (bayt) işaret ediyordu, hardlink b.txt oluşturulduğunda a.txt'nin neye işaret ettiğini gösterecektir.

bu nedenle bunlardan birinin çıkarılması, diğerinden ayrıldıklarını diğerini etkilemeyecektir.

ANCAK, ikisini de kaldırdığınızda, sistem diskteki verilerin kendisine işaret eden bir dosyası olmadığını görecek, böylece sistem onu ​​boş alan olarak görecek ve istediğinde üzerine yazacaktır.


2
Bunu açıklamak önemli olduğunu düşünüyorum FILE "A.txt"aynıdır LINK "B.txt"tek bir aradım özellikle gibi FILEve bir diğer LINK. Bağlantı gerçekten siyah ok.
roaima

evet,
b.txt
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.