Como eu poderia fazer um script bash para executar o apt-get?

1

Estou tentando automatizar algumas configurações que tenho com bash script, eu nunca fiz isso antes, então eu tentei com algo fácil como um Hello World! e tudo funciona muito bem, mas então eu tentei algo assim:

#!/bin/bash
sudo su
apt-get purge postfix

e ele não faz nada, eu verifico e o postfix ainda está instalado, e a qualquer momento ele pede por qualquer entrada minha, eu tentei com apt-get mas vou fazer coisas como ssh-keygen ou até mesmo escrever arquivos Eu acho que com cat ou algo assim, como eu poderia fazer o script funcionando e também ver o que está acontecendo?

    
por poz2k4444 18.10.2012 / 20:17

3 respostas

7

sudo su runs su para você, o que, por sua vez, deixa você em um shell como root, aguardando sua entrada.

O que você quer fazer é sudo apt-get purge postfix . man sudo para ver o porquê.

Você encontrará vários exemplos de script bash para referência futura.

    
por 18.10.2012 / 20:20
4

Isso é melhor automatizado pela conta raiz / admin e não deixado nos arquivos de um usuário padrão.

A prática recomendada referente ao que você deseja realizar é tornar-se root sudo su - e, em seguida, trabalhar no diretório / root user. Algo como isto é geralmente melhor guardado em ~/bin ou ~/scripts , por isso, se não existir, pode ser necessário criá-lo e verificar se a nova página é parte do seu PATH . É sempre uma boa idéia manter um diretório de scripts de algum tipo para abrigar os pequenos scripts que você usa para gerenciar o (s) seu (s) sistema (s) com o passar do tempo, e cada administrador possui sua "caixa de ferramentas". eles guardam essas coisas. O truque é tentar escrever código que seja reutilizável e, assim, facilitar sua vida.

Se você for utilizar vários desses arquivos, eu criaria um diretório especial para eles como ~/scripts/sysupdates e tentaria manter cada arquivo fazendo apenas uma coisa. Isso espelha a função de outros sistemas * nix como init.d e tornará a manutenção do sistema mais fácil e intuitiva. Isso também tem o propósito de limitar nossas entradas em outros lugares, como você verá em breve.

Se você criar os arquivos para o que você deseja atualizar, como mencionado acima (por exemplo, postfix, qmail, update), então você pode percorrê-los com um script em ~ / scripts que pode ser algo como:

#/usr/bin/bash
#
# Script: updater.sh
# Author: My Name  
# Date: yyyymmdd - ee   (ee = times edited)
# 
# Purpose: run update scripts from ~/scripts/sysupdates
# 
# Notes:
# 

for SCRIPT in 'ls ~/scripts/sysupdates'; do ${SCRIPT}; done

Faça um favor a si mesmo e adquira o hábito de criar um cabeçalho adequado para cada arquivo criado. Leva apenas um minuto e vai poupar dores de cabeça na estrada, lembre-se que você pode não lembrar por que você o criou mais tarde ou o que ele fez, ou pode não ser você quem deve mantê-lo um dia.

A última parte disto para editar o crontab raiz. Cron é um programa que executa um determinado script em um intervalo especificado. Então, se adicionarmos nosso script updater.sh ao crontab, tudo o que precisamos fazer é adicionar arquivos a ~/scripts/sysupdates e eles serão executados automaticamente.

Você acessa o crontab com crontab -e , que edita o crontab com o editor de sistema definido (geralmente vim no linux). Existe um gerador crontab para ajudá-lo em: link para criar o seu próprio. Adicione a linha:

5 0 1 * * /root/scripts/updater.sh

Você deve ser bom para ir. Divirta-se com estas ferramentas, pois elas podem tornar a vida de um SysAdmin muito mais fácil.

Uma palavra de cautela; Eu não adicionaria o apt-get -y dist-upgrade para seus scripts, execute aquele quando você estiver preparado para lidar com ele, caso seja executado incorretamente.

    
por 19.10.2012 / 00:20
1

apt-get purge só funciona como sudo ou root, para executar o sudo de um script que você precisa para ativar o sudo sem senhas para o usuário em que você executa o script, senão ele solicitará uma senha e aguardará.

Execute visudo e adicione uma linha na leitura inferior:

yourusername ALL=NOPASSWD: ALL

Também o apt-get dá um aviso, para remover o pacote sem um prompt, use a opção -y

sudo apt-get purge package -y

O resultado final seria algo como:

#!/bin/bash
sudo apt-get purge postfix -y
    
por 18.10.2012 / 21:19