Pertanyaan Apa perbedaan antara tautan keras dan tautan simbolis?


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.


447
2018-02-29 09:03


asal


salah satu perbedaan ... Anda memiliki beberapa file, misalnya file test. Jika Anda melakukan uji hardlink, buat ln -s test symlink dan kemudian pindahkan test file ke dir lain (atau rename), symlink tidak akan berfungsi. Hardlink akan berfungsi. Sekarang coba hapus tes file. Hardlink akan tetap berfungsi, sebenarnya Anda masih bisa mengakses file hingga sejumlah hardlink ke file isnt 0. Itu karena inode, itu ditulis dalam manual ... - Denwerko
Saya telah membuka kembali ini karena ini layak mendapat jawaban umum yang bagus mengenai masalah ini (tidak seperti pertanyaan sebelumnya yang merupakan contoh C yang tidak jelas). - Oli♦
Jawaban Terbaik: youtube.com/watch?v=aO0OkNxDJ3c - Abhishek Bhatia
Juga jawaban yang cukup lengkap: stackoverflow.com/questions/185899/… - Elzo Valugi
@AbhishekBhatia video tidak tersedia - Ooker


Jawaban:


 Di Linux / Unix, Pintasan dikenal sebagai Tautan


Tautan terdiri dari dua jenis: tautan lunak (tautan simbolis) atau tautan keras.

  1. Tautan Lembut (tautan simbolis)

    Anda dapat membuat tautan ke file dan direktori, dan Anda dapat membuat tautan (pintasan) di partisi yang berbeda dan dengan nomor inode yang berbeda dari yang asli.

    Jika itu nyata salin dihapus, tautan Tidak akan berhasil.

  2. Tautan Sulit

    Hard links hanya untuk file; Anda tidak dapat menautkan ke file pada partisi yang berbeda dengan nomor inode yang berbeda.

    Jika itu nyata salin dihapus tautan akan berfungsi, karena mengakses data yang mendasarinya, salinan asli sedang diakses.


Pertanyaan: Bagaimana cara saya membuat tautan lunak?

Menjawab: Tautan lunak dapat dibuat dengan ln -s; pertama Anda perlu mendefinisikan sumber dan kemudian Anda perlu menentukan tujuan. (Perlu diingat Anda perlu menentukan jalur lengkap dari kedua sumber dan tujuan; jika tidak, itu tidak akan berfungsi.)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

enter image description here

Seperti yang Anda lihat itu memiliki inode yang berbeda dan dapat dibuat pada partisi yang berbeda.


Pertanyaan: Bagaimana cara saya membuat tautan keras?

Menjawab: Tautan keras dapat dibuat dengan ln; pertama Anda perlu mendefinisikan sumber dan kemudian Anda perlu menentukan tujuan. (Perlu diingat Anda perlu menentukan jalur lengkap dari kedua sumber dan tujuan; jika tidak, itu tidak akan berfungsi.)

Katakanlah saya memiliki skrip di /script direktori bernama firefox.

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

enter image description here

Seperti yang Anda lihat, ia memiliki inode yang sama. Jika saya menghapus yang asli, tautan itu akan berfungsi, dan itu akan bertindak sebagai yang asli.

enter image description here

Di atas saya periksa bahwa tautan berfungsi, lalu hapus skrip firefox asli.


Anda Pertanyaan: Akan lebih baik jika seseorang dapat memberikan pengaturan di mana tautan keras mungkin lebih baik daripada tautan simbolis.

Menjawab : Tergantung pada tata letak partisi disk, Tautan Sulit memiliki batasan bahwa mereka harus berada di partisi yang sama (-1 poin) dan hanya dapat ditautkan ke file (-1 poin) ), tapi Poin +1 jika yang asli dihapus, tautan akan berfungsi dan bertindak seperti aslinya.

Di sisi lain, tautan lunak dapat mengarah ke direktori atau file (titik +1) dan tidak ada batasan partisi (titik +1), tetapi (-1 poin) jika sumber dihapus, tautan tidak akan berfungsi.


31
2018-05-09 00:42





