Post

Terminal do zero

Linux e linhas de comando à primeira vista

Linux: Dando início a uma fase Terminal

1
2
- Dominando linha de comando UNIX
 Perfeito para quem quer conhecer, aprender, relembrar ou masterizar - 

Material focado nos comandos usados voltado para distribuições baseados em Debian, como o Ubuntu. Mesmo que algumas outras tenham suas pequenas variações, em geral são a mesma coisa. Alguns comandos podem, eventualmente, necessitar de instalação visto que nem todos os sistemas linux terão tais recursos instalados por padrão. Podendo ser feito via comandos ensinados neste post.

Contextualização e Introdução

Afinal: O que é Linux? O que é Terminal?

Para começar de uma boa maneira, gostaria de contextualizar um pouco sobre o que é cada coisa que abordaremos, para evitar que fique perdido. Um comando nada mais é que uma instrução/palavra especial que pode representar uma ou mais ações. Um interpretador de comandos, mais conhecido como shell ou modo texto, é o responsável por interpretar tais instruções - enviadas pelo usuário e seus programas - para o kernel, que é o núcleo do sistema operacional com a função de fazer a ligação entre o hardware e o software. O shell é o mecanismo por trás dos programas conhecidos como simuladores de terminal, que são os tipos de programas que usamos para usar o interpretador de comandos.

terminal era uma antiga máquina composta basicamente por monitor e teclado. Usada apenas através de linha de comando por não ter uma interface gráfica como hoje.

Infelizmente, ainda existem pessoas que só veem ‘Linux’ desta maneira…

Em distribuições Linux você poderá ter vários interpretadores de comandos de sua escolha, entre eles temos o bash, zsh (ou zshell), tesh, sh, csh e ash. O mais utilizado e conhecido é o Bash, normalmente ele vem como padrão. Existem diversos programas com a função de te entregar um interpretador funcional, o mais conhecido é chamado de Terminal. Isso traz mais liberdade de escolha para o conforto do usuário. Tendo em vista que esses programas têm o mesmo propósito, no final das contas eles geralmente acabam sendo a mesma coisa, mesmo que alguns sejam mais customizáveis que outros.

Linux nada mais é que o nome do kernel desenvolvido em código aberto por Linus Torvalds. Sistema operacional em si são o que chamamos de ‘distribuições’, sendo elas Ubuntu, Fedora, Linux Mint, Kali, Pop OS!, entre outros. Como muitos confundem e misturam as coisas, alguns nem se dão conta de que o Android também é Linux.

O Kernel faz parte do sistema operacional e trabalha em baixo nível por ser o núcleo do sistema. É nele onde trabalham os drivers, por exemplo. Pode-se dizer que, para um sistema operativo, o Kernel é tal qual o que o motor é para um carro. Portanto, falar “o sistema operacional Linux” está tecnicamente errado. A generalização com Linux pode ser feita para facilitar o entendimento da mensagem, o problema vem quando começa a cobrança de alguns para com “o linux”.

Praticando com Linux

Basta abrir o terminar e praticar. Porém, lembre-se de tomar cuidado ao usar o terminal alheio apenas copiando e colando comandos que você vê na internet, sem saber o que ele faz. A chance de dar problemas em coisas importantes são grandes. Tente ao menos entender o que está sendo feito.

Tá, ok… tudo certo até agora, mas… … antes de irmos direto aos comandos e explicações, vamos tentar desmistificar algumas coisas sobre linux…

Desmistificando o Pinguim

É comum a ideia de que “Linux é para usuários avançados” ou “para programadores”, e que é preciso dominar linhas de comando. Isso pode assustar usuários, como se fosse obrigatório. A maioria dos tutoriais na internet são feitos via terminal, o que reforça essa percepção. No entanto, não é necessário saber linhas de comando para usar o sistema no dia a dia. Tudo o que é necessário pode ser feito via interface gráfica, assim como no Windows, Mac e Android. Novos usuários de Linux podem começar com distribuições amigáveis como Zorin OS e Linux Mint. Embora não seja necessário dominar linhas de comando, é útil ter alguma noção, especialmente ao seguir tutoriais. Para usuários mais avançados e estudantes de computação, dominar o terminal é fundamental. Aqui, listei uma série de comandos para facilitar o uso do terminal no dia a dia.

Praticando com Windows

Podemos aprender via windows usando WSL ou máquina virtual.

Antes de mais nada, acho importante falar sobre os usuários de Windows. Muitos querem aprender a usar o terminal linux, mas continuam “presas na janela”, e isso não é um problema, necessariamente. Mesmo que não possa formatar o pc, você ainda tem três opções que podem quebrar seu galho:

  • Dual boot : Sistema Linux e Windows juntos na mesma máquina.

  • Máquina Virtual : Linux rodando dentro do seu windows por uma máquina virtual, como virtualbox.

  • WSL - Subsistema do Linux para Windows : Podendo utilizar o Terminal Ubuntu em Windows ou até um sistema linux por inteiro através de um container.

Windows Subsystem for Linux

Por mais que o WSL2 não seja a mesma coisa de usar diretamente um sistema linux real, pode se tornar um excelente quebra galho para quem não quer se desfazer do seu sistema e costume pessoal de uso, principalmente por motivos profissionais. Aqui vai um rápido guia para utilizar este terminal no seu windows:

  • Apertar “Win+r

  • Digitar “optionalfeatures

  • Ativar / Marcar a caixinha “Subsistema do Windows para Linux

  • Reiniciar

  • Baixar o terminal linux na loja de apps da microsoft pelo nome da distribuição, como por exemplo o Ubuntu.

    Pronto! Já tendo baixado o terminal na microsoft store, teoricamente agora é só abrir, configurar o usuário e utilizar o terminal pelo windows como se tivesse no Ubuntu. Porém, comigo geralmente continua dando erro, mas não se assuste!

    Tente agora abrir o powershell como administrador e cole cada comando abaixo, seguido de reinicialização da máquina:

1
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
1
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Agora sim! Você já está preparado para botar a mão na massa e seguir a documentação na prática. Claro, lembre-se que usar o WSL é apenas um quebra galho e tem suas limitações, fique atento quanto a isso.

Para funcionar o WSL e as máquinas virtuais junto, antes de reiniciar, aproveite o powershell/cmd já aberto como administrador e cole:

1
bcdedit /set hypervisorlaunchtype off

Aviso: Normalmente, para funcionar é recomendado que esteja com o sistema atualizado, pelo menos até a build 16215.0, e necessariamente precisa ser um sistema com arquitetura de 64 bits. Fique atualizado aos requisitos e modo de instalação estando de olho no site da Microsoft. Este guia foi apenas o que eu testei a um tempo e deu certo, então - por não ser um guia oficial - é recomendado seguir o tutorial oficial e qualquer problema deve ser resolvido com o suporte deles.

~ Instalar o WSL (Subsistema Windows para Linux) no Windows 10Microsoft Docs -> https://docs.microsoft.com/pt-br/windows/wsl/install-win10

Terminal à primeira vista

Estrutura do terminal

Tópico voltado a quem ainda não conhece direito o terminal, mostrando o que é cada coisa de sua estrutura.

Ao abrir o terminal podemos notar que existe uma formatação padrão inicial, exemplo; Matheus@Ubuntu:~$ ==> ‘Usuário’ @ ‘PC’ : ‘diretório’ ‘modo de usuário’

  • Usuário é o campo sobre o nome da conta da atual sessão, mostra qual conta está sendo usada no terminal atualmente, começando com a que está usando o sistema. Você verá como poderá criar novos perfis, configurar e alternar entre eles pelo próprio terminal.
  • PC é o campo sobre o nome dado para sua máquina, normalmente dado ao instalar o sistema.
  • Diretório é o campo sobre a pasta em que se encontra no momento, ou seja, mostra em qual diretório está acessando pelo terminal. Por padrão vem na pasta home do usuário, indicado como ~, diretório o qual contém os documentos, downloads, etc.
  • _Modo de usuário é o campo sobre o modo do usuário dessa sessão. Normalmente a simbologia do privilégio de usuário comum é dado como $. Existe o modo de superusuário e certos comandos o exigem para serem feitos. Ao mudar o tipo de usuário de comum para o de privilégio elevado, o símbolo pode passar a ser representado por # se não for alterado o privilégio apenas para comandos isolados.

Mas e então, como usar outros usuários? Como obter o privilégio de superusuário? Veremos isso nos próximos tópicos.

Principais comandos para se virar no terminal

Aprimorando conhecimento.

É importante saber primeiro dos comandos man e help de algum comando específico, pois te auxiliarão a aprender praticamente qualquer comando. Com eles você aprenderá como usar e o que eles fazem.

1
2
3
4
5
man < comando > ;
< comando > -h  ;   
< comando > --help ;
< comando > --h ;
help < comando >

Usuários e Privilégios

Comandos básicos para administrar os usuários e seus privilégios

Usar comandos que requerem privilégio (parte 1) Certos comandos só serão executados se o usuário tiver um privilégio elevado.

Para usarmos comandos específicos como um superusuário podemos usar o comando sudo.

1
 sudo < comando >
1
sudo su

Pode ser lido como Superuser DO ao usá-lo antes de algum comando. Fica mais fácil de lembrar. Se para executar o comando x é necessário privilégio de superusuário, escrevemos “superusuário faça x”, ficando “super user do x”, resultando em “sudo x” abreviadamente.

