Bash Scripting - Як встановити групу, з якою будуть створюватися нові файли?


75

Я роблю сценарій оболонки bash, і я хочу змінити групу за замовчуванням, для якої створюються нові файли. Я знаю, що ви використовуєте umaskдля зміни дозволів. Чи є щось для групи?

Відповіді:


13

newgrpКоманда використовується для зміни поточного ідентифікатора групи під час сеансу входу.

Нові каталоги, створені за цей сеанс, матимуть ідентифікатор групи, встановлений командою.

newgrp(1)


Я член групи, то чому він запитує у мене пароль? Не подобається мій пароль!
Майкл

також, якщо я запускаю "newgrp <group>" як root (наприклад, запускаю скрипт з newgrp у ньому за допомогою sudo), він скидає мене в кореневу оболонку.
Michael

Це не те, для чого слід використовувати newgrp. Що станеться, якщо ви забудете використовувати newgrp поза сценарієм? Як скрипт буде обробляти нову оболонку, яку створює newgrp. Відповідь @ mark40 краща.
ноель

16
Чи справді це вважається відповіддю? Це посилання.
mcont

Не можу не проголосувати, бо це цікава інформація. Я все ще думаю, що відповідь @ mark4o повинна бути правильною.
Teekin

184

Є кілька способів зробити це:

  1. Ви можете змінити групу за замовчуванням для всіх файлів, створених у певному каталозі, встановивши прапорець setgid у каталозі ( chmod g+s _dir_). Потім будуть створені нові файли в каталозі з групою каталогів (встановлених за допомогою chgrp <group> <dir>). Це стосується будь-якої програми, яка створює файли в каталозі.

    Зверніть увагу, що це автоматично успадковується для нових підкаталогів (станом на Linux 3.10), однак, якщо підкаталоги вже були, ця зміна до них не застосовуватиметься (для цього використовуйте -Rпрапор).

  2. Якщо прапорець setgid не встановлено, то для групи за замовчуванням буде встановлено поточний ідентифікатор групи процесу створення. Хоча це можна встановити за допомогою newgrp команди, це створює нову оболонку, яку важко використовувати в сценарії оболонки. Якщо ви хочете виконати певну команду (або набір команд) зі зміненою групою, використовуйте команду sg <group> <command>.

    sg не є стандартною командою POSIX, але доступна в Linux.


10
Лише невеличка примітка. Якщо ви намагаєтесь запустити chmod g+s _dir_каталог, який має групу y, і ви виконуєте команду під користувачем x, а користувач x не є членом групи y, це не працюватиме. Вам доведеться запустити його як root.
LEDfan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.