Hardlink direktori memecah sistem file dengan berbagai cara
Mereka memungkinkan Anda untuk membuat loop
Tautan keras ke direktori dapat menautkan ke induknya sendiri, yang membuat loop sistem file. Misalnya, perintah ini dapat membuat lingkaran dengan tautan balik l
:
mkdir -p /tmp/a/b
cd /tmp/a/b
ln -d /tmp/a l
Sistem file dengan loop direktori memiliki kedalaman tak terbatas:
cd /tmp/a/b/l/b/l/b/l/b/l/b
Menghindari infinite loop ketika melintasi struktur direktori semacam itu agak sulit (meskipun misalnya POSIX find
harus menghindari ini).
Sistem file dengan jenis tautan keras ini bukan lagi pohon, karena pohon tidak boleh mengandung perulangan.
Mereka memecahkan ambiguitas direktori induk
Dengan loop sistem file, ada beberapa direktori induk:
cd /tmp/a/b
cd /tmp/a/b/l/b
Dalam kasus pertama, /tmp/a
adalah direktori induk dari /tmp/a/b
.
Dalam kasus kedua, /tmp/a/b/l
adalah direktori induk dari /tmp/a/b/l/b
, yang sama dengan /tmp/a/b
.
Jadi ia memiliki dua direktori induk.
Mereka melipatgandakan file
File diidentifikasi oleh jalur, setelah menyelesaikan symlink. Begitu
/tmp/a/b/foo.txt
/tmp/a/b/l/b/foo.txt
adalah file yang berbeda.
Ada jauh lebih banyak jalur file. Mereka sama dalam hal jumlah inode mereka tentu saja. Tetapi jika Anda tidak secara eksplisit mengharapkan loop, tidak ada alasan untuk memeriksa itu.
Hardlink direktori juga dapat menunjuk ke direktori anak, atau direktori yang bukan anak atau orang tua dari kedalaman apa pun. Dalam hal ini, file yang merupakan anak dari tautan akan direplikasi ke dua file, diidentifikasi oleh dua jalur.
Contoh anda
$ ln /Some/Direcoty /home/nischay/Hard-Directory
$ echo foo > /home/nischay/Hard-Directory/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ echo bar >> /Some/Direcoty/foobar.txt
$ diff -s /Some/Direcoty/foobar.txt /home/nischay/Hard-Directory/foobar.txt
$ cat /Some/Direcoty/foobar.txt
foo
bar
Bagaimana cara kerja tautan lunak ke direktori?
Jalur yang mungkin berisi softlink dan bahkan loop direktori lunak sering digunakan hanya untuk mengidentifikasi dan membuka file. Ini dapat digunakan sebagai jalur linear normal.
Tetapi ada situasi lain, ketika path digunakan untuk membandingkan file. Dalam hal ini, tautan simbolik di jalur dapat diselesaikan terlebih dahulu, mengubahnya menjadi minimal , dan representasi yang disepakati bersama membuat jalur kanonik :
Ini dimungkinkan, karena semua tautan lunak dapat diperluas ke jalur tanpa tautan. Setelah melakukan itu dengan semua tautan lunak di jalur, jalur yang tersisa adalah bagian dari pohon, di mana jalur selalu tidak ambigu.
Perintah readlink
dapat menyelesaikan jalur ke jalur kanoniknya:
$ readlink -f /some/symlinked/path
Tautan lunak berbeda dari apa yang digunakan sistem file
Tautan lunak tidak dapat menyebabkan semua masalah karena berbeda dari tautan di dalam sistem file. Itu dapat dibedakan dari tautan keras, dan diselesaikan ke jalur tanpa symlink jika diperlukan.
Dalam beberapa hal, menambahkan symlink tidak mengubah struktur sistem file dasar - ia tetap mempertahankannya, tetapi menambahkan lebih banyak struktur seperti lapisan aplikasi.
Dari man readlink
:
NAME
readlink - print resolved symbolic links or canonical
file names
SYNOPSIS
readlink [OPTION]... FILE...
DESCRIPTION
Print value of a symbolic link or canonical file name
-f, --canonicalize
canonicalize by following every symlink in
every component of the given name recursively;
all but the last component must exist
[ ... ]