Какой тип группы, когда их создавать?

#!/bin/bash

bar () {
    # bashpid is set in our environment from the calling function
    printf 'bar BASHPID = %d, bar bashpid = %d\n' "$BASHPID" "$bashpid"

    # in your case, you would have...

    local logfile="/some/path/to/log.$bashpid"

    # etc.
}

foo () {
    local bashpid="$BASHPID"
    local message

    local logfile="/some/path/to/log.$BASHPID"

    message=$( bashpid="$bashpid" bar ); printf 'Message from bar: %s\n' "$message"
    message=$( bashpid="$bashpid" bar ); printf 'Message from bar: %s\n' "$message"
    message=$( bashpid="$bashpid" bar ); printf 'Message from bar: %s\n' "$message"
    message=$( bashpid="$bashpid" bar ); printf 'Message from bar: %s\n' "$message"
}

foo &
foo &
foo &

wait

Пример запуска:

$ bash script.sh
Message from bar: bar BASHPID = 71979, bar bashpid = 18461
Message from bar: bar BASHPID = 7420, bar bashpid = 71036
Message from bar: bar BASHPID = 6109, bar bashpid = 18461
Message from bar: bar BASHPID = 27868, bar bashpid = 71036
Message from bar: bar BASHPID = 44547, bar bashpid = 60086
Message from bar: bar BASHPID = 69310, bar bashpid = 71036
Message from bar: bar BASHPID = 37649, bar bashpid = 60086
Message from bar: bar BASHPID = 15999, bar bashpid = 71036
Message from bar: bar BASHPID = 81520, bar bashpid = 18461
Message from bar: bar BASHPID = 92568, bar bashpid = 60086
Message from bar: bar BASHPID = 72438, bar bashpid = 18461
Message from bar: bar BASHPID = 15094, bar bashpid = 60086

Для каждого вызова fooв основной части скрипта будет выполнено четыре вызова barи будут созданы четыре строки вывода. Как видите, есть только три уникальных bashpidчисла, каждое из которых относится к одному из fooвызовов.

Другой способ передать $bashpidиз fooв bar, очевидно, передать его в качестве аргумента командной строки и получить с local bashpid="$1"в barили что-то подобное, но вы говорите, что не не хочу этого делать.

0
23.08.2020, 16:50
2 ответа

Группы по своей сути не являются первичными или вторичными. Группа — это просто группа.

Важно то, как они используются.

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

Когда начинается процесс входа в систему для настройки членства в вашей группе, первое, что он делает, это просматривает файл passwd.

Для меня на моей машине:

sweh:x:500:500:Stephen Harris:/home/sweh:/bin/ksh

Второе число определяет первичную группу . Итак, моя основная группа — это группа с идентификатором 500.

Следующее, что он делает, это просматривает групповой файл и видит, против каких записей указано мое имя пользователя:

% grep -w sweh /etc/group
wheel:x:10:sweh
sweh:x:500:
apache:x:48:sweh
news:x:13:news,sweh

Таким образом, мы можем видеть, что я был указан против групп 10, 48 и 13. Это вторичные группы.

Это можно увидеть с помощью команды id:

% id
uid=500(sweh) gid=500(sweh) groups=500(sweh),10(wheel),13(news),48(apache)

Значение gidуказывает первичную группу. Значение groupsперечисляет все группы, в которых я состою. Все, что не является первичным, является вторичным.

Другой логин может иметь разные первичные и вторичные группы в зависимости от их записи в passwdи group.

Итак, мы видим, что «первичный» и «вторичный» основаны на контексте пользователя и на том, как этот пользователь определен. Это не основано на самой группе.

3
18.03.2021, 23:10

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

2
18.03.2021, 23:10

Теги

Похожие вопросы