อะไรคือความแตกต่างระหว่าง "sudo -i" และ "sudo bash -l"


13

มีคำถามล่าสุดเกี่ยวกับ sysadmins หลายตัวที่ทำงานเป็นรูทและsudo bash -lถูกอ้างอิง

ผมค้นหานี้ใน google และ SE แต่ผมไม่เข้าใจความแตกต่างระหว่างและsudo bash -lsudo -i

จากหน้า man สำหรับ bash และ sudo ดูเหมือนว่าความแตกต่างอาจเป็นว่าsudo bash -l~ / .bash_profile, ~ / .bash_login และ ~ / .profile และ ~ / .bash_logout ของผู้ใช้ root แต่จากการทดสอบตัวเองดูเหมือนว่า มันรัน. bashrc ของผู้ใช้ปกติและไม่ใช่รูทหนึ่ง ฉันอาจเข้าใจผิดว่าผู้ใช้คนใดที่นิพจน์ ~ กำลังอ้างถึงในหน้าคู่มือ ชี้แจงถึงความแตกต่างและสถานการณ์การใช้งานจะได้รับการชื่นชม

คำตอบ:


10

พวกเขาแตกต่างกันว่าถ้าเชลล์ล็อกอินของผู้ใช้รูทที่ระบุใน / etc / passwd ไม่ใช่ bash คำสั่งที่สองจะให้เชลล์ bash คุณเป็นรูทในขณะที่คำสั่งแรกจะใช้เชลล์แบบโต้ตอบที่ผู้ใช้รูทใช้


สวัสดี @ johnshen64 คุณจะสามารถอธิบายสถานการณ์การใช้งานที่แตกต่างกันได้หรือไม่?
Rqomey

2
คนชอบเชลล์ที่ใช้ดังนั้นถ้าคุณต้องการให้แน่ใจว่าใช้ bash แล้วควรใช้รูปแบบที่สอง รูปแบบที่สองยังจำลองการล็อกอินจริง (นั่นคือความหมาย -l) แน่นอนคุณสามารถพิมพ์ bash เมื่อคุณพบว่าผู้ใช้ (ค่าเริ่มต้นไปที่ root) ไม่มี bash เป็นเชลล์แบบโต้ตอบในการใช้ sudo -i มิฉะนั้นความแตกต่างนั้นน้อยมาก ตามที่แสดงในคำตอบอื่น ๆ นอกจากนี้ยังมีความแตกต่างของสภาพแวดล้อมเล็กน้อย ในกรณีส่วนใหญ่ความแตกต่างไม่สำคัญและตัวแรกจะสั้นกว่าเนื่องจาก distros ทั่วไปส่วนใหญ่ใช้ bash ฉันไม่ค่อยใช้แบบฟอร์มที่ 2
johnshen64

4

นอกจากนี้ยังจะเพิ่มไปยัง @ johnshen64 ตอบผมสังเกตเห็นว่าsudo -iการภาวนาปรับปรุง$USERNAMEตัวแปร env ไปrootและcd ~ไปที่บ้านของผู้ใช้เช่นดังนั้น;

$ sudo -i
[root@workstation001 ~]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 ~]# echo $USERNAME
root
[root@workstation001 userXXX]# echo $PWD
/root

อย่างไรก็ตามสำหรับsudo bash -l $USERNAMEunmolested และไดเร็กทอรีการทำงานจะไม่เปลี่ยนแปลง (แม้ว่าสิ่งนี้จะไม่สอดคล้องกันกับผู้ใช้รายอื่นดูความคิดเห็น ... )

$ sudo bash -l
[root@workstation001 userXXX]# id
uid=0(root) gid=0(root) groups=0(root)
[root@workstation001 userXXX]# echo $USERNAME
userXXX
[root@workstation001 userXXX]# echo $PWD
/home/userXXX

ดังนั้นคุณคงไม่ได้รับชุดเดียวกัน~/.bashrcหรือไม่อยู่ในลำดับเดียวกันเป็นต้น

(กล่องของฉันอาจถูกทำให้ยุ่งเหยิงเล็กน้อยโดยนักออกแบบของฉัน.bashrcดังนั้น YMMV)


ขอบคุณ @Tom H: echo $USERNAMEคืนค่ารูททั้งสองครั้งสำหรับฉัน (บนเดสก์ท็อป Ubuntu และ centos 5.2 ของฉัน) PWD เป็นไปตามที่คุณรายงาน
Rqomey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.