Hardlink bukan penunjuk ke file, ini adalah entri direktori (file) yang menunjuk ke inode yang sama. Bahkan jika Anda mengubah nama file lain, hardlink masih menunjuk ke file. Jika Anda mengganti file lain dengan versi baru (dengan menyalinnya), sebuah hardlink tidak akan mengarah ke file baru. Anda hanya dapat memiliki hardlink di dalam sistem file yang sama. Dengan hardlink, Anda tidak memiliki konsep file dan tautan asli, semuanya sama (menganggapnya sebagai referensi ke objek). Ini adalah konsep tingkat yang sangat rendah.

Di sisi lain, symlink sebenarnya menunjuk ke jalan lain (nama file); ini menyelesaikan nama file setiap kali Anda mengaksesnya melalui symlink. Jika Anda memindahkan file, symlink tidak akan mengikuti. Jika Anda mengganti file dengan yang lain, menjaga nama, symlink akan mengarah ke file baru. Symlink dapat menjangkau filesystem. Dengan symlinks, Anda memiliki perbedaan yang sangat jelas antara file dan symlink yang sebenarnya, yang tidak menyimpan info di samping path tentang file yang ditunjuknya.


314
2018-05-18 09:51



Suatu hal yang (dengan kata-kata sendiri) "menunjuk ke file"  bisa disebut a penunjuk (itu hampir sepele hampir tautologis benar). Jika kita nitpicking maka (secara umum) gagasan tentang hardlink mungkin ada bahkan jika sistem file tidak menggunakan inode. - jfs


"Sebuah gambar bernilai seribu kata." Pictorial representation


Dan, "Sebuah contoh bernilai seratus paragraf ..."

Buat dua file:

$ touch blah1   
$ touch blah2

Masukkan beberapa data ke dalamnya:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

Dan seperti yang diharapkan:

$cat blah1; cat blah2
Cat
Dog

Mari buat tautan keras dan lunak:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Mari kita lihat apa yang baru saja terjadi:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

Mengubah nama blah1 tidak masalah:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-poin keras ke inode, isi, file - yang tidak berubah.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

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 isinya; jika blah2 dihapus, blah2-soft hanyalah tautan ke file yang tidak ada.


sumber: secara mencolok menyalinnya dari StackOverflow!


293
2017-07-21 07:33



Agar adil bagi Anda - Anda memang menambahkan gambar yang indah di bagian atas ... ah Anda menyalinnya juga! Menggabungkan dua jawaban sebenarnya sangat membantu :) - icc97
lebih baik dijelaskan, tidak di mana pun! - dennisbot
Saya terus menatap gambar selama 20 detik dan kemudian, tiba-tiba, saya menemukan jawabannya. Ini sebenarnya brilian. - Mohammed Joraid
btw: Menggunakan tautan keras dengan git  adalah ide yang buruk, untuk berjaga-jaga jika seseorang (frustasi karena tautan lunak) bertanya-tanya ... dapat berlaku untuk sistem versi lain juga. - Frank Nocke
Apakah inode ke hardlink-nya mirip dengan file yang disimpan di cloud ke perangkat apa pun yang mengaksesnya? - Ooker


Keduanya adalah pointer ke file; perbedaannya adalah jenis penunjuk. Tautan simbolis menunjuk ke file lain dengan nama. Ini memiliki bit mode khusus yang mengidentifikasi itu sebagai tautan simbolis, dan isinya adalah nama file sebenarnya. Karena itu hanya berisi nama, nama itu sebenarnya tidak harus ada, atau mungkin ada pada sistem file yang berbeda. Jika Anda mengganti file yang bernama (mengubah isinya tanpa mempengaruhi namanya), maka tautan itu masih berisi nama yang sama, dan jadi sekarang ini menunjuk ke file baru. Anda dapat dengan mudah mengidentifikasi tautan simbolis 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 "nyata" vs nama tautan keras; semua tautan keras adalah nama yang sama-sama valid untuk file tersebut. Karena itu, file yang Anda tautkan harus benar-benar ada dan berada di sistem file yang sama tempat 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 melihat satu dan melihat nama lain untuk file tersebut; untuk menemukan ini, Anda harus pergi melihat setiap file dan membandingkan nomor inode mereka untuk menemukan nama lain (s) yang memiliki nomor inode yang sama.

