Często otwieram plik w vimie, wprowadzam pewne zmiany, a kiedy nadszedł czas, aby zapisać plik, jest tylko do odczytu ... (własność innego użytkownika). Szukam wskazówek, jak mogę ponownie otworzyć plik jako root i zachować moje zmiany bez uprzedniego zapisania go w pliku tymczasowym do skopiowania lub ponownej edycji jako root.
28
Proszę, nie głosujcie na mnie za to. Nie polecam implementowania tej odpowiedzi, ale jest to odpowiedź, o którą prosi rkthkr.
Sposobem na to jest,
:!sudo vim %
jak wspomniałem ipozgaj,% jako argument (nawet pod-argument) zostaje zastąpiony ścieżką do bieżącego bufora. (Może pojawić się monit o podanie hasła.) W efekcie powstaje nowy proces vim, którego właścicielem jest root, czyli proces potomny oryginalnego procesu vim. Brzmi głupio, prawda? Oto jak to wygląda w ps:
Jeśli masz uprawnienia do zapisu do katalogu zawierającego plik i dokonałeś w nim edycji, możesz zostać ostrzeżony, że plik wymiany zostanie zamknięty. Wybór [R] ecover, odzwierciedla większość * zmian dokonanych przez proces vim nadrzędny. (* Myślę, że być może aktualizacja wymiany jest zaplanowana na czas lub ma próg delta. Włożyłem już w to zbyt dużo czasu i nie chcę tego badać.) Kiedy idziesz i rezygnujesz z vima, nie przejmuj się, gdy jesteś wciąż w vimie ... otworzyłeś drugi proces vim. Zapamiętaj?
Teraz, z tym wszystkim powiedziane ... Prawie nigdy bym tego nie zrobił. Może, gdybym nie miał wystarczającej lub zbyt dużej ilości kawy i zdałem sobie sprawę, że będę musiał edytować kilka kolejnych plików jako root ... mógłbym spróbować. Przez 14 lat administrowania systemami nigdy nie miałem. Ale dopóki nie wyraziłeś niezadowolenia z mojego preferowanego rozwiązania (które jest dokładnie tak, jak oferowane dbr), nigdy o tym nie myślałem.
źródło
:w !sudo tee %
więc myślę, że to dobra odpowiedź.Zwykle zapisuję go w pliku tymczasowym w $ HOME / tmp / apache.conf (na przykład)
jest to dodatkowa praca nad scaleniem zmian, ale się opłaciła. Uważam, że jest to przyjemny sposób między wygodą a pomiarami przeciw niepożądanym zmianom
Wcześniej myślałem o listach ACL lub przypisywaniu odpowiednich grup do plików, ale to nie działało zbyt często, albo albo zapomniałem zmienić właściciela, albo zmieniłem pliki tam, gdzie nie chciałem tego robić.
Dotyczy to tylko plików, które do tej pory nie były zarządzane. Ogólnym rozwiązaniem, którego używamy, jest marionetka z repozytorium git, w którym ludzie lokalnie edytują pliki i testują zmiany na odpowiednich serwerach, jeśli konfiguracja działa zgodnie z potrzebami, zmiany są wypychane z powrotem do centralnego repozytorium, w którym nasz silnik konfiguracyjny pobiera zmiany w regularnych odstępach czasu.
źródło
To, co zwykle robię - niekoniecznie najszybszy, ale z pewnością bezpieczny - to zrobić coś takiego (używając przykładu nsswitch.conf):
Wyjdź z vima, a następnie wykonaj:
Spowoduje to usunięcie wszystkich wierszy i odczytanie zmienionej i zaktualizowanej wersji do edycji w jej miejscu. Korzystanie z katalogu domowego oznacza, że nie musisz myśleć o tym, czy masz dostęp, czy nie - i jest to bardziej prywatne niż / tmp. Pamiętaj, że jest to zastąpienie całego pliku: jeśli nie chcesz dodawać wszystkich zmian, musisz wybrać i wybrać.
Pomimo bólu głowy związanego z którąkolwiek z tych odpowiedzi, nie ma powodu, aby stracić zmiany.
źródło