Chmod linux только папки

Рекурсивный chmod только на каталоги

Есть дерево всякого добра с неизвестно какими правами. Нужно: 1. Отдельно рекурсивно chmod на все подкаталоги и корневой каталог. 2. Отдельно рекурсивно chmod на все файлы во всех подкаталогах.

Зачем? Потому что нужна возможность ходить по каталогам, при этом не нужен аттрибут выполняемости файлов.

Помогите люди добрые. Искал гуглей, яндексом — ничего вразумительного не нашел.

Re: Рекурсивный chmod только на каталоги

find . -type d -exec chmod 755 <> \;

find . -type f -exec chmod 644 <> \;

З.Ы. фиксим владельцев в хомяках юзеров:

#!/bin/sh
for i in `find /home -type d -maxdepth 1`
do find /home/$i -not -user $i -exec chown $i <> \;
done

Re: Рекурсивный chmod только на каталоги

>Искал гуглей, яндексом

Поищи ещё маном:-) Цитирую: «execute only if the file is a directory»

Re: Рекурсивный chmod только на каталоги

Если тебе надо добавить Х только на каталоги, то

chmod -R a-x dir # убираем все права на просмотр и выполнение
chmod -R a+X dir # даём только права на каталоги

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

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

Источник

Права на папки и файлы (unix/chmod)

Примеры использования команды chmod в символьном режиме

Права:

Добавить Забрать
+r -r
+w -w
+x -x

(Изначальное значение прав доступа файла file — rwxrwxrwx – полный доступ для всех) Отмена разрешения на выполнение файла для всех пользователей и групп:

Отмена записи в файл группой и остальными пользователями:

Разрешение выполнения файла владельцем:

Предоставление группе тех прав доступа, которыми владеет владелец файла:

Отмена чтения и запись в файл пользователям группы и другим пользователям:

Примеры использования команды chmod в абсолютном режиме

Разрешение чтения, записи, выполнения файла file всеми пользователями и группами (полный доступ):

Установка разрешений на чтение и запись для владельца, группы и остальных пользователей:

Установка полного доступа к файлу для владельца и лишь чтения для группы и остальных пользователей:

Установка полного доступа к файлу владельцу файла и запрет доступа группе и другим пользователям:

Установка разрешений на чтение и запись для владельца файла и лишь чтения для группы и остальных:

Установка разрешений на чтение и запись владельцу файлу и его группе и запрет доступа для других:

Установка доступа к файлу с разрешением чтения для всех пользователей и групп:

Права доступа к файлу для чтения, записи, выполнения владельцем и чтения, выполнения группе и другим:

Разрешение доступа к файлу на чтение и выполнение пользователю и остальным и запрет доступа для группы:

Если вы хотите назначить права доступа на все файлы в текущем каталоге, просто поставьте после назначаемых прав доступа знак * (звездочка):

В результате выполнения этой команды владелец получит полные права (чтение, изменение, выполнение) на все файлы текущего каталога, а группа и другие пользователи – только чтение и выполнение. Если вы хотите, чтобы ваши действия распространились рекурсивно (включая все подкаталоги), воспользуйтесь опцией -R:

Результатом выполнения вышеприведенной команды будет рекурсивный “обход” всех подкаталогов текущего каталога и назначение полного доступа для всех пользователей и групп. В этой статье рассмотрены лишь некоторые примеры применения команды chmod. Если вы хотите узнать подробнее о работе команды chmod и правах доступа в Linux, обратите внимание на эту статью.

Читайте также:  Все для персонализации windows

Источник

Как изменить права только к файлам/каталогам?

Нужно задать права 755 только для каталогов и отдельно права 644 только для файлов. Как это сделать с помощью chmod?

find -type d -exec chmod 755 <> \; find -type f -exec chmod 644 <> \;

Мне в последнее время больше нравится так:

find . |xargs chmod .

Да, xargs как-то изящнее, но менее гибко.

Спасибо, а зачем симмвол «<>»?

Не проще ли find -type d -exec chmod 755 \*

На место «<>» — подставляется имя файла, кавычки нужны для экранирования символов-разделителей вроде пробела.

Не проще ли find -type d -exec chmod 755 \*

У меня такой вариант не работает, поэтому не понял.

Зато портабельнее — своими глазами видел find без exec-а! Честное слово видел! (Аж челюсть выпала — оно-ж даже на 386bsd было. )

man xargs
догадаешься почему — получишь печеньку

Когда мало файлов xargs быстрее, так как для каждого файла не вызывается chmod, это хотите сказать?

а ещё символ ‘ в имени файла

похоже, что без разницы — большой список или нет.

а ещё символ ‘ в имени файла

не распарсил что ты пытался сказать, чем меньше execve — тем быстрее; вот с xargs их намноого меньше

Ок. Полагал, что xargs выполняет команду, только прочитав весь поток целиком.

хм. ну тут кагбе не распараллелишь, ибо всё упрётся в seek-time винта

Я о другом — xargs же разбивает полученный список по группам и для каждой группы выполняет execve->chmod, а не ждёт SIGPIPE/что-то_там и выполняет chmod для всего полученного списка из 100500 файлов.

вы бы прочитали man find, а потом лезли со своими учениями

А, всё, у xargs есть соответствующие ключи -L -n, отвечающие за разбивку. Тогда xargs в любых ситуациях лучше получается.

а если пробел в имени файла, срыватель покровов?

chmod -R u=rwX,go=rX

а если пробел в имени файла, срыватель покровов?

да хоть \r — УМВР. Сам проверь.

А, всё, у xargs есть соответствующие ключи -L -n, отвечающие за разбивку. Тогда xargs в любых ситуациях лучше получается.

плюсик — это и есть xargs.

А ещё такой вариант. Допустим, на одну из директорий установлены права 0000 и find выдаст ошибку чтения каталога. Тогда и +, и | xargs варианты завершатся с ошибкой и нужно явно вызывать для каждого объекта chmod?

Век живи, век учись. Не знал об x и X

ну если я правильно распарсил документацию — да. Очевидно, что xargs -0 нужно если требуется обработать имена найденных файлов. ИМХО.

Допустим, на одну из директорий установлены права 0000 и find выдаст ошибку чтения каталога. Тогда и +, и | xargs варианты завершатся с ошибкой и нужно явно вызывать для каждого объекта chmod?

нет. Существует 3 порядка (order) обхода дерева:

1. прямой: корень, потом поддеревья/листья.

2. обратный: поддеревья, а потом корень.

3. центрированый. Применяется в бинарных деревьях — левое поддерево — корень — правое. Для ФС не применяется, приходится всё сортировать с нуля.

Так вот, по умолчанию применяется 1й обход. Возможен chmod <> (конечно, если он разрешает права). А с ключом -depth производится 2й обход, и возможно удаление (-delete, -exec rm), и chmod, который запрещает доступ (даже тому, кто обходит).

Век живи, век учись. Не знал об x и X

на практике они очень редко помогают.

Тогда и +, и | xargs варианты завершатся с ошибкой

забыл сказать — xargs НЕ меняет порядок аргументов. В отличие например от *, которая не просто выдаёт список, но его сортирует по алфавиту. По этому, в частности, xargs на больших каталогах намного быстрее, особенно в UTF-8, чем звёздочка.

Читайте также:  Графический интерфейс windows папки каталоги

на практике они очень редко помогают.

Не думаю, что случай ТС-а уникален. У самого часто такая потребность возникала после копирования с флешек c fat.

Не думаю, что случай ТС-а уникален. У самого часто такая потребность возникала после копирования с флешек c fat.

(Note: fat is not a separate filesystem, but a common part of the msdos, umsdos and vfat filesystems.)

dmask=value Set the umask applied to directories only. The default is the umask of the current process. The value is given in octal.

fmask=value Set the umask applied to regular files only. The default is the umask of the current process. The value is given in octal.

Спасибо за информацию! Полагаю, что понял всё верно.
Меня вот какой случай интересует. Независимо от порядка обхода дерева очередной элемент дерева может находится в директории, для которой установлены права 0000, но xargs/+ не выполнили для неё chmod 755.

Но без +, то есть когда в chmod передаются аргументы по одному, команда завершится без ошибок.

Итого, если не известно, есть ли права на чтение+выполнение для низлежащих директорий, я так понимаю, оптимальным вариантом будет.

Но без +, то есть когда в chmod передаются аргументы по одному, команда завершится без ошибок.

ну а что вы хотели, если получить список нельзя, по той причине, что доступ к внутренним каталогам закрыт. Очевидно, что приходится обходить каталоги, и сразу их открывать, ибо нельзя войти в закрытую дверь, а _потом_ её открыть.

Итого, если не известно, есть ли права на чтение+выполнение для низлежащих директорий, я так понимаю, оптимальным вариантом будет.

не знаю. Смотря что у вас за файлы/каталоги, и что вы с ними хотите сделать.

тогда для этого случая сферического chmod в вакууме идеологиечески правильней всего делать расово православный циклический рекурсивный find со скриптом.

По-моему, совершенно вероятна ситуация, когда пользователь снял права r или x для владельца. Кстати, зачем может быть нужна такая возможность?
Как правило число директорий много меньше числа файлов и замена ‘+’ на ‘\;’ не скажется на времени выполнения команды, зато гарантирует положительный результат.

x очень часто снимают чтобы содержимое папки не смотрели. например для хомяка. r бывает снято по ошибке или при копировании с FAT.

x очень часто снимают чтобы содержимое папки не смотрели

А чтобы u-rx для директории в каких случаях? Приходит на ум только «по ошибке».

Источник

Команда chmod в Linux


Команда chmod, команда chown и команда chgrp.

Команда chmod

Команда chmod предназначена для изменения прав доступа файлов и директорий в Linux. Название команды произошло от словосочетания «change mode».

Синтаксис команды chmod следующий:

Разрешения можно задавать двумя способами:

Изменение прав доступа командой chmod

Запись прав доступа числом

В данном формате права доступа задаются не символами rwx, как описано выше, а трехзначным числом. Каждая цифра числа означает определенный набор прав доступа.

  • Первая цифра используется для указания прав доступа для пользователя.
  • Вторая цифра для группы.
  • Третья для всех остальных.

