У кого-нибудь есть инструмент или скрипт, который рекурсивно исправляет права доступа к файлу в каталоге?
На машине с Ubuntu Linux куча файлов была скопирована на USB-диск с полными 777 разрешениями (пользователь, группа, другое - чтение, запись, выполнение) по ошибке. Я хочу положить их обратно в каталог пользователей исправлено.
Каталоги должны быть 775, а все остальные файлы могут быть 664. Все файлы являются изображениями, документами или MP3-файлами, поэтому ни один из них не должен быть исполняемым. Если бит каталога установлен, то он требует выполнения, в противном случае ему просто нужны пользователь и группа, чтение и запись.
Я подумал, что стоит проверить, существует ли такая утилита, прежде чем взламывать сценарий оболочки :)
linux
ubuntu
permissions
shell
filesystems
mlambie
источник
источник
Ответы:
Это должно сделать трюк:
источник
find может добиться цели только с -exec:
чтобы предотвратить появление find для chmod для каждой записи:
(это фактически вызывает chmod один раз со списком всех файлов в качестве параметров, а не один chmod на файл)
источник
Этот ответ не решит вашу проблему, но кто-то может найти его полезным для аналогичной проблемы, когда файлы имеют меньше прав, чем должны.
Магия - это разрешение X, а не x. Страница chmod описывает это так:
Это не подходит в вашем случае, так как ваши файлы имеют разрешение на выполнение, поэтому будут соответствовать второму тесту.
источник
Я сделал скрипт из решения freiheit, он добавляет базовую проверку аргументов.
источник
chmod: missing operand after ‘0644’
. Могу ли я предложить обернуть операторы find проверкой, чтобы увидеть, существует ли цель?if [ -d $1 ]; then find $1 -type d -print0 | xargs -0 chmod 0755; fi; if [ -f $1 ]; then find $1 -type f -print0 | xargs -0 chmod 0644; fi
В случае, если вы используете ssh, рекомендуется не изменять
~/.ssh
разрешения.источник
На днях я сделал очень простой bash-скрипт, потому что мне нужно было исправить разрешения. Почему не существует формальной утилиты для сброса основных, не-root, прав доступа к файлам и папкам?
Скрипт использует find для 755 всех папок и 644 библиотек. Затем он проверяет каждый файл с помощью readelf, чтобы увидеть, имеет ли он двоичный заголовок elf. Если нет, он сканирует первые два символа для Шебанга
#!
. Он проверяет 755 этих экземпляров и 644 все остальное после того, как проверяет, есть ли у файла уже соответствующее разрешение.Особые случаи обрабатываются с исключением, например,
*.bak
для игнорируемых файлов.источник
Я нашел упрощенное решение C-shell. Это может быть не полностью надежным доказательством, но должно работать для большинства каталогов. Предполагается, что команда Unix 'file' работает, и находит exec-файлы для сброса их обратно в exec-разрешения:
источник
Альтернатива, которая точно не отвечает первоначальному запросу, но более вероятно, что подразумевает OP, состоит в том, чтобы указать разрешения символически. Например, я предполагаю, что OP хочет «удалить публичный доступ на запись и удалить разрешение на выполнение из всех файлов».
Это возможно, если вы используете символическое разрешение.
Записывая его таким образом, вместо того, чтобы явно устанавливать «0664», вы избегаете случайного разрешения дополнительных разрешений для файлов, которые были ранее заблокированы. Например, если файл был 0770, он не станет 0664 по ошибке.
Для выполнения первого требования вы можете просто использовать
chmod
:Для выполнения второго требования:
Или сделать оба:
источник