Редактирование конфига из коммандной строки (хочу написать скрипт типа postinstall)

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Silender
Сообщения: 23

Редактирование конфига из коммандной строки

Сообщение Silender » 01.03.2015 11:36

Необходимо уметь править параметры конфигов из коммандной строки (точнее из скрипта)

Например хочу подправить конфиг /etc/default/grub

изменить
GRUB_TIMEOUT=5 на GRUB_TIMEOUT=0

Пишу sed -i -e 's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=0/g' /etc/default/grub

и нифига. Все остается по прежнему
Спасибо сказали:

Аватара пользователя
/dev/random
Администратор
Сообщения: 4866
ОС: Gentoo

Re: Редактирование конфига из коммандной строки

Сообщение /dev/random » 01.03.2015 11:43

Права на редактирование есть?
Спасибо сказали:

Silender
Сообщения: 23

Re: Редактирование конфига из коммандной строки

Сообщение Silender » 01.03.2015 12:57

Да, конечно. Я все такие эксперименты из под рута обычно провожу.

Я наверняка неправильно пишу комманду. Мне бы примеры где нибудь найти, где люди так правили конфиги.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Редактирование конфига из коммандной строки

Сообщение Bizdelnick » 01.03.2015 13:02

Silender писал(а):
01.03.2015 12:57
Я все такие эксперименты из под рута обычно провожу.

Если речь об экспериментах, то лучше их проводить от обычного пользователя на копии файла.
Сама команда правильная (если разве что где-то вместо латинской буквы кириллическая не затесалась). Покажите, что у Вас в /etc/default/grub.
P. S. Регулярку я бы использовал не такую, конечно.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Silender
Сообщения: 23

Re: Редактирование конфига из коммандной строки

Сообщение Silender » 01.03.2015 13:29

Bizdelnick писал(а):
01.03.2015 13:02
Сама команда правильная

Да, действительно, она работает. Я ее из скрипта запускал и там она почему то не работала. А мне как раз нужно из скрипта. Ну и вообще тема как то не очень развита, плохо ищется что то полезное (и понятное) по ней. Хочется примеров хороших, чтобы править конфиги.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Редактирование конфига из коммандной строки

Сообщение Bizdelnick » 01.03.2015 13:38

Silender писал(а):
01.03.2015 13:29
Я ее из скрипта запускал и там она почему то не работала.

Ну покажите скрипт.

Вообще я очень не люблю править конфиги скриптами. Лучше генерировать конфиг полностью, это страхует от возможных ошибок. Но такой вариант удобен только когда программа умеет читать много конфигурационных файлов из каталога, или когда в конфигурационном файле очень мало параметров.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Silender
Сообщения: 23

Re: Редактирование конфига из коммандной строки

Сообщение Silender » 01.03.2015 13:53

Разобрался. В скрипте было написано GRUB_TEMEOUT, а не GRUB_TIMEOUT
это ужасно :wacko:

Bizdelnick
Подскажи пожалуйста правильные строчки, чтобы:
Найти параметр по тому, что слева и изменить его значение (то, что справа)
Добавить новую строку

Bizdelnick писал(а):
01.03.2015 13:38
ообще я очень не люблю править конфиги скриптами. Лучше генерировать конфиг полностью

Согласен. Короткие скрипты лучше просто свои целиком копировать и все, но такие как grub так нельзя.
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Редактирование конфига из коммандной строки

Сообщение SLEDopit » 01.03.2015 15:12

Silender писал(а):
01.03.2015 13:53
Добавить новую строку

Код: Выделить всё

'/GRUB_TIMEOUT/aNEW_LINE=VALUE'
ну или i, вместо a, если вставить нужно до строки, а не после
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Редактирование конфига из коммандной строки

Сообщение drBatty » 01.03.2015 15:38

Silender писал(а):
01.03.2015 11:36
's/GRUB_TIMEOUT=5/GRUB_TIMEOUT=0/g'

я-бы так написал:

Код: Выделить всё

sed -ri*~ 's/^(\s*GRUB_TIMEOUT=)[0-9]\s*$/&0/' filename


Silender писал(а):
01.03.2015 13:53
Добавить новую строку

Код: Выделить всё

s/.*/&\nNEW_LINE/
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Редактирование конфига из коммандной строки

Сообщение Bizdelnick » 01.03.2015 18:56

Осталось учесть случай, когда такой строчки вообще нет или она закомментирована.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Редактирование конфига из коммандной строки

Сообщение drBatty » 01.03.2015 19:04

Bizdelnick писал(а):
01.03.2015 18:56
Осталось учесть случай, когда такой строчки вообще нет или она закомментирована.

Код: Выделить всё

sed -ri*~ 's/^(\s*GRUB_TIMEOUT=)[0-9]\s*$/&0/;Tl;h;:l;$!b;x;/.+/bm;x;s/.*/&\nGRUB_TIMEOUT=0/;b;:m;x' filename

что-то типа этого.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Silender
Сообщения: 23

Re: Редактирование конфига из коммандной строки

Сообщение Silender » 07.03.2015 14:50

drBatty писал(а):
01.03.2015 15:38
я-бы так написал:
Код
sed -ri*~ 's/^(\s*GRUB_TIMEOUT=)[0-9]\s*$/&0/' filename

drBatty писал(а):
01.03.2015 19:04
sed -ri*~ 's/^(\s*GRUB_TIMEOUT=)[0-9]\s*$/&0/;Tl;h;:l;$!b;x;/.+/bm;x;s/.*/&\nGRUB_TIMEOUT=0/;b;:m;x' filename
что-то типа этого.

