Seperti judulnya, saya ingin tahu perbedaan antara tautan keras dan tautan lunak yang dibuat oleh perintah ln
. Perintah man ln
memang memberikan informasi, tetapi tidak cukup menjawab pertanyaan saya.
Juga, alangkah baiknya jika seseorang dapat memberikan pengaturan di mana tautan keras mungkin lebih disukai daripada tautan simbolis.
symbolic-link
ste_kwr
sumber
sumber
Jawaban:
Di Linux / Unix, Shortcuts dikenal sebagai Links
Tautan terdiri dari dua jenis: tautan lunak (tautan simbolik) atau tautan keras.
Tautan Lunak (tautan simbolik)
Anda dapat membuat tautan ke file dan direktori, dan Anda dapat membuat tautan (pintasan) pada partisi yang berbeda dan dengan nomor inode yang berbeda dari aslinya.
Jika nyata copy dihapus, link tidak akan bekerja .
Tautan Keras
Tautan keras hanya untuk file; Anda tidak dapat menautkan ke file di partisi yang berbeda dengan nomor inode yang berbeda.
Jika nyata salinan menghapus link yang akan bekerja , karena ia mengakses data yang mendasari copy yang sebenarnya mengakses.
Pertanyaan: Bagaimana cara saya membuat tautan lunak?
Jawaban: Tautan lunak dapat dibuat dengan
ln -s
; pertama-tama Anda perlu mendefinisikan sumber dan kemudian Anda perlu menentukan tujuan. (Ingatlah bahwa Anda perlu menentukan jalur lengkap dari sumber dan tujuan; jika tidak, ia tidak akan berfungsi.)Seperti yang Anda lihat, ia memiliki inode yang berbeda dan dapat dibuat pada partisi yang berbeda.
Pertanyaan: Bagaimana cara saya membuat tautan keras?
Jawaban: Hard link dapat dibuat dengan
ln
; pertama-tama Anda perlu mendefinisikan sumber dan kemudian Anda perlu menentukan tujuan. (Ingatlah bahwa Anda perlu menentukan jalur lengkap dari sumber dan tujuan; jika tidak, ia tidak akan berfungsi.)Katakanlah saya memiliki skrip dalam
/script
direktori bernamafirefox
.Seperti yang Anda lihat, ini memiliki inode yang sama. Jika saya menghapus yang asli tautannya akan berfungsi, dan itu akan bertindak seperti aslinya.
Di atas saya memeriksa apakah tautannya berfungsi, dan kemudian menghapus skrip firefox yang asli.
Anda Pertanyaan: Akan lebih baik jika seseorang dapat memberikan pengaturan di mana tautan keras mungkin lebih disukai daripada tautan simbolis.
Jawaban : Bergantung pada tata letak partisi disk, Hard Link memiliki batasan bahwa mereka harus berada pada partisi yang sama (-1 titik) dan hanya dapat menautkan ke file (-1 titik) ), tetapi +1 menunjuk jika dokumen asli dihapus tautannya akan bekerja dan berfungsi seperti aslinya.
Di sisi lain, tautan lunak dapat menunjuk ke direktori atau file (titik +1) dan tidak ada batasan partisi (titik +1), tetapi (titik -1) jika sumber dihapus tautan tidak akan berfungsi.
sumber
Hardlink bukan penunjuk ke file, itu adalah entri direktori (file) yang menunjuk ke inode yang sama. Bahkan jika Anda mengubah nama file lain, hardlink tetap menunjuk ke file tersebut. Jika Anda mengganti file lain dengan versi baru (dengan menyalinnya), hardlink tidak akan mengarah ke file baru. Anda hanya dapat memiliki hardlink dalam sistem file yang sama. Dengan hardlink, Anda tidak memiliki konsep file dan tautan asli, semuanya sama (anggap sebagai referensi ke objek). Ini adalah konsep level yang sangat rendah.
Di sisi lain, symlink sebenarnya menunjuk ke jalur lain (nama file); itu memecahkan nama file setiap kali Anda mengaksesnya melalui symlink. Jika Anda memindahkan file, symlink tidak akan mengikuti. Jika Anda mengganti file dengan yang lain, menyimpan namanya, symlink akan menunjuk ke file baru. Symlink dapat menjangkau sistem file. Dengan symlink Anda memiliki perbedaan yang sangat jelas antara file aktual dan symlink, yang tidak menyimpan info di samping path tentang file yang ditunjuknya.
sumber
"Sebuah gambar bernilai ribuan kata."
Dan, "Sebuah contoh bernilai seratus paragraf ..."
Buat dua file:
Masukkan beberapa data ke dalamnya:
Dan seperti yang diharapkan:
Mari buat tautan keras dan lunak:
Mari kita lihat apa yang baru saja terjadi:
Mengubah nama blah1 tidak masalah:
blah1-hard menunjuk ke inode, isi, dari file - itu tidak berubah.
Isi file tidak dapat ditemukan karena tautan lunak menunjuk ke nama, yang diubah, dan bukan ke konten.
Demikian pula, Jika blah1 dihapus, blah1-hard masih menyimpan konten; jika blah2 dihapus, blah2-soft hanyalah tautan ke file yang tidak ada.
sumber: menyalinnya dengan terang-terangan dari StackOverflow!
sumber
git
adalah ide yang buruk , untuk berjaga-jaga kalau-kalau seseorang (frustrasi dengan softlink) bertanya-tanya ... bisa berlaku untuk sistem versi lain juga.Keduanya adalah pointer ke file; perbedaannya adalah jenis pointer. Tautan simbolis menunjuk ke file lain dengan nama . Ini memiliki bit mode khusus yang mengidentifikasinya sebagai tautan simbolik, dan isinya adalah nama dari file asli. Karena hanya berisi nama, nama itu sebenarnya tidak harus ada, atau mungkin ada pada sistem file yang berbeda. Jika Anda mengganti file yang dinamai (ubah isinya tanpa memengaruhi namanya), maka tautan itu masih berisi nama yang sama, dan sekarang ia menunjuk ke file yang baru. Anda dapat dengan mudah mengidentifikasi tautan simbolik dan melihat nama file yang ditunjuknya.
Tautan keras menunjuk ke file dengan nomor inode. Dengan demikian, tautan keras tidak berbeda dengan nama depan file. Tidak ada nama "asli" vs. nama tautan keras; semua tautan keras adalah nama yang sama validnya untuk file tersebut. Karena itu, file yang Anda tautkan harus benar-benar ada dan berada di sistem file yang sama di mana Anda mencoba membuat tautan. Jika Anda menghapus nama asli, maka tautan keras masih menunjuk ke file yang sama. Karena semua tautan keras adalah nama yang sama-sama valid untuk file tersebut, Anda tidak dapat melihatnya dan melihat nama-nama lain untuk file tersebut; untuk menemukan ini, Anda harus melihat setiap file dan membandingkan nomor inode mereka untuk menemukan nama lain yang memiliki nomor inode yang sama.
Anda dapat mengetahui berapa banyak nama file dari output
ls -l
. Angka pertama setelah mode file adalah jumlah tautan. File dengan lebih dari 1 tautan memiliki nama lain di suatu tempat, dan sebaliknya, file dengan jumlah tautan hanya 1 tidak memiliki tautan keras (lainnya).sumber
If you replace the named file, then the link still contains the same name, and so now it points to the new file
- Saya pikir ini tidak dijelaskan dengan baik. Maksud Anda jika saya mengganti file tempat saya mendapatkan tautan simbolis, maka tautan yang berisi nama itu tetap tidak tersentuh. Tapi itu hanya akan menunjuk ke file yang diganti ketika nama file-nya (yaitu file baru yang menggantikan yang lama) sama dengan yang diganti (yaitu file lama yang diganti dengan yang baru) yang benar, benar?Hardlink hanya dapat bekerja pada sistem file yang sama, itu hanya nama yang berbeda untuk inode yang sama (file secara internal direferensikan oleh inode). Sebuah file hanya akan dihapus dari disk ketika tautan terakhir ke inode-nya hilang (Anda
rm
d atauunlink
d tautan terakhir). Hardlink biasanya hanya berfungsi untuk file, bukan direktori.Symlink (tautan simbolik) adalah file khusus yang berisi path ke file lain. Jalan ini bisa absolut atau relatif. symlink dapat bekerja di seluruh sistem file, dan bahkan dapat menunjuk ke file yang berbeda, jika Anda misalnya mencabut hard drive eksternal dan menggantinya dengan yang lain, yang memiliki file berbeda di jalur yang sama. Symlink dapat mengarah ke file atau direktori.
sumber
-d, -F, --directory
sakelar. Dan ya, saya telah melihat catatan diln(1)
halaman :)ln
tidak dapat digunakan untuk membuat hardlink ke direktori. Ada hardlink ke direktori, contoh yang paling menonjol adalah.
dan..
. Saya tidak ingin memasukkan itu dalam jawaban asli saya, karena itu hanya akan mempersulit.Salah satu jawaban dari utas lainnya (sekarang ditautkan dari bagian atas posting Anda) menyebutkan halaman ini yang menurut saya merupakan penjelasan tingkat menengah yang cukup baik. Jika Anda tersesat dalam ascii art, ini versi tl; dr:
Kernel dan sistem file yang terlibat menerjemahkan semuanya secara transparan.
Jadi berdasarkan itu:
../parent.file
)Saya mungkin telah sedikit membingungkan diri saya sendiri tetapi membaca berbagai hal, saya berjuang untuk menemukan perbedaan antara file standar dan hardlink. Cara saya membacanya adalah setiap file terdiri dari hardlink (menyimpan nama file), menghubungkan ke inode yang menunjuk pada data fisik.
Menambahkan hardlink hanya menyediakan inode dengan pointer berbasis sistem file tambahan. Apakah itu benar?
sumber
Kapan menggunakan Soft Link:
Tautan antar sistem file: Jika Anda ingin menautkan file di seluruh sistem file, Anda hanya dapat menggunakan symlink / tautan lunak.
Tautan ke direktori: Jika Anda ingin menautkan direktori, maka Anda harus menggunakan tautan lunak, karena Anda tidak dapat membuat tautan keras ke direktori.
Kapan menggunakan Hard Link:
Ruang Penyimpanan: Tautan keras membutuhkan jumlah ruang yang sangat kecil, karena tidak ada inode baru yang dibuat saat membuat tautan keras. Dalam tautan lunak, kami membuat file yang menghabiskan ruang (biasanya 4KB, tergantung pada sistem file)
Kinerja: Performa akan sedikit lebih baik saat mengakses tautan keras, karena Anda secara langsung mengakses penunjuk disk alih-alih melalui file lain. Memindahkan lokasi file: Jika Anda memindahkan file sumber ke beberapa lokasi lain pada sistem file yang sama, tautan keras akan tetap berfungsi, tetapi tautan lunak akan gagal.
Redundansi: Jika Anda ingin memastikan keamanan data Anda, Anda harus menggunakan hard link, seperti pada hard link, data aman, sampai semua tautan ke file dihapus, alih-alih dalam soft link, Anda akan kehilangan data jika instance master file dihapus.
sumber
Kebingungan muncul ketika Anda mencoba menemukan perbedaan antara "nama file" dan tautan keras karena tidak ada.
Setiap file yang Anda buat terdiri dari data pada disk dan tautan keras - yang merupakan nama file dalam direktori dan penunjuk ke data pada disk. Akhir dari cerita. Ketika tautan keras terakhir (atau satu-satunya) dihapus, maka OS tahu bahwa data tidak lagi diperlukan.
Dari sini Anda dapat melihat bahwa data aktual tidak pernah dihapus, hanya tautan kerasnya. Dan ketika sudah cukup ramai di disk, data mungkin ditimpa oleh data file lain. Sampai saat itu, data dari file yang dihapus mungkin dipulihkan, tetapi agak sulit ditemukan tanpa tautan keras.
Symlinks, seperti yang dijelaskan sebelumnya, cukup memberi tahu Anda "ada file bernama
<targetname>
di folder bernama<targetfolder>
". Mereka menunjuk ke tautan yang sulit. Mereka tidak tahu di mana datanya. Tautan keras tahu itu.sumber
Ini sangat sederhana. File (dan direktori!) Disimpan di alamat pada perangkat blok (HDD atau apa pun). Biasanya Anda memiliki satu nama yang dipetakan ke suatu alamat, dan itulah cara Anda mendapatkan file Anda. Sebuah hard link adalah kedua, ketiga, nama dll dipetakan ke alamat yang sama. Sebuah link simbolik bukan mengacu pada simbol - nama - dan begitu juga nama kedua dipetakan ke nama pertama. Sejauh menyangkut kernel, begitu ia membaca target tautan simbolis itu berhenti dan kembali ke awal dengan nilai target sebagai nama file (lebih atau kurang) sehingga symlink relatif mungkin tetapi sangat tidak membantu. Nama target tidak digunakan di atas tingkat sistem file kecuali jika secara eksplisit ditanya dalam kode userspace.
sumber