Apa yang dilambangkan oleh “ukuran” suatu symlink dalam output ls?

11

Saya akan mulai dengan contoh:

$ ls -l dir1
total 4
-rw-r--r-- 4 maythux maythux 1650 2008-01-10 16:33 file
lrwxrwxrwx 1 maythux maythux  7 2008-01-15 15:17 symfile -> file

symfile adalah symlink dari file file

Juga seperti yang saya tahu 1650akan menjadi ukuran file file, tetapi berapa nomor 7yang diletakkan di bawah kolom ukuran?

EDIT: Berjalan du:

$ du -sh symfile
0   symfile

Jadi bagaimana Anda bisa membuktikan bahwa 7 adalah ukuran symlink ?!


MEMPERBARUI:

coba ini

$ touch file
$ du -sh file
0 file
$ ls -l file
-rw-rw-r-- 1 maythux maythux 0 Jun  1 19:42 file

perhatikan bahwa ukuran juga ada di sini 0.

Sekarang:

$ ln -s file sym
$ du -sh sym
0 sym
$ ls -l sym
lrwxrwxrwx 1 maythux maythux 4 Jun  1 19:44 sym -> file

Jadi, saya kira itu bukan hanya ukuran

Maythux
sumber
2
The 7tergantung pada filesystem (dan parameter mungkin lainnya). Ini 7 pada ext4, tetapi bisa 13 pada btrfs dan 3 pada tmpfs.
muru
1
Ini adalah ukuran, tetapi ukurannya tergantung pada sistem file (btrf mungkin menyimpan lebih banyak metadata daripada ext4, dan ext4 lebih dari tmpfs). Anda dapat mengisi disk Anda dengan tautan. Saya hanya mengatakan, jangan terkejut jika Anda melihat nomor yang berbeda pada sistem file yang berbeda.
muru
1
Entri direktori Anda memiliki ukuran minimum untuk itu, lebih besar dari yang dibutuhkan. Buat entri yang cukup dan ukuran direktori akan bertambah. Periksa dengan: mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
muru

Jawaban:

13

Tautan simbolik mengambil ruang yang diperlukan untuk menyimpan nama dan target plus beberapa byte untuk metadata lainnya.

Jadi itu ukuran symlink.

Mengenai ukuran dari du -sh: du hanya melihat pada berapa banyak blok yang dialokasikan, dan karenanya dapat menunjukkan 0. statdan ls -llebih baik dalam menunjukkan ukuran dalam hal itu.

Rinzwind
sumber
lalu mengapa du -sh symfilememberi 0? -
Maythux
du hanya melihat berapa banyak blok yang dialokasikan, dan mungkin menunjukkan 0. stat dan ls-l lebih pintar.
Rinzwind
Silakan baca pembaruan
Maythux
Lihat jawaban saya: itu adalah nama, target dan beberapa metadata. Secara total itu membuat untuk 7 byte. OS lain menyimpan metadata lain sehingga ukurannya berbeda.
Rinzwind
Pertanyaannya adalah "Bagaimana Anda bisa MEMBUKTIKANNYA?"
Pilot6
5

Ini adalah ukuran symlink dalam byte.

Beberapa sistem file memiliki area kecil di dalam entri direktori yang digunakan untuk awal file, yang secara signifikan mempercepat pemrosesan symlink dan pembacaan kecil (think file) dengan mengorbankan entri direktori yang lebih besar.

Jika seluruh konten symlink masuk ke entri direktori, maka tidak ada blok data yang dialokasikan, dan duukurannya menunjukkan nol. Jika symlink tidak cocok, ruang dialokasikan secara normal (jadi Anda berakhir dengan alokasi blok tunggal), yang dapat dioptimalkan oleh sistem file menggunakan penggabungan ekor (tetapi tidak ada API untuk dumengetahui hal ini).

The ext4filesystem melakukan optimasi ini untuk symlink saja, kriteria ditemukan dalam fungsi ext4_inode_is_fast_symlink .

Simon Richter
sumber
" Beberapa sistem file ... " - jawaban Anda akan ditingkatkan jika Anda mencantumkan sistem file umum dengan fitur ini (dan yang umum tanpa).
RM
1

Ini adalah ukuran file symlink dalam bytes.

File symlink adalah file normal yang menyimpan data mengenai ke mana file itu diarahkan. Dalam ext 4 itu adalah 7 byte.

Pilot6
sumber
ukuran apa? apakah byte atau bit atau apa?
Maythux
Ukuran dalam byte ..
Pilot6
1
lalu mengapa du -sh symfilememberi 0?
Maythux
du tidak memiliki file yang sangat kecil. Cobalah untuk menggunakan du di beberapa file 99 byte. Ini akan menampilkan 4.0K.
Pilot6
itu pioint saya juga maka itu setidaknya harus menunjukkan 4k untuk symlink karena dalam konsep OS itu mendaftarkan sebuah cluster untuk file ini
Maythux