/etc/apt/sources.list "E212: Не вдається відкрити файл для запису


178

Я намагаюся редагувати Source.list за допомогою редактора vi, але отримую таку помилку під час збереження файлу:

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

1
Це я отримав, коли каталог, в якому я намагався написати файл, перевищив його макс. використання диска
Мехді Неллен

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.

Ви можете відредагувати файл як суперпользователь як sudo vim FILE. Або якщо ви не хочете залишати існуючий сеанс vim (а тепер маєте належні права на sudo), можете оформити:

:w !sudo tee % > /dev/null

Що збереже файл.

HTH


54
Дякую! У моєму випадку він намагався редагувати неіснуючий файл у неіснуючій каталозі. Виявляється, хоча ви можете "відкрити" неіснуючий файл, а потім створити його, зберігаючи його, це не працює з неіснуючим каталогом. І тепер я знаю про вбудовану систему допомоги Vim! :)
Дом Делімар

Дякую! У моєму випадку я намагався записати на мережевий диск, і мої мережеві дозволи частково вийшли з ладу для цього екранного сеансу. Я в кінцевому підсумку виписав у тимчасовий файл у / var і скопіював це з іншого екземпляра ssh у свій домашній каталог.
Росс Ейкен



: h E212 каже: ".bashrc" E212: Не вдається відкрити файл для запису E433: Файл без тегів E149: Вибачте, допомога для E212
hello_there_andy

26

Це відбувається зі мною весь час, я відкриваю кореневий файл для запису:

Замість того, щоб втратити всі свої зміни та знову відкритись із судо. Дивіться демонстрацію, як зберегти ці зміни:

Одноразова демонстраційна програма для створення кореневого файлу лише для читання для нижчого користувача:

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

Або, можливо, ви знаходитесь на монтажному ф-на, який готовий до читання


1
Це не дає відповіді на запитання. Щоб критикувати або вимагати роз'яснення у автора, залиште коментар під їх публікацією.
ДмитроГ

13
@DmitryG Тут не виникає жодних питань, лише йдеться про ситуацію. З цієї причини я потрапив у ту саму ситуацію, і я думаю, що людям буде корисно знати про це.
келоги

5

Я посилався на Zsolt на рівні 2, я ввожу:

:w !sudo tee % > /dev/null

і тоді, в моїй ситуації, я все ще не можу змінити файл, тому це запропонувало додати "!". тому я ввожу

:q! 

тоді це працює


2
це не просто закриває файл, а не зберігає його?
jsibs


1

Спробуйте підключитися як root, а потім відредагуйте файл. Це працює для мене


1

Коли ви відкриєте файл in vim, використовуйте sudo. тобто: текстовий файл sudo vim. це вирішить проблему.


Спасибі це допомогло!
розбірник

1

змінити користувача на root

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 

Збережи це. змінити root користувача на свого користувача. тепер спробуйте те саме, де ви отримували питання про судовиків


0

Можливо, що файл, до якого ви отримуєте доступ, має своєю копією (або своєю версією), яка вже є в тому самому каталозі

Тому спочатку подивіться, чи існує прихований файл чи ні.

Наприклад, див. Наступний тип файлів

.system.conf.swp

За допомогою команди

ls -a

А потім видаліть його за допомогою ...

rm .system.conf.swp

Зазвичай я рекомендую почати використовувати привілеї супер користувача, використовуючи ...

sudo su

0

Я отримав цю помилку, коли використовував git rmфайл у каталозі.

Я був у чомусь на зразок ~ / gitRepo / code / newFeature

У новійФейтрації був лише один файл. Я зробив git rmна цьому файлі, потім спробував створити новий файл myNewFile за допомогою vi.

Ubuntu показав, що я все ще знаходиться у каталозі newFeature, але фактично git rmвидалив весь каталог.

Мені довелося вийти з vi, перейти в одну папку, а потім відтворити новий каталогFeature.


-2

Вам просто потрібно отримати доступ до Gemfile з кореневим доступом. Перед vi:

команда:

sudo su -

тоді:

vi ~/...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.