LINUX.ORG.RU

Рекурсивно восстановить список прав на файлы и каталоги.

 , ,


0

1

Всем привет!

Дано:

Некий пользователь, на тестовой машине, рекурсивно поменял права на каталог с огромным количеством файлов и уровней вложенности. Руками можно восстановить, есть каталог с правильными правами, правильной структурой но отличается содержимым файлов.

Задача:

Надо восстановить работоспособность порушенного каталога.

Вижу два пути решения:

  • переименовать «порченый» каталог. Залить с нормальными правами. Пройтись на предмет несовпадения файлов. Заменить содержимое файлов.

  • получить перечень прав на файлы и каталоги в нормальном каталоге. Заменить права в «порченом» каталоге согласно списка из правильного.

Прошу помощи коллективного разума лора. Как оптимальнее выкрутиться? Пока пытался получить список прав через ‘ls -Rl’ но так не выводятся права доступа для каталогов.


поменял права на каталог

Что поменял и насколько. Например. Во всех подкаталогах был один пользоватеь-группа, он сменил на другую. Тогда просто, пройти в цикле и установить нужных пользователя-группу. Если «измена» была более изощренная, то все усложняется.

andytux ★★★★★
()

Какого рода права нужно восстанавливать? Если стандартные юниксовые — это одно.

Если acl и xattr — уже посложнее задача.

wandrien ★★
()

У chmod есть опция –reference. Если файлы имеют одинаковое имя — пишешь однострочник при помощи find и chmod.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Не могу понять как организовать логику однострочника. Должно быть нечто вроде:

пройти "нормальный" каталог рекурсивно
получить дерево файлов и каталогов с правами
пройти "порченый" каталог рекурсивно
в процессе прохода;
    если имя и расположение файла совпадает
    заменить права "порченого" файла на нормальные

к сожалению мне не достаточно поменять все каталоги на 775 и файлы на 664

knock
() автор топика
Ответ на: комментарий от s-o

$i два раза в разных контекстах. Это опечатка? Или не стандартный chmod позволяющий работать с объектами?

knock
() автор топика
Ответ на: комментарий от knock

Ну если у тебя есть оригинальный каталог и пути одинаковые, то что-то типа find хороший/дир -exec chmod --reference хороший/дир/() плохой/дир/() \;

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

Спасибо! Вот так сработал:

find . -exec chmod --reference {} ../ttt/{} \;
knock
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.