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

Терминал не отвечает на коды клавиши. Они обычно замечаются и интерпретируются приложением. Они приложение могут отправить a cup (курсор), или вниз упорядочивают (обычно пользование ncurses библиотекой).

37
14.07.2012, 14:00
2 ответа

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

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

Это - то же значение как то, возвращенное stat команда в "Ссылках".

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

Файл обычно имеет количество жесткой ссылки 1, но это изменяется, если жесткие ссылки сделаны с ln команда. См. Справочник Debian.

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

ln -l
ln tempFile2 tempHardLink
ln -l

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

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

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

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

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

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

34
27.01.2020, 19:36
  • 1
  • 2
    Так как это отображено между полномочиями и владением, Вы получаете впечатление это очень важный, но я никогда не использовал его. Когда это обычно необходимо? Telnet –  Emanuel Berg 14.07.2012, 16:15
  • 3
    Это неправильно. Это - число каналов, период. Для каталогов Вы имеете 2 для его записи в его родительском каталоге (точно так же, как любой файл) и . запись сам по себе, плюс одна для .. записи в каждом из его subdirs. –  Stéphane Chazelas 11.05.2013, 01:16
  • 4
    @StephaneChazelas Вся документация я нашел разговор о количестве жесткой ссылки (например, linuxgazette.net/issue35/tag/links.html). Также я нашел, что подобный вопрос задали в AskUbuntu (askubuntu.com/questions/19510 / …). Я буду проверять coreutils исходный код и видеть, могу ли я выяснить точный ответ. –  Damien 12.05.2013, 10:34
  • 5
    @EmanuelBerg, когда файловые системы были намного менее надежными, чем они теперь, и Вы работали над файловой системой, которую Вы разработали, и ls мог потратить 2 символа и дать Вам больше информации, и было нет stat(1) команда, ни find(1) ни fsck, ни символьные ссылки, это было, вероятно, намного более полезно, чем он, сегодня. Это не может быть изменено, не повреждая сценарии оболочки, устройства записи которых имеют долго мимо в /dev/null; Это был тот путь с тех пор, по крайней мере, 1979. –  msw 12.05.2013, 14:31

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

inode число (из которого Вы видите в выводе ls -i) индекс в той таблице.

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

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

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

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

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

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

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

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

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

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

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

Большинство Нельдов ограничивает создание дальнейшие ссылки на каталог, потому что они могут вызвать проблематичные циклы. Когда они действительно позволяют a link() на каталоге обычно только суперпользователь может сделать это.

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

То, что число каналов традиционно 2 плюс количество subdirs, имеет свое использование. Например, в:

find . -name '*.c' -print

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

9
27.01.2020, 19:36
  • 1
    +1, большой ответ :) Путем рассмотрения ls исходного кода я заметил, что номер канала был обновлен после вызова к статистике. Таким образом, команда статистики даст Вам значение ссылок для файла или каталога. –  Damien 12.05.2013, 11:56

Теги

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