/etc/apt/source.list "E212: Không thể mở tệp để viết


178

Tôi đang cố gắng chỉnh sửa nguồn.list bằng vi biên tập nhưng gặp lỗi sau khi lưu tệp:

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

1
Tôi đã nhận được điều này khi thư mục tôi đang cố gắng viết tập tin để vượt quá mức tối đa của nó. sử dụng đĩa
Mehdi Nellen

1
Như một bình luận được đề cập trong một trong những câu trả lời, bạn có thể nhận được điều này nếu thư mục chứa tệp đã bị xóa hoặc không tồn tại ở vị trí đầu tiên. Tìm kiếm các lệnh để thay đổi thư mục hoặc tạo một thư mục từ vi, tùy thuộc vào tình huống.
kon tâm lý

Câu trả lời:


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 có một hệ thống trợ giúp tích hợp. Tôi chỉ trích dẫn những gì nó nói :h E212.

Bạn có thể muốn chỉnh sửa tệp dưới dạng siêu người dùng sudo vim FILE. Hoặc nếu bạn không muốn rời khỏi phiên vim hiện tại của mình (và hiện có quyền sudo phù hợp), bạn có thể phát hành:

:w !sudo tee % > /dev/null

Mà sẽ lưu các tập tin.

HTH


54
Cảm ơn! Trong trường hợp của tôi, nó đã cố gắng chỉnh sửa một tệp không tồn tại trong một thư mục không tồn tại. Hóa ra, trong khi bạn có thể "mở" tệp không tồn tại và sau đó tạo nó bằng cách lưu nó, thì nó không hoạt động với thư mục không tồn tại. Và bây giờ tôi biết về hệ thống trợ giúp tích hợp của Vim! :)
Dom Delimar

Cảm ơn! Trong trường hợp của tôi, tôi đã cố ghi vào ổ đĩa mạng và quyền truy cập mạng của tôi đã bị sập một phần cho phiên màn hình đó. Cuối cùng tôi đã viết ra một tệp tạm thời trong / var và sao chép nó từ một ví dụ ssh khác vào thư mục nhà của tôi.
Ross Aiken

Đã khôi phục lại một chỉnh sửa không hợp lệ .
lớp xếp chồng


: h E212 nói: ".bashrc" E212: Không thể mở tệp để ghi E433: Không có thẻ tệp E149: Xin lỗi, không có trợ giúp cho E212
hello_there_andy

26

Điều đó xảy ra với tôi mọi lúc, tôi mở một tập tin gốc để viết:

Thay vì mất tất cả các thay đổi của bạn và mở lại bằng sudo. Xem bản demo này về cách lưu những thay đổi đó:

Bản demo thiết lập một lần để tạo tệp chỉ đọc sở hữu gốc cho người dùng thấp hơn:

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

Đầu tiên mở tệp như người dùng bình thường:

vi temp.txt

Sau đó thực hiện một số thay đổi cho tập tin, nó cảnh báo bạn chỉ đọc. Sử dụng lệnh này.

:w !chmod 777 %

Sau đó viết tệp:

:wq!

Các quyền được mở rộng và tệp được lưu. Bạn cần dấu chấm than vì bạn đang chỉnh sửa tệp gốc với tư cách là người dùng ít hơn.

Giải thích về những gì lệnh đó làm:

Chữ: w có nghĩa là ghi tệp. Tiếng nổ có nghĩa là bắt đầu diễn giải như vỏ. chmod có nghĩa là quyền thay đổi, 777 có nghĩa là quyền đầy đủ ở mọi nơi. Phần trăm có nghĩa là tên tệp hiện tại.

Nó áp dụng sự thay đổi. Và nó hỏi nếu bạn muốn tải lại. Nhấn "O" cho "Ok". Không tải lại hoặc bạn sẽ mất các thay đổi của bạn.


13

Đối với tôi đã có một giải pháp khá đơn giản. Tôi đã cố gắng chỉnh sửa / tạo một tập tin trong một thư mục không tồn tại. Vì tôi đã có trong thư mục nên tôi đang cố chỉnh sửa / tạo tập tin.

I E pwd folder/file

và đang gõ

sudo vim folder/file

và đúng hơn là nó đang tìm thư mục trong thư mục và không lưu được.


9

Hoặc có lẽ bạn đang ở trên một fs gắn kết chỉ đọc


1
Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ.
DmitryG

13
@DmitryG Không có câu hỏi nào được hỏi ở đây, chỉ là một tình huống được nêu. Đây là lý do khiến tôi rơi vào tình huống tương tự và tôi nghĩ mọi người sẽ thấy hữu ích khi biết về nó.
kelloss

5

Tôi đã tham khảo Zsolt ở cấp 2, tôi nhập:

:w !sudo tee % > /dev/null

và sau đó trong tình huống của tôi, tôi vẫn không thể sửa đổi tệp, vì vậy nó đã nhắc thêm "!". vì vậy tôi nhập

:q! 

sau đó nó hoạt động


2
Điều này không thoát khỏi tập tin, và không lưu nó?
jsibs

3

đối với tôi đã làm việc thay đổi hệ thống tập tin từ Chỉ đọc trước khi chạy vim:

bash-3.2# mount -o remount rw /

1

Cố gắng kết nối với quyền root và sau đó chỉnh sửa tập tin. Điều này làm việc cho tôi


1

Khi bạn mở tệp trong vim, sử dụng sudo. tức là: sudo vim textfile. Điều này sẽ giải quyết vấn đề.


Cảm ơn nó đã giúp!
phân tích cú pháp

1

thay đổi người dùng để root

sodu su -

duyệt đến vv

vi sudoers

tìm kiếm người dùng root trong phần đặc quyền người dùng. bạn sẽ nhận được nó như thế nào

root ALL=(ALL:ALL) ALL 

thực hiện cùng một mục cho tên người dùng của bạn. nếu tên người dùng của bạn là 'myuser' thì hãy thêm

myuser ALL=(ALL:ALL) ALL

nó sẽ trông giống như

root ALL=(ALL:ALL) ALL 

myuser ALL=(ALL:ALL) ALL 

lưu nó thay đổi người dùng root thành người dùng của bạn. Bây giờ hãy thử tương tự khi bạn gặp vấn đề về sudoers


0

Có thể tệp bạn đang truy cập đã có bản sao trao đổi (hoặc phiên bản trao đổi) đã có trong cùng thư mục

Do đó trước tiên hãy xem liệu một tập tin ẩn có tồn tại hay không.

Ví dụ, xem các loại tệp sau

.system.conf.swp

Bằng cách sử dụng lệnh

ls -a

Và sau đó, xóa nó bằng ...

rm .system.conf.swp

Thông thường, tôi khuyên bạn nên bắt đầu sử dụng các đặc quyền siêu người dùng bằng cách sử dụng ...

sudo su

0

Tôi đã gặp lỗi này khi tôi sử dụng git rmtrên một tập tin trong một thư mục.

Tôi đã ở một cái gì đó như ~ / gitRepo / code / newFeature

Trong newFeature chỉ có một tệp. Tôi đã làm một git rmtập tin đó sau đó cố gắng tạo một tập tin mới myNewFile bằng vi.

Ubuntu cho tôi thấy vẫn còn trong thư mục newFeature nhưng thực sự git rmđã xóa toàn bộ thư mục.

Tôi đã phải thoát ra khỏi vi, điều hướng lên một thư mục và sau đó tạo lại thư mục newFeature.


-2

Bạn chỉ cần truy cập vào Gemfile với quyền truy cập root. Trước vi:

chỉ huy:

sudo su -

sau đó:

vi ~/...
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.