Каково количество между разрешением файла и владельцем в выводе команды ls -l?

Вывод команды ls -l дает следующий результат:

введите описание изображения здесь>> </p>

<p> Каково числовое поле между разрешением на файл и владельцем? то есть те, которые <strong> 1, 1, 1 и 2 </strong>? Я проверил <code>---- +: = 1 =: + ----</code>, но это не объясняет. </p>

<p> [EDIT]
Я думал, что это количество файлов в каталоге, но это не так. См. Изображение. «tempFolder» имеет 3 файла, но все равно показывает «2» </p></body></html>

ls
28 голосов | спросил KMC 14 J000000Saturday12 2012, 14:37:42

2 ответа


29

Примечание: отредактировано после комментария @StephaneChazelas

Первое число вывода ls -l после блока разрешения количество жестких ссылок .

Это то же значение, что и значение, возвращаемое командой stat в «Ссылки».

  

Этот номер является количеством ссылок на hardlink файла, если обратиться к   файл или количество содержащихся записей в каталоге при обращении   в каталог.

A файл обычно имеет число жестких ссылок 1, но это изменяется, если жесткие ссылки создаются с помощью ln. См. Справочное руководство по Debian .

В вашем примере добавление жесткой ссылки для tempFile2 увеличит количество ссылок:

ln -l
ln tempFile2 tempHardLink
ln -l

Оба tempFile2 и tempHardLink будут иметь количество ссылок в 2.

Если вы выполняете те же упражнения с символической ссылкой (ln -s tempFile2 tempSymLink), значение счета не будет увеличиваться.

A каталог будет иметь минимальное количество 2 для '.' (ссылка на себя) и для запись в каталог родителя.

В вашем примере, если вы хотите увеличить количество ссылок tempFolder , создайте новый каталог, и число будет расти.

ls -l tempFolder
mkdir tempFolder/anotherFolder
ls -l tempFolder

Ссылка из anotherFolder / на tempFolder / (которая является .. ) будет добавлено к счету.

ответил Damien 14 J000000Saturday12 2012, 14:57:00
6

В Unix, как правило, файл представляет собой некоторую запись в таблице файлов. Существуют разные типы файлов: обычные файлы, устройства, ссылки symbolik, двери, трубы, сокеты, каталоги ...

Номер inode (который вы можете увидеть в выводе ls -i) - это индекс в этой таблице.

Теперь вы не получаете доступ к файлам с помощью inode , а через путь . путь - это цепочка записей . Вы заметите, что мы говорим не о папке , а о каталоге здесь. Потому что это каталог (подумайте о телефонной книге).

Каталог - это особый вид файла, который дает имена нескольким инодам. Запись в каталоге - это сопоставление от имени к inode.

Данный файл (inode) может иметь более одного имени в одном каталоге (например, может быть более одного имени по номеру телефона), а также может иметь имена (записи) в нескольких каталогах. Они называются ссылками , также известными как жесткие ссылки , чтобы различать soft links (особый тип файла, который является указателем на путь).

Файл (inode) отслеживает количество ссылок (записей в любом каталоге), которое у него есть, так что, когда число достигает 0 (когда оно отвязано от последнего каталога, на который оно ссылалось), это освобождается.

Это номер (количество ссылок), отображаемый в выводе ls -l.

Если в первый раз создается файл без каталога (с помощью open или creat (или bind или mknod для некоторых типов файлов) системные вызовы), это делается путем предоставления пути к новому файлу (например, "/a/b"). Затем происходит новый файл и назначается индекс inode, и новая запись добавляется в каталог, связанный с именем "a" в "/". Это начальная ссылка , поэтому количество ссылок равно единице.

Дополнительные ссылки могут быть добавлены позже с системным вызовом link() (ln). И ссылки можно удалить с помощью системного вызова unlink() (rm).

Вы заметите, что файлы типа directory обычно имеют число ссылок больше или равно 2.

Теперь, когда вы создаете каталог, вы вызываете системный вызов mkdir(). Что-то вроде mkdir("/a/b"). Затем он выделяет новый файл каталога типов. В этом новом каталоге он автоматически создает две записи:

  • "." ( точка для каталога ). Это ссылка на себя. Таким образом, счетчик ссылок теперь равен 1.
  • ".." (для каталога ). Какая ссылка на "/a". Таким образом, количество ссылок "/a" увеличивается на один

Затем этот новый каталог связан с "/a" (запись добавляется в "/a"), поэтому его количество ссылок теперь равно 2. Если создан каталог "/a/b/c" из-за записи ".." в "/a/b/c", счетчик ссылок "/a/b" станет 3.

Большинство Unices ограничивают создание дополнительных ссылок на каталог, потому что они могут вызвать проблематичные циклы. Когда они разрешают ---- +: = 25 =: + ---- в каталоге, обычно это может сделать только суперпользователь.

Некоторые файловые системы, такие как link(), отходят от этой традиционной структуры каталогов. Вы заметите, что ссылки ссылок на каталоги в файловых системах btrfs всегда совпадают, хотя эти каталоги содержат код btrfs с тем же номером inode, что и они в них.

Тот факт, что число ссылок традиционно2, а также количество поддиректоров. Например, в:

"."

Если find . -name '*.c' -print не содержит поддиректоров, но содержит миллионы файлов. Проверяя количество ссылок ., . может знать, что нет субдира. Таким образом, все find должно читать содержимое каталога и сообщать записи, заканчивающиеся на find (например, .c на несколько мегабайтных файлов, без особого труда). В противном случае grep '\.c$' нужно будет проверить тип каждого файла, чтобы увидеть, есть ли в нем каталоги (в результате чего find). Конечно, такая оптимизация не работает на lstat() (хотя в современных версиях Linux тип файлов также хранится в запись каталога для некоторых файловых систем (в том числе btrfs) и возвращена btrfs, используемый для извлечения списка записей в каталоге, поэтому getdents(2) по-прежнему не требуется).

ответил Stéphane Chazelas 12 Maypm13 2013, 12:40:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132