คำสั่ง 'sudo -s' ทำอะไรและใช้ในตัวอย่างนี้อย่างไร


8

ฉันมีข้อสงสัยดังต่อไปนี้ ในบทช่วยสอนที่เกี่ยวข้องกับการติดตั้งซอฟต์แวร์ที่ฉันกำลังติดตามบอกว่าฉันต้องรันคำสั่งต่อไปนี้ (ฉันกำลังทำมันลงในssh shell ดังนั้นรายการของขั้นตอนนี้จะจบลงด้วยexitคำสั่ง):

sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit

ข้อสงสัยของฉันคือ:

อะไรกันแน่ที่ไม่-sพารามิเตอร์ทำหลังจากsudoคำสั่ง?

ค้นหาบนเว็บฉันพบว่า:

commands [คำสั่ง] ตัวเลือก (s (เปลือก) เรียกใช้เชลล์ที่ระบุโดยตัวแปรสภาพแวดล้อม SHELL หากมีการตั้งค่าหรือเชลล์ตามที่ระบุในฐานข้อมูลรหัสผ่าน หากระบุคำสั่งคำสั่งจะถูกส่งไปยังเชลล์เพื่อดำเนินการผ่านตัวเลือก shellc ของเชลล์ หากไม่ได้ระบุคำสั่งเชลล์เชิงโต้ตอบจะถูกดำเนินการ

ฉันดูเหมือนว่าsudo -sรันคำสั่งโดยใช้ตัวแปรสภาพแวดล้อมของเชลล์

แต่นี่ไม่ชัดเจนสำหรับฉัน: ในกรณีนี้คำสั่งที่เรียกใช้งานด้วยตัวแปรสภาพแวดล้อมคืออะไร? (มันจะรันsudo -sและไม่sudo -s [command]เท่านั้น)

คำตอบ:


7

คำตอบง่ายๆคือมันให้รูตเชลล์แก่คุณ นั่นคือสิ่งที่มันถูกใช้สำหรับที่นี่ มีที่ดีคือการเปรียบเทียบทางเทคนิคระหว่างsu, sudo -i, sudo -sและsudo suวิธีการเกี่ยวกับการ Unix.SEแต่ที่จริงไม่เกี่ยวข้องที่นี่ รหัสอาจมีการใช้ใด ๆ และจะทำงานได้

นักเก็ตช่วยเหลือหมายถึงบางสิ่ง:

  • มันกำลังมองหาคำสั่งใน$SHELLตัวแปรสภาพแวดล้อม หากคุณทำงานคุณอาจจะเห็นecho $SHELL /bin/bashนั่นหมายความว่าคุณจะได้รับอินสแตนซ์ของ Bash ฉันแน่ใจว่าถ้าคุณอยู่ในมันจะหมายถึงคุณจะได้รับเช่นรากของzshzsh

  • หาก$SHELLว่างเปล่ามันจะกลับไปที่เชลล์เริ่มต้นที่กำหนดไว้/etc/passwdสำหรับผู้ใช้นั้น

  • หากคุณให้คำสั่ง (เช่นsudo -s whoami) คำสั่งนั้นกำลังทำงานอยู่:sudo /bin/bash -c "whoami"

  • หากคุณไม่ผ่านคำสั่งคำสั่งจะไม่ผ่านการ-cโต้แย้งดังนั้นคุณจะได้รับเชลล์แบบโต้ตอบ

ฉันใช้วลี "root" หลายครั้ง โดยค่าเริ่มต้น sudoคือทั้งหมดที่เกี่ยวกับการรันสิ่งต่าง ๆ ในฐานะรูท แต่sudo(และ su) สามารถเรียกใช้สิ่งต่าง ๆ ในฐานะผู้ใช้รายอื่น (ถ้าคุณได้รับอนุญาตให้ทำ) ฉันแค่บอกสิ่งนี้กับคนที่จะร้องไห้ออกมาซึ่งsudo -s -u $USERไม่ได้ให้เปลือกหอยแก่พวกเขาตามที่ฉันสัญญาไว้-sข้างต้น


และในความคิดเห็นที่ต่ำต้อยของฉันมันโง่จริงๆที่จะกลายเป็นรูทเพียงแค่สองคำสั่งเท่านั้นไม่ต้องพูดถึงว่ามันจะทำให้ผู้ใช้ที่รันคำสั่งเพิ่มเติมเป็นรูท หากคุณต้องการหรือต้องการรันบางสิ่งในฐานะรูทเพียงแค่สั่งคำสั่งด้วยsudo:

sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen

ฉันไม่แน่ใจว่าจะมีการสอนใดที่แนะนำให้รูทเชลล์ยกเว้นในกรณีที่คุณมี bucketloads ของคำสั่งให้รัน ... และถึงตอนนั้นก็มีสคริปต์อยู่


การอธิบายที่สมบูรณ์แบบ ตอนนี้มันชัดเจนยิ่งขึ้น หนึ่งข้อสงสัยสุดท้าย หากฉันต่อท้ายคำสั่ง sudo ทั้งหมดก่อนหน้านี้ฉันจะได้ผลลัพธ์สุดท้ายเหมือนกันหรือไม่ มันจริงหรือฉันหายไปบางอย่าง?
AndreaNobili

@Oli คุณถูกต้อง 100% เกี่ยวกับ Zsh "sudo -s" ล็อกอินเข้าสู่เชลล์ "root" เนื่องจาก "root" ไม่ใช่ Super User
RCF

@AndreaNobili ใช่นั่นคือสิ่งที่sudoโดยทั่วไปสำหรับ; รันคำสั่งในฐานะรูทโดยไม่ต้องล็อกอินด้วยตนเองในฐานะรูท
Oli

FYI ฉันโพสต์คำตอบด้านล่างของคุณและใช้เวลาของฉันsudo -sแตกต่างกันอย่างมากเนื่องจากความรู้ จำกัด ของฉันและเกิดขึ้นในสถานการณ์โดยไม่ได้ตั้งใจ คุณยังอาจต้องการอ่านคำตอบ "ต่ำต้อย" ของฉันและอาจรีเฟรชคำตอบอายุ 1/2 ทศวรรษของคุณ
WinEunuuchs2Unix

0

sudo -sจะเรียกใช้คำสั่งในไดเรกทอรีปัจจุบันเหมือนที่ผู้ใช้ทั่วไปทำ ตัวอย่างเช่น:

rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)

rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)

แน่นอนว่า-sแทนที่จะใช้คำนำหน้าคำสั่งด้วย./อาจไม่เป็นการประหยัดเวลาได้อย่างยอดเยี่ยม

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