Shell do Linux para Leigos [Guia Básico]

É importante dizer que mesmo com um ambiente gráfico bonito, prático e diversificado, é na linha de comando que reside a força do Linux. Para os usuários avançados, é no shell do sistema operacional que a mágica acontece, pois, o Linux permite que o usuário faça o que quiser, com a facilidade de se alterar um arquivo. A concatenação de comandos também permite criar verdadeiros canivetes suíços computacionais.

O acesso ao terminal é simples e rápido. Basta procurar o aplicativo Terminal no ambiente gráfico, ou apertar a sequencia de teclas Ctrl-Alt-F1…F2…F3.. para se ter acesso ao terminal.

Shell do Linux para Leigos: A Linha de Comandos

Entrar com comandos no shell é mais do que simplesmente digitá-los.

Primeiro, o comando precisa ser válido e estar nos diretórios listados na variável PATH ou com sua localização explícita. O comando também pode requerer opções, geralmente precedidos pelo símbolo “-” ou “–” e por argumentos. O importante é que cada comando tem sua sintaxe única e pode haver variações dependendo da distribuição do Linux.

Vejamos alguns exemplos simples com o comando ls:

$ ls

Este comando lista os arquivos no diretório corrente. Ele não requer nenhuma opção ou argumento para ser executado. O argumento –l pode ser acrescentado para gerar uma lista de arquivos detalhada:

$ ls –l

Podemos ainda colocar mais opções para o comando ls:

$ ls –l –a –t

Ou

$ ls –lta

No caso do comando ls, as opções podem ser passadas separadamente ou combinadas. A opção –a mostra todos os arquivos incluindo os ocultos. A opção –t mostra os arquivos ordenados pela última data de modificação. A ordem das opções não é importante para o ls.

Para ocultar um arquivo no Linux, o seu nome deve necessariamente começar com o símbolo “.” (ponto). Ex: .bash_history

Para alguns comandos as opções têm de ser precedidas com dois traços “–” ao invés de um traço. Ainda, alguns comandos oferecem formas alternativas de indicar uma mesma opção. No caso do ls, as opções –a e –all produzem o mesmo efeito. O detalhe é que opções que são chamadas com dois traços não podem ser combinadas.

$ ls –lt --all

E não:

$ ls --lalllt

Alguns comandos podem aceitar argumentos como opcional. Para outros comandos os argumentos são necessários. Os argumentos são os parâmetros que os comandos aceitam ou necessitam. Vejamos o comando ls:

$ ls –l *.txt

No exemplo acima o comando ls recebeu a opção –l e o argumento *.txt que filtra os arquivos terminados com a extensão  .txt.

Outra variação possível são os comandos que precisam obrigatoriamente de uma opção para executar uma tarefa que geralmente não é precedida pelo traço. É comum para esse tipo de comando que suas opções sejam sucedidas por argumentos. Veja como exemplo o comando dd:

$ dd if=bootdisk.img of=/dev/fd0

O comando dd copia e converte arquivos de acordo com as opções passadas. No exemplo, o comando irá ler uma imagem de um disco de boot (opção if=bootdisk.img) e irá gravar esta imagem no drive a: (opção of=/dev/fd0).

Quase todos os comandos aceitam a opção –-help que mostra uma ajuda simples das opções e argumentos aceitos pelo comando.

É importante que você tenha em mente que o Linux somente vai executar os comandos que sejam internos do interpretador, ou comandos cuja localização esteja na variável PATH ou comandos chamados com o seu caminho explícito.

$ ls 

Ou

$ /bin/ls

No exame é muito importante que você esteja bem familiarizado com os comandos listados neste capítulo e sua sintaxe. Portanto você precisa saber quando o comando aceita opções com um traço, dois traços ou nenhum traço.

O Bash também permite que você entre com uma sequência de comandos em uma mesma linha. Para isso você deve separar os comandos com o símbolo ; (ponto e vírgula).

$ echo $PS1; echo $PS2

