Gerando ISO de um diretório

•agosto 16, 2010 • Comentários desativados em Gerando ISO de um diretório

Para gerar um arquivo .iso de um diretório devemos instalar o genisoimage

# apt-get install genisoimage

Depois de instalado vamos gerar a nossa ISO.

Eu tenho um diretório em meu /home  com o nome 3c0linux na qual quero fazer dele uma ISO.

O comando seria…..

genisoimage -R -J -o /home/eco/3c0linux.iso    /home/eco/3c0linux

Explicando:

genisoimage            Programa de pré-masterização para gerar ISO9660/Joliet/HFS filesystems híbrido.

-R, -rock                   Generate Rock Ridge directory information (extensão para o formato de volume ISO 9660)

-J, -joliet                 Generate Joliet directory information (Joliet é o nome de uma extensão do ISO 9660 sistema de arquivos. Seu foco principal é o relaxamento das restrições inerentes arquivo ISO com plena observância 9660. Permite que todos os sistemas operacionais possam ler o arquivo.)

-o FILE, -output FILE       Set output file name ( a saída do arquivo onde sera gravado o arquivos .iso)

/home/eco/3c0linux.iso   path para o arquivo que sera salvo.

/home/eco/3c0linux          path diretório que terá suas informações contidas no arquivo ISO.

Mais do sed

•julho 28, 2010 • Comentários desativados em Mais do sed

O arquivo.txt de exemplo é:

  prompt> cat arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2. Brincando com Linhas


2.1. Imprimir somente as linhas com uma determinada string

sed -n '/dia/p'
  prompt> sed -n '/dia/p' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

2.2. Imprimir somente a primeira ocorrência da linha com determinada string

sed -n '/dia/{p;q;}'
  prompt> sed -n '/dia/{p;q;}' arquivo.txt
   No segundo dia, fez um rascunho à lápis.

2.3. Imprimir a última ocorrência da linha com determinada string

sed -n '/dia/h;${x;p;}'
  prompt> sed -n '/dia/h;${x;p;}' arquivo.txt
     No quarto dia, ficou com preguiça, então falou:

2.4. Imprimir da primeira ocorrência da string até o final

sed '/dia/,$!d'
  prompt> sed '/dia/,$!d' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.5. Imprimir da última ocorrência da string até o final

sed -n '/dia/{h;${x;p;};d;};H;${x;p;}'
  prompt> sed -n '/dia/{h;${x;p;};d;};H;${x;p;}' arquivo.txt
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.6. Apagar as linhas com uma determinada string

sed '/dia/d'
  prompt> sed  '/dia/d' arquivo.txt
  No início do início, era um nada.

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.7. Apagar apenas a primeira linha com determinada string I

sed '/dia/{H;x;/^\n/d;g;}'
  prompt> sed '/dia/{H;x;/^\n/d;g;}' arquivo.txt
  No início do início, era um nada.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.8. Apagar apenas a primeira linha com determinada string II

sed -n '/dia/{:a;n;p;ba;};p'
  prompt> sed -n '/dia/{:a;n;p;ba;};p' arquivo.txt
  No início do início, era um nada.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.9. Adicionar texto no início da linha

sed 's/^/texto incluido/'
  prompt> sed 's/^/texto incluido/' arquivo.txt
  texto incluidoNo início do início, era um nada.
  texto incluido No segundo dia, fez um rascunho à lápis.
  texto incluido  No terceiro dia, apagou e começou tudo de novo.
  texto incluido   No quarto dia, ficou com preguiça, então falou:
  texto incluido
  texto incluido- Sexta-feira eu continuo, se não estiver cansado...
  texto incluido
  texto incluido  E no fim, nada.

2.10. Adicionar texto no final da linha

sed 's/$/texto incluido/'
  prompt> sed 's/$/texto incluido/' arquivo.txt
  No início do início, era um nada.texto incluido
   No segundo dia, fez um rascunho à lápis.texto incluido
    No terceiro dia, apagou e começou tudo de novo.texto incluido
     No quarto dia, ficou com preguiça, então falou:texto incluido
  texto incluido
  - Sexta-feira eu continuo, se não estiver cansado...texto incluido
  texto incluido
    E no fim, nada.texto incluido

2.11. Retirar linhas em branco

sed '/^$/d'
  prompt> sed '/^$/d' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:
  - Sexta-feira eu continuo, se não estiver cansado...
    E no fim, nada.

2.12. Incluir texto no início da linha N

OBS: troque o número 1 para a linha que você quiser

sed '1s/^/começo do arquivo/'
  prompt> sed '1s/^/começo do arquivo/'  arquivo.txt
  começo do arquivoNo início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.13. Incluir texto no final da linha N

OBS: troque o número 1 para a linha que você quiser

sed '1s/$/final da linha/'
  prompt> sed '1s/$/final da linha/' arquivo.txt
  No início do início, era um nada.final da linha
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.14. Incluir texto na linha N apagando o conteúdo existente

OBS: troque o número 1 para a linha que você quiser

sed '1s/.*/início do arquivo/'
  prompt> sed '1s/.*/início do arquivo/' arquivo.txt
  início do arquivo
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.15. Incluir texto antes da linha N

OBS: troque o número 1 para a linha que você quiser

sed -e '1i\' -e 'começo do arquivo'
  prompt> sed -e '1i\' -e 'começo do arquivo' arquivo.txt
  começo do arquivo
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.16. Incluir linha após a última

sed -e '$a\' -e 'linha final'
  prompt> sed -e '$a\' -e 'linha final' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.
  linha final

2.17. Imprimir somente a linha N

OBS: troque o número 2 para a linha que você quiser

