เราทุกคนรู้ว่าเรามีผู้ใช้ระบบและผู้ใช้บริการ ฉันกำลังมองหาวิธีที่จะแยกพวกเขาเป็นผู้ใช้ระบบและรายชื่อผู้ใช้บริการ
มีวิธีใดบ้าง
เราทุกคนรู้ว่าเรามีผู้ใช้ระบบและผู้ใช้บริการ ฉันกำลังมองหาวิธีที่จะแยกพวกเขาเป็นผู้ใช้ระบบและรายชื่อผู้ใช้บริการ
มีวิธีใดบ้าง
คำตอบ:
ขึ้นอยู่กับ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