Как изменить разрешения для папки и всех ее подпапок и файлов за один шаг в Linux? [закрыто]


1807

Я хотел бы изменить права доступа к папке и всем ее подпапкам и файлам за один шаг (команду) в Linux.

Я уже попробовал приведенную ниже команду, но она работает только для указанной папки:

chmod 775 /opt/lampp/htdocs

Есть ли способ , чтобы установить chmod 755для /opt/lampp/htdocsи все его содержимое , включая вложенные папки и файлы?

Кроме того, в будущем, если я создам новую папку или файл внутри htdocs, как автоматически могут быть установлены разрешения для этого 755?

Я тоже посмотрел эту ссылку:

http://stackoverflow.com/questions/3740187/how-to-set-default-chmod-in-linux-terminal


4
Ты намеревался написать chmod 75 /opt/lampp/htdocsили так и должно быть chmod 755 /opt/lampp/htdocs?
Здравствуйте, до свидания

234
Тот факт, что 4-й вопрос с наибольшим количеством голосов о Linux «закрыт как не по теме», забавен. Кто кроме программиста будет заботиться о chmod? Как это не по теме? Почему теги "permissions", "folder" и "cmod" даже не входят в тему?
Артур Дент

8
@ArthurDent, потому что этот вопрос (хотя и совершенно правильный и полезный) больше подходит для системно-ориентированного сайта SE, такого как SuperUser или ServerFault. Это не имеет прямого отношения к программированию.
таймер

26
@timelmer Конечно, но я снова спрашиваю, почему теги "permissions", "folder" и "cmod"? Когда cmod будет когда-либо использоваться «явно» для программирования?
Артур Дент

9
Если вы хотите быть действительно разборчивым, Bash на самом деле является языком сценариев, но также и php, который, похоже, не имеет значения.
таймер

Ответы:


2959

Другие ответы верны, в этом chmod -R 755будут установлены эти разрешения для всех файлов и подпапок в дереве. Но с какой стати вы хотите ? Это может иметь смысл для каталогов, но зачем устанавливать бит выполнения для всех файлов?

Я подозреваю, что вы действительно хотите сделать, это установить каталоги на 755 и либо оставить файлы в покое, либо установить их на 644. Для этого вы можете использовать findкоманду. Например:

Чтобы изменить все каталоги на 755 ( drwxr-xr-x):

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Чтобы изменить все файлы на 644 ( -rw-r--r--):

find /opt/lampp/htdocs -type f -exec chmod 644 {} \;

231
Кто-нибудь {} \;хочет объяснить, что означает конец строки?
Нильзор

307
@Nilzor chmod 644 {} \;указывает команду, которая будет выполняться findдля каждого файла. {}заменяется путем к файлу, а точка с запятой обозначает конец команды (экранированный, в противном случае он будет интерпретироваться оболочкой вместо find).
Тоббез

25
"но зачем устанавливать бит выполнения для всех файлов" Почему нет? Я новичок в Ubuntu / Linux ...
FlavorScape

12
@FlavorScape Womble устанавливает бит выполнения исключительно для каталогов, возвращаемых функцией find. Разрешение на выполнение для каталога позволяет классу пользователя перечислять содержимое этого каталога и записываться в него. Вообще говоря, вы хотите, чтобы и каталог r, и x в каталоге были вам доступны, хотя могут быть странные крайние случаи, когда вы устанавливаете только один или другой. См. Это руководство для получения дополнительной информации: nixsrv.com/llthw/ex23
Александр Курилин

25
За исключением sleepynate, в каждом ответе игнорировался аспект его вопроса, касающийся настройки разрешений для файлов / папок, создаваемых в будущем .
JGarrido

781

Проверьте опцию -R

chmod -R <permissionsettings> <dirname>

В будущем вы можете сэкономить много времени, проверив сначала справочную страницу:

man <command name>

Итак, в этом случае:

man chmod

147
что это man?
Адам

36
он обозначает страницу руководства и представляет собой команду linux, которая показывает страницу руководства для команды (большинство команд linux имеют страницу руководства). попробуй man ls или man man.
Стив Робиллард

