想寫一個command,搜尋group內member - Linux

Hazel avatar
By Hazel
at 2015-05-30T19:49

Table of Contents

※ 引述《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 提供參考不一定保證都正確,謝謝

--
Tags: Linux

All Comments

想寫一個command,搜尋group內member

Skylar DavisLinda avatar
By Skylar DavisLinda
at 2015-05-29T17:51
不介意用bash解決問題的話 #!/bin/bash GROUP_LIST=$(/bin/cat /etc/group | /usr/bin/awk -v a=and#34;$1and#34; \ and#39;BEGIN{FS=and#34;:and#34;}{if($1 == a){print $4 ...

想寫一個command,搜尋group內member

Isabella avatar
By Isabella
at 2015-05-29T15:45
想要寫一個commamd 來查詢某一group的user有誰 但不管用getgrnam() 或者是getgrnet() 都沒有辦法compiler 無法print出來 也想過給予gid 來搜尋, 但還是一直error 想請問這個問題點該怎麼解決? 謝謝大家 - ...

無線網卡附的driver跟系統抓的不一樣

Ophelia avatar
By Ophelia
at 2015-05-29T00:02
花了點時間抓了kernel3.19回來compile然後安裝 (建議用cross compile,不然會很久) 然後從這邊抓driver回來compile https://github.com/porjo/mt7601 就沒問題了(至少能上網) 至於AP...等我有需要再看看好了(懶得搞) ※ 引述《wt ...

Workstation的檔案拖移

Valerie avatar
By Valerie
at 2015-05-28T23:35
不知道能不能發在這個版, 想請教一下, 為什麼有些版本Ubuntu可以直接從實體OS拖移檔案丟到虛擬OS裡面, 而有些不行呢? 之前裝的比較舊的版本可以直接拖移, 可是最近裝了最新版的卻沒辦法做到, 看過設定(VMandgt;Settingandgt;Optionsandgt;Guest Isol ...

在Ubuntu環境下安裝Windows7

Todd Johnson avatar
By Todd Johnson
at 2015-05-28T21:08
事情是這樣的 手邊現有的資料 USB*1。Windows開機碟 http://i.imgur.com/cvwhtRd.jpg USB*1。Ubuntu開機碟 http://i.imgur.com/w1OJrUv.jpg 目前磁碟狀態SSD http://i.imgur.com/V6afE7W.jpg H ...