Що означає "розмір" симпосилання у висновку ls?


11

Почну з прикладу:

$ 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 є символьним посиланням файлу file

Також, як я знаю, 1650був би розмір файлу file, але яке число, 7яке закладається під стовпець розміру?

EDIT: Запуск du:

$ du -sh symfile
0   symfile

То як би ви могли довести, що 7 - це розмір симпосилання ?!


ОНОВЛЕННЯ:

спробуйте це

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

зауважте, що розмір також тут 0.

Зараз:

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

Отже, я вважаю, що це не лише розмір


2
7Залежить від файлової системи (і , можливо , інших параметрів). Це 7 на ext4, але може бути 13 на btrfs та 3 на tmpfs.
муру

1
Це розмір, але розмір залежить від файлової системи (імовірно, що btrfs зберігає більше метаданих, ніж ext4, а ext4 більше, ніж tmpfs). Ви можете заповнити свій диск посиланнями. Я просто кажу, не дивуйтеся, якщо ви бачите інше число в іншій файловій системі.
муру


1
Запис у вашому каталозі має мінімальний розмір, більший, ніж потрібно. Зробіть достатню кількість записів, і розмір каталогу збільшиться. Перевірте з: mkdir foo; ls -ld foo; for i in {1..1000}; do ln -s foo/bar foo/$i; done; ls -ld foo.
муру

Відповіді:


13

Символічні посилання займають приміщення, яке потрібно для зберігання імені та цілі плюс кілька байтів для інших метаданих.

Отже, це розмір симпосилання.

Щодо розміру від du -sh: du лише дивиться на те, скільки блоків виділено, і так може відображатися 0. statі ls -lкраще показувати розмір у цьому відношенні.


то чому du -sh symfileдає 0? -
Maythux

du дивиться лише на те, скільки блоків виділено, і так може відображатися 0. stat і ls -l є розумнішими.
Rinzwind

Прочитайте оновлення
Maythux

Дивіться мою відповідь: це ім'я, ціль та деякі метадані. Всього він складає 7 байт. Інші ОС зберігають інші метадані, і тому вони матимуть різний розмір.
Rinzwind

Питання було "Як це можна довести?"
Пілот6

5

Це розмір симпосилання в байтах.

Деякі файлові системи мають невелику область всередині запису в каталозі, який використовується для початку файлу, що значно прискорює обробку символьних посилань та невеликих читань (думаю file) за рахунок великих записів у каталозі.

Якщо весь вміст символьної посилання вписується у запис каталогу, то блоки даних не виділяються, а duрозмір відображається як нуль. Якщо символьна посилання не підходить, простір виділяється зазвичай (таким чином, ви отримуєте єдиний розподіл блоку), який може бути оптимізований файловою системою за допомогою хвостового злиття (але API duне знає про це).

ext4Файлова система виконує цю оптимізацію для сімлінок тільки критерії знаходяться в функції ext4_inode_is_fast_symlink .


" Деякі файлові системи ... " - ваша відповідь буде покращена, якби ви перерахували загальні файлові системи з цією функцією (і будь-які поширені без них).
RM

1

Це розмір файлу symlink в байтах.

Файл Symlink - це звичайний файл, який зберігає дані про те, куди вказується файл. У ext 4 це 7 байт.


розмір в чому? це байти чи біти чи що?
Maythux

Розмір у байтах ..
Pilot6

1
то чому du -sh symfileдає 0?
Maythux

du не тисне на дуже маленькі файли. Спробуйте використовувати du у файлі з 99 байтами. Він покаже 4.0K.
Пілот6

це мій pioint, тоді він повинен принаймні показати 4k для symlink, оскільки в концепції ОС він реєструє кластер для цього файлу
Maythux
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.