/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

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


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



: 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.


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ć.


9

A może korzystasz z fs zamontowanego tylko do odczytu


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


2
czy to nie powoduje po prostu zamknięcia pliku i jego zapisania?
jsibs


1

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


1

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


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


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

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.


-2

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

Komenda:

sudo su -

następnie:

vi ~/...
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.