A boa notícia é que os desenvolvedores também podem aprender alguns truques da terra das operações para tornar seus dias mais fáceis e seu trabalho melhor.
Um terminal nunca é apenas um terminal. Um prompt elaborado pode significar que alguém se empenha profundamente na otimização das ferramentas que usa, enquanto as informações nele contidas podem dar uma ideia do tipo de engenharia que ela fez. O que você digita na linha de comando pode informar sobre variáveis de ambiente, configurações ocultas e padrões de sistema operacional que você nunca conheceu. Você pode fazê-lo falar taquigrafia conhecido apenas por seu terminal e por você. E tudo isso pode ajudá-lo a trabalhar com mais eficiência e eficácia.
Bash (um termo usado tanto para o shell Unix quanto para a linguagem de comando; estarei usando o segundo significado nesta postagem) geralmente é uma habilidade mencionada apenas em descrições de trabalho para engenheiros de confiabilidade de site e outros trabalhos operacionais. Esses mesmos postos de trabalho muitas vezes pedem habilidades de automação, o que é uma forma positiva de solicitar alguém que seja profissionalmente preguiçoso de uma forma que resulte em eficiência. A boa notícia é que os desenvolvedores também podem aprender alguns truques da terra das operações para tornar seus dias mais fáceis e seu trabalho melhor.
Seu próprio terminal pessoal (ized)
Existem muitas maneiras de personalizar o prompt da linha de comando e o terminal para torná-lo mais eficiente no trabalho. Começaremos com possivelmente o mais poderoso: conheça ~/.bashrce ~/.bash_profile.
Este arquivo existe com vários nomes diferentes, dependendo do seu sistema operacional e do que você está tentando realizar, e pode conter muitas coisas que podem tornar sua vida mais fácil: apelidos mais curtos para comandos comuns, seu PATH personalizado , funções Bash para preencher seu prompt com informações do ambiente, comprimento do histórico, conclusão da linha de comando, editores padrão e muito mais. Com um pouco de observação de seus hábitos de terminal (e um pouco de conhecimento de Bash , a linguagem de comando usada em muitos terminais), você pode colocar aqui todos os tipos de coisas que tornarão sua vida mais fácil.
O arquivo que você usa depende do seu sistema operacional. Esta postagem fornece um resumo das finalidades e compensações dos dois arquivos. Se você usa um Mac, use ~/.bash_profile. Execute source ~/.bash_profiledepois de salvar suas alterações, para que elas fiquem ativas em seu terminal (ou apenas feche a janela do terminal e abra uma nova).
O que mais você deve colocar em seu novo arquivo lindamente personalizado? Vamos começar com aliases.
Ao automatizar as coisas no trabalho de operações, observo as operações que faço mais do que algumas vezes, faço anotações sobre o que fiz e as coloco em uma lista de prováveis idéias de script. Assim que estiver claro, farei isso de novo e de novo, sei que vale a pena colocar uma solução no código. Você pode fazer a mesma coisa com seus próprios hábitos. Que comandos você está digitando o tempo todo? Quais valores você usa com frequência? Todos podem ser apelidos.
Por exemplo, git commite git checkoutpode se tornar gc e gco (ou o que quer que corresponda ao seu mapa mental de abreviações). Mas você pode ir além, criando aliases de comandos longos com muitos sinalizadores e argumentos. Veja como fazer um:
alias $preferredAlias='$commandToAlias'
aliasé o comando Bash aqui (você também pode criar um alias diretamente na linha de comando, e ele só estará disponível para aquela sessão até você fechar o terminal). $preferredAliasé o seu nome agradável e curto para $commandToAliaso comando mais longo e complicado que você está digitando o tempo todo. Sem espaços ao redor do = e não se esqueça das aspas simples ao redor do comando que você está criando. Você também pode encadear comandos usando . Você já se sentou ao lado de alguém cuja navegação de linha de comando era completamente opaca porque eles otimizaram seu trabalho em uma enxurrada de apelidos curtos? Agora você também pode ser essa pessoa.
Aqui estão alguns que uso:
mkcd='mkdir $1 cd $1'(consolidando um par comum de operações; o $ 1 leva o primeiro argumento, neste caso o novo arquivo no qual você deseja cd)
tfplan='terraform init terraform plan' (evitando um erro comum para mim; isso pode ser usado para encadear quaisquer dois comandos comumente emparelhados)
Se você trabalha com freqüência em diferentes sistemas operacionais (vários sabores de Linux, Mac OS), pode ir um pouco além criando vários dotfiles personalizados que atribuem comandos ligeiramente diferentes que realizam a mesma coisa para o mesmo alias. Chega de se lembrar das diferenças mínimas que só aparecem a cada um ou dois meses - são os mesmos personagens onde quer que você esteja. Se você está propenso a erros de ortografia nos comandos (olhando para você gerp), também pode criar um atalho para eles.
Agora vamos examinar outra capacidade dos dotfiles: personalizar seu prompt.
Uma fonte constante de verdade na linha de comando
O prompt do terminal é um dos lugares onde você pode ser mais gentil consigo mesmo, colocando o que você precisa nele para não ter que digitar pwdo tempo todo ou se perguntar exatamente há quanto tempo você digitou aquele comando fatídico. No mínimo, sugiro adicionar um carimbo de data / hora com minutos; dessa forma, se você precisar voltar atrás no trabalho recente para vincular a causa ao efeito, poderá ancorar com precisão o tempo de uma ação com o mínimo de trabalho. Além disso, também sugiro adicionar seu diretório de trabalho e o branch git atual. Minha ferramenta preferida para configurar isso de forma econômica é o EzPrompt , que permite arrastar e soltar os elementos de prompt desejados e retorna o Bash que você precisa adicionar ~/.bash_profile. É um bom começo simples quando você está cultivando seus dotfiles.
Se você quiser se envolver um pouco mais, pode tentar algo como o Powerline , que parece elegante e oferece mais informações de status de envolvimento. E se você quiser fazer o seu próprio, aprenda sobre como trabalhar com cores no terminal e os elementos que você pode adicionar ao seu prompt . Há toda uma galáxia de opções por aí, e Terminals Are Sexy fornece orientação para algumas das constelações que você pode explorar. A personalização feita à mão é uma ótima maneira de se acostumar com a sintaxe do Bash. Se você deseja fazer algo mais complexo com um comando mais extenso, o Pipeline fornece um ambiente interativo para ajudá-lo a refinar sua saída, mostrando o que seu comando produz conforme você o edita.
Depois de obter seu arquivo como deseja, execute a etapa extra de criar um repositório dotfiles pessoal. Mantenha-o limpo (sem chaves, tokens ou senhas) e você terá acesso seguro ao seu prompt familiar e a quaisquer outras configurações que adore em cada novo computador em que trabalhar.
Você fez seu prompt seu amigo. A seguir, vamos ver como tornar o que vem depois disso também em um aliado.
A abordagem suficiente para aprender Bash
Bash pode ser muito, mesmo quando você lida com isso todos os dias (especialmente se parte do código-base vier de alguém com aversão a comentários). Nem todo desenvolvedor deve conhecer o Bash, mas todo desenvolvedor se beneficiará em saber pelo menos algum. No mínimo, ajuda a entender exatamente o que está acontecendo quando você usa algum wgetcomando longo e colado para instalar um novo programa.
A boa notícia é que, com algumas estratégias, você pode navegar na maior parte do Bash que provavelmente encontrará sem precisar se tornar um especialista. Uma das minhas ferramentas favoritas é o Explainshell . Pode ser difícil obter uma explicação boa, sucinta e completamente relevante para o que significa um comando Bash de amostra, especialmente quando você obtém quatro ou cinco sinalizadores profundamente nele. As páginas de manual são sempre um bom lugar para começar, mas o Explainshell é um excelente complemento. Cole o seu comando e o site divide cada parte para que você realmente saiba o que aquela longa sequência de comandos e sinalizadores daquela sessão de perguntas e respostas de sete anos atrás faz.
Às vezes, metade do trabalho de navegar na linha de comando é descobrir quais subcomandos estão disponíveis. Se você está lidando com uma ferramenta complexa (olhando para você, AWS CLI ) e se pega consultando os documentos com mais frequência do que gostaria, reserve um minuto para pesquisar um recurso de preenchimento automático para ele. Às vezes, o autocomplete está disponível como um pacote separado, mas ainda oficial; outras vezes, um terceiro fez sua própria ferramenta complementar. Essa é uma das alegrias da linha de comando: você raramente encontrará um problema que seja exclusivo de você, e há uma boa chance de alguém ter entrado em ação e corrigido o problema.
Se você acabar continuando a trabalhar com linha de comando (e espero que continue), familiarizar-se com pipes desmistifica muito desse trabalho. Um pipe no Linux é quando você usa o |símbolo para encadear comandos, canalizando a saída de um para outro. No Unix e no Linux, cada ferramenta foi projetada para fazer uma coisa bem, e essas ferramentas individuais podem então ser encadeadas conforme necessário para satisfazer necessidades mais complexas. Essa é uma estratégia que uso muito, principalmente quando preciso criar e filtrar a saída no terminal.
Meu pipe mais comum envolve adicionar | grep -i $searchTermdepois de um comando com saída longa. Prefiro não selecionar manualmente, se estou procurando apenas uma coisa. (Você pode usar -Ae -Badicionar linhas antes e depois do contexto, com o número de linhas que deseja como parâmetro após cada sinalização. Consulte a página man do grep para saber mais.)
Também útil: canalizar a saída para less, o que é melhor se eu quiser rolar por toda a saída ou pelo menos navegar e pesquisar dentro do arquivo aberto, usando /$searchTerm, npara ver a próxima entrada e Npara ver a anterior. Você também pode usar cutou awkpara manipular a saída, o que é particularmente útil se você precisar criar um arquivo dessa saída com um formato muito específico. E se você estiver analisando muito a saída JSON, familiarizar-se com o jq pode economizar algum tempo.
Vejamos algumas das outras conveniências que a linha de comando oferece. sudo !!repete o comando anterior com sudocolado na frente dele. (O !!é a abreviação Unix / Linux para "o comando anterior" e pode ser usado em outras situações também.) Portanto, se você executou algo bastante complexo, mas esqueceu que precisava de permissões de nível de raiz, apenas use sudo !!. Da mesma forma útil:, !$que fornece o valor do primeiro argumento do comando anterior, portanto, ls ~/Desktope cd !$mostraria os arquivos ~/Desktope o moveria para esse diretório. E se você precisar retornar ao diretório anterior e não se lembrar de todo o caminho, basta digitar cd -para fazer o backup de um cdmovimento.
Navegação mais rápida em texto
Aqui está uma coisa aparentemente simples que aprendi há alguns anos e que regularmente surpreende até mesmo os engenheiros de longa data. Você sabia que pode clicar no meio de uma linha em seu terminal? Clique com a tecla Alt para mover o cursor para onde você precisa ir. Ainda requer que você mova suas mãos para fora do teclado, por isso é um pouco desajeitado em comparação com alguma navegação de teclado. Mas é uma ferramenta útil e estranhamente impressionante - surpreendi as pessoas ao fazer isso na frente delas e tive a alegria de compartilhar com elas. Agora você também sabe.
Os métodos de atalho do teclado para mover o cursor podem ser igualmente impressionantes. Você pode aproveitar muito os atalhos de teclado do terminal (para não falar sobre como tornar seu trabalho um pouco mais fácil). Você pode pular para o início ou fim da linha com ctrl-A ou E, cortar a linha do cursor até o início da linha com ctrl-U ou deletar a palavra anterior com ctrl-W. Esta é a longa lista de atalhos de teclado da Apple para o terminal, que geralmente funcionam em uma linha de comando do Linux também. Eu sugiro escolher um casal que você deseja adotar, escrevendo-os em um post-it e colocando-o no seu monitor, e se obrigando a fazê-lo da nova maneira até que pareça natural. Em seguida, passe para os próximos comandos que você deseja comprometer com a memória muscular e, em breve, você também poderá ser muito eficiente ... é muito confuso observar aqueles que não trabalham dessa maneira. (Mas então você começa a fazer o tipo de coisa que lhes ensina o que acabou de aprender, e o ciclo continua.)
Viagem no tempo, estilo terminal
Se você precisa apenas se referir ao seu último comando, !!ou apenas as setas para cima e para baixo são opções excelentes e diretas. Mas e se você precisar se aprofundar no passado? Para pesquisar o histórico do terminal, digite ctrl-R e comece a digitar. Quer ver tudo? Basta digitar history.
O padrão do Mac é 500 entradas de histórico, o que não é muito para um terminal muito usado. Você pode verificar a duração do seu histórico com echo $HISTFILESIZE. Quer aumentar sua retenção? É hora de editar ~/.bash_profilenovamente. Basta definir HISTSIZEe HISTFILESIZEpara um número muito grande - 10000000 é uma boa opção. Adicionar export HISTSIZE=10000000e export HISTFILESIZE=10000000em ~/.bash_profile(e não se esqueça de source ~/.bash_profilenovamente ou de abrir uma nova janela de terminal para que tenha efeito). Para mais detalhes sobre a diferença entre essas duas variáveis, verifique a resposta aceita aqui .
Agora que sua história é (mais) infinita, pode ser bom saber como limpá-la. Ele ~/.bash_historyfica em , o que significa que você pode excluí-lo totalmente com rm ~/.bash_history.
Mas vamos examinar algumas das outras informações acessíveis por meio da linha de comando: variáveis de ambiente.
Valores ocultos do seu terminal: revelados!
As variáveis de ambiente podem vir de muitos lugares diferentes. Alguns são apenas parte do seu sistema operacional; você pode ver alguns comuns aqui . Outros podem ser colocados em prática por meio de ~/.bash_profilequando você os define por conta própria no terminal ou por meio de configuração ou outros arquivos executados em seu sistema. É rápido e fácil digitar echo $varNameno terminal e ver se um valor específico está definido, mas e se você não souber quais variáveis foram definidas? É aí set, printenve envvêm em.
Esses três programas se sobrepõem a alguns na saída, mas não são idênticos. Aqui está um resumo rápido:
set é mais completo e incluirá variáveis que você configurou, além das inerentes ao seu ambiente.
printenve envoferece saída semelhante de variáveis de ambiente integradas, mas envtem recursos mais robustos além printenvdos propósitos simples de exibição, incluindo a execução de um programa em um ambiente modificado. A resposta aceita aqui fornece um histórico profundo sobre a existência de ambos os comandos e como e por que eles diferem.
Você provavelmente obterá o que precisa com o conjunto. A saída é mais longa, o que significa que é mais provável que você precise canalizar para grep ou menos, mas também é mais provável que encontre o que procura.
Melhor vida através de habilidades operacionais
Você aprendeu como personalizar sua linha de comando e torná-la mais amigável para solução de problemas. Você aprendeu como descobrir valores surpresa escondidos em suas variáveis de ambiente local. Você aprendeu como se parecer com um assistente com apelidos e atalhos de teclado. E aposto que você pode começar a espalhar a boa palavra de ~/.bash_profile. Há mais truques do Bash e do terminal do que descrevemos aqui, mas você pode descobrir online - ou apenas peça ao seu engenheiro de operações local amigável para tomar um café e perguntar a ele qual é a personalização de terminal favorita. Você provavelmente aprenderá mais do que espera.
O Avance Network é uma comunidade fácil de usar que fornece segurança de primeira e não requer muito conhecimento técnico. Com uma conta, você pode proteger sua comunicação e seus dispositivos. O Avance Network não mantém registros de seus dados; portanto, você pode ter certeza de que tudo o que sai do seu dispositivo chega ao outro lado sem inspeção.