รหัสกลุ่มของชื่อกลุ่มนี้คืออะไร


คำตอบ:


41

ใช้getentคำสั่งสำหรับกลุ่มการประมวลผลและข้อมูลของผู้ใช้แทนการด้วยตนเองอ่าน/etc/passwd, /etc/groupsฯลฯ ระบบตัวเองใช้/etc/nsswitch.confการตัดสินใจที่จะได้รับข้อมูลจากและการตั้งค่าในไฟล์อาจถูกแทนที่โดยแหล่งข้อมูลอื่น ๆ getentปฏิบัติตามการกำหนดค่านี้ getentพิมพ์ข้อมูลไม่ว่าแหล่งที่มาจะอยู่ในรูปแบบเดียวกับไฟล์ดังนั้นคุณสามารถแยกวิเคราะห์เอาต์พุตในแบบเดียวกับที่คุณแยกวิเคราะห์/etc/passwd:

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

โปรดทราบว่าสำหรับชื่อผู้ใช้นี้จะง่ายกว่ามาก การใช้id:

$ id -u lightdm
105

ตกลงawkสั้นกว่าperl=)
AB

20

สามารถทำได้ง่ายๆด้วยcut:

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

getent group sudoจะได้รับบรรทัดที่เกี่ยวข้องกับsudoกลุ่มจาก/etc/groupไฟล์:

$ getent group sudo
sudo:x:27:foobar

:จากนั้นเราก็สามารถใช้ข้อมูลที่สามที่คั่นด้วย

หากคุณต้องการสตริงเอาต์พุตให้ใช้การทดแทนคำสั่งภายใน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โปรดทั่วไปมากกว่านี้อีกเล็กน้อย =)
AB

1
ทำไมการทดแทนกระบวนการ มีอะไรผิดปกติกับGID="$(getent group cdrom | cut -d: -f3)"?
kos

@kos ฉันไม่ชอบทำงานสิ่งต่างๆใน subshells เว้นแต่จะต้องเป็น .....
heemayl

@AB แก้ไข ...
heemayl

แต่มันเป็น POSIX ... : '(ไม่แค่ล้อเล่นฉันไม่รู้ความแตกต่างอย่างแท้จริง +1
kos

1

คำตอบที่ซับซ้อนมากขึ้นมักจะได้รับคำชื่นชม - ฉันเรียนรู้มากมายจากการอ่านพวกเขาค่อนข้างตรงไปตรงมา

ฉันมาที่หน้านี้เพราะฉันกำลังมองหารหัสกลุ่มของกลุ่มอีเมลของฉันและไม่ทราบว่าข้อมูลนั้นถูกเก็บไว้ที่ไหน

คำตอบของคุณยอดเยี่ยม - นี่คือคำตอบที่เรียบง่าย

def @ fourof4: / home $ cat / etc / group | จดหมาย grep

mail: x: 8:

ฉันรู้ว่ามันไม่ได้เรียงลำดับ ID แต่ทำหน้าที่ตามวัตถุประสงค์ของฉัน

Blockquote ลองสิ่งนี้: awk -F: '/ sudo / {พิมพ์ "กลุ่ม" $ 1 "ด้วย GID =" $ 3}' / etc / group - AB Jun 23 '15 at 15:51 Blockquote

ฉันเห็นสิ่งนี้พูดถึงนอกจากที่ฉันอ้างถึง ... ทุกคนได้รับความรักของฉัน - ขอโทษถ้าฉันคิดถึงคุณ

นี่คือสิ่งที่แนะนำให้ฉันรู้จักกับไฟล์นั้น
ขอขอบคุณและให้อาหารที่ยอดเยี่ยมในทุกรูปแบบที่คุณต้องการ! def


0

ใช้perlหนึ่งซับ:

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

หรือสั้นกว่า (และดีกว่า)

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

2
ค่อนข้างมั่นใจว่า Perl สามารถทำสิ่งที่แยกให้คุณได้ฉันคิดว่า-Fหรือ-lตัวเลือกทำเช่นนั้น
muru

0

แฮ็คสำหรับสิ่งที่ต้องการ: (อาจจะยังมีคำตอบที่ดีกว่า)

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

เวอร์ชั่นที่ง่ายขึ้น (ขอบคุณ @AB):

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

ตัวอย่าง:

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

1
ลองนี้:awk -F\: '/sudo/ {print "Group " $1 " with GID=" $3}' /etc/group
AB

ดูUUOC
คอส
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.