Исправление ошибки Operation not permitted при удалении файла и директории, флаги, команда chflags

Сегодняшняя статья просвещенна распространенной проблеме, когда , при манипуляции с файлом или директорией появляется ошибка Операция недопустима.

Часто это происходит из-за того , что Вы, как пользователь, не наделены достаточными правами. Вы не сможете оперировать с фалами , если они принадлежат супер пользователю. Или если файл «заколдован» с помощью флага.

Но что такое флаги? Флаги – это особые метки , которые системный администратор ставит на файлы, чтобы сообщить операционной системе: что можно делать с файлом (или целой директорией), а что делать нельзя.
Например, с помощью флага , можно запретить удалять файлы. В таком случае часто и возникает ошибка :

Operation not permitted

Наша задача узнать:

  1. Какие флаги установлены на файл (или директорию);
  2. Убрать флаги мешающие операциям с фалом;
  3. Удалить файл (или целую директорию).

Первая задача решается в командной строке с помощью команды ls :

ls -lo flag.txt

В результате мы получаем исчерпывающую информацию о файле:

-rw-r--r-- 1 root root schg,uappnd 1 Mar 26 21:05 flag.txt

Информация показывает по порядку: права, размер файла в байтах, пользователя, группу, флаги, дату изменения и имя файла.
Интересующий нас файл имеет флаги schg – system immutable и uappnd – user append-only.
Большинство флагов , так или иначе мешают удалять файлы. Следовательно у Вас возникнут ошибки и при перемещении файлов и директорий.
Для работы с флагами используется команда chflags. Добавить флаги о которых написано выше можно с помощью такой конструкции команды:

chflags uappnd flag.txt
chflags schg flag.txt

Команда , затем флаг, затем имя файла.
Чтобы удалить любой флаг нужно добавить приставку no :

chflags nouappnd flag.txt
chflags noschg flag.txt

Ещё проще удалить сразу все флаги следующим образом:

chflags 0 flag.txt

Ноль обнуляет флаги ранее приписанные нашему файлу. Если Вы имеете дело с директорий , тогда, чтобы обнулить все флаги применительно к файлам и поддиректориям находящимся внутри нужной папки добавляется ключ рекурсии -R :

chflags -R 0 nasha_direktoiya

После того как флаги сняты, осталось удалить файл командой rm либо директорию командой rmdir

rm flag.txt
rmdir nasha_direktoiya

Ошибка Operation not permitted больше не должна нас побеспокоить. Будьте осторожны удаляя файлы, чтобы не удалить что-то важное.

Опубликовано 27.03.2015 в 01:02 · Автор Вебдизайнеру, сисадмину, вебмастеру · Ссылка
Рубрики: Debian, FreeBSD, Настройки хостинга, Системное администрирование · Теги: , , , , , , , , , , , , , ,