Скопируйте права владельца файла в групповые разрешения.

25

Как я могу скопировать права пользователя / владельца файла в разрешения группы?

Например, если разрешения 755, я хочу, чтобы они стали 775.

Уточнение: 755 -> 775 123 -> 113 abc -> aac

Бонус, если я могу сделать это рекурсивно для всех файлов в каталоге.

(То есть для каждого файла права владельца копируются в разрешения группы. Каждый файл может иметь разные разрешения.)

Аннан
источник
Я не уверен, чтобы понять. Вы хотите изменить разрешение на каталог / файлы для разрешения группы, чтобы быть как владелец? Если так, то просто поиграйтесь с chmod. Я могу показать вам более явный пример в моем ответе, если хотите.
Anarko_Bizounours
В вашем ответе он изменяет все файлы на 775. Что если один из файлов изначально имеет разрешение 123? Затем оно должно быть изменено на 113, а не на 775. Разрешение, которое я использовал в вопросе (755), является лишь примером, фактическое разрешение может быть любым. Я хочу сделать это программно.
Аннан
число после chmod - просто коммерческое разрешение. Если вы выполните команду ls -l и получите 452 в качестве разрешения, просто наберите chmod 442 / you_directory /. Все объяснено (довольно хорошо) на странице википедии, на которую я дал ссылку.
Anarko_Bizounours
кажется, что это дублирующий вопрос serverfault.com/questions/241082/…
ShoeLace

Ответы:

54

Вы можете использовать, g=uчтобы сделать групповые привилегии такими же, как пользовательские

ls -l file
-rw------- 1 user users 0 Jun 27 13:47 file

chmod g=u file

ls -l file
-rw-rw---- 1 user users 0 Jun 27 13:47 file

и рекурсивно

chmod -R g=u *

или для некоторых файлов

find /patch/to/change/perms -name '*.txt' -exec chmod g=u {} +

CHMOD страница руководства является вашим другом.

user9517 поддерживает GoFundMonica
источник
хороший способ сделать это! Я забыл этот трюк каждый раз, когда xD
Anarko_Bizounours
Никогда не слышал об этом трюке! Полезный
скинп
Этот g=uтрюк только что спас мне часы утомительного управления. Там идет +1 ;-)
Эдурн Паскуаль
У меня была куча файлов, принадлежащих моему пользователю, которыми я хотел поделиться со всеми пользователями. так я и сделалchmod -R ag=u ${path_to_directory}
Тревор Бойд Смит
2

Как уже говорили, изменение прав доступа к файлам может быть опасным. С великой силой приходит великая ответственность и все эти шизы. Это мой ответ:

файл / usr / bin / otog:

#!/bin/sh

f=$1
p=`stat -c "%a" $f`
chmod ${p:0:1}${p:0:1}${p:2:1} $f

Пример использования:

find . -exec otog {} \;

Использует stat для получения числовых разрешений, использует chmod для изменения разрешений.

PS: Пожалуйста, посмотрите ответ Iain для лучшего способа сделать это!

Аннан
источник
1
Разве это не должно быть $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1}?
Минаев
Да, ты прав. Это странно сработало и у меня.
Аннан
Кто-нибудь, пожалуйста, объясните отрицательный голос?
Аннан
Не я, но я бы хотел компенсировать. Это хорошее решение, которое работает.
Минаев
1
Я бы сказал, что в сценариях безопаснее использовать опасные команды, чем вручную. То есть в хорошо проверенных скриптах :). С другой стороны, chmodэто далеко не очень опасная команда. По сравнению с rm, я имею в виду, rsync --deleteили с некоторыми другими.
Минаев
1

Прежде всего, вам нужно перечислить свое право.

ls -l /your_directory/
-rwxr-xr-x  1   57 Jul  3 10:13  file1
-rwxr-xr-x  1   57 Jul  3 10:13  file2

чтобы перевести результат в числовое разрешение, используйте это: R = 4, W = 2, X = 1.

Таким образом, для этого 2 файла разрешение составляет 755.

Получив право, вы должны использовать команду chmod, чтобы изменить то, что вы хотите:

chmod 775 /your_directory/

Эта команда изменит только право на каталог, но не на файл внутри.

Если вы тоже хотите изменить право внутри, выполните эту команду:

chmod 775 /your_directory/ -fR

-FR заставит рекурсивность. (используйте его, только если вы уверены в праве, которое хотите применить, и в файле внутри каталога.)

Если вы хотите изменить только права на file1, то:

chmod 775 /your_directory/file1

И это так, как печенье крошится!

/! \ Будьте осторожны, неправильное использование этой команды может уничтожить все разрешения вашей ОС и привести к ее неправильной работе. /! \

ps: посмотрите там, чтобы узнать больше информации о chmod.

Надеюсь, что это поможет вам.

Anarko_Bizounours
источник
Я добавил некоторые уточнения к вопросу. Файлы могут не иметь одинаковых прав доступа владельца, поэтому, если предполагается использовать chmod, должен быть способ извлечь права доступа владельца перед передачей его в chmod?
Аннан
это сложно, но команда ls -l должна дать вам разрешение, но она будет в такой форме -rw-rw-r--. Проблема в том, что вы НЕ ДОЛЖНЫ использовать скрипт для работы с chmod! Вы должны сначала получить все разрешения из файла. Затем chmod, чтобы иметь хорошее право для группы. Я отредактирую свой ответ, чтобы показать пример.
Anarko_Bizounours