Explicação bem detalhada e importante sobre como funciona o sudo no final deste sub-tópico, ou seja, na parte 2 do Usar comandos que requerem privilégio.

ps: Somente usuários do grupo sudo podem usar este comando. O padrão do sistema já vem neste grupo.

Criação de usuários

Comandos: adduser ; useradd

O useradd cria um novo usuário mas sem criar uma pasta home para o mesmo, apenas adiciona um novo usuário ao arquivo /etc/passwd, diferentemente do comando adduser. Porém, ambos precisam de permissão para serem executadas.

1
2
3
4
Exemplo;
Para criar o usuário banana;
sudo useradd banana  (sem pasta home própria)
sudo adduser banana  (com pasta home própria)

Normalmente, em sistemas como Ubuntu e outros, o comando adduser tende a criar o usuário completo, com senha predefinida, nome completo, informações extras etc (sendo opcional não colocar elas), pasta home, etc. Já em algumas outras ainda precisam add alguma dessas coisas por outros comandos, como a criação da senha, que veremos no próximo tópico.

Num geral, o comando adduser também pode conseguir adicionar usuários a um grupo, como no grupo ‘sudo’ para executar comandos que exijam privilégio: sudo adduser banana sudo

Para moderar os usuários existe o comando usermod, tendo algumas funções bem interessantes:

Criar nova pasta home; alterar possível data de expiração; alterar grupos; alterar nomes; alterar shell; etc

Num geral, o comando usermod também pode adicionar um usuário ao grupo sudo:

sudo usermod -aG sudo banana

  • main example: usermod -aG
  • -a = Anexar (attach)
  • -G = Grupo (group)

Manipulação da senha de usuários

Com o comando passwd adicionaremos, tiramos ou alteramos a senha de algum determinado usuário

Bastando digitar o nome do mesmo (Exemplo 1);

Para retirar a senha dele basta usar o -d (Exemplo 2);

Para trocar ou adicionar senha do root não precisa necessariamente especificar seu nome, o passwd reconhece o root se caso nenhum usuário seja especificado. Acaba bastando usar o sudo (para privilégio) e o passwd juntos para alterar ou adicionar a senha. (Exemplo 3);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Exemplo 1; Mudança de senha>
```bash
banana@pc:~$ passwd banana
Changing password for banana.
Current password:
New password:
Retype new password:
passwd: password updated successfully
```

Exemplo 2; Retirando senha>
```bash
banana@pc:~$ sudo passwd -d banana
[sudo] password for banana:
passwd: password expiry information changed.
```

ou

```bash
sudo passwd -d banana
[sudo] senha para banana: 
Removendo senha para o usuário banana.
passwd: Sucesso
```

Exemplo 3; Adicionando e/ou alterando a senha do root>
```bash
banana@pc:~$ sudo passwd
[sudo] password for banana:
New Password:
Retype new password:
passwd: password updated successfully
```
(pediu a senha do user banana para alterar a do root - explicação sobre isso na parte dois do tópico de privilégio sudo)

Para saber outras opções do comando, digite:

1
passwd 

Exclusão de usuário

Para deletar o usuário ‘banana’ que criamos, podemos usar

1
sudo userdel banana
1
sudo deluser banana 

Com o deluser Também podemos retirar o usuário de algum grupo. Podemos retirar o banan do sudo

1
sudo deluser banana sudo

Troca de usuário

su é o comando que se dá para a troca de usuários, vem do inglês “substitute user” - também podendo ser lido como Switch User. Caso ele seja utilizado solto, ou seja, sem especificar qual usuário deseja, ele assumirá que quer trocar para o superusuário do sistema, normalmente chamado de root. Logo, o su e su root são a mesma coisa - sendo assim, pode memorizar o comando su sozinho como Super User.

su -> Switch user su -> Super User

A diferença entre o su - e o su é que, o “-” específica para o comando simular um login real/direto, já o su indica apenas uma “troca de usuário aqui”. Ou seja, o comando su ‘username’ troca de usuário se mantendo no diretório atual, diferentemente de quando usa su - ‘username’, que já troca de usuário direto pra própria ‘home’ do usuário logado.

Lembrando: Pasta ‘home’ é a pasta principal de cada usuário, onde fica os Documentos, Downloads, Desktop, etc

1
2
3
4
5
6
7
8
9
10
11
12
Trocando para o novo usuário chamado banana
|-----------------------------|
|  Exemplo 1;                  ~ Troca de usuário normal
| matheus@pc:~$ su banana     
| Password:
| banana@pc:/home/matheus$ 
|-----------------------------|
| Exemplo 2;                 ~ Troca de usuário simulando um login direto
| matheus@pc:~$ su - banana
| Password:
| banana@pc:~$
|-----------------------------|

Dica

O comando exit pode ser usado tanto para sair da conta do usuário logado pelo terminal, quanto para fechar o terminal ao ser usado no seu usuário padrão.

Grupos para usuários

Já falamos por cima de alguns comandos em relação a grupos anteriormente, mas aqui estão os comandos para tal ação:

Criando grupos:

1
2
sudo addgroup groupname
sudo groupadd newgroup

Deletando grupos:

1
2
sudo groupdel groupname
sudo delgroup groupname

Moderando grupos:

1
2
sudo groupmod -h
sudo modgroup -h    

Com este comando podemos fazer algumas coisas, como alterar o nome dos grupos: sudo groupmod -n novo_nome

Adicionando um usuário a um grupo;

1
2
usermod -aG group username
adduser username group

Privilégio para comandos

Veremos como usar comandos que requerem privilégio

Entenda melhor o comando SUDO

Ele funciona para dar permissões de outros usuários - em geral do superusuário - para o atual, bastando apenas digitar a senha do mesmo. Porém, isso só funciona pois ele foi adicionado no grupo sudo, as distros normalmente já deixam o primeiro usuário com privilégios sudo e por isso o comando funciona sem problemas.

​ O superusuário não precisa usar o comando sudo por já ter todas as permissões de forma padrão e pré-configuradas no arquivo sudoers. É neste arquivo, localizado em /etc/, que a configuração do comando sudo é dada. Ou seja, é nele que é dado ao grupo sudo a capacidade de executar qualquer comando, assim como também é dado o privilégio do usuário root.

Basicamente, um novo usuário não poderá usar sudo até que seja adicionado ao grupo sudo, que já está configurado no arquivo sudoers por padrão. Sabendo disso, podemos mostrar que para usar qualquer comando com privilégio basta digitar sudo su

lembrando que o “su” sozinho reconhece como uma troca para o superusuário, mas para isso precisa ter privilégios de superusuário, que é garantido pelo “sudo”. Assim você troca pro superusuário com apenas a sua senha. Será melhor explicado abaixo:

O comando sudo, como vimos, nos permite usar privilégios de outros usuários. Para isso é necessário estar dentro do grupo de usuários chamado sudo. Na primeira vez que digitamos o comando na sessão é necessário digitar a senha do usuário para confirmar que quer usar comando de privilégio mesmo, pois estamos pegando emprestado o privilégio de root para que possamos fazer um comando como se fossemos ele. Então, sudo nos permite fazer tudo que um root faz só que usando a própria senha, sem precisar saber a senha do root em si. O comando su, sem especificação de usuário, entende que o usuário ‘especificado’ é o próprio root, e por isso pede a senha do mesmo. Se você pode usar o comando sudo para executar qualquer comando de superusuário com a sua senha, logo você poderá usar o comando para entrar como root usando a sua senha. Por isso a junção sudo su entra no root pela senha do seu usuário, tal qual entraria em outro usuário com a senha do atual, como por exemplo o sudo su banana. Por isso é possível adicionar e mudar a senha do root sendo pedido apenas a senha do seu usuário (“sudo passwd root”). Em outras palavras, quem está no grupo sudo também é um root, a diferença é que o root fica com esse privilégio direto, um usuário normal no grupo sudo só tem esse privilégio ao usar o comando, o que acaba sendo um pouco mais seguro, já que ter privilégios elevados também indica que você tem o poder de rodar comandos que podem eventualmente quebrar o sistema ou aplicação de algum modo, se é necessário desbloquear como sudo então você vai saber o que está fazendo (é o que se espera) e ficará por sua própria conta e risco.

Comandos de sistema

Advanced Packaging Tool (apt)

Em sistemas baseados em Debian, como Ubuntu, utilizam o apt como gerenciador de pacote como padrão.

comando antigo: apt-get; foi abreviado para somente apt, ainda podendo utilizar os dois)

Existem outros gerenciadores de pacotes também, como o dnf / yum que é usado no Fedora.; o pacman no Arch; apk no Alpine, etc. Mas não abordaremos outros gerenciadores por aqui. Normalmente seguem um padrão parecido, mas fique ligado na documentação da sua distro e saiba dos comandos apropriados para ela.

Os comandos podem pedir privilégio, então deve-se usar junto do comando sudo .

Instalar e reinstalar programas

1
apt install < nome do programa >
1
apt reinstall < nome do programa >

também pode reinstalar fazendo um purge no programa e instalar dnv, o comando para isso será mostrado em breve

​ - Extra:

