Змініть усі дозволи файлів і папок каталогу на 644/755


184

Як я можу змінити всі файли на 644 і всі папки на 755 за chmodдопомогою linuxкомандного рядка? (Термінал)


6
Якщо хтось (@animuson) буде так люб'язно пояснити мені, чому це питання Chmod є поза темою, а всі інші (14,438 результати) тут не є ...
hugo der hungrige

Трохи пізно, але ця команда також виконає прийняту відповідь за один кадр: chmod -R a = r, a + X, u + w / your / path
MichaelICE

Добре запитання, не заслуговує на закриття. Їх слід швидше перемістити на під-сайт stackoverflow, ніж закрити.
Ерік Фрізен

1
@hugoderhungrige, це означає, перейдіть, задайте його на сервері на зразок http://superuser.com:: P, але це питання мені тут допомогло, дякую.
емоційність

3
Коротка відповідь:chmod -R u+rwX,go+rX,go-w /foo
kenorb

Відповіді:


345

Одним із підходів може бути використання find:

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

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

для файлів

find /desired_location -type f -print0 | xargs -0 chmod 0644

21
тільки для когось іншого, як я, це не працює, замість цього спробуйте sudo find /your/location -type f -exec chmod 644 {} \;файли та sudo find /your/location -type d -exec chmod 755 {} \;каталоги
NineCattoRules

Я запустив оригінальне рішення, і це зіпсувало мої дозволи на файли та каталоги. Стережись! рішення на коментар спрацювало, дякую!
Махса Мортазаві

3
Чому (?) Краще tham chmod -R a=r,u+w,a+X /foo?
Пітер Краусс

не вдаєтьсяunable to execute /bin/chmod: Argument list too long
владкрас

Що робити, якщо я хочу, щоб лише підпапка була chmod 755 при введенні потрібного_локації? Тому що це також зробить батьківську папку 755
MaXi32

105

Найпростіший спосіб - це зробити:

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

що в основному означає:

в chAnge файл modес -Recursively даючи:

  • user: дозволи на read, wобряд та e Xecute,
  • gкористувачі маршрутизації та oтерміналів: read та e Xecute дозволи, але не -wдозвіл на обряд.

Зверніть увагу, що Xкаталог зробить виконуваний файл, але не файл, якщо його вже не можна шукати / виконувати.

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

Будь ласка, перевірте man chmodбільш детальну інформацію.

Дивіться також: Як chmod всі каталоги, крім файлів (рекурсивно)? при СУ


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

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

3
Будьте уважні: ці команди не обробляють файли чи каталоги з пробілами у своїх іменах. Команди у прийнятій відповіді будуть.
Чад Нуїс

1
Цей застереження застосовується лише в тому випадку, якщо {} не оточений цитатами ... таким чином, немає підстав гратись з print0 та xargs -0, find /A -type X -exec chmod Y '{}' \;
цілком

6

Виконайте обидва за один прохід із:

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

Як і в, знайдіть тип f АБО тип d і виконайте перше ... для файлів, а друге ... для dirs. Конкретно:

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
НЕ ДУМАЙТЕ ТАКОГО! це впливає на повний сервер!
Т.Тодуа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.