File adalah inode dengan meta data di antaranya daftar pointer ke mana menemukan data.
Agar dapat mengakses file, Anda harus menautkannya ke direktori (anggap direktori sebagai direktori ponsel, bukan folder), yaitu menambahkan satu atau lebih entri ke salah satu direktori lebih untuk menghubungkan nama dengan file itu.
Semua tautan itu, nama-nama file itu menunjuk ke file yang sama. Tidak ada satu yang asli dan yang lainnya adalah tautan. Mereka semua adalah titik akses ke file yang sama (inode yang sama) di pohon direktori. Ketika Anda mendapatkan ukuran file ( lstat
system call), Anda sedang mengambil informasi (metadata yang disebutkan 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 merupakan jalur ke file target. Seperti file lainnya, symlink tersebut harus ditautkan ke direktori (harus memiliki nama) sehingga Anda dapat mengaksesnya. Anda juga dapat memiliki beberapa tautan ke symlink, atau dengan kata lain, symlink dapat diberikan beberapa nama (dalam satu atau lebih 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 di direktori saat ini (satu dengan nama a
, satu dengan nama b
) tautannya. Karena jumlah tautannya adalah 2, kita tahu tidak ada nama lain dari file itu di direktori saat ini atau direktori lainnya. File nomor 10502404 adalah file lain, kali ini jenis symlink ditautkan dua kali ke direktori saat ini. Kontennya (target) adalah jalur relatif "a".
Perhatikan bahwa jika 10502404 ditautkan ke direktori lain dari yang sekarang, biasanya akan menunjuk ke file yang berbeda tergantung pada bagaimana itu diakses.
$ 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 dikaitkan dengan mereka selain dari direktori yang menautkannya. Ruang yang diambil oleh nama mereka adalah entri dalam direktori tersebut, itu diperhitungkan dalam ukuran file / penggunaan disk direktori.
Anda akan melihat bahwa panggilan sistem untuk menghapus file adalah unlink
. Artinya, Anda tidak menghapus file, Anda memutuskan tautannya dari direktori tempat mereka dirujuk. Setelah dihapus tautan dari direktori terakhir yang memiliki entri ke file yang diberikan, file itu kemudian dihancurkan (selama tidak ada proses memilikinya dibuka).
lstat
panggilan sistem yang mendapatkan ukuran mereka.Hard link pada dasarnya adalah file asli. Jadi, ukuran yang Anda lihat dilaporkan adalah ukuran file yang ditautkan. Ini adalah tautan lunak yang hanya mengambil ruang nama mereka (agak).
Sejauh menyangkut filesystem, hard link dan aslinya adalah hal yang sama, mereka menunjuk ke inode yang sama sehingga ukuran yang sama dilaporkan.
sumber
/
harus disimpan dalam dirinya sendiri, seolah-olah Anda lakukancd ..
di/
Anda tinggal di/
.