Id nhóm của tên nhóm này là gì?


27

Cách lấy ID nhóm GID đặt tên nhóm.

Đầu ra sẽ là ví dụ:

Group adm with GID=4

Câu trả lời:


41

Sử dụng getentlệnh để xử lý các nhóm và thông tin người dùng, thay vì đọc thủ công /etc/passwd, /etc/groupsv.v. Bản thân hệ thống sử dụng /etc/nsswitch.confđể quyết định lấy thông tin từ đâu và các cài đặt trong tệp có thể bị ghi đè bởi các nguồn khác. getenttuân theo cấu hình này getentin dữ liệu, bất kể nguồn nào, có cùng định dạng với các tệp, do đó bạn có thể phân tích cú pháp đầu ra giống như cách bạn phân tích cú pháp /etc/passwd:

getent group sudo | awk -F: '{printf "Group %s with GID=%d\n", $1, $3}'

Lưu ý rằng, đối với một tên người dùng, điều này dễ dàng hơn nhiều. Sử dụng id:

$ id -u lightdm
105

Ok, awkngắn hơn perl=)
AB

20

Điều này có thể được thực hiện đơn giản với cut:

$ cut -d: -f3 < <(getent group sudo)
27

getent group sudosẽ nhận được dòng liên quan đến sudonhóm từ /etc/grouptệp:

$ getent group sudo
sudo:x:27:foobar

Sau đó, chúng ta chỉ có thể lấy trường thứ ba được phân định bởi :.

Nếu bạn muốn chuỗi đầu ra phù hợp, hãy sử dụng thay thế lệnh trong echo:

$ echo "Group sudo with GID="$(cut -d: -f3 < <(getent group sudo))""
Group sudo with GID=27

% echo "Group cdrom with GID="$(cut -d: -f3 < <(getent group sudo))"" Group cdrom with GID=27, vui lòng nói chung chung hơn một chút =)
AB

1
Tại sao quá trình thay thế? Có chuyện gì với bạn GID="$(getent group cdrom | cut -d: -f3)"vậy?
kos

@kos Tôi không thích chạy mọi thứ trong subshells trừ khi bắt buộc .....
heemayl

@AB Đã chỉnh sửa ...
heemayl

Nhưng đó là POSIX ...: '(Không, chỉ nói đùa, tôi thực sự không biết sự khác biệt. +1
kos

1

câu trả lời phức tạp hơn luôn được đánh giá cao - tôi học được rất nhiều từ việc đọc chúng một cách khá trung thực.

Tôi đến trang này vì tôi đang tìm id nhóm của nhóm thư của mình và không biết thông tin đó được lưu trữ ở đâu.

câu trả lời của bạn rất hay - đây là câu hỏi đơn giản tôi nghĩ ra

def @ Fourof4: / home $ cat / etc / group | thư grep

thư: x: 8:

Tôi biết nó không sắp xếp ID, nhưng nó phục vụ mục đích của tôi.

Blockquote Hãy thử điều này: awk -F: '/ sudo / {print "Nhóm" $ 1 "với GID =" $ 3}' / etc / group - AB Jun 23 '15 lúc 15:51 Blockquote

tôi thấy điều này cũng được đề cập bên cạnh người tôi đã trích dẫn .... mọi người đều nhận được tình yêu của tôi - xin lỗi nếu tôi nhớ bạn

đây là những gì hướng dẫn tôi đến tập tin đó.
Cảm ơn và tiếp tục cho tôi ăn tuyệt vời trong bất kỳ hình thức bạn muốn! def


0

Sử dụng perlmột lớp lót:

% perl -ne '@elements=(split /:/); printf "Group %s with GID=%s\n",$elements[0],$elements[2]' <<< $(getent group sudo)
Group sudo with GID=27

hoặc ngắn hơn (và tốt hơn)

% perl -F/:/ -ane 'printf "Group %s with GID=%s\n",$F[0],$F[2]' <<< $(getent group sudo)
Group sudo with GID=27

2
Khá chắc chắn perl có thể thực hiện việc chia tách cho bạn, tôi nghĩ rằng -Fhoặc -ltùy chọn làm điều đó.
muru

0

Một hack cho cần thiết: (vẫn có thể có câu trả lời tốt hơn nhiều)

awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep "group-name"

Phiên bản đơn giản hơn (Cảm ơn @AB):

awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group 

Thí dụ:

$ awk -F\: '{print "Group " $1 " with GID=" $3}' /etc/group | grep sudo 
Group sudo with GID=27

1
Hãy thử điều này:awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group
AB

Xem UUOC
kos
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.