Измените все права доступа к файлам и папкам для каталога на 644/755

185

Как изменить все файлы на 644 и все папки на 755, используя chmodиз linuxкомандной строки? (Терминал)

Hugo der Hungrige
источник
6
Если кто-то (@animuson) будет так любезен, объясните мне, почему этот вопрос chmod не по теме, а все остальные (14 438 результатов) здесь нет ...
hugo der hungrige
Немного поздно, но эта команда также выполнит принятый ответ за один выстрел: chmod -R a = r, a + X, u + w / your / path
MichaelICE
Хороший вопрос, не заслуживает закрытия. Они должны быть скорее перемещены в подсайту стека overoverflow, чем закрыты.
Эрик Фризен
1
@hugoderhungrige это значит, спросите об этом на сайте сервера, как http://superuser.com:: P, но этот вопрос помог мне здесь, спасибо.
Эмоциональность
3
Краткий ответ:chmod -R u+rwX,go+rX,go-w /foo
Кенорб

Ответы:

346

Одним из подходов может быть использование find:

для каталогов

find /desired_location -type d -print0 | xargs -0 chmod 0755

для файлов

find /desired_location -type f -print0 | xargs -0 chmod 0644
Hugo der Hungrige
источник
21
просто для кого-то, как я, это не работает, вместо этого попробуйте sudo find /your/location -type f -exec chmod 644 {} \;для файлов и sudo find /your/location -type d -exec chmod 755 {} \;каталогов
NineCattoRules
Я запустил оригинальное решение, и оно испортило мои права на файлы и каталоги. осторожно! решение по комментарию сработало, спасибо!
Махса Мортазави,
3
Почему (?) Лучше их chmod -R a=r,u+w,a+X /foo?
Питер Краусс
не удается сunable to execute /bin/chmod: Argument list too long
vladkras
Что, если я хочу, чтобы только подпапка была chmod 755 при указании требуемого местоположения? Потому что это также сделает родительскую папку 755
MaXi32
105

Самый простой способ это сделать:

chmod -R u+rwX,go+rX,go-w /path/to/dir

что в основном означает:

в chAnge файл modэс -Recursively давая:

  • user: read, write и Xecute разрешения,
  • gРоап и oTher пользователей: rСвинец и электронные Xecute разрешения, но не -wОбряд разрешения.

Обратите внимание, что Xкаталог станет исполняемым, но не файлом, если он не доступен для поиска / выполнения.

+X - сделать каталог или файл доступным для поиска / исполнения всеми, если он уже доступен для поиска / исполнения кем-либо.

Пожалуйста, проверьте man chmodдля более подробной информации.

См. Также: Как выполнить chmod для всех каталогов, кроме файлов (рекурсивно)? в SU

kenorb
источник
7
chmod -R a = r, u + w, a + X / foo
Джон Аллсуп
9
Этот ответ, хотя и аккуратный, имеет проблему: файл, который выполняется перед выполнением команды, впоследствии будет выполняться. Смотрите ответ @JohnAllsup для команды, которая не имеет этого недостатка.
mzuther
4
@mzuther, если эта проблема на самом деле не для вас
RiaD
37

Самый короткий, который я мог придумать:

chmod -R a=r,u+w,a+X /foo

который работает в GNU / Linux, и я верю в Posix в целом (из моего прочтения: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/chmod.html ).

Что это делает:

  1. Установите для файла / каталога значение r__r__r__ (0444)
  2. Добавьте w для владельца, чтобы получить rw_r__r__ (0644)
  3. Установите execute для всех, если каталог (0755 для dir, 0644 для файла).

Важно отметить, что разрешение шага 1 очищает все биты выполнения, поэтому шаг 3 добавляет обратно только биты выполнения для каталогов (но не файлов). Кроме того, все три шага выполняются до того, как каталог рекурсивен (так что это не эквивалентно

chmod -R a=r /foo
chmod -R u+w /foo
chmod -R a+X /foo

поскольку a = r удаляет x из каталогов, то chmod не может вернуться в них.)

Джон Аллсуп
источник
блестящий! мне очень помогли
Jannie Theunissen
13

Мне проще запомнить две операции:

chmod -R 644 dirName
chmod -R +X dirName

+ X влияет только на каталоги.

Марк Д
источник
1
Самый простой и безопасный
Марко Марсала
12

На https://help.directadmin.com/item.php?id=589 пишут:

Если вам нужен быстрый способ восстановить данные public_html на 755 для каталогов и 644 для файлов, то вы можете использовать что-то вроде этого:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Я проверил и ... это работает!

Кристиан Майкл
источник
Спасатель жизни! Спасибо за чистое решение этой проблемы! Сработал для меня, когда нужно исправить проблемы с разрешениями для установки WordPress!
twknab
Хорошо работает, чтобы внести коррективы в каталог.
Кристиан Берендт
8

Это сработало для меня:

find /A -type d -exec chmod 0755 {} \;
find /A -type f -exec chmod 0644 {} \;
Jair Reina
источник
3
Будьте осторожны: эти команды не будут обрабатывать файлы или каталоги с пробелами в их именах. Команды в принятом ответе будут.
Чад Нуис
1
Это предостережение применимо только в том случае, если {} не заключено в кавычки ... таким образом, нет смысла возиться с print0 и xargs -0, достаточно следующего:find /A -type X -exec chmod Y '{}' \;
Michael Stumpfl
6

Сделайте оба за один проход с:

find -type f ... -o -type d ...

Например, найдите тип f ИЛИ тип d и выполните первое ... для файлов, а второе ... для каталогов. В частности:

find -type f -exec chmod --changes 644 {} + -o -type d -exec chmod --changes 755 {} +

Оставьте, --changesесли хотите, чтобы он работал тихо.

МЗА
источник
2

Если вам нужен быстрый способ восстановить данные public_html на 755 для каталогов и 644 для файлов, то вы можете использовать что-то вроде этого:

cd /home/user/domains/domain.com/public_html
find . -type d -exec chmod 0755 {} \;
find . -type f -exec chmod 0644 {} \;

Кроме того, если вы знаете, что PHP работает как пользователь, а не как «apache», то вы можете установить PHP-файлы равными 600 для дополнительного уровня безопасности, например:

find . -type f -name '*.php' -exec chmod 600 {} \;

Вы можете найти этот ресурс здесь: https://help.directadmin.com/item.php?id=589.

Хемант Кумар
источник
-9

Это тоже может работать:

chmod -R 755 *  // All files and folders to 755.

chmod -R 644 *.*  // All files will be 644.
Пунит Тивари
источник
1
НИКОГДА НЕ ДЕЛАЙТЕ ЭТОГО! это влияет на полный сервер!
Т.Тодуа