Os erros acontecem porque eu não coloquei aspas na variável $Proto, tem que colocar.
linha=$(grep "^$Proto" /etc/sfs/users/"$2".info 2>/dev/null) && {
aqui pra mim deu certo porque eu testei apenas com a primeira palavra,
mas como tem linhas diferentes
começando com a mesma palavra
SABNZBD HTTPS port: 51302
SABNZBD HTTP port: 51303
Deluge daemon port: 51305
Deluge web port: 51304
vai dar erro.
O erro do sed deve ser porque o grep retorna duas linhas com
SABNZBD e Deluge, mas com RTorrent não dá erro porque só tem uma linha.
Vc fez certo usando as duas primeiras palavras
(for Proto in "RTorrent network" "SABNZBD HTTPS" "Deluge web"),
pois a pesquisa tem que retornar apenas uma linha.
As aspas na expressão do grep devem resolver os erros.
Abraços Paulo Bettega
On 29-06-2014 20:20, Arkan Add
address@hidden [shell-script] wrote:
> Paulo,
>
> Você entendeu perfeitamente. Realizei alguns testes e para adicionar as portas ficou perfeito. Agora
> para remover estou encontrando um probleminha.
>
> O script que utilizo
para remover o usuário é este abaixo e adicionei a linha sudo /etc/sfs/editcsf
> -r $NEWUSER1 para chamar o script e passar a variável.
>
> #!/bin/bash
>
> NEWUSER1=a
> NEWUSER2=b
>
> while [ ! $NEWUSER1 = $NEWUSER2 ];
> do
> clear
> echo -n "Type username to be DELETED: "
> read NEWUSER1
> echo -n "Retype username: "
> read NEWUSER2
> echo ""
> done
>
> # 3.1.1
> #kill all processes related to that user
> sudo kill -9 $( ps -ef | grep $NEWUSER1 | awk '{ print $2 }' )
>
# 3.2
> sudo userdel --remove --force $NEWUSER1
> # 12.
> #remove current password from htpassword
> sudo perl -pi -e "s/^$NEWUSER1\:.*\n$//g" /etc/apache2/htpasswd
> # 20.
> ############# sudo rm -r /home/downloads/$NEWUSER1
> #
21.
> sudo rm /etc/init/rtorrent.$NEWUSER1.conf
> # 29.
> sudo rm -r /var/www/rutorrent/conf/users/$NEWUSER1
> sudo /etc/sfs/editcsf -r $NEWUSER1
> sudo rm /etc/sfs/users/$NEWUSER1.info
>
> ##################### LAST LINE ###########
>
> Para o arquivo $NEWUSER1.info eu gero ele dessa forma (É a forma final do anterior):
>
> Ports
> -----
> SSH port: 976
> SFTP port: 976
> vsftp port: 201
> IRSSI Port: 51299
> SCGI Port: 51300
> RTorrent network port: 51301
> SABNZBD HTTPS port: 51302
> SABNZBD HTTP port: 51303
> Deluge daemon port: 51305
>
Deluge web port: 51304
>
> E o nosso script eu modifiquei para apontar para os respectivos arquivos:
>
> #!/bin/bash
> #
> # Passar parâmetros para inclusão:
> # Opção -i seguida das variáveis e/ou números separados por
vírgula.
> # -i $NETWORKPORT1,$VPNPORT1,$EXTERNALPORT1
> # -i $NETWORKPORT1,$VPNPORT1,21,80,$EXTERNALPORT1
> #
> # Passar parâmetros para exclusão:
> # Opção -r seguida da variável ou nome do usuário (de preferência,
> # o nome só deve ter letras sem acentos, números, sublinhado, ou hífen).
> # -r $NEWUSER1
> # -r joao
>
>
>
> # backup do csf.conf
> cp /etc/csf/csf.conf /root/csf.conf_$(date +%F_%T)
>
>
> func_ajuda()
> {
> sed -r '2,/^$/! d; s/^#//; s/\t(-i|-r)/\t'${0##/}'
\1/; ' "$0"
> exit 1
> }
>
>
> case $1 in
>
> -i)
> if [ ! "$2" ]; then
> echo -e
'\nFaltou lista de portas para a opção -i.'
> func_ajuda
> fi
>
> for regra in TCP_IN TCP6_IN TCP_OUT TCP6_OUT \
> UDP_IN UDP6_IN UDP_OUT UDP6_OUT
> do
> sed -i '/^'$regra'/ s/"$/,'$2'"/' /etc/csf/csf.conf
> done
> ;;
>
> -r)
> if [ ! "$2" ]; then
> echo -e '\nFaltou usuário para a opção -r.'
>
func_ajuda
> fi
>
> for Proto in "RTorrent network" "SABNZBD HTTPS"
"Deluge web"
> do
> linha=$(grep ^$Proto /etc/sfs/users/"$2".info 2>/dev/null) && {
> porta=$(awk -F ': ' '{ print $2 }' <<<"$linha")
> for regra in TCP_IN TCP6_IN TCP_OUT TCP6_OUT \
> UDP_IN UDP6_IN UDP_OUT UDP6_OUT
> do
> sed -ir '/^'$regra'/ {
>
s/\b'$porta'\b//
>
s/",/"/
> s/,,/,/
> s/,"/"/
> }' /etc/csf/csf.conf
> done
> } || { echo "'$Proto' não encontrado em '$2.info'" ;}
> done
> ;;
>
> *)
> [[ "$1" =~ ^- ]] && echo -e "\n Opção desconhecida '$1'"
> func_ajuda
> ;;
>
> esac
>
> # FIM ----------------------------------------------
>
> Quando chamo ele com a opção -r no primeiro script
ele retorna as seguintes mensagens:
>
> 'RTorrent network' não encontrado em 'ted.info'
> 'SABNZBD HTTPS' não encontrado em 'ted.info'
> 'Deluge web' não encontrado em 'ted.info'
>
> Se eu retiro as altero a linha para:
>
> for Proto in RTorrent SABNZBD Deluge
>
> Ele remove somente a porta corresponte ao "RTorrent" e apresenta seguinte saida:
>
> sed: -e _expression_ #1, char 45: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 47: unterminated `s' command
> sed: -e _expression_ #1, char 45: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 47: unterminated `s' command
> 'SABNZBD' não
encontrado em 'ted.info'
> sed: -e _expression_ #1, char 45: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 47: unterminated `s' command
> sed: -e _expression_ #1, char 45: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 46: unterminated `s' command
> sed: -e _expression_ #1, char 47: unterminated `s' command
> 'Deluge' não encontrado em 'ted.info'
>
> Tentei outras formas aqui, mas em todas elas ou terminava com o primeiro ou com o segundo erro.
>
> Agradeço
>
>
>
> On Sunday, June 29, 2014 2:24 PM, "Paulo Bettega
address@hidden [shell-script]"
> <
address@hidden> wrote:
>
>
> Veja se o que eu entendi está certo
>
> $ cat edita-csf.conf.sh
> #!/bin/bash
> #
> # Passar parâmetros para inclusão:
> # Opção -i seguida das variáveis e/ou números separados por vírgula.
> # -i $NETWORKPORT1,$VPNPORT1,$EXTERNALPORT1
> #
-i $NETWORKPORT1,$VPNPORT1,21,80,$EXTERNALPORT1
> #
> # Passar parâmetros para exclusão:
> # Opção -r seguida da variável ou nome do usuário (de preferência,
> # o nome só deve ter letras sem acentos, números, sublinhado, ou hífen).
> # -r $NEWUSER1
> # -r joao
>
>
>
> # backup do csf.conf
> cp
csf.conf csf.conf_$(date +%F_%T)
>
>
> func_ajuda()
> {
> sed -r '2,/^$/! d; s/^#//; s/\t(-i|-r)/\t'${0##/}' \1/; ' "$0"
> exit 1
> }
>
>
> case $1 in
>
> -i)
> if [ ! "$2" ]; then
> echo -e '\nFaltou lista de portas para a opção -i.'
> func_ajuda
> fi
>
> for regra in TCP_IN TCP6_IN TCP_OUT TCP6_OUT \
> UDP_IN
UDP6_IN UDP_OUT UDP6_OUT
> do
> sed -i '/^'$regra'/ s/"$/,'$2'"/' csf.conf
> done
>
;;
>
> -r)
> if [ ! "$2" ]; then
> echo -e '\nFaltou usuário para a opção -r.'
> func_ajuda
> fi
>
> for Proto in vsftp falha1 network HTTPS falha2 web
> do
> linha=$(grep ^$Proto "$2".info 2>/dev/null) && {
> porta=$(awk -F ': ' '{ print $2 }' <<<"$linha")
> for regra in TCP_IN TCP6_IN TCP_OUT TCP6_OUT \
> UDP_IN UDP6_IN UDP_OUT UDP6_OUT
>
do
> sed -ir '/^'$regra'/ {
> s/\b'$porta'\b//
> s/",/"/
> s/,,/,/
> s/,"/"/
> }' csf.conf
> done
> } || { echo "'$Proto' não encontrado em '$2.info'" ;}
> done
> ;;
>
> *)
> [[ "$1" =~ ^- ]] && echo -e
"\n Opção desconhecida '$1'"
> func_ajuda
> ;;
>
> esac
>
> # FIM ----------------------------------------------
>
>
> Fiz testes com todos os arquivos no mesmo diretório, então vc tem que
> editar o 'csf.conf' e '"$2".info' com os caminhos certos.
> (O script tem identação, mas pode perder na viagem do email.)
>
>
> Abraços Paulo Bettega
>
>
>
> On 28-06-2014 20:34, Arkan Add
address@hidden <mailto:
address@hidden> [shell-script] wrote:
> > Paulo,
> >
> > Realizei alguns testes e os resultados foram da seguinte forma:
> >
> > > Utilizando este comando ele editou
corretamente a linha marcada.
> > $ edita-csf.conf.sh 80 TCP_IN
> > Mas com o for do done descomentado, ele nao removia e ainda assim acrescentava varias vezes a mesma
> > porta em todas as linhas do arquivo TCP* UDP* e até em linhas que nao estavam na regra ICMP*.
> > Nao estava pensando em chamar um arquivo para executar esta função mas gostei da idéia. Neste caso,
> > para acrescentar um "-i" para adicionar e um -r para remover, como ficaria?
> > Algo como "edita-csf.conf.sh -i 150 e edita-csf.conf.sh -r . Na verdade devo chamar ele de um outro
> > script da seguinte forma: edita-csf.conf.sh -i $NETWORKPORT1,$VPNPORT1,$EXTERNALPORT1
> > A função de remover ou -r deve procurar dentro do arquivo $NEWUSER1.info pelas seguintes
linhas:
> >
> > ...
> > Ports
> >
-----
> > vsftp port: 21201
> > ...
> > network port: 51103
> > ...
> > HTTPS port: 51104
> > ...
> > web port: 51106
> > ...
> > Pegar as portas do vsftp, network port, https port and web port e remove-las das linhas nas quais
> > foram incluidas.
> >
> > Lembrando que as adiçoes e remoçoes so poderao ser executadas dentro das linhas TCP_IN, TCP6_IN,
> > TCP_OUT, TCP6_OUT, UDP_IN, UDP6_IN, UDP_OUT, UDP6_OUT
> >
> > ...
> > # Allow incoming TCP ports
> > TCP_IN =
"21976,80,51108,51103,51113,10000,51106"
> >
> > # Allow outgoing TCP ports
> > TCP_OUT = "1:65535"
> >
> > # Allow incoming UDP ports
> > UDP_IN =
"53,51108,51103,51113"
> >
> > # 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"
> >
> > ...
> >
> > # Allow incoming IPv6 TCP ports
> > TCP6_IN =
"20,21,22,25,53,80,110,143,443,465,587,993,995,51103"
> >
> > # Allow outgoing TCP ports
> > TCP6_OUT = "1:65535"
> >
> > # Allow incoming UDP ports
> > UDP6_IN = "20,21,53,51103"
> >
> > # Allow outgoing UDP ports
> > # To allow outgoing traceroute add 33434:33523 to this list
> > UDP6_OUT = "1:65535"
> >
> > Quanto as portas *_OUT, vou remover o "1:65535" e liberar apenas as necessarias.
> >
> > Agradeço pela ajuda.
> >
> > On Saturday, June 28, 2014 3:05 AM, "Paulo Bettega
address@hidden> <mailto:
address@hidden>
[shell-script]"
> > <
address@hidden <mailto:
address@hidden>> wrote:
> >
> >
> > Pelo que entendi, então não é o caso de fazer uma edição em lote,
> > em todas as linhas dos protocolos, in e out, com a mesma porta, entendi certo?
> >
> > Acho que vc quer por exemplo abrir a porta 80 TCP_IN , então só é preciso
> > editar a linha TCP_IN e adicionar a porta. Depois se vc quiser fechar essa
> > porta, roda o script de novo com TCP_IN 80 para deletar o 80 da linha, é isso?
> >
> > Se for isso, pode ser passando os parâmetros para um script
(novamente como o Julio fez:)
> > (Se não for, descomente as linhas do "for do done" e comente a linha "regra=$..."
> > assim cada regra será testada com a porta. Se vc quiser testar mais de uma porta
> > pra cada regra, coloque mais um for com as portas dentro do for das regras)
> >
> > $ cat edita-csf.conf.sh
> > #!/bin/bash
> > #
> >
> > #for regra in TCP_IN UDP_IN TCP_OUT UDP_OUT TCP6_IN UDP6_IN TCP6_OUT UDP6_OUT
> > #do
> >
> > regra=${2^^}
> > porta=$1
> >
> > # Esta linha realiza a busca da variável nas
linhas da $regra
> > grep -qE "^$regra = .*\b$porta\b" csf.conf && {
> >
> > # Com esta linha removemos a variavel da
$regra; se a busca tiver sucesso
> > sed -ir \
> > '/^'$regra'/ { s/\b'$porta'\b//; s/",/"/; s/,"/"/; s/,,/,/; }' csf.conf
> > } || {
> >
> > # E esta adiciona a variável na linha da $regra; se a busca falhar
> > sed -i '/^'$regra'/ s/"$/,'$porta'"/' csf.conf
> > }
> >
> > #done
> > #--------------------------------------
> >
> > passando protocolo e porta como parâmetros
> > $ edita-csf.conf.sh 80 TCP_IN
> >
> > funciona do mesmo jeito, se houver 80 na linha do
TCP_IN, exclui,
> > se não houver, inclui.
> >
> > Vc pode chamar o script dentro de outro, ou usar como uma função,
> > daí passe
as variáveis que vc quer como parâmetros
> > edita-csf.conf.sh $NETWORKPORT1 $PROTOCOLO
> > edita-csf.conf.sh $VPNPORT1 UDP_IN
> >
> >
> > O firewall é iptables? Aquelas faixas de portas indicadas como 1:65535
> > fica mais complicado se vc quiser excluir portas. Uma solução seria
> > vc criar uma regra de bloqueio para cara porta, ao invés de tirar a porta
> > da faixa.
> >
> > Abraços Paulo Bettega
> >
> >
> > On 27-06-2014 21:46, 'Felipe S. Costa'
address@hidden
<mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>> [shell-script]
> > wrote:
> > > Ótimo Paulo,
> > >
> > > Realmente funciona. JConsegui incluir corretamente a porta (10000) automaticamente.
> > > Mas ai ocorreu um problema... Quando rodei o comando pela segunda vez, ele duplicou a porta
> > > (adicionou novamente). Algumas perguntas:
> > >
> > > Esta linha realiza a busca da variável nas linhas da $regra, certo?
> > >
> > > grep -qE "^$regra = .*\b$NETWORKPORT1\b" csf.conf
>
> >
> > > Com esta linha removemos a variavel do TCP_IN;
> > >
> > > {
> > > sed -ir '/'$regra'/ s/\b'$NETWORKPORT1'\b//; s/",|,"/"/; s/,,/,/' csf.conf
> > > }
> > >
> > > E esta adiciona a variável na linha UDP_IN;
> > >
> > > || {
> > > sed -i '/'$regra'/ s/"$/,'$NETWORKPORT1'"/' csf.conf;}
> > >
> > > Como editar para que procure a variável em cada linha (TCP_IN UDP_IN TCP_OUT UDP_OUT TCP6_IN
> > > TCP6_OUT UDP6_IN UDP6_OUT), se encontrar, passar para a próxima e
se não encontrar, inserir a
> > > variável e passar para a proxima?. Tentei utilizar o “|” mas não funcionou.
> >
>
> > > Bom, esta seria a função que adicionarei ao script de criar usuários.
> > >
> > > A parte de remover seria adicionada ao script de remover usuários e seria
> > > basicamente a mesma de adicionar, somente modificando para remover a variável das linhas.
> > >
> > > Mais uma e última, como adicionar mais variáveis para realizar as mesmas buscas e
> > > alterações, algo como \b’$NETWORKPORT1’\b;\b’$VPNPORT1’\b;\b’$FTPPORT1’\b?
> > >
> > > Já agradeço pelo help até o momento. Pouco a pouco as idéias vao clareando
aqui.
> > >
> > > *De:*
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > [mailto:
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>]
> > > *Enviada em:* sexta-feira, 27 de junho de 2014 12:27
> > > *Para:*
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > > *Assunto:* Re: [shell-script] Localizar, procurar e editar com shell-script
> > >
> > > Olá Arkan, o
meu exemplo não funciona, acho que o problema é o
> > > ^ marcando o começo de linha no teste do bash.
> > > Fazendo o teste com um texto ( [[ TCP_IN =~ ^TCP ]] ) casa, mas
> > > com um arquivo ( [[ "$(cat csf.conf)" =~ ^TCP ]] ) não casa.
> > >
> > > Usando o grep (como o Julio fez) dá certo.
> > >
> > > $ cp csf.conf csf.conf-original
> > > $ for regra in TCP_IN UDP_IN TCP6_IN UDP6_IN; do
> > >
NETWORKPORT1=10000
> > > grep -qE "^$regra = .*\b$NETWORKPORT1\b" csf.conf && {
> > > sed -ir '/'$regra'/ s/\b'$NETWORKPORT1'\b//; s/",|,"/"/; s/,,/,/' csf.conf
> > > } || {
> > > sed -i '/'$regra'/ s/"$/,'$NETWORKPORT1'"/' csf.conf;}
> > > done
> > >
> > > Inclui a porta 10000 na linha com UDP_IN e exclui na linha com TCP_IN
> > >
> > > Abraços Paulo Bettega
> > >
> > > On 25-06-2014 15:55, Paulo Bettega
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > <mailto:
address@hidden <mailto:
address@hidden>
<mailto:
address@hidden> <mailto:
address@hidden>>>
> > > [shell-script] wrote:
> > > > 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 <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> >
<mailto:
address@hidden <mailto:
address@hidden> <mailto:
address@hidden> <mailto:
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> <mailto:
address@hidden>
> > <mailto:
address@hidden <mailto:
address@hidden>>
> > > <mailto:
address@hidden <mailto:
address@hidden> <mailto:
address@hidden> <mailto:
address@hidden>>> [shell-script]"
> > > > > <
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > <mailto:
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
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> <mailto:
address@hidden>
> > <mailto:
address@hidden <mailto:
address@hidden>>>.
> > > > >
> >
> > >
> > > > >
> > > > > Em 24 de junho de 2014 23:48, Arkan Add
address@hidden
<mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > <mailto:
address@hidden <mailto:
address@hidden> <mailto:
address@hidden> <mailto:
address@hidden>>>
> > > <mailto:
address@hidden <mailto:
address@hidden> <mailto:
address@hidden> <mailto:
address@hidden>>>
> > >
> > [shell-script] <
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > <mailto:
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > > <mailto:
address@hidden <mailto:
address@hidden>
> > <mailto:
address@hidden> <mailto:
address@hidden>>%20%3cmailto:
address@hidden> <mailto:
address@hidden>
> > <mailto:
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>
> > <mailto:
address@hidden <mailto:
address@hidden>>
> > > <mailto:
address@hidden <mailto:
address@hidden> <mailto:
address@hidden> <mailto:
address@hidden>>>
> > > > > <mailto:
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>> [shell-script]"
> > <
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > > <mailto:
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>%0b>> >
> > <mailto:
address@hidden <mailto:
address@hidden>
> <mailto:
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> <mailto:
address@hidden>
> > <mailto:
address@hidden <mailto:
address@hidden>>>.
> > > > >
> > > > >
> >
> > >
> > > > > Em 24 de junho de 2014 22:21,
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > <mailto:
address@hidden <mailto:
address@hidden> <mailto:
address@hidden> <mailto:
address@hidden>>>
> > > <mailto:
address@hidden <mailto:
address@hidden> <mailto:
address@hidden>
<mailto:
address@hidden>>> [shell-script]
> > > > > <
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > <mailto:
address@hidden <mailto:
address@hidden>
> <mailto:
address@hidden <mailto:
address@hidden>>
> > > <mailto:
address@hidden <mailto:
address@hidden>
> > <mailto:
address@hidden> <mailto:
address@hidden>>%20%3cmailto:
address@hidden> <mailto:
address@hidden>
> > <mailto:
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?
> > > > >
> > > > >
> > > > >
> > > > >
> > > >
> > >
> >
> >
>
------------------------------------
------------------------------------
---------------------------------------------------------------------
Esta lista não admite a abordagem de outras liguagens de programação, como perl, C
etc. Quem insistir em não seguir esta regra será moderado sem prévio aviso.
---------------------------------------------------------------------
Sair da lista:
address@hidden---------------------------------------------------------------------
Esta lista é moderada de acordo com o previsto em
http://www.listas-discussao.cjb.net---------------------------------------------------------------------
Servidor Newsgroup da lista: news.gmane.org
Grupo: gmane.org.user-groups.programming.shell.brazil
------------------------------------
Links do Yahoo Grupos
<*> Para visitar o site do seu grupo na web, acesse:
http://br.groups.yahoo.com/group/shell-script/<*> Para sair deste grupo, envie um e-mail para:
address@hidden<*> O uso que você faz do Yahoo Grupos está sujeito aos:
https://info.yahoo.com/legal/br/yahoo/utos/terms/