Como criar um arquivo com texto pré-inserido dentro do bash? [duplicado]

-3

Eu quero fazer pequenos scripts bash que irão automatizar algumas coisas para mim em novas máquinas.

A única coisa que ainda faço manual é criar arquivos com vi e colar o texto no arquivo.

Como posso gerar o arquivo X com o "texto que preciso aqui" dentro dele no bash? Sem ter que pressionar enter, sobrescreva arquivos se necessário e também crie diretórios conforme necessário?

Obrigado

Exemplo: Substituindo um arquivo sshd_config padrão por minha versão e criando um arquivo com minha chave SSH pública dentro dele. Gerando outro arquivo .sh on-the-fly. Coisas assim.

    
por Freedo 29.08.2017 / 09:51

2 respostas

2

Para conteúdo de texto, o mais fácil, especialmente se o texto contiver várias linhas, é usar um documento aqui. Adicione essas linhas ao seu script, por exemplo, para criar um file.txt com este texto:

cat << 'EOF' > file.txt
Here is some text
or other
EOF

(você pode usar qualquer coisa no lugar de EOF acima como marcador de final de arquivo, desde que não ocorra no texto a ser inserido. O primeiro EOF deve ser citado para evitar qualquer expansão dentro do arquivo aqui. documento).

Para arquivos com conteúdo arbitrário, você pode usar uudecode . Também permite especificar as permissões para o arquivo que está sendo criado. Por exemplo, para um script criar um arquivo foo com o conteúdo e permissões de /bin/ls , faça:

(echo 'uudecode << "_EOF_"'
uuencode -m /bin/ls foo
echo _EOF_) >> your-script

Que adicionará o código correspondente ao seu script. Algo como:

uudecode << "_EOF_"
begin-base64 755 foo
f0VMRgIBAQAAAAAAAAAAAAMAPgABAAAAMFQAAAAAAABAAAAAAAAAADD3AQAA
[...]
AAAAAAAAAAAAAAA=
====
_EOF_

Com o conteúdo de /bin/ls codificado em base64.

Isso assume que o uudecode está disponível na máquina na qual você executará o comando. Mas geralmente deve ser o caso, pois uudecode é um comando POSIX.

Você pode estender isso para criar vários arquivos codificando um arquivo tar compactado:

(echo 'uudecode << "_EOF_" | gunzip | tar xpf -'
tar cf - file1 file2 file3 dir/file4 | uuencode -m -
echo '_EOF_') >> your-script

(assumindo que o sistema de destino tem gunzip e tar (não comandos POSIX, mas bastante comuns)).

Isso também tem o benefício de permitir que você codifique metadados de arquivo adicionais, como propriedade ou tempo de acesso e modificação (e mais como ACLs e atributos estendidos e relação de link físico com algumas tar implementações). Ele também permite que você crie facilmente arquivos não regulares, como diretórios, links simbólicos, dispositivos ...

Veja também o shar utility que pode ajudá-lo a criar auto-portáteis arquivos extraíveis.

    
por 29.08.2017 / 10:16
2

Um script pode fazer

sudo mv /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
sudo cp "$HOME/my_configs/sshd_config" /etc/ssh/
sudo chmod go-w /etc/ssh/sshd_config

ou

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
cat "$HOME/my_configs/sshd_config" | sudo tee /etc/ssh/sshd_config >/dev/null

para fazer o backup de qualquer% sshd_config antigo e, em seguida, instalar um novo.

Quero dizer, é apenas uma questão de ter uma coleção de arquivos em algum lugar e depois copiá-los para os locais corretos e garantir que os arquivos instalados tenham as permissões corretas. Isso pode ser automatizado com um script.

No entanto, existem softwares especializados para fazer o provisionamento automático e o gerenciamento de configurações, como o Ansible e o Puppet.

Esses tipos de software podem se tornar mais interessantes assim que você precisar configurar mais de um par de máquinas. Nós, por exemplo, usamos o Ansible para configurar contêineres privados do Docker para nossos clientes em nosso cluster de computação.

    
por 29.08.2017 / 10:05

Tags