В интересах читателей:
Остерегайтесь rm -rf
в таком случае! Это может создать проблемы где-то еще в случае, если это будет сетевой ресурс! Вы были предупреждены!
Почти во всех случаях, если directory
кажется пустым, используйте rmdir directory
или, возможно, sudo rmdir directory
. Не используйте rm
(или del
под Windows). Если это не работает, вам нужно выяснить, что блокирует этот запрос, исправить это, а затем повторить команду rmdir
.
Обратите внимание, что я не знаю OS-X, но я думаю, что вещи там очень похожи на поведение Unix/BSD.
Весьма вероятно, что рассматриваемый каталог был просто точкой монтирования (из encfs) или находился в точке монтирования, которая стала доступна только для чтения или застряла в каком-то неправильном состоянии (что препятствовало удалению каталога). Если вы сейчас принудительно удалите каталог, могут произойти очень плохие вещи.
В хорошем случае каталог действительно был пуст, поэтому удаление его (уничтожение монтирования и т.д.) Больше не причиняло вреда. В плохом случае это было не пусто, просто казалось, что означает, что вы уничтожили что-то, что, возможно, вы не хотели убивать. Все зависит от типа монтирования, используемых драйверов и т. П.
Если все реализовано достаточно хорошо, обычно ничего плохого не должно произойти. Однако это не нормальный случай. Все уже в странном состоянии, что означает: что-то не так, так что лучше не пытайтесь смешивать это еще дальше! Если что-то сломано, любое неправильное прикосновение может сломать это.
Например, если вы столкнулись с условием гонки на общем сетевом ресурсе, возможно, ваш rm -rf
удаляет данные, которые кто-то просто скопировал на общий ресурс.
Однако rmdir
гарантированно никогда не причинит вреда, кроме удаления действительно пустых каталогов. Это даже верно для NFS, потому что NFS гарантирует действительно атомарное поведение только в mkdir
и rmdir
, но больше нигде.
FYI:
Вы можете определить точку монтирования, используя mountpoint directory
инструмента. В качестве альтернативы посмотрите на вывод mount
и попробуйте найти там ваши mounts. Но будьте осторожны, по крайней мере, под Linux это может лежать. Использование утилиты mountpoint
более надежно, но менее удобно.
В этом случае вы нашли точку монтирования, вы можете размонтировать ее, а затем удалить каталог, это следующая последовательность действий:
umount directory
rmdir directory
При необходимости используйте sudo
, как обычно.
Заметки:
Сетевые ресурсы могут запретить rmdir
(и все остальное) из-за прав доступа.
Дефектные файловые системы могут отказать rmdir
, в зависимости от стратегии сбоя. Возможно, вы увидите разумное сообщение в этом случае, а может и нет.
В Linux (и, возможно, в любой современной ОС) вы также можете ограничить доступ, используя различные средства (например, монтирование чего-либо только для чтения, возможности, как в SeLinux и т.д.). Это означает, что вы не видите, что это точка монтирования, и не видите ничего плохого, но это просто не работает. В этом случае вам нужно искать другую причину, и она может быть очень глубоко похоронена в ОС. Это зависит от инструмента, если вы видите какое-то разумное сообщение об ошибке. Также, возможно, загляните в syslog/kernel-log как dmesg
под Linux (извините, я не знаю эквивалента OS-X).
Обратите внимание, что обязательная блокировка файлов также может быть источником. Хотя это нормально для Windows, обычно это не обычный случай Unix, и я никогда не слышал об этом для каталогов. Обязательные блокировки файлов включены в POSIX, но они не являются обязательными.
Довольно часто в таких случаях рассматриваемый каталог находится в другой файловой системе, чем вы думали. Вы можете узнать, с помощью команды df directory
(я думаю, что это то же самое в OS-X).
Вы можете проверить глубже с помощью таких инструментов, как stat
или statfs
в каталоге. Однако это нормальный уровень для нормальных людей, и довольно часто такие инструменты хорошо скрыты от обычных пользователей.
Каталоги могут иметь файлы со смешными именами. Как файл, который мгновенно стирает вывод терминала, так что, похоже, его там нет. Попробуйте что-то вроде ls -al | less
или использовать что-то вроде MidnightCommander mc
.
Есть множество других возможностей, включая жуков, хакшоров, инопланетян или, возможно, более экзотические вещи, такие как феи. Но обычно не стоит начинать искать там, вместо этого сначала попытайтесь найти ошибку на вашей стороне, потому что "errare humanum est".