В Linux, когда вы создаете папку, она автоматически создает две жесткие ссылки на соответствующий индекс. Одна - папка, которую вы просили создать, другая - .
специальная папка, эта папка.
Пример:
$ mkdir folder
$ ls -li
total 0
124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 folder
$ ls -lai folder
total 0
124596048 drwxr-xr-x 2 fantattitude staff 68 18 oct 16:52 .
124593716 drwxr-xr-x 3 fantattitude staff 102 18 oct 16:52 ..
Как вы можете видеть, оба folder
и .
внутри folder
имеют одинаковый номер инода (показано с -i
опцией).
Есть ли способ удалить эту специальную .
жесткую ссылку?
Это только для экспериментов и любопытства.
Также я думаю, что ответ может относиться и к ..
специальному файлу.
Я пытался заглянуть в rm
человека, но не мог найти способ сделать это. Когда я пытаюсь удалить .
все, что я получаю, это:
рм: "." и ".." нельзя удалить
Мне действительно любопытно, как все эти вещи работают, поэтому не воздерживайтесь от подробного описания предмета.
РЕДАКТИРОВАТЬ: Может быть, я не был ясен с моим постом, но я хочу понять основной механизм, который отвечает за .
файлы и причины, почему они не могут быть удалены.
Я знаю, что стандарт POSIX запрещает папку с менее чем 2 жесткими ссылками, но на самом деле не понимаю, почему. Я хочу знать, возможно ли это сделать в любом случае.
источник
Ответы:
Технически возможно удалить
.
, по крайней мере, на файловых системах EXT4. Если вы создадите образ файловой системыtest.img
, смонтируете его и создадитеtest
папку, а затем снова размонтируете ее, вы можете отредактировать ее, используяdebugfs
:debugfs
не жалуется и покорно удаляет.
запись каталога в файловой системе.test
Каталог еще годен к употреблению, с одной неожиданностью:показывает только
так
.
действительно прошло. Тем не менееcd .
,ls .
, доpwd
сих пор ведут себя как обычно!Ранее я проводил этот тест с использованием
rmdir .
, но он удаляет inode каталога ( огромное спасибо BowlOfRed за указание на это ), который оставляет висящуюtest
запись каталога и является реальной причиной возникших проблем. В этом случаеtest
папка становится непригодной для использования; после установки изображения, бегls
производити журнал ядра показывает
Запуск
e2fsck
в этой ситуации на изображении полностью удаляетtest
каталог (его индекс удален, поэтому восстановить нечего).Все это показывает, что
.
существует как конкретная сущность в файловой системе EXT4. Из кода файловой системы в ядре у меня сложилось впечатление, что оно ожидает.
и..
существует, и предупреждает, если они этого не делают (см.namei.c
), Но с помощьюunlink .
теста на основе я не увидел этого предупреждения.e2fsck
не любит отсутствующую.
запись в каталоге и предлагает ее исправить:Это воссоздает
.
запись каталога.источник
.
папка действительно существует внутри ФС, и инструменты ожидают, что она будет работать правильно.mount
илиls
). Я не видел, возникают ли другие проблемы.rmdir .
фактически уничтожилtest
и оставил это как висячую запись каталога, которая, как вы ожидаете, вызовет проблемы. Я проверюunlink
и обновлю свой ответ!Нет возможности удалить эту запись каталога.
.
Ввода означает «этот каталог», то..
средство ввода «этого каталог родительского каталог». На самом деле это не жесткие ссылки, просто структура каталогов создается / представляется.источник
ls
автоматически показывают или другие инструменты, что мне не кажется реалистичным.Как описано в заметках Lion по исходному коду Unix 6В ранних версиях Unix был дисковый файл, в котором и файлы, и каталоги были представлены на диске структурами inode. Был специальный бит, который указывал, что содержимое файла было каталогом. Каждый инод имел ссылку на свой собственный инод, который позволял файлу знать, в каком каталоге он находится. Исключением был каталог / /, который владел собой. Была также ссылка на содержание. Если в иноде нет содержимого, его можно вернуть в свободный список. Поскольку каталог был просто благословенным файлом, даже пустой каталог должен был содержать содержимое, чтобы он не собирался мусором. Таким образом, .. была ссылкой inode на родительский inode и. был там, чтобы указать, что каталог еще можно было использовать. rmdir (вызывая unlink) может удалить.
источник
Как говорится в ответе «возможный дубликат» , стандарт POSIX указывает, что если rmdir попытается удалить текущий каталог, он потерпит неудачу.
Что бы вы ни строили, у вас должен быть фундамент. Трудно определить относительные пути без возможности сказать «здесь». Так что '.' определяется как «здесь».
Кроме того, вы можете удалить «точка» и «точка точка». Напишите свою собственную ОС, которая не определяет их. Хотя Unix (и, соответственно, Mac OSX), Linux и даже MS DOS и Windows используют точки и точки.
TL; DR - «точка» в определении ОС.
источник