Могут ли быть какие-либо проблемы при использовании gedit для редактирования системных файлов с помощью 'sudo -H gedit'?

10

Я относительно новичок в Ubuntu, я заметил, что в ответах на этом сайте, когда люди предлагают редактировать системные файлы, команда, которую они дают, всегда sudo nanoили sudo vi. Поскольку я не люблю использовать текстовые редакторы на основе терминала, я обычно использую

sudo -H gedit

вместо этого, и до сих пор он работал отлично.

Может ли быть какая-либо проблема с использованием geditдля редактирования системных файлов, или выбор текстового редактора зависит только от предпочтений человека? Есть ли что-то, что я должен иметь в виду (например, кодирование) при редактировании этих файлов?

shinobody
источник
3
Эта -Hчасть важна , не используйте sudoдля запуска приложений с графическим интерфейсом без него.
Помский

Ответы:

10

Пока вы управляете им правильно, это зависит от ваших предпочтений.

Помимо различий в функциях , какой текстовый редактор вы используете - это действительно ваши предпочтения. Это верно даже тогда, когда ваш текстовый редактор представляет собой графическую программу, такую ​​как 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 переменные окружения , которые он консультируется в таком порядке. Таким образом, вы можете запустить:

VISUAL=gedit sudoedit filename

Замените filenameотносительный или абсолютный путь к вашему файлу.

Это делает временную копию файла, который вы хотите редактировать. Копия принадлежит вам, а не root (или тому, кто является первоначальным владельцем). Он открывает текстовый редактор, и вы можете редактировать временную копию. Когда вы закрываете текстовый редактор, sudoeditпроверяет, действительно ли вы внесли изменения. Если вы это сделали, он копирует измененную временную копию обратно в оригинал.

Хотя sudoeditработает с графическими редакторами, это также полезно для терминальных редакторов. В обоих случаях, текстовый редактор работает , как вы, так что имеет конфигурацию, а также другие действия вы выполняете в ней другой , чем изменения , внесенные в этот файл выполняются вами, который предоставляет немного защиты от некоторых видов ошибок.

Вы можете установить одну из этих переменных среды постоянно, если хотите. SUDO_EDITORвозможно, лучший, так как он используется для меньшего количества других вещей. Однако, если вы установите его gedit, имейте в виду, что такие команды, как like , не будут работать, когда GUI недоступен, как это часто (хотя и не всегда ) имеет место в виртуальной консоли или через SSH .sudoedit filename

Серверная часть администратора GVFS

Еще один новый способ сделать это - открыть файл по admin://пути GVFS, а не по традиционному Unix-стилю. Спасибо, что помогли Помскому научить меня этому. Так же, как есть пути GVFS для редактирования файлов, которые, в других отношениях, не находятся в удобном месте для редактирования - например, потому что они находятся на удаленном компьютере, к которому вы подключены через SSH, - GVFS поддерживает admin://пути для редактирования файлов ты не владеешь

Концептуально это похоже на sudoeditто, что вы запускаете свой редактор от себя, а файл, который видит редактор, - это то, что ему разрешено редактировать. Попытка открыть файл требует аутентификации; это не волшебный способ обойти обычные ограничения безопасности.

gedit admin:///path/to/filename

Там /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 filenamesudo vim filenameVISUAL=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 , который является версией для разработчиков на момент написания этой статьи.

Элия ​​Каган
источник
2
Другая проблема sudo -H- 1 раз из 100 или 1000, которые вы забудете, -Hи право собственности на файл может перейти от пользователя к корневому каталогу $HOMEгде-то внутри .
WinEunuuchs2Unix
3

Чтобы ответить на ваш вопрос: В общем, использование графического редактора не будет проблемой, так как geditон очень медленный для больших файлов.

Но для программ с графическим интерфейсом вы бы использовали pkexecили gksuвместо sudo. Возможно, вам придется настроить,pkexec прежде чем он будет работать.

pkexec gedit

или для более старых версий Ubuntu (например, 16.04) вы можете использовать:

gksu gedit

(Хотя вы можете попробовать лучшие редакторы GUI, например geany;-))

pLumo
источник
gksuв значительной степени отбрасывается.
Помский
pkexec......
Rinzwind
правда правда правда ....
pLumo
3
Это должно помочь (@eliah)
Pomsky
1
Разрабатывать комментарии Помского. Если вы получили отказ в соединении, отобразите ошибку, вам нужно будет установить псевдоним вместо этого:pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY
mchid