/etc/apt/sources.list "E212: не удается открыть файл для записи


179

Я пытаюсь редактировать sources.list, используя редактор vi, но получаю следующую ошибку при сохранении файла:

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

1
Я получил это, когда каталог, в который я пытался записать файл, превысил свой максимум. использование диска
Мехди Неллен

1
Как комментарий, упомянутый в одном из ответов, вы можете получить это, если папка, в которой находится файл, была удалена или вообще не существовала. Ищите команды для изменения каталога или создания каталога из vi, в зависимости от ситуации.
Кон Психи

Ответы:


279
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

Который сохранит файл.

НТН


54
Спасибо! В моем случае он пытался редактировать несуществующий файл в несуществующей директории. Оказывается, хотя вы можете «открыть» несуществующий файл и затем создать его, сохранив его, это не работает с несуществующим каталогом. И теперь я знаю о встроенной справочной системе Vim! :)
Дом Делимар

Спасибо! В моем случае я пытался записать на сетевой диск, и мои сетевые разрешения частично сбоили для этого сеанса экрана. Я закончил записывать во временный файл в / var и копировать его из другого экземпляра ssh в мой домашний каталог.
Росс Айкен



: h E212 говорит: ".bashrc" E212: Не удается открыть файл для записи E433: Нет файла тегов E149: Извините, нет помощи для E212
hello_there_andy

26

Это происходит со мной все время, я открываю корневой файл для записи:

Вместо того, чтобы потерять все свои изменения и заново открыть с помощью sudo. Посмотрите демонстрацию того, как сохранить эти изменения:

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

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 означает полные права доступа везде. Процент означает текущее имя файла.

Это применяет изменение. И это спросить, если вы хотите перезагрузить. Нажмите «О» для «ОК». Не перезагружайте, иначе вы потеряете свои изменения.


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


1

Попробуйте подключиться как root и затем отредактируйте файл. Это работает для меня


1

сменить пользователя на root

sodu su -

перейти к и т. д.

vi sudoers

ищите пользователя root в разделе привилегий пользователя. вы получите это как

root ALL=(ALL:ALL) ALL 

сделать ту же запись для вашего имени пользователя. если ваше имя пользователя 'myuser', то добавьте

myuser ALL=(ALL:ALL) ALL

это будет выглядеть

root ALL=(ALL:ALL) ALL 

myuser ALL=(ALL:ALL) ALL 

сохрани это. измените пользователя root на вашего пользователя. Теперь попробуйте то же самое, где вы получили проблему sudoers


Это плохая практика. rootследует использовать в качестве крайней меры.
DannyDannyDanny

1

Предварительно добавьте свои команды с помощью sudo.

Например, вместо того vim textfile.txt, чтобы использовать sudo vim textfile.txt. Это решит проблему.


Спасибо, это помогло!
парсер

0

Вполне возможно, что файл, к которому вы обращаетесь, имеет копию подкачки (или версию подкачки), уже находящуюся в том же каталоге.

Поэтому сначала посмотрите, существует ли скрытый файл или нет.

Например, см. Для следующего типа файлов

.system.conf.swp

С помощью команды

ls -a

А затем удалите его, используя ...

rm .system.conf.swp

Обычно я рекомендую начать использовать привилегии суперпользователя, используя ...

sudo su

0

Я получил эту ошибку, когда я использовал git rmфайл в каталоге.

Я был в чем-то вроде ~ / gitRepo / code / newFeature

В newFeature был только один файл. Я сделал для git rmэтого файла, а затем попытался создать новый файл myNewFile с помощью vi.

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

Мне пришлось выйти из vi, перейти вверх по одному каталогу, а затем заново создать каталог newFeature.


-2

Вам просто нужно получить доступ к Gemfile с правами root. До vi:

команда:

sudo su -

затем:

vi ~/...
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.