sed '2!d'
  prompt> sed '2!d' arquivo.txt
   No segundo dia, fez um rascunho à lápis.

2.18. Retirar a linha N

OBS: troque o número 2 pela linha que você quiser

sed '2d'
  prompt> sed '2d' arquivo.txt
  No início do início, era um nada.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.19. Extrair um trecho de uma linha

OBS: O mesmo que cut -d, -f2

sed 's/^[^,]*,\([^,]\+\),\?.*/\1/'
  prompt> sed 's/^[^,]*,\([^,]\+\),\?.*/\1/' arquivo.txt
   era um nada.
   fez um rascunho à lápis.
   apagou e começou tudo de novo.
   ficou com preguiça

   se não estiver cansado...

   nada.

2.20. Retirar espaços em branco repetidos

sed 's/[ ]\+/ /g'
  prompt> sed 's/[ ]\+/ /g' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
   No terceiro dia, apagou e começou tudo de novo.
   No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

   E no fim, nada.

2.21. Retirar espaços em branco no início da linha

sed 's/^ \+//'
  prompt> sed 's/^ \+//' arquivo.txt
  No início do início, era um nada.
  No segundo dia, fez um rascunho à lápis.
  No terceiro dia, apagou e começou tudo de novo.
  No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

  E no fim, nada.

2.22. Apagar uma string do início da linha

sed 's/^No//'
  prompt> sed 's/^No//' arquivo.txt
   início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.23. Apagar do início da linha até uma string

sed 's/^.*dia//'
  prompt> sed 's/^.*dia//' arquivo.txt
  No início do início, era um nada.
  , fez um rascunho à lápis.
  , apagou e começou tudo de novo.
  , ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.24. Apagar de uma string até o final da linha

sed 's/dia.*$//'
  prompt> sed 's/dia.*$//' arquivo.txt
  No início do início, era um nada.
   No segundo
    No terceiro
     No quarto 

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.25. Apagar a última string da linha

sed 's/ [^ ]\+ *$//g'
  prompt> sed 's/ [^ ]\+ *$//g' arquivo.txt
  No início do início, era um
   No segundo dia, fez um rascunho à
    No terceiro dia, apagou e começou tudo de
     No quarto dia, ficou com preguiça, então

  - Sexta-feira eu continuo, se não estiver

    E no fim,

2.26. Colocar todas as linhas em uma só

sed ':a;$!N;s/\n//;ta;'
  prompt> sed ':a;$!N;s/\n//;ta;' arquivo.txt
  No início do início, era um nada. No segundo dia, fez um rascunho à lápis.  No terceiro dia, apagou e começou tudo de novo.   No quarto dia, ficou com preguiça, então falou:- Sexta-feira eu continuo, se não estiver cansado...  E no fim, nada.

2.27. Juntar a linha com a próxima

sed 'N;s/\n//'
  prompt> sed 'N;s/\n//' arquivo.txt
  No início do início, era um nada. No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.   No quarto dia, ficou com preguiça, então falou:
  - Sexta-feira eu continuo, se não estiver cansado...
    E no fim, nada.

2.28. Substituir caractere por outro até uma TAG

OBS: troca ‘o’ por ‘x’ até encontrar a primeira ‘,’

sed ':a;s/^\([^,]\+\)o/\1x/;ta'
  prompt> sed ':a;s/^\([^,]\+\)o/\1x/;ta' arquivo.txt
  Nx inícix dx inícix, era um nada.
   Nx segundx dia, fez um rascunho à lápis.
    Nx terceirx dia, apagou e começou tudo de novo.
     Nx quartx dia, ficou com preguiça, então falou:

  - Sexta-feira eu cxntinux, se não estiver cansado...

    E nx fim, nada.

2.29. Substituir caractere por outro entre TAGs

OBS: troca ‘o’ por ‘x’ entre a segunda e terceira ‘,’

sed ':a;s/^\([^,]*,[^,]\+\)o/\1x/;ta'
  prompt> sed ':a;s/^\([^,]*,[^,]\+\)o/\1x/;ta' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunhx à lápis.
    No terceiro dia, apagxu e cxmeçxu tudx de nxvx.
     No quarto dia, ficxu cxm preguiça, então falou:

  - Sexta-feira eu continuo, se nãx estiver cansadx...

    E no fim, nada.

2.30. Substituir string por outra somente em certas linhas

OBS: substitui ‘dia’ por ‘noite’ somente em linhas que contém a string ‘terceiro’

sed '/terceiro/s/dia/noite/g'
  prompt> sed '/terceiro/s/dia/noite/g' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro noite, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.31. Substituir string por outra somente em certas linhas II

OBS: substitui ‘dia’ por ‘noite’ nas linha que NÃO contém a string ‘terceiro’

sed '/terceiro/!s/dia/noite/g'
  prompt> sed '/terceiro/!s/dia/noite/g' arquivo.txt
  No início do início, era um nada.
   No segundo noite, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto noite, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.32. Substituir a última ocorrência de uma string por outra

sed ':a;$!{N;ba;};s/\(.*\)dia/\1noite/'
  prompt> sed ':a;$!{N;ba;};s/\(.*\)dia/\1noite/' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto noite, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

2.33. Trocar a ordem das palavras (última vira primeira, penúltima vira segunda….)

OBS: se o seu arquivo tiver o caractere ‘§’ troque o ‘§’ do sed por outro carectere que não exista.

sed 's/^/§ /;:a;s/\(.*\)§ \+\([^ ]\+\)/\2 \1§/;ta;s/§//'
  prompt> sed 's/^/§ /;:a;s/\(.*\)§ \+\([^ ]\+\)/\2 \1§/;ta;s/§//' arquivo.txt
  nada. um era início, do início No
  lápis. à rascunho um fez dia, segundo No
  novo. de tudo começou e apagou dia, terceiro No
  falou: então preguiça, com ficou dia, quarto No 

  cansado... estiver não se continuo, eu Sexta-feira - 

  nada. fim, no E

2.34. Trocar a ordem das letras (igual ao comando rev)

sed 's/^/§/;:a;s/\(.*\)§\(.\)/\2\1§/;ta;s/§$//'
  prompt> sed 's/^/§/;:a;s/\(.*\)§\(.\)/\2\1§/;ta;s/§$//' arquivo.txt
  .adan mu are ,oicíni od oicíni oN
  .sipál à ohnucsar mu zef ,aid odnuges oN
  .ovon ed odut uoçemoc e uogapa ,aid oriecret oN
  :uolaf oãtne ,açiugerp moc uocif ,aid otrauq oN   

  ...odasnac revitse oãn es ,ounitnoc ue arief-atxeS -

  .adan ,mif on E

2.35. Trocar de maiúsculas para minúsculas

sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/'
  prompt> sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/' arquivo.txt
  no início do início, era um nada.
   no segundo dia, fez um rascunho à lápis.
    no terceiro dia, apagou e começou tudo de novo.
     no quarto dia, ficou com preguiça, então falou:

  - sexta-feira eu continuo, se não estiver cansado...

    e no fim, nada.

2.36. Trocar de minúsculas para maiúsculas

sed 'y/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/'
  prompt> sed 'y/abcdefghijklmnopqrstuvwxyzàáâãéêíóôõúç/ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇ/' arquivo.txt
  NO INÍCIO DO INÍCIO, ERA UM NADA.
   NO SEGUNDO DIA, FEZ UM RASCUNHO À LÁPIS.
    NO TERCEIRO DIA, APAGOU E COMEÇOU TUDO DE NOVO.
     NO QUARTO DIA, FICOU COM PREGUIÇA, ENTÃO FALOU:

  - SEXTA-FEIRA EU CONTINUO, SE NÃO ESTIVER CANSADO...

    E NO FIM, NADA.

3. Brincando com Partes do texto


3.1. Imprimir a linha antes de uma string

sed -n '/segundo/{x;p;};h'
  prompt> sed -n '/segundo/{x;p;};h' arquivo.txt
  No início do início, era um nada.

3.2. Imprimir a linha antes de uma string e a linha da string

sed -n '/segundo/{H;x;p;};h'
  prompt> sed -n '/segundo/{H;x;p;};h' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.

3.3. Imprimir a linha após uma string

sed -n '/segundo/{n;p;}'
  prompt> sed -n '/segundo/{n;p;}' arquivo.txt
    No terceiro dia, apagou e começou tudo de novo.

3.4. Imprimir a linha após uma string e a linha da string

sed -n '/segundo/{N;p;}'
  prompt> sed -n '/segundo/{N;p;}' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.

3.5. Imprimir a linha anterior, posterior e a linha que contém uma string

sed -n '/terceiro/{H;x;p;n;p;};h'
  prompt> sed -n '/terceiro/{H;x;p;n;p;};h' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

3.6. Imprimir a linha anterior e posterior a linha que contém uma string

sed -n '/terceiro/{x;p;n;p;};h'
  prompt> sed -n '/terceiro/{x;p;n;p;};h' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
     No quarto dia, ficou com preguiça, então falou:

3.7. Imprimir N linhas antes, a linha da string e M linhas após uma string I

OBS: ‘quarto’ é a string, troque o ‘2’ de 1,2 para o número de linhas antes, e adicione quantos ‘Ns’ para linhas após. No exemplo está 2 antes e 2 depois

sed -n '/quarto/{x;p;x;N;N;p;q;};1!{H;g;};1,2!s/[^\n]*\n//;h;'
  prompt> sed -n '/quarto/{x;p;x;N;N;p;q;};1!{H;g;};1,2!s/[^\n]*\n//;h;' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

3.8. Imprimir N linhas antes, a linha da string e M linhas após uma string II

OBS: troque o número entre chaves ‘{2}’ pelo número de linhas antes da string e adicione quandos ‘Ns’ para linhas após. No exemploestá 2 antes e 2 depois

sed 'H;/quarto/{g;N;N;s/^\n//p;}; x;s/.*\(\(\n[^\n]*\)\{2\}\)/\1/;x ;d'
  prompt> sed 'H;/quarto/{g;N;N;s/^\n//p;}; x;s/.*\(\(\n[^\n]*\)\{2\}\)/\1/;x ;d' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

3.9. Adicionar linha antes de uma string

OBS: inclui o ‘Texto adicionado’ antes da linha com a string ‘segundo’

sed '/segundo/{h;s/.*/Texto adicionado/;p;x;}'
  prompt> sed '/segundo/{h;s/.*/Texto adicionado/;p;x;}' arquivo.txt
  No início do início, era um nada.
  Texto adicionado
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

3.10. Adicionar linha após a linha com uma determinada string

sed '/segundo/{p;s/.*/Texto adicionado/;}'
  prompt> sed '/segundo/{p;s/.*/Texto adicionado/;}' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
  Texto adicionado
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

3.11. Imprimir somente entre linha N e M

sed '4,6!d'
  prompt> sed '4,6!d' arquivo.txt
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

3.12. Substituir uma string por outra somente entre determinadas linhas

sed '3,6s/dia/noite/'
  prompt> sed '3,6s/dia/noite/' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro noite, apagou e começou tudo de novo.
     No quarto noite, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

3.13. Imprimir linhas que contém uma ou outra string

