*.h
файлы являются заголовочными файлами, и обычно содержит ограниченную функциональность. Для просмотра источника для функций, необходимо загрузить the/a C-библиотеку. На Ubuntu можно сделать, например:
apt-get source libc6
Затем введите недавно созданный каталог и игру вокруг.
Сделать просматривающее более приятное использование программой индексации как cscope. Сомнение gedit имеет любую интегрированную поддержку его, но другие инструменты, такие как (G) энергия дают Вам возможность соединиться с cscope базой данных внутренне.
По сути, можно нажать последовательность ключей для перехода к объявлению функций и т.д.
В сети это может помочь, если Вы интересуетесь glibc
.
Вы могли бы также найти ответы здесь полезными.
Лучшим и простейшим подходом будет разобрать файл с требуемой информацией, как предлагает @DannyG. В то время как я бы сделал это сам, другим подходом было бы жесткое кодирование комбинаций пользователь/группа в вашем скрипте. Например:
#!/usr/bin/env bash
## Set up an indexed array where the user is the key
## and the groups the values.
declare -A groups=(
["alice"]="groupA,groupB"
["bob"]="groupA,groupC"
["cathy"]="groupB,groupD"
)
## Now, go through each user (key) of the array,
## create the user and add them to the right groups.
for user in "${!groups[@]}"; do
useradd -U -G "${groups[$user]}" "$user"
done
NOTE: Вышеприведенное предполагает bash версию >= 4, так как ассоциативные массивы были недоступны в более ранних версиях.
] Учитывая ваши комментарии, вы можете просто статически построить скрипт с группами, жестко прописанными в нем. Этот скрипт ожидает список пользователей, по одному пользователю на строку, на стандартном входе. Поэтому вызывайте его, например, с помощью []./script < users.txt[
].[
#!/bin/bash
groups="p q r" # the list of all groups you want your users in
# the following function is a case statement
# it takes as first argument a user, and as second argument a group
# it returns 0 if the user must be added to the group and 1 otherwise
must_belong_to() {
case $2 in # first we explore all the groups
p)
case $1 in # and for each of them, we examine the users
a | b ) # first selection: the users that must belong to the group
true
;;
*) # second selection: all the others
false
;;
esac
q)
# same here...
;;
esac
}
# we loop on the input file, to process one entry
# (i.e. one user) at a time
while read user
do
# We add the user. You may want to give some options here
# like home directory (-d), password (-p)...
useradd $user
# then we loop on the existing groups to see in which
# one the user must be added
for g in $groups
do
# if the user must be added to the group $g
if must_belong_to $user $g
then
# we add it with the command gpasswd
gpasswd -a $user $g
fi
done
done
]
[]Как пояснил @terdon, эта версия []must_belong_to()[
] может быстро вырасти. Вот еще одно решение с использованием ассоциативных массивов:[
#!/bin/bash
declare -A groups
# we declare all the groups and then, for each one, its members
all_the_groups="a b"
groups[a]="p q r"
groups[b]="q r s"
must_belong_to() {
# we extract a list of all users for the group in parameter
read -a all_the_users <<< "${groups["$2"]}"
# we iterate over the users from the group
for u in $all_the_users
do
# if the user belong to the group,
# we return here
[[ $u == $1 ]] && return 0
done
# in case the user dosn't belong to the group,
# we end up here
return 1
}
] Так как входной пример не приведен, я предполагаю очень простой patern:
Uesrs groups
a p,r,t
b p,q
В этом случае у вас есть несколько вариантов, так как usermod -G
может использовать вторую колонку в исходном виде.
что-то вроде
while read line
do
usermod -G "$(cut -f2 -d" ")" $(cut -f1 -d" ")
done < users.txt
Пока цикл читает каждую строку из users.txt и передает ее usermod.
команда usermod -G group1,group2,group3 user
изменяет группы пользователей на запрошенные группы.
cut
просто разделяет поля на основе разделителя -d "
, поэтому первое поле используется в качестве имени пользователя (логина), а второе - для групп.
Если вы хотите добавить группы к текущим (существующим) группам - add -a, команда выглядит как usermod -a -G ...