O Bash escreve em um arquivo chamado .bash_history localizado no diretório home de cada usuário o histórico de todos os comandos digitados pelos usuários. A possibilidade de recuperar os comandos digitados é fabulosa. Isto pode ser bastante útil para fins de auditoria, relembrar a memória ou simplesmente economizar os dedos.

Você poderá ver os comandos que digitou visualizando o conteúdo do arquivo .bash_history. 

$ cat ~/.bash_history

O comando cat, dentre outras coisas, serve para visualizar o conteúdo dos arquivos. 

nota_pt Shell do Linux para Leigos [Guia Básico]O símbolo “~” faz referência ao diretório home do usuário logado.

Variáveis de Shell

O primeiro contato do usuário com o shell do Linux é o prompt de comandos.

Como este prompt de comandos se apresenta pode mudar em cada distribuição, desde o mais simples, com um simples “$” ou com informações de usuário, nome do servidor e até mesmo o diretório corrente:

[[email protected] ~]$

O prompt de comandos pode ser personalizado através da configuração de uma variável que o shell do Linux mantém chamada de PS1.

As variáveis são carregadas no início da execução do bash e também podem ser configuradas manualmente em qualquer momento.

A primeira variável que iremos abordar é a PS1 ou simplesmente Prompt String 1.

Esta variável guarda o conteúdo do prompt de comandos do bash quando ele está pronto para receber comandos.

Existe também a variável PS2 que guarda o conteúdo do prompt de comandos quando são necessários múltiplas linhas para completar um comando.

Estas duas variáveis do shell não afetam como o interpretador irá processar os comandos recebidos, mas podem ser de grande ajuda quando carregam informações extras como nome do usuário, diretório corrente, etc.

Convencionou-se que as variáveis são todas escritas em caixa-alta. Mas é importante que você saiba que $nome e $NOME são duas variáveis diferentes para o shell.

O conteúdo de qualquer variável do Shell poderá ser visualizado com o comando echo sucedido pelo símbolo $ mais o nome da variável:

$ echo $PS
\$

O caractere \ diz que qualquer outro caractere que o sucede deve ser interpretado exatamente como ele é e não processado pelo shell. Ele é o que chamamos de metacaractere.

É comum que o prompt de comandos padrão do bash venha no formato: \[email protected]\h:\W\$

Os comandos e variáveis no Linux são sensíveis às letras maiúsculas e minúsculas. Cada um destes caracteres é interpretado de forma especial.

O \u é utilizado para representar o nome do usuário, o \h é utilizado para representar o nome do sistema (hostname) e o \W é o diretório corrente.

Um exemplo para este prompt é: [email protected]:home$

Outra variável importante do Shell é o PATH. O path guarda uma lista dos diretórios que contêm os programas que você poderá executar sem precisar passar na linha de comandos o caminho completo de sua localização.

$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin

É importante que você saiba que o interpretador de comandos do bash acompanha a seguinte ordem para achar e executar os comandos digitados:

  1. O comando digitado é um comando interno do interpretador de comandos?
  2. Se não for, o comando é um programa executável localizado em algum diretório listado na variável PATH?
  3. A localização do comando foi explicitamente declarada?

Uma dica interessante é incluir “:.” no final da variável PATH para que o bash inclua o diretório corrente na sua lista de busca por programas executáveis.

Diferentemente do MS-DOS, o diretório corrente não está incluso na lista de busca padrão. Sem incluir o “:.” no PATH é necessário informar o caminho relativo ao chamar programas no diretório corrente com “./nomedoprograma”.

Isto é um problema para usuários novatos no Linux que não entendem porque ao digitar um comando ou tentar rodar um programa que está na pasta corrente não funciona na maioria das vezes. Simplesmente é a falta que o “:.” faz no $PATH.

Uma lista completa das variáveis do shell poderá ser obtida com o comando:

$ set

Você poderá também alterar ou criar uma nova variável do shell através do comando:

$ LIVRO=”Certificação Linux”

Preferencialmente as variáveis devem ser declaradas em caixa alta e não coloque espaços entre o nome da variável, o símbolo = e o seu conteúdo.

Se o conteúdo for alfanumérico é desejável que ele esteja entre aspas simples ou duplas.

Quando o texto de uma variável é uma sequência comum de letras e números, pouco importa se você vai usar aspas simples ou duplas.

$ FRASE1=”Este é um teste”
$ FRASE2='de direfença entre aspas'
$ echo $FRASE1 $FRASE2
Este é um teste de diferença entre aspas

Mas se você for utilizar as variáveis entre aspas, há diferença:

$ echo “$FRASE1 $FRASE2”
Este é um teste de diferença entre aspas

$ echo '$FRASE1 $FRASE2' $FRASE1 $FRASE2

Então as aspas duplas expandem o conteúdo das variáveis, enquanto as aspas simples não. Isto faz diferença se você quer, por exemplo, incluir um diretório na variável PATH:

$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin 

$ PATH="$PATH:/ora/oracle/admin/bin"
$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin:/ora/oracle/admin/bin

Neste caso as aspas simples não funcionariam.

Depois de criar uma variável do shell, é preciso exportá-la para o ambiente com o comando export.

Quando uma variável é exportada para o ambiente ela fica disponível para todos os processos filhos do shell (todos os programas e aplicações que você executar no bash).

Cada vez que um programa é executado pelo shell, ele somente irá receber as variáveis criadas pelo shell se elas forem exportadas com o comando export.

Assim o processo filho (o programa que desejamos executar) vai herdar do processo pai (o shell) as variáveis criadas.

Veja o exemplo abaixo, onde criamos uma variável chamada LIVRO:

$ LIVRO=”Certificação Linux”
$ echo $LIVRO
Certificação Linux

Se executarmos o bash novamente no mesmo terminal, para criar um processo filho, você verá que a variável LIVRO não existe, porque ela não foi exportada para os processos filho:

$ bash
$ echo $LIVRO

Uso de Coringas

Quando estamos trabalhando com arquivos e diretórios no shell é muito comum precisarmos trabalhar com diversos arquivos de uma vez. Para tornar este tipo de tarefa mais simples, o Linux oferece o recurso de coringa para os nomes dos arquivos e diretórios.

Assim como no baralho de cartas, os coringas são símbolos que podem significar muitas coisas. No Linux possibilitam que você os utilize como parte do nome dos arquivos e diretórios. Veja a tabela abaixo:

SímboloDescrição
*Significa “vale qualquer coisa” e pode substituir um ou mais caracteres de um nome. Por exemplo “Certifi*” pode significar “Certificado”, “Certifi­cação” ou qualquer outra combinação de nomes de arquivos que inicie com “Certifi”.
?Significa que pode substituir um caractere somente de um nome. Por exemplo: “?ertificado” pode  substituir “Certificado”, “certificado” ou qualquer outra combinação de nomes de arquivos que inicie com um caracter qualquer e termine com “ertificado”.
{texto1, texto2…}Substitui a parte dentro das chaves pelos texto1, depois pelo texto2, assim por diante. Por exemplo: “parte_{a,b,c}” vai resultar em “parte_a”, “parte_b” e “parte_c”.

Exemplos:

$ ls *.txt

Lista todos os arquivos com o sufixo .txt

$ cat doc??? >> documentos

Concatena todos os arquivos iniciados com “doc” que tenham 6 caracteres de tamanho no arquivo documentos.

Vejamos os comandos para listar os comandos digitados, exportar variáveis e verificar se algo é um comando.

Se você quiser saber como copiar arquivos no Linux, da uma olhada neste post.

Aprenda muito mais sobre Linux em nosso curso online. Você pode efetuar a matrícula aqui. Se você já tem uma conta, ou quer criar uma, basta entrar ou criar seu usuário aqui.

Gostou? Compartilhe