Я пытался удалить "." каталог. Я думал, что могу просто удалить свой рабочий каталог, не заходя в родительский каталог.
Суть моего вопроса состоит в том, чтобы взглянуть на то, как система linux работает для удаления файлов.
filesystems
directory
rm
Goldname
источник
источник
rm .
иrmdir .
не работают, но почему они указаны как не работающие, что не зависит от физического существования жесткой ссылки.rm -rf .*
только для того, чтобы найти это, в том числе не только,.
но..
и потом../..
, а потом ...Ответы:
Удаление текущего каталога не влияет на целостность файловой системы или ее логическую организацию. Предотвращение
.
удаления выполняется в соответствии со стандартом POSIX, который указан наrmdir(2)
странице руководства:Одно объяснение можно найти на
rm
странице руководства:С другой стороны, явное удаление текущего каталога (т. Е. Путем указания его полного или относительного пути) является допустимой операцией в Unix, по крайней мере, начиная с SVR3, поскольку это было запрещено в Unix версии 7 до SVR2. Это очень похоже на то, что происходит при удалении файла, который активно читается или записывается. Процессы, обращающиеся к файлу удаления, продолжают свои операции чтения и записи, как будто ничего не произошло. После удаления текущего каталога процесса этот каталог больше не доступен, хотя его путь, но его inode остаются в файловой системе до тех пор, пока процесс не прекратит работу или не изменит свой собственный каталог.
Обратите внимание, что процесс не сможет использовать путь относительно своего текущего каталога для изменения своего cwd (например
cd ..
), потому что..
в его текущем каталоге больше нет записи.Когда кто - то тип
rmdir .
, они , вероятно , ожидают , что текущая запись каталога быть удалена , но когда каталог удаляются ( с помощью пути), три записи каталога фактически удалена,.
,..
и каталога сам.Только удаление,
.
а не запись каталога этого каталога, может создать каталог, не соответствующий требованиям, но, как уже было сказано, он запрещен стандартом.Как правильно заметил @Emmanuel, есть и вторая причина, по которой удаление
.
запрещено. Существует по крайней мере одна POSIX-совместимая ОС (Mac OS X с HFS +), которая с жесткими ограничениями поддерживает создание жестких ссылок на существующие каталоги. В таком случае из каталога нет четкого способа узнать, какая жесткая ссылка является той, которую предполагается удалить.источник
..
ссылаются на него. Это уникальный случайlink count > 2
для подавляющего большинства операционных систем и файловых систем, поэтому «некоторые файловые системы и / или операционные системы» являются заниженными. Единственное не историческое известное исключение - это Mac OS X с HFS +, которые добавляют ограничения о том, кто и что можно сделать, хотя. Разумеется, комментарий POSIX направлен на эту странность. См. Unix.stackexchange.com/questions/22394/…rm -r .*
раньше, и это рекурсивно уничтожило все, что находится в родительском каталоге ... Это было более десяти или двух лет назад, но приятно знать,rm
что больше этого не позволяет.Это сделано для целостности, так как вы в данный момент находитесь в этом каталоге, а
.
это только ссылка на себя.Вам нужно либо перейти к его родителю, либо вызвать
rmdir
его путь, что можно сделать с помощью:Если вам это часто нужно, вы можете установить для него псевдоним:
.. который может быть вызван как
rmc
один, чтобы удалить текущий каталог.источник
rmdir .
команда нарушает целостность файловой системыrmdir $(pwd)
илиrmdir "$PWD"
нет?rm *
, и что вы подразумеваете под историей оболочки? 2. Ответ на вопрос , почему , 3. Уход, чтобы разработать?rmdir $(pwd)
,pwd
определит логическое имя для текущего каталога,/foo/bar/baz
а затемrmdir
, увидев этот путь, удалитbaz
запись из/foo/bar
каталога, если выполнены условия. Это имеет смысл. Командаrmdir .
, с другой стороны, является инструкцией по удалению.
записи из текущего каталога, что недопустимо (это нарушило бы ограничение на то, что в каждом каталоге есть.
запись, указывающая на себя) и не является полезным (она не будет удалять ссылку). Вы хотели удалить).