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.062 ]

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

Atualizando para KDE-3.2 usando o APT no SuSE 9

GSlapt - Gerenciando os pacotes de seu Slackware

Padrões Abertos e Interoperabilidade na Geotecnologia

LIRC - Linux Infrared Remote Control

Catalogando distribuições, usuários e ambientes para a melhor distribuição

  
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