File adalah inode dengan data meta di antaranya daftar penunjuk ke tempat menemukan data.
Agar dapat mengakses file, Anda harus menautkan ke direktori (anggap direktori sebagai direktori telepon, bukan folder), yaitu menambahkan satu atau lebih entri ke salah satu direktori untuk mengaitkan nama dengan file itu.
Semua tautan itu, nama file itu mengarah ke file yang sama. Tidak ada yang asli dan yang lainnya adalah tautan. Semuanya adalah titik akses ke file yang sama (inode yang sama) di pohon direktori. Ketika Anda mendapatkan ukuran file (lstat
panggilan sistem), Anda mengambil informasi (metadata yang dirujuk di atas) yang disimpan dalam inode, tidak masalah nama file mana, tautan mana yang Anda gunakan untuk merujuk ke file itu.
Sebaliknya, symlink adalah file lain (inode lain) yang isinya adalah jalur ke berkas tujuan. Seperti file lainnya, symlink tersebut harus ditautkan ke direktori (harus memiliki nama) agar Anda dapat mengaksesnya. Anda juga dapat memiliki beberapa tautan ke sebuah symlink, atau dengan kata lain, symlink dapat diberi beberapa nama (dalam satu atau beberapa direktori).
$ touch a
$ ln a b
$ ln -s a c
$ ln c d
$ ls -li [a-d]
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 a
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 b
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 c -> a
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 d -> a
Di atas nomor file 10486707 adalah file biasa. Dua entri dalam direktori saat ini (satu dengan nama a
, satu dengan nama b
) link ke sana. Karena jumlah tautan adalah 2, kami tahu tidak ada nama lain dari file itu di direktori saat ini atau direktori lainnya. File nomor 10502404 adalah file lain, kali ini bertipe symlink yang ditautkan dua kali ke direktori saat ini. Kontennya (target) adalah jalur relatif "a".
Perhatikan bahwa jika 10502404 ditautkan ke direktori lain selain direktori saat ini, biasanya akan mengarah ke file yang berbeda bergantung pada cara aksesnya.
$ mkdir 1 2
$ echo foo > 1/a
$ echo bar > 2/a
$ ln -s a 1/b
$ ln 1/b 2/b
$ ls -lia 1 2
1:
total 92
10608644 drwxr-xr-x 2 stephane stephane 4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10504186 -rw-r--r-- 1 stephane stephane 4 Aug 27 17:24 a
10539259 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:26 b -> a
2:
total 92
10608674 drwxr-xr-x 2 stephane stephane 4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10539044 -rw-r--r-- 1 stephane stephane 4 Aug 27 17:24 a
10539259 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:26 b -> a
$ cat 1/b
foo
$ cat 2/b
bar
File tidak memiliki nama yang terkait dengannya selain di direktori yang menautkannya. Ruang yang diambil oleh nama mereka adalah entri di direktori tersebut, itu diperhitungkan dalam ukuran file/penggunaan disk direktori.
Anda akan melihat bahwa panggilan sistem untuk menghapus file adalah unlink
. Yaitu, Anda tidak menghapus file, Anda memutuskan tautannya dari direktori tempat mereka dirujuk. Setelah diputuskan dari direktori terakhir yang memiliki entri ke file tertentu, file tersebut kemudian dihancurkan (selama tidak ada proses yang memilikinya dibuka).
Tautan keras pada dasarnya adalah file asli. Jadi, ukuran yang Anda lihat dilaporkan adalah ukuran file yang ditautkan. Itu lembut tautan yang hanya menggunakan ruang namanya (agak).
Sejauh menyangkut sistem file, tautan keras dan aslinya adalah hal yang sama, keduanya mengarah ke inode yang sama sehingga ukuran yang dilaporkan sama.