Seu sistema tendo suporte a flatpak, snap,ou outros pacotes ‘universais’ do mundo linux, sua gama de apps podem aumentar e ter, assim, novas formas de instalar programas tbm, podendo ser usado por interface gráfica (ou pela distro, ou por sites doss catálogos; como snapd e flathub) ou pelos comandos;

1
sudo snap install < nomedoprograma >
1
sudo flatpak install < nomedoprograma >

Podemos instalar o flatpak e snap pelos comandos

1
sudo apt install snapd
1
sudo apt install flatpak

pacotes snaps e flatpaks são universais para serem usados em qualquer distribuição linux, eles vem com as suas dependências juntas e compactadas em um único pacote; também temos os arquivos AppImage com a finalidade de compatibilidade geral dos programas para diferentes plataformas Linux

Caso precise adicionar o repositório do flatpak:

1
sudo add-apt-repository ppa:alexlarsson/flatpak

O comando add-apt-repository ppa: é para adicionar o repositório de um programa para que ele seja add ao sistema, assim você pode instalar e atualizar este programa. Sempre depois de add um PPA faça um update, que veremos no próximo bloco;

Atualizar sistema

1
apt update

(Baixar pacotes)

seguindo de

1
apt upgrade

(Instalar os pacotes) ;

1
apt full-upgrade

ou

1
apt dist-upgrade

(instalando os pacotes baixados e desinstalando outros pacotes se necessário para concluir certas instalações)

Para mudar de release, nova versão do seu sistema - como do ubuntu 19.10 pro 20, deve rodar este comando após o upgrade:

1
apt do-release-upgrade

Em caso de alguns erros, o comando dpkg, que é de gerenciamento de pacote, pode te ajudar:

1
sudo dpkg --configure -a

Remoção

Remover programas; antigas dependências; etc

1
apt purge < nome >

remover programa junto com os arquivos de configuração ou dados do pacote. (Não removerá os arquivos de configuração caso esteja dentro da pasta inicial / home do usuário)

1
apt remove < nome >  

remover um programa sem mexer nos arquivos de configuração ou dados do pacote.

1
apt autoremove

remover pacotes que não são necessários; muitos pacotes são instalados como dependência para outros e que depois deixam de ser úteis.

Verificação

Gerar relatório sobre o total de pacotes disponíveis : apt-cache stats

Para verificar dependências quebradas : apt-get check < nome >

Para procurar por programas : apt search < nome >

Ver detalhes do pacote : apt show < nome >

Listar pacotes : apt list < nome > Listar pacotes com certa nomenclatura ou todos os pacotes deixando em branco

Funções do Sistema

shutdown -> desligar o pc [ podendo usar para programar o desligamento em segundos: shutdown -t 9800 (tempo em segundo) e dps -c para cancelar ]

reboot -> reiniciar o pc

kill -> matar algum processo / fechar algum programa

mount -> montar algum dispositivo como HD

ping -> Enviar pacotes para um serviço; pingando um site para testar a conexão vendo o tempo de resposta e IP, por exemplo.

Informação

date -> data e hora

pwd -> diretório atual

uname -> informação geral e kernel

ifconfig -> interface de rede

whoami -> usuário atual

route -> tabela de roteamento (IP Routing tables)

free -h -> ver uso de memória

arch -> arquitetura da CPU

ps -> listar processos em execução

top -> listar esses processos e uso de hardware (resumo)

nohup -> ignorar sinais de interrupção; rodar comando em segundo plano mesmo no logout

vmstat -> tabela de status da memória virtual do sistema

free -> Uso de memória ram [-h mostra em mega ou em giga]

lscpu -> Descobrir informações sobre a CPU

lshw -> listar hardwares

Utilidades no terminal

  • Manual de comandos, histórico e limpeza
1
2
3
4
man <comando>  ex: man bash
apropos <algo> -> (pesquisar algo no manual do sistema)
history -> histórico dos últimos comandos usados
clear / {Ctrl + L} -> limpar a tela do terminal
  • Listagem de conteúdos do diretório
1
2
3
4
ls -> comando de listagem
ls -a : para tbm os itens ocultos
ls -l : para mais informações de cada arquivo, como as informações de permissões    ls -la : listar tudo com informações
tree -> listar em formato árvore
  • Caminhando entre pastas/diretórios

Comando: cd = change directory

1
2
3
4
5
6
Exemplos;
cd /    = ir para a raiz do sistema
cd /etc = ir para a pasta etc
cd ..   = voltar uma pasta, voltando pra raiz
cd ~    = indo pra home do seu usuário
etc

Aviso: Pode não funcionar da melhor maneira dentro de scripts de shell

WSL: Para quem usa o terminal no w10 - poder ser bacana trabalhar dentro da pasta que você também usa direto pelo windows, como o seu desktop. Pra isso pode usar cd /mnt/c/users/username/desktop mudando o ‘username’ pelo seu usuário.

  • Leitura e exibição de arquivos
1
2
3
4
5
6
7
8
less - ler arquivos com paginação (podendo avançar e retroceder) e salvar saída desejada;
less <nome_do_arquivo>

more - ler arquivos
more <nome_do_arquivo>

cat - mostrar conteúdo do arquivo
cat <nome_do_arquivo>
  • Criando arquivos
1
2
3
4
5
6
7
8
touch - criar arquivo em branco
touch nome_do_arquivo  

nano - editor de texto padrão (serve para programação)
nano nome_do_arquivo (nome do arquivo que quer editar ou criar)

echo - Apresentar um texto. Podemos criar um arquivo com escrita dentro (também pode ser usado pra add uma escrita em um arquivo existente, ou alterar todo o texto do arquivo)
echo mensagem > nome_do_arquivo
  • Criando pastas e removendo pastas
1
2
mkdir (make directory) -> criar pasta  / diretório
mkdir <nome_da_pasta>
1
2
rmdir (remove directory) -> remover APENAS diretórios vazios
rmdir <nome_da_pasta>
1
2
3
4
5
6
7
rm -d (remove) -> diretórios vazios
rm -rf -> diretórios cheios
rm -rf <nome_da_pasta>

.Para remover um arquivo com que inicie o nome com -
rm ./-<nome>
rm -- -<nome> 

nota: Aqui teve mais aprofundamento do comando rm, mas também será falado nos comandos de manipulação de arquivo

  • Criando atalhos/links
1
2
3
4
5
6
7
8
9
ln -> fazer link entre arquivos - Criar atalhos
ln <nome_do_arquivo> <nome_do_atalho>
---------------------------------------------
exemplo prático:
echo a > a.txt          
ln a.txt atalho.txt     
cat atalho.txt 
a
---------------------------------------------
  • Localizar programas, comandos e arquivos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
locate - localizar arquivos
locate <nome>

which - localizar um comando - diretório
which <comando>

whereis - localizar arquivos binários, o seu código-fonte e a página de manual
whereis <arquivo/comando> 

 find - procurar arquivos de um diretório ou até um específico
 find /home/nomedeusuario/Documentos -> listando todos os arquivos de docs
 find / -name nome.txt -> achar o caminho exato do arquivo tal (precisa saber o nome e a extensão certa para achar o arquivo e mostrar o diretório correto)
 o / é para procurar em toda a raíz, podendo colocar um diretório específico
 o -name é para especificar que vai procurar pelo nome que será escrito logo depois.
Pode ser usado com filtros para uma saída melhor e achar algum arquivo específico sem saber ao certo a extensão ou apenas sabendo a extensão e não o próprio nome (veremos logo a frente)
  • Manipulando arquivos
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
rm (remove) -> remover arquivos e diretórios
rm <nome-do-arquivo>

mv (move) -> mover ou renomear arquivos
mv <arquivo> <novo_lugar> 
mv <arquivo> <novo_nome>

cp (copy/copia) -> copiar arquivo
cp <arquivo> <novo_lugar>

file -> informação do arquivo
file <arquivo>

rename -> renomear arquivo
rename <arquivo> <novo_nome>