8
Это не сработало для меня в Терминале в Mac OS X. Там я сделал «chmod -R <missionssettings> <dirname> *», и это сработало.
Эйнар Олафссон

127
Я думаю, что на самом деле быстрее публиковать здесь или использовать Google, чем использовать man. Особенно для чего-то вроде того, grepгде, если вы новичок, manпоиск примеров в документе может занять очень много времени, однако Google или SO предоставляют примеры в течение нескольких секунд.
13

17
Для записи, те, кто не знаком с Linux, могут быть не знакомы с человеком. Я знаю только о его существовании, но попытка выяснить, как его использовать, потребует приключений Google само по себе. Возможно, это стоящее предприятие, но вы должны понимать, что я нашел ЭТОТ ОЧЕНЬ пост через Google, и он ответил на ТОЧНЫЙ вопрос, который я задавал. Ресурсы, друг мой. Ресурсы бесценны. И вы можете подумать, что это было бессмысленно, и что он должен был просто проверить этого человека, но это помогло мне и сотням других (даже тысячи). Поэтому, пожалуйста, учтите это.
Soundfx4

391

Если вы хотите установить разрешения для всех файлов a+rи всех каталогов a+xи сделать это рекурсивно через полное дерево подкаталогов, используйте:

chmod -R a+rX *

X(То есть капитал X, не мало x!) Игнорируется для файлов (если они не являются исполняемыми для кого - то уже есть ) , но используется для каталогов.


27
Отличный ответ. Просто отметьте, что * не будет соответствовать скрытым файлам (имена, начинающиеся с точки). Это может иметь больше смысла в использовании. (для текущего каталога).
Аарон Адамс

21
Это правильный ответ. В моем случае я хотел установить для всех каталогов значение 775, а для всех файлов - значение 664 . Превосходный ответ Пита привел меня к chmodдокументам, где я понял, что могу использовать chmod -R g+wX .. Браво!
чадо

8
Это не удалит xфайлы, если они уже есть.
Бенуа Даффез

5
В случае, если это не совсем понятно, верхний регистр X означает «сделать все каталоги исполняемыми» (но не файлы).
Мэтт Браун

4
@BenoitDuffez, если ваша цель - также удалить исполняемый бит из файлов, вы можете объединить директивы, такие как «a-x + rX», чтобы удалить «x» из всего, а затем установить «r» для всего и «x» только для каталогов. ,
монахини

144

Вы можете использовать -Rс chmodдля рекурсивного обхода всех файлов и подпапок.

Вам может понадобиться sudo, так как это зависит от того, установлен LAMP текущим пользователем или другим пользователем:

sudo chmod -R 755 /opt/lampp/htdocs

17
Почему-то sudo chmod 755 -R /directoryне сработало, но сработало sudo chmod -R 755 /directory. Weird. Я использую Mac OS X, кстати.
Ломсе

8
Это правильно по моему опыту. Флаг должен появляться сразу после chmod, а не где-либо в строке.
orionrush

1
Выше написанное неверно. Правильная рекурсивная команда: sudo chmod -R 755 / opt / lampp / htdocs Примечание: -R должно быть до 755
Sandip Patel - SM

Это решение отлично работает для Redhat. Спасибо!
Лаванде

sudo chmod 755 -R
Отлично

79

Правильная рекурсивная команда:

sudo chmod -R 755 /opt/lampp/htdocs

-R: изменить каждую подпапку, включая текущую папку


1
привет ты уверен насчет текущей папки ты один несмотря на путь?
Шариф

ИСПОЛЬЗОВАНИЕ OSX: журналы sudo chmod 777 / -R ПОЛУЧЕНИЕ: chmod: -R: Нет такого файла или каталога, ДОЛЖНО БЫТЬ: журналы sudo chmod -R 777 /
закончено серебро

76

Чтобы установить все подпапки (рекурсивно), используйте -R

chmod 755 /folder -R

И используйте umask для установки по умолчанию новых папок / файлов cd / folder umask 755


