Dicas rápidas para linha de comando

Quando comecei a usar o GNU/Linux, o que mais me prendeu ao sistema foi o poder dado ao usuário pela linha de comandos. Que me perdoem os amantes da GUI, mas para mim a CLI é a verdadeira alma do sistema, o verdadeiro poder.

[ Hits: 12.057 ]

Por: Zephyrus (formerly mkmastersys) em 29/01/2015


Introdução



Quando comecei a usar o GNU/Linux, o que mais me prendeu ao sistema foi o poder dado ao usuário pela linha de comandos. Que me perdoem os amantes da GUI, mas para mim a CLI é a verdadeira alma do sistema, o verdadeiro poder.

Deixo aqui algumas dicas rápidas para a linha de comandos. Com certeza muitos usuários já conhecem os macetes, mas pode servir de ajuda/auxílio principalmente para os iniciantes.

Vamos lá.

Assista Star Wars em modo ASCII

Dê o seguinte comando no shell:

telnet towel.blinkenlights.nl

Agora é só curtir o filme. :D

Descubra seu IP externo pela linha de comandos

De vez em sempre precisamos saber o nosso IP dinâmico externo fornecido pela operadora. Existem N formas de fazer isso.

Aqui vou passar somente algumas dicas para a linha de comandos, pois é a forma que julgo mais rápida, até mais rápida do que ter de acessar a página de configuração do roteador/modem para consultar o IP adquirido.

Usando wget (utilize qualquer uma das opções, encontre a que você achar mais eficiente):

wget -qO - icanhazip.com
$ wget -qO - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
$ wget -qO - ifconfig.me
$ wget -qO - ip.appspot.com
$ wget http://ipecho.net/plain -O - -q ; echo


Usando cURL (utilize qualquer uma das opções, encontre a que você achar mais eficiente):

curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
$ curl -s checkip.dyndns.org | grep -Eo '[0-9\.]+'
$ curl -s http://checkip.dyndns.org/ | grep -o "[[:digit:].]\+"
$ curl -s monip.org | iconv -f iso-8859-1 | sed -n 's/.*IP : \([0-9.]*\).*/\1/p'
$ curl ifconfig.me
$ curl ipecho.net/plain
$ curl icanhazip.com
$ curl ipv4.icanhazip.com
# Explicitamente evoca o IPv4
curl ipv6.icanhazip.com # Explicitamente evoca o IPv6
curl curlmyip.com
$ curl l2.io/ip
$ curl ip.appspot.com
$ curl ifconfig.me/ip
$ curl eth0.me


Com JSON, caso você queira:

curl httpbin.org/ip
$ curl wtfismyip.com/json


Usando dig:

dig +short myip.opendns.com @resolver1.opendns.com

Usando lynx:

lynx -dump checkip.dyndns.org | grep 'Current IP Address:'
$ lynx -dump eth0.me
$ lynx --dump monip.org | grep 'IP'


Não vou me prolongar mais nesta parte, com eu disse: existem "n" maneiras para se chegar ao mesmo resultado! Cabe a você escolher a que achar melhor. Faça alterações nos comandos, faça suas experiências, adapte-os.

Basta olhar na lista e verá que existem várias adaptações e modificações para um mesmo comando principal. O que influencia no final é sua escolha.

Finalizando esta parte, indico uma última alternativa:

Quem usa Debian/Ubuntu pode instalar, caso já não tenha instalado, o pequeno programa miniupnpc se o seu roteador/modem tiver suporte para UPnP.

Depois de instalado é só executar:

upnpc -s | grep ^ExternalIPAddress | cut -c21-

Esse comando fará o mesmo que todos os outros indicados nesta seção: te mostrará seu IP dinâmico externo.

Dica: você pode criar um Shell Script simples com algum dos comandos acima para tornar o processo ainda mais rápido. Exemplo:

#!/bin/bash

#Cria variável e atribui valor
MYDINIPADDRESS="`curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`"

echo "\n O seu endereço IP externo é: $MYDINIPADDRESS"

Salve o arquivo (de preferência coloque a extensão .sh), torne-o executável alterando suas permissões e depois é só executar.

    Próxima página

Páginas do artigo
   1. Introdução
   2. Um pouco de cURL
   3. Comandos úteis
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Ripando DVDs com Ubuntu Dapper Drake (AcidRip + MEncoder + Xvid)

Filosofia do Open Source, um novo jogo?

Uma pequena análise do Gentoo Linux

Como Funciona a Resolução de Dependências no Gslapt

Programando um mundo livre

  
Comentários
[1] Comentário enviado por Zephyr em 29/01/2015 - 15:02h

*ERRATA:

No Artigo, na sugestão de script que dei, no comando final echo eu me esqueci de incluir a opção: -e
Sem essa opção o echo não estará habilitado a interpretar a barra invertida em \n.

O exemplo corrigido segue abaixo:

==========================================================================
#!/bin/bash

#Cria variável e atribui valor

MYDINIPADDRESS="`curl -s checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'`"


echo -e "\n O seu endereço IP externo é: $MYDINIPADDRESS"

==========================================================================


[2] Comentário enviado por fabio em 29/01/2015 - 18:22h