OBS: imprime linhas que contém a string ‘segundo’ ou ‘quarto’

sed '/segundo\|quarto/!d'
  prompt> sed '/segundo\|quarto/!d' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
     No quarto dia, ficou com preguiça, então falou:

3.14. Imprimir linhas que contém uma e outra string

OBS: imprime linhas que contém ‘No’ e ‘segundo’

sed -n '/No.*segundo/p'
  prompt> sed -n '/No.*segundo/p' arquivo.txt
   No segundo dia, fez um rascunho à lápis.

3.15. Extrair um trecho do arquivo

sed -n '/segundo/,/quarto/p'
  prompt> sed -n '/segundo/,/quarto/p' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

3.16. Extrair trecho que pode ou não estar na mesma linha

sed -n '/segundo/{:a;/quarto/!{N;ba;};p;}'
  prompt> sed -n '/segundo/{:a;/quarto/!{N;ba;};p;}' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

3.17. Extrair trecho que pode ou não estar na mesma linha tirando os delimitadores

OBS: ‘segundo’ é a TAG inicial e ‘falou’ a TAG final

sed -n '/segundo/{/falou/tc;:a;/falou/!{N;ba;};:c;s/.*segundo//;s/falou.*$//;p;}'
  prompt> sed -n '/segundo/{/falou/tc;:a;/falou/!{N;ba;};:c;s/.*segundo//;s/falou.*$//;p;}' arquivo.txt
   dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então

3.18. Apagar o que está entre delimitadores

sed '/segundo/{/falou/{s/segundo.*falou//;t};:a;/falou/!{N;s/\n//;ta;};s/segundo.*falou/\n/;}'
  prompt> sed '/segundo/{/falou/{s/segundo.*falou//;t};:a;/falou/!{N;s/\n//;ta;};s/segundo.*falou/\n/;}' arquivo.txt
  No início do início, era um nada.
   No n:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

3.19. Apagar um trecho se ele contém um padrão

OBS: ‘segundo’ marca o início do trecho, ‘quarto’ o final, e ‘rascunho’ é o padrão de procura

sed '/segundo/{:a;/quarto/!{N;ba;};/rascunho/d;}'
  prompt> sed '/segundo/{:a;/quarto/!{N;ba;};/rascunho/d;}' arquivo.txt
  No início do início, era um nada.

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

3.20. Trocar de lugar a linha com a próxima (troca de lugar linha 1 com 2, 3 com 4…) I

sed -n '$ba;h;n;p;x;:a;p'
  prompt> sed -n '$ba;h;n;p;x;:a;p' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
  No início do início, era um nada.
     No quarto dia, ficou com preguiça, então falou:
    No terceiro dia, apagou e começou tudo de novo.
  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

3.21. Trocar de lugar a linha com a próxima (troca de lugar linha 1 com 2, 3 com 4…) II

sed 'N;s/\([^\n]*\)\(\n\)\([^\n]*\)/\3\2\1/'
  prompt> sed 'N;s/\([^\n]*\)\(\n\)\([^\n]*\)/\3\2\1/' arquivo.txt
   No segundo dia, fez um rascunho à lápis.
  No início do início, era um nada.
     No quarto dia, ficou com preguiça, então falou:
    No terceiro dia, apagou e começou tudo de novo.
  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

4. Utilidade Pública


4.1. Retirar comandos HTML (tudo entre < e >)

sed 's/<[^>]*>//g'
  prompt> sed 's/<[^>]*>//g' arquivo.txt
  No início do início, era um nada.
   No segundo dia, fez um rascunho à lápis.
    No terceiro dia, apagou e começou tudo de novo.
     No quarto dia, ficou com preguiça, então falou:

  - Sexta-feira eu continuo, se não estiver cansado...

    E no fim, nada.

4.2. Pesquisar se existe algum usuário sem senha no /etc/passwd

sed -n '/^[^:]\+::/p'
  prompt> sed -n '/^[^:]\+::/p' arquivo.txt

Fonte: Link

Lista rapida e explicativa de comandos

•julho 28, 2010 • Comentários desativados em Lista rapida e explicativa de comandos

1. ls (lista o conteúdo de uma pasta)

Exemplo: $ ls

2. ls -a (lista as pastas, ficheiros ocultos e executáveis)

Exemplo: $ ls -a

3. ls -l (Lista o conteúdo de uma pasta mais detalhadamente)

Exemplo: $ ls -l

4. pwd (mostra o caminho para a pasta corrente)

Exemplo: $ pwd

5. cd (muda de pasta)

Exemplo: $ cd /etc

6. cd – (volta para a pasta anterior)

Exemplo: $ cd –

7. cd .. (sobe uma pasta acima)

Exemplo: $ cd ..

8. cd ~ (volta para a nossa pasta pessoal /home/nomedeutilizador)

Exemplo: $ cd ~

9. mkdir [pasta] (cria uma pasta com o nome desejado)

Exemplo: $ mkdir programas

10. mkdir [pasta1] [pasta2] (cria a pasta1 e a pasta2 ao mesmo tempo)

Exemplo: $ mkdir teste1 teste2

11. mkdir -p [pasta]/[sub-pasta] (cria uma pasta e uma sub-pasta simultaneamente)

Exemplo: $ mkdir -p teste3/teste3_1

12. rm -r [pasta/ficheiro] (apaga uma pasta ou ficheiro)

Exemplo: $ rm -r teste3

13. mv [ficheiro1] [ficheiro2] (muda o nome de um ficheiro)

Exemplo: $ mv teste teste2

14. mv [ficheiro] [caminho] (move o ficheiro para outra pasta de determinado caminho)