24
НЕ устанавливайте umaskна 755! Вы не сможете перечислять, читать или использовать любые файлы или каталоги, которые вы создаете!
Sleepynate

14
Вы имели в виду umask 022?
Xkeeper

4
это устанавливает все на 755, включая файлы.!
Патрик Мутвири

@sleepynate О чем ты вообще говоришь? 755 означает, что владелец может читать, писать и выполнять, а все другие пользователи могут читать и выполнять, но не могут записывать объект
svin83

2
@NicHartley @ svin83 umask - это биты, которые будут замаскированы под разрешениями, так что это фактически инверсия chmod. λ ~ → umask 022 λ ~ → umask -S u=rwx,g=rx,o=rx λ ~ → umask 755 λ ~ → umask -S u=,g=w,o=w
Sleepynate

51

chmod 755 -R /opt/lampp/htdocsбудет рекурсивно устанавливать разрешения. Невозможно автоматически установить разрешения для файлов только в этом каталоге, который создается после установки разрешений, но вы можете изменить общесистемные разрешения для файлов по умолчанию с помощью параметра umask 022.


9
ответ Sleynynate является единственно правильным. Постер задал два вопроса: 1) Как исправить разрешения для файлов и папок и 2) Как изменить настройки по умолчанию (что означает «будущие» файлы). Как сказал Нейт, первый с "chmod", а второй с "umask". Я также добавил бы, что НЕТ СПОСОБА изменить umask только для одного каталога ... umask - это «все или ничего» для каждого пользователя. Однако ничто не мешает вам создать нового пользователя, который делится с вами группами, так что вы можете просто «sudo -u someuser [создать файл]». Это немного нестандартно, но это хороший обходной путь.
Скотт Приве,

Я думаю, что вы правы, но не можете inheritбыть решением многих случаев, или он будет работать исключительно с NTFS-3G?
Себастьян Шлихт

без разрешения на создание папок в будущем, возможно, не удастся скопировать папку, скажем, myforlderиз других мест (например, ПК) в этот целевой каталог (на сервере), потому что он попытается создать новую папку в целевой каталог с именем, на myfolder которое у вас нет разрешения. Как и у меня root, я просто использую chown -R username:usergroup /directory.
Джейсон Гол

27

Возможно, вы захотите рассмотреть этот ответ, данный nik для суперпользователя, и использовать «один chmod» для всех файлов / папок, например:

chmod 755 $(find /path/to/base/dir -type d)
chmod 644 $(find /path/to/base/dir -type f)

9
Предупреждение, легко выйти за пределы командной строки.
Лотар

1
У меня есть эта ошибка: -bash: / bin / chmod: список аргументов слишком длинный
Олег Абражаев

Было бы лучше использовать -execопцию для findтого, чтобы преодолеть Argument list too longошибку.
Miravalls


20

Использование:

sudo chmod 755 -R /whatever/your/directory/is

Однако будьте осторожны с этим. Это может действительно навредить вам, если вы измените права доступа к неправильным файлам / папкам.


20

Вот еще один способ установить каталоги на 775 и файлы на 664.

find /opt/lampp/htdocs \
\( -type f -exec chmod ug+rw,o+r {} \; \) , \
\( -type d -exec chmod ug+rwxs,o+rx {} \; \)

Это может выглядеть долго, но довольно круто по трем причинам:

  1. Сканирует файловую систему только один раз, а не дважды.
  2. Обеспечивает лучший контроль над тем, как обрабатываются файлы , и как обрабатываются каталоги . Это полезно при работе со специальными режимами, такими как закрепление , которое вы, вероятно, хотите применить к каталогам, но не к файлам.
  3. Использует технику прямо из manстраниц (см. Ниже).

Обратите внимание, что я не подтвердил разницу в производительности (если есть) между этим решением и простым использованием двух команд поиска (как в решении Питера Мортенсена). Тем не менее, увидеть подобный пример в руководстве обнадеживает.

Пример со man findстраницы:

find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)

