ถ้าฉันเรียกใช้คำสั่ง
sudo some-command && some-other-command
คำสั่งที่สองถูกเรียกใช้ด้วยsudo
previlege ด้วยหรือไม่
ถ้าฉันเรียกใช้คำสั่ง
sudo some-command && some-other-command
คำสั่งที่สองถูกเรียกใช้ด้วยsudo
previlege ด้วยหรือไม่
คำตอบ:
TL; DR: ไม่
คำสั่งแรกคือ
sudo some-command
คำสั่งที่สองคือ
some-other-command
คำสั่งsudo
ใช้คำสั่งต่อไปนี้และดำเนินการด้วยสิทธิพิเศษที่ยกระดับ &&
แต่ไม่ได้อยู่ในคำสั่งและมีการตีความโดยเปลือกก่อนที่จะดำเนินการคำสั่งแรก มันบอกทุบตีเพื่อรันคำสั่งแรกก่อนและประสบความสำเร็จในคำสั่งที่สอง
ดังนั้นไม่ทราบเกี่ยวกับsudo
&& some-other command
เมื่อกระบวนการที่ยกระดับยุติลง bash จะรับค่าส่งคืนจากนั้นดำเนินการคำสั่งอื่นซึ่งอีกครั้งจะไม่รู้จักกระบวนการแรก
สิ่งนี้สามารถแสดงให้เห็นได้อย่างง่ายดาย:
$ sudo whoami && whoami
root
username
ในการเข้าถึงสิ่งที่คุณต้องการคุณสามารถเริ่มทุบตีที่สูงขึ้นและปล่อยให้มันรันทั้งสองคำสั่ง:
$ sudo bash -c 'whoami && whoami'
root
root
ดังนั้นตอนนี้คำสั่งทั้งสองจะถูกดำเนินการในฐานะรูทเนื่องจากกระบวนการทั้งหมดที่อธิบายไว้ข้างต้นถูกดำเนินการในกระบวนการยกระดับเช่นเซสชัน bash เริ่มต้นด้วยคำสั่งนี้ซึ่งออกทันทีหลังจากเสร็จสิ้น แต่ถึงกระนั้นทั้งคู่ก็whoami
ยังไม่รู้จักการดำรงอยู่ของกันและกัน
สิ่งนี้ไม่เหมาะกับวัตถุประสงค์ใด ๆ แต่สำหรับการสาธิตนี้วิธีที่ง่ายกว่าคือการทำ
sudo some-command && sudo some-other-command
ไม่ตัวอย่างบางส่วนที่ทำเช่นนี้คือ:
sudo some-command && sudo some-other-command
sudo sh -c "some-command && some-other-command"
หรือถ้าคุณต้องการคำสั่งซ้อนคุณสามารถทำได้:
sudo bash <<"EOF"
some-command
some-other-command
sudo bash <<"EOF2"
some-command2
some-other-command2
EOF2
EOF
$ sudo -s -- whoami && whoami
มอบให้root
username
sudo -s -- "whoami && whoami"
"whoami && whoami"
ดูเหมือนว่าจะให้คำสั่งไม่พบมากขึ้นหรือน้อยเช่นเดียวกับคำสั่ง วิธีใช้สิ่งก่อสร้างนี้ด้วย && ผมเห็นว่า จะช่วยให้ไม่มีข้อผิดพลาดเมื่อเทียบกับsudo -s cd ..
sudo cd ..
sudo bash <<"EOF"
! ขอบคุณ! :-)
ไม่คุณต้องเขียน sudo สองครั้งหรือทำอะไรทำนองนี้
sudo bash -c 'foo && bar'
&&
หมายความว่าสิทธิที่เข้าข้าง (สอง) คำสั่งเพียง แต่จะทำงานเฉพาะถ้าเกรงว่าเข้าข้าง (ตอนแรก) คำสั่งเป็นรหัสที่ประสบความสำเร็จคือทางออกคือ$?
0
คำสั่งทั้งสองนั้นแตกต่างกันและจะทำงานในสภาพแวดล้อมของตนเองดังนั้นคำสั่งที่สองจะไม่ทำงานโดยมีsudo
สิทธิ์
สิ่งนี้จะทำให้คุณชัดเจน:
$ sudo whoami && whoami
root
foobar
ไม่และต่อไปนี้เคยเป็นมาโครที่พบเห็นได้ทั่วไป
sudo reboot && exit
ทุกคนควรทำอย่างน้อยหนึ่งครั้ง
sudo apt-get update && sudo apt-get upgrade
ดังนั้นจึงเป็นคำถามสัมภาษณ์ "มิกกี้เมาส์" ที่ดี
นี่คือการทดสอบอย่างง่ายดายว่าคำถามอาจถูกสงสัยว่าเป็นแบบฝึกหัดการเติมเต็ม
บนบรรทัดคำสั่งเมื่อคุณเห็น
$ command one && command two
ความตั้งใจโดยทั่วไปคือการดำเนินการคำสั่งที่ตามหลัง && เฉพาะในกรณีที่คำสั่งแรกสำเร็จ
ไม่อย่างแน่นอนนี่เป็นเพียงการเขียนคำสั่งที่ต่อเนื่องกันสองคำสั่ง && นี้ไม่ให้สิทธิ์เพิ่มเติมแก่คำสั่ง มันเป็นเพียง seperator
เพื่อพิสูจน์ว่าให้เรายกตัวอย่าง
touch fileA fileB
ฉันสร้างสองไฟล์ fileA และ fileB ตอนนี้ฉันจะเรียกใช้คำสั่ง
sudo chown test:test fileA && chown test:test fileB
ฉันกำลังเปลี่ยนผู้ใช้และเจ้าของกลุ่มของไฟล์เหล่านี้เป็นการทดสอบผู้ใช้และชื่อกลุ่ม ตอนนี้คำสั่งแรกควรทำงานในขณะที่สิ่งอื่น ๆ เกี่ยวกับ?
ผลลัพธ์คือ:
chown: changing ownership of `fileB': Operation not permitted
ดังนั้นคำสั่งจึงไม่ทำงานเนื่องจากต้องการsudo
และแม้ว่าเราสามารถสรุปได้ว่า && ไม่ได้เป็นการแทนที่คำสั่งที่สองsudo
whoami
ตัวอย่าง