/etc/apt/sources.list "E212: ไม่สามารถเปิดไฟล์เพื่อเขียนได้


178

ฉันพยายามแก้ไขแหล่งที่มารายการใช้ตัวแก้ไข vi แต่ได้รับข้อผิดพลาดต่อไปนี้ในขณะที่บันทึกไฟล์:

/etc/apt/sources.list" E212: Can't open file for writing

1
ฉันได้สิ่งนี้เมื่อไดเรกทอรีที่ฉันพยายามเขียนไฟล์เกินจำนวนสูงสุด การใช้ดิสก์
Mehdi Nellen

1
ตามความเห็นที่กล่าวถึงในคำตอบอย่างใดอย่างหนึ่งคุณอาจได้รับสิ่งนี้หากโฟลเดอร์ที่ไฟล์นั้นถูกลบไปหรือไม่มีอยู่ตั้งแต่แรก ค้นหาคำสั่งสำหรับการเปลี่ยนไดเรกทอรีหรือสร้างไดเรกทอรีจาก vi ขึ้นอยู่กับสถานการณ์
kon Psych

คำตอบ:


278
For some reason the file you are writing to cannot be created or overwritten.
The reason could be that you do not have permission to write in the directory
or the file name is not valid.

Vim มีระบบช่วยเหลือในตัว :h E212ฉันเพียงแค่ยกสิ่งที่กล่าวไป

คุณอาจต้องการแก้ไขไฟล์เป็น superuser sudo vim FILEเป็น หรือถ้าคุณไม่ต้องการออกจากเซสชัน vim ที่มีอยู่ (และตอนนี้มีสิทธิ์ sudo ที่เหมาะสม) คุณสามารถออก:

:w !sudo tee % > /dev/null

ซึ่งจะบันทึกไฟล์

HTH


54
ขอบคุณ! ในกรณีของฉันมันพยายามแก้ไขไฟล์ที่ไม่มีอยู่ในไดเรกทอรีที่ไม่มีอยู่ ปรากฎว่าในขณะที่คุณสามารถ "เปิด" ไฟล์ที่ไม่มีอยู่แล้วสร้างโดยการบันทึกไฟล์มันจะไม่ทำงานกับไดเรกทอรีที่ไม่มีอยู่ และตอนนี้ฉันรู้เกี่ยวกับระบบความช่วยเหลือในตัวของกลุ่ม! :)
Dom Delimar

ขอบคุณ! ในกรณีของฉันฉันพยายามเขียนไปยังไดรฟ์เครือข่ายและการอนุญาตเครือข่ายของฉันล้มเหลวบางส่วนสำหรับเซสชันหน้าจอนั้น ฉันสิ้นสุดการเขียนออกเป็นไฟล์ชั่วคราวใน / var และคัดลอกจากอินสแตนซ์อื่น ssh ไปยังไดเรกทอรีบ้านของฉัน
Ross Aiken

รีดกลับมาแก้ไขที่ไม่ถูกต้อง
รถ stacker ระดับ

@Xinus เห็นสิ่งนี้: stackoverflow.com/questions/2600783/…
Zsolt Botykai

: h E212 พูดว่า: ".bashrc" E212: ไม่สามารถเปิดไฟล์เพื่อเขียน E433: ไม่มีไฟล์แท็ก E149: ขออภัยไม่มีความช่วยเหลือสำหรับ E212
hello_there_andy

26

ที่เกิดขึ้นกับฉันตลอดเวลาฉันเปิดไฟล์รูทสำหรับการเขียน:

แทนที่จะเสียการเปลี่ยนแปลงทั้งหมดและเปิดใหม่ด้วย sudo ดูตัวอย่างของวิธีบันทึกการเปลี่ยนแปลงเหล่านี้:

การสาธิตการตั้งค่าครั้งเดียวเพื่อสร้างไฟล์อ่านอย่างเดียวที่เป็นเจ้าของรูทสำหรับผู้ใช้ที่ต่ำกว่า:

sudo touch temp.txt
sudo chown root:root temp.txt
sudo chmod 775 temp.txt
whoami
el

ก่อนเปิดไฟล์ในฐานะผู้ใช้ปกติ:

vi temp.txt

จากนั้นทำการเปลี่ยนแปลงบางอย่างกับไฟล์มันจะเตือนให้คุณอ่านเท่านั้น ใช้คำสั่งนี้

:w !chmod 777 %

จากนั้นเขียนไฟล์:

:wq!

สิทธิ์จะถูกขยายและไฟล์จะถูกบันทึก คุณต้องมีเครื่องหมายอัศเจรีย์เนื่องจากคุณกำลังแก้ไขไฟล์รูทในฐานะผู้ใช้น้อย

คำอธิบายว่าคำสั่งนั้นทำอะไร:

กระบวนการ: w หมายถึงเขียนไฟล์ ปังหมายถึงเริ่มตีความเป็นเปลือก chmod หมายถึงสิทธิ์การเปลี่ยนแปลง 777 หมายถึงการอนุญาตแบบเต็มทุกที่ เปอร์เซ็นต์หมายถึงชื่อไฟล์ปัจจุบัน