tar - zip - 7za - rar - bz2 - gzip .. -> compactar e descompactar arquivos
(pro rar: sudo apt-get install rar unrar)
    Compactar arquivos:
    7za a arquivo.7z pasta-arquivos_compactar (caso tenha o 7z instalado)
    tar -zcf nome_arq.tar nome_do_diretrio__do_arquivo_ou_dos_arquivos
    Pode compactar em tar.gz agora, dps do tar: gzip -9 nomedessearquivo.tar
    Ou até em tar.bz2 com: bzip2 nome_arq.tar
    Compactar direto em tar.gz:  tar -cz arquivo > novonome.tar.gz
    tar -cz Pasta > arquivo.tar.gz (pasta inteira)
    Mesmo comando tbm serve para bz2: tar -cz arquivo > nome.tar.bz2
    gzip document.txt
    gzip -c document.txt> new_name.gz
    bzip2 document.txt
    bzip2 -c document.txt> name.bz2
    rar a compactada.rar pasta/
    rar a compactada.rar pasta/ -p senha
    zip nome.zip arquivo
    xz arquivodesejado (para .xz)
    tar -cz Pasta/Arquivo > arquivo.tar.xz


    Descompactar arquivos:
    7za e arquivo.7z ;
    unzip arquivo.zip ;
    unrar x nomedoarquivo.rar ;
    unxz  arquivo.xz  (unxz is equivalent to xz –decompress);
    unzip arquivo.zip linux64/* -d /pasta/ ;
    tar -xvf nomedoarquivo.tar ;
    tar -vzxf nomedoarquivo.tar.gz ;
    bunzip nomedoarquivo.bz2 ;
    tar -jxvf nomedoarquivo.tar.bz2 ;
    gzip -d pacote.tar.gz ;
    bunzip2 pacote.tar.bz2 ;
    tar -xz Pasta < Arquivo.tar.gz
    tar -vxf Backup.tar.gz
    gunzip documento.gz
    tar -xjvf arquivo.tar.bz2 -C /pasta/
    tar -xvf arquivo.tar.xz
    uncompress arquivo.Z


dpkg - rpm -> gerenciador de pacotes de software

chmod -> privilégio de arquivo
chmod +x <arquivo>

stat - fornecer status/informações sobre arquivos e diretórios

source - executar um arquivo no shell
    O comando source é um comando interno do shell sendo usado. Para saber mais sobre ele podemos usar o help => help source
  • Comparar arquivos
1
2
3
4
5
6
7
8
9
10
11
12
diff - "differ" - Compara diretórios e arquivos linha por linha
diff <nome_do_arquivo_1> <nome_do_arquivo_2>
diff <nome_da_pasta_1> <nome_da_pasta_2>
A saída da comparação dos arquivos pode parecer confusa. Podemos melhorar o comando pra saídas que queremos pra cada situação.
diff -n (saida normal) ; diff -s (reportar qnd os arquivos são os mesmos) ; 
diff -q (reportar qnd os arquivos forem diferentes) ; diff -y (comparação em duas colunas) ; etc

cmp - "compare" - Comparar arquivos - ver se dois arquivos são iguais (em caso de diferença, não sairá nenhum resultado)

sdiff - comparar dois arquivos e tabelar com informações
    Se as linhas forem idênticas, são mostradas em cada lado da tabela, separadas apenas por espaços.
    Se uma linha existe apenas no primeiro arquivo, um sinal < é mostrado no final da linha da tabela.

Trabalhando melhor com terminal

1
dominando o terminal com atalhos, múltiplos comandos, separadores, filtros, etc.

Comandos simultâneos

1
aprendendo a usar separadores, sequências de comandos e atributos especiais

Podemos fazer mais de um comando em uma mesma linha, como por exemplo colocar a atualização do sistema (o apt update e upgrade) para funcionarem automaticamente escrevendo apenas uma linha: sudo apt update && sudo apt upgrade Explicarei resumidamente a funcionalidade das caracteres especiais && , ; , & , || , | , elas podem se mostrar úteis para determinadas situações. Estas não possuem o mesmo significado.

O && significa um “and” (e), funciona de forma a executar o segundo comando apenas, e somente apenas, se o primeiro der um status existente de 0 (sucesso de execução). Em outras palavras, serve para chamar um comando caso o outro não retorne erro, assim o bash emite um sinal de 0 e o operador && chama o próximo comando. Para funcionar em script, as duas precisam ser verdadeiras, como { 1>0 && 0==0 } para que os comandos dentro deste if sejam utilizados.

Já o & Executa o segundo comando independentemente do resultado do comando anterior. Porém, a sua principal função é executar o comando posterior a ele em background em uma subshell e não esperar o comando finalizar, sempre retornando um status 0 (por isso um cd antes do & não funciona direito). Sendo assim, pode ser usado no final de um comando, o que significa que você quer executar aquele comando e já liberar o terminal para outros, sem aguardar o resultado do último.

O ; significa o fim da linha do tal comando, como um delimitador, fazendo o bash pular pro próximo - como comandos independentes - funcionando de forma a ser indiferente se algum está dando erro ou não. Acaba sendo mais usado para os scripts.

O || significa um “or” (ou) e também depende do resultado do último comando, assim como o && ele também é um operador de comparação. Em outras palavras, eles servem para testar se duas ou mais expressões são verdadeiras ou não. Mas o || Funciona de forma a usar um comando mesmo em caso de que um dê erro, ou seja, retorna verdadeiro se pelo menos UMA das expressões fornecidas for verdadeira, diferentemente do && que necessita que as suas sejam verdadeiras.

Já o pipe (|) acaba sendo usada mais para filtros que tornam os comandos mais práticos. A sua função nada mais é que fazer uma comunicação entre processos. A exibição de um comando vai variar dependendo do comando dado após o pipe, como um filtro. Se eu estiver nos “meus documentos” e botar um ls, mostrará tudo que tem lá. Se eu só quiser a listagem de arquivos que tenham “aula” no nome, colocaria ls | grep aula e pronto! listou apenas os arquivos e documentos que tinham aula no nome. Ou seja, jogou a saída do primeiro comando pro segundo para executar este segundo em cima da saída do anterior, e por aí vai.

Outro exemplo prático (da net):

1
 ls | grep b | sort -r | tee arquivo.out | wc -l
  • O comando “ls”, como bem sabemos, lista o conteúdo do diretório, porém devido ao pipe ele não envia o resultado para tela e sim ao comando “grep b”.

  • O comando “grep b” por sua vez filtra os nomes de arquivos que contém a letra “b”. Devido ao segundo pipe a saída do comando “grep b” é enviada para “sort -r”, que classifica os nomes em ordem crescente.

  • A saída do “sort -r “ é então passada para o comando “tee”, que divide os dados em dois, como se fosse uma conexão em t, fazendo com que as informações processadas pelo comando “sort -r” sejam escritas no arquivo “arquivo.out”.

  • Então o comando “wc -l” conta as linhas do arquivo “arquivo.out”. Assim obtemos como resultado a quantidade de arquivos que contém a letra “b” impresso na tela e o nome desses arquivos em “arquivo.out”.

Recapitulando em resumo básico>

1
2
3
4
5
6
7
pipe '|' -> tem a função de redirecionar a saída de dados de um comando. Acabada, então, sendo muito utilizado para rodar algum comando de complemento e/ou filtragem de saída.

; -> delimitar / marcar o final da linha
& -> chamar próximo comando
&& -> *E (and)* -> chamar o próximo comando apenas após a execução do primeiro e se for necessariamente verdadeira (comando bem sucedido)

|| -> *OU (or)* -> Operador de comparação (tal qual &&), retorna verdadeiro se pelo menos uma das expressões fornecidas for verdadeira

Comandos de filtragem e manipulação de texto

1
aprendendo a usar comandos de filtragem e manipulação para um domínio de terminal, organização e escolha de saída para poupar tempo

Primeiramente falaremos do comando de filtragem GREP pois já mostramos ele antes, mas vale mais uma explicação e seu manual. A função dele é procurar por trechos de texto (strings) dentro de diretórios e arquivos, retornando para você em quais arquivos a string foi encontrada.

Podemos usar o comando find (procurar) com ele e especificar o nome do arquivo ou a sua extensão.

1
2
3
4
5
find /home/matheus | grep exemplo   -> achar o arquivo com nome exemplo (qualquer extensão) 
find /home/matheus/Documentos | grep .psd  -> achar arquivos com psd, podendo ser a própria extensão (qualquer nome com asp ou com extensão psd será mostrada) 
  - em casos de extensão comum, mais prático usar o grep com o nome do arquivo somente

Agora estamos filtrando toda a saída do find para mostrar só o que tem algo que está especificado com o grep.

Estamos vendo agora, nessa parte complementar, a maior parte dos comandos que eu chamo de utilitários. É onde realmente começa esse tópico de filtragens.

Será mostrado o comando, o que ele faz, como usar e uma exemplificação - tudo seguindo o próprio manual, fontes de resumo da net e de meus próprios testes em alguns complementos.

É importante frisar que alguns dos comandos podem já terem sido comentados anteriormente também. Inclusive,como já dito, começaremos pelo próprio grep

grep

Uso:

grep [OPÇÃO]… PADRÃO [ARQUIVO]… Busca por PADRÃO em cada ARQUIVO. Exemplo: grep -i “olá, mundo” menu.h main.c

1
2
3
4
5
6
7
8
9
10
11
Seleção e interpretação de padrão:
  -E, --extended-regexp     PADRÃO é uma expressão regular estendida
  -F, --fixed-strings       PADRÃO são textos separados por nova linha
  -G, --basic-regexp        PADRÃO é uma expressão regular básica (por padrão)
  -P, --perl-regexp         PADRÃO é uma expressão regular de sintaxe Perl
  -e, --regexp=PADRÃO       usa PADRÃO como uma expressão regular
  -f, --file=ARQUIVO        obtém PADRÃO do ARQUIVO
  -i, --ignore-case         ignora diferenças entre maiúsculas/minúsculas
  -w, --word-regexp         força PADRÃO a coincidir só com palavras inteiras
  -x, --line-regexp         força PADRÃO a coincidir só com linhas inteiras
  -z, --null-data           uma linha de dados termina com byte 0, e não com
1
                          caractere de nova linha
1
2
3
4
5
Miscelânea:
  -s, --no-messages         suprime mensagens de erro
  -v, --invert-match        seleciona somente linhas não coincidentes
  -V, --version             mostra informações sobre versão e sai
      --help                exibe esta ajuda e sai
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Controle de saída:
  -m, --max-count=NÚM       interrompe depois de NÚM ocorrências
  -b, --byte-offset         emite a posição em bytes nas linhas de saída
  -n, --line-number         emite o número da linha nas linhas de saída
      --line-buffered       libera a saída a cada linha
  -H, --with-filename       emite o nome do arquivo nas linhas de saída
  -h, --no-filename         inibe o nome de arquivo na saída
      --label=RÓTULO        usa RÓTULO como nome de arquivo para entrada padrão
  -o, --only-matching       mostra apenas a parte da linha que coincide com
                              o PADRÃO
  -q, --quiet, --silent     inibe todas as mensagens normais de saída
      --binary-files=TIPO   assume que arquivos binários são TIPO
                             TIPO pode ser \"binary\" (binário), \"text\" (texto),
                             ou \"without-match\" (nunca coincide)
  -a, --text                equivalente a --binary-files=text
  -I                        equivalente a --binary-files=without-match
  -d, --directories=AÇÃO    como tratar diretórios;
                             AÇÃO pode ser \"read\" (ler), \"recurse\" (recursivo),
                             ou \"skip\" (ignorar)
  -D, --devices=AÇÃO        como tratar dispositivos, FIFOs e soquetes;
                             AÇÃO pode ser \"read\" (ler) ou \"skip\" (ignorar)
  -r, --recursive           equivalente a --directories=recurse
  -R, --dereference-recursive  similar, mas segue todas as ligações simbólicas
      --include=PADRÃO_ARQ  busca apenas em arquivos que casam com PADRÃO_ARQ
      --exclude=PADRÃO_ARQ  ignora arquivos e diretórios que casam com
                              PADRÃO_ARQ
      --exclude-from=ARQUI  ignora arquivos que casam com algum padrão escrito
                              em ARQUIvo
      --exclude-dir=PADRÃO  diretórios que casam com PADRÃO serão ignorados
  -L, --files-without-match emite apenas os nomes dos ARQUIVOs sem linhas
                              selecionadas
  -l, --files-with-matches  emite apenas os nomes dos ARQUIVOs com linhas
                              selecionadas
  -c, --count               emite apenas a contagem de linhas selecionadas
                              por ARQUIVO
  -T, --initial-tab         alinha por tabulação (se necessário)
  -Z, --null                emite byte 0 depois do nome do ARQUIVO
1
2
3
4
5
6
7
8
9
10
Controle de contexto:
  -B, --before-context=NÚM  emite NÚM linhas de contexto anteriores
  -A, --after-context=NÚM   emite NÚM linhas de contexto posteriores
  -C, --context=NÚM         emite NÚM linhas de contexto de saída
  -NÚM                      o mesmo que --context=NÚM
      --color[=QUANDO],
      --colour[=QUANDO]     usa marcadores para destacar os textos coincidentes;
                              QUANDO pode ser "always" (sempre), "never"
                              (nunca) ou "auto" (automático).
  -U, --binary              não exclui caracteres CR no fim de linha (MSDOS/Windows)

Quando ARQUIVO é “-“, lê da entrada padrão. Se o ARQUIVO não é informado, lê “.” se recursivo, senão lê “-“. Se há menos que dois ARQUIVOs, assume-se -h. O estado de saída é 0 se alguma linha é selecionada; 1 em caso contrário; se ocorrer algum erro e -q não é especificado, o estado de saída é 2.

tail

Uso:

tail [OPÇÃO]… [ARQUIVO]…

Mostra as 10 últimas linhas de cada ARQUIVO na saída padrão. Se especificados vários ARQUIVOs, mostra o nome de cada um antes de suas respectivas linhas.

Se ARQUIVO não for especificado ou for -, lê a entrada padrão.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Argumentos obrigatórios para opções longas também o são para opções curtas.
  -c, --bytes=[+]NÚM       emite os últimos NÚM bytes; ou usa -c +NÚM para
                             emitir iniciando com byte NÚM de cada arquivo
  -f, --follow[={name|descriptor}]
                           emite os dados anexados ao arquivo à medida que ele
                             cresce; na ausência de argumento, usa "descriptor"
  -F                       o mesmo que --follow=name --retry
  -n, --lines=[+]NÚM       emite as últimas NÚM linhas, em vez das 10 últimas;
                             ou use -n +NÚM para emitir linhas a partir de NÚM
      --max-unchanged-stats=N
                           com --follow=name, reabre o ARQUIVO que não teve o
                             tamanho alterado após N (padrão: 5) iterações
                             para ver se ele foi removido ou renomeado
                             (uma situação comum para arquivos de log rotativo);
                             com inotify, essa opção raramente é útil
      --pid=PID            com -f, termina depois do processo de PID morrer
  -q, --quiet, --silent    nunca emite cabeçalhos com os nomes dos ARQUIVOs
      --retry              continua tentando abrir um arquivo, se inacessível
  -s, --sleep-interval=N   com -f, suspende por aproximadamente N segundos
                             (padrão: 1.0) entre as iterações; com inotify
                             e --pid=P, verifica o processo P pelo menos uma
                             vez a cada N segundos
  -v, --verbose            sempre emite cabeçalhos com os nomes dos ARQUIVOs
  -z, --zero-terminated     delimitador de é NULO, e não com nova linha
      --help     mostra esta ajuda e sai
      --version  informa a versão e sai

NÚM pode ter um sufixo multiplicador: b 512, kB 1000, K 1024, MB 10001000, M 10241024, GB 100010001000, G 102410241024, e assim por diante com T, P, E, Z, Y.

Com –follow (-f), tail segue o descritor de arquivo, o que significa que mesmo se um arquivo for renomeado durante rastreamento do tail, ele vai continuar a rastreá-lo. Este comportamento padrão não é desejável quando você quer rastrear pelo nome verdadeiro do arquivo, e não o descritor de arquivo (por exemplo, a rotação de um log). Use –follow=name nesse caso. Isso faz com que tail rastreie o arquivo reabrindo-o periodicamente para ver se ele foi removido e recriado por algum outro programa.

exemplos: tail -5 /etc/mtools.conf ;

1
tail -2 /home/matheus/Documentos/exemplo.txt ;

tee

Uso:

tee arquivo.txt

tee exibe a saída de um programa e escreve-a em um arquivo, simultaneamente.

1
2
3
Sintaxe: tee [opções] arquivo
    -a :: concatena o arquivo em vez de sobrescrevê-lo
    -i :: ignora interrupções 
exemplo de uso: lstee exemplo.txtgrep ‘teste’

Listou os diretórios e arquivos do local, gravou a saída em ‘Do’ e pediu para filtrar esse arquivo mostrando apenas a string ‘Do’.

Saída:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$>ls | tee exemplo.txt | grep 'Do'
Documentos
Downloads
------
$>ls
'Área de Trabalho'   Downloads     Imagens   npm-debug.log   snap        Vídeos
 Documentos          **exemplo.txt**   Música    Público         Templates

$>cat exemplo.txt
    Área de Trabalho
    Documentos
    Downloads
    Imagens
    Música
    npm-debug.log
    Público
    snap
    Templates
    Vídeos

Diff

diff exibe, na tela, as diferenças entre dois arquivos texto ou todos os arquivos com o mesmo nome, em dois diretórios.

1
2
3
4
5
6
7
8
Sintaxe: diff [opções] arquivo1 arquivo2
    -a :: considera todos os arquivos do tipo texto
    -b :: ignora sequências de espaços e caracteres de tabulação
    -d :: tenta localizar um conjunto menor de modificações (isso torna o diff mais lento)
    -i :: não distingue maiúsculas de minúsculas
    -r :: processa também os subdiretórios, quando diretórios são comparados
    -s :: informa quando dois arquivos são na verdade o mesmo arquivo
    -N :: trata arquivos ausentes como vazios 

Exemplo (exibe as diferenças entre os arquivos “spc1.txt” e “spc2.txt”): diff -f /operftp/tmp1/spc1.txt /operftp/tmp2/spc2.txt

xargs

xargs constrói e executa comandos a partir da entrada padrão.

1
2
3
Sintaxe: xargs [opções] comando [argumentos]
    -p :: modo interativo, pede confirmação antes de executar cada linha de comando
    -t :: modo detalhado, exibe a linha de comando na tela antes de executá-la 

Exemplo: find / -empty | xargs ls -l | less

cat

Uso:

1
$ cat [opções] arquivo

Quando as opções aparecem entre chaves, elas são opcionais mesmo.

O comando cat concatena arquivos, imprime seu conteúdo de tela e ainda pode receber texto digitado pelo teclado para um arquivo.

Vejamos como criar um arquivo com apenas algumas linhas de texto:

1
$ cat > teste.txt

Agora você pode digitar qualquer texto. Quando terminar, pressione Ctrl d em uma linha vazia para finalizar a entrada de dados e salvar o arquivo teste.txt.

Para ver o conteúdo do arquivo recém-criado:

1
$ cat teste.txt

O cat também pode servir para concatenar arquivos.

1
$ cat texto1.txt > texto.txt

Observe que neste exemplo o conteúdo do arquivo texto.txt é substituído pelo texto1.txt.

Para adicionar o conteúdo do texto1.txt no final arquivo texto.txt o correto seria:

1
$ cat texto1.txt >> texto.txt

cut

Uso:

1
$ cut opções arquivo

O comando cut traduzido ao pé da letra significa cortar. Ele lê o conteúdo de um ou mais arquivos e tem como saída uma coluna vertical.

Suas opções mais frequentes são:

1
2
3
4
-b número: Imprime uma lista vertical com o byte número (da esquerda para direita);
-c número: Imprime uma lista vertical com o caractere número (da esquerda para direita);
-d delimitador: Configura o delimitador que separa uma coluna da outra. O padrão é o Tab;
-f número: Imprime a coluna número.

Exemplos:

1
2
3
4
5
$ cut –d : -f 1 /etc/passwd

$ cut –b 1 /etc/passwd

$ cat /etc/hosts | cut –f 2

expand

Uso:

1
$ expand [opções] arquivo

O comando expand troca o Tab (tabulação) dentro dos textos para o número de espaços correspondentes. É útil para tornar um texto que faz uso das tabulações mais atrativas para determinados dispositivos, como vídeo, impressora, arquivos, etc.

As opções frequentemente utilizadas são:

1
2
-t número: Especifica o número de espaços que o tab contém. O padrão é 8;
-i: Converte somente no início das linhas.

Exemplo:

1
$ expand LEIAME.TXT

unexpand

Uso:

1
$ unexpand [opções] arquivo

O comando unexpand troca o espaço simples por TAB (tabulação) dentro dos textos, no início das linhas. É o inverso do comando expand.

As opções frequentemente utilizadas são:

1
2
-t número: Especifica o número de espaços que o tab contém. O padrão é 8;
-a: Converte todos os espaços ao invés dos espaços no início das linhas.

Exemplo:

1
$ unexpand LEIAME.TXT

fmt

Uso:

1
$ fmt [opções]

O comando fmt (format) formata um texto com uma largura específica. Ele pode remover espaços ou adicionar espaços conforme a largura desejada. O padrão são 75 caracteres.

A opção frequentemente utilizada é:

1
-w número: Configura a largura desejada para o texto.

Exemplo:

1
$ fmt –w 50 LEIAME.TXT

Uso:

1
$ head [opções]

O comando head (cabeçalho) mostra as primeiras 10 linhas do início do texto.

A opção frequentemente utilizada é:

1
-n número: Configura o número de linhas que o head irá mostrar.

Exemplo:

1
$ head –n 50 LEIAME.TXT

Join

Uso:

1
$ join [opções] arquivo1 arquivo2

O comando join (juntar) une as linhas de ambos os arquivos que tenham um índice comum. O comando join poderá ser utilizado como um banco de dados simples.

As opções frequentemente utilizadas são:

1
2
3
-j1 número: Escolhe o campo número como índice para o arquivo1.
-j2 número: Escolhe o campo número como índice para o arquivo2.
-j número: Escolhe o campo número como índice para ambos os arquivos.

Exemplo:

Suponha que o primeiro arquivo contenha o seguinte conteúdo:

1
2
3
4
5
1      SXY-2469

2      KOE-2608

3      OIE-3645

E o segundo arquivo tenha o seguinte conteúdo:

1
2
3
4
5
1      Monza

2      Audi A3

3      Fiat Uno Mille Smart

Depois do comando:

1
$ join –j 1 arquivo1 arquivo2

A saída será a seguinte:

1
2
3
4
5
1      SXY-2469 Monza

2      KOE-2608 Audi A3

3      OIE-3645 Fiat Uno Mille Smart

TABELA 5 – Símbolos para diferenciar cabeçalho e rodapé

Símbolo Descrição ::: Símbolo utilizado para iniciar o cabeçalho do texto :: Símbolo utilizado para iniciar o corpo do texto : Símbolo utilizado para iniciar o rodapé do texto

Veja que o comando join necessita que ambos os arquivos contenham um índice, como no exemplo.

nl

Uso:

1
$ nl [opções] [arquivo]

O comando nl (numerar linhas) é utilizado para numerar as linhas de um arquivo. O comando considera condições especiais para o cabeçalho e o rodapé do arquivo.

As opções frequentemente utilizadas são:

1
2
3
-h subopção: Utilizada para formatar o cabeçalho do texto. O padrão é não numerar o cabeçalho;
-b subopção: Utilizada para formatar o corpo do texto. O padrão é numerar somente as linhas não vazias;
-f subopção: Utilizada para formatar o rodapé do texto. O padrão é não numerar o rodapé.

As subopções são:

1
2
3
A: Numerar todas as linhas;
t: Numerar somente as preenchidas;
n: Não numerar as linhas.

Exemplo:

Suponha que o arquivo.txt tenha o seguinte conteúdo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
\:\:\:

Relatório de Notas e Frequência dos alunos de Engenharia de Software

——————————————————————————————————————————————————————————————————

Nome               Nota          Freq.         Resultado

——————————————————————————————————————————————————————————————————

\:\:

Carlos Torres          8,5           80%               Aprovado

José Antônio          10,0           100%                Aprovado

Maria de Lourdes      10,0              100%               Aprovado

Mário Cabral           9,5           100%                Aprovado

\:

——————————————————————————————————————————————————————————————————

E usarmos o comando nl:

1
$ nl arquivo.txt

O resultado será:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
     Relatório de Notas e Frequência dos alunos de Engenharia de Software

       ——————————————————————————————————————————————————————————————————

            Nome           Nota          Freq.         Resultado

       ——————————————————————————————————————————————————————————————————

         1    Carlos Torres       8,5            80%             Aprovado

         2    José Antônio        10,0           100%             Aprovado

         4    Maria de Lourdes    10,0           100%             Aprovado

         5    Mário Cabral         9,5           100%             Aprovado

        ——————————————————————————————————————————————————————————————————

od

Uso:

1
$ od [opções] [arquivo]

O comando od (Octal e Demais formatos) é utilizado para visualizarmos o conteúdo de um arquivo nos formatos hexadecimal, octal, ASCII e nome dos caracteres.

A opção frequentemente utilizada é:

1
-t tipo: Especifica o tipo de saída que o comando od deve gerar.

Os tipos possíveis são:

1
2
3
4
a: Nome do caractere;
c: ASCII;
o: Octal;
x: Hexadecimal.

Exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ cat > arquivo.txt

Certificação Linux

Ctrl d

$ od –t x arquivo.txt

0000000 74726543 63696669 6fe3e761 6e694c20

0000020 00007875

0000022

paste

Uso:

1
$ paste [opções] arquivo1 arquivo2

O comando paste (colar) é utilizado para concatenar as linhas de diversos arquivos em colunas verticais.

As opções frequentemente utilizadas são:

1
2
-d’s’: Separa as colunas com o símbolo s dentro das aspas simples;
-s: concatena todo o conteúdo de um arquivo com uma linha para cada arquivo.

Exemplo:

Suponha que o arquivo1 tenha o seguinte conteúdo:

1
2
3
4
5
ntkonoha

lsilveira

ralencar

E o arquivo2 tenha o seguinte conteúdo:

1
2
3
4
5
provedor.com.br

outroprovedor.com.br

provedorEZ.com.br

Ao utilizarmos o comando paste, o resultado será o seguinte:

1
2
3
4
5
6
7
$ paste –d’@’ arquivo1 arquivo2

ntkonoha@provedor.com.br

lsilveira@outroprovedor.com.br

ralencar@provedorEZ.com.br

pr

Uso:

1
$ pr [opções] arquivo

O comando pr (printing) formata um arquivo texto para uma saída paginada com cabeçalho, margens e largura definidos. É útil para formatar textos crus para impressão. O cabeçalho consiste em data, hora, nome do arquivo e número da página.

As opções frequentemente utilizadas são:

1
2
3
-d: Especifica espaçamento duplo;
-l número: Especifica o número de caracteres de largura da página. O padrão são 66 caracteres;
-o número: Especifica o número de espaços da margem esquerda.

Exemplo: $ pr –l 75 –o 5 arquivo.txt

plit

Uso:

1
$ split [opções] arquivo_entrada arquivo_saida

O comando split (dividir) é usado para dividir grandes arquivos em n-arquivos menores. Os arquivos de saída são gerados de acordo com o número de linhas do arquivo de entrada.

O padrão é dividir o arquivo a cada 1000 linhas. Os nomes dos arquivos de saída seguem o padrão arquivosaidaaa arquivosaidaab arquivosaidaac, assim por diante.

A opção mais frequente é:

1
-n: Onde n é o número de linhas que irão dividir o arquivo de entrada.

Exemplo:

1
$ split -20 arquivo1.txt arquivosaida.txt

tail

Uso:

1
$ tail [opções] arquivo

O comando tail (cauda) visualiza as últimas 10 linhas de um arquivo. Funciona como o oposto do comando head.

As opções mais frequentes são:

1
2
-n número: Especifica o número de linhas finais que o tail irá mostrar de um arquivo;
-f: Mostra as últimas linhas finais de um arquivo continuamente enquanto outro processo grava mais linhas. Muito útil para visualizarmos arquivos de LOG.

Exemplo:

1
2
3
$ tail –n 50 /var/log/messages

$ tail –f /var/log/messagens

tr

Uso:

1
$ tr [opções] variável_busca variável_troca

O comando tr faz a troca de uma variável por outra especificada. Este comando não trabalha diretamente com arquivos, portanto deve ser utilizado com a saída padrão de outro comando.

As opções mais frequentes são:

1
2
-d: Apaga as ocorrências da variável de busca;
-s: Suprime as ocorrências repetidas da variável de busca.

Exemplo:

1
$ cat arquivo1 | tr a-z A-Z

Neste exemplo o comando tr troca todas as letras de a a z para maiúsculas.

1
$ cat arquivo1 | tr –d a

Neste exemplo o comando tr apaga a letra a.

1
$ cat arquivo1 | tr –s 1

Neste exemplo o comando tr suprime as ocorrências repetidas do número 1.

O comando tr pode fazer a troca de caracteres da variável de busca pela variável de troca, mas o número de caracteres precisa ser o mesmo em ambas.

wc

Uso:

1
$ wc [opções] [arquivos]

O comando wc conta as linhas, palavras e caracteres de um ou mais arquivos. Se mais de um arquivo for passado como argumento, ele irá apresentar as estatísticas de cada arquivo e também o total.

As opções mais frequentes são:

1
2
3
4
-c: Conta o número de caracteres de um ou mais arquivos;
-l: Conta o número de linhas de um ou mais arquivos;
-L: Conta o número de caracteres da maior linha do arquivo;
-w: Conta as palavras de um ou mais arquivos.

Exemplo:

1
$ wc LEIAME.TXT

sort

Uso:

1
$ sort [-b] [-d] [-f] [-i] [-m] [-M] [-n] [-r] [-u] arquivo [-o arquivo_ saída]

O comando sort ordena as linhas de um arquivo texto.

Suas opções são:

1
2
3
4
5
6
7
8
9
10
-b: Ignora espaços no início da linha;
-d: Coloca as linhas em ordem alfabética e ignora a pontuação;
-f: Ignora a diferença entre maiúsculas e minúsculas;
-I: Ignora caracteres de controle;
-m: Mescla dois ou mais arquivos em um arquivo ordenado de saída;
-M: Trata as três primeiras letras das linhas como mês (ex: JAN);
-n: Ordena pelos números no início das linhas;
-r: Ordena em ordem inversa;
-u: Se a linha for duplicada, mostra somente a primeira;
-o: Envia a saída do comando para o arquivo.

Ex.:

1
$ sort arquivo

Uniq

Uso:

1
$ uniq [Opções]… [Arquivo Entrada [Arquivo Saída]]

O comando uniq remove as linhas duplicadas de um arquivo ordenado.

Exemplo: uniq operadores.txt | sort -c

As opções mais comuns são:

1
2
3
4
-c: Indica no início das linhas o número de ocorrências;
-d: Imprime somente as linhas duplicadas;
-i: Ignora a diferença entre maiúsculas e minúsculas;
-u: Imprime somente as linhas únicas, que não têm duplicatas.

sed

Uso:

$ sed [Opções] {script} arquivo

O comando sed é um poderoso editor de strings para filtrar ou editar sequências de texto.

As opções mais comuns são:

1
2
3
-e: Adiciona um script aos comandos a serem executados;
-f arquivo: Adiciona o conteúdo de um arquivo como script a ser executado;
-r: Usa expressões regulares no script.

Exemplos:

Para substituir expressões por outras, utilizamos o “s”, com os delimitadores “/”, de forma que a primeira ocorrência é o texto a ser procurado, e a segunda o texto que será substituído. Observe que o sed somente irá trocar a primeira ocorrência de cada linha, e é sensível a maiúsculas e minúsculas. A saída padrão do sed será o terminal.

1
2
3
4
5
6
7
$ cat arquivo

Hoje fará calor de noite. A Noite é bela.

$ sed s/noite/dia/ arquivo

Hoje fará calor de dia. A Noite é bela.

Echo

Uso:

echo [opções] [argumentos]

Este comando mostra texto na saída padrão seguido por uma nova linha.

1
2
3
4
5
6
7
-n : não adiciona uma nova linha após mostrar os argumentos.

-e : habilita interpretação dos códigos de escape após barra invetida.

-E : suprime explicitamente a interpretação de códigos de escape após barra invertida.
    São exemplos de códigos de escape
\a : alerta (Sino); \b : retroceder; \c : suprime próxima saída; \e : caractere de escape; \f : alimentação de página (FF); \n : nova linha (NL); \r : retorno de carro (CR); \t : tabulação horizontal; \v : tabulação vertical.

Exemplos;

  • O comando
    1
    
    `echo teste`
    

    apenas mostra a palavra “teste” na saída padrão, enquanto o comando

    1
    
    echo
    

    mostra uma linha em branco.

  • Este comando pode ser usado para exibir todos os nomes de arquivos de um diretório em ordem alfabética. Por exemplo,

    1
    
    `echo /*`
    

    lista o conteúdo do diretório raiz.

  • O comando

    1
    
    `echo -e /etc/*\n” /*`
    

    mostra o conteúdo do diretório /etc, define uma nova linha com o código de escape “\n” e, em seguida, mostra o conteúdo diretório raiz.

  • Este comando pode também ser utilizado na programação shell

    para escrever mensagens na saída padrão. Por exemplo,

    1
    
    `echo ‘erro de execução’`
    

    mostra a mensagem definida entre aspas simples no terminal do usuário.

  • Para verificar o conteúdo da variável de ambiente PATH, basta digitar na linha de comando

    1
    
     `echo$PATH`
    
  • O comando também pode ser usado para add um texto a um arquivo, criar um arquivo com texto dentro ou alterar todo o arquivo por uma nova mensagem;

    Sobrescrever todo arquivo pela palavra teste / ou criar um arquivo com a palavra teste:

    1
    
    `echo "teste" > /path/arquivo`
    

    Acrescentar ao final do arquivo a palavra teste

    1
    
    `echo "teste" >> /path/arquivo`
    

    caso queira adicionar uma frase em uma linha específica de um arquivo, use o comando SED, mostrado acima. Exemplo:

    sed '15s/.*/Adoro esse site/' < nome do arquivo >

    sed '15c\Adoro esse site' < nome do arquivo >

    Sendo 15 a numeração da linha e o Adoro esse site o texto a ser inserido.

    ps: de nada adianta colocar alguma palavra na linha 10 em um arquivo que tem 4 linhas…