Exemplo: $ mv imagem.jpg ~/imagens

15. cp [ficheiro] [caminho] (copia um ficheiro para uma pasta de determinado caminho)

Exemplo: $ cp imagem.jpg ~/imagens

16. ln -s [caminho] [link] (cria um atalho/link a uma pasta ou ficheiro)

Exemplo: $ ln -s /usr/bin/limewire limewire

17. type [executável] (procura o caminho de um executável)

Exemplo: $ type limewire

18. cat > [ficheiro] (cria um novo ficheiro)

Exemplo: $ cat > teste.txt

19. cat [ficheiro1] >> [ficheiro2] (acrescenta o ficheiro2 ao ficheiro1)

Exemplo: $ cat teste1 >> teste2

20. touch [ficheiro] (cria um novo ficheiro)

Exemplo: $ touch teste.txt

21. diff [ficheiro1] [ficheiro2] (compara os dois ficheiros)

Exemplo: $ diff ficheiro1 ficheiro2

22. locate [ficheiro] (localiza o ficheiro desejado]

Exemplo: $ locate imagem.jpg

23. head [-linhas] [ficheiro] (mostra as primeiras linhas de um ficheiro)

Exemplo: $ head -5 texto.txt

24. tail [-linhas] [ficheiro] (faz exactamente o contrário do comando anterior)

Exemplo: $ tail -20 texto.txt

25. less [ficheiro] (mostra o conteúdo de uma pasta)

Exemplo: $ less texto.txt

26. more [ficheiro] (mostra o conteúdo de um ficheiro)

Exemplo: $ more texto.txt

27. nl [ficheiro] (mostra o número de linhas que o ficheiro tem)

Exemplo: $ nl texto.txt

28. wc [ficheiro] (lista número de linhas, de palavras e de bytes de um ficheiro)

Exemplo: $ wc texto.txt

29. [comando1] | [comando2] (lê-se “pipe” e serve para ligar dois processos)

Exemplo: $ vi /boot/grub/menu.lst | more

30. sleep [tempo] && [comando] (executa um comando em determinado tempo)

Exemplo: $ sleep 2 && pwd

31. echo [mensagem] (exibe uma mensagem na shell)

Exemplo: $ echo Olá Mundo

32. alias [comando/actual] [comando_novo] (muda o nome de um comando)

Exemplo: $ alias dir=ls -l

33. history (lista os últimos 500 comandos que foram utilizados)

Exemplo: $ history

34. su (muda para o super utilizador root, precisa de password)

Exemplo: $ su

35. su [utilizador] (muda para outro utilizador, também necessita de password)

Exemplo: $ su nome_de_utilizador

36. shutdown (reinicia o sistema)

Exemplo: $ shutdown

37. reboot (reinicia a máquina de emergência)

Exemplo: $ reboot

38. passwd (altera a password)

Exemplo: $ passwd

39. uname (mostra o sistema operativo)

Exemplo: $ uname

40. uname -a (mostra o sistema operativo, nome da máquina, versão do kernel, etc.)

Exemplo: $ uname -a

41. dmesg (mostra as informações do sistema)

Exemplo: $ dmesg

42. top -d [segundos] (informações detalhadas dos processos)

Exemplo: $ top -d 3

43. ps (mostra os processos correntes “PID”)

Exemplo: $ ps

44. killall [programa] (força o programa a terminar)

Exemplo: $ killall xmms

45. xkill (transforma o ponteiro do rato num assassino de programas :-D )

Exemplo: $ xkill

46. mkfs.ext2 (formata uma disquete no formato ext3 usado pelo Linux)

Exemplo: $ mkfs.ext2 /dev/fd0

47. superformat (formata uma disquete no formato MS-DOS)

Exemplo: $ superformat /dev/fd0

48. vmstat [-tempo] (mostra a memória swap em uso)

Exemplo: $ vmstat -2

49. arch (mostra a arquitectura do PC)

Exemplo: $ arch

50. lsmod (lista os módulos da máquina)

Exemplo: $ lsmod

51. insmod [módulo] (levanta um módulo, requer root ou comando sudo)

Exemplo: # insmod spca5x

52. adduser (adiciona um utilizador no sistema, requer root ou comando sudo)

Exemplo: # adduser

53. userdel [utilizador] (apaga um utilizador, requer root ou comando sudo)

Exemplo: # userdel nome_de_utilizador

54. userdel -r [utilizador] (apaga o utilizador e também a sua pasta home /home/nome_de_utilizador, requer root ou comando sudo)

Exemplo: # userdel -r nome_de_utilizador

55. chfn [utilizador] (altera as informações de um utilizador, requer root ou comando sudo)

Exemplo: # chfn nome_de_utilizador

56. chage -M [dias] [utilizador] (expira um utilizador, no dia pré-determinado, requer root)

Exemplo: # chage -M 20 nome_de_utilizador

57. display [imagem.jpg] (mostra uma imagem no X, necessita do ImageMagick)

Exemplo: $ display imagem.jpg

58. convert [imagem.png] [imagem.jpg] (converte o formato .png para .jpg, necessita também do ImageMagick)

Exemplo: $ convert imagem.png imagem.jpg

59. chmod (altera permissões)

Exemplo: # chmod 666 /dev/hdd

60. mount [device] (monta um dispositivo)

Exemplo: $ mount /mnt/cdrom

61. umount [device] (desmonta um dispositivo)

Exemplo: $ umount /mnt/cdrom

62. eject (abre a gaveta da unidade DVDRW)

Exemplo: $ eject /mnt/cdrom

63. eject -t (fecha a gaveta da unidade DVDRW)

Exemplo: $ eject -t /mnt/cdrom

