Vad är skillnaden mellan mjuka länkar och hårda länkar i Linux?

Linux referens-räknas varje fil och kommer endast återta sitt block när referensantalet-går till noll, det vill säga när den sista hårda länken är avskurna.

Tänk i det här exemplet:
$ datum > foo
$ rm foo

Vanligtvis skapar du en fil, den har en ref-räkna 1 för dess hela livslängd och så småningom vi bort katalogpost, minska ref-räkningen och återta de inode och datablock.

Nu överväga detta exempel:
$ datum > foo1
$ ln foo1 foo2
$ rm foo1
$ cat foo2

I det här fallet 1 namnet försvinner, men den ursprungliga datan är fortfarande tillgängliga via 2. namnet. Detta kommer att fortsätta att vara sant även om vi lägga till och ta bort många namn, och även om vi flyttar dessa namn upp och ner kataloghierarkin inom samma filsystemet, så länge som minst en referens är. Ta bort det sista namnet kommer att återta de inode och datablock, alltför. Om du är bekant med RDBMs, kan du se det i form av referensintegritet.

Mjuka länkar, däremot, har mycket lite att göra med allt detta. Här finns två kommandon som bär vissa likheter med varandra:

$ echo "Gå titta på foo2" > bar
$ ln -s foo2 baz

Först erbjuder läsbar instruktioner, medan andra fraser dessa instruktioner i termer filsystemet förstår. I båda fallen om någon rm: s foo2 vi kommer inte att veta om det tills vi "katt baz" eller kontakta bar och märker att foo2 har dragits från under oss. Symboliska länkar är enkla. Det finns inga ref-räkna och inga garantier för integritet när det gäller symlinks. Som sagt, de är fortfarande enormt användbara. Observera att symlinks kan korsa filsystem, en bedrift som hårda länkar var inte avsedda för att hantera.