$ cat foo
.23.12.44.5.
.233.3.3.3
line1
23.4.5.3.2..
....33.2.3.45.5
.3.3.2.....
line2
$ sed 's/^ *\.*//;s/\.* *$//' foo
23.12.44.5
233.3.3.3
line1
23.4.5.3.2
33.2.3.45.5
3.3.2
line2
Одна причина: когда создается файл, он может быть только в одной группе, и эта группа не указывается при создании файла. Итак, должно быть понятие единой активной группы.
Все группы активны в любое время.
Вы можете получить доступ к любому файлу, к которому имеет доступ любая из ваших групп. Но когда вы создаёте новый файл/процесс, он создаётся с использованием вашей основной группы, если только не используется setgid или ACL по умолчанию.
Q1: Итак, вопрос в том, что является фундаментальной причиной, по которой проектировщики выбрали эту концепцию одной активной группы, хотя и позволяют пользователю иметь более одной дополнительной группы?
Первоначальным основным назначением групп в Unix было разрешение совместного доступа к файлам на дисках. В этом случае вы, как правило, большую часть времени имели доступ к своим файлам, а иногда и к файлам, которые были общими для группы пользователей.
Итак, я подозреваю, что она была разработана с учетом этой модели для начала. Со временем эта модель была изменена, но общий подход остается нетронутым, что вы находитесь в основной группе (указанной в /etc/passwd
) и у вас есть дополнительные группы, в которые вы можете войти (указанные в /etc/group
).
Некоторые из более ранних реализаций (например, на Солнце/Солярисе) включали ограничение в ~15 групп, в которые пользователь может входить при использовании NIS+.
Q2: Что было бы проблемой, если бы все группы были активны одновременно?
Внутри POSIX есть несколько системных вызовов, которые подвергают API с такой конструкцией, поэтому, вероятно, было бы большой задачей модифицировать его, учитывая количество программного обеспечения, которое построено вокруг него на данный момент. И на самом деле нет никаких причин изменять его.
Другими большими ограничениями являются файловая система и пространство для процессов. Для файловых систем они обычно включают только одно значение для GID, к которому должен быть "сгруппирован" данный файл или каталог. То же самое касается и запущенных процессов. Обычно они связаны с одной группой.
Однако, этот общий подход со временем смог адаптироваться к интеграции с Active Directory и другими технологиями учетных записей, так что это отличная реализация, хотя и немного странная, когда вы впервые узнаете об этом.