เมื่อฉันsu -
จะไปรูทไดเร็กทอรีปัจจุบันของฉันถูกตั้งเป็นรูทโฮม มีอยู่แล้วเพื่อเก็บไดเรกทอรีปัจจุบันที่ฉันชอบsudo -s
มาก หรือเป็นคำตอบให้ใช้ sudo?
เมื่อฉันsu -
จะไปรูทไดเร็กทอรีปัจจุบันของฉันถูกตั้งเป็นรูทโฮม มีอยู่แล้วเพื่อเก็บไดเรกทอรีปัจจุบันที่ฉันชอบsudo -s
มาก หรือเป็นคำตอบให้ใช้ sudo?
คำตอบ:
จะดีกว่าถ้าใช้ sudo เสมอถ้าเป็นไปได้เพราะคุณไม่จำเป็นต้องรู้รหัสผ่านของรูท ตั้งค่ารหัสผ่านรูทเป็นสิ่งที่ยาวและน่ากลัวจากนั้นล็อคในที่ปลอดภัย
หากคุณต้องการปฏิเสธใครบางคนในภายหลังคุณเพียงแค่ลบการเข้าถึงของพวกเขาไปยัง sudo แทนที่จะต้องสอนรหัสผ่านรูทใหม่ให้ทุกคน
อย่างไรก็ตาม - คุณไม่จำเป็นต้องใช้พารามิเตอร์ '-' หากคุณไม่ต้องการ คุณจะได้รับเชลล์ในฐานะรูท แต่มันจะไม่ใช่เชลล์ล็อกอิน (ดังนั้นมันจะไม่รัน. profile ของรูท)
asuser git reset --hard
ในกรณีของฉันฉันต้องการนามแฝงที่จะทำสิ่งที่ชอบ แต่su - <user> -m -c "git reset --hard"
และsudo -u <user> git reset --hard
จะช่วยรักษาสภาพแวดล้อมและ git ของฉันจะพยายามอ่านการตั้งค่า git ของผู้ใช้ปัจจุบัน ดังนั้นฉันแค่ต้องการระบุว่าบางครั้งโซลูชันของ user205705 โดยใช้ su - <user> -c "cd pwd
; bash" ดีกว่า
ฉันยอมรับว่า sudo เป็นคำตอบที่ดีกว่าเกือบทุกครั้ง แต่เพื่อตอบคำถามส่วนอื่น ๆ ...
เครื่องหมาย '-' ใน 'su -' ระบุว่าคุณต้องการเลียนแบบการเข้าสู่ระบบของผู้ใช้ขั้นสูงแทนที่จะเรียกใช้ด้วยสิทธิ์พิเศษของผู้ใช้ขั้นสูง
หากคุณใช้ 'su' ธรรมดาแทน 'su -' คุณจะอยู่ในไดเรกทอรีเดียวกัน อย่างไรก็ตามคุณจะต้องทำงานในสภาพแวดล้อมเดียวกันดังนั้นอาจต้องแก้ไขพา ธ ของคุณเพื่อเข้าถึงคำสั่งของผู้ดูแลระบบ
ถ้าคุณใช้su
โดยไม่ต้องใช้-
มันควรจะทำให้คุณอยู่ในไดเรกทอรีปัจจุบัน -
, -l
หรือ--login
บอก su เพื่อ:
จัดเตรียมสภาพแวดล้อมที่คล้ายกับสิ่งที่ผู้ใช้คาดว่าจะมีผู้ใช้ล็อกอินโดยตรง
หรือเพียงแค่ใช้ sudo มันมีข้อดีอื่น ๆ มากมาย หรือปุ่ม ssh
คุณควรใช้ sudo แน่นอน
su -m
-m (-p): อย่ารีเซ็ตตัวแปรสภาพแวดล้อม (โดยทั่วไปไม่แนะนำ)
ที่จะทำให้คุณอยู่ในโฟลเดอร์เมื่อคุณเปลี่ยนเป็นรูท
.bashrc
จากผู้ใช้ภายนอกไม่ใช่ผู้ใช้รูทหนึ่ง
หากคุณต้องการใช้จริงๆsu
มีวิธีอยู่ในไดเรกทอรีเดียวกัน
su - <user> -c "cd `pwd`; bash"
เกิดอะไรขึ้นที่นี่:
su - <user>
= เข้าสู่ระบบเป็น -c
ซึ่งหมายถึง "เรียกใช้คำสั่งในเชลล์ใหม่-c "cd `pwd`"
คำสั่งที่เราให้คือการเปลี่ยนไปเป็นไดเร็กตอรี่ปัจจุบัน ( pwd
) - แต่เนื่องจากเราใช้ backticks pwd
คำสั่งจะถูกประเมินก่อนที่เราจะรันsu
คำสั่งเพื่อที่เราจะเปลี่ยนไปยังไดเรกทอรีที่เราอยู่ในตอนนี้ในฐานะผู้ใช้เก่า ปัญหาเดียวที่นี่คือเปลือกใหม่ออกทันทีหลังจากรันคำสั่งดังนั้นเราจึงเพิ่ม:-c "cd `pwd`; bash"
ซึ่งหมายความว่า "run bash
(new shell) หลังจากรันcd
คำสั่งและ bash shell จะไม่ออกจนกว่าเราจะออกจากระบบsu - [user] -c "cd $(pwd); bash"
อาจจะดีกว่าเล็กน้อย (เปลี่ยน backticks เป็น$()
)
ใช้ sudo :) อย่างจริงจังคุณไม่ต้องการซู 'sudo' จะดีกว่าเพราะคุณจะใช้มันสำหรับคำสั่งพิเศษเท่านั้นและสามารถช่วยหลีกเลี่ยงข้อผิดพลาดได้ คุณยังได้รับความรับผิดชอบ
ถ้าคุณใช้ "su" มันจะเป็นเชลล์แบบโต้ตอบ นี่เหมือนกับ "sudo -s" "su -" สร้างเชลล์ล็อกอินซึ่งจะแทนที่สภาพแวดล้อม "sudo -i" เป็นสิ่งที่เท่าเทียมกับ sudo หากคุณพยายามรับเชลล์แบบโต้ตอบคุณควรใช้แบบฟอร์ม sudo -i (หรือ su -) เสมอหรือเป็นไปได้ที่จะจบลงด้วยการอนุญาตไฟล์แปลก ๆ ในโฮมไดเร็กตอรี่ของผู้ใช้
คุณต้องแก้ไขแหล่งที่มาของ su เพื่อให้งานนี้เสร็จสิ้น มีการเรียก chdir ในขั้นตอนของการเตรียมใช้งาน varibles envoironment แสดงความคิดเห็นสถานะเหล่านั้นรวมถึงการโทรนั้น และตอนนี้คุณสามารถทำ "su -" แต่เก็บไดเรกทอรีปัจจุบัน