Anda dapat mengetahui berapa banyak nama file dari output ls -l. Nomor 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).


87
2018-05-18 15:23



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 mendapat tautan simbolis, maka tautan yang berisi nama tetap tidak disentuh. Tapi itu hanya akan menunjuk ke file yang diganti ketika nama file (yaitu file baru yang menggantikan yang lama) adalah sama dengan yang diganti (yaitu file lama yang digantikan oleh yang baru) satu, benar? - Mike
@Mike, ya: tautan simbolis menunjuk ke nama file asli, jadi mengganti file itu berarti tautan sekarang menunjuk ke file baru. - psusi
Bbut hanya jika nama yang sama benar? Apakah symlink mengarah ke pisang dan saya mengganti file dengan oranye maka sy link tidak dapat menemukan file pisang lagi, itu tidak akan berfungsi - Mike
@Mike, dunia menggantikan berarti itu memiliki nama yang sama, jika tidak, Anda hanya menghapus satu file dan menambahkan yang lain;) - psusi


Sebuah hardlink hanya bisa bekerja pada filesystem 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 inodenya hilang (Anda rmd atau unlinkd tautan terakhir). Hardlink biasanya hanya berfungsi untuk file, bukan direktori.

Sebuah symlink (symbolic link) adalah file khusus yang berisi path ke file lain. Jalan ini bisa bersifat 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. Sebuah symlink dapat menunjuk ke file atau direktori.


57
2018-02-29 09:20



Terima kasih, ini memberi tahu saya bagaimana mereka bekerja, tetapi apa sebenarnya yang dilakukan oleh tautan keras? Dan mengapa itu tidak berfungsi untuk direktori? - ste_kwr
@knittl: Anda yakin? Tampaknya pada beberapa sistem file, tautan ke direktori diizinkan, tetapi hanya root yang dapat membuatnya. Lihat -d, -F, --directory switch. Dan ya, saya memiliki melihat catatan di ln(1) halaman :) - 0xC0000022L
@kniwor: cara termudah untuk mendeskripsikan hardlink adalah "hanya nama lain untuk file yang sama (yaitu, data pada disk)". Dan - setidaknya di sistem saya - ln tidak dapat digunakan untuk membuat tautan ke direktori. Namun, ada hardlink ke direktori, contoh yang paling menonjol . dan ... Saya tidak ingin memasukkan itu dalam jawaban asli saya, karena itu hanya akan memperumit masalah. - knittl
@STATUS_ACCESS_DENIED: oke oke ... tapi biasanya itu bukan ide yang bagus. Itu sebabnya saya menulis »biasanya« dalam jawaban asli saya. Lihat juga komentar saya sebelumnya sebagai contoh. - knittl
sehingga tautan keras dapat mengarah ke folder / file yang sama dengan nama yang berbeda untuk itu, yaitu memiliki nama berbeda yang menautkan ke inode yang sama? - Charlie Parker


Salah satu jawaban dari thread lain (sekarang terhubung dari bagian atas posting Anda) menyebutkan halaman ini yang saya pikir adalah penjelasan tingkat menengah yang cukup baik. Jika Anda tersesat dalam seni ascii, inilah versi tl; dr:

  • File standar adalah pointer dari sistem file ke inode yang pada gilirannya menunjuk ke data fisik. Komponen file menyimpan tautannya ke sistem berkas (pada dasarnya jalurnya) dan tautan ke inode.
  • Hard-link, sama seperti file. Mereka hanya penunjuk tambahan langsung ke sebuah inode.
  • Symbolic-links adalah file terpisah (termasuk inode dan data terpisah) yang menyimpan jalur filesystem ke file.

Kernel dan filesystem yang terlibat menerjemahkan semuanya secara transparan.

Jadi berdasarkan itu:

  • Hard-link hanya memungkinkan menghubungkan sistem-file yang sama. Symlink dapat menunjuk pada jalur mana pun.
  • Hard-link (pada dasarnya) mengarah ke data absolut. Symlink dapat menunjuk ke path relatif (misalnya ../parent.file)
  • Dengan ekstensi, jika Anda memindahkan pointer target dari hard-link (yang, ingat, itu sendiri pada dasarnya hanya sebuah hard-link yang menunjuk ke sebuah inode), hard-link masih berfungsi. Memindahkan target symlink biasanya akan merusak symlink.
  • Memecahkan hard-link akan lebih cepat tetapi tak terhingga. Porsi kecepatan yang tidak signifikan itu datang dengan biaya sistem file yang tidak fleksibel.

