как изменить значение системных файлов, не открывая их?

как изменить значение системных файлов, не открывая их?

Есть ли способ изменить значение «PermitRootLogin» /etc/ssh/sshd_configс помощью одной команды в терминале?

Я хочу изменить значения этого файла, не открывая его, и изменить значение «PermitRootLogin» с «да» на «нет».

решение1

Это вполне возможно сделать с помощью sed, сопоставив строку и изменив значение:

sed -i '/^PermitRootLogin/s/yes/no/' /etc/ssh/sshd_config
  • ^PermitRootLoginсоответствует строке, начинающейся сPermitRootLogin
  • s/yes/noизменяет значение опции с «да» на «нет»

решение2

Я хочу изменить значение «PermitRootLogin» с «да» на «нет».

В этом случае я бы использовал Perl (т. е. что-то, что работает с полями и может редактировать их на месте; Sed не справляется с первым пунктом, а AWK — со вторым):

sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
% grep ^PermitRootLogin /etc/ssh/sshd_config                                                     
PermitRootLogin without-password
% sudo perl -i -lane '/^PermitRootLogin/?print("@F[0] no"):print($_)' /etc/ssh/sshd_config
[sudo] password for user: 
% grep ^PermitRootLogin /etc/ssh/sshd_config                                              
PermitRootLogin no

решение3

Вы можете изменить их с помощью sed, используя опцию -i

sed -i -e 's/old/new/g' file

Подробности смотрите в man sed

http://www.grymoire.com/Unix/Sed.html

решение4

Любая программа, которая каким-либо образом работает с файлами, должна выдавать open()также read()системные вызовы, которые можно проверить с помощью strace. Открытие файла без этих системных вызовов невозможно

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

awk '/^PermitRootLogin/{$2="yes"}1' /etc/ssh/sshd_config > /tmp/sshd_config && mv /tmp/sshd_config /etc/ssh/sshd_config

По сути, с помощью AWK мы находим соответствующую строку, заменяем поле 2, которое равно «нет», на «да», выводим все в файл tmp и заменяем оригинал файлом tmp, используя mv.

Помните, что право собственности на этот файл конфигурации принадлежит пользователю root, поэтому вам понадобится sudoдоступ (добавьте sudoперед этим mv)

Связанный контент