Супер. Спасибо! Только почему то 50 получается. Как сделать, чтоб 0 выходило ?
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Редактирование конфига из коммандной строки

Сообщение drBatty » 07.03.2015 14:54

Silender писал(а):
07.03.2015 14:50
! Только почему то 50 получается. Как сделать, чтоб 0 выходило ?

дайте пример данных.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Silender
Сообщения: 23

Re: Редактирование конфига из коммандной строки

Сообщение Silender » 07.03.2015 14:59

Ну изначально в файле написано GRUB_TIMEOUT=5

делаю копипасту приведенных строчек и жму ентер

получается скрытая копия оригинального файла и собственно файл grub внутри которого GRUB_TIMEOUT=50
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Редактирование конфига из коммандной строки

Сообщение drBatty » 07.03.2015 20:04

drBatty писал(а):
01.03.2015 19:04

Код: Выделить всё

sed -ri*~ 's/^(\s*GRUB_TIMEOUT=)[0-9]+\s*$/&0/;Tl;h;:l;$!b;x;/.+/bm;x;s/.*/&\nGRUB_TIMEOUT=0/;b;:m;x' filename

я плюс забыл после [0-9]
Silender писал(а):
07.03.2015 14:59
делаю копипасту приведенных строчек и жму ентер

а мозг включить? Если-бы я вам однострок на перле кинул?
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Silender
Сообщения: 23

Re: Редактирование конфига из коммандной строки

Сообщение Silender » 09.03.2015 13:33

drBatty писал(а):
07.03.2015 20:04
sed -ri*~ 's/^(\s*GRUB_TIMEOUT=)[0-9]+\s*$/&0/;Tl;h;:l;$!b;x;/.+/bm;x;s/.*/&\nGRUB_TIMEOUT=0/;b;:m;x' filename
я плюс забыл после [0-9]

Все равно 50 получается.

drBatty писал(а):
07.03.2015 20:04
а мозг включить? Если-бы я вам однострок на перле кинул?

Я читаю твой учебник по sed, но это не для нормальных людей. Вот например:

Ещё раз повторю: «*» означает - любое число повторений. В том числе и ноль. Т.е. под регулярное выражение /E*/ попадают и пустые строки тоже, и любые строки, в которых есть пустые строки. К примеру строка "ABC" - в ней регулярное выражение /E*/ можно найти ЧЕТЫРЕ раза:
$ echo "ABC" | sed 's/E*/z/g'
zAzBzCz
Как видите, найдено ровно 4 совпадения, при этом, в данной строке вообще нет символа «E».
Всё потому-что, как я уже ранее писал - совпадение, это место между символами. В строке «ABC» имеется 3 символа, и четыре места между символами, именно на эти 4 места и меняется RE /E*/.

Не знаю кто этот язык сочинил, но он 100% был маньяком. Следовательно знать как это работает не нужно (чтобы не сломать себе мозг), нужно тупо иметь набор примеров, типа задача - решение, например для того, чтобы править конфиги.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Редактирование конфига из коммандной строки

Сообщение Bizdelnick » 09.03.2015 13:46

Silender писал(а):
09.03.2015 13:33
Не знаю кто этот язык сочинил, но он 100% был маньяком.

Ага. Он ещё и Unix сочинил. Стопудово маньяк.

Silender писал(а):
09.03.2015 13:33
Следовательно знать как это работает не нужно (чтобы не сломать себе мозг), нужно тупо иметь набор примеров, типа задача - решение, например для того, чтобы править конфиги.

Вывод неправильный. Правильный был бы - не нужно это использовать. Вообще не нужно использовать что бы то ни было, не зная, как оно работает.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 7951
Статус: Маньяк
ОС: Arch, CentOS, Ubuntu

Re: Редактирование конфига из коммандной строки

Сообщение serzh-z » 09.03.2015 14:17

Bizdelnick писал(а):
09.03.2015 13:46
Ага. Он ещё и Unix сочинил. Стопудово маньяк.
Вообще, Клини ничуть не сочинял UNIX, как и Томсон - регулярный язык. =)
Scio me nihil scire.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Редактирование конфига из коммандной строки

Сообщение Bizdelnick » 09.03.2015 14:35

serzh-z писал(а):
09.03.2015 14:17
Клини ничуть не сочинял UNIX, как и Томсон - регулярный язык

Если под языком понимать форму записи, то она в том виде, в каком используется в sed, впервые была придумана Томпсоном. А про эти ваши конечные автоматы я знать ничего не знаю.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Редактирование конфига из коммандной строки

Сообщение drBatty » 10.03.2015 10:03

Silender писал(а):
09.03.2015 13:33
Я читаю твой учебник по sed, но это не для нормальных людей. Вот например

спасибо за критику.

Silender писал(а):
09.03.2015 13:33
Не знаю кто этот язык сочинил, но он 100% был маньяком.

Стивен Клини скорее всего был математиком ИМХО. И именно он придумал звёздочку Клини, про которую я вам попытался рассказать. Сравните моё описание, с описанием в википедии. Нет, я не прав, не точен, и всё такое, но я писал для программистов-практиков, а не для математиков-теоретиков.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Редактирование конфига из коммандной строки

Сообщение drBatty » 10.03.2015 10:09

Bizdelnick писал(а):
09.03.2015 14:35
А про эти ваши конечные автоматы я знать ничего не знаю.

тонко.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: