/etc/apt/sources.list "E212: Nie można otworzyć pliku do zapisu

178

Próbuję edytować źródła.list za pomocą edytora vi, ale podczas zapisywania pliku pojawia się następujący błąd:

/etc/apt/sources.list" E212: Can't open file for writing
codersofthedark
źródło
1
Otrzymałem to, gdy katalog, w którym próbowałem napisać plik, przekroczył maksimum. użycie płyty
Mehdi Nellen
1
Jako komentarz wspomniany w jednej z odpowiedzi, możesz to otrzymać, jeśli folder, w którym znajduje się plik, został usunięty lub nie istniał w pierwszej kolejności. Poszukaj poleceń zmiany katalogu lub tworzenia katalogu z vi, w zależności od sytuacji.
kon psych

Odpowiedzi:

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 ma wbudowany system pomocy. Właśnie zacytowałem, co to mówi :h E212.

Możesz edytować plik jako superużytkownik jako sudo vim FILE. Lub jeśli nie chcesz opuszczać istniejącej sesji vima (i masz teraz odpowiednie prawa sudo), możesz wydać:

:w !sudo tee % > /dev/null

Który zapisze plik.

HTH

Zsolt Botykai
źródło
54
Dzięki! W moim przypadku próbowała edytować nieistniejący plik w nieistniejącym katalogu. Okazuje się, że chociaż można „otworzyć” nieistniejący plik, a następnie utworzyć go przez zapisanie, nie działa to w przypadku nieistniejącego katalogu. A teraz wiem o wbudowanym systemie pomocy Vima! :)
Dom Delimar
Dzięki! W moim przypadku próbowałem pisać na dysku sieciowym, a moje uprawnienia sieciowe częściowo się zawiesiły podczas tej sesji ekranu. Skończyło się na pisaniu do pliku tymczasowego w / var i skopiowaniu go z innej instancji ssh do mojego katalogu domowego.
Ross Aiken
Cofnięto nieprawidłową edycję .
układacz klas
@Xinus zobacz: stackoverflow.com/questions/2600783/…
Zsolt Botykai
: h E212 mówi: „.bashrc” E212: Nie można otworzyć pliku do zapisu E433: Brak pliku tagów E149: Przepraszamy, brak pomocy dla E212
hello_there_andy
26

Zdarza mi się to cały czas, otwieram plik root do zapisu:

Zamiast tracić wszystkie zmiany i otwierać je ponownie za pomocą sudo. Zobacz to demo, jak zapisać te zmiany:

Jednorazowe demo konfiguracji, aby utworzyć plik tylko do odczytu należący do użytkownika root dla niższego użytkownika:

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

Najpierw otwórz plik jako zwykły użytkownik:

vi temp.txt

Następnie wprowadź zmiany w pliku, ostrzeże Cię, że jest tylko do odczytu. Użyj tego polecenia.

:w !chmod 777 %

Następnie napisz plik:

:wq!

Uprawnienia zostaną rozszerzone, a plik zostanie zapisany. Potrzebujesz wykrzyknika, ponieważ edytujesz plik root jako mniejszy użytkownik.

Wyjaśnienie, co robi to polecenie:

: W oznacza zapis pliku. Huk oznacza rozpoczęcie interpretacji jako powłoki. chmod oznacza zmianę uprawnień, 777 oznacza pełne uprawnienia wszędzie. Procent oznacza aktualną nazwę pliku.

Wprowadza zmianę. I pyta, czy chcesz ponownie załadować. Naciśnij „O”, aby wyświetlić „OK”. Nie ładuj ponownie, bo stracisz zmiany.

Eric Leschinski
źródło
13

Dla mnie było dość proste rozwiązanie. Próbowałem edytować / utworzyć plik w folderze, który nie istniał. Ponieważ byłem już w folderze, próbowałem edytować / utworzyć plik w.

to znaczy pwd folder/file

i pisał

sudo vim folder/file

i raczej oczywiście szukał folderu w folderze i nie udało się go zapisać.

Szymon
źródło
9

A może korzystasz z fs zamontowanego tylko do odczytu

kellogs
źródło
1
To nie daje odpowiedzi na pytanie. Aby skrytykować lub poprosić autora o wyjaśnienie, zostaw komentarz pod jego postem.
DmitryG
13
@DmitryG Nie ma tu żadnego pytania, po prostu została przedstawiona sytuacja. To był powód, dla którego znalazłem się w tej samej sytuacji i myślę, że ludzie uznaliby to za przydatne.
kellogs
5

Odwołałem się do Zsolta na poziomie 2, wprowadzam:

:w !sudo tee % > /dev/null

a potem w mojej sytuacji nadal nie mogę zmodyfikować pliku, więc poprosił o dodanie „!”. więc wpisuję

:q! 

wtedy to działa

Oscar Zhou1989
źródło
2
czy to nie powoduje po prostu zamknięcia pliku i jego zapisania?
jsibs
3

dla mnie pracował nad zmianą systemu plików z tylko do odczytu przed uruchomieniem vima:

bash-3.2# mount -o remount rw /
Przemysław Czechowski
źródło
1

Spróbuj połączyć się jako root, a następnie edytuj plik. To działa dla mnie

Kazman
źródło
1

Kiedy otwierasz plik w vimie, użyj sudo. tj .: sudo vim plik tekstowy. to rozwiąże problem.

Bugz
źródło
Dzięki, pomogło!
parsecer
1

zmień użytkownika na roota

sodu su -

przejdź do itp

vi sudoers

poszukaj użytkownika root w sekcji uprawnień użytkownika. dostaniesz to jak

root ALL=(ALL:ALL) ALL 

wprowadź ten sam wpis dla swojej nazwy użytkownika. jeśli nazwa użytkownika to „myuser”, dodaj

myuser ALL=(ALL:ALL) ALL

to będzie wyglądać

root ALL=(ALL:ALL) ALL 

myuser ALL=(ALL:ALL) ALL 

Zapisz to. zmień użytkownika root na swojego użytkownika. teraz spróbuj tego samego, w którym pojawił się problem sudoers

ktoś mówi
źródło
0

Może się zdarzyć, że plik, do którego uzyskujesz dostęp, ma już kopię wymiany (lub wersję wymiany) w tym samym katalogu

Dlatego najpierw sprawdź, czy ukryty plik istnieje, czy nie.

Na przykład zobacz następujące typy plików

.system.conf.swp

Używając polecenia

ls -a

A następnie usuń go za pomocą ...

rm .system.conf.swp

Zwykle polecam zacząć korzystać z uprawnień superużytkownika za pomocą ...

sudo su
Abdullah Khilji
źródło
0

Otrzymałem ten błąd, gdy użyłem git rmpliku w katalogu.

Byłem w czymś takim jak ~ / gitRepo / code / newFeature

W newFeature był tylko jeden plik. Zrobiłem git rmna tym pliku, a następnie spróbowałem utworzyć nowy plik myNewFile za pomocą vi.

Ubuntu pokazało, że nadal znajduję się w katalogu newFeature, ale w rzeczywistości git rmusunął cały katalog.

Musiałem wyjść z vi, przejść do jednego katalogu, a następnie ponownie utworzyć katalog newFeature.

DatabaseShouter
źródło
-2

Musisz tylko uzyskać dostęp do Gemfile z dostępem roota. Przed vi:

Komenda:

sudo su -

następnie:

vi ~/...
Ali G.
źródło