O material que publicamos hoje é destinado àqueles que desejam dominar o terminal Linux. Saber usar essa ferramenta de forma eficiente pode economizar muito tempo. Em particular, discutiremos a shell Bash e 21 comandos úteis. Também falaremos sobre como usar opções de comando e aliases Bash, que permitem acelerar a inserção de instruções longas.
→
Termos
Durante o aprendizado do funcionamento do terminal Linux, você pode se deparar com muitos conceitos que será útil entender. Alguns deles, como 'Linux' e 'Unix', ou 'shell' e 'terminal', às vezes são confundidos. Vamos falar sobre esses e outros termos importantes.
é um sistema operacional popular que foi desenvolvido nos laboratórios Bell na década de 1970. Seu código era fechado.
é o sistema operacional semelhante ao Unix mais popular. Hoje em dia, é usado em muitos dispositivos, incluindo computadores.
(terminal), ou emulador de terminal — é um programa que dá acesso ao sistema operacional. É possível abrir várias janelas de terminal ao mesmo tempo.
(shell) — é um programa que permite enviar comandos ao sistema operacional, escritos em uma linguagem especial.
significa Bourne Again SHell. Esta é a linguagem de shell mais comum, utilizada para interagir com o sistema operacional. Além disso, o shell Bash é usado por padrão no macOS.
(Command Line Interface, CLI) — é uma forma de interação entre humano e computador, onde o usuário digita comandos no teclado e o computador, ao executar esses comandos, retorna mensagens para o usuário em formato de texto. A CLI é principalmente usada para obter informações atualizadas sobre certas entidades, como arquivos, e para trabalhar com arquivos. A interface de linha de comando deve ser diferenciada da interface gráfica do usuário (Graphical User Interface, GUI), na qual a interação é principalmente realizada com o mouse. A interface de linha de comando é frequentemente chamada simplesmente de linha de comando.
(script) — é um pequeno programa que contém uma sequência de comandos de shell. Scripts salvam em arquivos e podem ser reutilizados diversas vezes. Ao escrever scripts, você pode usar variáveis, estruturas condicionais, loops, funções e outras funcionalidades.
Agora que consideramos os termos importantes, quero observar que aqui usarei os termos 'Bash', 'shell' e 'linha de comando' de forma intercambiável, assim como os conceitos de 'diretório' (directory) e 'pasta' (folder).
Padrões , que usaremos aqui — são a entrada padrão (standard input, stdin), saída padrão (standard output, stdout) e saída de erro padrão (standard error, stderr).
Se você encontrar nos exemplos de comandos listados abaixo algo como my_whatever — isso significa que esse fragmento deve ser substituído por algo seu. Por exemplo — o nome de um arquivo.
Agora, antes de começarmos a analisar os comandos que estão dedicados a este material, vamos dar uma olhada na lista deles e nas suas breves descrições.
21 comandos Bash
▍Obter informações
man: exibe o manual do usuário (ajuda) para o comando.pwd: exibe informações sobre o diretório atual.ls: exibe o conteúdo de um diretório.ps: permite visualizar informações sobre processos em execução.
▍Manipulações no sistema de arquivos
cd: muda o diretório de trabalho.touch: cria um arquivo.mkdir: cria um diretório.cp: copia um arquivo.mv: move ou renomeia um arquivo.ln: cria um link.
▍Redirecionamento de entrada/saída e pipelines
<: redirecionamentostdin.>: redirecionamentostdout.|: redirecionamento usando um pipeline da saída de um comando para a entrada de outro comando.
▍Leitura de arquivos
head: lê o início de um arquivo.tail: lê o final de um arquivo.cat: lê um arquivo e exibe seu conteúdo na tela ou concatena arquivos.
▍Exclusão de arquivos, interrupção de processos
rm: remove um arquivo.kill: interrompe um processo.
▍Pesquisa
grep: busca informações.ag: comando avançado de busca.
▍Arquivamento
tar: cria e manipula arquivos de arquivamento.
Vamos falar sobre esses comandos em mais detalhes.
Detalhes sobre os comandos
Para começar, vamos entender os comandos cujos resultados são apresentados na forma stdout. Normalmente esses resultados aparecem na janela do terminal.
▍Obter informações
man command_name: exibe o manual do comando, ou seja — informações de ajuda.
pwd: exibe o caminho do diretório de trabalho atual. Ao trabalhar com o terminal, o usuário muitas vezes precisa saber onde exatamente no sistema ele se encontra.
ls: exibe o conteúdo do diretório. Este comando também é utilizado com frequência.
ls -a: exibe arquivos ocultos. Aqui, foi usado o sinalizador -a comandos ls. O uso de sinalizadores ajuda a ajustar o comportamento dos comandos.
ls -l: exibe informações detalhadas sobre os arquivos.
Note que os sinalizadores podem ser combinados. Por exemplo — assim: ls -al.
ps: visualiza os processos em execução.
ps -e: exibe informações sobre todos os processos em execução, e não apenas aqueles que estão relacionados ao shell atual do usuário. Este comando é frequentemente usado exatamente dessa forma.
▍Manipulações no sistema de arquivos
cd my_directory: altera o diretório de trabalho para my_directory. Para subir um nível na árvore de diretórios, use como my_directory caminho relativo. ../.
![[em favoritos] Bash para iniciantes: 21 comandos úteis](/wp-content/uploads/2019/03/91815e5212c9dfec88a76bc2ab37955f.png)
O comando cd
touch my_file: cria um arquivo my_file no caminho especificado.
mkdir my_directory: cria uma pasta my_directory no caminho especificado.
mv my_file target_directory: move o arquivo my_file para a pasta target_directory. Ao indicar o diretório de destino, é necessário usar o caminho absoluto para ele (e não uma construção como ../).
O comando mv, além disso, pode ser utilizado para renomear arquivos ou pastas. Por exemplo, poderia ser assim:
mv my_old_file_name.jpg my_new_file_name.jpg: cria uma cópia do arquivo
cp meu_arquivo_origem diretório_alvomy_source_file e a coloca na pasta target_directory.
ln -s my_source_file my_target_file: cria um link simbólico my_target_file para o arquivo my_source_file. Se o link for alterado, o arquivo original também mudará.
Se o arquivo my_source_file for removido, então my_target_file ficará. O sinalizador -s comandos ln permite criar links também para diretórios.
Agora vamos falar sobre redirecionamento de entrada e saída e pipelines.
▍Redirecionamento de entrada/saída e pipelines
my_command < my_file: substitui o descritor de arquivo da entrada padrão (stdin) pelo arquivo my_file. Isso pode ser útil se o comando espera a entrada de certos dados do teclado, e esses dados foram previamente salvos em um arquivo.
my_command > my_file: redireciona os resultados da execução do comando, ou seja, o que normalmente vai para stdout e é exibido na tela, para o arquivo my_file. Se o arquivo my_file não existir — ele será criado. Se o arquivo existir — ele será sobrescrito.
Por exemplo, após executar o comando ls > my_folder_contents.txt , será criado um arquivo de texto contendo a lista do que está no diretório de trabalho atual.
Se, em vez do símbolo > , usar a construção >>, desde que exista um arquivo para o qual a saída do comando é direcionada, este arquivo não será sobrescrito. Os dados serão adicionados ao final deste arquivo.
Agora, vamos dar uma olhada no processamento em pipeline de dados.
![[em favoritos] Bash para iniciantes: 21 comandos úteis](/wp-content/uploads/2019/03/dcc4e500b247cb13adb4d64c36c24f88.png)
O que é gerado por um comando é passado como entrada para outro comando. Isso é semelhante a conectar um tubo a outro.
first_command | second_command: o símbolo pipe, |, é usado para enviar os resultados da execução de um comando para outro comando. O que o comando à esquerda da construção descrita envia para stdout, vai para stdin o comando que está à direita do símbolo pipe.
No Linux, o processamento em pipeline de dados pode ser organizado usando praticamente qualquer comando bem estruturado. Frequentemente, diz-se que tudo no Linux é um pipeline.
Com o símbolo pipe, é possível encadear vários comandos. Assim:
first_command | second_command | third_command ![[em favoritos] Bash para iniciantes: 21 comandos úteis](/wp-content/uploads/2019/03/1d94b3f04846ef40c072299877c55b1f.png)
Um pipeline de vários comandos pode ser comparado a um sistema de encanamento.
Observe que quando o comando à esquerda do símbolo |, gera algo em stdout, o que ele gerou torna-se imediatamente disponível como stdin para o segundo comando. Ou seja, usando o pipeline, estamos lidando com a execução paralela de comandos. Isso pode, às vezes, levar a resultados inesperados. Mais detalhes sobre isso podem ser lidos .
Agora, vamos falar sobre a leitura de dados de arquivos e sua exibição na tela.
▍Leitura de arquivos
head my_file: lê as linhas do início do arquivo e as exibe na tela. É possível ler não apenas o conteúdo de arquivos, mas também o que os comandos geram em stdin, usando este comando como um elemento de pipeline.
tail my_file: lê as linhas do final do arquivo. Este comando também pode ser usado em um pipeline.
![[em favoritos] Bash para iniciantes: 21 comandos úteis](/wp-content/uploads/2019/03/0dd6e0353a1b5995d4a1228ae2550ad9.png)
Head (cabeça) está na frente, enquanto tail (cauda) está atrás.
Se você trabalha com dados usando a biblioteca pandas, então os comandos head e tail devem ser familiares para você. Se não forem, dê uma olhada na figura acima, e você os memorizará facilmente.
Vamos considerar outras formas de ler arquivos, falando sobre o comando cat.
Time cat ou exibe o conteúdo de um arquivo na tela, ou concatena vários arquivos. Isso depende de quantos arquivos são passados para este comando ao ser invocado.
![[em favoritos] Bash para iniciantes: 21 comandos úteis](/wp-content/uploads/2019/03/708bea2f5d31e1623e9fd80ff5b576af.png)
O comando cat
cat my_one_file.txt: quando um arquivo é passado para este comando, ele o exibe. stdout.
Se você passar dois arquivos ou mais, ele se comporta de forma diferente.
cat my_file1.txt my_file2.txt: ao receber vários arquivos como entrada, este comando concatena seu conteúdo e exibirá o resultado em stdout.
Se o resultado da concatenação de arquivos precisar ser salvo em um novo arquivo, você pode usar o operador >:
cat my_file1.txt my_file2.txt > my_new_file.txtAgora vamos falar sobre como excluir arquivos e parar processos.
▍Exclusão de arquivos, interrupção de processos
rm my_file: deleta o arquivo my_file.
rm -r my_folder: deleta a pasta my_folder e todos os arquivos e pastas que ela contém. A flag -r indica que o comando será executado em modo recursivo.
Para que o sistema não solicite confirmação ao executar cada operação de exclusão de arquivos ou pastas, use a flag --follow.
kill 012345: para o processo em execução indicado, dando-lhe tempo para finalizar corretamente.
kill -9 012345: força a finalização do processo em execução indicado. A flag -s SIGKILL significa o mesmo que a flag -9.
▍Pesquisa
Para procurar dados, você pode usar vários comandos. Em particular — grep, ag e ack. Vamos começar nosso familiarização com esses comandos com grep. Este é um comando comprovado e confiável, que, no entanto, é mais lento que outros e não tão conveniente de usar.
![[em favoritos] Bash para iniciantes: 21 comandos úteis](/wp-content/uploads/2019/03/bc02403dbbd0109f0dfd595eccf239c7.png)
O comando grep
grep my_regex my_file: executa a busca por my_regex em my_file. Ao encontrar correspondências, retorna, para cada uma delas, a linha inteira. Por padrão, my_regex é tratado como uma expressão regular.
grep -i my_regex my_file: a busca é realizada sem considerar a diferenciação entre maiúsculas e minúsculas.
grep -v my_regex my_file: retorna todas as linhas que não contêm my_regex. A flag -v indica a inversão, lembrando o operador NOT, que é encontrado em muitas linguagens de programação.
grep -c my_regex my_file: retorna informações sobre a quantidade de correspondências com o padrão buscado encontradas no arquivo.
grep -R my_regex my_folder: realiza uma busca recursiva em todos os arquivos dentro da pasta especificada e nas pastas aninhadas.
Agora vamos falar sobre o comando ag. Ele surgiu depois grep, é mais rápido e mais fácil de trabalhar.
![[em favoritos] Bash para iniciantes: 21 comandos úteis](/wp-content/uploads/2019/03/f0eeb1d38a1e9c22a8463858753dedb5.png)
O comando ag
ag my_regex my_file: retorna informações sobre os números das linhas e as próprias linhas onde as correspondências com my_regex.
ag -i my_regex my_file: a busca é realizada sem considerar a diferenciação entre maiúsculas e minúsculas.
Time ag processa automaticamente o arquivo .gitignore e exclui da saída aquilo que é encontrado nas pastas ou arquivos listados neste arquivo. Isso é muito conveniente.
ag my_regex my_file -- skip-vcs-ignores: conteúdo de arquivos de sistemas de controle de versão automático (como .gitignore) não é considerado na busca.
Além disso, para indicar à equipe ag quais caminhos para arquivos devem ser excluídos da busca, pode-se criar um arquivo .agignore.
No início desta seção, mencionamos o comando ack. Os comandos ack e ag são muito semelhantes, pode-se dizer que são intercambiáveis em 99%. No entanto, o comando ag funciona mais rápido, por isso descrevi exatamente ele.
Agora vamos falar sobre como trabalhar com arquivos compactados.
▍Arquivamento
tar my_source_directory: combina arquivos da pasta my_source_directory em um único arquivo tarball. Esses arquivos são convenientes para enviar grandes conjuntos de arquivos para alguém.
![[em favoritos] Bash para iniciantes: 21 comandos úteis](/wp-content/uploads/2019/03/4531ef1d4084af608fcbe91964a6710b.png)
O comando tar
Os arquivos Tarball criados por este comando são arquivos com a extensão .tar (Tape ARchive). O fato de que no nome do comando e na extensão dos arquivos que ele cria está ocultada a palavra 'tape' (fita), indica há quanto tempo este comando existe.
tar -cf my_file.tar my_source_directory: cria um arquivo tarball chamado my_file.tar com o conteúdo da pasta my_source_directory. A flag -c é interpretado como 'create' (criar), e o sinalizador --follow significa 'file' (arquivo).
Para extrair arquivos de .tar-arquivo, o comando utiliza sinais tar c com -x ('extract', extração) e --follow ('file', arquivo).
tar -xf my_file.tar: extrai arquivos de my_file.tar para o diretório de trabalho atual.
Agora vamos falar sobre como compactar e descompactar .tar-arquivos.
tar -cfz my_file.tar.gz my_source_directory: aqui, usando o sinalizador -z ('zip', algoritmo de compressão) indica que o algoritmo gzip (GNU zip) deve ser usado para compactar arquivos. Compactar arquivos ajuda a economizar espaço em disco ao armazená-los. Caso os arquivos sejam, por exemplo, transferidos para outros usuários, isso contribui para um download mais rápido desses arquivos.
Para descompactar um arquivo .tar.gz , pode-se adicionar o sinalizador -z ao comando de extração de .tar-arquivos, que discutimos anteriormente. Assim:
tar -xfz my_file.tar.gz
Vale notar que o comando tar possui muitos outros sinais úteis.
Aliases Bash
Aliases Bash (também chamados de atalhos ou abreviações) são destinados a criar nomes abreviados para comandos ou sequências deles, cujo uso em vez de comandos normais acelera o trabalho. Se você, por exemplo, tem um alias bu, que corresponde ao comando python setup.py sdist bdist_wheel, então basta usar esse alias para invocar o comando.
Para criar um pseudônimo como este, basta adicionar o seguinte comando ao arquivo ~/.bash_profile:
alias bu="python setup.py sdist bdist_wheel" Se o seu sistema não tiver o arquivo ~/.bash_profile, você pode criá-lo manualmente usando o comando touch. Após criar o pseudônimo, reinicie o terminal e você poderá usá-lo. Neste caso, a entrada de dois caracteres substitui a entrada de mais de trinta caracteres do comando destinado a pacotes Python.
Em ~/.bash_profile Você pode adicionar pseudônimos para quaisquer comandos frequentemente utilizados.
▍Conclusão
Neste material, revisamos 21 comandos populares do Bash e discutimos a criação de pseudônimos para comandos. Se esse tema interessa a você — uma série de publicações dedicadas ao Bash. Você pode encontrar uma versão em pdf dessas publicações. Além disso, se deseja aprender Bash, lembre-se de que, assim como em qualquer outro sistema de programação, a prática é fundamental.
Prezados leitores! Quais comandos úteis para iniciantes você adicionaria aos que foram discutidos neste artigo?
→
Fonte: habr.com