Organização e velocidade

É legal falar que podemos também aprender algumas teclas de atalho para ter facilidade em trabalhar no terminal. Segue algumas teclas de atalhos que geralmente são padrões e podem ser bastante úteis para seu workflow. Alguns programas podem utilizar teclas diferentes e outros podem permitir a alteração para as teclas de sua escolha.

Teclas de Atalhos

  • Ctrl + Alt + T - abrir o terminal
  • Ctrl + Shift + C - copiar um texto selecionado;
  • Ctrl + Shift + V - colar um texto copiado;
  • Ctrl + C - cancelar o comando em funcionamento;
  • Ctrl + L - limpar o terminal, similar ao comando clear;
  • Ctrl + D - fazer logout da sessão atual, similar ao comando exit;
  • Ctrl + W - apagar uma palavra na linha atual;
  • Ctrl + U - apagar a linha inteira;
  • Ctrl + R - mostrar um comando recente;
  • - teclando pra cima pode retornar os últimos comandos usados pelo usuário;
  • !! - repetir o último comando
  • Tab - completar palavra, como o nome de um arquivo ou pasta, para não precisar escrever tudo
  • entre outros…

Com o programa Terminator, e outros parecidos, você pode abrir mais de um terminal na mesma janela de forma simples e organizada, além de poder customizar as teclas de atalho da forma que quiser. É uma das excelentes alternativas para quem busca trabalhar de forma mais efetiva e rápida com as linhas de comando.

