เราทุกคนรู้ว่าเรามีผู้ใช้ระบบและผู้ใช้บริการ ฉันกำลังมองหาวิธีที่จะแยกพวกเขาเป็นผู้ใช้ระบบและรายชื่อผู้ใช้บริการ
มีวิธีใดบ้าง
เราทุกคนรู้ว่าเรามีผู้ใช้ระบบและผู้ใช้บริการ ฉันกำลังมองหาวิธีที่จะแยกพวกเขาเป็นผู้ใช้ระบบและรายชื่อผู้ใช้บริการ
มีวิธีใดบ้าง
คำตอบ:
ขึ้นอยู่กับgid
ผู้ใช้ระบบและผู้ใช้บริการสามารถแยกได้ดังนี้
/etc/passwd
มีรายการสำหรับผู้ใช้ทั้งหมดพร้อมกับข้อมูลอื่น ๆ ผู้ใช้บริการหรือผู้ใช้จริงมีgid
มากกว่าหรือเท่ากับ 1,000 ดังนั้นรายชื่อผู้ใช้จริงสามารถรับได้เช่น
awk -F: '($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
นอกจากนี้ยังสามารถแยกรายชื่อผู้ใช้ระบบ ( gid
<1,000) เป็น
awk -F: '($3<1000){print $1}' /etc/passwd
มันทำงานอย่างไร
เนื้อหาของ/etc/passwd
เป็นเช่น
root:x:0:0:root:/root:/bin/bash
...
souravc:x:1001:1001:Souravc:/home/souravc:/bin/bash
เมื่อใช้awk
กับ-F:
มันจะแยกเนื้อหาของบรรทัดออกเป็นหลายฟิลด์ที่ถือว่า:
เป็นตัวคั่นฟิลด์ gid
ฟิลด์แรกมีชื่อผู้ใช้และข้อมูลที่สามมี
ดังนั้นเพื่อแยกผู้ใช้จริงawk
เพียงแค่ตรวจสอบค่าของเขตข้อมูลที่สามมากกว่า 1,000 และไม่ได้เป็นผู้ใช้และพิมพ์เขตข้อมูลแรกเช่นชื่อผู้ใช้
ในการแสดงรายการผู้ใช้ระบบทั้งหมดนั้นเพียงตรวจสอบgid
น้อยกว่า 1,000 และพิมพ์ชื่อผู้ใช้
แก้ไข
ตามที่คุณต้องการในรายการroot
(gid = 0) ในรายชื่อผู้ใช้จริง รับผู้ใช้จริงในฐานะ
awk -F: '($3==0)||($3>=1000)&&($1!="nobody"){print $1}' /etc/passwd
รับผู้ใช้ระบบในฐานะ
awk -F: '($3<1000)&&($1!="root"){print $1}' /etc/passwd
หมายเหตุฉันไม่สนใจnobody
ผู้ใช้เสมอ
ในการแสดงรายการโลคัล (ผู้ใช้ระบบ) กว่าสามารถล็อกอินและมี homedir และ GID น้อยกว่า 1,000
cat /etc/passwd | cut -d: -f 1,3,6 | grep "[1-9][0-9][0-9][0-9]" | grep "/home" | cut -d: -f1
ในการแสดงรายชื่อผู้ใช้อื่น ๆ : (ส่วนใหญ่เป็นผู้ใช้ระบบและมี GID น้อยกว่า 1,000):
cat /etc/passwd | cut -d: -f 1,3,6 | grep -v "[1-9][0-9][0-9][0-9]" | cut -d: -f1