Đăng nhập vào vi, thực hiện thay đổi, quên sudo trước - bây giờ là gì


11

Tôi đã thực hiện các thay đổi dài cho tệp cấu hình trên máy tính Ubuntu Linux bằng trình chỉnh sửa vi. Thật không may, tôi đã quên sudo trước, vì vậy bây giờ tôi đang ở trong trình chỉnh sửa, nhưng không thể lưu các thay đổi của mình vì thiếu quyền. Tôi có thể hồi tố người dùng trên thiết bị đầu cuối đó không, hoặc điều gì sẽ là cách hành động tốt nhất để thực hiện?


Câu trả lời:


11

Trong trường hợp này, tôi viết các tập tin với :w /tmp/tmpfile. Sau đó, tôi đi ra ngoài và chuyển /tmp/tmpfileđến tập tin cũ của tôi với quyền sudo.


đây là những gì tôi sẽ làm, nhưng tôi thích câu trả lời của wfaulk .. nếu tôi chỉ có thể nhớ nó vào lần tới khi tôi làm điều này! :)
quack quixote

Tôi hy vọng bạn sao chép các tập tin hơn là di chuyển nó. Di chuyển thay thế chế độ (quyền) của tệp bằng vimặc định (có lẽ là 666, ANDed với nghịch đảo của um um của bạn), thay thế chủ sở hữu tệp bằng UID của bạn (đó là Root root, phải không?), và phá vỡ các liên kết cứng.
Scott

Một số vấn đề: (1) Nếu tệp được coi là bí mật và um um của bạn là 22 (chứ không phải 66), quy trình này sẽ hiển thị nội dung của tệp cho những người dùng khác có thể đang theo dõi /tmpthư mục. (2) Nếu bạn có người dùng thực sự xấu trên hệ thống của mình, họ có thể thay thế /tmp/tmpfilegiữa bạn khi bạn viết nó (từ vi) và khi bạn sao chép nó qua tệp cấu hình hệ thống mà bạn đang chỉnh sửa. An toàn hơn khi đặt tệp tạm thời vào một thư mục mà chỉ bạn mới có quyền truy cập.
Scott

40

Từ SO :

:w !sudo tee %

Tôi thực sự thấy mình sử dụng cách này để làm điều đó thường xuyên hơn bây giờ:

:%!sudo tee %

Tôi nghĩ rằng nó trực quan hơn một chút, vì tôi biết những gì :%!nó làm, trong khi tôi không có hiểu biết về nội tạng :w !. Ngoài ra, thật dễ dàng để bỏ lỡ không gian rất quan trọng giữa w!.


3
Nếu nó giúp trực giác của bạn bất kỳ, hãy nhớ rằng vicác lệnh có thể có nhiều chữ cái, vì vậy về mặt lý thuyết có thể có một wfoolệnh Triệu Tấn, vì vậy nếu bạn muốn ghi vào một tệp có tên là Tấn foo, bạn phải nói là Riết :w foo. Tức là bạn cần một không gian sau khi Riên :w. Theo như :w !liên quan đến phạm vi - bạn có biết :!là thế nào không? “ :!date” Điều hành một “ date” lệnh. Vì vậy, :w !xyzCHUYỆN viết bộ đệm, nhưng vào một lệnh chứ không phải là một tệp.
Scott

Điều này nên được đưa ra câu trả lời được chấp nhận vì câu trả lời hiện tại là một công việc khá dài trong khi đây là một giải pháp tức thời. OP?
bschlueter 19/03/2015

@Scott cảm ơn đã giải thích! Tee là gì và %mặc dù?
CodyBugstein

@CodyBugstein: Xin chào. (1) Ping các tác giả của những bình luận sáu tuổi thường không đưa bạn đến đâu, vì mọi người đôi khi rời đi và không bao giờ quay lại. Nhưng tôi bị xích vào máy tính của tôi; Có lẽ tôi sẽ ở đây mãi mãi. (Hoặc có thể không.) (2) Bạn đã thử làm nghiên cứu chưa? Bạn có thể dễ dàng tìm thấy thông tin trên trang tee tee. ( % có thể khó hơn.) (3) OK, tôi sẽ giúp bạn một chút.  teelà một chương trình cho phép bạn viết thông tin đến nhiều nơi. Ví dụ: date | tee codysẽ ghi ngày và giờ hiện tại vào một tệp có tên là cody Lọ (Cont'd)
Scott

(Tiếp theo) và cả màn hình đầu cuối.  date | tee cody > bugsteinsẽ ghi ngày giờ hiện tại vào một tệp được gọi codyvà cả tệp được gọi bugstein. - Bạn có hiểu sudokhông Nó cho phép bạn chạy một lệnh với các đặc quyền của người dùng khác (thường là root). Ví dụ: ls /rootnói chung sẽ thất bại, vì bạn không có quyền truy cập  /root. Nhưng sudo ls /rootsẽ làm việc. - Một tác dụng phụ đáng tiếc của cách thức hoạt động của Unix là sudo ls /root > /root/codysẽ thất bại, vì bạn không có quyền truy cập  /rootvà vì vậy bạn không thể viết thư cho /root/cody. Tiết (Cont'd)
Scott

-2

Bạn không thể mở một thiết bị đầu cuối khác và tạm thời thay đổi quyền truy cập của tệp?


1
Đây là một ý tưởng tồi. Có lẽ sẽ không bao giờ là một vấn đề an ninh lớn, nhưng nó có thể được, và có các giải pháp đơn giản hơn và (như văn bản cho một tập tin tạm thời, hoặc tốt hơn, các :w !sudo tee % solutionwfaulk posted
DBR
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.