เป็นกลุ่มแก้ไขเป็น root


28

ฉันมักจะเปิดไฟล์เป็นกลุ่มทำการเปลี่ยนแปลงบางอย่างและเมื่อถึงเวลาบันทึกไฟล์เป็นแบบอ่านอย่างเดียว .. (เป็นของผู้ใช้คนอื่น) ฉันกำลังมองหาเคล็ดลับเกี่ยวกับวิธีที่ฉันสามารถเปิดไฟล์ในฐานะที่เป็นรูทและเก็บการเปลี่ยนแปลงของฉันโดยไม่บันทึกเป็นไฟล์ชั่วคราวเพื่อคัดลอกหรือแก้ไขในฐานะรูท

คำตอบ:


42

จากคำตอบ stackoverflowนี้โดยskinp

:w !sudo tee %

ฉันมักจะลืม sudo ก่อนแก้ไขไฟล์ที่ฉันไม่มีสิทธิ์เขียน เมื่อฉันมาเพื่อบันทึกไฟล์นั้นและได้รับข้อผิดพลาดในการอนุญาตฉันเพิ่งออกคำสั่ง vim เพื่อบันทึกไฟล์โดยไม่จำเป็นต้องบันทึกลงในไฟล์ temp แล้วคัดลอกกลับมาอีกครั้ง


ที่เกือบจะมัน .. แต่มันจะดีที่จะได้เริ่มต้นใหม่ที่เป็นกลุ่มและการทำงานเป็นราก .. นี้เป็นที่ชื่นชอบเพื่อให้ห่างไกล :)
rkthkr

@rkthkr หาก "เป็นกลุ่มเริ่มและเรียกใช้ในฐานะรูท" คุณจะไม่สามารถบันทึกการแก้ไขใด ๆ ที่คุณทำและสูญเสียประวัติการเลิกทำของคุณ แต่ถ้านั่นคือสิ่งที่คุณต้องการ ... [ไม่มีอักขระ] ดู "คำตอบ" ฉันกำลังจะเขียน
Bruno Bronosky

2
@dbr ฉันคิดว่าเป็นมูลค่าการกล่าวขวัญว่าหลังจากที่คุณเขียนทับไฟล์ (ด้วยทีออฟ sudo) คุณจะได้รับแจ้งด้วย [O] k หรือ [L] oad ตัวเลือกในภายหลังจะลบประวัติการเลิกทำของคุณและรีเซ็ต "การตั้งค่าสถานะที่แก้ไข" ซึ่งอนุญาตให้คุณออกโดยไม่ได้รับการเตือนให้บันทึกการเปลี่ยนแปลง ตัวเลือกเดิมที่ฉันต้องการจะเก็บประวัติเลิกทำของคุณ แต่จะทำให้คุณได้รับการเตือนเมื่อคุณพยายามออก คุณต้องใช้: q! เพื่อออกในกรณีนี้ ฉันทำเช่นนี้เพื่อให้ฉันสามารถตรวจสอบ (เช่น:! sudo /etc/init.d/httpd configtest) และย้อนกลับ / reedit ถ้าฉันต้องการ
Bruno Bronosky

15

โปรดอย่าโหวตฉันสำหรับสิ่งนี้ ฉันไม่แนะนำให้ใช้คำตอบนี้ แต่เป็นคำตอบที่ rkthkr ขอ

rkthkr พูดว่า:
แต่มันจะดีถ้ามี vim เริ่มต้นใหม่และทำงานเป็น root

วิธีการทำเช่นนี้คือด้วย:!sudo vim %
ที่ฉันกล่าวถึง ipozgaj,% เป็นข้อโต้แย้ง (แม้ย่อยอาร์กิวเมนต์) ได้รับการแทนที่ด้วยเส้นทางไปยังบัฟเฟอร์ปัจจุบัน (คุณอาจได้รับพร้อมท์สำหรับรหัสผ่านของคุณ) คุณจะจบลงด้วยกระบวนการ vim ใหม่ซึ่งเป็นของ root ซึ่งเป็นกระบวนการลูกของกระบวนการ vim ดั้งเดิม ฟังดูงี่เง่าใช่มั้ย นี่คือสิ่งที่ดูเหมือนใน ps:

~# ps afo pid,ppid,user,stat,comm
  PID  PPID USER         STAT COMMAND
16187 30478 rbronosky    Ss   bash
16510 16187 rbronosky    R+    \_ ps
30482 30478 rbronosky    Ss   bash
16244 30482 rbronosky    S+    \_ vim
16318 16244 root         S+        \_ vim

หากคุณมีสิทธิ์เขียนไปยังไดเรกทอรีที่มีไฟล์และคุณได้ทำการแก้ไขคุณอาจได้รับการเตือนว่ามีการสลับไฟล์ออก การเลือก ecover [R] จะสะท้อนถึงการเปลี่ยนแปลงส่วนใหญ่ที่เกิดจากกระบวนการ vim parent (* ฉันคิดว่าอาจจะมีการอัพเดต swap หรือหมดเวลาหรือมีเดลตาที่กำหนดฉันใช้เวลามากเกินไปในการทำเช่นนี้และไม่สนใจที่จะทำการวิจัย)เมื่อคุณไปและออกเป็นกลุ่มอย่าตกใจเมื่อคุณเป็น ยังอยู่ในกลุ่ม ... คุณเปิดกระบวนการกลุ่มที่สอง จำได้ไหม?

ตอนนี้ทั้งหมดที่กล่าวมา ... ฉันแทบจะไม่เคยทำเช่นนี้เลย บางทีถ้าฉันมีกาแฟไม่พอหรือมากเกินไปและฉันก็รู้ว่าฉันจะต้องแก้ไขไฟล์หลาย ๆ ไฟล์ตามรูท ... ฉันอาจลอง ใน 14 ปีของการบริหารระบบฉันไม่เคยมี แต่จนกว่าคุณจะแสดงความไม่พอใจกับโซลูชันที่ฉันต้องการ (ซึ่งตรงตามที่ dbr เสนอ) ฉันไม่เคยคิดเกี่ยวกับเรื่องนี้


ขอบคุณ Richard! ข้อมูลมากฉันจะให้คุณ +1 สำหรับมัน :)
rkthkr

นี่เป็นคำตอบที่มีคุณภาพสูงมากทำไมต้องลงคะแนน +1 จากฉันด้วย
พ.ค.

1
ขอบคุณ @ Richard Bronosky ใน gvim ของฉันเป็นไปไม่ได้ที่จะพิมพ์รหัสผ่าน sudo ด้วย:w !sudo tee %ดังนั้นฉันคิดว่านี่เป็นคำตอบที่ดี
Eric Fortis

1

ฉันมักจะบันทึกเป็นไฟล์ชั่วคราวใน $ HOME / tmp / apache.conf (ตัวอย่าง) จากนั้น

sudo vimdiff $HOME/tmp/apache.conf /etc/apache2/apache.conf

นี่เป็นงานพิเศษที่จะรวมการเปลี่ยนแปลง แต่ได้ผลตอบแทน ฉันคิดว่ามันเป็นวิธีที่ดีระหว่างความสะดวกสบายและการวัดผลกับการเปลี่ยนแปลงที่ไม่พึงประสงค์

ก่อนหน้านั้นฉันคิดว่า ACLs หรือกำหนดกลุ่มที่เกี่ยวข้องให้กับไฟล์ แต่มันก็ไม่ได้ผลอะไรนักบ่อยครั้งที่ฉันลืมเปลี่ยนเจ้าของหรือเปลี่ยนไฟล์ที่ฉันไม่ได้ตั้งใจทำ

ไฟล์นี้ไม่ได้มีการจัดการจนถึงตอนนี้ วิธีการแก้ปัญหาโดยรวมที่เราใช้คือหุ่นเชิดกับ repo git ที่คนในท้องถิ่นแก้ไขไฟล์และทดสอบการเปลี่ยนแปลงบนเซิร์ฟเวอร์ที่เหมาะสมหากการกำหนดค่าทำงานตามที่ต้องการการเปลี่ยนแปลงจะถูกผลักกลับไปที่พื้นที่เก็บข้อมูลส่วนกลางที่เครื่องมือการกำหนดค่าของเรา


0

สิ่งที่ฉันทำตามปกติ - ไม่จำเป็นต้องเร็วที่สุด แต่ปลอดภัยแน่นอน - คือทำสิ่งนี้ (ใช้ตัวอย่าง nsswitch.conf):

:w! ~/%

ออกจากกลุ่มแล้วทำ:

sudo vim nsswitch.conf
1GdG
:r ~/%

การดำเนินการนี้จะลบบรรทัดทั้งหมดและอ่านในเวอร์ชันที่มีการเปลี่ยนแปลงและอัปเดตเพื่อแก้ไขแทน การใช้โฮมไดเร็กตอรีของคุณหมายความว่าคุณไม่ต้องคิดถึงว่าคุณมีสิทธิ์เข้าใช้หรือไม่ - และเป็นส่วนตัวมากกว่า / tmp โปรดทราบว่านี่เป็นการแทนที่ไฟล์ทั้งหมด: หากคุณไม่ต้องการเพิ่มการเปลี่ยนแปลงทั้งหมดคุณจะต้องเลือกและเลือก

แม้จะมีอาการปวดหัวที่เกี่ยวข้องกับคำตอบใด ๆ เหล่านี้ไม่มีเหตุผลที่จะสูญเสียการเปลี่ยนแปลงของคุณ

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