В таблице ниже приводятся все возможные комбинации разрешений rwx и соответсвующие им числа (которые используются в команде chmod):

Число Разрешения Символьное обозначение
0 разрешения отсутствуют
1 x — запуск —x
2 w — изменение -w-
3 x+w — запуск+изменение -wx
4 r — чтение r—
5 r+x — чтение+запуск r-x
6 r+w — чтение+изменение rw-
7 r+w+x — чтение+изменение+запуск rwx

Рассмотрим использование команды chmod с записью прав доступа числом на примере. Установим для файла права доступа 764:

Это означает (см. таблицу выше), что для файла myfile мы устанавливаем права доступа 7 6 4 , которые означают:

  • 7 — права для владельца-пользователя. Владелец файла может читать, изменять и запускать файл (r+w+x).
  • 6 — права для группы. Пользователи, которые принадлежат группе могут читать и изменять файл (r+w).
  • 4 — права для всех остальных. Все остальные могут только читать файл (r).

Если записать 764 с помощью символов (см. таблицу), то мы получим: «rwxrw-r-».

В таблице ниже приведены некоторые часто используемые значения числовых значений прав доступа:

Числовое
обозначение
«rwx»-обозначение Описание
400 -r——— Владелец файла может только читать файл. Для всех остальных все действия с файлом запрещены.
644 -rw-r—r— Все пользователи могут читать файл. Владелец может изменять файл.
660 -rw-rw—- Владелец и группа могут читать и изменять файл. Для всех остальных все действия с файлом запрещены.
664 -rw-rw-r— Все могут читать файл. Владелец и группа могут изменять.
666 -rw-rw-rw- Все могут читать и изменять файл.
700 -rwx—— Владелец может читать, изменять и запускать файл. Для всех остальных все действия с файлом запрещены.
744 -rwxr—r— Все могут читать файл. Владелец может также изменять и запускать файл.
755 -rwxr-xr-x Все могут читать и запускать файл. Владелец может также изменять файл.
777 -rwxrwxrwx Все пользователи могут читать, изменять и редактировать файл.

Запись прав доступа символами

Как вы можете видеть, в данном формате права доступа задаются символами rwx, но в синтаксисе используются и другие вспомогательные символы, например, математические операции «+» и «» и такие символы как, например, «g» или «u».

Общий синтаксис можно записать примерно так:

Обозначения для владельцев файла следующие:

Обозначение Описание
u Владелец-пользователь.
g Группа.
o Все остальные.
a Вообще все.

Математические операции означают следующее:

Оператор Описание
+ Добавляет к текущим правам доступа новое разрешение.
Удаляет из текущих прав доступа определенное разрешение.
= Устанавливает полностью новые разрешения (предыдущие перезаписываются новыми).

В одной команде можно перечислять владельцев и их разрешения через запятую (см. пример ниже).

В данном случае мы не используем обозначения для владельцев, а значит разрешения устанавливаются для всех пользователей. «+x» означает — установить разрешение на запуск (x) файла для всех пользователей. Это эквивалентно выполнению команды: chmod a+x myfile1 .

Здесь используется обозначение g и символ равенства «=». Это означает, что для группы мы устанавливаем права доступа на чтение и запись файла (rw).

Для владельца файла (u) мы удаляем разрешение на изменение (w) файла.

Разрешаем владельцу (u) и группе (g) запускать файл (x).

Это как раз тот случай, когда мы перечисляем владельцев через запятую и устанавливаем для них разрешения. Для владельца файла (u) мы разрешаем запуск файла, для группы (g) мы запрещаем изменять файл, для всех остальных (o) мы запрещаем читать файл.

Рекурсивное изменение прав доступа

Если необходимо изменить права доступа на все файлы в директории, включая вложенные директории, то для этого существует опция -R, что означает рекурсивное изменение прав доступа для директорий и их содержимого. Например, изменим права доступа у всех файлов в директории Mydir:

И еще один момент. Если пользователь не является владельцем файла, но ему нужно изменить права доступа у данного файла, то команду chmod необходимо выполнять с использованием sudo, например:

Видео-обзор команды chmod

Команда chown — изменение владельца и группы

Для изменения владельца и группы файла используется команда chown.

Для изменения владельца файла используется следующий синтаксис:

Например, установим для файла myfile нового владельца vasya:

Для изменения владельца и группы файла используется следующий синтаксис:

Например, установим для файла myfile нового владельца vasya и группу sambashare:

Команда chgrp — изменение группы

Есть еще одна команда — chgrp. Она позволяет изменить только группу. Например:

Резюме

В Linux у каждого файла есть права доступа — это разрешения, владелец и группа.

Разрешения задаются для владельца, группы и для всех остальных.

Есть три вида разрешений — r — чтение, w — изменение, x — запуск.

Чтобы изменить разрешения у файла используется команда chmod.

Чтобы изменить владельца или группу используется команда chown.

Чтобы изменить группу используется chgrp.

Источник

Читайте также:  Streamlabs obs mac os
Оцените статью