OP đặt câu hỏi để loại trừ khả năng sử dụng lệnh nhóm . Vì đó là một phần của coreutils trên Linux, nên (a) nó đã bị xóa hoặc (b) OP đang nhập sai tên.
OP có thể đã sử dụng groups
như thế này, ví dụ:
for name in $(cut -d: -f1 /etc/passwd);do groups $name|grep -w sudo|awk '{print $1;}';done
Một câu trả lời được đề xuất chỉ là grep's cho tên nhóm trong /etc/group
. Đôi khi điều đó làm việc như dự định.
Việc sử dụng grep tốt hơn một chút sẽ tính đến cú pháp của /etc/group
:
group_name:password:GID:user_list
sao cho chỉ phần trước dấu hai chấm đầu tiên là tên nhóm hợp lệ. Một grep đơn giản mà không liên quan đến cú pháp có thể (và sẽ) nhận các kết quả sai lệch từ tệp. Sử dụng các biểu thức chính quy để làm cho grep khớp chính xác những gì cần thiết:
grep -E '^users:' /etc/group |sed -e 's/^.*://'
hoặc sử dụng biến shell:
grep -E '^'$groupname':' /etc/group |sed -e 's/^.*://'
Tuy nhiên, điều đó chỉ liệt kê những người không thuộc một nhóm mặc định . Để thêm chúng , bạn cần tính đến tệp mật khẩu, ví dụ: bằng cách trích xuất số id nhóm từ /etc/group
và in người dùng có nhóm mặc định khớp với /etc/passwd
, ví dụ:
grp=$(awk -F: '$1 ~ /^users$/ {print $3; }' </etc/group)
awk -F: '$4 ~ /^'$grp'$/ { print $1; }' </etc/passwd
Bạn có thể làm điều tương tự bằng cách chỉ sử dụng grep và sed, nhưng nó hiệu quả hơn so với sử dụng awk.
Một câu trả lời được đề xuất khác được đề xuất bằng cách sử dụng getent
, cũng có khả năng là trên máy Linux (với Debian, nó là một phần của GNU libc). Tuy nhiên, kiểm tra nhanh cho thấy nó chỉ cung cấp /etc/group
nội dung.
Tôi (giống như hầu hết) không có libusers
hoặc không lid
cài đặt, vì vậy tôi không thể nhận xét liệu nó có thỏa mãn điều kiện của OP hay không.
Ngoài ra còn có id
chương trình, cung cấp thông tin nhóm. Ai đó có thể mở rộng về điều đó như một câu trả lời có thể.
groups
mệnh lệnh. Không chắc là bạn không có nó trên Linux, vì nó là một phần của coreutils.