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 groupsnhư 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/groupvà 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/groupnội dung.
Tôi (giống như hầu hết) không có libusershoặc không lidcà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ó idchươ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ể.
groupsmệ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.