เข้าสู่ระบบเพื่อ vi ทำการเปลี่ยนแปลงลืม sudo ก่อน - ตอนนี้คืออะไร


12

ฉันทำการเปลี่ยนแปลงไฟล์กำหนดค่าบนคอมพิวเตอร์ Ubuntu Linux ด้วยเครื่องมือแก้ไข vi เป็นเวลานาน น่าเสียดายที่ฉันลืม sudo ก่อนดังนั้นตอนนี้ฉันอยู่ในเครื่องมือแก้ไข แต่ไม่สามารถบันทึกการเปลี่ยนแปลงของฉันได้เนื่องจากสิทธิ์ขาดหายไป ฉันสามารถย้อนกลับไปหาผู้ใช้ในเทอร์มินัลย้อนหลังได้หรือไม่?


คำตอบ:


11

:w /tmp/tmpfileในกรณีนี้ผมเขียนไฟล์ด้วย จากนั้นฉันออกไปข้างนอกและย้าย/tmp/tmpfileไปยังไฟล์เก่าด้วยสิทธิ์ sudo


นี่คือสิ่งที่ฉันทำลงไป แต่ฉันชอบคำตอบของ wfaulk .. ถ้าฉันจำได้เฉพาะในครั้งต่อไปที่ฉันทำเช่นนี้! :)
ต้มตุ๋น quixote

ฉันหวังว่าคุณคัดลอกไฟล์มากกว่าย้ายมัน การย้ายจะแทนที่โหมดของไฟล์ (การอนุญาต) ด้วยviค่าเริ่มต้นของ (ซึ่งอาจเป็น 666, และแทนที่ด้วย "umask" ของคุณ), แทนที่เจ้าของไฟล์ด้วย UID ของคุณ (มันคือ "รูท", ใช่ไหม?), และทำลายการเชื่อมโยงอย่างหนัก
สกอตต์

ปัญหาสองสามข้อ: (1) ถ้าไฟล์ควรเป็นความลับและ“ umask” ของคุณคือ 22 (มากกว่า 66) โพรซีเดอร์นี้จะเปิดเผยเนื้อหาของไฟล์ไปยังผู้ใช้อื่นที่อาจกำลังตรวจสอบ/tmpไดเรกทอรี (2) หากคุณมีผู้ใช้ที่ชั่วร้ายอย่างแท้จริงในระบบของคุณพวกเขาสามารถแทนที่ของคุณ/tmp/tmpfileระหว่างเมื่อคุณเขียน (จากvi) และเมื่อคุณคัดลอกไว้เหนือไฟล์การกำหนดค่าระบบที่คุณกำลังแก้ไข การวางไฟล์ชั่วคราวไว้ในไดเรกทอรีที่ปลอดภัยกว่านั้นมีเพียงคุณเท่านั้นที่สามารถเข้าถึงได้
สกอตต์

40

จากSO :

:w !sudo tee %

ฉันพบว่าตัวเองกำลังใช้วิธีนี้บ่อยขึ้นกว่าเดิม:

:%!sudo tee %

ฉันคิดว่ามันเล็ก ๆ น้อย ๆ ได้ง่ายขึ้นขณะที่ผมรู้ว่าสิ่งที่ทำในขณะที่ผมไม่ได้มีความเข้าใจเกี่ยวกับอวัยวะภายในของ:%! :w !นอกจากนี้มันเป็นเรื่องง่ายที่จะพลาดพื้นที่สำคัญมากระหว่างและw!


3
หากมันช่วยปรีชาญาณของคุณได้โปรดจำไว้ว่าviคำสั่งอาจเป็นตัวอักษรหลายตัวดังนั้นในทางทฤษฎีอาจมีwfooคำสั่ง“” ดังนั้นถ้าคุณต้องการเขียนไฟล์ที่เรียกว่า“ foo” คุณต้องพูดว่า“ :w foo” นั่นคือคุณต้องมีช่องว่างหลังจาก " :w" เท่าที่เกี่ยวข้องกับ " :w !" - คุณรู้ไหมว่า " :!" คืออะไรใช่ไหม? “ :!date” รันdateคำสั่ง“” ดังนั้น“ :w !xyz” เขียนบัฟเฟอร์ แต่ไปที่คำสั่งแทนที่จะไปที่ไฟล์
สกอตต์

ควรทำคำตอบที่ได้รับการยอมรับเนื่องจากคำตอบที่มีอยู่ในปัจจุบันค่อนข้างใช้เวลานานในการแก้ไขขณะนี้เป็นวิธีแก้ปัญหาทันที OP?
bschlueter

@Scott ขอบคุณสำหรับคำอธิบาย! ทีคืออะไรและ%แม้ว่า?
CodyBugstein

@CodyBugstein: สวัสดี (1) ส่ง Ping ความคิดเห็นของผู้เขียนอายุหกขวบมักจะทำให้คุณไม่มีที่ไหนเลยเพราะบางครั้งผู้คนออกไปและไม่กลับมา แต่ฉันถูกล่ามโซ่กับคอมพิวเตอร์ของฉัน; ฉันอาจจะอยู่ที่นี่ตลอดไป (หรืออาจจะไม่) (2) คุณลองทำวิจัยแล้วหรือยัง ควรหาข้อมูลเกี่ยวกับ "ที" ได้ง่าย ( % อาจจะยากขึ้น) (3) ตกลงฉันจะช่วยคุณเล็กน้อย  teeเป็นโปรแกรมที่ให้คุณสามารถเขียนข้อมูลไปยังหลาย ๆ ที่ได้ ตัวอย่างเช่นdate | tee codyจะเขียนวันที่และเวลาปัจจุบันไปยังไฟล์ชื่อcody ... (ต่อ)
Scott

(ต่อ) และไปยังหน้าจอเทอร์มินัล  date | tee cody > bugsteinจะเขียนวันที่และเวลาปัจจุบันไปยังไฟล์ที่เรียกว่าและยังไฟล์ที่เรียกว่าcody bugstein- คุณเข้าใจsudoไหม มันช่วยให้คุณเรียกใช้คำสั่งด้วยสิทธิ์ของผู้ใช้รายอื่น (โดยทั่วไปคือรูท) ยกตัวอย่างเช่นโดยทั่วไปจะล้มเหลวเพราะคุณไม่ได้มีการเข้าถึงls /root/rootแต่sudo ls /rootจะได้ผล - ผลข้างเคียงที่โชคร้ายของวิธีการทำงานของ Unix คือการที่sudo ls /root > /root/codyจะล้มเหลวเนื่องจากคุณไม่มีสิทธิ์เข้าถึง  /rootและคุณจึงไม่สามารถเขียน/root/codyได้ ... (ต่อ)
สกอตต์

-2

คุณไม่สามารถเปิดเทอร์มินัลอื่นและเปลี่ยนสิทธิ์การเข้าถึงไฟล์ชั่วคราวได้หรือไม่


1
นี่เป็นความคิดที่ไม่ดี อาจจะไม่เคยเป็นปัญหาด้านความปลอดภัยที่ยิ่งใหญ่ แต่อาจเป็นไปได้และมีวิธีแก้ปัญหาที่ดีกว่าและง่ายกว่า (เช่นการเขียนไปยังไฟล์ชั่วคราวหรือดีกว่า:w !sudo tee % solutionwfaulk ที่โพสต์
dbr
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.