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

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


person hugo der hungrige    schedule 15.09.2013    source источник
comment
Если бы кто-то (@animuson) был бы так добр, чтобы объяснить мне, почему этот вопрос chmod не по теме, а все остальные (14 438 результатов) здесь нет ...   -  person hugo der hungrige    schedule 30.01.2014
comment
Немного поздно, но эта команда также выдаст принятый ответ за один раз: chmod -R a = r, a + X, u + w / your / path   -  person MichaelICE    schedule 05.11.2014
comment
Хороший вопрос, не заслуживает закрытия. Их лучше переместить на дочерний сайт stackoverflow, чем закрыть.   -  person Erik Friesen    schedule 06.01.2015
comment
@hugoderhungrige, это означает, что спросите его на сайте сервера, например: http://superuser.com: P, но этот вопрос помог мне здесь, спасибо.   -  person emotality    schedule 02.02.2015
comment
В Google этот вопрос стоит первым, поэтому на него нужно ответить, а не закрывать.   -  person kenorb    schedule 21.05.2015
comment
Краткий ответ: chmod -R u+rwX,go+rX,go-w /foo   -  person kenorb    schedule 21.05.2015


Ответы (8)


Один из подходов может заключаться в использовании find:

для справочников

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

для файлов

find /desired_location -type f -print0 | xargs -0 chmod 0644
person hugo der hungrige    schedule 15.09.2013
comment
просто для кого-то вроде меня это не работает, вместо этого попробуйте sudo find /your/location -type f -exec chmod 644 {} \; для файлов и sudo find /your/location -type d -exec chmod 755 {} \; для каталогов - person NineCattoRules; 23.06.2015
comment
Я запустил исходное решение, и оно испортило мои права доступа к файлам и каталогам. осторожно! решение по комментарию сработало, спасибо! - person Mahsa Mortazavi; 15.03.2018
comment
Почему (?) Это лучше chmod -R a=r,u+w,a+X /foo? - person Peter Krauss; 10.09.2018
comment
терпит неудачу с unable to execute /bin/chmod: Argument list too long - person vladkras; 28.12.2018
comment
Что, если я хочу, чтобы при указании желаемого_location только подпапка была chmod 755? Потому что это также сделает родительскую папку 755 - person MaXi32; 23.06.2020
comment
Я бы сказал, что вы можете комбинировать два подхода: sudo chmod -R 755 "/your/location"; sudo find "/your/location" -type f -exec chmod 644 {} \;. (Не то, чтобы это большая разница) - person WoodrowShigeru; 19.11.2020

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

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

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

в change файл modes -Recursively, указав:

  • user: разрешения read, write и eXecute,
  • group и o другие пользователи: разрешения read и eXecute, но не разрешение -write.

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

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

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

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

person kenorb    schedule 22.05.2015
comment
chmod -R a = r, u + w, a + X / foo - person John Allsup; 26.12.2016
comment
Этот ответ, хотя и аккуратный, имеет проблему: файл, который выполнялся до запуска команды, впоследствии станет исполняемым. См. Ответ @JohnAllsup для команды, в которой нет этого недостатка. - person mzuther; 03.09.2017
comment
@mzuther, если эта проблема не для вас - person RiaD; 27.12.2018

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

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. Установить выполнение для всех, если каталог (0755 для каталога, 0644 для файла).

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

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

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

person John Allsup    schedule 26.12.2016
comment
молодец! мне очень помог - person Jannie Theunissen; 20.12.2019

На 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 {} \;

Протестировал и ... работает!

person Christian Michael    schedule 31.01.2019
comment
Спасатель жизни! Спасибо за чистое решение этой проблемы! Сработало для меня, когда мне нужно было исправить проблемы с разрешениями для установки WordPress! - person twknab; 04.03.2019
comment
Хорошо подходит для внесения изменений в каталог. - person Christian Berendt; 20.11.2019

Мне легче всего запомнить две операции:

chmod -R 644 dirName
chmod -R +X dirName

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

person Mark D    schedule 17.05.2016
comment
Самый простой и безопасный - person Marco Marsala; 07.05.2020

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

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

Сделайте и то, и другое за один проход:

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

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

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

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

person mza    schedule 31.12.2015

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

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

chmod -R 644 *.*  // All files will be 644.
person Puneet Tiwari    schedule 01.06.2016
comment
НИКОГО НЕ ДЕЛАЙТЕ ЭТОГО! это влияет на весь сервер! - person T.Todua; 09.01.2019