Saya mungkin telah sedikit membingungkan diri sendiri tetapi membaca berbagai hal, saya berjuang untuk menemukan perbedaan antara file standar dan hardlink. Cara saya membacanya adalah setiap file terdiri dari sebuah 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?


20
2018-05-18 15:10



Saya pikir Anda benar, setiap file adalah nama path untuk inode, dan tautan keras adalah nama path tambahan untuk inode yang sama. Jadi tautan keras tidak berbeda dari file normal. - enzotib
Saya mencoba memahami ini ... tetapi Anda mengatakan:> "Simbol-link adalah file terpisah (termasuk inode terpisah dan data) yang menyimpan path filesystem ke file. "Apakah symlink benar-benar memiliki data yang terpisah? Lalu, sama seperti salinan dir yang tertaut ke, kan? ... dan setiap kali ada sesuatu yang ditulis ke symlink, itu harus ditulis dua kali ke disk? Tidak masuk akal. - MiniGod
@MiniGod Tidak ada symlink adalah inode ke blok data yang menyimpan jalur ke inode lain (nama file). Ya, itu Matrix-seperti membingungkan tetapi setelah Anda mendapatkannya, Anda tidak akan pernah lupa :) - Oli♦
@Oli Saya mungkin bingung, tetapi ketika Anda mengatakan: "termasuk inode terpisah dan data ", maksudmu symlink itu memiliki data yang terpisah !? - MiniGod
@MiniGod Ya. Symlink adalah sebuah inode yang menunjuk ke data (seperti file normal) dan data itu adalah sebuah jalur. Ini sedikit lebih pintar dari itu - untuk memungkinkan penggunaan transparan melalui symlink - tetapi pada dasarnya itu semua. - Oli♦


Kapan menggunakan Soft Link:

Tautan antar sistem file: Jika Anda ingin menautkan file di seluruh sistem file, Anda hanya dapat menggunakan tautan tautan / tautan lunak.

Tautan ke direktori: Jika Anda ingin menautkan direktori, Anda harus menggunakan tautan Lunak, karena Anda tidak dapat membuat tautan keras ke direktori.

Kapan menggunakan Hard Link:

Ruang Penyimpanan: Tautan keras membutuhkan ruang yang sangat kecil, karena tidak ada inode baru yang dibuat saat membuat tautan keras. Pada tautan lunak kami membuat file yang menghabiskan ruang (biasanya 4KB, tergantung pada filesystem)

Kinerja: Kinerja 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 di 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 tautan keras, seperti pada tautan keras, data aman, hingga semua tautan ke file dihapus, daripada di tautan lunak, Anda akan kehilangan data jika instance master file dihapus.


15
2017-09-06 23:48



Perhatikan bahwa ada juga tautan simbolis cepat untuk ukuran pathname hingga 64 byte. Masih membutuhkan satu inode, tetapi tidak mengkonsumsi ruang blok 4kb. - syockit


Kebingungan terjadi 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 pointer ke data pada disk. Akhir dari cerita. Ketika tautan keras terakhir (atau hanya) dihapus, maka OS mengetahui bahwa data tidak lagi diperlukan.

Dari sini Anda dapat melihat bahwa data aktual tidak pernah dihapus, hanya tautan kerasnya saja. Dan ketika cukup padat pada disk, data mungkin akan ditimpa oleh data file lain. Sampai saat itu, data dari file yang dihapus mungkin dipulihkan, tetapi agak sulit ditemukan tanpa tautan keras.

Simbol, seperti yang dijelaskan sebelumnya, cukup beri tahu Anda "ada file bernama <targetname> dalam folder bernama <targetfolder>". Mereka menunjuk ke hard link. Mereka tidak tahu di mana datanya. Link keras tahu itu.


7
2018-03-01 11:28