/etc/apt/sources.list "E212:書き込み用にファイルを開けません


178

viエディターを使用してsources.listを編集しようとしていますが、ファイルの保存中に次のエラーが発生します。

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

1
ファイルを書き込もうとしていたディレクトリがその最大値を超えたときに、これが発生しました。ディスクの使用
Mehdi Nellen

1
回答の1つにコメントとして記載されているように、ファイルが存在するフォルダーが削除されているか、そもそも存在しなかった場合、このメッセージが表示されることがあります。状況に応じて、viからディレクトリを変更またはディレクトリを作成するためのコマンドを探します。
kon psych 2015

回答:


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の組み込みヘルプシステムについて知っています!:)
Dom Delimar

ありがとう!私の場合、ネットワークドライブに書き込もうとしており、そのスクリーンセッションでネットワークアクセス許可が部分的にクラッシュしていました。私は/ varの一時ファイルに書き出し、それを別のsshインスタンスからホームディレクトリにコピーしてしまいました。
ロスエイケン2013

無効な編集をロールバックしました。
クラススタッカー2013


:h E212は言う: ".bashrc" E212:書き込み用のファイルを開けませんE433:タグファイルがありませんE149:申し訳ありませんが、E212のヘルプはありません
hello_there_andy

26

それはいつも私に起こります、私は書くためにルートファイルを開きます:

すべての変更を失ってsudoで再び開く代わりに。これらの変更を保存する方法のこのデモを参照してください。

下位ユーザー用にルート所有の読み取り専用ファイルを作成するための1回限りのセットアップデモ:

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はあらゆる場所で完全な権限を意味します。パーセントは現在のファイル名を意味します。

変更を適用します。そして、再ロードするかどうかを尋ねます。「OK」の場合は「O」を押します。リロードしないでください。変更が失われます。


13

私にとっては非常に簡単な解決策がありました。存在しないフォルダのファイルを編集・作成しようとしていました。私はすでにフォルダーにいたので、ファイルを編集または作成しようとしていました。

すなわち pwd folder/file

そしてタイプしていた

sudo vim folder/file

むしろ、明らかにフォルダ内のフォルダを探していて、保存に失敗していました。


9

または、読み取り専用でマウントされたfsを使用している可能性があります


1
これは質問に対する答えを提供しません。批評したり、著者に説明を求めたりするには、投稿の下にコメントを残してください。
DmitryG 2013年

13
@DmitryGここで質問されることはなく、状況が示されるだけです。これが私が同じ状況に陥った理由であり、人々はそれについて知っておくと便利だと思うでしょう。
ケルログ2013年

5

レベル2でZsoltを参照しました。

:w !sudo tee % > /dev/null

それから私の状況では、まだファイルを変更できないため、「!」を追加するように求められました。だから私は入力します

:q! 

それでうまくいく


2
これは単にファイルを終了し、保存しないのではないですか?
jsibs


1

ルートとして接続してから、ファイルを編集してください。これは私のために働く


1

vimでファイルを開くときは、sudoを使用します。つまり、sudo vimテキストファイルです。これで問題が解決します。


助けてくれてありがとう!
パーサー

1

ユーザーをルートに変更

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問題を取得していたのと同じことを試してください


0

アクセスしているファイルのスワップコピー(またはスワップバージョン)がすでに同じディレクトリにある可能性があります

したがって、最初に隠しファイルが存在するかどうかを確認します。

たとえば、次のタイプのファイルについては、

.system.conf.swp

コマンドを使用して

ls -a

そして、それを使用してそれを削除します...

rm .system.conf.swp

通常、私は...を使用してスーパーユーザー権限の使用を開始することをお勧めします

sudo su

0

git rmディレクトリ内のファイルで使用すると、このエラーが発生しました。

〜/ gitRepo / code / newFeatureのようなものでした

newFeatureでは、ファイルは1つしかありませんでした。git rmそのファイルでa を実行してから、viを使用して新しいファイルmyNewFileを作成しようとしました。

Ubuntuは、まだnewFeatureディレクトリ内にあることを示しましたが、実際にgit rmはディレクトリ全体を削除していました。

viを終了し、1つ上のディレクトリに移動してから、newFeatureディレクトリを再作成する必要がありました。


-2

rootアクセスでGemfileにアクセスする必要があるだけです。前vi

コマンド:

sudo su -

次に:

vi ~/...
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.