shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Localizar, procurar e editar com shell-script


From: Paulo Bettega
Subject: Re: [shell-script] Localizar, procurar e editar com shell-script
Date: Wed, 25 Jun 2014 15:55:29 -0300
User-agent: Mozilla/5.0 (X11; Linux i686; rv:24.0) Gecko/20100101 Thunderbird/24.6.0

Agora com uma parte do arquivo dá pra ver melhor o que vc quer :)
veja se é isso.

$ cp csf.conf csf.conf-original
$ for regra in TCP_IN UDP_IN TCP6_IN UDP6_IN; do
NETWORKPORT1=10
exp="^$regra = .*[\",]{1}$NETWORKPORT1[\",]{1}"
[[ "$(cat csf.conf)" =~ $exp ]] && { sed -i "/$regra/ s/$NETWORKPORT1//; s/\",/\"/; s/,,/,/; s/,\"/\"/" csf.conf;} || { sed -i "/$regra/ s/\"$/,$NETWORKPORT1\"/" csf.conf;}
done

Para inclusão da porta, o teste da expressão entra no || já que a porta não 
existe.
Para exclusão, entra no && já que a porta existe e vai casar com a expressão.

Pode ter faixas de portas separadas por dois-pontos misturadas na mesma regra,
por exemplo na regra TPC_IN? Se puder daí complica, o meu exemplo não funciona.

Abraços Paulo Bettega


On 25-06-2014 13:51, Arkan Add address@hidden [shell-script] wrote:
Sem problemas,

Preciso editar algumas linhas dentro daquele arquivo (csf.conf) em /etc/csf/.

Hoje preciso criar um script manualmente com as portas que quero liberar e gero 
aquela linha "sed -i
's/^TCP_IN =.*/TCP_IN = "227,280,9090,10500,57413"/' csf.conf"para substituir a 
linha existente.

Por exemplo,

Se eu configuro um serviço que utiliza a porta 10, pego as TCP/UDP_IN 
TCP6/UDP6_IN... , adiciona a
porta 10, edito e executo a linha "sed -i 's/^TCP_IN =.*/TCP_IN = 
"227,280,9090,10500,57413,10"/'
csf.conf" Alterando o campo TCP_IN para o protocolo correspondete.

E para remover realizo o mesmo procedimento, somente retirando as portas que de

/etc/csf/csf.conf
...
# Lists of ports in the following comma separated lists can be added using a
# colon (e.g. 30000:35000).

# Allow incoming TCP ports
TCP_IN = "80,10000,33650,33651"

# Allow outgoing TCP ports
TCP_OUT = "1:65535"

# Allow incoming UDP ports
UDP_IN = "33651"

# Allow outgoing UDP ports
# To allow outgoing traceroute add 33434:33523 to this list
UDP_OUT = "1:65535"

# Allow incoming PING
ICMP_IN = "1"

# Set the per IP address incoming ICMP packet rate
# To disable rate limiting set to "0"
ICMP_IN_RATE = "1/s"

# Allow outgoing PING
ICMP_OUT = "1"

# Set the per IP address outgoing ICMP packet rate (hits per second allowed),
# e.g. "1/s"
# To disable rate limiting set to "0"
ICMP_OUT_RATE = "0"

###############################################################################
...

No exemplo do Paulo, ele consegue inserir a variavel na linha, mas ele seta a 
linha com os valores a
serem pesquisados, como variavel.



On Wednesday, June 25, 2014 9:54 AM, "'Julio C. Neves' address@hidden 
[shell-script]"
<address@hidden> wrote:


Cara que bobeada, eu ia fazer em awk e depois achei melhor fazer em sed. Como 
já estava com um sono
danado, acho que misturei tudo e fiz uma grande besteira e gerei um cruzamento 
de 'aff maria' com
'cruz credo'.

Pesquisei no arquivo pq foi isso que imaginei que vc queria. O problema é que 
seu exemplo foi meio
incoerente com o que vc está falando. Seu exemplo foi:

sed -i 's/^TCP_IN =.*/TCP_IN = "227,280,9090,10500,57413"/' csf.conf

Por favor explique melhor a que linha vc se refere. O que vc deseja na saída, 
algumas linhas
editadas ou o arquivo /etc/csf.conf editado?

Algumas dicas:
1- A barra vertical dentro de uma expressão regular equivale a um 'ou' lógico 
então para pesquisar
as cadeias que vc citou, pode-se separar as linhas da seguinte maneira:
grep -E '^(TCP_IN|TCP_OUT|UDP_IN|UDP_OUT|TCP6_IN|TCP6_OUT|UDP6_IN|UDP6_OUT)=' 
/etc/csf.conf

