Jestem stosunkowo nowy w Ubuntu, zauważyłem, że w odpowiedziach na tej stronie, kiedy ludzie sugerują edycję plików systemowych, polecenie, które wydają, to zawsze sudo nano
lub sudo vi
. Ponieważ nie lubię używać edytorów tekstu opartych na terminalach, zwykle używam
sudo -H gedit
zamiast tego i jak dotąd działało idealnie dobrze.
Czy może być jakiś problem z gedit
edycją plików systemowych, czy też wybór edytora tekstu zależy wyłącznie od preferencji osoby? Czy jest coś, o czym powinienem pamiętać (np. Kodowanie) podczas edycji tych plików?
command-line
sudo
gedit
shinobody
źródło
źródło
-H
część jest ważna , nie używaj jejsudo
do uruchamiania aplikacji GUI bez niej.Odpowiedzi:
Tak długo, jak poprawnie go uruchomisz, zależy to od twoich preferencji.
Oprócz różnic w funkcjach , preferowany jest edytor tekstów. Dzieje się tak nawet wtedy, gdy edytor tekstu jest programem graficznym takim jak Gedit . Nie oznacza to, że nie ma dobrego powodu
nano
ivim
są często zalecane. Edytory tekstu oparte na terminalach, takie jakvim
(lub przynajmniejvi
polecenie), inano
są dostępne nawet, gdy nie ma GUI, a nawet w większości bardzo minimalnych i uszkodzonych systemów ; mają za sobą pewną tradycję (jeśli jesteś stronnikiem tego rodzaju rzeczy); można je uruchamiać w tym samym terminalu, w którym wykonywane są inne zadania; automatycznie integrują się z przepływami pracy użytkowników terminalowego multipleksera ; i są bardziej dostępne niż jakikolwiek innyszczególny graficzny edytor tekstu, nawet Gedit, nawet na Ubuntu (który ma kilka smaków ).To nie wszystko. Jeśli zamierzasz edytować pliki systemowe, jednym z podejść jest uruchomienie edytora jako root. To nie jedyne podejście, i istnieją pewne argumenty przeciwko nim (patrz poniżej), ale jest to jeden wspólny. Jeśli zastosujesz to podejście i użyjesz programu graficznego jako edytora, musisz zadbać o to, aby uruchomić go w taki sposób, że
$HOME
jest to katalog główny root, a nie własny , a to dodaje kolejną warstwę kłopotów i złożoności. Ale już to robisz; biegnieszsudo -H gedit
, co jest jednym z rozsądnych sposobów . Mimo to ta złożoność jest kolejnym powodem, dla którego ludzie sugerują edytory nie graficzne.Programy graficzne są często bardziej skomplikowane niż programy nie graficzne. Uruchamianie większej liczby rzeczy jako root jest na ogół złe, ponieważ istnieje więcej sposobów, aby coś poszło nie tak, w tym z powodu możliwych błędów, w tym przez przypadek. (Nie graficzne edytory tekstu, które
vim
są jednak dość wyrafinowane i często są skonfigurowane do uruchamiania wielu zewnętrznych programów do wykonywania różnych zadań).Oprócz uruchamiania edytora jako root, innym ogólnym podejściem jest edycja pliku, który edytor może modyfikować nawet podczas działania jako użytkownik (inny niż root), tak aby zmiany w pliku były propagowane do pliku będącego własnością root zmienić. Brzmi to abstrakcyjnie, ponieważ szczegóły różnią się znacznie. Następują dwa główne konkretne podejścia.
sudoedit
Jednym z dość długotrwałych sposobów jest
sudoedit
(udokumentowane na tej samej stronie podręcznika cosudo
). Domyślniesudoedit
używa domyślnego edytora tekstu , który zwykle nie jest - i nie powinien - być programem graficznym. Ale można powiedzieć to, aby użyć dowolnego edytora za pośrednictwemSUDO_EDITOR
,VISUAL
lubEDITOR
zmiennych środowiskowych , który konsultuje się w tej kolejności. W ten sposób możesz uruchomić:Zastąp
filename
ścieżką względną lub bezwzględną do pliku.To tworzy tymczasową kopię pliku, który chcesz edytować. Kopia jest twoją własnością, a nie rootem (lub kimkolwiek jest pierwotny właściciel). Otwiera edytor tekstu i możesz edytować tymczasową kopię. Po zamknięciu edytora tekstu
sudoedit
sprawdza, czy rzeczywiście dokonano zmian. Jeśli tak, kopiuje zmodyfikowaną tymczasową kopię z powrotem do oryginału.Chociaż
sudoedit
współpracuje z edytorami graficznymi, jest także przydatny dla edytorów terminalowych. W obu przypadkach edytor tekstu działa tak jak Ty, więc ma konfigurację, a Ty wykonujesz w nim inne czynności niż modyfikacje tego pliku, co zapewnia pewną ochronę przed niektórymi błędami.Możesz dowolnie ustawić jedną z tych zmiennych środowiskowych .
SUDO_EDITOR
jest chyba najlepszy, ponieważ jest używany do mniejszej liczby innych rzeczy. Jeśli jednak to ustawiszgedit
, pamiętaj, że polecenia takie nie będą działać, gdy GUI nie jest dostępne, jak to często bywa (choć nie zawsze ) w wirtualnej konsoli lub przez SSH .sudoedit filename
Backend administratora GVFS
Innym nowszym sposobem na to jest otwarcie pliku za pomocą
admin://
ścieżki GVFS, a nie tradycyjnej ścieżki w stylu uniksowym. Dziękuję pomsky za nauczenie mnie o tym. Podobnie jak istnieją ścieżki GVFS do edycji plików, które pod innymi względami nie są dogodnym miejscem do edycji - na przykład dlatego, że znajdują się na zdalnym komputerze, z którym masz połączenie przez SSH - GVFS obsługujeadmin://
ścieżki do edycji plików nie posiadasz.Jest to koncepcyjnie podobne do
sudoedit
tego, że uruchamiasz swój edytor jak ty, a plik, który redaktor widzi, jest czymś, co można edytować. Próba otwarcia pliku wymaga uwierzytelnienia; nie jest to magiczny sposób na obejście zwykłych ograniczeń bezpieczeństwa.Tam
/path/to/filename
musi być absolutna ścieżka do pliku, zaczynając/
. Po tym są trzy/
postacieadmin:
.Kodowanie i inne rzeczy teoretycznie zależne od konfiguracji edytora
Na kodowanie pliku nie wpływa tak naprawdę to, czy edytor, którego używasz, jest graficzny. Niektóre edytory
vim
mogą nawet działać graficznie (gvim
polecenie) lub nie graficznie (vim
polecenie). Prosta odpowiedź na pytanie dotyczące kodowania polega na tym, że nie musisz się tym martwić. To wystarczająco blisko prawdy, że tak naprawdę nie musisz czytać reszty tej odpowiedzi.W obecnych (i ostatnie) wydaniach Ubuntu, komendy jak
sudo nano
isudo vim
uruchomić te redaktorzy jako root ale$HOME
nadal ustawiony na swoim katalogu domowym. Oznacza to, że redaktorzy domyślnie używają twojej konfiguracji zamiast konfiguracji roota. Jeśli jest coś w konfiguracji tych edytorów (lub w programie, który uruchamiają, aby wykonać część swojej pracy, na przykładgit
) na temat kodowania lub zakończenia linii , będzie to przestrzegane. Dzięki tak się nie stanie.sudo -H editor
Niektóre osoby używają goły
sudo
(tj. Bez-i
lub-H
) dla redaktorów, ponieważ tego chcą. Ale tak naprawdę powinieneś pomyśleć o tym dwa razy. Nie tylko możesz osiągnąć ten cel bardziej czysto za pomocą metodysudoedit
, ale istnieją także inne wady poleceń takich jaksudo nano
isudo vim
:Jeśli konfiguracja edytora powoduje, że coś zostanie uruchomione, zostanie ono uruchomione jako root. W przypadku wyrafinowanych edytorów, takich jak
vim
, może to spowodować, że całkiem nietypowy kod będzie działał jako root. Jak wspomniano powyżej, mniej kodu uruchamianego jako root jest ogólnie dobry i jest to jeden z argumentów przeciwko uruchamianiu edytorów graficznych jako root.Jeśli twoja
vim
konfiguracja ma wiele wtyczek - na przykład do przeprowadzania analizy statycznej kodu źródłowego podczas pisania - a root nie, mniej rzeczy działa jako root z niż . (Jeszcze mniej działa jako root z , ale twoje wtyczki nadal działają!) Jest to niezależne od tego, czy twój edytor jest graficzny.sudo -H vim filename
sudo vim filename
VISUAL=vim sudoedit filename
Jeśli twoja konfiguracja edytora jest zepsuta i nie pozwala ci na łatwą edycję plików, to naprawienie tego może być jeszcze bardziej kłopotliwe, ponieważ dotyczy również rootowania. To tylko kłopot, a nie trudny problem do rozwiązania.
Polecenia takie
sudo vim
mają trochę ten sam problem co polecenie (źle doradzone!)sudo gedit
. Jeśli uruchomisz edytor takivim
jak root, ale bez resetowania$HOME
(jaksudo -H
isudo -i
zrobiłby to), i utworzy on pliki konfiguracyjne dla siebie , pliki konfiguracyjne będą znajdować się w twoim katalogu domowym, ale będą własnością root, a twoja konfiguracja może być nieco zepsuta kiedy później uruchomisz edytor jak ty.Cóż, to z pewnością brzmi jak ten problem! Powodem, dla którego jest to mniej ważna sprawa niż w przypadku aplikacji graficznych, jest to, że edytor zwykle wciąż się uruchamia, komunikaty o błędach są zwykle łatwiejsze do zrozumienia, zwykle łatwiej jest ustalić, na które konkretne pliki mają wpływ, a uszkodzenie zwykle ogranicza się do ten jeden program. (Programy graficzne używają plików konfiguracyjnych w większej liczbie miejsc). Ponadto, w przeciwieństwie do edytorów graficznych, użytkownicy, którzy tylko przypadkowo korzystają z edytora tekstu i nie zmieniają jego konfiguracji celowo, raczej nie doświadczają tego problemu.
Ponownie możesz użyć konfiguracji edytora własnego konta użytkownika, unikając problemów z uprawnieniami, używając
sudoedit
lub, z pulpitu, uruchamiając edytor normalnie, ale uzyskując dostęp do pliku przezadmin://
ścieżkę.Na koniec zauważ, że wyżej wspomniane zachowanie,
sudo
kiedy-H
lub kiedy-i
zostanie przekazane, jest faktycznie planowane do zmiany w przyszłej wersji Ubuntu (tak jak już wiele lat temu w większości systemów operacyjnych typu Unix, które używająsudo
). Zachowanie zmieniło się już w Ubuntu 19.10 , która jest wersją rozwojową od tego pisania.źródło
sudo -H
jest to, że 1 raz na 100 lub 1000 zapomnisz,-H
a własność pliku może zostać przeniesiona z użytkownika na root$HOME
.Aby odpowiedzieć na twoje pytanie: Ogólnie rzecz biorąc, używanie edytora GUI nie będzie problemem,
gedit
ponieważ jest bardzo powolny w przypadku dużych plików.Ale dla programów GUI użyłbyś
pkexec
lubgksu
zamiastsudo
. Może być konieczne skonfigurowanie,pkexec
zanim będzie działać.lub dla starszych wersji Ubuntu (np. 16.04) możesz użyć:
(Chociaż możesz spróbować lepszych edytorów GUI, np.
geany
;-))źródło
gksu
jest prawie odrzucony.pkexec
......pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY