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

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


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лучше показывает размер в этом отношении.


тогда почему 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 байтов.


размер в каком? это байты или биты или что?
Maythux

Размер в байтах ..
Pilot6

1
тогда почему du -sh symfileдает 0?
Maythux

Ду не печатает с очень маленькими файлами. Попробуйте использовать du в 99-байтовом файле. Это покажет 4.0K.
Pilot6

это мой pioint также, тогда он должен по крайней мере показать 4k для символической ссылки, поскольку в концепции ОС он регистрирует кластер для этого файла
Maythux
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.