Saya menggunakan Ubuntu 12.04. Ketika saya mencoba membuat tautan keras untuk direktori apa pun, itu gagal. Saya dapat membuat tautan keras untuk file di dalam batas sistem file. Saya tahu alasan mengapa kami tidak dapat membuat hardlink untuk file di luar sistem file.
Saya mencoba perintah ini:
$ ln /Some/Direcoty /home/nischay/Hard-Directory
hard link not allowed for directory
$ sudo ln /Some/Direcoty /home/nischay/Hard-Directory
[sudo] password for nischay:
hard link not allowed for directory
Saya hanya ingin tahu alasan di balik ini. Apakah sama untuk semua distro GNU / Linux dan citarasa Unix (BSD, Solaris, HP-UX, IBM AIX) atau hanya di Ubuntu atau Linux?
filesystem
directory
hard-link
Nischay
sumber
sumber
ln -F <src> <dst>
dan mungkin berhasil. Tentu saja, ini digunakan untuk superuser di versi Unix yang lebih lama. Adakah yang ingat apakah itu UCB atau System V? Ya, hal-hal buruk bisa terjadi, tetapi biasanya tidak. Seingat saya, sayarmdir
tahu untuk tidak terus menghapus tautan yang sulit. Namun, pengguna bisa menjadi bingung dan menghapus hal-hal yang salah.rmdir
menangani tautan keras dengan cara khusus? Tautan keras hanyalah tautan biasa - tetapi tautan tambahan. Bahkan tidak mudah untuk mengetahui apakah ada tautan ekstra yang tidak biasa tanpa rekaman tambahan.rmdir
bisa tahu apakah direktori tersebut memiliki tautan dari tempat lain. Penghapusan rekursifrm -r
,, harus dikodekan dengan hati-hati, untuk memastikan itu akan bertindak dengan benar bahkan jika ada kesalahan seperti "izin ditolak". BTW, UCB = BSD, doh!ln -F
direktori dan membuatnya bekerja. Tetapi Anda tidak berani menghapus direktori setelahnya karena takut merusak sistem file.Jawaban:
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
:Sistem file dengan loop direktori memiliki kedalaman tak terbatas:
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:
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
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
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: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
:sumber
"Anda biasanya tidak boleh menggunakan tautan keras" terlalu luas. Anda perlu memahami perbedaan antara tautan keras dan tautan, dan gunakan masing-masing sesuai kebutuhan. Masing-masing dilengkapi dengan kelebihan dan kekurangan masing-masing:
Symlinks dapat:
Tautan keras dapat:
Hard link sangat berguna dalam menjalankan aplikasi "copy on write". Mereka memungkinkan Anda untuk menyimpan salinan cadangan dari struktur direktori, sementara hanya menggunakan ruang untuk file yang berubah di antara dua versi.
Perintah
cp -al
ini sangat berguna dalam hal ini. Itu membuat salinan lengkap dari struktur direktori, di mana semua file diwakili oleh tautan keras ke file asli. Anda kemudian dapat melanjutkan untuk memperbarui file dalam struktur, dan hanya file yang Anda perbarui akan mengambil ruang tambahan. Ini sangat berguna saat memelihara cadangan multigenerasi.sumber
ln -s "Don't use this directory" README
itu sah. Bahkan, jika Anda memikirkannya, direktori dapat digunakan sebagai basis data relasional dan tidak mengandung file sebenarnya sama sekali.FYI, Anda dapat mencapai hal yang sama dengan tautan keras untuk direktori dengan menggunakan mount:
Ini sangat berbahaya karena sebagian besar alat dan program tidak akan menyadari ikatannya . Saya pernah melakukan sesuatu seperti pada contoh di atas dan kemudian melanjutkan
rm -rf /home/user
. Untungnya, tidak ada yang relevan di dalamnya/var/www
.sumber
mount --bind <src> <dest>
. Gunakan dengan hati-hati untuk tidak menghapussrc
;)mount: unknown filesystem type 'bind'
mount -o bind src dest
rm -rf
masalah. superuser.com/questions/320415/…Alasan direktori penghubung keras tidak diperbolehkan sedikit teknis. Pada dasarnya, mereka merusak struktur sistem file . Anda umumnya tidak boleh menggunakan tautan keras. Tautan simbolik memungkinkan sebagian besar fungsi yang sama tanpa menyebabkan masalah (misalnya
ln -s target link
).sumber