อะไรคือความแตกต่างระหว่าง "su-" และ "su --login"


15

จากsuหน้าคนของ:

For  backward  compatibility, su defaults to not change the current directory
and to only set the environment variables HOME and SHELL (plus USER and LOGNAME
if the target user is not root).  It is recommended to always use the 
--login option (instead of  its  shortcut -) to avoid side effects caused
by mixing environments.

...

-, -l, --login
    Start the shell as a login shell with an environment similar to a real login:

        o      clears all the environment variables except TERM

        o      initializes the environment variables HOME, SHELL, USER, LOGNAME, and PATH

        o      changes to the target user's home directory

        o      sets argv[0] of the shell to '-' in order to make the shell a login shell

เป็นการยากที่จะบอกว่ามีความแตกต่างระหว่าง-และ--login(หรือควรจะ-l) กล่าวคือ man page บอกว่า "แทนที่จะเป็นทางลัด -" แต่ตัวเลือกทั้งหมดเหล่านี้ถูกจัดกลุ่มเข้าด้วยกันและฉันไม่เห็นคำอธิบายของความแตกต่างหากมีอยู่จริง

UPDฉันจะตรวจสอบคำถามที่ซึ่งควรจะแก้ปัญหาของฉัน คำถามคือโดยทั่วไปเกี่ยวกับความแตกต่างระหว่างและsu su -และฉันถามเกี่ยวกับความแตกต่างระหว่างและsu - su --loginไม่เลยไม่แก้ปัญหาเลย


4
ฉันคิดว่าประโยคนี้เขียนไม่ดี มันควรจะเป็นTo avoid side effects caused by mixing environments use --login option or its equivalent -. The first form is recommended because - can be placed only just before username.
jimmij

ฉันไม่ทราบคำจำกัดความของคุณที่ซ้ำกัน แต่ฉันไม่พิจารณาคำถามของฉันเช่นนี้ คำถามที่คุณแนะนำคือโดยทั่วไปเกี่ยวกับความแตกต่างระหว่างและsu su -และฉันถามเกี่ยวกับความแตกต่างระหว่างและsu - su --loginฉันหายไปนี่อะไร
x-yuri

คำตอบ:


11

การป้อนข้อมูลด้วยตนเองของ Debian ดูเหมือนว่าจะให้ความกระจ่างมากขึ้น:

   -, -l, --login
       Provide an environment similar to what the user would expect had the user logged
       in directly.

       When - is used, it must be specified before any username. For portability it is
       recommended to use it as last option, before any username. The other forms (-l
       and --login) do not have this restriction.

ฉันว่าพวกเขาเติมเต็มซึ่งกันและกัน หนึ่งจากต้นน้ำ-แนะนำให้หลีกเลี่ยงการใช้ พูดถึงสิ่งที่ทำไม "ก่อนที่ชื่อผู้ใช้ใด ๆ "?
x-yuri

7
"ก่อนชื่อผู้ใช้ใด ๆ " สามารถ rephrased เป็น "ก่อนชื่อผู้ใช้ถ้ามี"
มาร์ค Plotnick

@MarkPlotnick คุณดูเหมือนจะไม่ถูกต้อง
x-yuri

@ x-yuri ว่าการสนทนาทั้งหมดมาถึงข้อสรุปว่า Mark Plotnick ถูกต้องและคู่มือเป็นสิ่งที่ดีที่สุดที่คลุมเครือในเชิงตรรกะ (แม้ว่าพวกเราส่วนใหญ่ไม่ได้สังเกตเห็น)
ctrl-alt-delor

I disagree, however, with the general point that, "before any username" can be rephrased as "before the username, if any." Perhaps Mr. Plotnik meant that the man page* should have rephrased the text using his suggestion, but the two phrases are not equivalent (as I explained at the beginning of this post).ความหมาย Mark Plotnick รู้วิธีการใช้suงาน แต่ "ก่อนชื่อผู้ใช้ใด ๆ "! = "ก่อนชื่อผู้ใช้ถ้ามี" นั่นคือข้อสรุปการอภิปรายมาถึงตามที่ฉันเห็นมัน
x-yuri

0

ไม่มีความแตกต่างเหมือนการวิ่ง

echo bob | grep -v bob
echo bob | grep --invert-match bob

แค่จดชวเลข ...


3
ฉันคิดว่าเขากำลังขอคำชี้แจงเกี่ยวกับการหลีกเลี่ยงผลข้างเคียงที่เกิดจากสภาพแวดล้อมการผสม ส่วนหนึ่งของหน้าคน ผลข้างเคียงอะไรบ้าง
Zachary Brady

ไม่ได้จริงๆ ผลข้างเคียงที่จะมากหรือน้อยชัดเจนและพวกเขาใช้เมื่อไม่ได้ใช้ใด ๆ ของ-, ,-l --loginคำถามของฉันเกี่ยวกับสาเหตุที่ไม่แนะนำให้ใช้-ซึ่งต่างกับ '-l , and --login`
x-yuri

ปัญหาการพกพาจะเป็นถ้าคุณกำลังเขียนสคริปต์ฉันจะไม่แนะนำให้ใช้ su ในสคริปต์ แต่อาจมีกรณีการใช้งานไม่ว่าตัวเลือกแบบพกพามากที่สุดในสคริปต์จะเป็น -l หรือ --login
mikejonesey

ทำไมไม่ใช้suเลยเมื่อเขียนสคริปต์?
x-yuri

ทำไมไม่เขียนสคริปต์ในฐานะผู้ใช้ที่เป็นเจ้าของข้อมูล มันหายากที่สุดคือมี usecase ที่คุณต้องการดำเนินการในฐานะผู้ใช้รายอื่นแล้วมี sudo (ซึ่งมีข้อ จำกัด เกี่ยวกับคำสั่งและ params ที่ใช้)
mikejonesey
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.