Criando um script para alterar arquivos de configuração

Fala pessoal tudo bem?
Eu já uso linux a um bom tempo mas nunca entrei muito na área de scripts (embora tenha o meu de pós instalação, e bem amador).
Nos últimos tempos tenho procurado criar um servidor de impressão, tenho usado o CUPS e funciona perfeitamente. Porém com diversas quedas de energia que tem acontecido acabei por ter de reinstalar o sistema várias vezes. Nessa história pensei em automatizar a instalação de programas e configurações, a primeira parte ok, mas quando fui procurar métodos para alterar as config_files do cups e do próprio sistema operacional acabei me embanando todo.
Alguém poderia me explicar como fazer um script que consegue alterar/adicionar/remover linhas de arquivos de texto? Vi um comando chamado sed, porém não entendi muito bem como ele funciona…
Enfim é entender um pouco como posso automatizar os processos de configurações
Agradeço a atenção desde já

Alguns exemplos de sed relevantes para um caso relativamente direto como o seu estão nesse artigo:

1 curtida

Veja esse tópico, eu fiz um scripts que faz algumas edições em arquivos de configuração:


Uma dica para ver onde está um arquivo de configuração de uma opção em específico faça isso:

  1. No terminal crie um arquivo com o nome ‘a’ qualquer
    touch a

  2. Faça a alteração/configuração desejada no sistema/programa

  3. Execute esse comando
    find ~ -type f -newer a

Será exibido caminho do arquivo que foi editado pela sua alteração, pois busca os arquivos mais recentes após a criação do aruqivo ‘a’.

PS: faça isso com o navegador fechado, pois senão vai mostrar varios arquivos de cache do navegador.


no Mint eu usava esse script para adicionar uma impressora do cups.Agora já esta automatizado na própria instalação

#Adiciona Impressora PDF se o cups pdf estiver instalado
if  dpkg -s printer-driver-cups-pdf >/dev/null 2>&1 ; then
    echo -e "\033[01;33m**** Adicionado impressora PDF e definindo como padrão\033[0m"
    #Cria uma impressora PDF Genérica
    lpadmin -p PDF-Printer -v cups-pdf:/ -D "Generic CUPS-PDF-Printer" -E -P /usr/share/ppd/cups-pdf/CUPS-PDF_noopt.ppd
    #Define a impressora padrão
    lpadmin -d PDF-Printer

    echo -e "OK\n\033[01;32m==================\033[0m\n"
fi
####################################

aqui vou deixar algumas dicas (caminho das pedras) que eu usei para editar os arquivos de configurações diversos:

exemplos de uso do sed

Para subistiuir um texto em específico use o comando sed -i
sed -i 's/nactivate-numlock=false/nactivate-numlock=true/g' /etc/lightdm/slick-greeter.conf


Quando quiser substituir mais de uma linha use o sed -z e use o caracter ‘\n’ para quebra de linha:


Para escrever algo na ultima linha de um arquivo use o ‘echo’ assim
echo -e "[Greeter]\nactivate-numlock=true" >> /etc/lightdm/slick-greeter.conf


Para editar arquivos json por chave/valor precisa instalar o pacote ‘moreutils’ e o pacote ‘jq’
e usar o comando ‘jq’ para altera o json e o comando ‘sponge’ do moreutils para escrever a modificação no arquivo.
exemplo: substituir um número do json
jq '.["favbox-min-height"] |= (.value = 405.0)' ~/.cinnamon/configs/[email protected]/0.json | sponge ~/.cinnamon/configs/[email protected]/0.json

exemplo: substituir um texto do json
jq '.["menu"] |= (.title = "test")' ~/.cinnamon/configs/[email protected]/0.json | sponge ~/.cinnamon/configs/[email protected]/0.json


Para listar o conteúdo de um arquivo zip use o zipinfo


Para ler um valor em um arquivo .desktop ou outro qualquer que tem a estrutura assim:

Item=um_valor_qualquer

use essa dica:


Se usar interface gnome, com o pacote dconf-editor vc pode salvar algumas outras opções como configurações (config de programas nativos, papel de parede, temas, ícones …)

instale via:
$sudo apt install -y dconf-editor

para pegar as configurçãoes atuais do seu sistema, use o comando e salve esse arquivo(mint_config.dconf) em uma pasta de backup:

$dconf dump / > ~/mint_config.dconf

para aplicar as configurações que voçê salvou, com o comando acima, em um sistema novo:
$dconf load / < 'seu diretorio de backup/mint_config.dconf'

Use o redirecionamento para adicionar linhas em arquivo, em bash o maior é o redirecionador exemplo:

echo "teste" >> /arqueivo   # este vai adicionar "teste" na ultima linha do arquivo.
echo "teste" > /arquivo   # este vai criar ou sobrescrever um novo arquivo com somente "teste" dentro.
2 curtidas

Muito obrigado pessoal!
Aprendi bastante e consegui criar o script!
O impressionante é que usei um pouco da postagem de cada um, agradeço kkssks
Muito obrigado pela atenção!