Exemplos úteis de linha de comando bash e exemplos de truques - Parte 1

Exemplos úteis de linha de comando bash e exemplos de truques - Parte 1

A linha de comando Bash fornece poder quase ilimitado quando se trata de executar quase tudo o que você deseja fazer. Seja processando um conjunto de arquivos, editando um conjunto de documentos, lidando com big data, gerenciando um sistema ou automatizando uma rotina, o Bash pode fazer tudo. Esta série, da qual hoje apresentamos a primeira parte, certamente o armará com as ferramentas e métodos que você precisa para se tornar um usuário de bash muito mais proficiente. Mesmo os usuários já avançados provavelmente vão pegar algo novo e emocionante. Aproveitar!

Neste tutorial, você aprenderá:

  • Dicas úteis da linha de comando Bash, truques e métodos
  • Como interagir com a linha de comando Bash de maneira avançada
  • Como aprimorar suas habilidades de bash em geral e se tornar um usuário de bash mais proficiente
Exemplos úteis de linha de comando bash e exemplos de truques - Parte 1

Requisitos de software e convenções usadas

Requisitos de software e convenções de linha de comando Linux
Categoria Requisitos, convenções ou versão de software usada
Sistema Independente da distribuição Linux
Programas Linha de comando Bash, sistema baseado em Linux
Outro Vários utilitários que estão incluídos no shell de bash por padrão ou podem ser instalados usando sudo apt-get Install-name (onde o nome da ferramenta representa a ferramenta que você gostaria de instalar)
Convenções # - requer que os comandos linux -comidos sejam executados com privilégios de raiz diretamente como usuário root ou por uso de sudo comando
$-exige que o Linux-Commands seja executado como um usuário não privilegiado regular

Exemplo 1: veja quais processos estão acessando um determinado arquivo

Você gostaria de saber quais processos estão acessando um determinado arquivo? É fácil fazer isso usando o fusor de comando interno do Bash:

$ fuser -a/usr/bin/gnome-calculator/usr/bin/gnome-calculator: 619672e 
$ ps -ef | Grep 619672 | Grep -v Grep ABC 619672 3136 0 13:13 ? 00:00:01 Gnome-Calculator 


Como podemos ver, o arquivo /usr/bin/gnome-calculator (um binário), está atualmente sendo usado pelo processo com ID 619672. Verificando esse ID do processo usando ps, Logo descobrimos aquele usuário abc iniciou a calculadora e o fez às 13:13.

O e atrás do PID (ID do processo) é indicar que este é um executável sendo executado. Existem vários outros qualificadores, e você pode usar Man Fuser vê-los. Esta ferramenta do fusor pode ser poderosa, especialmente quando usada em combinação com LSOF (um ls de arquivos abertos):

Digamos que estamos depurando um computador remoto para um usuário que está trabalhando com uma área de trabalho do Ubuntu padrão. O usuário iniciou a calculadora e agora sua tela inteira em congelamento. Agora, queremos matar remotamente todos os processos que se relacionam de alguma forma com a tela bloqueada, sem reiniciar o servidor, para que esses processos sejam significativos.

# lsof | Calculadora Grep | Grep "Compartilhar" | Cabeça -n1 xdg-deskt 3111 abc Mem Reg 253,1 3009 12327296/usr/share/loce-langpack/en_au/lc_messages/gnome-calculator.MO 
# fuser -a/usr/share/loce-langpack/en_au/lc_messages/gnome-calculator.mo/usr/share/loce-langpack/en_au/lc_messages/gnome-calculator.MO: 3111m 3136m 619672m 1577230m 
# ps -ef | grep -e "3111 | 3136 | 619672 | 1577230" | Grep -v Grep ABC 3111 2779 0 Aug03 ? 00:00:11/usr/libexec/xdg-desktop-portal-gtk ABC 3136 2779 5 Aug03 ? 03:08:03/usr/bin/gnome-shell ABC 619672 3136 0 13:13 ? 00:00:01 Gnome-Calculator ABC 1577230 2779 0 Aug04 ? 00:03:15/usr/bin/Nautilus-Gapplication-Service 

Primeiro, localizamos todos os arquivos abertos em uso pela calculadora usando LSOF. Para manter a saída curta, listamos apenas o resultado superior para um único arquivo compartilhado. Em seguida, usamos o FUSER para descobrir quais processos estão usando esse arquivo. Isso nos forneceu os PIDs. Finalmente pesquisamos usando um ou (|) baseado no Grep para descobrir quais nomes de processo reais. Podemos ver que, enquanto a calculadora foi iniciada às 13:13, os outros processos estão funcionando há mais tempo.

Em seguida, poderíamos emitir, por exemplo, um Mate -9 619672 e verifique se isso resolveu o problema. Caso contrário, podemos tentar o processo 1577230 (o gerenciador de arquivos Nautilus compartilhado), processo 3136 (a concha abrangente), ou finalmente processar 3111, Embora isso provavelmente matasse uma parte significativa da experiência da área de trabalho do usuário e possa não ser fácil de reiniciar.

Exemplo 2: Debugando seus scripts

Então você escreveu um ótimo script, com muito código complexo, depois o executa ... e veja um erro na saída, que à primeira vista não faz muito sentido. Mesmo depois de depurar por um tempo, você ainda está preso ao que aconteceu enquanto o script estava executando.

Bash -x para o resgate! Bash -x permite executar um teste.sh script e veja exatamente o que acontece:

#!/bin/bash var1 = "hello linuxconfig.leitores de organização!"Var2 =" ---------------------------- "echo $ var1 echo $ var2 
cópia de

Execução:

$ Bash -x ./teste.sh + var1 = "Hello LinuxConfig.leitores de organização!" + Var2 = ---------------------------- + eco olá linuxconfig.Org 'Readers!'Olá LinuxConfig.leitores de organização! + eco ------------------------------ ------------------------------ 

Como você pode ver, o Bash -x Comando nos mostrou exatamente o que aconteceu, passo a passo. Você também pode enviar a saída deste comando para um arquivo facilmente anexando 2> & 1 | tee my_output.registro para o comando:

$ Bash -x ./teste.SH 2> & 1 | tee my_output.log… mesmo saída… $ cat my_output.log + var1 = "hello linuxconfig.leitores de organização!" + Var2 = ---------------------------- + eco olá linuxconfig.Org 'Readers!'Olá LinuxConfig.leitores de organização! + eco ------------------------------ ------------------------------ 


O 2> & 1 enviará o stderr (Erro padrão em saída: quaisquer erros vistos durante a execução) para stdout (Saída padrão: definido pouco aqui como a saída que você costuma ver no terminal) e capturar toda a saída de Bash -x. O Tee O comando capturará toda a saída de stdout, e escreva no arquivo indicado. Se você quiser anexar um arquivo (e não começar de novo com um arquivo vazio), você pode usar Tee -a onde o -a a opção garantirá que o arquivo seja anexado a.

Exemplo 3: Um Gotcha Comum: Sh -x != Bash -x

O último exemplo nos mostrou como usar Bash -x, Mas também poderíamos usar sh -x? A tendência de alguns usuários mais novos de bash pode ser executar sh -x, Mas este é um erro de novato; sh é uma concha muito mais limitada. Enquanto Bash é baseado em sh, tem muitas mais extensões. Assim, se você usar sh -x Para depurar seus scripts, você verá erros estranhos. Quero ver um exemplo?

#!/bin/bash test = "abc" se [["$ test" == * "b" *]]; Então ecoar!"Fi 
cópia de

Execução:

$ ./teste.s sim, lá dentro! 
$ Bash -x ./teste.SH + teste = ABC + [[ABC == * \ b *]] + eco 'sim, lá, lá!'Sim, lá! 
$ sh -x ./teste.SH + teste = ABC + [[ABC == * B *]] ./teste: 4: [[: não encontrado 

Aqui você pode ver um pequeno script de teste teste.sh que quando executado verifica se uma determinada letra (b) aparece em uma certa string de entrada (conforme definido pelo TESTE variável). O script funciona muito bem, e quando usamos Bash -x Podemos ver as informações apresentadas, incluindo a saída, parece correta.

Em seguida, usando sh -x As coisas dão significativamente errado; o sh Shell não pode interpretar [[ e falha tanto no sh -x saída e na própria execução do script. Isso ocorre porque a sintaxe avançada implementada em Bash não existe em sh.

Exemplo 4: Uniq ou não - essa é a pergunta!

Você já quis classificar um arquivo e listar apenas as entradas exclusivas? À primeira vista, isso parece ser um exercício fácil usando o comando Bash incluído Uniq:

$ CAT Entrada.txt 1 2 2 3 3 3 
$ CAT Entrada.txt | Uniq 1 2 3 

No entanto, se modificarmos um pouco o nosso arquivo de entrada, encontramos problemas de exclusividade:

$ CAT Entrada.txt 3 1 2 3 2 3 3 3 
$ CAT Entrada.txt | Uniq 3 1 2 3 2 3 


Isto é porque Uniq Por padrão, vontade Filtrar linhas correspondentes adjacentes, com linhas correspondentes sendo mescladas para a primeira ocorrência Enquanto o Uniq Manual esclarece. Ou em outras palavras, apenas linhas que são exatamente as mesmas que as anteriores serão removidas.

No exemplo, isso pode ser visto pelos últimos três 3 linhas sendo condensadas em um único 'único' 3. Provavelmente, isso é utilizável apenas em um número limitado e casos de uso específicos.

No entanto, podemos ajustar Uniq um pouco mais longe para nos dar apenas entradas verdadeiramente únicas usando o -você parâmetro:

$ CAT Entrada.txt # Observe que os símbolos ' #' foram adicionados após a execução, para esclarecer algo (leia abaixo) 3 # 1 # 2 # 3 # 2 # 3 3 3 
$ CAT Entrada.txt | Uniq -u 3 1 2 3 2 

Ainda parece um pouco confuso, certo? Olhe atentamente para a entrada e saída e você pode ver como apenas as linhas são individualmente único (como marcado por # no exemplo acima após a execução) são emitidos.

Os últimos três 3 linhas não são produzidas como não são exclusivo Como tal. Esse método de singularidade novamente teria aplicabilidade limitada nos cenários do mundo real, embora possa haver alguns casos em que seja útil.

Podemos obter uma solução mais adequada para a singularidade usando uma ferramenta integrada de bash ligeiramente diferente; organizar:

$ CAT Entrada.txt 1 2 2 3 3 3 
$ CAT Entrada.txt | classificar -u 1 2 3 
VOCÊ SABIA?
Você pode omitir o gato comando nos exemplos acima e forneça arquivo a Uniq ou organizar para ler diretamente? Exemplo:classificar -u entrada.TXT

Ótimo! Isso é utilizável em muitos scripts onde gostaríamos de uma verdadeira lista de entradas exclusivas. O benefício adicional é que a lista é bem classificada ao mesmo tempo (embora possamos ter preferido usar o -n opção para classificar também para classificar em uma ordem numérica de acordo com o valor numérico de string).

Conclusão

Há muita alegria em usar o Bash como sua linha de comando Linux preferida. Neste tutorial, exploramos uma série de dicas e truques úteis da linha de comando Bash. Este é o pontapé inicial de uma série cheia de exemplos de linha de comando BASH que, se você seguir, ajudará você a se tornar muito mais avançado na e com a linha de comando e shell do Bash!

Deixe -nos saber seus pensamentos e compartilhar algumas de suas próprias dicas legais de linha de comando Bash, truques e pegados abaixo!

  • Exemplos úteis de linha de comando bash e exemplos de truques - Parte 1
  • Exemplos úteis de linha de comando bash e exemplos de truques - Parte 2
  • Exemplos úteis de linha de comando BASH - Parte 3
  • Exemplos úteis de linha de comando Bash e truques - Parte 4
  • Exemplos úteis de linha de comando BASH - Parte 5

Tutoriais do Linux relacionados:

  • Exemplos úteis de linha de comando BASH - Parte 3
  • Exemplos úteis de linha de comando bash e exemplos de truques - Parte 2
  • Exemplos úteis de linha de comando Bash e truques - Parte 4
  • Uma introdução à automação, ferramentas e técnicas do Linux
  • Ubuntu 20.04 truques e coisas que você pode não saber
  • Exemplos úteis de linha de comando BASH - Parte 5
  • Manipulação de big data para diversão e lucro Parte 1
  • Dicas e truques da linha de comando Bash
  • Ubuntu 20.04 Guia
  • Loops aninhados em scripts de basquete