Lista de comandos gerais

1
Guia resumido de diversos comandos. Uma pequena lista de comandos para quem quer apenas checar, conhecer e/ou revisar.

Nesta parte listei diversos comandos com suas funcionalidades principais, sem aprofundamento geral de como usar. Lista resumida de comandos para o terminal:

Obs: alguns comandos podem precisar serem instalados para funcionar em algumas distribuições

  • man / help : manual para algum comando; help, -h, –help se quer ajuda sobre usar tal comando

  • whatis - mostra um resumo sobre comandos.

  • whoami - comando que mostra quem é você - usuário.

  • whereis - buscar e listar a localização de arquivos binários, fontes e documentação.

  • shutdown - desligar, reinicializar ou suspender.

  • logout - Finalizar sessão

  • reboot, shutdown -r now - Reiniciar o sistema

  • halt, telnit 0, init 0, shutdown -h now - Desligar o sistema

    • ifconfig - Mostrar e configurar interface de rede.

    • date - exibir ou modificar a data e a hora do sistema .

    • cal - calendário .

    • pwd - diretório atual.

    • cd - navegar entre as pastas .

    • file - informações de um arquivo - identifica o tipo de arquivo.

    • cat - ver conteúdo de algum arquivo .

    • less e more - ler conteúdo de texto com paginação, com esses você pode ‘folhear’ um arquivo de texto. Com o more apenas será possível descer pelo arquivo, já o less te permite subir/voltar se quiser. O less também te permite salvar todo o resultado canalizado de um comando usado com ele.

    • mkdir - criar diretórios.

    • rmdir - remover diretórios vazios.

    • rm - remover arquivos (ou diretórios cheios seguido do parâmetro recursive e force > rm -rf).

    • mv - mover ou renomear arquivo ou diretório.

    • rename - renomear arquivos ou diretórios.

    • cp - copiar / duplicar arquivo.

    • uptime - mostra há quanto tempo o pc está ligado.

    • touch - criação de arquivo em branco. Podemos, também, alterar a data e a hora do último acesso e/ou data de modificação de um arquivo.

    • nano, vi, vim, visudo, vipw, etc - editores de texto - criação de arquivo - visudo é o recomendado para editar o arquivo sudores - vipw para editar os arquivos /etc/passwd e /etc/shadow.

    • clear - limpa a tela do terminal (ou CTRL + L).

    • exit - este comando executa o término de um processo, seja fechando o terminal ou sair do usuário que você logou via terminal, por exemplo.

    • route - visualizar e manipular o IP routing table - tabela de roteamento IP

    • free - conferir o uso de memória ram (por padrão em kilobytes, já com o valor *-h mostra em mega ou em giga)* .

    • apt - advanced package tool: pacote de comandos usados para instalar e buscar programas, atualizar sistema, entre outros. (obs: alguns sistemas não trabalham com apt, mas sim com outros comandos, como o comando dnf pelo fedora).

    • uname - informações do sistema. ( * -m para saber a arquitetura do sistema (x86 ou x64); -r sobre kernel; -a mostrar tudo que ele pega* ).

    • find - encontrar arquivos - pesquisa em uma hierarquia de diretórios.

    • strings - localizar e imprimir cadeias de texto embutidos em arquivos binários.

    • mount - montar sistemas de arquivo. (unmount para desmontar & *fuser para forçar a remoção de um dispositivo ocupado)*.

    • sudo - usar privilégio de outro usuário para aqueles que estão em sudoers - pode ser lido como super user do.

    • dpkg - instalador de pacotes.

    • grep - filtro para uma saída mais específica.

    • arch - informar a arquitetura do sistema / o tipo de hardware.

    • at - agendar tarefa [listar as tarefas com atq; deletar tarefas com atrm].

    • chgrp - alterar nome do grupo de arquivos.

    • chmod - alterar as permissões de arquivos.

    • chsh - alterar o shell padrão (normalmente o padrão é o bash).

    • cut - filtro para selecionar partes de um arquivo e exibir o resultado.

    • echo - Apresentar um texto. Mostrar texto na saída padrão seguido por uma nova linha. Pode ser usado pra criar um arquivo com texto dentro, pra add um texto em uma linha ou modificar todo o texto pelo que quiser.

    • fdisk - gerenciar partições de disco.

    • fg - mover processos de segundo para primeiro plano.

    • finger - exibir informações do usuário.

    • fsck - verificar e até reparar sistemas de arquivos.

    • fuser - identificar processos que usam um determinado arquivo.

    • gcc - compilar linguagem c e c++ [ gdb - um debugger para depuração de programas C e C++ ].

    • getcap- informar as capacidades dos arquivos.

    • gpasswd - administrar o arquivo /etc/group.

    • passwd - administrar senhas de usuários

    • groupmod - modificar grupo de usuários do sistema.

    • head - mostrar as primeiras linhas de um arquivo de texto.

    • history - mostrar os últimos comandos utilizados pelo usuário.

    • hwinfo - pegar e mostrar a maior quantidade possível de informações sobre o hardware da máquina. - info - pegar a documentação de informação sobre um comando, pode ser mais amigável que o man.

  • apropos - pesquisar por determinada expressão nas páginas do manual do sistema.

  • xman - Navegador para as páginas on-line.

  • kill - enviar um sinal para um processo, normalmente para encerrar. Para ver a lista de sinais usar kill -l.

  • killall - envia um determinado sinal a um conjunto de processos de mesmo nome.

  • ps, pstree e top - mostrar informações sobre os processos em execução. O pstree lista em modo de organização árvore.

  • lscpu - informações de arquitetura da CPU.

  • lshw - informações sobre hardware.

  • lsmod - listar módulos do kernel carregados na memória.

  • insmod - inserir um módulo no kernel Linux.

  • lsof - listar arquivos em uso dos processos (list open files).

  • lsusb - informações de dispositivos USB (Universal Serial Bus).

  • make - simplificar e agilizar a compilação de programas; compilando; verificando arquivos que precisam ser compilados e criando aplicações.

  • mkswap - configurar swap, área de troca.

  • more - paginação de arquivos ou da entrada padrão.

  • netstat - informações sobre as conexões de rede, tabelas de roteamento e estatísticas da utilização da interface na rede.

  • nice - definir valor de ajuste da prioridade.

  • nl - exibir o conteúdo de um arquivo com linhas enumeradas.

  • nohup - deixar qualquer comando rodando mesmo desconectado do sistema.

  • oclock - relógio analógico com a hora atual do sistema.

  • diff - comparar dois arquivos linha a linha.

  • patch - atualizar o arquivo de acordo com as diferenças mostradas pelo diff.

  • ping - normalmente usado para testar a conectividade (usa o datagrama _Echo Request_ _(ping)_ do protocolo ICMP).

  • ps - mostrar informações dos processos ativos.

  • quota - informações sobre o sistema de cotas de disco.

  • renice - alterar o valor nice para calcular a prioridade de um processo normal.

  • RPM - gerenciador de pacotes.

  • setcap - setar, deletar e alterar a capacidade de um arquivo.

  • slabtop - exibir em tempo real informações da memória cache.

  • sort - mostrar saída de um arquivo texto mais organizado, como em ordem crescente por exemplo (espaços, números, letra maiúsculas [A-Z] e letras minúsculas [a-z]).

  • source - executar um arquivo no shell (interpretador de comandos do linux).

  • ssh - acessar e executar comandos em uma máquina remotamente.

  • stat - mostrar informações sobre um arquivo.

  • tac - mostrar conteúdos de arquivos de forma inversa.

  • tail - exibir ultimas linhas de um arquivo de texto.

  • tee - lê a entrada padrão e a salva em um ou mais arquivos.

  • tree - listar, assim como o ls, mas em formato árvore.

  • unset - apagar uma variável de ambiente.

  • users, who, w - listar/mostrar usuários logados/conectados. w também mostra o que estão executando.

  • vmstat - mostrar estatísticas sobre a memória virtual.

  • wc - contar linhas, palavras e caracteres.

  • wget - baixar arquivos da internet (usa os protocolos HTTP, HTTPS e FTP).

  • curl - “Client URL” - verificar a conectividade da URL & transferência de dados

  • ar, tar, gzip, compress, bzip2, zip - compactar/agrupar e descompactar arquivos. (com o tar tbm pode exibir o conteúdo do arquivo e até ser usado para backups)

  • unzip, bunzip2 - descompactar arquivos

  • ln - criar links (atalhos).

  • which- indica o caminho completo para o comando dado.

  • du - indicar o espaço usado em disco pelos arquivos ou diretórios dados.

  • df - dar informações sobre os sistemas de arquivos disponíveis na máquina e sua ocupação em disco.

  • printenv SHELL - saber qual interpretador de comandos seu usuário utilizar.

  • locate - encontrar todas as instâncias de um arquivo.

  • finger - informações do usuário.

  • bg - listar, e fazer continuar, trabalhos parados e em segundo plano.

  • change - ver, definir e modificar um limite de tempo para contas de usuário.

  • newgrp - criar novo grupo para alterar o grupo padrão dos arquivos recém-criados.

  • grpck - checar a sintaxe correta de ‘/ etc/grupo’ e a existência de grupos.

  • pwck - checar a sintaxe correta de ‘/ etc/passwd’ e a existência de usuários.

  • chattr - definir certos atributos de um arquivo.

  • lsattr - exibe os atributos de um arquivo.

  • ecode - conversão de formatos de arquivos.

  • badblocks - verificar se tem blocos defeituosos do disco.

  • ext2, e2fsck - verificar e reparar a integridade do sistema de arquivo ext2.

  • ext3, e2fsck - verificar e reparar a integridade do sistema de arquivo ext3.

  • vfat - verificar e reparar a integridade do arquivo sistema disco fat.

  • msdos, dosfsck - verificar e reparar a integridade de um arquivo a partir do sistema disco DOS.

  • unix2dos - conversão de um formato de arquivo de texto do MSDOS para UNIX, e dos2unix de UNIX para MSDOS.

  • dump - ferramenta de backup de bloco de disco. - Tal qual o tar, mas mais eficiente e seguro.

  • rsync - sincronizar diretórios.

  • restore - restaurar um save.

  • xrandr - ver e fazer configuraçes de monitor(es)

    ….entre outros…

Finalização

Não conseguirei postar todos os comandos que existem, mas tentei colocar uma boa parte deles para que fique um material bem completo. Mas pelo menos agora, das coisas do dia-a-dia, podemos fazer praticamente tudo e mais um pouco. Manterei a lista atualizada em caso de algum equívoco e falta de qualquer comando importante e/ou básico para ser apresentado.

Acredito que o material já esteja de bom tamanho e que tenha ficado um excelente compilado para quem quer aprender sobre. Certamente, por meio deste material, compensa começar a estudar e a se aperfeiçoar, principalmente se precisar lembrar algo que tenha esquecido em momento de aperto.

Claro, não parem por aqui. A internet está recheada de conteúdos excelentes para aprender cada vez mais!

Se aventure neste mundo! Divirta-se!

Se puder ajudar compartilhando o material com amigos que buscam aprender, seria de grande ajuda. Lembrando que meu trabalho aqui é apenas como um divulgador e estudante, sem fins lucrativos.

Obrigado para todos que curtiram e compartilharam o material, muito obrigado mesmo.Feito de coração de estudante para estudante.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.

Comments powered by Disqus.