Перечислите пользователей во всех указанных группах Unix

Возможности получения опасного скачка напряжения на сетевом кабеле являются очень низкими, но если такой скачок действительно произошел и был только умеренно опасен затем, отдельный NIC может предоставить Вам немного защиты (это могло бы вытолкать микросхему или другой компонент на NIC и но не влиять на материнскую плату, были как на материнской плате, большей частью Вашей технологии ввода-вывода управляют от одной микросхемы поэтому, если это появляется, все могло бы пойти).

Единственным даже немного вероятным путем Вы видели, что значительный скачок на строке является чем-то решительным как удар молнии, хотя, и в этом случае любая дуга, которая влияет на NIC, будет способной перейти через к другим соседним частям машины также (или может, по крайней мере, пожарить шину PCI, что карта включена). Таким образом, минимальное значение, которое будет иметь отдельный NIC, является столь же небольшим в схеме вещей относительно не быть достойным рассмотрения. Маленькие скачки (возможно, вызванный неправильно функционирующим оборудованием в другом конце строки или просто нормальными ежедневными случайными условиями) сетевые адаптеры разработаны для преодоления так или иначе.

4
задан 23 February 2011 в 12:29
4 ответа

Я не делаю известный никакой инструмент, делающий это, но это легко к сценарию.

Сначала получите список пользователей в системе, затем работайте groups на каждом и в конце, grep на желаемых группах:

getent passwd | sed 's/:.*$//g' | \
    while read user; do groups $user; done | \
    grep group1 | grep group2
3
ответ дан 3 December 2019 в 02:53

Это работает на две группы за один раз:

getent group dell hp | cut -d: -f 4 | tr , '\n' | sort | uniq -d | sed ':a;$s/\n/, /g;N;ba'

Поместите его в функцию с некоторыми модификациями, и это обработает любое количество групп:

grmagic () {
    getent group "$@" | 
        cut -d: -f 4 | 
        tr , '\n' | 
        sort | 
        uniq -dc | 
        grep "^[[:blank:]]*$#" |
        awk '{all = all d $3; d = ", "} END {print all}'
}

Выполнение это:

$ grmagic dell hp
zippy, george, bungle
$ grmagic dell hp rainbow
zippy, bungle

Функция, состоящая главным образом из сценария AWK:

grmagic () {
    getent group "$@" |
    awk -F: -v "c=$#" '{
            split($4, a, ","); 
            for (i in a) n[a[i]]++
        } 
        END { 
            for (i in n) 
            if (n[i] == c) {
                printf d i; d=", "
            }; 
            printf "\n"  }'
}
4
ответ дан 3 December 2019 в 02:53

Маленький сценарий Python:

#!/usr/bin/python

import subprocess,sys

group={}

for user in sys.argv[1:]:
    group[user] = set(subprocess.Popen("id -nG %s"%user, stdout=subprocess.PIPE, shell=True).stdout.read().split())

for g in group[sys.argv[1]] & group[sys.argv[2]]:
    print g

Тест:

# id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1),1004(us1),1005(dell)
# id user2
uid=1002(user2) gid=1002(user2) groups=1002(user2),1004(us1),1005(dell)
# ./test.py user1 user2
dell
us1
1
ответ дан 3 December 2019 в 02:53

Решение для удара, которое берет больше чем 1 пользователя на строку и печатает только уникальные группы. Нормальный вывод является одним grop на строку, использовать -c разделить вывод запятыми.

#!/bin/bash
\unalias -a

if [ $# -lt 1 ]
then
    echo "Need at least one user" 1>&2
fi

RESULT=''
COMMA=0
while [ $# -gt 0 ]
do
    if [ $1 == '-c' ]
    then
        COMMA=1
    else
        RESULT="$RESULT $(id -Gn $1)"
    fi
    shift
done
if [ $COMMA -eq 0 ]
then
    echo $RESULT |tr ' ' '\n'| sort -u
else
    echo $RESULT |tr ' ' '\n' | sort -u |tr '\n' ', ' |sed 's/.$//g'
    echo
fi

Пример произвел:

# ./magic.sh coredump mongodb
audio
cdrom
coredump
dialout
floppy
lpadmin
mongodb
netdev
nogroup
plugdev
powerdev
video

Используя -c:

# ./magic.sh -c coredump mongodb
audio,cdrom,coredump,dialout,floppy,lpadmin,mongodb,netdev,nogroup,plugdev,powerdev,video
0
ответ дан 3 December 2019 в 02:53

Теги

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