Что представляет собой «размер» символической ссылки в выводе 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, которое положено под столбцом размера?

РЕДАКТИРОВАТЬ: Бег 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

Итак, я полагаю, это не только размер

Maythux
источник
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

Символические ссылки занимают место, необходимое для хранения имени и цели, а также несколько байтов для других метаданных.

Так что это размер символической ссылки.

Относительно размера from du -sh: du только смотрит на то, сколько блоков выделено, и поэтому может показывать 0. statи ls -lлучше показывает размер в этом отношении.

Rinzwind
источник
тогда почему du -sh symfileдает 0? -
Maythux
du смотрит только на то, сколько блоков выделено, и поэтому может показывать 0. stat и ls -l умнее.
Rinzwind
Пожалуйста, прочтите обновление
Maythux
Смотрите мой ответ: это имя, цель и некоторые метаданные. Всего это составляет 7 байтов. Другие ОС хранят другие метаданные и поэтому будут иметь другой размер.
Rinzwind
Вопрос был "Как вы можете доказать это?"
Pilot6
5

Это размер символической ссылки в байтах.

Некоторые файловые системы имеют небольшую область внутри записи каталога, которая используется для начала файла, что значительно ускоряет обработку символических ссылок и небольших операций чтения (думаю file) за счет более крупных записей каталога.

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

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

Саймон Рихтер
источник
« Некоторые файловые системы ... » - ваш ответ будет улучшен, если вы перечислите общие файловые системы с этой функцией (и любые распространенные без).
RM
1

Это размер файла символической ссылки в байтах.

Файл символической ссылки - это обычный файл, в котором хранятся данные о том, где находится файл, на который он указывает. В ext 4 это 7 байтов.

Pilot6
источник
размер в каком? это байты или биты или что?
Maythux
Размер в байтах ..
Pilot6
1
тогда почему du -sh symfileдает 0?
Maythux
Ду не печатает с очень маленькими файлами. Попробуйте использовать du в 99-байтовом файле. Это покажет 4.0K.
Pilot6
это мой pioint также, тогда он должен по крайней мере показать 4k для символической ссылки, поскольку в концепции ОС он регистрирует кластер для этого файла
Maythux