64. halt (desliga o computador)

Exemplo: $ halt

65. date (indica o dia e a hora)

Exemplo: $ date

66. hostname (indica o nome do computador)

Exemplo: $ hostname

67. du [diretório] (indica o tamanho de uma pasta)

Exemplo: $ du pasta

68. du -S [subpasta] (indica o tamanho de uma subpasta)

Exemplo: $ du -S subpasta

69. [comando] & (inicia um processo em segundo plano e deixa o terminal livre para trabalhar)

Exemplo: $ gkrellm &

70. cal (mostra o calendário do mês)

Exemplo: $ cal

71. cal [ano] (mostra o calendário com os 12 meses de um determinado ano)

Exemplo: $ cal 2007

72. last [-quantidade] (mostra informações sobre os últimos logins, em que a quantidade é o número de logins)

Exemplo: $ last -10

73. tar -zxvf [ficheiro.tar.gz] (descomprime um ficheiro em formato .tar.gz)

Exemplo: $ tar -zxvf nome_do_ficheiro.tar.gz

74. tar -jxvf [ficheiro .tar.bz2] (descomprime um ficheiro no formato .tar.bz2)

Exemplo: $ tar -jxvf nome_do_ficheiro.tar.bz2

75. clear (limpa a tela da shell)

Exemplo: $ clear

76. time [comando] (mede o tempo gasto para abrir um programa)

Exemplo: $ time thunderbird

77. uptime (mostra o tempo decorrido desde do último boot)

Exemplo: $ uptime

78. lsattr [ficheiro/pasta] (lista os atributos de um ficheiro ou pasta)

Exemplo: $ lsattr ficheiro

79. whereis [executável/comando] (localiza o caminho de um executável/comando)

Exemplo: $ whereis thunderbird

80. who (mostra quem está no sistema nesse momento)

Exemplo: $ who

81. wget -c [URL] (descarrega um ficheiro)

Exemplo: $ wget -c http://sitio.do.download/nome_do_ficheiro…

82. whoami (mostra o seu nome de utilizador)

Exemplo: $ whoami

Fonte: Link

Comprimir, descomprimir e listar ficheiros no Linux

•julho 28, 2010 • Comentários desativados em Comprimir, descomprimir e listar ficheiros no Linux

Comprimir

Sintax Exemplo(s)
gzip {nome_do_ficheiro} gzip ficheiro.doc
gzip *.jpg
ls -l
bzip2 {nome_do_ficheiro} bzip2 ficheiro.doc
bzip2 *.jpg
ls -l
zip {.zip-nome_do_ficheiro} {nome_do_ficheiro-a-comprimir} zip ficheiro.zip ficheiro.doc
zip dados.zip *.doc
ls -l
tar -zcvf {.tgz-ficheiro} {ficheiros}
tar -jcvf {.tbz2-ficheiro} {ficheiros}
tar -zcvf dados.tgz *.doc
tar -zcvf imagens.tar.gz *.jpg *.png
tar -jcvf dados.tbz2 *.doc
ls -l

Descomprimir

Sintax Exemplo(s)
gzip -d {.gz ficheiro}
gunzip {.gz ficheiro}
gzip -d ficheiro.doc.gz
gunzip ficheiro.doc.gz
bzip2 -d {.bz2-ficheiro}
bunzip2 {.bz2-ficheiro}
bzip2 -d ficheiro.doc.bz2
gunzip ficheiro.doc.bz2
unzip {.zip ficheiro} unzip ficheiro.zip
unzip dados.zip resume.doc
tar -zxvf {.tgz-ficheiro}
tar -jxvf {.tbz2-ficheiro}
tar -zxvf dados.tgz
tar -zxvf imagens.tar.gz *.jpg
tar -jxvf dados.tbz2

Listar

gzip -l {.gz ficheiro} gzip -l ficheiro.doc.gz
unzip -l {.zip ficheiro} unzip -l ficheiro.zip
tar -ztvf {.tar.gz}
tar -jtvf {.tbz2}
tar -ztvf imagens.tar.gz
tar -jtvf dados.tbz2

Fonte: Link

Backup do MySQL sem precisar parar o serviço

•julho 28, 2010 • Comentários desativados em Backup do MySQL sem precisar parar o serviço

Para salvar todas as bases de dados do servidor no arquivo “backup.sql”, criado no diretório atual, por exemplo, o comando seria:

# mysqldump -u root -p -x -e -A > backup.sql

O “-u root -p” especifica o usuário que será usado para acessar o banco de dados. No exemplo estou fazendo um backup completo, por isso estou usando diretamente o root. A opção “-x” trava as bases de dados no momento em que cada uma é copiada, evitando qualquer problema de inconsistência, enquanto a “-e” é uma opção de otimização, que permite ao mysqldump combinar argumentos INSERT dentro das tabelas, o que torna tanto o backup quanto a restauração mais rápidos. Finalizando, a opção “-A” especifica um backup completo, de todas as bases de dados.

Se o comando parasse por aí, o mysqldump simplesmente escreveria todo o conteúdo das bases de dados na própria janela do terminal, resultando em uma longa exibição de informações, sem muita utilidade. Como queremos que a saída seja salva em um arquivo, usamos o “>”, que redireciona a saída para o arquivo especificado.

O arquivo “backup.sql” gerado é basicamente um arquivo de texto gigante contendo declarações de todas as informações armazenadas. Você pode reduzir o tamanho do arquivo para um quarto (ou menos) do tamanho original compactando o arquivo, o que pode ser feito adicionando a opção “| gzip” antes do “>” no comando, como em:

# mysqldump -u root -p -x -e -A | gzip > backup.sql.gz

