Мне было отказано в разрешении при попытке переместить папку Music
через, mv
хотя для владельца каталога установлено значение «Мой пользователь», а для разрешения пользователя установлено значение 7. Что происходит?
(Я знаю, что могу использовать sudo, но я хочу выяснить, в чем дело. Здесь что-то пахнет подозрительно). PS: я на Mac OS X El Capitan.
Ответы:
Обратите внимание , что, когда в папке
a
, перемещаясьb
кc
, разрешения папкиa
определить , что вы можете сделать.В этом случае права доступа
.
будут наиболее важными.Обратите внимание, что разрешения являются более сложными, чем просто
rwx
. Вашаmusic
папка имеет@
в конце,.
папка имеет+
в конце.xattr -h
для определения сложных разрешений для символа @.getfacl
для определения ACL для символа +.источник
man xattr
может быть хорошей отправной точкой.ls -la@e
. Скорее всего, здесь былиdeny delete
ACL, которые также препятствуют переименованию.Я использовал подсистему Windows для Linux. У меня был каталог, открытый в другом экземпляре bash. Закрытие позволяет мне переместить каталог.
источник
Похоже, что где-то глубоко в этом каталоге был хотя бы один файл, у которого не было необходимых прав доступа.
Итак, что я сделал:
Теперь это работает.
источник
chmod 755
удалены специальные разрешения «@» для папки «Музыка»?chmod -a 'everyone deny delete' Music
для этого. В Эль-Капитане все может быть по-другому.Проблема здесь, вероятно, связана со списком контроля доступа (ACL) папки «Музыка». ACL - это отдельная система разрешений для обычных POSIX, которые обычно перечислены в
ls -l
. Некоторые другие каталоги в домашней папке и в других местах также имеют списки ACL.Чтобы увидеть ACL в домашнем каталоге, используйте:
Скорее всего, вы увидите правило, похожее
0: group:everyone deny delete
на каталог «Музыка». Как вы заметили, вы можете решить проблему сsudo
. Если вы не хотите этого делать (или не можете), у вас есть другие варианты, если вы являетесь владельцем файла. Вы можете удалить поврежденную запись из ACL каталога Music, основываясь на его индексе (0 в приведенном выше примере):Или вы можете удалить все записи в ACL:
Теперь вы можете перемещать каталог (с учетом обычных разрешений POSIX). Если вы хотите вернуть ACL после перемещения, вы можете использовать:
И используйте
/bin/ls -le
снова, чтобы подтвердить, что ACL соответствует вашему желанию. Проверьте примеры ACL вman chmod
для получения дополнительной информации. В частности, это введение полезно:Заказ ACL
Я не думаю, что эта страница руководства объясняет правила заказа, но эта страница четко объясняет правила заказа для ACL. В частности, явное
deny
правило будет применено перед явнымallow
правилом. Таким образом, покаgroup:everyone deny delete
запись существует, вы не можете дать своему пользователю разрешение на удаление с помощьюallow
правила. Это связано с тем, что вeveryone
группе, в которую входят вы, отказано в разрешении , и это правило будет применено в первую очередь.источник
everyone deny delete
ACL в домашних каталогах по умолчанию в macOS является реальной причиной, по которой каталоги нельзя ни перемещать, ни удалять. (Также учтите, что ОС может их воссоздать в любое время.)У меня была эта проблема, когда набор программ работал в каталоге, который я пытался удалить. Чтобы переместить каталог, мне пришлось сначала убить все запущенные программы из этого каталога.
В следующих командах будьте очень внимательны при выборе имени вашей программы. Я использовал следующие команды, для справки:
Общая процедура:
kill -9
с большой осторожностью ) все программы из каталогаисточник
grep
и их проверке. Все , что вы кладете в к тому , что первоеgrep
будет выбирать из пула всех запущенных программ иkill
его привилегии суперпользователя ...Это также может произойти, когда один из файлов внутри защищен от записи. У меня был крайний случай сегодня, когда
access.log
был защищен от записи в Apache, который уже был остановлен. Я просто удалил этот файл, поэтому в дальнейшем я смог переместить родительский каталог.источник