คำสั่ง id: ตรวจสอบ UID และกลุ่ม whoami, groups และกลุ่มเสริม
บนเซิร์ฟเวอร์ Linux เมื่อต้องการตรวจสอบ UID และกลุ่มของบัญชีปัจจุบันให้ใช้คำสั่ง id ถ้าต้องการเฉพาะชื่อบัญชีให้ใช้ whoami และถ้าต้องการเฉพาะชื่อกลุ่มให้ใช้ groups เมื่อรันทั้งสามคำสั่งตามลำดับบนเซิร์ฟเวอร์ AlmaLinux 9 และ Debian 12 แล้วเปรียบเทียบผลลัพธ์ พบว่า id -un กับ whoami แสดงชื่อบัญชีเดียวกัน ส่วน groups แสดงรายการกลุ่มของ id โดยเหลือเฉพาะชื่อ
ผลลัพธ์ด้านล่างได้จากเซิร์ฟเวอร์ AlmaLinux 9.8 ด้วยบัญชี root และจากเซิร์ฟเวอร์ Debian 12 ด้วยบัญชีทั่วไป ชื่อและหมายเลขของบัญชีล็อกอินกับกลุ่มเสริมถูกเปลี่ยนเป็นค่าตัวอย่าง (user1, 1000, adm, systemd-journal)
1️⃣ วิธีใช้พื้นฐานของคำสั่ง id
เมื่อรัน id โดยไม่ใส่ออปชัน ข้อมูลของบัญชีที่รันเชลล์ปัจจุบันจะแสดงในบรรทัดเดียว เมื่อรันด้วยบัญชี root ทั้งสามช่องเป็น 0(root)
iduid=0(root) gid=0(root) groups=0(root)ช่อง uid คือหมายเลขและชื่อของบัญชี ช่อง gid คือหมายเลขและชื่อของกลุ่มหลัก (primary group) ส่วนช่อง groups คือกลุ่มทั้งหมดที่บัญชีนั้นสังกัด โดยกลุ่มหลักอยู่หน้าสุด
เมื่อพิมพ์ชื่อบัญชีต่อท้าย id จะแสดงข้อมูลของบัญชีนั้น เมื่อตรวจบัญชีทั่วไป user1 ที่มีกลุ่มเสริม ในช่อง groups มี adm และ systemd-journal ต่อจากกลุ่มหลัก user1 กลุ่มที่สังกัดเพิ่มนอกเหนือจากกลุ่มหลักเหล่านี้คือกลุ่มเสริม (supplementary group)
id user1uid=1000(user1) gid=1000(user1) groups=1000(user1),4(adm),190(systemd-journal)มีหลายบัญชีที่หมายเลข UID กับ gid ตรงกัน จึงเข้าใจได้ง่ายว่าตัวเลขสองตัวนี้เป็นค่าเดียวกัน แต่บัญชี adm ที่มีอยู่ในเซิร์ฟเวอร์ตั้งแต่ต้นมี UID เป็น 3 และหมายเลขกลุ่มหลักเป็น 4 ส่วนบัญชี operator มีกลุ่มหลักเป็น root
id admuid=3(adm) gid=4(adm) groups=4(adm)id operatoruid=11(operator) gid=0(root) groups=0(root)เมื่อพิมพ์หลายบัญชี จะแสดงบรรทัดละหนึ่งบัญชี
id root binuid=0(root) gid=0(root) groups=0(root)
uid=1(bin) gid=1(bin) groups=1(bin)ถ้าพิมพ์บัญชีที่ไม่มีอยู่ จะขึ้นข้อผิดพลาด [no such user] และรหัสออกคือ 1
id no-such-user9id: 'no-such-user9': no such userecho $?1รหัสออกเมื่อพิมพ์บัญชีที่มีอยู่คือ 0 จึงใช้ในสคริปต์เป็นเงื่อนไขตรวจว่ามีบัญชีนั้นหรือไม่ได้
2️⃣ ออปชันของคำสั่ง id
เมื่อต้องการส่งหมายเลขเพียงตัวเดียวจากผลลัพธ์ทั้งหมดให้สคริปต์ ให้เลือกช่องเดียวด้วยออปชัน -u แสดง UID -g แสดงหมายเลขกลุ่มหลัก และ -G แสดงหมายเลขของกลุ่มทั้งหมดที่สังกัด
id -u0id -u daemon2id -G user11000 4 190เมื่อใช้ -n ร่วมด้วย จะแสดงชื่อแทนหมายเลข เมื่อตรวจกลุ่มของ user1 ด้วย [id -Gn] หมายเลขสามตัวก็เปลี่ยนเป็นชื่อสามชื่อ
id -Gn user1user1 adm systemd-journalid -gn user1user1-n และ -r ใช้ร่วมกับตัวใดตัวหนึ่งใน -u, -g, -G เมื่อพิมพ์ -n เพียงอย่างเดียวก็ขึ้นข้อผิดพลาดด้านล่าง
id -nid: cannot print only names or real IDs in default format-r แสดง ID จริง (real) แทน ID ที่มีผล (effective) เมื่อรัน [id -ur] ในเชลล์ของบัญชี root ได้ 0 ถ้าพิมพ์ออปชันที่เลือกหมายเลขตั้งแต่สองตัวขึ้นไปร่วมกัน เช่น -u กับ -g จะขึ้นข้อผิดพลาด [cannot print "only" of more than one choice] สรุปออปชันได้ดังด้านล่าง
| ตัวเลือก | คัดลอก | คำอธิบาย |
|---|---|---|
| -u--user | แสดงหมายเลข UID | |
| -g--group | แสดงหมายเลขกลุ่มหลัก | |
| -G--groups | แสดงหมายเลขของกลุ่มทั้งหมดที่สังกัด | |
| -n--name | ใช้ร่วมกับ -u, -g, -G เพื่อแสดงชื่อแทนหมายเลข | |
| -r--real | ใช้ร่วมกับ -u, -g, -G เพื่อแสดง ID จริง (real) แทน ID ที่มีผล |
| ตัวเลือก | คัดลอก | คำอธิบาย |
|---|---|---|
| -Z--context | แสดงเฉพาะบริบทความปลอดภัยของโพรเซส | |
| -z--zero | คั่นรายการผลลัพธ์ด้วยอักขระ NUL แทนช่องว่าง ใช้กับรูปแบบปกติไม่ได้ | |
| -a | รับไว้เพื่อให้เข้ากันได้กับ id เวอร์ชันอื่นเท่านั้นและไม่นำไปใช้ | |
| --help | แสดงวิธีใช้ | |
| --version | พิมพ์เวอร์ชัน |
🔲 ซิมูเลเตอร์คำสั่ง id
ซิมูเลเตอร์ด้านล่างเริ่มด้วยบัญชี user1 ที่มีกลุ่มเสริม หลังเพิ่มกลุ่ม wheel ด้วยชิป [🖊 Other window] แล้วเปรียบเทียบ [id] กับ [id user1] ได้ และตรวจกลุ่มของเชลล์ใหม่ได้ด้วยชิป [🔁 Log in again]
3️⃣ คำสั่ง whoami กับ id -un
ถ้าต้องการเฉพาะชื่อบัญชีของเชลล์ปัจจุบัน ให้รัน whoami หน้า man อธิบายว่า whoami เป็นคำสั่งเดียวกับ [id -un] เมื่อรันสองคำสั่งนี้ด้วยบัญชี root ทั้งคู่แสดง root
whoamirootid -unrootด้วยบัญชีทั่วไปบนเซิร์ฟเวอร์ Debian 12 สองคำสั่งนี้ก็แสดงชื่อบัญชีเดียวกัน
whoamiuser1id -unuser1whoami แสดงชื่อบัญชีที่ตรงกับ UID ที่มีผล (effective) ในขณะนั้น เป็นคำสั่งที่ตรวจเฉพาะบัญชีปัจจุบัน ถ้าใส่ชื่อบัญชีต่อท้ายจึงขึ้นข้อผิดพลาด
whoami user1whoami: extra operand 'user1'
Try 'whoami --help' for more information.ชื่อหรือหมายเลขของบัญชีอื่นตรวจได้โดยพิมพ์บัญชีนั้นต่อท้าย id
id -un user1user1ถ้าพิมพ์ -u แทน -un ตำแหน่งเดียวกันจะแสดงหมายเลข UID แทนชื่อบัญชี
4️⃣ คำสั่ง groups กับกลุ่มเสริม
groups แสดงเฉพาะชื่อกลุ่มในบรรทัดเดียว ถ้าไม่พิมพ์ชื่อบัญชีจะแสดงกลุ่มของเชลล์ปัจจุบัน และด้วยบัญชี root มีเพียง root กลุ่มเดียว
groupsrootถ้าพิมพ์ชื่อบัญชี จะแสดงชื่อบัญชีและกลุ่มต่อจากเครื่องหมายโคลอน เมื่อพิมพ์หลายบัญชีก็แสดงบรรทัดละหนึ่งบัญชี
groups user1 daemonuser1 : user1 adm systemd-journal
daemon : daemonกลุ่มหลักกับกลุ่มเสริมถูกบันทึกไว้คนละที่ กลุ่มเสริมถูกเขียนเป็นสมาชิกในช่องที่สี่ของฐานข้อมูลกลุ่ม (/etc/group) ส่วนกลุ่มหลักถูกเขียนเป็นหมายเลขในช่องที่สี่ของข้อมูลบัญชี (/etc/passwd)
getent group admadm:x:4:user1getent group user1user1:x:1000:getent passwd daemondaemon:x:2:2:daemon:/sbin:/sbin/nologinกลุ่ม user1 ซึ่งเป็นกลุ่มหลักของ user1 มีช่องที่สี่ว่าง ส่วนกลุ่มเสริม adm มี user1 เขียนเป็นสมาชิก เลข 2 ในช่องที่สี่ของบรรทัดบัญชี daemon คือหมายเลขกลุ่มหลัก
เมื่อต้องการเพิ่มบัญชีเข้ากลุ่มเสริม ให้ใช้ คำสั่ง usermod ในรูป [usermod -aG กลุ่ม บัญชี] ถ้าใช้ -G โดยไม่มี -a บัญชีจะหลุดจากกลุ่มเสริมเดิมที่ไม่ได้เขียนไว้ในรายการ จึงต้องพิมพ์ -a ร่วมด้วย
groups ที่รันโดยไม่มีชื่อบัญชีจะแสดงกลุ่มของโพรเซสเชลล์ปัจจุบัน หน้า man อธิบายว่าเมื่อฐานข้อมูลกลุ่มเปลี่ยน ค่านี้อาจต่างจากฐานข้อมูลได้
ดังนั้นทันทีหลังเปลี่ยนกลุ่ม ให้ตรวจกลุ่มในฐานข้อมูลด้วย [groups บัญชี] หรือ [id บัญชี] และล็อกอินใหม่เพื่อให้มีผลกับเชลล์ ส่วนคำสั่งที่เปลี่ยน ID กลุ่มปัจจุบันโดยยังล็อกอินอยู่คือ newgrp
🔢 FAQ & เนื้อหาแนะนำ
การสร้างบัญชี
Linux: คำสั่ง useradd & คำสั่ง passwd
คำสั่งสำหรับสร้างบัญชีผู้ใช้ใหม่และกำหนดรหัสผ่านของบัญชีนั้น
ลบบัญชี
[Linux] คำสั่ง userdel: คำสั่งลบบัญชีผู้ใช้
คำสั่งสำหรับลบบัญชีผู้ใช้ที่ไม่ใช้แล้วพร้อมจัดการโฟลเดอร์โฮมไปด้วย
อายุรหัสผ่าน
คำสั่ง chage ของ Linux
คำสั่งสำหรับตรวจและเปลี่ยนระยะเวลาใช้งานและวันหมดอายุของรหัสผ่านบัญชีผู้ใช้
ℹ️ ประกาศเรื่องลิงก์แอฟฟิลิเอต
เนื้อหาของเว็บไซต์นี้มีลิงก์แอฟฟิลิเอต หากผู้เข้าชมซื้อสินค้าหรือบริการผ่านลิงก์เหล่านี้ เว็บไซต์นี้จะได้รับค่าคอมมิชชันจากผู้ขาย ในกระบวนการนี้ ราคาที่ผู้ซื้อจ่าย(ราคาจะลดลงเมื่อมีโปรโมชัน↓)จะไม่สูงขึ้นแต่อย่างใด ราคา ส่วนลด และข้อมูลสต็อกที่แสดงเป็นข้อมูล ณ เวลาที่เขียนและอาจต่างจากความเป็นจริง โปรดตรวจสอบกับผู้ขายอีกครั้งก่อนซื้อ การเลือกและการประเมินสินค้าเขียนตามเกณฑ์ของเราเอง และการได้รับค่าคอมมิชชันหรือไม่ไม่มีผลต่อลำดับการแนะนำหรือเนื้อหาการประเมิน