Muito bom o artigo, meus parabéns!

[3] Comentário enviado por Zephyr em 31/01/2015 - 21:26h


[2] Comentário enviado por fabio em 29/01/2015 - 18:22h

Muito bom o artigo, meus parabéns!


Thanx man!

[4] Comentário enviado por removido em 31/01/2015 - 22:06h

Interessante o artigo
Parabéns.

[5] Comentário enviado por Zephyr em 31/01/2015 - 23:47h


[4] Comentário enviado por offsec em 31/01/2015 - 22:06h

Interessante o artigo
Parabéns.


Thanx. Valeu!

[6] Comentário enviado por jhonatanp em 01/02/2015 - 12:49h

Nossa muito legal esses comandos,

Eu não sabia que dava pra testar porta assim geração aletoria muito legal e rastrear o Star Wars foi D + heuehueh.

Eu fiz uma versão com awk do comando que mostra ip e que comtemple os dois idiomas.

ifconfig | awk '/inet (end|addr).?:/ && !/127.0.0.1/ {print $3}'

[7] Comentário enviado por Zephyr em 01/02/2015 - 13:01h


[6] Comentário enviado por jhonatanp em 01/02/2015 - 12:49h

Nossa muito legal esses comandos,

Eu não sabia que dava pra testar porta assim geração aletoria muito legal e rastrear o Star Wars foi D + heuehueh.

Eu fiz uma versão com awk do comando que mostra ip e que comtemple os dois idiomas.

ifconfig | awk '/inet (end|addr).?:/ &amp;&amp; !/127.0.0.1/ {print $3}'


Valeu pela contribuição!




[8] Comentário enviado por hellnux em 02/02/2015 - 20:01h

Olá!

Bela contribuição. Gosto muito deste tipo de dica. Já usei bastante esses de pegar IP, mas ele não são muito eficientes quando o locale são diferentes.

Por exemplo, quando o LANG=en_US
$ ifconfig | grep "inet end.:" | awk '{print $3}' | grep -v '127.0.0.1' | cut -f2 -d:
retorna nada
$ ifconfig | awk '/inet (end|addr).?:/ &amp;&amp; !/127.0.0.1/ {print $3}'
Bcast:IP_qualquer

Prefiro usar apenas:
$ hostname -i

Assim deixo minha contribuição =D

[9] Comentário enviado por albfneto em 03/02/2015 - 11:37h

Muito bom esse artigo. Geral e comandos de uso amplo. Favoritado.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux,Linux Counter: #479903.
Distros Favoritas: Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva.

[10] Comentário enviado por Zephyr em 04/02/2015 - 00:13h


[8] Comentário enviado por hellnux em 02/02/2015 - 20:01h

Olá!

Bela contribuição. Gosto muito deste tipo de dica. Já usei bastante esses de pegar IP, mas ele não são muito eficientes quando o locale são diferentes.

Por exemplo, quando o LANG=en_US
$ ifconfig | grep "inet end.:" | awk '{print $3}' | grep -v '127.0.0.1' | cut -f2 -d:
retorna nada
$ ifconfig | awk '/inet (end|addr).?:/ &amp;amp;&amp;amp; !/127.0.0.1/ {print $3}'
Bcast:IP_qualquer

Prefiro usar apenas:
$ hostname -i

Assim deixo minha contribuição =D


Obrigado pela contribuição.
Explico aqui o porque dos comandos não funcionarem quando em LANG=en_US.

Quando o sistema está configurado para o inglês, o comando ifconfig imprime o resultado e mais especificamente a parte que queremos (o endereço IP) da seguinte forma:

eth0 Link encap:Ethernet HWaddr 00:1e:c9:fa:25:8b
inet addr:192.168.0.13 Bcast:192.168.0.255 Mask:255.255.255.0
etc
etc
....

Já para a LANG=pt_BR.UTF-8, o resultado é o seguinte:

eth0 Link encap:Ethernet Endereço de HW 00:1e:c9:fa:25:8b
inet end.: 192.168.0.13 Bcast:192.168.0.255 Masc:255.255.255.0
etc
etc
....
O problema ocorre exatamente por causa da formatação da 2º linha: em inglês, a parte que queremos fica:
"inet addr:192.168.0.13" e em português fica: "inet end.: 192.168.0.13"

Note que no inglês não há espaço entre addr: e o número do IP e em português há.

Sendo assim, em inglês o IP está em $2 e em português está em $3

Adaptando os comandos, tanto o que passei quanto o criado pelo colega @jhonatanp fica o seguinte:

Para sistemas em inglês:

ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d: (comando que apresentei modificado: troquei o $3 por $2)
ifconfig | awk '/inet (end|addr).?:/ && !/127.0.0.1/ {print $2}'| cut -f2 -d: (comando do @jhonatanp modificado: acrescentei
o cut para retirar "addr:" do resultado; troquei o $3 por $2)

Em relação ao "hostname -i", ele é mais rápido e também outra alternativa.

Bom, como eu digo: "Vários caminhos para o mesmo destino!

[11] Comentário enviado por pdcassiano em 06/02/2015 - 08:29h


Muito bom o Post.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts