Re: [问题] 想写一个command,搜寻group内member

楼主: kenduest (小州)   2015-05-30 19:49:42
※ 引述《proud (hc)》之铭言:
: 想要写一个commamd 来查询某一group的user有谁
: 但不管用getgrnam() 或者是getgrnet() 都没有办法compiler
: 无法print出来
: 也想过给予gid 来搜寻, 但还是一直error
: 想请问这个问题点该怎么解决?
: 谢谢大家
若不是使用 c 版本而是 shell script 参考看看。
#!/bin/bash
if [ "$#" -eq 1 ]; then
group_name="$1"
group_gid=$(cat /etc/group | grep "^$group_name:" | cut -d : -f 3)
members_in_group=$(echo "$itemlist" | cut -d : -f 4- | tr , " ")
echo -n "GroupName: $group_name, Members: $members_in_group "
user_list=$(grep "^.*:.*:.*:$group_gid:" /etc/passwd | cut -d : -f 1 | tr "\n" " ")
[ -n "user_list" ] && echo "$user_list"
else
for itemlist in $(cat /etc/group | grep -v "#")
do
group_name=$(echo "$itemlist" | cut -d : -f 1)
group_gid=$(echo "$itemlist" | cut -d : -f 3)
members_in_group=$(echo "$itemlist" | cut -d : -f 4- | tr , " ")
echo -n "GroupName: $group_name, Members: $members_in_group "
user_list=$(grep "^.*:.*:.*:$group_gid:" /etc/passwd | cut -d : -f 1 | tr "\n" " ")
[ -n "user_list" ] && echo "$user_list"
done
fi
跑起来效率不大好,尤其列出所有群组的成员清单时候....
另外提供一个 python 版本相同的功能:
#!/usr/bin/python
# coding: utf8
import sys
group_handle = open("/etc/group","r")
passwd_handle = open("/etc/passwd","r")
passwd_list = [ line.strip().split(":") for line in passwd_handle if line[0] != '#' ]
group_list = [ line.strip().split(":") for line in group_handle if line[0] != '#' ]
group_members = [ [line[0],line[1],line[2],line[3].split(",")] for line in group_list ]
for each_group_member in group_members :
for i in range(each_group_member[3].count('')) :
each_group_member[3].remove('')
for passwd_line_item in passwd_list :
for group_line_item in group_members :
if passwd_line_item[3] == group_line_item[2] and passwd_line_item[0] not in group_line_item[3] :
group_line_item[3].append(passwd_line_item[0])
################################################################################
if len(sys.argv) == 1 :
for line in group_members :
print("Group: %s, Members: %s" % (line[0], ",".join(line[3])))
else :
search_name = sys.argv[1]
for line in group_members :
if search_name == line[0]:
print("Group: %s, Members: %s" % (line[0], ",".join(line[3])))
python code 跑起来比较快.....
档案下载:https://drive.google.com/file/d/0B1rfFnHqmPRLNGhqNFFLVlU0aVE/view?usp=sharing
ps: code 提供参考不一定保证都正确,谢谢

Links booklink

Contact Us: admin [ a t ] ucptt.com