Bei vi angemeldet, Änderungen vorgenommen, Sudo zuerst vergessen - jetzt was

2476
simon

Ich habe lange Änderungen an einer Konfigurationsdatei auf einem Ubuntu Linux-Computer mit dem vi-Editor vorgenommen. Leider habe ich sudo zuerst vergessen, also bin ich jetzt im Editor, kann aber meine Änderungen nicht speichern, da Rechte fehlen. Kann ich den Benutzer rückwirkend an diesem Terminal anmelden oder wie würden Sie am besten vorgehen?

8
Siehe auch http://stackoverflow.com/questions/1005/getting-root-permissions-on-a-file-inside-of-vi therefromhere vor 15 Jahren 2

3 Antworten auf die Frage

36
wfaulk

Von SO :

:w !sudo tee % 

Ich finde, ich benutze diesen Weg jetzt häufiger:

:%!sudo tee % 

Ich denke, es ist ein bisschen intuitiver, da ich weiß, was es :%!tut, während ich kein Verständnis davon habe :w !. Es ist auch leicht, den sehr wichtigen Raum zwischen dem wund dem zu übersehen !.

Wenn es Ihrer Intuition hilft, denken Sie daran, dass vi-Befehle aus mehreren Buchstaben bestehen können. Es könnte also theoretisch ein „wfoo“ -Befehl geben. Wenn Sie also in eine Datei namens „foo“ schreiben möchten, müssen Sie sagen "`: W foo '". Dh Sie brauchen einen Platz nach "`: w ". Was „`: w! `“ Betrifft, wissen Sie, was „`:! `“ Ist, oder? ": Datum" führt einen Befehl "Datum" aus. Also schreibt ":: w! Xyz" den Puffer, aber *** in einen Befehl *** und nicht in eine Datei. Scott vor 10 Jahren 2
Dies sollte die akzeptierte Antwort sein, da die derzeitige Antwort eine ziemlich lange Umgehung ist, während dies eine sofortige Lösung ist. OP? bschlueter vor 9 Jahren 0
11
Dom

In diesem Fall schreibe ich die Datei mit :w /tmp/tmpfile. Dann gehe ich /tmp/tmpfilezu meiner alten Datei mit Sudo-Rechten.

Das ist, was ich am Ende tue, aber ich mag [Wfaulks Antwort] (http://superuser.com/questions/53733/logged-in-to-vi-made-changes-forgot-to-sudo-first-now- what / 53743 # 53743) .. wenn ich mich das nächste Mal nur daran erinnern kann! :) quack quixote vor 14 Jahren 0
Ich hoffe, dass Sie *** die Datei kopieren, anstatt sie zu verschieben. Beim Verschieben wird der Dateimodus (Berechtigungen) durch den Standardwert von "vi" (wahrscheinlich 666, ANDed mit der Umkehrung Ihrer "umask") ersetzt, der Besitzer der Datei wird durch Ihre UID ersetzt (es war "root", nicht wahr) ?) und bricht harte Links. Scott vor 10 Jahren 0
Ein paar Probleme: (1) Wenn die Datei vertraulich sein soll und Ihr "umask" 22 ist (statt 66), wird der Inhalt der Datei anderen Benutzern angezeigt, die möglicherweise das Verzeichnis `/ tmp` überwachen. (2) Wenn Sie wirklich böse Benutzer auf Ihrem System haben, können sie Ihre `/ tmp / tmpfile` zwischen dem Schreiben (von` vi`) und dem Kopieren über die von Ihnen bearbeitete Systemkonfigurationsdatei ersetzen. Es ist sicherer, die temporäre Datei in einem Verzeichnis abzulegen, auf das nur Sie Zugriff haben. Scott vor 10 Jahren 0
-2
Terje Mikal

Können Sie nicht ein anderes Terminal öffnen und die Zugriffsrechte der Datei vorübergehend ändern?

Das ist eine schlechte Idee. Wahrscheinlich wird dies nie ein großes Sicherheitsproblem sein, aber es könnte sein, und es gibt bessere und einfachere Lösungen (wie das Schreiben in eine temporäre Datei oder besser die ": w! Sudo tee% solution" -Anzeige von wfaulk dbr vor 15 Jahren 1