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

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

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

1
задан 25 November 2015 в 00:29

5 ответов

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

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

[ f1]
% 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
1
ответ дан 23 May 2018 в 15:33

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

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

См. man sed для detials

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

0
ответ дан 23 May 2018 в 15:33

Если вы имеете в виду «без открытия файла в редакторе», это возможно.

Например, вы можете использовать sed для замены шаблонов регулярных выражений на фиксированные строки:

sed 's/REGEX-PATTERN/REPLACE-WITH-THIS-STRING/' /PATH/TO/FILE

Вышеприведенная команда будет печатать содержимое файла с помощью замещаемых строк. Он не будет выполнять замены, просто распечатайте «предварительный просмотр»! Чтобы на самом деле применить замены после их проверки, используйте флаг -i («заменить на месте»):

sed -i 's/REGEX-PATTERN/REPLACE-WITH-THIS-STRING/' /PATH/TO/FILE
0
ответ дан 23 May 2018 в 15:33

Любая программа, которая каким-либо образом обрабатывает файлы, должна выдавать 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)

0
ответ дан 23 May 2018 в 15:33

Вы можете использовать Vim в режиме Ex:

ex -sc '/^PermitRootLogin/s/yes/no/|x' /etc/ssh/sshd_config
s заменить x сохранить и закрыть
0
ответ дан 23 May 2018 в 15:33

Другие вопросы по тегам:

Похожие вопросы: