Diário de um SysAdmin 2 - Truques | Macetes | Atalhos & Comandos

Dando continuidade à série de dicas Diário de um SysAdmin, inicio o segundo capítulo, ainda no contexto Dicas | Macetes | Atalhos & Comandos, com mais 5 humildes contribuições. Vale lembrar que a quinta dica sempre será um curiosidade do Shell, independentemente do contexto. Em especial, a curiosidade (Dica 5) desse capítulo é bem legal.

[ Hits: 17.270 ]

Por: Wellingthon Dias Queiroz - @tonyhts em 11/08/2015


Diário de um SysAdmin - Parte 2



Olá, pessoal! Dando continuidade à série de dicas "Diário de um SysAdmin", inicio o segundo capítulo, ainda no contexto Dicas | Macetes | Atalhos & Comandos, com mais 5 humildes contribuições.

Vale lembrar que a quinta dica sempre será um curiosidade do Shell, independentemente do contexto. Em especial, a curiosidade (Dica 5) desse capítulo é bem legal.

Em tempo, para quem não conferiu o capítulo 1, segue o link:

Dica 1 : Saltar rapidamente para o último diretório acessado

Quando usamos o terminal, navegamos por inúmeros diretórios, seja apenas visualizando ou até mesmo configurando, criando, apagando ou movendo arquivos, certo?

Às vezes, estamos em um determinado diretório fazendo algo e logo surge a necessidade de acessar um outro para configurar ou visualizar algum arquivo e então voltar ao diretório que estávamos. Isso, além de chato, é contraproducente.

A grande maioria, prefere ficar digitando o caminho absoluto para todos os comandos só para não precisar ficar saltando do diretório A para o B, depois do B para A, até porque, ficar digitando o caminho do diretório é igualmente chato e contraproducente. Concorda?

Então como resolver isso?

Simples, use o comando cd - (usado com o comando cd, o caractere " - " representa o último diretório acessado).

Exemplo real: você está no diretório "/home/nginx/localhost/public/moodle/blocks/" fazendo hardcoded em um bendito plug-in e percebe que não está rolando devido a alguma diretiva no NGinx, e não sabe ao certo em qual arquivo está essa bendita diretiva e, para piorar, se caso não estiver em nenhum arquivo, precisará criar um ".conf".

Para conseguir fazer isso do seu diretório atual, como falei acima, é tortura (hehe). Acho muito mais fácil e eficiente fazer assim:

cd /etc/nginx/sites-enabled/
/etc/nginx/sites-enabled $

Daí, executo os comandos que preciso e, para testar, eu volto ao diretório onde estava:

cd -
/home/nginx/localhost/public/moodle/blocks $

E se eu precisar voltar lá para configurar mais coisas, mando outro cd -:

cd -
/etc/nginx/sites-enabled $

Resuminho: você está no diretório A, dai vai para o B, para voltar ao A (último diretório acessado), execute: cd -

Bacana, não?

Dica 2: History time

Como vimos no capítulo anterior, rotineiramente, precisamos recorrer ao history para facilitar nossa vida. Mas, às vezes, precisamos ver e/ou reexecutar uma "sequência" de comandos que foi realizada tempos atrás e, claro, você não lembra a data exata e/ou não consegue identificar quando começou e terminou a sequência desejada.

O Ctrl+r ajuda, mas nesse caso não resolve 100% .
Mas, e se o history, além do comando, exibisse a data também?
Opa, aí sim! Então, 'bóra' implementar isso.

Rode o comando abaixo no terminal

HISTTIMEFORMAT="%d/%m/%y %T "

Agora, rode o history e pronto, estão aí os comandos executados e suas respectivas datas.

history

Pata entender melhor, veja abaixo:
Para definir permanentemente, faça assim:

echo 'export HISTTIMEFORMAT="%d/%m/%y %T " ' >> ~/.bashrc
source ~/.bashrc

Pronto! A partir de agora, o recurso estará implementado definitivamente.

Caso deseje voltar ao padrão (sem data), apague ou comente a seguinte linha no arquivo ~/.bashrc:

export HISTTIMEFORMAT="%d/%m/%y %T "

e reinicie ou recarregue as configurações.

Para apagar:

sed -i '/HISTTIMEFORMAT/d' ~/.bashrc

Para apenas desabilitar:

sed -i '/HISTTIMEFORMAT/ s/^/#/' ~/.bashrc

Recarregar:

source ~/.bashrc

Eu, particularmente, deixo desabilitado e só o uso quando realmente preciso.

Dica 3: Otimização inteligente de comandos II

Imagine que você precise criar vários diretórios e subdiretórios, seguindo uma hierarquia pré-determinada, porém, sem um padrão claro. Nada melhor do que um exemplo real para demonstrar isso:

Você recebe uma requisição assim:
  • Criar em "/var/www" 10 diretórios chamados siteN (1 à 10)
  • Dentro deles, as subpastas: config,js, img e php
  • Dentro de php, criar as pastas: css, code e bkp
  • Dentro de img, criar 30 subpastas (de x1 a x30)
  • Dentro de config e js, não deve conter nada.

Se usássemos o método padrão, seria torturador (rs). Seriam + de 900 mkdir's, + de 1000 cd's e pelo menos 2 horas. Poderíamos também criar uma estrutura na mão e depois copiar e renomear, mas mesmo assim, seriam pelo menos 40 minutos de sofrimento.

Acredito que assim é melhor:

mkdir -p /var/www/site{1..10}/{php/{css,code,bkp},config,js,img/x{1..30}}

Pronto!

Ainda no tema otimizações inteligentes de comandos, aqui vai um complemento da dica do capítulo 1. No exemplo, fizemos uma cópia do "apache2.conf" para "apache2.conf.bkp" usando o comando:

# cp /etc/apache2/apache2.conf{,.bkp}

Alguns 'brothers' aqui do fórum, após lerem o artigo, me perguntaram como faríamos para modificar parte do nome e não só adicionar algo no final. Respondendo, seria assim: vamos supor que precise criar uma copia do "apache2.conf" chamada "apa_old.bkp". Basta fazermos assim:

# cp /etc/apache2/apa{che2.conf,_old.bkp}

Pronto, você acabou de criar uma cópia do arquivo "apache2.conf" chamada "apa_old.bkp", com um comando eficiente e rápido.

Para fixarmos, vamos ver mais um exemplo real, só que agora usando o comando mv.

Você esta subindo um cms e após realizar as devidas configurações, precisa renomear o arquivo "config.sample.php" para "config.php".

Ao invés de fazermos assim:

mv /var/www/config.sample /var/www/config.php

Podemos fazer assim:

mv /var/www/config.{sample,php}

Com comandos eficientes, além de pouparmos tempo, dá uma sensação boa, nos sentimos mais poderosos. (rs)

Dica 4: Mais alguns truques e complementos

^errado^certo:

Imagine que você acabou de digitar e executar o seguinte comando:

tempo=300;lojas=100;lote=4;vezes=$(($lojas/$lote));contador=1 && for i in $(seq 1 $vezs);do for loja in $(seq $contador $(($contador+$lote - 1)));do ./lojas.sh $loja;contador=$(($contador+1));done && sleep $tempo;done

OK, ok. Dei uma exageradinha no tamanho do comando (rs). Mas é para fixar bem a importância da dica. (hehe)

Só que retorna erro, daí percebe que errou a digitação de algumas palavras (ao invés de vezes, escreveu vezs). Para corrigir isso, normalmente, apertaríamos a tecla pra cima de pois iríamos apertando a seta para esquerda, até que o cursor chegasse na palavra errada para então corrigi-la e por fim, reexecutar o comando. Certo?

Mas, e se fizéssemos assim:

^vezs^vezes

Pronto! Além de corrigir o comando, ele também o executa automaticamente.

Complementando a dica do capítulo 1 (Ctrl+ k/u) e adicionado mais uma, o Ctrl+y.

No capítulo 1, dica 4 (Atalhos Diversos) fiz a seguinte e errada definição:

Ctrl+k → apaga da posição atual do cursor até o fim da linha (direita).
Ctrl+u → apaga da posição atual do cursor até o começo da linha (esquerda).

A definição correta, é:
  • Ctrl+k e Ctrl+u :: RECORTA e não apaga.

Para o propósito do exemplo, OK a dica funciona, mas o certo é o certo.

Aproveitando o gancho, vamos para mais um atalho, o Ctrl+y.

Mesmo cenário: você está num server, portanto, sem X e mouse, digitou um comando e percebe que inverteu parte da lógica e precisa consertar isso. Vamos usar um exemplo real (dessa vez vou usar um curtinho - rs):

Você digitou:

ls -d | awk '{print$1}'| du -hm

E percebe que o bloco do du deve vir antes do bloco do awk. Como resolver sem apagar/redigitar?

R: Usando Ctrl+u e Ctrl+y

Posicione o cursor antes do caractere pipe | do du , aperte Ctrl+k (isso vai recortar tudo que estiver à direita do cursor) depois posicione o cursor antes do pipe " | " do awk e aperte Ctrl+y (isso vai colar o conteúdo que acabou de recortar).

Pronto! Problema resolvido. Em um comando curto, talvez não pareça tão útil, mas em comando grande, salva a pele.

Dica 5: Curiosidades STAR WARS no Shell !!??

Que tal assistir Star Wars no Shell? Isso mesmo, em modo texto!

Sem mais delongas, vamos à dica. Pegue a pipoca, se acomode confortavelmente e execute o comando abaixo:

telnet towel.blinkenlights.nl

Para nerds como eu, isso é no mínimo, bem legal! ;)

Conclusão

Bom, é isso ai pessoal. Chegamos ao fim de mais um capítulo.

Espero que tenham gostado!

Tenham um ótimo dia!

Abração,
@Tonyhts.

   

Páginas do artigo
   1. Diário de um SysAdmin - Parte 2
Outros artigos deste autor

Diário de um SysAdmin 1 - Truques | Macetes | Atalhos & Comandos

Leitura recomendada

Instalando Free Pascal Compiler no Ubuntu

Migrando para Linux sem medo (parte 2)

Iniciação no Linux sem medo usando VMWare

Criando uma ajuda mais aprimorada

Lidando com compactação de arquivos no Linux

  
Comentários
[1] Comentário enviado por fabio em 11/08/2015 - 14:47h

A série de artigos está muito boa, parabéns!

[2] Comentário enviado por tonyhts em 11/08/2015 - 15:09h


[1] Comentário enviado por fabio em 11/08/2015 - 14:47h

A série de artigos está muito boa, parabéns!


Opa! Valew Fábio!
abs

[3] Comentário enviado por sacioz em 11/08/2015 - 15:44h


^D pressai tbm , muita valia as noções .
[ ]s

[4] Comentário enviado por jpvr2005 em 11/08/2015 - 16:55h

Parabéns, muito bom e útil essas suas dicas!

[5] Comentário enviado por tonyhts em 11/08/2015 - 18:29h


[3] Comentário enviado por sacioz em 11/08/2015 - 15:44h


^D pressai tbm , muita valia as noções .
[ ]s

Obrigado!
abs

[6] Comentário enviado por tonyhts em 11/08/2015 - 18:30h


[4] Comentário enviado por jpvr2005 em 11/08/2015 - 16:55h

Parabéns, muito bom e útil essas suas dicas!


Obrigado!
abs

[7] Comentário enviado por removido em 11/08/2015 - 19:49h

Olá. Parabéns pelo artigo.

Esses comandos de Ctrl+Letra na linha de comando tem a ver com configuração de editor de texto no prompt do BASH?
Eu não pesquisei mas notei uma semelhança com o nano. Essa suposta configuração parece com o visudo, que pode ser configurado tanto com o vim como com o nano.
--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[8] Comentário enviado por tonyhts em 11/08/2015 - 21:12h


[7] Comentário enviado por listeiro_037 em 11/08/2015 - 19:49h

Olá. Parabéns pelo artigo.

Esses comandos de Ctrl+Letra na linha de comando tem a ver com configuração de editor de texto no prompt do BASH?
Eu não pesquisei mas notei uma semelhança com o nano. Essa suposta configuração parece com o visudo, que pode ser configurado tanto com o vim como com o nano.
--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Fala mestre! Obrigado!

Então, são atalhos independentes, mas coincidentemente alguns possuem a mesma função (talvez por cultura dos programadores afim de "padronizar" ? ) . No nano, por exemplo, o Ctrl + k copia a linha e o Ctrl + U, cola.
Para usar os atalhos do vi no bash, acho que o comando é [code]set -o vi[/code]. emacs tbm róla.

Eu, particularmente não uso muito os atalhos do vi, somente ( / , YY, pp).

Curto atalhos em geral, depois que se acostuma com eles, fica prático pacas.

abs

[9] Comentário enviado por removido em 12/08/2015 - 16:38h

Mestre? HEHEHE.
Ainda vai demorar um pouco.
Mas estudando bons artigos eu chego lá!
Parabéns de novo.

--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden

[10] Comentário enviado por tucamenezes em 04/11/2015 - 23:57h

Comando: Ctrl+u (apaga e copia o que está ao lado esquerdo do Cursor)
Comando: Ctrl+y (cola o conteúdo do Ctrl+u)

Era justamente isso que eu estava procurandoo!! Valeeeeww!!

[11] Comentário enviado por tonyhts em 05/11/2015 - 06:39h


[10] Comentário enviado por tucamenezes em 04/11/2015 - 23:57h

Comando: Ctrl+u (apaga e copia o que está ao lado esquerdo do Cursor)
Comando: Ctrl+y (cola o conteúdo do Ctrl+u)

Era justamente isso que eu estava procurandoo!! Valeeeeww!!


Noix!

abs

[12] Comentário enviado por Buckminster em 28/01/2016 - 22:16h

Excelente, tanto a parte 1 quanto a parte 2.
No aguardo das próximas partes.

[13] Comentário enviado por tonyhts em 30/01/2016 - 14:29h

Opa! Valew.

Tinha até desencanado de escrever o resto. rsr Vou me organizar e dar continuidade!

Abração!

---
Eu Acredito, que ás vezes são as pessoas que ninguém espera nada que fazem as coisas que ninguém consegue imaginar.

--- Mestre dos Mestres - Alan Turing ---

[14] Comentário enviado por tonyhts em 03/02/2016 - 23:22h


[12] Comentário enviado por Buckminster em 28/01/2016 - 22:16h

Excelente, tanto a parte 1 quanto a parte 2.
No aguardo das próximas partes.


Opa! Valew.

Tinha até desencanado de escrever o resto. rsr Vou me organizar e dar continuidade!

Abração!

[15] Comentário enviado por mastergbi em 08/05/2019 - 12:07h

Muito bom, estava meio parado, estou voltando as "telas negras" novamente... e estou adorando suas "humildes contribuições" rs!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts