นี่ไม่ได้ตอบคำถามโดยตรง แต่ฉันไม่คิดว่าคำถามที่ถูกถามจะถูกถามที่นี่ ดูเหมือนว่าผู้ถามต้องการโปรแกรมที่จะทำหน้าที่แตกต่างกันอย่างน่าเชื่อว่าถ้ามีสิทธิ์บางอย่างหรือไม่ แต่ฉันจะยืนยันการตรวจสอบ sudo ไม่ใช่วิธีที่จะทำเช่นนั้น ประการแรกระบบจำนวนมากอาจไม่ใช้ "sudo" มันไม่จำเป็นต้องใช้บน Linux หรือ Unixes จำนวนมาก
ตัวอย่างเช่นผู้ใช้อาจเข้าสู่ระบบในฐานะ root แล้วทำให้ sudo ไร้ความหมายหรืออาจเป็นระบบที่มีผู้ใช้ที่ไม่ใช่รูทที่ยังคงมีความสามารถในการดำเนินงานดูแลระบบที่โปรแกรมอาจต้องการทำ ในที่สุดระบบอาจไม่มีรูทหรือ sudo เลยและใช้ระบบควบคุมการเข้าถึงที่จำเป็นซึ่งมีความสามารถแตกต่างกันและไม่มีการใช้ superuser ทั้งหมดในการ sudo หรือผู้ใช้อาจถูก sudoed แต่เข้าสู่บัญชีที่ไม่มีสิทธิ์มากกว่าบัญชีของตนเองเพื่อความปลอดภัย (ฉันมักจะเรียกใช้รหัสที่ไม่น่าเชื่อถือกับผู้ใช้ที่ไม่มีสิทธิ์ชั่วคราวที่สามารถเขียนลง ramdisks ได้เท่านั้นไม่สามารถเพิ่มสิทธิ์ของฉันได้ ) โดยรวมแล้วเป็นความคิดที่ไม่ดีที่จะสมมติว่ารูปแบบการอนุญาตเฉพาะเช่น sudo หรือการมีอยู่ของ root หรือสมมติว่าผู้ใช้ sudoed มีสิทธิ์พิเศษใด ๆ
หากคุณต้องการทราบว่าคุณมีสิทธิ์ในการดำเนินการตามปกติวิธีที่ดีที่สุดคือการลองและทำมันจากนั้นตรวจสอบ errno สำหรับปัญหาการอนุญาตหากล้มเหลวหรือหากเป็นการดำเนินการหลายขั้นตอนที่ต้องล้มเหลวทั้งหมดหรือประสบความสำเร็จทั้งหมด คุณสามารถตรวจสอบว่าการทำงานจะทำงานกับฟังก์ชั่นเช่นฟังก์ชั่นการเข้าถึง POSIX หรือไม่ (โปรดระวังสภาวะการแข่งขันที่เป็นไปได้ที่นี่หากสิทธิ์มีการเปลี่ยนแปลงอย่างแข็งขัน)
หากคุณจำเป็นต้องรู้ผู้ใช้จริงหลัง sudo คุณสามารถใช้ฟังก์ชันgetloginซึ่งควรทำงานกับเซสชันแบบโต้ตอบใด ๆ ที่มีเทอร์มินัลพื้นฐานและจะช่วยให้คุณยกตัวอย่างเช่นค้นหาผู้ที่กำลังใช้คำสั่งสำหรับการตรวจสอบหรือค้นหา โฮมไดเร็กทอรีของผู้ใช้จริงเพื่อบันทึกบันทึก
ในที่สุดหากสิ่งที่คุณต้องการจริงๆคือการตรวจสอบว่าผู้ใช้มีการเข้าถึงรูท (ยังเป็นความคิดที่ไม่ดี แต่มีการใช้งานที่เฉพาะเจาะจงน้อยลง) คุณสามารถใช้getuidเพื่อตรวจสอบ uid ของ 0 และรูท