Apakah tautan keras setara dengan pintasan Windows?

52

Wikipedia mendefinisikan tautan keras sebagai:

entri direktori yang mengaitkan nama dengan file pada sistem file. (Direktori itu sendiri adalah jenis file khusus yang berisi daftar entri semacam itu.) Istilah ini digunakan dalam sistem file yang memungkinkan banyak tautan keras dibuat untuk file yang sama.

Saya bertanya-tanya apakah konsep hard link setara dengan konsep Windows Shortcut .

Jika tautan keras tidak setara dengan pintasan, lalu apa fitur Windows terdekat dengan tautan keras?

Kutu buku komputer
sumber
1
Sebenarnya ada beberapa referensi hebat dari halaman wiki yang Anda bagikan.
eccentricSam
8
Microsoft NTFS mendukung hardlink dan sangat mirip dengan unix hardlink. Saya pikir cara pintas adalah objek khusus untuk lingkungan windows tetapi mereka tidak terkait dengan organisasi filesytem bertentangan dengan hardlink nyata
Kiwy
Tautan berikut memberikan penjelasan yang baik: comptb.cects.com/…
3
Saya pikir paralelnya menyesatkan, Shortcut adalah "antarmuka" menghubungkan hanya file dengan informasi teks tentang target yang ditafsirkan oleh antarmuka dan bukan oleh sistem file. Dari baris perintah mereka tidak benar-benar menunjuk ke sesuatu dalam arti filesystem. Windows (atau lebih baik dikatakan NTFS) memiliki symlink yang tepat en.wikipedia.org/wiki/NTFS_symbolic_link yang bukan merupakan pintasan atau hardlink. Sebenarnya saya menggunakannya di Windows untuk memiliki folder Dropbox di mana saja, ini tidak dapat dilakukan dengan pintasan.
alfC
5
File shortcut Windows sangat mirip dengan Linux .desktop file. Symlinks Linux dan hard link adalah hal yang sama sekali berbeda yang terkadang melayani tujuan yang sama.
mikebabcock

Jawaban:

113

Tidak, tautan keras sama sekali berbeda. Tautan lunak lebih dekat dengan pintasan Windows (meskipun ada perbedaan penting, tautan simbolis lebih mirip dengan pintasan windows daripada tautan keras). Tautan keras adalah hal yang berbeda dan Anda hampir tidak pernah membutuhkannya.

Secara singkat, tautan lunak dibuat dengan perintah ini:

ln -s foo bar

Jika Anda menjalankan ls -l, Anda akan melihat:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

The ->berarti bahwa barini adalah link ke foo. Jadi, membuka bar, dengan editor teks misalnya, sebenarnya akan membuka file yang terpisah foo. Namun, menghapus barhanya akan menghapus jalan pintas, itu tidak akan mempengaruhi file foo.

Di lain pihak, tautan keras dibuat dengan perintah ini:

ln foo bar

Jika sekarang Anda jalankan ls -l, tidak ada indikasi hubungan antara file:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Tetapi — dan ini sangat penting — itu sebenarnya adalah file yang sama . File pada sistem file Unix disimpan menggunakan inode ; inode pada dasarnya adalah cara filesystem memetakan nama file ke lokasi tertentu pada hard drive fisik. Jadi, tautan keras adalah file yang menunjuk ke inode yang sama dengan targetnya. Cara lain untuk meletakkan ini adalah bahwa semua file sebenarnya merupakan tautan keras yang menunjuk ke inode mereka. Membuat tautan keras ke sebuah file hanya menciptakan pointer baru (file) pada sistem file yang menunjuk ke inode yang sama. Setiap inode dapat memiliki beberapa file yang menunjuk padanya atau satu, atau tidak sama sekali.

Untuk memahami ini dengan lebih jelas, gunakan ls -iyang menunjukkan inode yang terkait dengan file. Mari buat tautan lunak dan tautan keras dan lihat apa yang terjadi:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Sekarang, periksa inode mereka:

masukkan deskripsi gambar di sini

Seperti yang Anda lihat di atas, baik foodan HardLinkToFoomemiliki inode yang sama (16648029) sementara SoftLinkToFoo memiliki satu yang berbeda (16.648.036).

Apa yang terjadi jika kita mengubah nama foodengan mv foo bar?

masukkan deskripsi gambar di sini

Warna merah menunjukkan tautan lunak yang rusak, yang targetnya tidak dapat ditemukan lagi. Ini karena tautan lunak mengarah ke nama file, bukan inode-nya. Perhatikan bahwa meskipun mengubah nama, inode tetap sama sehingga hardlink baik-baik saja, inode tetap berfungsi.

Singkatnya, tautan keras sebenarnya adalah dua manifestasi dari file yang sama ; mereka adalah pointer ke bagian disk yang sama. Tautan lunak hanyalah pintasan. Untuk mengambil analogi dunia nyata, hardlink seperti dua nomor telepon yang berbeda untuk saluran telepon yang sama dan tautan lunak seperti memiliki dua saluran telepon yang berbeda di rumah yang sama.

terdon
sumber
6
@ Kiwy Kebalikannya: symlink absolut gagal dalam banyak cara berbeda (segera setelah Anda memindahkan data, memasangkannya ke tempat yang berbeda, mendukungnya, ...) dan sebaiknya dihindari.
Gilles 'SANGAT berhenti menjadi jahat'
3
Perlu juga dicatat bahwa menghapus (melalui rmatau unlink()) tautan keras hanya akan mengurangi jumlah tautan sampai jumlah tautan mencapai nol, ketika blok yang ditempati oleh isi file dilepaskan. Saya tidak yakin mengatakan "tautan keras sebenarnya adalah dua contoh dari file yang sama" benar-benar benar, karena kedua nama menunjuk ke inode yang sama, dan dengan demikian konten yang sama, daripada ada dua contoh dari file itu sendiri di masuk akal.
Emmet
7
Perhatikan bahwa pintasan Windows adalah file yang digunakan oleh shell dan dengan demikian dapat melakukan hal-hal yang diketahui shell, tetapi tidak pada sistem file. Misalnya Anda dapat membuat pintasan ke ruang nama shell (mis. Panel Kontrol, Komputer, dll.), Atau Anda dapat membuat pintasan ke aplikasi yang belum diinstal (yang akan dipasang saat pertama kali digunakan). Hal-hal itu tidak memiliki padanan langsung dalam dunia sistem file.
Joey
2
Saya suka jawaban ini tetapi sebenarnya sangat buruk dalam memahami apa itu shortcut Windows. @Shaakunthala di bawah ini memiliki respons yang lebih baik karena pintasan Windows lebih mirip dengan file .desktop Linux daripada symlink.
mikebabcock
18

Ada penjelasan yang bagus tentang apa itu tautan lunak dan keras, tetapi satu hal perlu diklarifikasi.

Jendela pintas yang setara atau mirip dengan baik soft link atau link keras . Pada level sistem file, mereka hanyalah file. Shell yang memahami struktur mereka dan menafsirkannya sebagai tautan. Pintasan Windows juga dapat menunjuk ke objek dalam ruang nama shell yang tidak terkait dengan sistem file (printer, item panel kontrol, folder virtual).

Cara pintas Windows, selain nama objek sistem file, berisi informasi berikut: PIDL ("path" biner buram dalam ruang nama shell), deskripsi, hotkey, ikon, direktori kerja. Windows juga menambahkan pengidentifikasi objek NTFS jika sistem file NTFS digunakan, untuk memperbaiki pintasan yang rusak.

Setara dengan jalan pintas Windows adalah file .desktop . Lihat pertanyaan ini pada SuperUser: Apakah ada yang setara dengan .lnk di Linux?

Athari
sumber
6

Tidak. Di Linux semuanya berjalan berbeda.

Setiap file diwakili oleh objek yang disebut 'inode'. Setiap inode memiliki nomor (ID) yang terkait dengannya.

Seperti yang kita tahu manusia tidak pandai mengingat angka tetapi nama. (Begitulah cara buku telepon berevolusi)

Oleh karena itu, nama file muncul di gambar untuk memberikan setiap inode nama yang dapat dibaca manusia. Pada dasarnya, hardlink mengikat nama file ke inode. Sebuah inode dapat memiliki banyak hardlink. Jika tidak ada hardlink yang tersedia untuk inode tertentu, ruang disk yang digunakan oleh inode dapat dialokasikan kembali untuk file baru. Yang berarti, setidaknya satu hardlink harus ada untuk setiap file. Nama file (divisualisasikan sebagai nama file / ikon yang Anda lihat di browser file) itu sendiri adalah hardlink.

Di Windows, pintasan adalah file terpisah (* .lnk file). Ini berisi informasi tentang file asli (dimengerti path file). Dalam persepsi Linux, pintasan Windows akan menjadi inode lain yang di-hardlink ke nama file yang diakhiri dengan '.lnk'.

Shaakunthala
sumber
3
NTFS sebenarnya bekerja sangat banyak seperti ini. File adalah entri dalam MFT, dan entri direktori hanya memetakan nama file ke ID file. Ini mendukung hardlink dan, sejak 2008/7 / Vista (?), Bahkan symlink. Pada titik ini, perbedaan terbesar adalah budaya.
cao
2

Pada Windows Anda dapat membuat hardlink juga jika Anda memiliki sistem file NTFS.

fsutil hardlink create target_file source_file

File-file tersebut harus berada di drive logis yang sama.

Menakuti
sumber
Itu benar - NTFS mendukung hardlink juga. Seringkali alat mengharuskan Anda memiliki hak admin untuk membuatnya. Tentang "drive logis yang sama" - akan lebih tepat untuk mengatakan, mereka harus berada di sistem file yang sama. Sebuah drive logis bisa apa saja, termasuk huruf drive yang diciptakan oleh substperintah. Suatu alat mungkin tidak tahu / peduli untuk ini dan karenanya menolak untuk membuat hardlink. Suatu hal yang sangat berguna adalah Link Shell Extension yang memungkinkan penjelajah untuk membuatnya.
Tobias
1

Perbedaan besar, tautan keras tidak dapat dibuat untuk folder, tetapi untuk file.

Pintasan dapat dibuat untuk folder, jadi Anda tidak bisa mengatakan itu setara.

Pertanyaan Anda haruslah perbedaan antara tautan simbolik atau tautan lunak dan pintasan .

sesuai dengan ini:

Tautan simbolis adalah level sistem file, dan semuanya melihatnya sebagai file asli. Aplikasi tidak memerlukan dukungan khusus untuk menggunakan tautan simbolik.

"Pintasan" hanyalah file biasa yang memiliki referensi ke file atau direktori tujuan.

Jadi ketika Anda mengklik pintasan akan mengubah direktori Anda ke file yang sebenarnya, sedangkan tautan lunak akan merujuk ke lokasinya seolah-olah itu adalah file yang sebenarnya, untuk itu di Linux Anda dapat menggunakan terminal dan cd untuk tautan simbolis sementara Anda tidak dapat cd ke pintasan .

Pintasan Windows dan peluncur Linux (menunjuk ke beberapa lokasi) akan sama.

nux
sumber
2
Apa? Softlink hanyalah file, meskipun aneh, mereka juga mengambil inode misalnya. Mereka TIDAK diperlakukan sebagai yang asli (itu adalah hardlink). Walaupun memang benar bahwa hardlink tidak diperbolehkan untuk direktori di sebagian besar OS, ini hanyalah fitur keamanan dan ada pengecualian untuk ini (misalnya mesin waktu OSX). Dan tentu saja Anda dapat cd ke pintasan (saya berasumsi maksud Anda pintasan Windows karena seperti yang Anda katakan Anda bisa cd ke soflink).
terdon
1
Anda yakin dapat menggunakan cmd ke cd untuk pintasan.
nux
1
Saya baru saja menjalankan VM Windows saya dan membuat pintasan ke folder di Desktop saya, pintasan windows sangat mirip (jika tidak identik) dengan symlink. Meskipun Anda tidak dapat melakukan cd ke mereka menggunakan cmd.exe karena alasan tertentu, Anda dapat membuat .lnk ke direktori dan menggunakannya melalui explorer.
terdon
1
pemilih harus memberikan alasan untuk melakukan downvoting
nux
5
Maaf, masih belum benar. Symlink adalah file yang berisi target mereka sebagai teks biasa (lihat di sini ), symlink tidak diperlakukan sebagai aslinya, itulah perbedaan keseluruhan antara symlink dan hardlink. Peluncur Linux (saya kira maksud Anda file .desktop) tidak ada hubungannya dengan ini sama sekali, mereka sama sekali berbeda. Seperti yang Anda katakan sendiri, pintasan Windows dapat mengarah ke file (termasuk program) dan folder (mac dan windows memiliki folder, Linux memiliki direktori). File desktop hanya memungkinkan Anda untuk meluncurkan program. Mereka tidak terhubung di mana pun.
terdon