Traverse the filesystem just once, listing setuid files and  direc‐
tories into /root/suid.txt and large files into /root/big.txt.

ура


Теперь, как превратить это в сценарий оболочки, чтобы мы могли запустить папку openmod $?
Стр

Люди, пожалуйста, используйте Xargs. Это экономит тысячи вызовов процессов.
seanahern

13

chmod -R 755 directory_nameработает, но как бы вы сохранили новые файлы на 755? Разрешения файла становятся разрешением по умолчанию.


Я сделал это, но не могу открыть терминал оттуда. Я не могу это исправить.
Кавинду Гаянта

9

Для Mac OS X 10.7 (Lion) это:

chmod -R 755 /directory

И да, как и все другие говорят, будьте осторожны при этом.


9

Вы хотите убедиться, что соответствующие файлы и каталоги имеют права chmod-ed / permissions для них. Для всех каталогов вы хотите

find /opt/lampp/htdocs -type d -exec chmod 711 {} \;

И для всех изображений, JavaScript, CSS, HTML ... ну, вы не должны их выполнять. Так что используйте

chmod 644 img/* js/* html/*

Но для всего логического кода (например, PHP-кода) вы должны установить разрешения таким образом, чтобы пользователь не мог видеть этот код:

chmod 600 file

6

Я думаю, что Адам спрашивал, как изменить значение umask для всех процессов, над которыми связывается работа /opt/lampp/htdocs каталогом.

Маска пользовательского режима создания файлов (umask) используется для определения прав доступа для вновь создаваемых файлов. Его можно использовать для управления разрешением по умолчанию для новых файлов.

так что если вы будете использовать какую-то программу ftp для загрузки файлов в /opt/lampp/htdocs вам необходимо настроить ваш ftp-сервер так, чтобы он использовал umask, который вы хотите.

Если файлы / каталоги создаются, например, с помощью php, вам нужно изменить код php

<?php
umask(0022);
// other code
?>

если вы создадите новые файлы / папки из вашего сеанса bash, вы можете установить значение umask в своем профиле оболочки ~ / .bashrc. Или вы можете настроить umask /etc/bashrcили /etc/profileфайл для всех пользователей. добавьте в файл следующее: umask 022

Sample umask Values and File Creation Permissions
If umask value set to   User permission     Group permission     Others permission
000                         all              all                   all
007                         all              all                   none
027                         all          read / execute            none

А для изменения прав доступа к уже созданным файлам вы можете использовать find. Надеюсь это поможет.


4

Есть два ответа на поиск файлов и применение chmodк ним. Первый - findэто файл, который применяется chmodкак он находит (как предложено @WombleGoneBad).

find /opt/lampp/htdocs -type d -exec chmod 755 {} \;

Второе решение - создать список всех файлов с помощью findкоманды и предоставить этот список chmodкоманде (как предложено @lamgesh).

chmod 755 $(find /path/to/base/dir -type d)

Обе эти версии работают хорошо, если количество файлов, возвращаемых findкомандой, мало. Второе решение выглядит привлекательно и более читабельно, чем первое. Если существует большое количество файлов, второе решение возвращает ошибку:Argument list too long.

Итак, мое предложение

  1. использование chmod -R 755 /opt/lampp/htdocs если вы хотите изменить права доступа ко всем файлам и каталогам одновременно.
  2. Используйте, find /opt/lampp/htdocs -type d -exec chmod 755 {} \;если количество файлов, которые вы используете, очень велико. -type x опции поиск определенного типа только файл, где d используется для поиска каталога, F для файла и л для ссылки.
  3. использование chmod 755 $(find /path/to/base/dir -type d) иначе
  4. Лучше использовать первый в любой ситуации

2

Это очень просто

В Терминале зайдите в файловый менеджер. Пример: sudo nemo. Перейдите, /opt/затем нажмите Свойства → Разрешение . а потом Другое . Наконец, перейдите к созданию и удалению и доступу к файлу для чтения и записи и нажмите кнопку «Применить». И работа.


что такое sudo nemo?
Викрант Инти
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.