Selain semua jawaban lain, saya ingin menunjukkan properti penting berikut:
Softlink adalah referensi yang benar, yaitu itu adalah file kecil yang berisi nama path. Menyelesaikan softlink terjadi secara transparan ke aplikasi: jika suatu proses membuka file, katakan /this/path/here
yang merupakan symlink menunjuk ke /that/other/path
maka seluruh penanganan pembukaan /that/other/path
dilakukan oleh OS. Selanjutnya, jika /that/other/path
kebetulan menjadi symlink itu sendiri, maka ini juga sedang ditangani oleh OS. Bahkan, OS mengikuti rantai symlink sampai menemukan sesuatu yang lain (misalnya file biasa) atau sampai mencapai SYMLOOP_MAX
(lihat sysconf(3)
) banyak entri, dalam hal ini OS (lebih tepatnya: panggilan sistem yang sesuai) mengembalikan kesalahan dan menetapkan errno
untuk ELOOP
. Dengan demikian, referensi melingkar seperti xyz -> xyz
tidak akan menghentikan proses. (Untuk sistem Linux lihat path_resolution(7)
detail lengkapnya.)
Perhatikan bahwa suatu proses dapat memeriksa apakah pathname adalah symlink atau tidak melalui penggunaan lstat(2)
dan dapat memodifikasi atribut file-nya (disimpan dalam tabel inode) melalui lchown(2)
dan lain-lain (lihat symlink(7)
keseluruhan cerita.)
Sekarang, dalam hal izin Anda akan melihat bahwa symlink selalu memiliki izin 777 ( rwxrwxrwx
dalam notasi simbolis). Ini karena fakta bahwa izin lainnya dapat dilewati dengan mengakses file yang sebenarnya. Sebaliknya, 777 untuk symlink tidak membuat file symlink dapat diakses jika tidak dapat diakses sejak awal. Sebagai contoh, symlink dengan izin 777 menunjuk ke file dengan izin 640 tidak membuat file tidak dapat diakses oleh "lain" (masyarakat umum). Dengan kata lain, file xyz
dapat diakses melalui symlink jika dan hanya jika dapat diakses secara langsung, yaitu tanpa tipuan. Dengan demikian, izin symlink tidak memiliki efek keamanan apa pun.
Salah satu perbedaan utama yang terlihat antara hardlinks dan symlinks (alias softlinks) adalah bahwa symlinks bekerja di seluruh filesystems sementara hardlinks terbatas pada satu filesystem. Yaitu, file di partisi A dapat disinkronkan ke dari partisi B, tetapi tidak dapat di-hardlink dari sana. Ini jelas dari kenyataan bahwa hardlink sebenarnya adalah entri dalam direktori, yang terdiri dari nama file dan nomor inode, dan bahwa nomor inode unik hanya per sistem file.
Istilah hardlink sebenarnya agak menyesatkan. Sementara untuk sumber dan tujuan symlink dapat dibedakan dengan jelas (symlink memiliki entri sendiri dalam tabel inode), ini tidak berlaku untuk hardlink. Jika Anda membuat hardlink untuk file, entri asli dan hardlink tidak dapat dibedakan dalam hal apa yang ada di sana terlebih dahulu. (Karena mereka merujuk pada inode yang sama, mereka berbagi atribut file mereka seperti pemilik, izin, cap waktu dll.) Ini mengarah pada pernyataan bahwa setiap entri direktori sebenarnya adalah hardlink, dan bahwa menghubungkan file dengan cara hanya berarti membuat yang kedua ( atau ketiga, atau keempat ...) hardlink. Bahkan, setiap inode menyimpan penghitung untuk jumlah hardlink ke inode itu.
Terakhir, perhatikan bahwa pengguna biasa mungkin tidak memiliki direktori hardlink. Ini karena ini harus dilakukan dengan sangat hati-hati: pengguna yang tidak waspada dapat memperkenalkan siklus ke hierarki file hierarki yang ketat, yang semua alat biasa (seperti fsck
) dan OS itu sendiri tidak siap untuk menangani.