อะไรคือความแตกต่างระหว่าง“ su” กับและไม่มียัติภังค์?


87

ผมค่อนข้างใหม่ไปยังสถานี Linux และฉันไม่ได้ค่อนข้างแน่ใจว่าสิ่งที่แตกต่างระหว่างsuด้วยเครื่องหมายขีดกลางและsuโดยไม่ต้องยัติภังค์เป็นตัวอย่างเช่น: เทียบกับsu - usernamesu username

ฉันดูเอกสารแต่ในที่นี้ไม่ได้กล่าวถึง มีคนช่วยฉันหน่อยได้ไหม?


บ่อยครั้งที่ "login shell" หมายถึงเชลล์แบบโต้ตอบ นี่คือ vs. เชลล์ที่เพิ่งเรียกใช้งานสคริปต์และออก
Shahbaz

6
มันอยู่ที่นั่นในmanpage เดียวกับที่คุณลิงก์ไปยัง : " -, -l, --login: ทำให้เชลล์เป็นเชลล์ล็อกอิน "
ArjunShankar

1
คุณไม่ได้มีการ google su --helpมันเพียงแค่พิมพ์
Art Shayderov

1
สิ่งสำคัญ: เป็นประโยชน์อย่างยิ่งเมื่อ su-ing ไปที่รูทโดยไม่ต้องใช้ไฮเพนเพื่อเริ่มเชลล์การเข้าสู่ระบบใหม่คุณ$PATHจะไม่ได้รับการอัปเดตดังนั้นคุณจะไม่สามารถเรียกไบนารีไบนารีที่รากได้โดยตรงใน/sbinและ/usr/sbin
Garrett

คำตอบ:


85

ความแตกต่างระหว่าง "-" และ "ไม่มีเครื่องหมายขีดคั่น" คือสิ่งหลังจะรักษาสภาพแวดล้อมที่มีอยู่ของคุณ (ตัวแปร ฯลฯ ) อดีตสร้างสภาพแวดล้อมใหม่ (ด้วยการตั้งค่าของผู้ใช้จริงไม่ใช่ของคุณเอง)

https://wiki.archlinux.org/index.php/Su

เครื่องหมายขีดคั่นมีสองลักษณะพิเศษ:

1) เปลี่ยนจากไดเรกทอรีปัจจุบันเป็นโฮมไดเรกทอรีของผู้ใช้ใหม่ (เช่นไปยัง / รูทในกรณีของผู้ใช้รูท) โดยเข้าสู่ระบบในฐานะผู้ใช้รายนั้น

2) เปลี่ยนตัวแปรสภาพแวดล้อมเป็นของผู้ใช้ใหม่ตามที่กำหนดโดย ~ / .bashrc นั่นคือถ้าอาร์กิวเมนต์แรกของ su คือเครื่องหมายขีดคั่นไดเรกทอรีและสภาพแวดล้อมปัจจุบันจะถูกเปลี่ยนเป็นสิ่งที่คาดหวังหากผู้ใช้ใหม่ได้เข้าสู่เซสชันใหม่จริง ๆ (แทนที่จะเข้าสู่เซสชันที่มีอยู่)


ไซต์นี้ -> admon.org/difference-between-login-shell-and-non-login-shellบอกว่าเมื่อใช้โดยไม่มีเครื่องหมายขีดคั่นไฟล์ / etc / profile และ ~ / .bash_profile จะไม่ถูกดำเนินการ ไฟล์สองไฟล์นี้มีความสำคัญต่อสิ่งแวดล้อมของผู้ใช้อย่างไร?
user574183

2
สองสิ่งเหล่านี้คือไฟล์ที่ตั้งค่าสภาพแวดล้อมผู้ใช้ :) การ ไม่เรียกใช้งานหมายถึงการรักษาสภาพแวดล้อมดั้งเดิมของคุณ ดำเนินการพวกเขา (โดยใช้ "-") หมายถึงการทำให้สภาพแวดล้อมของคุณเหมือนกับผู้ใช้ที่คุณ "su'ing" ถึง การใช้ยัติภังค์มักเป็นสิ่งที่คุณต้องการ - ฉันใช้ "-" เป็นนิสัยเมื่อใดก็ตามที่ฉัน "su"
paulsm4

ลำดับของการดำเนินการมีความสำคัญจริงๆหรือไม่ เอี่ยมถามเรื่องนี้เพราะในเว็บไซต์นั้นพวกเขาบอกว่าไฟล์สองไฟล์ / etc / bashrc ~ / .bashrc จะถูกดำเนินการในลำดับย้อนกลับเมื่ออยู่ในเชลล์ที่ไม่ใช่การเข้าสู่ระบบ มีคนช่วยฉันด้วย
user574183

1
@ user574183 แน่นอนเช่นถ้าหนึ่งชุด แต่บางสิ่งบางอย่างบางสิ่งบางอย่างไม่มีการตั้งค่าอื่น ๆ หรือตั้งค่าเป็นอย่างอื่น
fikr4n

3

su -สตาร์ทเชลล์ล็อกอินสำหรับรูท สำหรับความแตกต่างของเชลล์ปกติดูที่เว็บไซต์นี้


2
นั่นเป็นความจริง แต่มันไม่ได้เป็นคำถาม :)
paulsm4

ไม่ถูกต้องคุณสามารถรัน su ด้วยเส้นประและให้มันเริ่มต้นเชลล์สำหรับผู้ใช้รายอื่น ดำเนินการต่อไปนี้และดูผลลัพธ์sudo su - "testuser" -c "whoami"
David Hergert

@DavidHergert ใช่และไม่มีชื่อผู้ใช้มันจะเปิดเปลือกสำหรับรูต
Lars Kotthoff

@ LarsKotthoff - โอเคขออภัยที่มันใช้คำพูดฟังราวกับว่า dash เป็นสิ่งที่ทำให้เชลล์รูทไม่ใช่ความจริงที่ทำให้ผู้ใช้เริ่มต้นรูท แม้แต่ SA ท้องถิ่นของฉันก็ทำให้ฉันสับสนในเรื่องนี้ :)
David Hergert
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.