2.1 Lição 1
Certificação: |
Linux Essentials |
---|---|
Versão: |
1.6 |
Tópico: |
2 Como se orientar em um sistema Linux |
Objetivo: |
2.1 As bases da linha de comando |
Lição: |
1 de 2 |
Introdução
As distribuições Linux modernas oferecem uma ampla variedade de interfaces gráficas de usuário, mas um administrador sempre precisará saber como trabalhar com a linha de comando, ou shell. O shell é um programa que permite a comunicação por texto entre o sistema operacional e o usuário. Trata-se normalmente de um programa em modo texto que lê os dados inseridos pelo usuário e os interpreta na forma de comandos para o sistema.
Existem vários shells diferentes no Linux; estes são apenas alguns exemplos:
-
Bourne-again shell (Bash)
-
C shell (csh ou tcsh, a versão aprimorada do csh)
-
Korn shell (ksh)
-
Z shell (zsh)
No Linux, o mais comum é o shell Bash. É o que será usado em nossos exemplos e exercícios.
Ao usar um shell interativo, o usuário insere comandos no chamado prompt. Para cada distribuição Linux, o prompt padrão tem uma aparência um pouco diferente, mas ele geralmente segue esta estrutura:
username@hostname diretório_atual tipo_de_shell
No Ubuntu ou Debian GNU/Linux, o prompt de um usuário comum provavelmente será assim:
carol@mycomputer:~$
O prompt do superusuário terá a seguinte aparência:
root@mycomputer:~#
No CentOS ou Red Hat Linux, o prompt para um usuário comum será semelhante a este:
[dave@mycomputer ~]$
E o prompt do superusuário será assim:
[root@mycomputer ~]#
Vamos entender melhor cada componente da estrutura:
username
-
Nome do usuário que está rodando o shell
hostname
-
Nome da máquina hospedeira na qual o shell é executado. Também existe um comando
hostname
, que permite exibir ou definir o nome de hospedeiro do sistema. current_directory
-
O diretório em que o shell está atualmente. Um
~
indica que o shell está no diretório Home do usuário atual. shell_type
-
$
indica que o shell está sendo executado por um usuário comum.#
indica que o shell está sendo executado pelo superusuárioroot
.
Como não precisamos de privilégios especiais, usaremos um prompt sem privilégios nos exemplos a seguir. Por questões de concisão, usaremos apenas o $
como prompt.
Estrutura da linha de comando
A maioria dos comandos na linha de comando segue a mesma estrutura básica:
comando [opção(ões)/parâmetro(s)...] [argumento(s)...]
Veja, por exemplo, o seguinte comando:
$ ls -l /home
Vamos entender a finalidade de cada componente:
- Comando
-
Programa que o usuário pretende executar —
ls
, no exemplo acima. - Opção(ões)/Parâmetro(s)
-
Um “botão” que modifica o comportamento do comando de alguma forma, como
-l
no exemplo acima. As opções podem ser acessadas na forma curta ou longa. Por exemplo,-l
é idêntico a--format = long
.Também é possível combinar múltiplas opções e, no caso do formato abreviado, as letras geralmente podem ser digitadas juntas. Por exemplo, os seguintes comandos fazem todos a mesma coisa:
$ ls -al $ ls -a -l $ ls --all --format=long
- Argumento(s)
-
Dados adicionais exigidos pelo programa, como um nome de arquivo ou caminho, como
/home
no exemplo acima.
A única parte obrigatória dessa estrutura é o próprio comando. Em geral, todos os outros elementos são opcionais, mas um programa pode exigir que determinadas opções, parâmetros ou argumentos sejam especificados.
Note
|
A maioria dos comandos exibe uma visão geral dos comandos disponíveis quando executados com o parâmetro |
Tipos de comportamento dos comandos
O shell aceita dois tipos de comandos:
- Internos
-
Comandos que fazem parte do próprio shell e não são programas separados. Existem cerca de 30 desses comandos. Seu principal objetivo é executar tarefas dentro do shell (por exemplo,
cd
,set
,export
). - Externos
-
Comandos que residem em arquivos individuais. Esses arquivos geralmente são programas binários ou scripts. Quando um comando externo ao shell é executado, o shell usa a variável
PATH
para procurar um arquivo executável com o mesmo nome que o comando. Além dos programas instalados com o gerenciador de pacotes da distribuição, os usuários também podem criar seus próprios comandos externos.
O comando type
mostra a que tipo pertence um comando específico:
$ type echo echo is a shell builtin $ type man man is /usr/bin/man
Citação
Como usuário de Linux, você precisa saber criar ou manipular arquivos ou variáveis de diversas maneiras. Isso é fácil quando se trabalha com nomes de arquivos curtos e valores simples, mas fica mais complicado quando, por exemplo, precisamos usar espaços, caracteres especiais e variáveis. Os shells oferecem um recurso chamado citação, que encapsula esses dados usando diversos tipos de aspas (" ", ' '). No Bash, há três tipos de citações:
-
Aspas duplas
-
Aspas simples
-
Caracteres de escape
Por exemplo, os seguintes comandos não agem da mesma maneira devido à citação:
$ TWOWORDS="two words" $ touch $TWOWORDS $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch "$TWOWORDS" $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch '$TWOWORDS' $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 15:00 '$TWOWORDS' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words
Note
|
A linha com |
Aspas duplas
As aspas duplas dizem ao shell para considerar o texto entre as aspas ("...") como caracteres regulares. Todos os caracteres especiais perdem o significado, exceto $
(cifrão), \
(barra invertida) e `
(crase). Isso significa que as variáveis, substituições de comando e funções aritméticas ainda podem ser usadas.
Por exemplo, a substituição da variável $USER
não é afetada pelas aspas duplas:
$ echo I am $USER I am tom $ echo "I am $USER" I am tom
Um caractere de espaço, por outro lado, perde seu significado como separador de argumentos:
$ touch new file $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:18 file -rw-rw-r-- 1 tom students 0 Oct 8 15:18 new $ touch "new file" $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:19 new file
Como explicado, no primeiro exemplo o comando touch
cria dois arquivos individuais; o comando interpreta as duas seqüências como argumentos individuais. No segundo exemplo, o comando interpreta as duas seqüências como um argumento e, portanto, cria apenas um arquivo. No entanto, recomenda-se evitar o caractere de espaço nos nomes de arquivos. Em vez disso, é preferível usar um sublinhado (_
) ou um ponto (.
).
Aspas simples
As aspas simples não têm as exceções das aspas duplas. Elas revogam qualquer significado especial de cada caractere. Se retomarmos um dos primeiros exemplos acima:
$ echo I am $USER I am tom
Ao aplicar aspas simples, obtemos um resultado diferente:
$ echo 'I am $USER' I am $USER
O comando agora exibe a sequência exata, sem substituir a variável.
Caracteres de escape
Podemos usar caracteres de escape para remover os significados especiais dos caracteres do Bash. Voltando à variável de ambiente $USER
:
$ echo $USER carol
Vemos que, por padrão, o conteúdo da variável é exibido no terminal. No entanto, se colocarmos um caractere de barra invertida (\
) antes do cifrão, o significado especial do cifrão será cancelado. Por sua vez, isso não permitirá que o Bash expanda o valor da variável para o nome de usuário da pessoa que está executando o comando, mas, em vez disso, interpretará o nome da variável literalmente:
$ echo \$USER $USER
Como você deve lembrar, é possível obter resultados semelhantes usando aspas simples, que imprimem o conteúdo literal do que estiver entre elas. No entanto, o funcionamento do caractere de escape é diferente, pois instrui o Bash a ignorar qualquer significado especial do caractere que ele precede.
Exercícios Guiados
-
Divida as linhas abaixo nos componentes de comando, opção(ões)/parâmetro(s) e argumento(s):
-
Exemplo:
cat -n /etc/passwd
Comando:
cat
Opção:
-n
Argumento:
/etc/passwd
-
ls -l /etc
Comando:
Opção:
Argumento:
-
ls -l -a
Comando:
Opção:
Argumento:
-
cd /home/user
Comando:
Opção:
Argumento:
-
-
Descubra de que tipo são os comandos a seguir:
Exemplo:
pwd
Embutido no Shell
mv
Comando externo
cd
cat
exit
-
Resolva os seguintes comandos que usam citações:
Exemplo:
echo "$HOME is my home directory"
echo /home/user is my home directory
touch "$USER"
touch 'touch'
Exercícios Exploratórios
-
Com um só comando e usando a expansão de chaves no Bash (veja a página de manual do Bash), crie 5 arquivos numerados de 1 a 5 com o prefixo
game
(game1
,game2
, …). -
Remova os cinco arquivos que acaba de criar com um único comando, usando um caractere especial diferente (consulte Pathname Expansion nas páginas de manual do Bash).
-
Existem outros jeitos de fazer com que dois comandos interajam entre si? Quais?
Resumo
Nesta lição, você aprendeu:
-
Conceitos do shell do Linux
-
O que é o shell Bash
-
A estrutura da linha de comando
-
Uma introdução às citações
Comandos usados nos exercícios:
bash
-
O shell mais popular em computadores com Linux.
echo
-
Gera texto no terminal.
ls
-
Lista o conteúdo de um diretório.
type
-
Mostra como um comando específico é executado.
touch
-
Cria um arquivo vazio ou atualiza a data de modificação de um arquivo existente.
hostname
-
Mostra ou altera o nome do host de um sistema.
Respostas aos Exercícios Guiados
-
Divida as linhas abaixo nos componentes de comando, opção(ões)/parâmetro(s) e argumento(s):
-
ls -l /etc
Comando:
ls
Opção:
-l
Argumento:
/etc
-
ls -l -a
Comando:
ls
Opção:
-l -a
Argumento:
-
cd /home/user
Comando:
cd
Opção:
Argumento:
/home/user
-
-
Descubra de que tipo são os comandos a seguir:
cd
Embutido no shell
cat
Comando externo
exit
Embutido no shell
-
Resolva os seguintes comandos que usam citações:
touch "$USER"
tom
touch 'touch'
Cria um arquivo chamado
touch
Respostas aos Exercícios Exploratórios
-
Com um só comando e usando a expansão de chaves no Bash (veja a página de manual do Bash), crie 5 arquivos numerados de 1 a 5 com o prefixo
game
(game1
,game2
, …).É possível usar faixas para expressar os números de 1 a 5 dentro de um só comando:
$ touch game{1..5} $ ls game1 game2 game3 game4 game5
-
Remova os cinco arquivos que acaba de criar com um único comando, usando um caractere especial diferente (consulte Pathname Expansion nas páginas de manual do Bash).
Como todos os arquivos começam com
game
e terminam com um só caractere (neste caso, um número de 1 a 5),?
pode ser usado como caractere especial no lugar do último caractere de um nome de arquivo:$ rm game?
-
Existem outros jeitos de fazer com que dois comandos interajam entre si? Quais?
Sim, um comando pode, por exemplo, escrever dados em um arquivo que é em seguida processado por outro comando. O Linux também pode coletar a saída de um comando e usá-la como entrada de outro comando. Isso se chama piping e aprenderemos mais a respeito em uma lição futura.