มันใช้การเปลี่ยนแปลง และมันถามว่าคุณต้องการโหลดซ้ำหรือไม่ กด "O" สำหรับ "Ok" อย่าโหลดซ้ำไม่เช่นนั้นคุณจะสูญเสียการเปลี่ยนแปลง


13

สำหรับฉันมีวิธีแก้ปัญหาค่อนข้างง่าย ฉันพยายามแก้ไข / สร้างไฟล์ในโฟลเดอร์ที่ไม่มีอยู่ เนื่องจากฉันอยู่ในโฟลเดอร์ฉันจึงพยายามแก้ไข / สร้างไฟล์

กล่าวคือ pwd folder/file

และกำลังพิมพ์

sudo vim folder/file

และค่อนข้างชัดเจนว่ามันกำลังมองหาโฟลเดอร์ในโฟลเดอร์และล้มเหลวในการบันทึก


9

หรือบางทีคุณอยู่ใน fs ที่ติดตั้งแบบอ่านอย่างเดียว


1
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม หากต้องการวิจารณ์หรือขอคำชี้แจงจากผู้แต่งโปรดแสดงความคิดเห็นใต้โพสต์ของพวกเขา
DmitryG

13
@DmitryG ไม่มีคำถามที่ถูกถามที่นี่เพียงสถานการณ์ที่ระบุไว้ นี่คือเหตุผลที่ฉันได้เข้าสู่สถานการณ์เดียวกันและฉันคิดว่าผู้คนจะพบว่ามันมีประโยชน์ที่จะรู้เกี่ยวกับมัน
kellogs

5

ฉันอ้างอิงถึง Zsolt ในระดับ 2 ฉันป้อน:

:w !sudo tee % > /dev/null

และในสถานการณ์ของฉันฉันยังคงไม่สามารถแก้ไขไฟล์ได้ดังนั้นจึงแจ้งให้เพิ่ม "!" ดังนั้นฉันจึงใส่

:q! 

จากนั้นก็ใช้งานได้


2
นี่ไม่เพียงแค่ออกจากไฟล์และไม่บันทึกหรือไม่
jsibs

3

สำหรับฉันทำงานเปลี่ยนระบบไฟล์จากอ่านอย่างเดียวก่อนที่จะทำงานเป็นกลุ่ม:

bash-3.2# mount -o remount rw /

1

ลองเชื่อมต่อเป็นรูทแล้วแก้ไขไฟล์ มันใช้งานได้สำหรับฉัน


1

เมื่อคุณเปิดไฟล์ในกลุ่มให้ใช้ sudo ie: sudo vim textfile จะเป็นการแก้ไขปัญหา


ขอบคุณมันช่วย!
parsecer

1

เปลี่ยนผู้ใช้เป็นรูท

sodu su -

เรียกดูเป็นต้น

vi sudoers

ค้นหาผู้ใช้รูทในส่วนของผู้ใช้ส่วนตัว คุณจะได้รับเช่น

root ALL=(ALL:ALL) ALL 

ทำรายการเดียวกันสำหรับชื่อผู้ใช้ของคุณ หากชื่อผู้ใช้ของคุณคือ 'myuser' ให้เพิ่ม

myuser ALL=(ALL:ALL) ALL

มันจะดูเหมือน

root ALL=(ALL:ALL) ALL 

myuser ALL=(ALL:ALL) ALL 

บันทึกไว้ เปลี่ยนผู้ใช้รูทเป็นผู้ใช้ของคุณ ตอนนี้ลองทำเช่นเดียวกันกับที่คุณได้รับปัญหา sudoers


0

อาจเป็นไปได้ว่าไฟล์ที่คุณกำลังเข้าถึงมีสำเนาการแลกเปลี่ยน (หรือรุ่น swap) ที่มีอยู่แล้วในไดเรกทอรีเดียวกัน

ดังนั้นก่อนดูว่ามีไฟล์ที่ซ่อนอยู่หรือไม่

ตัวอย่างเช่นดูไฟล์ประเภทต่อไปนี้

.system.conf.swp

โดยใช้คำสั่ง

ls -a

จากนั้นลบโดยใช้ ...

rm .system.conf.swp

โดยปกติฉันแนะนำให้เริ่มใช้สิทธิ์ผู้ใช้ขั้นสูงโดยใช้ ...

sudo su

0

ฉันได้รับข้อผิดพลาดนี้เมื่อฉันใช้git rmกับไฟล์ในไดเรกทอรี

ฉันอยู่ในบางสิ่งเช่น ~ / gitRepo / code / newFeature

ในใหม่คุณสมบัติมีไฟล์เดียวเท่านั้น ฉันทำgit rmไฟล์นั้นแล้วพยายามสร้างไฟล์ใหม่ myNewFile โดยใช้ vi

อูบุนตูแสดงให้ฉันเห็นว่ายังคงอยู่ในไดเรกทอรีใหม่คุณสมบัติ แต่จริง ๆ แล้วgit rmลบไดเรกทอรีทั้งหมด

ฉันต้องออกจาก vi นำทางหนึ่งไดเรกทอรีจากนั้นสร้างไดเรกทอรีใหม่คุณสมบัติ


-2

คุณเพียงแค่ต้องเข้าถึง Gemfile ด้วยการเข้าถึงรูท ก่อนvi:

คำสั่ง:

sudo su -

แล้ว:

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