Я относительно новичок в Ubuntu, я заметил, что в ответах на этом сайте, когда люди предлагают редактировать системные файлы, команда, которую они дают, всегда sudo nano
или sudo vi
. Поскольку я не люблю использовать текстовые редакторы на основе терминала, я обычно использую
sudo -H gedit
вместо этого, и до сих пор он работал отлично.
Может ли быть какая-либо проблема с использованием gedit
для редактирования системных файлов, или выбор текстового редактора зависит только от предпочтений человека? Есть ли что-то, что я должен иметь в виду (например, кодирование) при редактировании этих файлов?
command-line
sudo
gedit
shinobody
источник
источник
-H
часть важна , не используйтеsudo
для запуска приложений с графическим интерфейсом без него.Ответы:
Пока вы управляете им правильно, это зависит от ваших предпочтений.
Помимо различий в функциях , какой текстовый редактор вы используете - это действительно ваши предпочтения. Это верно даже тогда, когда ваш текстовый редактор представляет собой графическую программу, такую как Gedit . Это не значит, что нет веских причин,
nano
иvim
их часто рекомендуют. Терминальные текстовые редакторы, такие какvim
(или, по крайней мере,vi
команда)nano
, доступны даже тогда, когда нет графического интерфейса пользователя, и даже в большинстве минимальных и сломанных систем ; за ними стоит какая-то традиция (если вы неравнодушны к такого рода вещам); их можно запустить в том же терминале, в котором выполняются другие задачи; они автоматически интегрируются в рабочие процессы пользователей терминальных мультиплексоров ; и они более доступны, чем любойконкретный графический текстовый редактор, даже Gedit, даже в Ubuntu (который имеет несколько разновидностей ).Это не все. Если вы собираетесь редактировать системные файлы, один из подходов состоит в том, чтобы запустить ваш редактор от имени пользователя root. Это не единственный подход, и против него есть некоторые аргументы (см. Ниже), но он распространен. Если вы воспользуетесь этим подходом и будете использовать графическую программу в качестве редактора, вам нужно позаботиться о том, чтобы запустить ее таким образом, чтобы
$HOME
домашний каталог root был не вашим , а это добавляло еще один уровень сложности и сложности. Но вы уже делаете это; ты бежишьsudo -H gedit
, что является одним из разумных способов . Тем не менее, эта сложность является еще одной причиной, по которой люди склонны предлагать неграфические редакторы.Графические программы часто являются более сложными, чем неграфические программы. Имея больше материала бежать как корень , как правило , плохо, что есть больше способов вещи может пойти не так, в том числе из - за возможные ошибки, в том числе случайно. (Неграфические текстовые редакторы, такие как
vim
, также довольно сложны и часто конфигурируются для запуска множества внешних программ для выполнения различных задач.)Помимо запуска редактора с правами root, другой общий подход заключается в редактировании файла, который редактор может изменять даже при работе от имени пользователя (не являющегося пользователем root), чтобы изменения в файле распространялись в файл, принадлежащий пользователю с правами root. изменить. Это звучит абстрактно, потому что особенности сильно различаются. Далее следуют два основных конкретных подхода.
sudoedit
Один довольно давний способ сделать это будет
sudoedit
(описано в одной и той же странице , как вручнуюsudo
). По умолчаниюsudoedit
используется текстовый редактор по умолчанию , который обычно не является и не должен быть графической программой. Но вы можете сказать ему , чтобы использовать любой редактор черезSUDO_EDITOR
,VISUAL
илиEDITOR
переменные окружения , которые он консультируется в таком порядке. Таким образом, вы можете запустить:Замените
filename
относительный или абсолютный путь к вашему файлу.Это делает временную копию файла, который вы хотите редактировать. Копия принадлежит вам, а не root (или тому, кто является первоначальным владельцем). Он открывает текстовый редактор, и вы можете редактировать временную копию. Когда вы закрываете текстовый редактор,
sudoedit
проверяет, действительно ли вы внесли изменения. Если вы это сделали, он копирует измененную временную копию обратно в оригинал.Хотя
sudoedit
работает с графическими редакторами, это также полезно для терминальных редакторов. В обоих случаях, текстовый редактор работает , как вы, так что имеет конфигурацию, а также другие действия вы выполняете в ней другой , чем изменения , внесенные в этот файл выполняются вами, который предоставляет немного защиты от некоторых видов ошибок.Вы можете установить одну из этих переменных среды постоянно, если хотите.
SUDO_EDITOR
возможно, лучший, так как он используется для меньшего количества других вещей. Однако, если вы установите егоgedit
, имейте в виду, что такие команды, как like , не будут работать, когда GUI недоступен, как это часто (хотя и не всегда ) имеет место в виртуальной консоли или через SSH .sudoedit filename
Серверная часть администратора GVFS
Еще один новый способ сделать это - открыть файл по
admin://
пути GVFS, а не по традиционному Unix-стилю. Спасибо, что помогли Помскому научить меня этому. Так же, как есть пути GVFS для редактирования файлов, которые, в других отношениях, не находятся в удобном месте для редактирования - например, потому что они находятся на удаленном компьютере, к которому вы подключены через SSH, - GVFS поддерживаетadmin://
пути для редактирования файлов ты не владеешьКонцептуально это похоже на
sudoedit
то, что вы запускаете свой редактор от себя, а файл, который видит редактор, - это то, что ему разрешено редактировать. Попытка открыть файл требует аутентификации; это не волшебный способ обойти обычные ограничения безопасности.Там
/path/to/filename
должен быть абсолютный путь к файлу, начиная с/
. Итак, есть три/
символа послеadmin:
.Кодировки и другие вещи теоретически зависят от конфигурации редактора
Кодировка файла не зависит от того, является ли используемый вами графический редактор графическим. Некоторые редакторы, например
vim
, даже могут работать графически (gvim
команда) или не графически (vim
команда). Простой ответ на ваш вопрос о кодировках заключается в том, что вам не нужно беспокоиться об этом. Это достаточно близко к правде, что вам действительно не нужно читать остальную часть этого ответа.В текущих (и прошлых) выпусках Ubuntu такие команды, как
sudo nano
иsudo vim
запускают эти редакторы как root, по-$HOME
прежнему установлены в вашем домашнем каталоге. Это означает, что редакторы по умолчанию будут использовать вашу конфигурацию, а не конфигурацию root. Если в вашей конфигурации этих редакторов (или в программе, которую они запускают для выполнения некоторой своей работы, напримерgit
), есть что-то в отношении кодировок или концов строк , это будет выполнено. С этим не произойдет.sudo -H editor
Некоторые люди используют голые
sudo
(то есть, без-i
или-H
) для редакторов, потому что они этого хотят. Но на самом деле, вы должны дважды подумать об этом. Мало того, что вы можете достичь этой цели более чисто с помощью метода, какsudoedit
, есть и другие недостатки команд, таких какsudo nano
иsudo vim
:Если конфигурация вашего редактора вызывает запуск чего-либо, он запускается от имени пользователя root. Для продвинутых редакторов, таких как
vim
, это может привести к тому, что довольно много нетривиального кода будет выполняться от имени пользователя root. Как упомянуто выше, использование меньшего количества кода, выполняемого от имени пользователя root, обычно хорошо, и это один из аргументов против запуска графических редакторов с правами root.Если ваша
vim
конфигурация имеет множество плагинов - например, для выполнения статического анализа исходного кода при его вводе - а root - нет, с root'ом работает меньше вещей, чем . (Еще меньше запускается с правами root , но ваши плагины по-прежнему работают!) Это не зависит от того, является ли ваш редактор графическим.sudo -H vim filename
sudo vim filename
VISUAL=vim sudoedit filename
Если ваша конфигурация редактора повреждена и мешает вам легко редактировать файлы, то исправление может быть еще более сложным, так как это относится и к root. Это просто хлопот, а не сложная проблема для решения.
Команды , как
sudo vim
есть немного той же проблемы, что и (опрометчивый!) Командыsudo gedit
. Если вы запустите редакторvim
под учетной записью root, но без сброса$HOME
(какsudo -H
иsudo -i
будет), и он создаст файлы конфигурации для себя , эти файлы конфигурации будут находиться в вашем домашнем каталоге, но они будут принадлежать пользователю root, и ваша конфигурация может быть несколько нарушена. когда вы позже запустите редактор как вы сами.Ну, это очень похоже на эту проблему! Причина, по которой это менее важно, чем в графических приложениях, заключается в том, что редактор обычно все еще запускается, сообщения об ошибках обычно легче понять, обычно вы можете выяснить, какие конкретные файлы затрагиваются гораздо легче, а поломка обычно ограничивается эта одна программа. (Графические программы используют файлы конфигурации в большем количестве мест.) Кроме того, в отличие от графических редакторов, пользователи, которые лишь случайно используют текстовый редактор и не намеренно изменяют его конфигурацию, вряд ли столкнутся с этой проблемой.
Опять же, вы можете использовать конфигурацию редактора своей учетной записи, избегая проблем с разрешениями, используя
sudoedit
или, с рабочего стола, обычно запуская редактор, но обращаясь к файлу поadmin://
пути.Наконец, обратите внимание, что вышеупомянутое поведение,
sudo
когда-H
или-i
передано, фактически планируется изменить в будущем выпуске Ubuntu (как это уже было много лет назад, в большинстве Unix-подобных операционных систем, которые используютsudo
). Поведение уже изменилось в Ubuntu 19.10 , который является версией для разработчиков на момент написания этой статьи.источник
sudo -H
- 1 раз из 100 или 1000, которые вы забудете,-H
и право собственности на файл может перейти от пользователя к корневому каталогу$HOME
где-то внутри .Чтобы ответить на ваш вопрос: В общем, использование графического редактора не будет проблемой, так как
gedit
он очень медленный для больших файлов.Но для программ с графическим интерфейсом вы бы использовали
pkexec
илиgksu
вместоsudo
. Возможно, вам придется настроить,pkexec
прежде чем он будет работать.или для более старых версий Ubuntu (например, 16.04) вы можете использовать:
(Хотя вы можете попробовать лучшие редакторы GUI, например
geany
;-))источник
gksu
в значительной степени отбрасывается.pkexec
......pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY