Скопіюйте дозволи власника файлу в групові дозволи


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для того, щоб зробити групову хімічну речовину такою самою, як і користувальницькі perms

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 сторінка керівництва є вашим другом.


хороший спосіб це зробити! Я щоразу забував цей трюк 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: Будь ласка, дивіться відповідь Іена для кращого способу зробити це!


1
Чи не повинно бути $ {p: 0: 1} $ {p: 0: 1} $ {p: 2: 1}?
мінаєв

Так, ваше право. Це дивно працювало і на моєму шляху.
Аннан

Хтось, будь-ласка, поясніть протиріччя?
Аннан

Не я, але хотів би компенсувати. Це хороше рішення, яке працює.
minaev

1
Я б сказав, що в сценаріях безпечніше використовувати небезпечні команди, ніж вручну. У добре перевірених сценаріях, це :). З іншого боку, chmodце далеко не справжня, справді небезпечна команда. У порівнянні з rm, я маю на увазі, або rsync --deleteчи деякі інші.
minaev

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 змусить рекурсивність. (використовуйте його лише в тому випадку, якщо ви впевнені в праві, яке ви хочете застосувати, і в файлі всередині каталогу.)

Якщо ви хочете змінити право на файл1, виконайте вказані нижче дії.

chmod 775 /your_directory/file1

І ось так розсипається печиво!

/! \ Будьте обережні, неправильне використання цієї команди може знищити всі ваші дозволи ОС і призвести до її несправності. /! \

ps: шукайте там, щоб дізнатися більше інформації про chmod.

Сподіваюся, що це вам допоможе.


Я додав дещо роз’яснення до питання. Файли можуть не мати однакових дозволів власника, тому, якщо потрібно використовувати chmod, то повинен бути спосіб вилучення дозволів власника перед передачею його в chmod?
Аннан

це складно, але команда ls -l повинна дати вам дозвіл, але це буде у такій формі -rw-rw-r--. Проблема полягає в тому, що НЕ МОЖЕТЕ використовувати сценарій для роботи з chmod! спершу потрібно зняти весь дозвіл на файл. Тоді chmod мати гарне право для групи. Я відредагую свою відповідь, щоб показати приклад.
Anarko_Bizounours
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.