2- Vc tb pode especificar as linhas que deseja alterar, passando o inicio delas 
por parâmetro,
colocando logo no início do script o seguinte:
RegExp=^\($(tr ' ' '|' <<< "$@")\)\ =
Fiz um testezinho no prompt para vc entender:
$ set - TCP_IN TCP_OUT UDP_IN             # passando os parâmetros TCP_IN 
TCP_OUT UDP_IN para o
shell do prompt
$ RegExp=^\($(tr ' ' '|' <<< "$@")\)\ =   # Gerando a Expressão Regular
$ echo "$RegExp"                          # Mostrando que ER está pronta para 
ser usada
^(TCP_IN|TCP_OUT|UDP_IN) =

Abcs,
Julio
*@juliobash*
*Próximos cursos de Shell*
*Cidade        LocalPeríodo*
*Rio de JaneiroEDX <http://edx.srv.br/>02 a 06/06*
*São Paulo4Linux <http://www.4linux.com.br/>21 a 25/07*
Dou treinamento de /Shell/ em qualquer cidade.
Para mais detalhes, me mande um e-mail <mailto:address@hidden>.



Em 24 de junho de 2014 23:48, Arkan Add address@hidden <mailto:address@hidden>
[shell-script] <address@hidden <mailto:address@hidden>> escreveu:

    __
    Julio,

    ++ sudo grep '\b51211\b' /etc/csf/csf.conf
    ++ sudo sed -i.veio '/^TCP_IN/; s/$/,51211' /etc/csf/csf.conf
    sed: -e expression #1, char 10: unknown command: `;'
    ++ echo Incluindo porta 51211
    Incluindo porta 51211

    Houve falha na adiçao da regra. Vi que voce procurou pelo valor no arquivo 
e não na linha, é
    possivel procurar somente na linha ou linhas? Eu terei que adicionar esta 
mesma variavel nas
    linhas que se iniciam com TCP_IN = , TCP_OUT = , UDP_IN = , UDP_OUT = , 
TCP6_IN = , TCP6_OUT = ,
    UDP6_IN = , UDP6_OUT = .

    Para remover este valor do csf.conf é que creio que esta mais complicado.

    Precisara ler o valor das linhas "network port1: , network port2:" dentro 
do arquivo
    /etc/$NEWUSER1.info, voltar no /etc/csf/csf.conf e remove-las das linhas 
TCP_IN = , TCP_OUT = ,
    UDP_IN = , UDP_OUT = , TCP6_IN = , TCP6_OUT = , UDP6_IN = , UDP6_OUT = .




    On Tuesday, June 24, 2014 10:44 PM, "'Julio C. Neves' address@hidden
    <mailto:address@hidden> [shell-script]" <address@hidden
    <mailto:address@hidden>> wrote:


    grep "\b$NETWORKPORT1\b" /etc/csf.conf || {
         sed -i.veio "/^TCP_IN/; s/$/,$NETWORKPORT1"/etc/csf.conf
         echo Incluindo porta $NETWORKPORT1
    csf -r
         echo /etc/csf.conf está OK
         }

    Abcs,
    Julio
    *@juliobash*
    *Próximos cursos de Shell*
    *Cidade        LocalPeríodo*
    *Rio de JaneiroEDX <http://edx.srv.br/>02 a 06/06*
    *São Paulo4Linux <http://www.4linux.com.br/>21 a 25/07*
    Dou treinamento de /Shell/ em qualquer cidade.
    Para mais detalhes, me mande um e-mail <mailto:address@hidden>.



    Em 24 de junho de 2014 22:21, address@hidden <mailto:address@hidden> 
[shell-script]
    <address@hidden <mailto:address@hidden>> escreveu:

        __
        Estou precisando resolver uma questão de manipulação de texto para um 
projeto pessoal de
        automação aqui. Basicamente tenho um script que cria usuarios 
automaticamente e estou
        precisando adicionar uma função para liberar portas no firewall para os 
serviços que este
        script habilita.

        Utilizo o csf como firewall e consigo refazer toda uma linha com o 
comando abaixo:

        sed -i 's/^TCP_IN =.*/TCP_IN = "227,280,9090,10500,57413"/' csf.conf

        Os campos que preciso modificar são campos dentros das "".

        Por exemplo:

        Eu recebo a porta a porta pela variavel $NETWORKPORT1

        Supondo que o valor da variavel seja 50, preciso checar se ele existe 
na linha TCP_IN dentro
        do /etc/csf.conf, se não existir, adiciona-lo e realizar o refresh de 
regras executando um
        "csf -r".

        Também preciso realizar o contrario, verificar se um valor existe nesta 
mesma linha,
        remove-lo e realizar o refresh nas regras.

        Qual a melhor forma de realizar tais funçoes?






reply via email to

[Prev in Thread] Current Thread [Next in Thread]