Como incluir todos os arquivos de um diretório no shell script (/etc/init.d/iptables neste caso)

Como incluir todos os arquivos de um diretório no shell script (/etc/init.d/iptables neste caso)

Eu tenho um /etc/init.d/iptables start|stop|restartscript em diferentes servidores Ubuntu (que é um script de shell normal)

Para cada novo serviço tenho que editar e inserir uma linha para abrir uma porta. Isso leva a muitas versões diferentes do script init.d em máquinas diferentes.

É possível incluir automaticamente, digamos, todos os arquivos /etc/iptables/include.d/?

A meta é que haja apenas uma linha nocomeçarfunção de /etc/init.d/iptables como

include /etc/iptables/include.d/*

E depois de um arquivo adicional /etc/iptables/include.d/eu simplesmente diria

/etc/init.d/iptables restart

Editar:Como Saurabh apontou, isso pode levar a problemas quando os comandos precisam de uma determinada ordem. Uma configuração avançada pode ter diretórios diferentes, como:

/etc/iptables/include01.d/
/etc/iptables/include02.d/
/etc/iptables/include03.d/

e incluí-los assim:

    inclua /etc/iptables/include01.d/*
    ... talvez algum código esteja aqui no arquivo principal...
    inclua /etc/iptables/include02.d/*
    inclua /etc/iptables/include03.d/*

Responder1

Adicione a seguinte linha ao seu script init.d.

run-parts --report /etc/iptables/include.d

Ele executará tudo no diretório como um script de shell (precisa ser executável).

Se você deseja executar apenas arquivos que terminam com .port, você pode usar algo como:

run-parts --regex '\.port$' /etc/iptables/include.d/

Se quiser ter certeza de que a ordem está correta, você pode nomear os arquivos:

10_web.port
20_ssh.port
etc..

Responder2

for f in /etc/iptables/include.d/*
 . $f
done

observe o espaço entre o ponto e% f

Saurabh está certo - isso não funcionará necessariamente como você pretende, mas use alguma convenção de nomenclatura, por exemplo, 10-xxx, 20-yyy e assim por diante, e pode ser administrável.

Responder3

Você pode definir funções simples no bash:

function include() {
    for FILE in $( find "$1" -type f -print | sort )
    do
        source $FILE
    done
}

e então:

include some_dir/*

ou mesmo:

include some_dir/*.conf

Responder4

Eu não acho que você possa incluir arquivos na configuração do iptables. A escolha faz sentido, pois as regras de firewall dependem muito da ordem em que são escritas. Se incluirmos apenas os arquivos na pasta, o iptables não saberá quais regras colocar primeiro e quais depois.

informação relacionada