Câu trả lời:
Sử dụng getent
lệnh để xử lý các nhóm và thông tin người dùng, thay vì đọc thủ công /etc/passwd
, /etc/groups
v.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. getent
tuân theo cấu hình này getent
in 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
Đ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 sudo
sẽ nhận được dòng liên quan đến sudo
nhóm từ /etc/group
tệ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 =)
GID="$(getent group cdrom | cut -d: -f3)"
vậy?
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
Sử dụng perl
mộ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
-F
hoặc -l
tùy chọn làm điều đó.
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
awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group
awk
ngắn hơnperl
=)