Note que nesse exemplo adicionei também o “.gz” no nome do arquivo, indicando que se trata de um arquivo compactado. Para usá-lo posteriormente, você precisaria apenas descompactar o arquivo, usando o comando “gunzip”, como em:

# gunzip backup.sql.gz

O maior problema com estes dois comandos é que você precisa digitar a senha depois de rodar o comando, o que dificulta seu uso em scripts de backup automático. É possível eliminar a necessidade de digitar a senha especificando-a diretamente no comando, depois do “-p” (sem espaços), como em:

# mysqldump -u root -p12345 -x -e -A | gzip > backup.sql.gz

Um exemplo de script simples de backup automático usando o comando acima seria:

#!/bin/sh

cd /var/backup
DATA=`date +%Y-%m-%d-%H.%M`

# Faz backup das bases de dados usando o mysqldump
mysqldump -u root -p12345 -x -e -A | gzip > backup-$DATA.sql.gz

Se você gerou um par de chaves no SSH sem passphrase e instalou a chave pública no servidor de backup remoto, como vimos na dica de ontem, poderia adicionar as linhas abaixo no final do script para que o arquivo fosse automaticamente movido para o servidor de backup remoto no final do processo:

scp backup-$DATA.sql.gz usuario@servidor-de-backup:/mnt/backups/
rm -f backup-$DATA.sql.gz

O passo final seria adicionar uma entrada no cron para automatizar a execução do script. Para que ele fosse executado todas as segundas, quartas e sextas às 22:58 a linha no arquivo “/etc/crontab” seria:

58 22 * * 1,3,5 root /usr/local/bin/script-backup

Note que ao incluir senhas em arquivos, é extremamente importante restringir as permissões, de forma que apenas o root (ou o usuário em questão) tenha permissão para lê-lo. Qualquer outro usuário do servidor que tenha acesso de leitura no arquivo, poderá ler a senha e acessar o servidor MySQL:

# chmod 700 /usr/local/bin/script-backup

Usando o “700” os demais usuários não poderão ver nem executar o arquivo, o que seria o ideal no nosso exemplo, já que a entrada no crontab faz com que ele seja executado usando a conta de root. Se você quiser que outros usuários possam executar o arquivo manualmente quando necessário, mas ainda assim sem poder ver a senha armazenada dentro dele, o ideal seria criar um grupo, adicionar os usuários desejados dentro dele e setar as permissões do arquiv para “710”, onde os usuários que fazem parte do grupo podem apenas executar o arquivo, sem ver seu conteúdo. Os comandos seriam:

# addgroup backup-sql
# adduser joao backup-sql
# adduser joaquim backup-sql
# chown root:backup-sql /usr/local/bin/script-backup
# chmod 710 /usr/local/bin/script-backup

Fonte: Link

Backup do MySQL sem precisar parar o serviço

•julho 28, 2010 • Comentários desativados em Backup do MySQL sem precisar parar o serviço

Para salvar todas as bases de dados do servidor no arquivo “backup.sql”, criado no diretório atual, por exemplo, o comando seria:

# mysqldump -u root -p -x -e -A > backup.sql

O “-u root -p” especifica o usuário que será usado para acessar o banco de dados. No exemplo estou fazendo um backup completo, por isso estou usando diretamente o root. A opção “-x” trava as bases de dados no momento em que cada uma é copiada, evitando qualquer problema de inconsistência, enquanto a “-e” é uma opção de otimização, que permite ao mysqldump combinar argumentos INSERT dentro das tabelas, o que torna tanto o backup quanto a restauração mais rápidos. Finalizando, a opção “-A” especifica um backup completo, de todas as bases de dados.

Se o comando parasse por aí, o mysqldump simplesmente escreveria todo o conteúdo das bases de dados na própria janela do terminal, resultando em uma longa exibição de informações, sem muita utilidade. Como queremos que a saída seja salva em um arquivo, usamos o “>”, que redireciona a saída para o arquivo especificado.

O arquivo “backup.sql” gerado é basicamente um arquivo de texto gigante contendo declarações de todas as informações armazenadas. Você pode reduzir o tamanho do arquivo para um quarto (ou menos) do tamanho original compactando o arquivo, o que pode ser feito adicionando a opção “| gzip” antes do “>” no comando, como em:

# mysqldump -u root -p -x -e -A | gzip > backup.sql.gz

Note que nesse exemplo adicionei também o “.gz” no nome do arquivo, indicando que se trata de um arquivo compactado. Para usá-lo posteriormente, você precisaria apenas descompactar o arquivo, usando o comando “gunzip”, como em:

# gunzip backup.sql.gz

O maior problema com estes dois comandos é que você precisa digitar a senha depois de rodar o comando, o que dificulta seu uso em scripts de backup automático. É possível eliminar a necessidade de digitar a senha especificando-a diretamente no comando, depois do “-p” (sem espaços), como em:

# mysqldump -u root -p12345 -x -e -A | gzip > backup.sql.gz

Um exemplo de script simples de backup automático usando o comando acima seria:

#!/bin/sh

cd /var/backup
DATA=`date +%Y-%m-%d-%H.%M`

# Faz backup das bases de dados usando o mysqldump
mysqldump -u root -p12345 -x -e -A | gzip > backup-$DATA.sql.gz

Se você gerou um par de chaves no SSH sem passphrase e instalou a chave pública no servidor de backup remoto, como vimos na dica de ontem, poderia adicionar as linhas abaixo no final do script para que o arquivo fosse automaticamente movido para o servidor de backup remoto no final do processo:

scp backup-$DATA.sql.gz usuario@servidor-de-backup:/mnt/backups/
rm -f backup-$DATA.sql.gz

