Hiển thị tất cả người dùng và nhóm của họ / ngược lại


70

Tôi biết tôi có các nhóm và người dùng hiện có nhưng tôi không chắc về liên kết của họ. Có lệnh shell nào tôi có thể sử dụng để liệt kê tất cả người dùng hoặc tất cả các nhóm và lệnh liệt kê tất cả các nhóm / người dùng cho một người dùng / nhóm được chỉ định không?

Vì vậy, một cái gì đó như showuserssẽ liệt kê tất cả người dùng và showgroups -u thisusersẽ hiển thị tất cả các nhóm có thisusertrong đó.


không có lệnh như vậy. Bạn cần phải tự viết kịch bản.
Chris

làm thế nào vềcat /etc/passwd
Sudip Bhandari

Câu trả lời:


93

Tất cả người dùng:

$ getent passwd

Tất cả các nhóm:

$ getent group

Tất cả các nhóm với một người dùng cụ thể:

$ getent group | grep username

Tôi thấy rằng có một người dùng có tên speech-dispatcherthuộc về âm thanh nhóm (dựa trên groups speech-dispatcher). Nhưng nó không được liệt kê theo getent grouplệnh! Vấn đề là gì?
Học viên PHP

3
@PHPLearner Nếu bạn có một câu hỏi khác, xin vui lòng gửi câu hỏi , không phải bình luận.
EEAA

+1 vì điều này cũng sẽ liệt kê người dùng / nhóm không tìm thấy trong các tệp /etc/passwd& /etc/grouptệp thông thường, tức là khi một hệ thống được cấu hình để sử dụng các thư mục trung tâm như NIS và LDAP hoặc bất kỳ cơ sở dữ liệu người dùng / nhóm thay thế nào khác, miễn là hỗ trợ liệt kê người dùng / nhóm .
HBruijn

Điều này sẽ không trả về tất cả người dùng và nhóm trong cấu hình ldap hoặc sssd nếu tắt bảng liệt kê.
Jens Timmerman

16

Liệt kê người dùng và nhóm của họ:

for user in $(awk -F: '{print $1}' /etc/passwd); do groups $user; done

Liệt kê các nhóm và người dùng của họ:

cat /etc/group | awk -F: '{print $1, $3, $4}' | while read group gid members; do
    members=$members,$(awk -F: "\$4 == $gid {print \",\" \$1}" /etc/passwd);
    echo "$group: $members" | sed 's/,,*/ /g';
done

1
Mặc dù điều đó có thể sẽ hoạt động, nhưng nó có vẻ hơi phức tạp, phải không, khi có các lệnh one-shot đơn giản hoàn toàn tốt để làm điều này?
EEAA

Nó chắc chắn sẽ không nhận được bất cứ thứ gì sống trong một kho lưu trữ tập trung. Và đó chắc chắn là thông tin mà bạn muốn xem.
Magellan

Tuyệt vời rất hữu ích, sẽ tốt hơn nếu đề cập rằng chúng là các lệnh riêng biệt.
Mian Asbat Ahmad

5

Nếu bạn không quan tâm đến người dùng từ xa như LDAP hoặc NIS, hãy liệt kê người dùng và các nhóm liên kết của họ theo cách đơn giản:

cut -d: -f1 /etc/passwd | xargs groups

Đầu ra;

root : root
myuser : root www-data fuse 
anotheruser : anotheruser   cdrom floppy audio dip video plugdev scanner bluetooth netdev

1
Điều này có cùng một vấn đề như câu trả lời của Chang ở chỗ nó bỏ qua người dùng / nhóm có nguồn gốc từ cơ sở dữ liệu như LDAP, NIS, v.v.
MadHatter

Điều này rất gọn gàng đưa ra thông tin trong một định dạng cực kỳ rõ ràng, vì vậy vẫn có thể là bước đầu tiên hữu ích. Nó giúp chạy bộ nhớ của tôi về cú pháp của / etc / group và / etc / passwd!
Chris Woods

3

Liệt kê tất cả người dùng

cut -d':' -f 1 /etc/passwd

Hoặc là

awk -F ':' '{print $1}' /etc/passwd

Trong khi cat / etc / passwd hiển thị tất cả người dùng (và một loạt các nội dung khác), cut -d ':' -f 1 là cách đơn giản để phân tách từng dòng với ':' làm dấu phân cách và chỉ trích xuất trường đầu tiên (người dùng ). Khá giống với phiên bản awk.

Liệt kê tất cả các nhóm

cut -d':' -f 1 /etc/group

Hoặc là

awk -F ':' '{print $1}' /etc/group

Đoán xem, rất giống với danh sách người dùng. Chỉ cần phân tích / etc / nhóm thay thế.

Một cách thú vị khác, có thể gần hơn với những gì OP muốn, là compgen . Không chắc chắn về các vấn đề tương thích mặc dù.

compgen -u
compgen -g

2
Xin chào Elliot Baily, chào mừng bạn đến với Server Fault! Xin lưu ý rằng câu hỏi này đã hơn 5 tuổi và đã có câu trả lời đúng và được chấp nhận. Cũng lưu ý rằng giải pháp của bạn chỉ hoạt động nếu người dùng được lưu trữ trong / etc / passwd; câu trả lời được chấp nhận cũng hoạt động cho các cơ sở dữ liệu người dùng khác (như NIS hoặc LDAP). Nếu bạn muốn trả lời các câu hỏi cũ (điều này hoàn toàn tốt!) Bạn có thể muốn xem danh sách các câu hỏi chưa được trả lời - rất nhiều câu hỏi đang tìm kiếm tình yêu!
marcelm

-1

cho debian

cat /etc/passwd # show all users
cat /etc/group # show all groups
cat /etc/passwd | grep group # show all users with specified group

2
Ngược lại với điều này đã được chấp nhận, điều này không liệt kê người dùng / nhóm có nguồn gốc từ cơ sở dữ liệu người dùng từ xa như LDAP, NIS, v.v ....
HBruijn

-2

Như thế này:

sudo cat /etc/gshadow |grep group
sudo cat /etc/gshadow |grep username

1
Số /etc/gshadowkhông chứa thành viên nhóm ( /etc/groupkhông) và câu trả lời được chấp nhận từ 4,5 năm trước dù sao cũng chung chung hơn nhiều, vì nó cũng xử lý các nhóm từ xa.
Sven

-2

Sử dụng lệnh này để có được tất cả các nhóm và người dùng trong nhóm cụ thể đó.

grep '
> ' /etc/group
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.