O passo final seria adicionar uma entrada no cron para automatizar a execução do script. Para que ele fosse executado todas as segundas, quartas e sextas às 22:58 a linha no arquivo “/etc/crontab” seria:

58 22 * * 1,3,5 root /usr/local/bin/script-backup

Note que ao incluir senhas em arquivos, é extremamente importante restringir as permissões, de forma que apenas o root (ou o usuário em questão) tenha permissão para lê-lo. Qualquer outro usuário do servidor que tenha acesso de leitura no arquivo, poderá ler a senha e acessar o servidor MySQL:

# chmod 700 /usr/local/bin/script-backup

Usando o “700” os demais usuários não poderão ver nem executar o arquivo, o que seria o ideal no nosso exemplo, já que a entrada no crontab faz com que ele seja executado usando a conta de root. Se você quiser que outros usuários possam executar o arquivo manualmente quando necessário, mas ainda assim sem poder ver a senha armazenada dentro dele, o ideal seria criar um grupo, adicionar os usuários desejados dentro dele e setar as permissões do arquiv para “710”, onde os usuários que fazem parte do grupo podem apenas executar o arquivo, sem ver seu conteúdo. Os comandos seriam:

# addgroup backup-sql
# adduser joao backup-sql
# adduser joaquim backup-sql
# chown root:backup-sql /usr/local/bin/script-backup
# chmod 710 /usr/local/bin/script-backup

Fonte: Link

IPtables: Forwarding de portas

•julho 28, 2010 • Comentários desativados em IPtables: Forwarding de portas

Ao compartilhar uma conexão via NAT, apenas o servidor recebe conexões vindas da Internet. Os micros da rede local acessam através do servidor e recebem apenas pacotes de resposta. Na maioria dos casos, é justamente isso que você deseja, já que apenas o servidor fica exposto a ataques diretos, enquanto as estações ficam protegidas dentro da rede local. Entretanto, isso nos leva a outro problema, que são os casos em que você realmente deseja que algum dos hosts fique diretamente acessível.

Imagine que você queira que um servidor web, escutando na porta 80 do micro 192.168.1.3 da rede local, fique disponível para a Internet. Como o servidor é o único com um IP válido na Internet, a única forma de fazer com que o 192.168.1.3 fique acessível é fazer com que o servidor “passe a bola” para ele ao receber conexões na porta 80. É justamente isso que fazemos ao configurar o forwarding de portas. Uma vez feita a configuração, sempre que o servidor receber uma conexão qualquer na porta 80 (ou qualquer outra definida por você), ele a repassará para o 192.168.1.3. Isso é feito de forma completamente transparente, de forma que o emissor nem percebe que quem respondeu à solicitação foi outro host.

Essa opção pode ser usada também para permitir que os micros da rede local fiquem com as portas do bittorrent abertas (de forma a baixar arquivos com um melhor desempenho), rodem servidores de games online ou qualquer outra tarefa onde seja necessário manter determinadas portas TCP ou UDP abertas. A limitação é que continua existindo uma única porta 80, uma única porta 22, etc., de forma que apenas um micro da rede interna pode receber cada porta de cada vez.

Veja um exemplo de como redirecionar as portas 6881 a 6889 usadas pelo Bittorrent para o host 192.168.1.10 da rede local:

# Redireciona uma faixa de portas para um micro da rede local:
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth1 –dport 6881:6889 -j DNAT \
–to 192.168.1.10
iptables -t nat -A POSTROUTING -d 192.168.1.10 -j SNAT –to 192.168.1.1

Esta regra é um pouco mais complexa, pois trabalha em duas fases. A primeira faz com que o servidor encaminhe todas as conexões que receber na interface e porta especificada para o micro da rede local e a segunda faz com que os pacotes de resposta enviados por ele posam ser encaminhados de volta. Para que ambas funcionem, é necessário usar o comando “echo 1 > /proc/sys/net/ipv4/ip_forward”, que ativa o forwarding de portas. É o mesmo comando que usamos ao compartilhar a conexão.

Nos parâmetros que coloquei em negrito, a “eth1” é a placa de Internet, onde chegam os pacotes, a “6881:6889” é a faixa de portas que está sendo redirecionada e o “192.168.1.10” é o IP do micro dentro da rede local que passa a receber as conexões. Na segunda regra, temos repetido o IP do micro na rede local e, em seguida, o “192.168.1.1” que indica o IP do servidor, dentro da rede local.

Para redirecionar uma única porta, ao invés de uma faixa, basta citar a porta, sem usar os “:”, como em:

# Redireciona uma única porta para um micro da rede local.
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth1 –dport 22 -j DNAT –to 192.168.1.10
iptables -t nat -A POSTROUTING -d 192.168.1.10 -j SNAT –to 192.168.1.1

É possível ainda indicar uma lista de portas (usando a opção -m multiport), como em:

# Redireciona um conjunto de portas
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp -i eth1 -m multiport –dport 21,22,80 -j DNAT \
–to-dest 192.168.1.10
iptables -t nat -A POSTROUTING -d 192.168.1.10 -j SNAT –to 192.168.1.1

Note que, nos três exemplos, usei o parâmetro “-p tcp”. Embora necessário, ele faz com que a regra se aplique apenas a portas TCP. Caso você precise fazer forwarding de portas UDP, deve alterar o protocolo dentro da regra, como em:

# Redireciona uma porta UDP
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p udp -i eth1 –dport 53 -j DNAT –to 192.168.1.10
iptables -t nat -A POSTROUTING -d 192.168.1.10 -j SNAT –to 192.168.1.1

Fonte: Link