0% acharam este documento útil (0 voto)
28 visualizações56 páginas

Apostila Linux

Enviado por

Ederson Leite
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
28 visualizações56 páginas

Apostila Linux

Enviado por

Ederson Leite
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 56

2 CONTEÚDO

4.4 Sistemas de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53


4.5 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

5 Terminal do Linux, Uma Mão na Roda 59


5.1 Busca de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
5.2 Busca Dentro de Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . 64

Conteúdo 5.2.1 Expressões Regulares . . . . . .


5.2.2 Expressões no Terminal . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
64
65
5.3 Caixa de Ferramentas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.1 Manipulação de Linhas . . . . . . . . . . . . . . . . . . . . . . . 67
5.3.2 Seleção de Colunas . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3.3 Ordenação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Prefácio 5 5.3.4 Operações Aritméticas . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3.5 Substituição de caracteres . . . . . . . . . . . . . . . . . . . . . 69
1 Introdução 7 5.3.6 Manipulação avançada de texto . . . . . . . . . . . . . . . . . . 69
1.1 Sistema Operacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5.4 Compactação e Afins . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
1.2 O Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.5 Expandindo Meu Território . . . . . . . . . . . . . . . . . . . . . . . . . 86
1.3 O GNU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 5.6 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
1.4 História do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.5 Uma Visão Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 A Instalação do Ubuntu 91
A.1 Obtendo o Ubuntu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2 Documentação 11 A.2 Instalação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.1 Páginas de manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 A.2.1 Particionamento . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
2.2 /usr/share/doc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Caso 1: Instalar lado-a-lado com outro Sistema Operacional . 92
Caso 2: Apagar e usar o Disco Inteiro . . . . . . . . . . . . . . . 92
3 Linux em Sua Essência 13 Caso 3: Especificar particionamento manualmente . . . . . . . 92
3.1 Quem Está no Controle? . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.2 Arquivos e Pastas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 B Instalação de Programas 95
3.2.1 Estrutura Básica e Endereçamento . . . . . . . . . . . . . . . . 16 B.1 Apt-Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
3.2.2 Informações Sobre Arquivos . . . . . . . . . . . . . . . . . . . . 17 B.2 Pacotes Deb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
3.2.3 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 B.3 Na Unha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
3.3 Permissões . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.3.1 Notação Textual . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 C Comandos de Rede 99
3.3.2 Notação Octal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.4 Exercı́cios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 D Editores de Texto 105
D.1 Vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4 Mexendo um pouco Mais 31 D.1.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.1 Nada se Cria Tudo se Transforma! . . . . . . . . . . . . . . . . . . . . 31 D.1.2 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.1.1 Entrada e saı́da de dados . . . . . . . . . . . . . . . . . . . . . . 31 MC - Entrar no Modo de Edição . . . . . . . . . . . . . . . . . . 105
4.1.2 Redirecionamento destrutivo e não-destrutivo . . . . . . . . . . 32 ME - Entrar no Modo de Comando . . . . . . . . . . . . . . . . 106
4.1.3 Pipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 MC - Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.1.4 Saı́da de erros . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 MC - Editar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.2 Minha Pasta Pessoal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 MC - Busca e substituição . . . . . . . . . . . . . . . . . . . . . 107
4.2.1 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 MC - Navegação . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
4.2.2 Algumas definições importantes . . . . . . . . . . . . . . . . . . 39 ME - Edição de Texto . . . . . . . . . . . . . . . . . . . . . . . . 108
4.2.3 Shell Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 D.2 Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.2.4 Arquivos importantes de configuração . . . . . . . . . . . . . . 41 D.2.1 Introdução . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.2.5 Variáveis de ambiente . . . . . . . . . . . . . . . . . . . . . . . . 42 D.2.2 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.2.6 Alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.3 Gerência de Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Editar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.3.1 PID e PPID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Pesquisar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.3.2 Estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Navegação . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4.3.3 Sinais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Janela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
4.3.4 Background e Foreground . . . . . . . . . . . . . . . . . . . . . 47 D.3 Gedit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110

1
CONTEÚDO 3 4 CONTEÚDO

Índice Remissivo 110


6 COMANDOS

4.18 bg Roda tarefas em background. . . . . . . . . . . . . . . . . . . . . . . 51


4.19 fg Roda tarefas em foreground. . . . . . . . . . . . . . . . . . . . . . . 52
4.20 nohup Executa o comando de forma imune ao sinal HUP. . . . . . . 52
4.21 du Estima o uso de espaço de arquivos. . . . . . . . . . . . . . . . . . 53
4.22 df Mostra o uso de espaço em disco de sistema de arquivos. . . . . 54
4.23 stat Mostra informações sobre arquivos. . . . . . . . . . . . . . . . . 54

Comandos 4.24 mount Monta um sistema de arquivos. . . . . . . . . . . . . . . . .


4.25 umount Desmonta um sistema de arquivos. . . . . . . . . . . . . .
. .
. .
55
55
5.1 find Busca por arquivos, parte 1. . . . . . . . . . . . . . . . . . . . . . 60
5.2 find Busca por arquivos, parte 2. . . . . . . . . . . . . . . . . . . . . . 61
5.3 find Busca por arquivos, parte 3 . . . . . . . . . . . . . . . . . . . . . 62
2.1 man Acessa páginas de manual. . . . . . . . . . . . . . . . . . . . . . . 12 5.4 locate Busca arquivos pelo nome. . . . . . . . . . . . . . . . . . . . . 62
3.1 whoami Identifica o usuário logado. . . . . . . . . . . . . . . . . . . . . 14 5.5 whereis Busca por arquivos pertencentes ao sistema. . . . . . . . . . 62
3.2 hostname Mostra o nome da máquina. . . . . . . . . . . . . . . . . . . 14 5.6 which Retorna a localização dos comandos do sistema. . . . . . . . . 63
3.3 passwd Altera senha de usuários. . . . . . . . . . . . . . . . . . . . . . 14 5.7 grep Busca por padrões de caracteres em cada linha do texto de
3.4 who Mostra os usuários que estão logados. . . . . . . . . . . . . . . . 15 entrada. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.5 finger Lista informações sobre os usuários do sistema. . . . . . . . 15 5.8 cut Remove seções de cada linha de arquivos. . . . . . . . . . . . . . 75
3.6 su Troca de usuário no terminal. . . . . . . . . . . . . . . . . . . . . . 15 5.9 tr Substitui ou deleta caracteres. . . . . . . . . . . . . . . . . . . . . . 76
3.7 sudo Executa comandos com previlégios de root. . . . . . . . . . . . . 15 5.10 wc Conta o número de linhas, bytes, caracteres ou palavras. . . . . . 76
3.8 pwd Mostra o endereço completo do diretório atual. . . . . . . . . . . 18 5.11 nl Numera linhas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.9 cd Muda de diretório. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.12 head Imprime as primeiras linhas de um arquivo. . . . . . . . . . . . 77
3.10 ls Lista o conteúdo de diretórios e informações sobre arquivos. . . . 19 5.13 tail Imprime as últimas linhas de um arquivo. . . . . . . . . . . . . 77
3.11 mkdir Cria diretórios. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 5.14 sort Ordena arquivos por linha. . . . . . . . . . . . . . . . . . . . . . 78
3.12 rmdir Remove diretórios vazios. . . . . . . . . . . . . . . . . . . . . . . 20 5.15 bc Calculadora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.13 rm Remove arquivos e diretórios. . . . . . . . . . . . . . . . . . . . . . 20 5.16 sed Edita fluxos de texto. . . . . . . . . . . . . . . . . . . . . . . . . . . 80
3.14 mv Move arquivos e diretórios. . . . . . . . . . . . . . . . . . . . . . . . 20 5.17 awk Filtra e edita arquivos. . . . . . . . . . . . . . . . . . . . . . . . . . 81
3.15 cp Copia arquivos e diretórios. . . . . . . . . . . . . . . . . . . . . . . . 21 5.18 split Divide um arquivo em partes menores. . . . . . . . . . . . . . . 83
3.16 file Mostra o formato do arquivo. . . . . . . . . . . . . . . . . . . . . 21 5.19 tar Empacota arquivos. . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.17 stat Mostra informações sobre arquivos. . . . . . . . . . . . . . . . . 21 5.20 gzip Compacta um arquivo. . . . . . . . . . . . . . . . . . . . . . . . . 85
3.18 touch Atualiza as datas de um arquivo. . . . . . . . . . . . . . . . . . 22 5.21 gunzip Descompacta um arquivo. . . . . . . . . . . . . . . . . . . . . 85
3.19 ln Cria links de arquivos. . . . . . . . . . . . . . . . . . . . . . . . . . . 22 5.22 ssh Acesso remoto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.20 chmod Troca permissões de arquivos ou diretórios. . . . . . . . . . . . 27 5.23 scp Tranferência remota. . . . . . . . . . . . . . . . . . . . . . . . . . . 87
3.21 chown Troca proprietário do arquivo. . . . . . . . . . . . . . . . . . . . 28 5.24 sshfs Montar pastas remotamente . . . . . . . . . . . . . . . . . . . . 88
3.22 umask Determina as permissões padrão para novos arquivos e di- 5.25 wget Baixa arquivos de um servidor. . . . . . . . . . . . . . . . . . . . 88
retórios criados. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 5.26 wget Visualiza uma página web no modo texto. . . . . . . . . . . . . . 88
4.1 cat Envia dados para a saı́da padrão. . . . . . . . . . . . . . . . . . . 36 B.1 apt-get Instala algum pacote ou programa do repositório. . . . . . . 95
4.2 more Visualizar arquivos. . . . . . . . . . . . . . . . . . . . . . . . . . . 36 B.2 dpkg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
4.3 less Visualizar arquivos. . . . . . . . . . . . . . . . . . . . . . . . . . . 37 C.1 ifconfig Mostra as conexoes de rede do computador . . . . . . . . . 100
4.4 xargs Passa dados da entrada padrão como argumentos. . . . . . . . 38 C.2 dhclient conecta a rede local . . . . . . . . . . . . . . . . . . . . . . . 101
4.5 tee Envia conteúdo para saı́da padrão e arquivo simultaneamente. . 38 C.3 netcat Conecta em algum servidor . . . . . . . . . . . . . . . . . . . . 101
4.6 source Executa um script . . . . . . . . . . . . . . . . . . . . . . . . . 44 C.4 netcat Cria um servidor . . . . . . . . . . . . . . . . . . . . . . . . . . 102
4.7 history Mostra histórico de comandos. . . . . . . . . . . . . . . . . . 44 C.5 netcat Envia dados para um computador . . . . . . . . . . . . . . . . 102
4.8 echo Mostra uma mensagem . . . . . . . . . . . . . . . . . . . . . . . . 45 C.6 netcat Realiza um scanner pelas portas . . . . . . . . . . . . . . . . . 103
C.7 netcat Cria um proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.9 env Variáveis ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.10 set Manipula variáveis e funções do shell. . . . . . . . . . . . . . . . . 45
4.11 export Determina uma variável de ambiente. . . . . . . . . . . . . . . 46
4.12 alias Cria um alias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.13 unalias Exclui um alias . . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.14 ps Retorna os processos correntes. . . . . . . . . . . . . . . . . . . . 49
4.15 top Exibe as tarefas do Linux. . . . . . . . . . . . . . . . . . . . . . . 50
4.16 kill Manda um sinal para um processo a partir de seu PID. . . . . 51
4.17 pkill Envia um sinal para processos a partir de nome e outros atri-
butos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

5
8 COMANDOS

Divisão do Conteúdo

A seguir estão listados os pontos principais de cada capı́tulo. Ao final dos capı́tulos
3, 4 e 5 são propostos exercı́cios; alguns deles desafios, pois exigem informações
sobre comandos que não serão apresentadas.

Prefácio Cápiulo 1 Introdução


Apresenta conceitos básicos e um panorama sobre o Linux.

Cápiulo 2 Documentação
Descreve algumas maneiras de obter informações sobre comandos.

Mesmo com um significativo aumento do uso do Linux em Cápiulo 3 Linux em Sua Essência
computadores domésticos, e de sua vasta divulgação, é co- Apresenta a estruturação dos arquivos dentro do sistema e o espaço des-
mum perceber o quanto as pessoas se intimidam ao se tinado aos usuários; modos de permissões, e alguns comandos para a
deparar com este famigerado Sistema Operacional. A ver- administração do sistema.
dade é que toda esta fama de “mau” deriva de tempos em
Cápiulo 4 Mexendo Um pouco Mais
que sua interface mantinha-se a “quilômetros” de distância
Tratamento da entrada e saı́da padrão de dados, redirecionamento; Gerência
do habitual sistema difundido em nossos computadores.
de processos.
Hoje, o Ubuntu por exemplo, uma das distribuições Li-
nux, apresenta uma interface gráfica com suas funcionali- Cápiulo 5 Terminal do Linux, Uma Mão na Roda
dades muito semelhantes às de sistemas operacionais pro- São descritos diversos comandos úteis para a manipulação de informações
prietários, tornando a “migração” do conhecimento intui- de arquivos contendo texto, os chamados filtros; trata da busca de arquivos
tiva. Deixando as “aparências” de lado. . . e tabém da transferência de dados remotamente.
Linux é Software Livre. Esta poderia ser uma boa razão para a sua preferência a Apêndices
outros Sistemas Operacionais. Deixamos esta conclusão a cargo do leitor e vamos Notas sobre a instalação de uma distribuição Linux e sobre a instalação
adiante. Em plena “Era Digital”, não podemos deixar de falar em segurança, de programas; breve descrição de alguns editores de texto “clássicos” do
no que se refere a sistemas de computadores, uma das caracterı́stica primárias Linux.
visadas no desenvolvimento do Linux e seus aplicativos. Seja pelo resultado da
comparação de prós e contras, ou até por necessidades profissionais, observamos
cada vez mais usuários motivados a utilizá-lo.
Sugestões?
Para que as diferenças relevantes entre o modo de uso dos Sistemas Operacio-
nais não se tornassem um obstáculo acentuado, barrando a adoção do Linux como Esta apostila faz parte de um projeto do PET Computação que visa o constante
ferramenta cotidiana, seguindo a filosofia de Software Livre do Departamento de aperfeiçoamento deste conteúdo, portanto crı́ticas e sugestões são bem-vindas!
Informática da UFPR, os alunos do PET do curso de Ciência da Computação, ela- Nosso e-mail? [email protected].
boraram uma apostila básica sobre o assunto. Mais tarde, os alunos do PET
passaram a oferecer curos semestrais, abertos à comunidade com este mesmo
propósito.

Sobre a Apostila

Esta apostila foi escrita pelos integrantes do PET Computação da UFPR e é uma
reformulação do mateiral escrito anteriormente. Abrange os conceitos fundamen-
tais de organização do Linux e suas aplicações, voltadas ao modo texto. Além
de uma referência aos interessados em adquirir conhecimento sobre este Sistema
Operacional, esta nova abordagem segue a estrutura das aulas apresentadas, tra-
dicionalmente pelo PET Computação na primeira semana de aulas, aos calouros
do curso de Ciência da Computação, e este ano também, aos calouros do novo
curso da UFPR, Informática Biomédica. Curitiba, 6 de março de 2012

7
10 CAPÍTULO 1. INTRODUÇÃO

• Numa visão bottom-up: é um gerenciador de recursos, i.e., controla quando


e quais aplicações (processos) podem ser executadas. Assim como quando e
quais recursos (memória, disco, periféricos) podem ser utilizados.

1.2 O Linux
Capı́tulo 1
Linux é o termo geralmente usado para designar qualquer sistema operacional que
utilize o núcleo Linux. Este núcleo foi desenvolvido pelo finlandês Linus Torvalds,
inspirado no sistema Minix. O seu código fonte está disponı́vel sob licença GPL
Introdução para qualquer pessoa que utilizar, estudar, modificar e distribuir de acordo com
os termos da licença, i.e., simplificadamente, você pode alterar qualquer parte do
Linux, construir qualquer sistema baseado nele e até comercialiazá-lo, mas você
não pode fechá-lo, publica-lo sob uma licença proprietária e não permitir que
outros usuários o modifiquem.

1.1 Sistema Operacional


1.3 O GNU
Um sistema operacional é um programa, ou um conjunto de programas, cuja
função é gerenciar os recursos de um computador. Suas tarefas são: definir qual
GNU, sigla recursiva, que significa GNU Not Unix, é um projeto que começou em
programa recebe atenção do processador, gerenciar memória, criar e gerenciar um
1984 com o objetivo de desenvolver um sistema operacional completo, em software
sistema de arquivos, gerenciar dispositivos, além de fornecer uma interface entre
livre, mantido pela comunidade mundial de programadores, compatı́vel com o
o computador e o usuário. É o principal programa que a máquina executa desde
padrão Unix. O Linux em si é somente um Kernel. Linus Torvalds, na mesma
o momento em que é ligada e mantêm-se em execução até que o computador
época que escrevia seu código-fonte, começou a usar programas da GNU para
seja desligado. O sistema operacional reveza sua execução com a de outros pro-
fazer seu sistema. Gostando da idéia, resolveu deixar seu kernel dentro da mesma
gramas, como se estivesse vigiando, controlando e orquestrando todo o processo
licença e padrão. O kernel não pode ser usado por humanos diretamente. É
computacional.
necessária a existência de um Shell e, obviamente, dos programas, que executarão
A sigla usual para designar esta classe de programas é SO (em português) ou as funções desejadas pelo usuário.
OS (do inglês Operating System). Ele pode ser dividido em duas grandes partes
O Kernel Linux, juntamente com aplicativos do projeto GNU, é agrupado, cus-
que cumprem funções complementares. São elas:
tomizado, publicado, atualizado, mantido e distribuı́do para os usuários finais
por várias empresas e organizações para os mais diversos fins. O resultado são as
• O Núcleo, também chamado de Cerne, em português, ou Kernel, em inglês, famosas distribuições GNU/Linux, dentre elas: Slakware, Gentoo, Debian, Man-
que desempenha as funções vitais do sistema, gerenciamento, controle, mo- driva, Red Hat e Ubuntu.
nitoramento. Alguns autores consideram o Kernel sozinho como sendo, de
fato, o SO;

• A concha, ou casca, mais comumente referenciada pelo seu nome original 1.4 História do Linux
em inglês, Shell, que cumpre as funções de interface com o usuário, é o meio
pelo qual o humano interage com o sistema. Pode apresentar-se em seu Na década de 1960 o Massachusets Institute of Technology (MIT), a General Eletric
formato cru, via linha de comando, diretamente pelas entrada e saı́da padrão (GE), os laboratórios Bell (Bell Labs) e a American Telephone na Telegraph (AT&T)
(teclado e monitor, respectivamente, no caso do PC), ou em roupagens mais começaram o projeto de um sistema operacional de tempo compartilhado, onde
amigáveis, tanto em modo texto quanto gráfico, com suporte a gerenciamento vários usuários pudessem acessar os recursos de um único computador, sendo
de janelas, e dispositivos de entrada e saı́da auxiliáres (mouse, dispositivos assim, o sistema mais arrojado da época. Seu nome era Multics, que em 1969,
de áudio, leitores de linha braile, dentre outros.) já rodava em um computador GE645. Os recursos computacionais disponı́veis
na época, no entanto, revelaram-se insuficientes para as pretensões do projeto e
Segundo alguns autores, existem dois modos distintos de conceituar um sis- neste mesmo ano a Bell Labs se retirou do projeto.
tema operacional, no caso, a função do Kernel: Apesar disto, um de seus pesquisadores, Ken Thompson, continuou seus es-
tudos no sistema com a intenção de criar algo menor mas que conservasse as
• Pela perspectiva do usuário ou programador, visão top-down: é uma abstração suas idéias básicas. Usando um ocioso computador PDP-7, começou a escrever o
do hardware, fazendo o papel de intermediário entre o aplicativo (programa) Unics usando linguagem de montagem (assembly). Mais tarde, Brian Kernighan,
e os componentes fı́sicos do computador (hardware); também pesquisador da Bell Labs, rebatizou o novo sistema de Unix.

9
1.5. UMA VISÃO GERAL 11 12 CAPÍTULO 1. INTRODUÇÃO

Um marco importante foi estabelecido em 1973 quando Dennis Ritchie, outro robustos, com mais de duas décadas de desenvolvimento - contribui muito para a
pesquisador da Bell, e Ken Thompson reescreveram o Unix, usando a linguagem sua confiabilidade e estabilidade. Se configurado corretamente, o sistema não irá
de alto nı́vel C, para um computador PDP-11. A linguagem C havia sido desenvol- travar. Este é outro ponto muito importante a favor do sistema: o fato de poder
vida por Ritchie para substituir e superar as limitações da linguagem B, desen- ser configurado e adaptado segundo a necessidade de cada um.
volvida por Thompson. O seu uso é considerado uma das principais razões para
É possı́vel instalar o Linux juntamente com outro sistema operacional. Por
a rápida difusão do Unix.
exemplo, pode-se instalar Linux em uma máquina que já contenha Windows e
Entre 1977 e 1981, a AT&T alterou o Unix e lançou o System III. Em 1983, utilizar os dois sistemas sem que nenhum dado seja perdido. O Linux consegue
após mais uma série de modificações, foi lançado o conhecido Unix System IV, que acessar os arquivos usados no windows. Além disso, é possı́vel utilizá-lo através
passou a ser vendido. Até hoje esse sistema é usado no mercado como o padrão de um CD sem que seja necessária a sua instalação.
internacional do Unix. É comercializado por empresas como IBM, HP, Sun, etc.
O Linux, assim como todos os sistemas operacionais, utilizava inicalmente ape-
O Unix é um sistema operacional caro e é usado em computadores poderosos por
nas interfaces de modo texto. A diferença é que no Linux a interface de modo texto
diversas multinacionais.
evoluiu junto com o restante do sistema e se integrou de uma forma bastante con-
Em 1987, Andrew Stuart Tanenbaum, escreveu um clone do Unix, chamado sistente com os aplicativos gráficos. Quanto mais você aprende, mais tempo você
Minix, para o IBM PC com o intuito de ensinar a estudantes de ciência da computação acaba passando no terminal; não por masoquismo, mas porque ele é realmente
como funciona um sistema operacional. O Minix foi escrito desde o começo, sem mais prático para fazer muitas coisas.
apreveitar nenhum código proprietário já existente do Unix. Consequentemente
O grande atrativo do terminal é que, com exceção de alguns poucos aplicativos
Tanenbaum escreveu um livro que descreve o sistema em detalhes e disponibizou
especı́ficos, os comandos são sempre os mesmos. Isso faz com que ele seja um
o código em disquetes. Em três meses, na Usenet, um meio de comunicação se-
porto seguro, com o qual você pode contar, sem importar em qual distribuição do
melhante a uma lista de discussão que data dos primórdios da Internet, milhares
Linux você está. O terminal é também a forma mais natural de ”conversar”com
de leitores do mundo inteiro estavam discutindo e aprimorando o sitema. Um des-
o sistema sempre que você precisa de qualquer coisa além do arroz com feijão.
ses leitores era o estudante finlandês de ciência da computação Linus Torvalds da
Através dele é possı́vel realizar qualquer operação.
Universidade de Helsinki.
Apesar disso, a utilização do terminal não é intuitiva. É preciso um conheci-
No fim dos anos 80, Linus teve contato com computadores compatı́veis com o
mento prévio para conseguir realizar as tarefas mais simples, o que não é atrativo
IBM PC, em 1990 começou a aprender C em seus estudos e em 1991 comprou um
para um leigo em computação. Isto levou a criação de uma mı́stica de que o Linux
Intel 80386. Com 21 anos, ele tinha contato com o Sistema Unix da Universidade,
é um sistema operacional muito complexo. O que muita gente ainda não sabe é
o SunOS, atualmente Solaris, e desejava rodar a versão de Tannenbaum, Minix,
que o Linux já dispõe de uma quantidade de ferramentas muito mais abrangente
no seu recém adquirido 80386. Entretanto, descontente com os recursos do Minix,
que a quantidade de ferramentas para Windows.
especialmente em relação ao emulador de terminal que ele utilizaria para acessar
remotamente o Unix da Universidade, começou a desenvolver o seu próprio emu- Nas distribuições mais atuais existem programas capazes de emular interfaces
lador de terminal que não rodava sobre o Minix, mas diretamente no hardware do gráficas, proporcionando ao usuário um ambiente mais amigável, com janelas,
PC 386. Este projeto pessoal foi sendo modificado gradualmente e adquirindo ca- botões e menus. Ao contrário do Windows, no Linux podemos escolher a interface
racterı́sticas de um Sistema Operacional independente do Minix. Este foi o inı́cio gráfica que mais nos agrada em termos de beleza e facilidade de uso.
do desenvolvimento do núcleo Freax (Free + Freak + X do Unix). Posteriormente
batizado de Linux por Ari Lemmke, administrador do site ftp.funet.fi, que deu
esse nome ao diretório FTP onde o núcleo Linux estava inicialmente disponı́vel.
O projeto foi lançado em 1991 em uma famosa mensagem para a Usenet em que
Linus divulgou que estava disposto a disponibilizar o código-fonte e contar com a
colaboração de outros programadores. Desde os primeiros dias, ele recebeu ajuda
de hackers do Minix e hoje recebe contribuições de milhares de programadores
dos mais diversos locais do mundo.

1.5 Uma Visão Geral


O linux é um sistema operacional livre, gratuito e possui todas as caracterı́sticas
presentes nos sistemas operacionais modernos: é um sistema multiplataforma,
podendo ser operado em diversas arquiteturas; multiprocessado, possuindo su-
porte a computadores com mais de um processador; multitarefa, no qual vários
programas podem ser executados ao mesmo tempo; e multiusuário, permitindo
que mais de uma pessoa opere a máquina ao mesmo tempo.
O fato de ser baseado nos sistemas operacionais Unix - sistemas considerados
14 CAPÍTULO 2. DOCUMENTAÇÃO

OPÇÕES
Mostra todas as opções disponı́veis e suas respectivas funções.

Para se ter acesso as páginas de manual, é preciso utilizar o comando man (co-
mando 2.1, p. 12).
A mesma estrutura sintática é seguida pelas páginas de manual na hora de
Capı́tulo 2 apresentar a estrutura de um comando. Além disso, as páginas de manual tem
uma notação própria para indicar se um parâmetro ou opção é opcional e destacar
texto a ser substituı́do: opções e parâmetros aparecem entre colchetes quando
opcionais. Texto a ser substituı́do aparece sublinhado.
Documentação As páginas de manual ajudam muito o usuário Linux a conhecer mais sobre
um certo comando e encontrar uma referência rápida a respeito de suas opções e
parâmetros.
Além das páginas de manual existe uma outra fonte de informação disponı́vel
no sistema, contendo um material mais extenso e detalhado, com textos explica-
Qualquer instalação do sistema Linux vem, por padrão, com diversos aplicativos tivos. Para acessar esse conteúdo usamos o comando info, que não está docu-
já instalados, além de existirem milhares e milhares de pacotes disponı́veis para mentado nesta apostila. Tente man info.
instalação. Na hora de utilizar todas essas ferramentas sempre surgirão dúvidas
a respeito da funcionalidade de certo aplicativo ou de seus parâmetros e opções.
Para sanar essas dúvidas e servir como guia de referência para todas as ferra- 2.2 /usr/share/doc
mentas e aplicativos instalados o sistema oferece uma documentação detalhada:
as man pages.
Uma outra alternativa na busca por informações sobre aplicativos é consultar
o material encontrado no diretório /usr/share/doc/, que contém os arquivos
LEIAME e informações sobre os autores de diversos programas instalados no sis-
tema; além disso, é comum encontrar material no formato html com a documen-
2.1 Páginas de manual tação completa desses programas.

Cada ferramenta tem sua própria página de manual, e todas seguem o mesmo Comando 2.1 man Acessa páginas de manual.
padrão, com a mesma formatação e, em geral, as mesmas seções para tornar o
NOME
uso dos manuais mais simples. Todas as páginas de manual seguem mais ou
man
menos a seguinte estrutura:
NOME SINTAXE
Nome do comando. man [seção] comando
man -k palavra chave
SINTAXE DESCRIÇÃO
Exemplo da sintaxe genérica de uso do comando. Nesta seção há uma notação
O man acessa a página de manual do comando. É possı́vel especificar a
especial de representação:
seção onde será buscada a página de manual. Os comandos estão organi-
negrito
zados em seções cujos nomes são números de 1 a 9 e cada seção contém
indica que deve-se digitar extamente como está escrito;
conjuntos de comandos com determinadas caracterı́sticas. Mais detalhes
sublinhado man man.
deve ser substituı́do pelo conteúdo adequado; O comando man também busca páginas de manual que contenham a
palavra chave em sua seção de descrição.
... indica a possibilidade de repetição do conteúdo precedente;
NOTAS 
[ ] todo o conteúdo entre colchetes é opcional; Para sair da página de manual digite q . Outras funcionalidades de
navegação estão disponı́veis, e para conhecê-las veja as páginas de manual
| o contéudo delimitado pela barra vertical não pode ser usado em conjunto.
do comando less.
DESCRIÇÃO
Breve descrição de sua funcionalidade.

13
16 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

super usuário. Por fim, temos os usuário comuns, que não possuem previlégios.

Exercı́cio Resolvido 3.1 O administrador de um sistema precisa identificar e al-


terar a senha de todos usuários de um certo grupo. Quais linhas de comandos são
mais adequadas para a ação?

Capı́tulo 3
Comando 3.1 whoami Identifica o usuário logado.

Linux em Sua Essência NOME


whoami

SINTAXE
whoami
Vimos no capı́tulo anterior nosso primeiro comando, o man. Da mesma forma que
DESCRIÇÃO
este, todos os outros comandos apresentados são executados em modo texto, por
O comando é utilizado para o usuário identificar-se na máquina. Normal-
um aplicativo chamado terminal, que será nossa forma de comunicação com o
mente, enta informação é apresentada no prompt a
sistema Linux. O modo texto é o ambiente clássico de interface entre o usuário
e sistemas baseados em UNIX, conhecido como shell, constituı́do por um inter- a Veja sobre sobre prompt na seção [?]
pretador de comandos textuais. Muitas distribuições Linux possuem interface
gráfica, mas o bom e velho shell é superior em número de funcionalidades, pos- Comando 3.2 hostname Mostra o nome da máquina.
sibilitando ao usuário, após um breve perı́odo de adaptação, trabalhar de forma
mais eficiente em diversas tarefas. NOME
Mas antes de abrirmos um terminal, é fundamental que estejam bem enten- hostname
didos alguns conhecimentos básicos sobre Linux. Devemos ter em mente a es-
SINTAXE
trutura de organização dos arquivos no sistema e onde está o nosso espaço de
hostname [-i|novo nome]
trabalho dentro desta organização. Ainda, quais as restrições de acesso a este
espaço e como é feita sua interação com os demais usuários. Na sequência do
DESCRIÇÃO
capı́tulo, serão explicados alguns conceitos básicos e tarefas simples, pois an-
Mostra o nome da máquina na rede ou altera seu nome para novo nome.
tes de conhecer outras funcionalidades, o usuário deve saber como manter seus
arquivos e se “localizar” no sistema.
OPCOES
-i mostra o endereço de IP da máquina.

3.1 Quem Está no Controle?


Comando 3.3 passwd Altera senha de usuários.

O Linux é um sistema multiusuário, ou seja, permite o acesso de várias pessoas ao NOME


mesmo tempo, tornando-o adequado à tarefa de servidor. Cada usuário possui um passwd
nome, ou login, e um número UID (user identificator), que o identifica no sistema.
Para o gerenciamento desses usuários, existem estruturas que permitem dividi- SINTAXE
los em grupos e também hierarquizá-los de acordo com restrições de acesso. Cada passwd [-d|e] usuário]
usuário pertence a no mı́nimo um grupo, que é composto por um nome e um GID
(group identificator), número identificador. DESCRIÇÃO
passwd altera a senha do usuário.
O usuário root, único no sistema, pertence ao grupo root e ocupa o posto mais
alto na hierarquia de permissões. Ele possui permissão para fazer qualquer coisa: OPCOES
acessar dados, excluı́-los ou até mesmo apagar todo o sistema! Abaixo dele há
os sudoers. Os sudoers são os usuários que podem utilizar o comando sudo, que -d remove a senha do usuário, perpitindo o livre acesso à sua conta;
permite executar tarefas como super usuário (root). Para que um usuário passe
-e expira a senha do usuário, forçando-o a trocar de senha na próxima
a ser sudoer, ele deve ter seu login ou um dos seus grupos listado no arquivo
vez que se logar.
/etc/sudoers pelo root, seguido de quais comandos podem ser executados como

15
3.1. QUEM ESTÁ NO CONTROLE? 17 18 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

Comando 3.4 who Mostra os usuários que estão logados. 3.2 Arquivos e Pastas
NOME
Cada usuário do sistema possui uma pasta pessoal. Esta pasta, chamada home,
who
é o local destinado ao armazenamento de todos os arquivos pessoais, com acesso
SINTAXE restrito, se assim desejado, ao seu respectivo dono. Na linha de comando, a home
pode ser representada com o metacaractere ˜, e a home de outros usuários, como
who
a de Pedro, por exemplo, ˜pedro. Veremos abaixo onde se localizam estas pastas,
DESCRIÇÃO e toda a estrutura de organização do sistema.
Mostra quais usuário estão logados na máquina.

3.2.1 Estrutura Básica e Endereçamento


Comando 3.5 finger Lista informações sobre os usuários do sistema.
NOME Os arquivos e diretórios encontram-se organizados em uma estrutura hierárquica
na forma de árvore. Nessa estrutura, cada diretório está contido em outro e pode,
finger
por sua vez, conter vários diretórios e arquivos. Existe apenas um diretório que
SINTAXE não está contido em nenhum, chamado raiz e representado por /. O diretório /
é, como o nome diz, a raiz da árvore de diretórios: todos os outros arquivos e
finger [usuário] ...
diretórios estão contidos em /.
DESCRIÇÃO
O comando mostra informações sobre o usuário, tais como seu diretório
pessoal, nome, data e hora do último login e tempo que está logado.

Comando 3.6 su Troca de usuário no terminal.


NOME
su

SINTAXE
su [usuário]

DESCRIÇÃO
O comando su troca de um usuário para outro no terminal corrente. Se o
usuário não for especificado, será trocado para o root do sistema.
NOTAS
No sistema operacional Ubuntu, inicialmente não está definida uma senha
do root. Para defini-la digite sudo bash e em seguida entre com a sua senha
(caso você tenha feito a instalação do sistema). Em seguida use o comando
passwd para definir a senha de root.

Comando 3.7 sudo Executa comandos com previlégios de root.


Há duas formas de se fazer referência a diretórios e arquivos. Na primeira
NOME forma de referência usa-se o endereço relativo ao diretório corrente, diretório em
sudo que se está trabalhando.
$ whoami
SINTAXE chapolin
sudo comando $ pwd
/home/pet/chapolin
DESCRIÇÃO $ cd Filmes/McGyver
Executa comandos como administrador do sistema. Vários usuários podem $ pwd
/home/pet/chapolin/Filmes/McGyver
ter este previlégio no sistema.
Outra forma é escrevendo o endereço completo, desde a raiz.
3.2. ARQUIVOS E PASTAS 19 20 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

$ pwd 3.2.3 Links


/home/pet/chapolin
$ cd /home/pet/Filmes/McGyver
$ pwd Um link é uma forma de se referenciar arquivos e pastas. Há dois tipos de links:
/home/pet/chapolin/Filmes/McGyver os links simbólicos e os hard links.
Note que, com esta forma de endereçamento, é possı́vel referenciar facilmente Um link simbólico é um arquivo cujo conteúdo é o endereço de um alvo, que
quaisquer arquivos ou pastas, sem a necessidade de acessar o diretório em que se pode ser um diretório ou de outro arquivo. Através do link simbólico, podemos ler
encontram tais objetos. e modificar o alvo. Se o alvo for apagado ou trocado de lugar, o link fica órfão. O
alvo pode estar em outra partição.
Por padrão, todos os diretórios contêm os diretórios “.” e “..”. O caractere .
representa o diretório corrente, ou seja, o próprio diretório em que se encontra. Um hard link é uma referência direta à posição no disco apontada pelo alvo.
Já o .. representa o pai do diretório corrente. Este tipo de link só pode ser usado em arquivos. O hard link tem as mesmas
propriedades do arquivo original. Se o alvo for apagado, o link continua como
$ whoami
estava. Para apagar um arquivo, é necessário apagar todos os seus hard links.
tirulipa
$ pwd
/home Exercı́cio Resolvido 3.2 Você está no diretório /pasta exercicio/Diversos. Como
$ cd ˜ copiar todos os arquivos deste diretório diretamente para sua home?
$ pwd
/home/pet/tirulipa cp * ˜
$ cd ..
$ pwd Primeiramente usamos o comando cp, que copia os arquivos. A opção * irá incluir
/home/pet todos os arquivo do diretório atual, e o ˜ indica o destino desse arquivo. Observe
que nesse caso, pastas contidas no diretório corrente não serão copiadas, a menos
Segue uma pequena apresentação dos principais diretórios do sistema. que a opção -r seja utilizada.

Exercı́cio Resolvido 3.3 O diretório /pasta exercicios está na sua home. Como
/boot Encontramos o kernel e outros arquivos de inicialização;
excluir todos os arquivos e diretórios contidos nesta pasta?
/bin estão os executáveis mais simples; $ cd ˜ $ rm -r pasta exercicios/*

/usr a maior parte dos executáveis instalados; Juntamente com o comando rm, a opção -r irá excluir o diretório e todos diretórios
abaixo dele.
/etc guarda os arquivos de configuração;

/dev contém links para os periféricos;.

/mnt é o diretório padrão de montagem de periféricos de armazenamento;

/home encontram-se os diretórios pessoais de cada usuário.

3.2.2 Informações Sobre Arquivos

O formato dos arquivos não é decidido pela sua extensão, como no Windows, mas
pela sua estrutura interna. Logo, a extensão de um arquivo serve apenas para fins Comando 3.8 pwd Mostra o endereço completo do diretório atual.
de organização e para facilitar futuras buscas. Outro ponto importante é que em NOME
nomes de arquivos ou pastas há distinção entre letras maiúsculas e minúsculas.
pwd
Um arquivo chamado RincaoAlegre.jpg não será encontrado se referenciado
como rincaoAlegre.jpg, por exemplo. SINTAXE
Cada arquivo guarda três informações de tempo: access, modify e change. pwd
Access é atualizado quando se acessa um arquivo. Modify é quando o conteúdo do
arquivo é modificado. Change é modificado quando modify se atualiza ou quando DESCRIÇÃO
ocorre uma alteração das propriedades externas do arquivo, como permissões, ou Mostra o endereço completo do diretório atual.
quando ele é movido para outro diretório.
3.2. ARQUIVOS E PASTAS 21 22 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

Comando 3.9 cd Muda de diretório.


Comando 3.12 rmdir Remove diretórios vazios.
NOME
NOME
cd
rmdir
SINTAXE
cd [diretório] SINTAXE
rmdir diretório ...
DESCRIÇÃO
O comando cd muda para o diretório. Se nenhum parâmetro for passado, DESCRIÇÃO
muda para o diretório home do usuário. Remove diretórios vazios.

Comando 3.10 ls Lista o conteúdo de diretórios e informações sobre arquivos.


NOME Comando 3.13 rm Remove arquivos e diretórios.
ls
NOME
SINTAXE rm
ls [-lahd] [arquivo] ...
SINTAXE
DESCRIÇÃO rm [-rif] arquivo ...
O comando ls lista o conteúdo do diretório arquivo, ou suas informações,
se arquivo não for um diretório. Quando usado sem parâmetros, lista o DESCRIÇÃO
conteúdo do diretório atual. Remove arquivos e diretórios permanentemente.
OPÇÕES
OPÇÕES
-l Exibe informações mais detalhadas sobre cada arquivo/diretório.
-r Remove diretórios e todo seu conteúdo recursivamente.
As informações exibidas são: permissões, grupo e dono, tamanho,
tempo da última modificação e seu nome. -i Pede por confirmação antes de remover cada arquivo.
-a Exibe arquivos ocultos. -f Força a exclusão dos arquivos: não pede confirmação nem retorna
erros para arquivos inexistentes.
-h A opção -l mostra o tamanho dos arquivos em bytes. Esta opção
apresenta o tamanho dos arquivos com uma unidade apropriada em
função destes tamanhos, tornando-os legı́veis.

-d Não lista o conteúdo de diretórios, mas sim suas informações. Comando 3.14 mv Move arquivos e diretórios.
NOME
Comando 3.11 mkdir Cria diretórios. mv
NOME SINTAXE
mkdir mv [-i] arquivo ... destino
mv [-i] arquivo destino/novo nome
SINTAXE
mkdir diretório ... DESCRIÇÃO
mkdir -p diretórios/subdiretório ... O comando mv move o arquivo para o diretório destino. Se mais de um
arquivo for passado como parâmetro, destino deve ser um diretório. Caso
DESCRIÇÃO
contrário é possı́vel renomear o arquivo com o novo nome ao movê-lo para
Cria diretórios. destino.
OPÇÕES OPÇÕES

-p Ao criar o subdiretório, cria também todos os diretórios inexis- -i Pede confirmação antes de sobrescrever qualquer arquivo.
tentes.
3.2. ARQUIVOS E PASTAS 23 24 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

Comando 3.15 cp Copia arquivos e diretórios.


NOME
cp

SINTAXE
cp [-ri] arquivo ... destino Comando 3.18 touch Atualiza as datas de um arquivo.
cp [-ri] arquivo destino/novo nome
NOME
DESCRIÇÃO touch
O comando cp copia o arquivo para o diretório destino. Se mais de um
arquivo for passado como parâmetro, destino deve ser um diretório. Caso SINTAXE
contrário é possı́vel nomear a cópia do arquivo como novo nome. touch arquivo ...
OPÇÕES
DESCRIÇÃO
-r Copiar diretórios, com todo seu conteúdo, recursivamente. Atualiza os tempos modify, change e access do arquivo. Se o arquivo não
existir, será criado.
-i Pede confirmação antes de sobrescrever arquivos existentes.

Comando 3.16 file Mostra o formato do arquivo.


NOME
file

SINTAXE
file arquivo ...

DESCRIÇÃO
Mostra o formato do arquivo.
Comando 3.19 ln Cria links de arquivos.
NOME
ln
Comando 3.17 stat Mostra informações sobre arquivos. SINTAXE
NOME ln [-s] arquivo link
stat
DESCRIÇÃO
SINTAXE Cria um link do arquivo. Se for usado sem opções, cria um hard link.
stat arquivo ...
OPÇÕES
DESCRIÇÃO -s Cria um link simbólico.
Este comando mostra o formato do arquivo, o tamanho, a posição no HD, as
permissões, o login e o grupo do dono e os tempos access, modify e change.
OPÇÕES
-f, --file-system
Mostra status de um sistema de arquivos ao invés de um arquivo.]
3.3. PERMISSÕES 25 26 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

3.3 Permissões No restante da string (conjunto de caracteres) estão as permissões propria-


mente ditas. São 9 caracteres divididos em grupos de 3, que representam as
permissões de determinados perfis de usuários. Agora que já sabemos o signifi-
Para entender sobre permissões, será necessária a compreensão de outros dois
cado das divisões da string, vamos entender o que as letras r, w, x e o caractere -
conceitos vistos anteriormente sobre arquivos e usuários. Permissões são um dos
representam. No caso de arquivos:
aspectos mais importantes do Linux (na verdade, de todos os sistemas baseados
em Unix), pois elas são usadas para várias finalidades, mas servem principal-
mente para proteger o sistema e os arquivos dos usuários. r Significa permissão de leitura (read);

Somente o root tem ações irrestritas no sistema. Naturalmente, a especificação w Significa permissão de gravação (write);
do que cada usuário ou grupo do sistema pode fazer é determinada através de per-
missões. Ao listar as permissões de um arquivo ou pasta, estas serão mostradas x Significa permissão de execução (execution);
no seguinte formato:
- Significa permissão desabilitada.
$ ls -l
drwxr-xr-x 2 chapolin pet-user 4096 2011-02-25 16:22 Comandos
-rw-r--r-- 1 chapolin pet-user 392 2011-02-25 14:37 Makefile Ja para diretórios:
O primeiro item que aparece em cada linha, drwxr-x-r-x e -rw-r--r-- acima,
é a forma usada para mostrar as permissões do diretório Comandos e do arquivo r Significa permissão para listar o conteúdo (read);
Makefile.Um ponto interessante é que o Linux trata todos os diretórios como
arquivos1 , portanto, as permissões se aplicam de igual forma para ambos. Tais w Significa permissão para criar e excluir arquivos e diretórios (write);
permissões podem ser divididas em quatro partes para indicar: tipo, proprietário,
x Significa permissão para entrar no diretório (execution);
grupo e outras permissões.
- Significa permissão desabilitada.

Leitura permite ao usuário ler o conteúdo do arquivo mas não alterá-lo, ou listar
o conteúdo se for uma pasta. Gravação permite que o usuário altere o arquivo ou
o interior do diretório. Execução, como o nome diz, permite que o usuário execute
o arquivo, no caso de ser executável e, no caso de pastas, acessá-la.
Estas permissões,r, w e x, não funcionam isoladamente, ou seja, de forma que
o usuário tenha ou permissão de leitura ou de gravação ou de execução, elas
funcionam em conjunto.
Existem duas maneiras de expressar as permissões: forma textual e forma
octal.

O primeiro caractere da string indica o tipo de arquivo: se for d representa um 3.3.1 Notação Textual
diretório, caso seja - equivale a um arquivo. Entretanto, outros caracteres podem
aparecer para indicar outros tipos de arquivos, conforme abaixo. A notação textual é mais maleável, e pode ser escrita de algumas formas, como
veremos abaixo.
d Diretório; $ chmod (ugoa)(+-=)(rwx) arquivos

b arquivo de bloco; O primeiro grupo de caracteres refere-se a quem a permissão será alterada.

c arquivo especial de caractere; u Permissão do usuário proprietário;

p canal; g Permissão do grupo;

s socket; o Permissão dos demais usuários;

- arquivo “comum”. a Permissão de todos os usuários, ou seja, proprietário, grupo e outros usuários.
1 Portanto,
os comandos da apostila que se aplicam a “arquivos”, certamente valem para diretórios,
a menos que seja explicitado no texto. O segundo grupo de caracteres refere-se ao tipo de alteração que será feita.
3.3. PERMISSÕES 27 28 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

+ Adiciona uma permissão; Para exemplificar, vamos utilizar a permissão rw-, cujo valor em binário é 110,
que por sua vez, em decimal corresponde ao número 6. Então, em vez de usar
- Remove uma permissão; rw- ou 110 para criar a permissão, simplesmente usa-se o número 6. Repare
que, com o método numérico, usamos somente um dı́gito para representar uma
= Define estado final da permissão de tipo de usuário; permissão, em vez de três. Assim, a string de permissões r--r--r-- pode ser
representa por 444, pois r-- em decimal é igual a quatro. Caso você desconheça
O terceiro grupo de caracteres refere-se ao tipo de permissão, já comentado acima. o sistema numérico binário, existe outra maneira de pensar:
Para melhor entendimento, veja o exemplo:
$ ls -l 4 Permissão de leitura;
-rw-rw-r-- 1 chapolin pet-user 392 2011-02-25 14:37 Makefile
$ chmod o-r Makefile 2 permissão de escrita;
$ ls -l
-rw-rw---- 1 chapolin pet-user 392 2011-02-25 14:37 Makefile 1 permissão de execução;
$ chmod g=r Makefile
$ ls -l 0 indica sem permissões.
-rw-r----- 1 chapolin pet-user 392 2011-02-25 14:37 Makefile
$ chmod og+w Makefile
Agora é simples, é só somar as permissões. A permissão rwxrw-r-- em octal, por
$ ls -l
exemplo, ficaria assim: 4 + 2 + 1 = 7 (permissão de rwx), 4 + 2 = 6 (permissão rw)
-rw-rw--w- 1 chapolin pet-user 392 2011-02-25 14:38 Makefile
$ chmod o=rx Makefile 4 = (permissão r). Para que não fique dúvidas, veja mais um exemplo com a figura
$ ls -l abaixo.
-rw-rw-r-x 1 chapolin pet-user 392 2011-02-25 14:38 Makefile
Para realizar trocar completas, devem ser utilizadas vı́rgulas para separar os
usuários:
$ ls -l
-rw-rw-r-x 1 chapolin pet-user 392 2011-02-25 14:38 Makefile
$ chmod u=rw,g=r,o= Makefile
$ ls -l
-rw-r----- 1 chapolin pet-user 392 2011-02-25 14:38 Makefile

3.3.2 Notação Octal

Além da forma textual para descrever as permissões vista acima, existe também
o modo numérico, chamada de forma octal. Basicamente deve se pensar no sis-
tema numérico binário, substituindo-se os tipos de permissões por 0s ou 1s. Se
determinada permissão é habilitada, atribui-se valor 1, caso contrário, atribui-se
o valor 0. Assim, a string de permissões r-xr----- na forma numérica torna-se
Exercı́cio Resolvido 3.4 Estando em sua home, como alterar as permissões de
101100000. Essa combinação de 1’s e 0’s é um número binário. Mas temos ainda
todos os diretórios e arquivos do diretório /home/user/pasta exercicios?
que acrescentar a forma decimal (ou seja, representados por números de 0 a 9).
Para isso, observe a tabela abaixo: $ chmod -R 744 pasta exercicios

A partir de sua home, com o comando chmod e a opção -R, é possı́vel alterar as
permissões de todos os arquivos do diretório /pasta exerciciosrecursivamente,
ou seja, alteraremos as permissões de todos os diretórios e arquivos existentes
dentro do diretório /pasta exercicios.
3.3. PERMISSÕES 29 30 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

Comando 3.21 chown Troca proprietário do arquivo.


NOME
chown
Comando 3.20 chmod Troca permissões de arquivos ou diretórios.
SINTAXE
NOME chown [-fR] [novo proprietário] [:[novo grupo]] arquivo ...
chmod
DESCRIÇÃO
SINTAXE Este comando permite trocar o usuário e/ou o grupo a quem um deter-
chmod [-fR] permissões arquivo ... minado arquivo pertence. Este é um comando restrito apenas ao root ou
outros administradores e pode ser utilizado da seguinte forma:
DESCRIÇÃO $chown novo_roprietário arquivo.txt
O comando chmod troca as permissões de um arquivo ou diretório. Para Troca apenas o proprietário do arquivo.
especificar as novas permissões pode ser utilizado as duas formas vistas $chown novo_proprietário:novo_grupo arquivo.txt
anteriormente: o modo octal, em que a descrição da permissão será feita de Troca o proprietário e o grupo do arquivo.
forma completa, $chown NovoProprietário: arquivo.txt
$chmod 744 arquivo.txt Troca o proprietário e o grupo do arquivo. Sendo que o novo grupo é o grupo
e o modo textual. Neste modo as permissões podem ser descritas parci- do novo proprietário do arquivo.
almente, apenas por grupos ou usuários, ou apenas por uma permissão $chown :NovoGrupo arquivo.txt
especı́fica, por exemplo, adicionar permissão de leitura ao grupo. Troca o apenas o grupo do arquivo. Funciona da mesma maneira que o
$chmod g+r arquivo.txt comando chgrp.
OPÇÕES OPÇÕES
-f Suprime mensagens de erro, ou seja, executa o comando sem mos- -f Suprime mensagens de erro, ou seja, executa o comando sem mos-
trar erros na tela; trar erros na tela;

-R Troca a permissão dos arquivos e diretórios recursivamente. -R Troca o proprietário e/ou o grupo dos arquivos e diretórios recursi-
vamente.
NOTAS
O caractere : é equivalente ao caractere . neste comando, podendo ser
utilizado em sua sintaxe.
3.3. PERMISSÕES 31 32 CAPÍTULO 3. LINUX EM SUA ESSÊNCIA

3.4 Exercı́cios

Para resolver esses desafios, utilize as man pages, juntamento com as informaçoes
da apostila. Não esqueça de fazer o download do diretório de exercicios que acom-
panha a apostila.

Exercı́cio 3.5 Se um diretório tiver as permissões drwx--x---, e dentro deste di-


retório existe um arquivo, cujas permissões são -rwx--x---. Para quem o dono do
arquivo quer disponibilizá-lo? Provavelmente, que tipo de arquivo é este?

Comando 3.22 umask Determina as permissões padrão para novos arquivos e Exercı́cio 3.6 Como ficariam as permissões de um arquivo que está definido como
diretórios criados. somente leitura para o grupo do dono do arquivo e também para os outros usuários
que não fazem parte deste grupo, e leitura e escrita para o dono do arquivo?
NOME
umask Exercı́cio 3.7 Você fez o download de um filme, mas na pasta deste filme veio um
arquivo deconhecido, que pode ou não ser do seu interesse. Como pode-se obter
SINTAXE
informações desse arquivo sem executá-lo? Quais as implicações da ação anterior
umask permissões
na segurança do sistema?
DESCRIÇÃO
Quando o usuário cria um arquivo ou diretório, o sistema associa ao objeto Exercı́cio 3.8 Você é o administrador de um sistema, e o problema é o seguinte:
criado um conjunto de permissões padrão de acesso. Este valor padrão é existe um arquivo importante na home de um usuário, você conhece o login deste
definido pelo comando umask. Este comando pode ser executado de duas usuário. A partir desta única informação, qual a sequência de comandos apropriada
maneiras: forma textual e forma octal. Na forma textual, este funciona para copiar este arquivo para sua home, ou ao menos ter acesso a esse arquivo a
como explicado nesta seção, exemplo: partir de sua home?
$umask u=rwx,g=rx,o=
Já na forma octal existe um pequeno detalhe que faz uma grande diferença.
Deve-se informar as permissões que não serão dadas, ao invés das per-
missões desejadas. Outra forma de se pensar é subtrair a permissão dese-
jada da permissão máxima (777). Vamos refazer o exemplo acima, agora na
forma octal:
$umask 027
A permissão desejada é 750, então subtrai-se 750 da permissão máxima
(777), obtendo-se o valor do umask 027.
NOTAS
É muito importante saber que o comando umask funciona apenas no termi-
nal executado, após seu encerremento o efeito do comando é perdido. Para
alterar em todos os terminais é necessário alterar o arquivo de configuração
de seu usuárioa .
a ver seção da nicoly
34 CAPÍTULO 4. MEXENDO UM POUCO MAIS

No shell a entrada padrão é o teclado e a saı́da padrão é o próprio terminal.


Em geral, quando um comando requer parâmetros de entrada e saı́da e nada for
especificado a entrada e saı́da padrão serão usadas.
Vejamos um exemplo com o comando cat, que serve basicamente para imprimir
o conteúdo do arquivo de entrada:

Capı́tulo 4 $cat arquivo.txt

O comando cat admite como parâmetro apenas a entrada, a saı́da será por padrão
o terminal. Esta saı́da pode ser alterada por meio de redirecionamentos, que
veremos mais adiante.

Mexendo um pouco Mais Caso um arquivo de entrada não seja fornecido, esse programa irá esperar
dados serem digitados no próprio
 terminal,
 para depois serem impressos. Para
interromper, deve-se utilizar Control + d  1 . Vejamos o exemplo a seguir:
$cat
Testando texto
Neste capı́tulo trataremos de um assunto que é muito importante quando se quer Testando texto
entender como linhas de comandos funcionam, que é a entrada e saı́da de dados. Denovo
Basicamente, estas duas palavras são o essencial para o entendimento de como Denovo
funciona o terminal. Normalmente uma entrada é fornecida, e um resultado é ˆD
gerado. A partir do momento em que o usuário conseguir entender essa lógica Como o cat não recebeu nenhum parâmetro ele leu os dados da entrada padrão
básica, a utilização de comandos se tornará mais simples e sem mistérios. e então os enviou para a saı́da padrão, por isso todo texto digitado é duplicado.

Além disso, aqui também será explicado a fundo como o interpretador de co-
mandos shell trabalha, a importância de suas variáveis de ambiente e dos seus 4.1.2 Redirecionamento destrutivo e não-destrutivo
arquivos de configuração, além de como saber analisá-los e configurá-los para me-
lhor atender cada usuário. Essa personalização é de grande utilidade, pois gera
Um artifı́cio muito útil é a possibilidade de redirecionar entradas e saı́das utili-
uma boa economia de tempo para o usuário.
zando sı́mbolos.
Outro ponto importante que será abordado diz respeito à administração de
Os sı́mbolos > e >> são usados para modificar a saı́da de um comando, envi-
um sistema operacional. Será mostrado e exemplificado como aplicativos podem
ando os dados para um arquivo, ao invés de utilizar a saı́da padrão. Observe este
ser controlados através do terminal, e até mesmo por simples combinações de
exemplo:
teclas. Além do citado acima, uma facilidade muito grande que o shell nos oferece
é em respeito ao controle dos dados do sistema. Tarefas que envolvem unidades $ls
de armazenamento e controle de dados em disco se mostram práticas quando
Usado deste modo, o resultado é uma lista de arquivos e pastas do diretório
executadas via shell.
atual mostrada no próprio terminal das informações (saı́da padrão). Utilizando
os sı́mbolos, temos:
$ls > arquivos.txt
4.1 Nada se Cria Tudo se Transforma!
Esta linha de comando não imprimirá nada no terminal. Ao invés disso, irá criar
o arquivo arquivos.txt, com as informações de saı́da do comando ls.
4.1.1 Entrada e saı́da de dados
O sı́mbolo > é chamado de redirecionador destrutivo, pois caso seja fornecido
A grande maioria dos comandos utilizados em terminal requer dados passados um arquivo já existente, ele apaga todas as informações do mesmo para inserir as
como parâmetros para sua execução. Estes dados são fornecidos por uma enti- novas.
dade chamada de entrada, que pode ser o teclado ou um arquivo. Já o sı́mbolo >> é chamado de não-destrutivo. Ele concatena as informações
A execução de um comando utiliza os dados fornecidos pela entrada para gerar no final do arquivo, caso o mesmo já exista.
um resultado, que é mostrado através de uma entidade chamada de saı́da. Esta Quando estamos falando de dados de entrada, o sı́mbolo < pode nos poupar
saı́da pode ser a própria tela do terminal ou um arquivo também. muito tempo. Seu funcionamento é muito simples, ele redireciona os dados con-
A escolha do tipo de entrada e saı́da depende do comando que está sendo tidos em um arquivo para a entrada de um comando. Imagine que o comando é
utilizado. Alguns comandos nos permitem escolher estas informações através dos 1 Quando um programa está lendo dados de um arquivo ele termina a entrada de dados quando lê
parâmetros. Outros já possuem entrada e saı́da definidas, as quais são chamadas um valor especı́fico que representa o final do arquivo. Quando estamos entrando os dados via teclado,
de entrada e saı́da padrão. precisamos pressionar Control + D  para simular a leitura deste valor.

33
4.1. NADA SE CRIA TUDO SE TRANSFORMA! 35 36 CAPÍTULO 4. MEXENDO UM POUCO MAIS

executado e a cada vez que a entrada padrão é solicitada, a leitura é feita direta- o seguinte exemplo: imagine que queremos guardar em um arquivo o nome de
mente no arquivo. Veja o exemplo a seguir. todos os arquivos e pastas do diretório corrente, mas em ordem alfabética. Uma
tarefa simples, realizada com os seguintes comandos:
O comando sort recebe dados de entrada e os ordena, enviando para a saı́da
padrão: $ls > dados.txt
$sort dados.txt > ordenados.txt
$sort
O resultado é o terminal esperando dados serem digitados, e só então a ordenação A tarefa foi executada, porém tivemos que utilizar dois comandos e ainda um
é realizada. arquivo temporário.
$sort < arquivo.txt Utilizando pipe a mesma tarefa é executada pela seguinte linha de comando:
Neste caso o resultado será imediato. Os dados contidos no arquivo serão orde- $ls | sort >> ordenados.txt
nados e impressos na saı́da padrão. Agora observe o seguinte exemplo:
$sort < arquivo1.txt > arquivo2.txt Observe que neste caso não há arquivo temporário, apenas o destino final. O
funcionamento deste sı́mbolo é simples, vamos passo a passo na linha de comando
Este comando não irá imprimir nada, apenas ordenar os dados do arquivo1 anterior:
e jogá-los no arquivo2. Observe que é possı́vel combinar os sı́mbolos para obter
O comando ls por padrão imprime os dados no terminal, porém a presença
resultados diferentes.
do pipe faz com que esses dados sejam redirecionados para a entrada do próximo
Analisando a sintaxe do comando sort, observamos que ele aceita como parâmetro comando. O sort é executado sem a utilização de um parâmetro, pelo fato de
um arquivo de entrada, então é possivel utilizar o comando: que os dados já foram enviados do comando anterior. Nesta etapa, os dados são
ordenados e redirecionados para o arquivo final.
$sort arquivo.txt
Vale ressaltar que vários pipes podem ser utilizados, tornando possı́vel a realização
O resultado será o mesmo de $sort < arquivo.txt. de tarefas complexas com apenas uma linha de comando.
Quando estamos trabalhando com programas em C ou outras linguagens, po-
demos utilizar o redirecionador de entrada para fazermos testes ao alterarmos
partes do código. Observe a seguinte situação:
Imagine que você fez um programa que recebe como entrada 100 números e 4.1.4 Saı́da de erros
imprima a média aritmética deles. Você o compilou e precisa testar seu funcio-
namento. Você o executa e deve digitar os 100 números, um a um. Imagine que Além da entrada e saı́da padrão, existe uma entidade chamada saı́da de erros, que
ocorra um erro no 98o número. O próximo passo é achar o erro e testar novamente. serve para a impressão de erros. A saı́da de erros padrão é a tela do terminal.
O problema é que em cada teste, cem números devem ser digitados. Cansativo!
Alguns comandos podem emitir mensagens de erro, caso não funcionem como
É muito mais prático criar um arquivo com os cem números, e simplesmente esperado e não retornem o resultado desejado. Por exemplo o comando ls:
redirecioná-lo como entrada de dados:
$ls Teste
$./calcula_media < dados.txt

E neste caso utilizar um redirecionamento da entrada padrão é muito interes- Esta linha de comando faz com que seja impresso todos os arquivos e pastas
sante por tornar a construção do programa em C ou qualquer linguagem muito contidos na pasta Teste. Mas, e se a pasta Teste não existisse?
mais simples. Criar um programa que lê os dados da entrada padrão é muito Neste caso, seria impresso na saı́da de erros a seguinte mensagem:
fácil, enquanto criar um programa que lê os dados de um arquivo exige o uso de
diversas rotinas de manipulação de arquivos. $ls: Teste: No such file or directory

Em alguns casos é interessante transportar as mensagens de erros que ocor-


4.1.3 Pipe rem no sistema para um arquivo, para serem analisadas posteriormente ou para
que os erros não sejam impressos no terminal. Para isso, utilizamos o sı́mbolo
E se quisermos redirecionar a saı́da de um comando, não para um arquivo, mas 2> que funciona exatamente da mesma forma que o redirecionamento de saı́da de
para a entrada de outro comando, seria possı́vel? A resposta é sim! dados >:
Existe um sı́mbolo muito poderoso no shell, que executa esta tarefa, chamado $ls Teste 2> erros.txt
de Pipe.
Com ele podemos reduzir o número de instruções, ou seja, uma tarefa que seria
realizada com várias linhas de comando, pode ser realizada em apenas uma. Veja Exercı́cio Resolvido 4.1 Como concatenar conteúdo usando o comando tee?
4.1. NADA SE CRIA TUDO SE TRANSFORMA! 37 38 CAPÍTULO 4. MEXENDO UM POUCO MAIS

$ cat nomes.txt Frodo


Sam
Merry
Bilbo
$ whoami | tee -a nomes.txt
$ cat nomes.txt Comando 4.1 cat Envia dados para a saı́da padrão.
Frodo
NOME
Sam
Merry cat
Bilbo
Pet SINTAXE
cat [opcões] [entrada]

No diretório /pasta exercicios/Diversos, com a opção -a, podemos concate- DESCRIÇÃO


nar conteúdo ao conteúdo antigo de um arquivo passado como parâmetro ao co- O comando cat imprime o arquivo na saı́da padrão. Caso mais de um ar-
mando tee. quivo seja fornecido, suas informações são concatenadas e então impressas.
A utilização do comando sem o fornecimento de um arquivo imprime dados
Exercı́cio Resolvido 4.2 Por que usar o comando xargs? da entrada padrão.
$ ls OPÇÕES
Ace of Spades.txt Be my Baby.txt Sucker.txt
$ cat > apagar.txt -b Enumera linhas não em branco.
Sucker.txt
ˆD -n Enumera todas as linhas.
$ ls
Ace of Spades.txt apagar.txt Be my Baby.txt Sucker.txt -s Suprime linhas em branco repetidas.
$ cat apagar.txt
Sucker.txt
$ cat apagar.txt | xargs rm
$ ls
Ace of Spades.txt apagar.txt Be my Baby.txt

Considerando o arquivo /apagar exercicios/Musicas/apagar.txt, com o co-


mando cat vemos o conteúdo como sendo ‘Sucker.txt’. Porém, se redirecionar-
mos esse resultado, usando o pipe, para o comando xargs, o conteúdo do arquivo
Comando 4.2 more Visualizar arquivos.
/pasta exercicios/Musicas/apagar.txt vira argumento do comando que segue
o xargs. Ou seja, o comando executado será o ‘rm Sucker.txt’. O comando xargs NOME
é muito interessante quando precisamos repassar pelo pipe o argumento de algum more
comando, como por exemplo o nome do arquivo que o comando rm deve apagar, o
nome do usuário que o comando finger deve procurar ou o nome do arquivo que o SINTAXE
comando touch deve criar. Vale lembrar que o pipe nem sempre precisa ser usado more [opcões] [entrada]
seguido do xargs. Existem vários comando que podem manipular a informação
que está sendo repassada pelo pipe, ou seja, comandos que procuram uma linha DESCRIÇÃO
especı́fica desse conteúdo, que contam o número de linhas do arquivo, etc. Em O comando more é utilizado para visualizar arquivos. Diferentemente do
resumo, usamos o xargs para modificar arquivos (criar , excluir, compactar), en- comando cat, o more não imprime diretamente todo o conteúdo, mas sim
quanto que para apenas modificar um conteúdo que será apenas “jogado” na saı́da de partes em partes, de acordo com o tamanho da janela do terminal. Deste
padrão, sem que nenhuma modificação seja realmente feita no arquivo, podemos modo é possı́vel a leitura de arquivos longos.
usar outros comandos sem o xargs (ver Seção 5.3). Com este comando, a ordem de visualização é de cima para baixo.
OPÇÕES
-s Suprime linhas em branco repetidas.
4.1. NADA SE CRIA TUDO SE TRANSFORMA! 39 40 CAPÍTULO 4. MEXENDO UM POUCO MAIS

Comando 4.4 xargs Passa dados da entrada padrão como argumentos.


NOME
xargs

SINTAXE
xargs [opcões] comando [entradaDoComando]

DESCRIÇÃO
O comando xargs é usado para construir e executar linhas de comando a
Comando 4.3 less Visualizar arquivos. partir da entrada padrão. Os dados da entrada padrão servirão de argu-
mento para o comando utilizado com o xargs.
NOME
Por exemplo:
less $xargs rm
Esta linha irá executar o comando rm para cada dado digitado na entrada
SINTAXE
padrão.
less [opcões] [entrada]
Utilizando pipe para redirecionarmos a saı́da, poderı́amos construir o se-
guinte comando:
DESCRIÇÃO
$ls | xargs rm
O comando realiza a tarefa básica do comando more porém com algumas Deste modo, cada arquivo ou pasta encontrada pelo ls seria utilizada como
funcionalidades a mais. Possui a capacidade de exibir o arquivo com opção argumento para o comando rm.
de rolagem para trás e para frente. Como não necessita ler todo o arquivo de
entrada antes de exibı́-lo, consegue maior desempenho comparado a outros NOTAS
Apesar de poderoso, é preciso entender o comando para saber quando usá-
visualizadores e editores quando manipulam arquivos grandes.
lo.
OPÇÕES Por exemplo:
-N Enumera todas as linhas $ls | cat
O comando cat imprime dados da entrada padrão, neste caso com o uso do
-s Suprime linhas em branco repetidas. pipe, o cat irá imprimir os dados da saı́da do comando ls, que é o nome de
EM EXECUÇÃO todos os arquivos e pastas do diretório corrente. Então basicamente este
 comando é o mesmo que utilizar
$ls
ESPACE 
próxima página Mas se utilizarmos o xargs:
 $ls | xargs cat
ENTER  A interpretação será outra. Neste caso o comando cat irá imprimir o
próxima linha conteúdo de cada arquivo encontrado pelo ls.

b
  topo
 Comando 4.5 tee Envia conteúdo para saı́da padrão e arquivo simultaneamente.
v  editor de texto vi
NOME

sair tee
q 

lista todos os comandos SINTAXE
h 
tee [opcões] [arquivo]

DESCRIÇÃO
O comando canaliza a entrada padrão para o arquivo fornecido como argu-
mento e também para a saı́da padrão. É normalmente utilizado com pipes
para redirecionamento.
Por exemplo:
$ls | tee arquivos.txt
Neste caso os nomes dos arquivos e pastas encontrados pelo ls são impres-
sos na tela e salvos no arquivo “arquivos.txt”.
4.2. MINHA PASTA PESSOAL 41 42 CAPÍTULO 4. MEXENDO UM POUCO MAIS

4.2 Minha Pasta Pessoal Um shell não interativo é aquele invocado para que um shell script seja execu-
tado, por exemplo. É fechado assim que a execução termina.
4.2.1 Shell Um shell com login é aquele que pede ‘usuario’ e ‘senha’ para que possa ser
executado, ou que aquele que possui a opção ‘-login’.
O Shell é um interpretador de comandos que possibilita a interação entre o usuário
e o sistema, pois repassa ao kernel os comandos escritos pelo usuário ou coman- Terminal ou console, é onde é mostrado o shell. Quando está em modo texto
dos presentes em um arquivo executável. pode ser chamado também de Terminal Virtual.
 No Linux, é possivel alternar
As três camadas dum sistema baseado no kernel Linux são: entre os terminais virtuais usando Alt  + Fn , onde n é o número do terminal
escolhido. Existem alguns programas que emulam o console no modo gráfico,
como por exemplo o Xterm e o Eterm.

Prompt é a linha mostrada antes do espaço para digitar o comando e, por


1. Shell, o interpretador que interage com o Kernel. padrão, é formada da seguinte forma: nome do usuário que está acessando o
Shell, seguido de um arroba, depois o nome da maquina e por último o diretorio
2. Kernel, o núcleo do sistema operacional que interage atual, seguido de um $ (para o usuario normal) ou # (para o usuario root).
com o hardware (gerenciador de processos, gerenci-
ador de memória , etc).

3. Hardware(HD, memória RAM, cdrom, etc), a camada


mais interna.

O Shell padrão do GNU/Linux é o Bash, mas existem muitos tipos diferentes 4.2.3 Shell Script
de Shell:

sh “Bourne shell” , escrito por Stephen Bourne. Ainda presente em muitos siste- Daqui até o fim dessa seção, consideraremos que o shel utilizado seja o bash.
mas.
Um Shell Script é um arquivo que contém uma sequência de comandos e
csh “C shell”, escrito por Bill Joy. Possui sintaxe muito parecida com a linguagem estruturas lógicas (if, for, while) - comumente encontradas em linguagens de
de programação C. programação. Serve para formarmos conjuntos de comandos que serão execu-
tados em sequência. Podemos, por exemplo, fazer um Shell Script para que um
ksh “Korn shell” , escrito por David Korn. Evolução do sh com comandos avançados. diretório seja criado , e dentro dele 2 arquivos texto. Esse arquivo poderá conter
os comandos cd, mkdir, touch, chmod, dentre outros, e substituirá várias linhas
bash “Bourne Again shell”, escrito por . É uma extensão do sh. É o Shell padrão
de comando que, uma a uma, deveriam ser digitadas pelo usuário. Esse é um
do sistem operacional GNU/Linux.
exemplo muito simples, pois o poder do Shell Script aumenta muito quando in-
serimos estruturas lógicas. Para que o shell reconheça o arquivo como um Shell
Antes de repassar a linha de comando para o kernel, o Shell executa alguns Script, é necessário que na primeira linha do arquivo haja um shbang ‘#!’ seguido
passos: substitui os caracteres especiais, alias e variáveis por seus possı́veis va- do diretório onde se encontra o shell padrão. Geralmente criamos arquivos de
lores; Verifica se o programa/função existe e depois quais são as permissões dos Shell Script com extensão ‘.sh’.
arquivos envolvidos; Chama o kernel para executar a linha de comando em um
“shell-filho” ganhando um PID(número de processo); Permanece inativo até que o Acompanhe um exemplo simples de Shell Script com comandos usuais do
comando seja executado, a não ser que a execução seja feita em background(Ver bash:
subseção 4.3.4). #!/bin/bash
Se o shell não conseguir executar a linha de comando por não ter encontrado # Função: Informa diretório corrente, lista arquivos e
a função ou programa, devolverá uma mensagem de erro. # imprime mensagem
pwd
ls -l
echo "fim do script."
4.2.2 Algumas definições importantes
As linhas iniciadas por ’#’ são comentários, ou seja, não serão executadas. Acom-
Um shell interativo é aquele pelo qual o usuário pode inserir uma linha de co- panhe um exemplo mais elaborado de Shell Script, usando comandos do bash e
mando por vez, como o terminal X por exemplo. estruturas lógicas de programação.
4.2. MINHA PASTA PESSOAL 43 44 CAPÍTULO 4. MEXENDO UM POUCO MAIS

#!/bin/bash padrão de cada usuário. Existem muitas opções para configuração do ambiente de
# Autor: Vinicius Freire Função: soma 2 + 2 até chegar
cada usuário. Fazemos tudo isso modificando e criando aliases, variáveis e outros
# em 30
echo ’Deseja realizar uma operação de loop finita?[s / n]’
comandos nos arquivos de configuração correspondentes, que serão executados
read resposta assim que o shell for invocado.
if [ \$resposta = s ] then Outro arquivo importante é o $HOME/.bash history, que guarda os últimos
soma=0 comandos digitados pelo usuário. O número de comandos guardados é definido
while ["\$soma" -le 30]
pela variável $HISTSIZE.
do
echo "\$soma"
soma=‘expr \$soma + 2‘
done 4.2.5 Variáveis de ambiente
echo "Que pena! Fim do script."
fi Em um computador, variáveis sao espaços da memória que guardam alguma
informação. Existem muitas variáveis já definidas pelo sistema, como por exemplo
O arquivo do Shell Script pode ser executado diretamente com o comando
$HOST e $OSTYPE, que guardam o nome do computador e o tipo de sistema opera-
‘source’, ou pode ser colocado em um arquivo de configuração, que é executado
cional usado, respectivamente. Para o shell existem algumas variáveis especiais,
após o login.
como as citadas acima, chamadas variáveis de ambiente, porque armazenam ca-
racterı́sticas do ambiente do usuário. Essas variáveis existem para que quando
4.2.4 Arquivos importantes de configuração o usuário logar no sistema, sempre encontre determinadas caracterı́sticas, como
por exemplo um determinado tipo de shell. Algumas dessas variáveis de ambiente
guardam caracterı́sticas definidas para todos os usuários. Elas se encontram
Existem muitos arquivos importantes de configuração usados quando o shell é
no arquivo /etc/profile. Outras guardam caracterı́sticas definidas para cada
inicializado.
usuário do sistema, e podem estar nos arquivos .bash profile ou .bashrc, pre-
Quando um shell interativo com login ou um shell não interativo com a opção sentes na home de cada usuário. As variáveis de ambiente ja definidas sao escritas
-login é invocado, para o usuário root por exemplo, o primeiro arquivo executado é com letra maiúscula e ao serem referenciadas, sao escritas com um $ na frente.
/etc/profile, que guarda informações de configurações para todos os usuários
do sistema. Depois de executar os comandos desse arquivo, o shell busca um dos Algumas variáveis de ambiente do Linux:
seguintes arquivos, nesta ordem: $HOME/.bash profile, $HOME/.bash login e
$HOME/.profile, que guardam informações caracterı́sticas do usuario que está $ARCH descrição da arquitetura da máquina;
logando. O primeiro que for encontrado e puder ser lido, será executado. Quando
um shell com login é fechado, o shell procura pelo arquivo $HOME/.bash logout $TERM tipo de terminal usado;
e o executa, se ele existir.
$HOST nome do computador;
Quando o shell é invocado como sendo interativo sem login, um terminal X por
exemplo, o shell procura pelo arquivo home/.bashrc, que guarda caracterı́sticas $LANG código da lı́ngua padrão;
padrão para qualquer shell sem login.
$PRINTER nome da impressora padrão;
Quando o shell é invocado como sendo não interativo, para executar um script
por exemplo, procura pela variável $SHELL ENV, que guarda o caminho do ar- $SHELL caminho do shell padrão;
quivo que deve ser executado para esse tipo de shell, se ela existir.
$PATH lista de diretórios percorridos para executar comandos;
Os arquivos $HOME/.bash profile, $HOME/.bash login, $HOME/.profile guar-
dam caracterı́sticas do usuário atualmente logado - comandos que devem ser exe- $OSTYPE nome do sistema operacional usado;
cutados ao iniciar um novo shell, alias e variáveis definidas - por isso estão no
diretório home de cada usuário. $HOME caminho do diretório do usuário atual;
Por que isso é importante? Porque podemos configurar coisas interessantes $USER usuário atual;
para cada usuário do sistema, que serão executados assim que o shell for invo-
cado, ou no caso dos shells com login, fechado. Por exemplo, posso fazer com que $HISTSIZE número de comandos guardados no histórico;
todos os arquivos temporários sejam apagados quando eu me deslogar do sistema
colocando alguns comandos no arquivo $HOME/.bash logout, e toda vez que me $PS1 configuração do prompt do usuário atual.
deslogar, isso será executado. Posso determinar que para qualquer shell sem lo-
gin (terminais X abertos por exemplo), a cor das letras da linha de comando será Podemos criar uma nova variável com qualquer valor que nos possa ser útil,
verde, e que para o usuário root, será azul. Posso determinar que determina- como por exemplo o caminho de um diretório, um valor numérico ou um texto.
dos usuários usam o shell bash, e outros usam o shell csh, que alguns usam o $CAMINHO=˜/Arquivos/Nomes
vi como editor de texto padrão, outros usam o gedit. Posso determinar o email $cd $CAMINHO
4.2. MINHA PASTA PESSOAL 45 46 CAPÍTULO 4. MEXENDO UM POUCO MAIS

Lembrando que não há espaço antes ou depois do ‘=’ e que é uma boa prática
escrever o nome da variável com letras maiúsculas. Essas novas variáveis es-
tarão disponı́veis enquanto o usuário estiver logado e usando o mesmo terminal,
a nao ser que sejam criadas no arquivo $HOME/.bash profile , $HOME/.bashrc
ou etc/profile. Comando 4.6 source Executa um script
NOME
source
4.2.6 Alias
SINTAXE
Muitas vezes é necessário escrever uma linha de comando muito grande várias source arquivo
vezes. Para facilitar essa tarefa, podemos dar um “apelido” para essa linha, ou . arquivo
seja, podemos criar uma maneira mais simples de chamar uma linha de co-
mando útil. O comando ls é um exemplo de alias que vem como padrão do DESCRIÇÃO
sistema. É interessante para o usuário perceber a lista gerada pelo ls divi- Executa o conteúdo de arquivo como comandos do BASH. Ponto “.” é um
dida por cores conforme o tipo de arquivo, então ao digitar ls no terminal, na sinonimo para source.
verdade o comando executado é ls -color. Esse é um tipo de alias perma-
nente. Para tornar um alias permanente basta criá-lo diretamente no arquivo
$HOME/.bash profile , $HOME/.bashrc ou etc/profile, ou ainda criar um
arquivo chamado $HOME/.bash aliases apenas para guardar os aliases. Caso
contrário, o alias será perdido ao se fechar o terminal.

Exercı́cio Resolvido 4.3 Crie um pequeno Shell Script que crie um novo diretorio.
#!/bin/bash
# Script cria diretorio.sh - cria diretório para guardar Comando 4.7 history Mostra histórico de comandos.
documentos.
NOME
cd ˜
NOME="$USER-Documentos" history
mkdir $NOME
cd $NOME SINTAXE
echo "Olá, nesse diretório você pode guardar todos os seus history [opções]
textos."
DESCRIÇÃO
Mostra histórico de comandos.
Para criar um Script em Shell, apenas devemos prestar atenção em alguns de-
talhes, como o shbang no inicio do script seguido do diretório do Shell padrão e a OPÇÕES
maneira como podemos fazer comentários. Também é bom lembrar que, embora o
Linux não reconheca o arquivo pela extensão que está em seu nome, é bom criarmos -c Apaga o histórico.
o arquivo do script com a extensão .sh, e que para executá-lo basta usar o comando
source. Segue um exeplo de um Shell Script que utiliza apenas comandos simples -d n Deleta a linha de numero “n” do histórico.
do Bash. NOTAS
Pressionar flecha para cima recupera o ultimo comando usado.
Exercı́cio Resolvido 4.4 Qual a diferença entre as duas linhas de comando abaixo?
EXEMPLOS
$ ./Script cria diretorio.sh Para recuperar alguns comandos do histórico:
$ .Script cria diretorio.sh
$!30 Se refere ao comando da linha do histórico de número 30;
A primeira linha executa o script, a segunda apenas é o nome de um arquivo oculto.
$!! Se refere ao comando anterior;
$!echo
Se refere ao comando mais recente que começa com “echo”.
4.2. MINHA PASTA PESSOAL 47 48 CAPÍTULO 4. MEXENDO UM POUCO MAIS

Comando 4.8 echo Mostra uma mensagem Comando 4.11 export Determina uma variável de ambiente.
NOME NOME
echo export

SINTAXE SINTAXE
echo string export [opções] [nome[=valor]]

DESCRIÇÃO DESCRIÇÃO
Imprime string na tela. Se nenhum valor for passado ao comando, ’export’ irá imprimir todas vari-
aveis exportadas.
NOTAS
Um ponto interessante do echo se refere ao exit status de um comando,
um valor que todo comando recebe após ser executado, onde 0 significa
Tudo ok e um número diferente de 0 Você tem alguns problemas . Podemos
recuperar esse valor com a variável $?. Dessa forma, será mostrado o exit Comando 4.12 alias Cria um alias
status do último comando usado. NOME
EXEMPLOS alias
Recuperando o valor de uma variável:
$echo $VARIAVEL SINTAXE
alias [opções] nome=valor

DESCRIÇÃO
O comando valor poderá ser executado atravéz de nome Se nenhum valor for
Comando 4.9 env Variáveis ambiente passado ao comando, ’alias’ irá imprimir todos os alias definidos. O nome
NOME do alias não pode ser “alias” ou “unalias”. O nome do alias e o seu conteúdo
env podem conter metacaracteres, com excessão do “=”. Para tornar um alias
permanente, você pode criá-lo em um dos arquivos de configuração existen-
DESCRIÇÃO tes em sua home, ou criar um arquivo chamado home/.bash aliases para
Altera as variáveis de ambiente para que certo comando seja rodado nas guardar todos os seus aliases.
variáveis alteradas, depois o processo pode ser desfeito. EXEMPLOS
Um alias para intalação:
SINTAXE
env [opções] Variável=Valor Comando $ alias instalar=‘‘sudo apt-get install’’

Comando 4.10 set Manipula variáveis e funções do shell.


Comando 4.13 unalias Exclui um alias
NOME NOME
set unalias
SINTAXE SINTAXE
set [opções] [argumento] unalias [opções] nome
DESCRIÇÃO DESCRIÇÃO
Se nenhum argumento for passado ao comando, ’set’ irá imprimir os nomes Apaga o alias nome.
de valores das variaveis definidas e funções definidas.
OPÇÕES OPÇÕES

-a Mostra variaveis que foram criadas ou modificadas pelo export. -a Remove todos os alias.
4.3. GERÊNCIA DE PROCESSOS 49 50 CAPÍTULO 4. MEXENDO UM POUCO MAIS

4.3 Gerência de Processos tornando possı́vel a execução de outras tarefas na sessão atual do terminal. Para
isso, usamos alguns atalhos de teclado:
Um processo nada mais é do que um programa˜(comando) em execução. É fácil  
perceber que no Linux é possı́vel que vários processos sejam executados ao mesmo Ctrl + Z 
tempo. Os processos possuem alguns atributos, usados pelo SO em sua tarefa Suspende o processo em execução atualmente (muda estado para “Pa-
de gerenciá-los. São estes alguns dos principais: identificador único (Process rado”);
IDentifier=PID), proprietário (User IDentifier=UID) e estado.  
Ctrl + C 
Termina a execução do processo.
4.3.1 PID e PPID
Quando se suspende a execução de um processo, é possı́vel voltar a executá-
O identificador único de cada processo é um número. Às vezes é preciso duplicar lo usando o comando (comando 4.19, p. 52). Com isso voltamos à situação
um processo. Ao se fazer uma cópia, o processo copiado é chamado de processo inicial. Uma outra alternativa, é deixar a aplicação rodando em segundo plano, ou
pai e o novo de processo filho. O filho possui um identificador dizendo qual é o background. Fazemos isso usando o comando (comando 4.18, p. 51). A situação
seu pai: PPID (Parent Process IDentifier). Caso o processo pai seja interrompido, o é como a ilustrada abaixo:
mesmo acontece com todos os seus filhos. (Isso explica porque todos os programas $ browser
abertos em uma sessão do terminal são encerrados quando ele é fechado.)
Aqui o browser é chamado e a janela dele é aberta.
ˆZ
4.3.2 Estados
Em seguida suspendemos sua execução (Ctrl+Z), e a seguinte mensagem aparece:
Os estados em que um processo pode se encontrar são: [1]+ Stopped browser

Em execução [1] é o número de job do processo (Jobs não serão abordados nesta apostila. Para
Está sendo executado em primeiro ou segundo plano; mais informações veja man jobs) que é usado para identificar qual comando colo-
car em background ou foreground. Stopped é o novo status do processo (Parado).
Zumbi Deveria estar morto, porém continua existindo por algum motivo; E browser é o nome da aplicação.
Parado $ bg
Teve sua execução interrompida mas pode ser reativado.
Agora o colocamos para executar em background. Por padrão o comando bg se
aplica ao último processo suspenso. E a seguinte mensagem é exibida:
4.3.3 Sinais $ [1]+ browser &
$
Para interferir na execução dos processos ou comunicação entre estes, são envi-
ados sinais. Após receber um, o processo realiza a tarefa a ele determinada, de Novamente temos o número de job e o nome, mas agora com uma novidade, o &,
acordo com o sinal. Alguns exemplos: que será explicado em seguida.
Finalmente, você pode continuar navegando no browser e executando coman-
STOP Interrompe a execução de um processo para posterior reativação; dos no terminal.
CONT Reativa um processo interrompido por STOP; Outra maneira, mais direta, de se rodar o programa em segundo plano é acres-
centar o sı́mbolo & ao final do comando. A execução procede da seguinte maneira:
TERM Termina o processo, porém alguns são programados para ignorar este si- $ browser &
nal; [3] 5940
$
KILL “Mata” o processo. Não pode ser ignorado.
Nesse exemplo, 5940 é o PID do processo.

4.3.4 Background e Foreground

Quando executamos um programa no terminal, o prompt de comando fica travado


até o fim do processo. Chamamos isso de execução em primeiro plano, ou fore-
ground. Como nem todos os comandos tem execução instantânea e alguns progra-
mas levam um certo tempo para finalizar, podemos enviar sinais de interrupção,
4.3. GERÊNCIA DE PROCESSOS 51 52 CAPÍTULO 4. MEXENDO UM POUCO MAIS

Comando 4.15 top Exibe as tarefas do Linux.


SINTAXE
top

DESCRIÇÃO
Exibe, em tempo real, informações sobre seu sistema Linux, processos em
andamento e recursos do sistema, incluı́dos CPU, memória RAM e uso do
swap, além do número total de tarefas sendo executadas.
Por padrão, sobre cada processo são exibidos vários campos. Alguns deles:
Comando 4.14 ps Retorna os processos correntes.
PID O identificador;
SINTAXE
ps [opções] USER O proprietário;

DESCRIÇÃO PR Número de prioridade;


Por padrão, exibe os processos que possuem mesmo UID que o usuário
corrente e associados com o mesmo terminal de onde o comando foi exe- VIRT Volume de memória virtual usada pelo processo;
cutado. A vizualisação mostra PID, terminal ao qual está associado (TTY),
tempo de CPU acumulado(TIME) e o nome da aplicação(COMMAND), sem RES Quantidade de memória fı́sica não-swap utilizada;
seguir nenhuma ordenação.
%CPU Porcentagem de uso de CPU
OPÇÕES
%MEM Porcentagem de uso de Memória Fı́sica.
a mostra todos os processos existentes;
TIME+
e exibe as variáveis de ambiente relacionadas aos processos; Tempo total de CPU usado desde o inı́cio do processo. Se estiver em
”Modo cumulativo”(Ver comandos interarivos abaixo) Exime o tempo
f exibe a árvore de execução dos processos; de CPU que o processo e seus ”filhos”já terminados usaram.
l exibe informações mais detalhadas dos processos; COMMAND
Nome do programa ou linha de comando.
m mostra a quantidade de memória ocupada por cada processo;
O top também nos permite a manipulação dos processos por meio de co-
u exibe o nome do usuário que iniciou determinado processo e a hora mandos interativos. Alguns dos mais importantes:
em que isso ocorreu; 
k  Solicita um PID e finaliza o processo correspondente.
x exibe os processos que não estão associados a terminais; 
M  Ordena os processos pelo uso da memória residente.
w se os detalhes de um processo não couber em uma linha, essa opção

faz com que o restante seja exibido na linha seguinte.
N  Ordena os processos pelos seus PID’s.
USOS FREQUENTES 
ps aux Exibe todos os processos com nome de usuário e data. P  Ordena os processos pelo uso da CPU (esta é a ordenação padrão
deste comando).
VEJA TAMBÉM 
espaço
(comando 4.15, p. 50).  
Atualiza a visualização do quadro de processos.

S  Alterna a exibição de tempo para modo acumulativo.

s  Solicita um novo intervalo de tempo entre cada atualização.

h  Exibe a ajuda dos comandos interativos.

q  Aborta o comando.
VEJA TAMBÉM
(comando 4.14, p. 49), pstree.
4.3. GERÊNCIA DE PROCESSOS 53 54 CAPÍTULO 4. MEXENDO UM POUCO MAIS

Comando 4.16 kill Manda um sinal para um processo a partir de seu PID.
SINTAXE
kill [-sinal] PID ...
kill -l [-sinal] ...
DESCRIÇÃO
Por padrão o comando envia um sinal TERM (se nenhuma opção de sinal
for escolhida). O kill aceita 3 formas de se especificar os sinais; o kill por
exemplo pode ser: -KILL, -SIGKILL e -9. Para saber a numeração de cada Comando 4.19 fg Roda tarefas em foreground.
sinal, veja man kill.
SINTAXE
fg [job id], ...]
-l - Por padrão, exibe uma lista de sinais disponı́veis. Se especificar um
número, converte-o para o nome do sinal e vice-versa.
DESCRIÇÃO
EXEMPLOS Por padrão move o processo com maior número de job para foreground.
kill -9 -1 Mata todos os processos que você pode matar.

VEJA TAMBÉM
(comando 4.17, p. 51)

Comando 4.17 pkill Envia um sinal para processos a partir de nome e outros
atributos.
SINTAXE
pkill [-sinal] [-opção atributo, ...] [expressão]

DESCRIÇÃO
Por padrão envia o sinal TERM para cada processo e o campo expressão
procura por nome do processo. Para selecionar processo por outro atri-
buto além do nome, usa-se uma opção e um filtro desejado (por exemplo:
processos do usuário pet).
-u UID, ... Comando 4.20 nohup Executa o comando de forma imune ao sinal HUP.
Filtra por processos cujo UID real corresponde ao fornecido. Aceita tanto
UID como nome. SINTAXE
nohup comando [argumentos], ...
-t terminal, ...
Filtra por processos controlados pelo terminal fornecido. DESCRIÇÃO
Evitando sinais HUP, o processo continua rodando mesmo após o usuário
VEJA TAMBÉM ter se desconectado do sistema.
(comando 4.16, p. 51), pgrep, (comando 4.14, p. 49).
VEJA TAMBÉM
man nohup.

Comando 4.18 bg Roda tarefas em background.


SINTAXE
bg [job id], ...]

DESCRIÇÃO
Por padrão move o processo com maior número de job para background.
4.4. SISTEMAS DE ARQUIVOS 55 56 CAPÍTULO 4. MEXENDO UM POUCO MAIS

4.4 Sistemas de Arquivos

São as estruturas lógicas usadas para organizar o armazenamento os dados no


disco rı́gido, de maneira a permitir que o sistema operacional possa controlar o
acesso ao disco. A lista de sistemas de arquivos suportada pelo Linux é extensa, Comando 4.22 df Mostra o uso de espaço em disco de sistema de arquivos.
sendo atualmente os principais: ext3 e ReiserFS. ReiserFS é em geral mais rápido
e melhor para partições com maior número de arquivos menores e ext3 com arqui- SINTAXE
df [opção] [arquivo] ...
vos maiores. Então, para poder acessar os dados dos diversos dispositivos (Disco
rı́gido, CD-ROM’s, pen-drives, ...) é preciso montar um sistema de arquivos. Ao fa-
zer isso, os dados se tornam disponı́veis dentro de um diretório que representará DESCRIÇÃO
o dispositivo. Algumas distribuições Linux detectam e montam novos dispositi- df mostra o espaço em disco disponı́vel no sistema de arquivo. Se não
vos (geralmente externos) automaticamente, porém, usuários sem permissões de for especificado nenhum, mostra o espaço disponı́vel em todos os sistemas
super usuário não podem montar sistemas de arquivos manualmente. atualmente montados. O espaço em disco é mostrado em blocos de 1K, por
padrão.
Exercı́cio Resolvido 4.5 Como matar um processo de PID 3389? OPÇÕES
$kill 3389 -h, --human-readable
Exibe o tamnho usando quantificadores(1K, 234M, 2G, ...)(forma
É muito simples, basta usar o comando kill. Como argumento desse comando, ”legı́vel à humanos”).
podemos usar o PID de cada processo, que pode ser obtido com o comando ps. -l, --local
Limita exibição para sistemas de arquivos locais.
-T, --print-type
Exibe o tipo de sistema.

Comando 4.23 stat Mostra informações sobre arquivos.

Comando 4.21 du Estima o uso de espaço de arquivos. NOME


stat
SINTAXE
du [opção] [arquivo] ... SINTAXE
stat arquivo ...
DESCRIÇÃO
Resume o uso de disco de cada arquivo, recursivamente no caso de di- DESCRIÇÃO
retórios. Por padrão usa o arquivo como sendo o diretório atual, exibindo o Este comando mostra o formato do arquivo, o tamanho, a posição no HD, as
tamanho geral e o caminho de cada diretório filho na árvore de hierarquia. permissões, o login e o grupo do dono e os tempos access, modify e change.
OPÇÕES OPÇÕES
-a Exibe o tamanho de todos os arquivos, não somente diretórios. -f, --file-system
Mostra status de um sistema de arquivos ao invés de um arquivo.]
-b Exibe o tamanho em bytes.
-h, --human-readable
Exibe o tamnho usando quantificadores(1K, 234M, 2G, ...)(forma
“legı́vel para humanos”).
4.4. SISTEMAS DE ARQUIVOS 57 58 CAPÍTULO 4. MEXENDO UM POUCO MAIS

4.5 Exercı́cios
Comando 4.24 mount Monta um sistema de arquivos.
Para resolver esses desafios, utilize as man pages, juntamente com as informaçoes
SINTAXE da apostila. Não esqueça de fazer o download do diretório de exercicios que acom-
mount [opções] dispositivo diretório panha a apostila.
DESCRIÇÃO
Exercı́cio 4.6 Crie um novo arquivo com as mesmas informações do arquivo
Monta um dispositivo no diretório especificado. Por padrão, sem nenhuma
opção, mostra todos os dispositivos montados atualmente. pasta\_exercicios/Poesias/PoemaLeminski.txt
OPCOES porém que contenha o número de cada linha no inı́cio da linha, apenas pelo terminal.
-a Monta todos os dispositivos encontrados no arquivo /etc/fstab .
Exercı́cio 4.7 Observando a seguinte linha de comando no diretorio
-r Monta o dispositivo em modo somente leitura. $ ls pasta\_exercicios/Diversos/novo_diretorio.tx
novo_diretorio.txt
-t Usado para especificar qual o tipo de sistema de arquivos a ser mon- $ cat novo\_diretorio.txt | xargs mkdir
tado. Os tipos suportados atualmente são:adfs, affs, autofs, cifs,
coda, coherent, cramfs, debugfs, devpts, efs, ext, ext2, ext3, ext4, De que maneira é possivel modificar essa linha de modo que seja pedido ao usuário
hfs, hfsplus, hpfs, iso9660, jfs, minix, msdos, ncpfs, nfs, nfs4, ntfs, a confirmação para se criar o diretório /pasta exercicios/Diversos/Textos?
proc, qnx4, ramfs, reiserfs, romfs, smbfs, sysv, tmpfs, udf, ufs, ums-
dos, usbfs, vfat (fat32), xenix, xfs, xiafs. Exercı́cio 4.8 Usando apenas o comando less, execute os seguintes passos: abra
o arquivo pasta exercicios/Empresa/produtos.txt com o comando less e bus-
EXEMPLO DE USO
mount /dev/fd0 /mnt/floppy Torna acessı́vel o sistema de arquivos en- que as palavras da lista abaixo. A cada palavra, encontre um jeito de marcar essa
contrado no dispositivo /dev/fd0 (normalmente o disquete) no diretório posição, referenciando-a com a letra maiúscula correspondente. Se necessário, volte
/mnt/floppy. ao inı́cio do arquivo para encontrar todas as palavras. Depois disso, vá para o final
do arquivo e encontre uma maneira de voltar em todas as marcações que você fez,
VEJA TAMBÉM
sem fazer referência à palavra que havia sido buscada para essa marcação, mas
(comando 4.25, p. 55). sim referenciando a letra correspondente. Verifique se você está mesmo no lugar
certo do arquivo (a posição em que aparece a palavra correspondente), fazendo uma
nova busca pela palavra referenciada por aquela letra.

Palavras: HDMI(A), PENTIUM(B), ANTENA(C), ECOPOWER(D)


Comando 4.25 umount Desmonta um sistema de arquivos.
Exercı́cio 4.9 Cria um alias chamado site interessante, que toda vez que for exe-
SINTAXE
cutado, abrirá um site especı́fico pelo Firefox.
umount [opções] dispositivo | diretório

DESCRIÇÃO Exercı́cio 4.10 Configure seu prompt de modo que ele contenha a sequência de
Desmonta um sistema de arquivos, especificando o diretório onde foi mon- caracteres “=D” na cor roxa, seguido do nome do usuário na cor branca e por último,
tado ou o dispositivo. O umount não executa se o sistema de arquivos o caracter “¿”. Faça com que essa configuração seja permanente.
estiver ocupado (executando alguma operação).
Exercı́cio 4.11 Recuperando a variável $?, só conseguimos recuperar o valor de
-a Desmonta todos os sistemas de arquivos descritos em /etc/mtab . exit status do último comando executado, portanto embora uma das linhas de co-
mando abaixo esteja errada, o valor da variavel $? é 0, pois o comando tee é
-t Indica que as ações devem apenas ser tomandas em sistemas do tipo espe- executado corretamente nas duas linhas . Como é possı́vel recuperar o valor de exit
cificado. Mais de um tipo pode ser usado, fazendo-se uma lista separada status dos outros comandos dessas linhas?
por vı́rgulas. \$ whoami | xargs finger | tee info.txt
\$ echo \$?
-f Força o sistema a ser desmontado. 0
\$ whoami | xrg finger | tee info.txt
VEJA TAMBÉM \$ echo \$?
(comando 4.24, p. 55). 0

Exercı́cio 4.12 Imprima na tela todos os processos do sistema, juntamente com


a coluna de valor STAT, que contém a situação do processo. Observe a linha que
4.5. EXERCÍCIOS 59 60 CAPÍTULO 4. MEXENDO UM POUCO MAIS

contém informações sobre o comando que você acabou de executar. O que significa
o valor da coluna STAT dessa linha?

Exercı́cio 4.13 Qual a diferenca entre o comando ps e o comando top?


62 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

Comando 5.1 find Busca por arquivos, parte 1.


NOME
find

SINTAXE
find [Endereco] Argurmento
Capı́tulo 5
DESCRIÇÃO
O comando find procura por itens no sistema. O endereço é por onde ele irá
começar a busca e o argumento define qual informação do item, ele irá usar

Terminal do Linux, Uma Mão para realizar a busca.


ARGUMENTO

na Roda -name Expr.


Procura os itens pelo nome do arquivo;
-iname Expr.
Procura pelo nome do arquivo, ignorando a caixa;

-perm Permissao
5.1 Busca de Arquivos Procura pela permissao do arquivo;
-type Tipo
Conforme usamos um sistema operacional é muito comum acumularmos diversos
Procura por arquivos comum;
arquivos pessoais. Mesmo mantendo uma boa organização, se ficarmos muito
tempo sem acessar um determinado arquivo ou tivermos milhares de diretórios e -atime Tempo
arquivos em nossa pasta pessoal, é bastante provável que tenhamos problemas Procura pelo tempo access do arquivo;
ao procura-los.
-ctime Tempo
Para auxiliar o usuário neste tipo de busca, o Linux nos oferece uma ótima fer-
Procura pelo tempo change do arquivo;
ramenta: o comando find, que permite que façamos buscas por inúmeras carac-
terı́sticas como nome, tipo de arquivo, permissões, datas de criação, modificação -mtime Tempo
ou último acesso ao arquivo. Procura pelo tempo modify do arquivo;
Com o uso correto do find a tarefa de encontrar um arquivo qualquer no sis- LEGENDA
tema fica fácil, porém certos cuidados devem ser tomados. Como o find realiza Expr. Qualquer expressão aceita pelo console, veja mais na sessão .....;
buscas recursivas, percorrer uma árvore de diretórios muito extensa pode ser de-
morado em demasia. Além disso, ao tentar buscar por diretórios em que não Permissao
posuı́mos permissões ele emite muitas mensagens de erro. Nestes casos é reco- -[gou]=[wrx] ou em octal (-777);
mendado enviar todas as mensagens de erro para um arquivo ou para /dev/null procurar por arquivos, ...
(conforme seção 4.1.4). Vale também ressaltar que na busca por nomes o find onde o usuario tem permissao de leitura: -u=r;
utiliza expressões regulares. onde o usuario e o grupo tem permissao de escrita -ug=w;
onde o outros tem permissao de escrita e leitura -o=rw;
Um outro comando importante, é o whereis, que nos ajuda a localizar em
qual diretório se encontra um executável e onde fica armazenada sua página de
manual. Com o bom uso destes dois comandos, localizar dados torna-se rápido, e Tipo d (diretorio) ou f (arquivo comum) ou l (link simbolico);
eficiente.
Tempo [+-]n * 24horas;
procurar por arquivos, ...
antes de 3 dias atras: -3;
depois de 6 dias atras: +6;
exatamente a 2 dias atras: 2;

EXEMPLOS
Procura um item com nome arquivo.txt e começa a busca no diretorio
/home/usuario
find /home/usuario -iname ”arquivo.txt”
61
Procura um diretorio e começa a busca no diretorio HOME
find -type d

Procura um item com nome ”xorg.*”, lembrando que * pode ser qualquer
coisa, e começa a busca no diretorio /etc
find /etc -iname ”xorg.*”
5.1. BUSCA DE ARQUIVOS 63 64 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

Comando 5.3 find Busca por arquivos, parte 3


NOME
find

SINTAXE
Comando 5.2 find Busca por arquivos, parte 2.
find Endereco [OPCOES] Argumentos... -exec Comando {}
NOME
find DESCRIÇÃO
O comando find junto com a opção -exec procura itens no sistema e para
SINTAXE cada item encontrado executa o Comando, que receberá o nome do item
find [Endereco] [OPCOES] Argurmento1 [[OP] [Argumento2] [OP] através do .
[Argumento3]...] EXEMPLOS
DESCRIÇÃO Procura por arquivos, que tem a extensão txt e para cada item encontrado
O comando find também pode ser utilizados com vários argumentos para executa o comando file ItemEncontrado.
refinar a busca. find -iname *.txt -exec file ;

OPCOES
-mindepth N Comando 5.4 locate Busca arquivos pelo nome.
Define a altura minima da árvore para começar a procurar;
NOME
-maxdepth N locate
Define a altura maxima da árvore para terminar a busca;
SINTAXE
Obs: Normalmente utilizados essas opções para agilizar a busca. locate arquivo
OP
-a Argumento1 e Argumento2; DESCRIÇÃO
O comando locate procura por arquivos assim como o comando find, mas
-o Argumento1 ou Argumento2; difere por ter uma sintaxe mais fácil, porém mais restrita. Ele busca pelo
nome do arquivo através de um banco de dados que contém as localizações
OBS: Caso oculte o campo OP, será utilizado por padrão a opção -a; dos arquivos.
EXEMPLOS
Procura por um item do tipo diretorio e com o nome ”fotos”
find -type d -a -iname ”fotos” Comando 5.5 whereis Busca por arquivos pertencentes ao sistema.

Procura por arquivos, que o grupo tem permissão de leitura ou de escrita NOME
find -perm -g=r -o -perm -g=w whereis

Procura por arquivos, que o grupo tem permissão de leitura ou de escrita e SINTAXE
limita a busca no maximo de 2 subdiretorios whereis [opções] arquivo
find -maxdepth 2 -perm -g=r -o -perm -g=w
DESCRIÇÃO
OBSERVAÇÃO O comando whereis procura por manuais, programas ou codigo-fontes liga-
As vezes é interessante redirecionar a saı́da de arquivos para /dev/null, dos ao sistema operacional. Por exemplo, para obter informações sobre o
pois existem muitas pastas no sistema, que não permite a sua visualização comando ls pode-se usar a seguinte linha:
e, portanto, o resultado estará no meio de vários erros de permissões, o que $ whereis ls
atrapalha a visualização do resultado. OPÇÕES
-b Procura somente por programas;

-m Procura somente por manuais;

-s Procura somente por codigo-fontes;


5.1. BUSCA DE ARQUIVOS 65 66 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

5.2 Busca Dentro de Arquivos

Uma tarefa muito frequente que realizamos, principalmente quando estamos di-
ante de listas, é localizar certas palavras. Esta tarefa é simples se pensarmos
que nossa lista contém dezenas de itens, como o nome e telefone do pessoal do
trabalho, por exemplo, e mais simples ainda se esta lista estiver ordenada. Os
problemas começam a aparecer conforme aumenta o tamanho do texto em que
buscamos as palavras, e principalmente quando não se tem uma regularidade
apresentada no documento, como colunas que separam informações especı́ficas
ou uma ordenação sobre os dados, tornando assim a tarefa manual inviável. Exis-
tem ferramentas que realizam buscas sobre textos e indicam a localização de suas
ocorrências, isto não é novidade, observamos isso, por exemplo, em diversos edi-
tores de texto e navegadores web.
Mas se ao invés de procurarmos por uma palavra, procurarmos por um con-
junto de palavras com determinadas caracterı́sticas? Podemos procurar apenas
números de telefones, ou então, e-mails que aparecerem em um arquivo de texto,
por exemplo. Vamos chamar estas caracterı́sticas, seja elas quais forem, de
padrão de busca, e para representá-lo utilizaremos as expressões regulares.

Comando 5.6 which Retorna a localização dos comandos do sistema.


5.2.1 Expressões Regulares
NOME
which Expressão regular é uma representação para um conjunto de strings, e é escrita
utilizando-se alguns caracteres que possuem significados especiais, também cha-
SINTAXE mados de operadores, além dos caracteres comuns, que mantem seu significado
which comando literal. Assim, arara-azul é uma expressão regular que casa com qualquer tre-
cho que contenha exatamente essa sequência de caracteres: um a, depois um r,
DESCRIÇÃO depois outro a . . .
O comando which retorna a localização de algum comando do sistema ope-
racional. Similar ao whereis -b porém, mais objetivo. Vamos aos caracteres especiais, listados abaixo, e às suas funcionalidades,
mas antes só um detalhe: para utilizar esses caracteres com seu significado lite-
ral, coloca-se uma contrabarra precedente. Para encontrarmos uma quantia em
Reais num documento de uma forma bem simples, poderı́amos fazer isso, R\$,
por exemplo.

. [ ] ˆ $ ? * + { } | ( )

Caractere é a unidade de uma expressão regular e podemos representá-la da se-


guinte maneira:

c O caracter c casa com ele mesmo;

. O ponto casa com qualquer caracter;

[ ] Os colchetes formam uma lista, que casa com qualquer caractere que es-
tiver contido nela. Uma lista que inicia com um acento circunflexo [ˆ ]
é uma lista negada, ou seja, casa com qualquer caracter que não estiver
contido nela. Dentro de uma lista, caracteres especiais perdem seu signi-
ficado, com exceção do acento circunflexo na primeira posição, que indica
uma lista negada, e do hı́fen -, que entre dois caracteres indica um inter-
valo. Assim [a-dACE] casa com as letras minúsculas a, b, c e d e também
com as maiúsculas A, C e E.
5.2. BUSCA DENTRO DE ARQUIVOS 67 68 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

Podemos ter em expressões regulares conjuntos, formados por uma ou mais uni-
dades e também operadores. Estes operadores, listados abaixo, tratam do nú-
meros de repetições dos elementos que os precedem. Chamaremos itens estes
elementos, que podem ser unidades ou conjuntos, e veremos na sequência como Comando 5.7 grep Busca por padrões de caracteres em cada linha do texto de
representá-los. entrada.
NOME
? A interrogação torna o item que a precede opcional; grep, egrep, fgrep

* O asterisco faz com que o item que o precede ocorra zero ou mais vezes; SINTAXE
grep [opções] padrão [arquivo] ...
+ O mais faz com que o item que o precede ocorra uma ou mais vezes;
DESCRIÇÃO
{n} As chaves fazem com que o item que as precedem ocorra n vezes.
Grep busca pelo padrão de caracteres no arquivo especificado ou na en-
trada padrão se este parâmetro estiver ausente, e imprime as linhas que
Para representarmos uma lista de conjuntos, utilizamos a | (barra vertical) como casam com este padrão.
separador, dentro das expressões contidas entre parênteses. Assim como uma As alternativas grep, egrep e fgrep se diferenciam no modo de
lista entre colchetes, que casa somente um entre os caracteres listados, esta nova interpretação do padrão a ser casado.
lista também só casa com um dos seus conjuntos.
grep trata este padrão como uma expressão regular básica;
(exp) Os parênteses transformam a expressão exp em um conjunto.
egrep trata este padrão como uma expressão regular estendida e é equiva-
(exp|exp|...) lente a grep -E;
A barra vertical entre as expressões forma uma lista de conjuntos, que casa
fgrep trata este padrão como a sequência de caracteres é literalmente,
com qualquer uma das expressões exp.
sem interpretar nenhum caracer como especial, e é equivalente a
grep -F.
Para encerrar a apresentação dos caracteres especiais, apresentaremos duas ân-
OPÇÕES
coras, que só podem ser colocadas no inı́cio ou no fim de uma expressão regular.
-i Ignora a diferença entre caracteres maiúsculos e minúsculos na
ˆ O acento circunflexo é colocado no inı́cio da expressão e casa com o inı́cio busca.
da linha;
-v Inverte a lógica da busca, imprimindo todas as linhas que não con-
$ O cifrão é colocado no fim da expressão e casa com o fim da linha. tenham o padrão de busca.

-c Conta o número de ocorrências do padrão buscado, ao invés de im-


primir as linhas que contenham o padrão.
5.2.2 Expressões no Terminal
-o Imprime somente a string que casou com o padrão, uma por linha,
Até aqui vimos a notação das expressões regulares. Esta notação vista é chamada ao invés de imprimir a linha inteira.
no Linux de expressão regular estendida, que diferencia-se da expressão regular
básica na maneira de representação de alguns caracteres especiais. -n Coloca a numeração nas linhas que casaram com o padrão.
Para escrevermos expressões regulares básicas, os seguintes caracteres espe- -A NUM
ciais devem ser precedidos por contrabarras: Imprime as NUM linhas anteriores à linha casada inclusive ela
? + { | ( ) mesma.
-B NUM
\? \+ \{ \| \( \) Imprime as NUM linhas posteriores à linha casada inclusive ela
mesma.
-C NUM
Imprime as NUM linhas anteriores e posteriores à linha casada inclu-
sive ela mesma.
5.3. CAIXA DE FERRAMENTAS 69 70 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

5.3 Caixa de Ferramentas Um pensamento análogo funciona para o comando tail.

Um dos grandes atrativos do sistema operacional Linux, é a possibilidade de reali- 5.3.2 Seleção de Colunas
zar diversas operações sobre volumes significativos de dados de forma organizada
e eficiente. O sistema oferece por padrão diversos aplicativos interessantes para
Quando estamos lidando com dados armazenados em arquivos é muito comum
automatizar operações sobre arquivos, que permitem a realização de muitas tare-
organiza-los em colunas, usando espaços ou outros caracteres como : (dois pon-
fas simples como contar o número de bytes, caracteres, palavras e linhas de um
tos) para separá-las. Esse modelo também aparece na saı́da de alguns comandos.
arquivo ou entrada padrão, além de nos ajudar (e muito) em tarefas um pouco
Exemplo dessa formatação é o arquivo de sistema que é responsável pelos grupos:
mais complexas, através da combinação de comandos.
/etc/group.
Com os comandos apresentados nesta seção, é possı́vel filtrar conteúdo de ar-
O comando cut é muito útil para lidar com esse modelo em colunas, pois ele
quivos, eliminando colunas, ordenando resultados, mudando a formatação, subs-
permite que você filtre um arquivo ou saı́da de comando de forma que apenas
tituindo caracteres, entre outras coisas. Essas ferramentas são extremamente
algumas colunas sejam exibidas. Seu uso é bastante simples, basta especificar
poderosas para lidar com grandes massas de dados, facilitando muito tal tarefa.
qual o caractére responsável pela separação das colunas e quais colunas você
quer que sejam mostradas, contando a partir do número 1. Por exemplo, para
filtrar o conteúdo do arquivo /etc/group para que apenas a segunda coluna seja
5.3.1 Manipulação de Linhas mostrada na tela devemos utilizar o seguinte comando:
\$ cut /etc/group -d":" -f2
Uma tarefa muito comum quando estamos lidando com arquivos através do ter-
minal do Linux é a contagem de linhas e para isso temos o comando nl (comando O comando cut é muito simples, não tem mistério. Através da opção -d indi-
5.11, p. 76). Além deste ser um comando útil ao lidarmos com arquivos, ele pode camos qual é o caractere que separa as colunas e através da opção -f indicamos
ser combinado com a saı́da de outros comando. Podemos, por exemplo, combi- quais colunas queremos visualizar. A maior utilidade do comando cut é usá-lo
nar o nl com o comando ls -l (comando 3.10, p. 19) para contar o número de em conjunto com a saı́da de algum outro comando (ver 4.1.3).
arquivos existentes em um diretório.
Apesar do comando nl nos ajudar na realização de diversas tarefas ele é limi-
tado, pois conta apenas o número de linhas e nada mais. Existe um comando 5.3.3 Ordenação
similar porém mais versátil, o comando wc. Através das opções do wc, podemos
contar além do número de linhas o número de palavras, bytes ou caracteres de Ao lidarmos com listas (cadastros de nomes, telefones, entre outros) é, em geral,
um arquivo ou saı́da de comando, e com isso ganhamos diversas novas funciona- muito interessante manter essa lista ordenada. Para ordenar uma lista o comando
lidades. usado é o sort. Este comando permite a ordenação de uma lista de linhas de texto
em ordem alfabética ou ainda, ordenar uma lista numericamente, além de oferecer
Vamos agora veremos as ferramentas para selecionar linhas de um texto. Ve- algumas opções úteis como ordenação invertida e até “ordenação aleatória”.
remos dois comandos que permitem visualizar as n primeiras ou as n últimas
linhas de um arquivo. Por exemplo, para visualizar as 10 primeiras linhas do
arquivo texto.txt poderı́amos utilizar a seguinte linha de comando: 5.3.4 Operações Aritméticas
\$ cat texto.txt | head -n 10
Existe uma aplicação do sistema Linux chamada bc que é uma calculadora de
O comando head mostra as n primeiras linhas do arquivo ou da entrada padrão, precisão utilizada através da linha de comando. Ela é extremamente útil para a
e se especificarmos um número negativo de linhas, ele vai imprimir todas menos escrita de alguns scripts, mas também pode ser utilizada para operações em geral.
as n últimas linhas, agindo como o comando tail ao contrário. O comando tail, Existem duas principais formas de utilização do bc. A primeira é mais simples,
mostra as n últimas linhas ou todas menos as n primeiras linhas se colocarmos basta digitar bc na linha de comando para ter acesso ao prompt do bc e então
um + na frente do número: digitar as operações a serem realizadas.
\$ cat texto.txt | tail -n +5 A segunda forma é mais utilizada em scripts, mas também pode ser usada
na linha de comando. Ela consiste em utilizar o comando echo para gerar a linha
Por exemplo, um arquivo que possua 30 linhas. Para imprimir as suas 10 com as operações desejadas e passar isso para o bc através do pipe. Por exemplo,
primeiras pode-se usar: para executar a operação ”10+2”:
\$ cat texto.txt | head -n 10 \$ echo 10+2 | bc
Ou pode-se pensar em imprimir todas as linhas menos as 20 últimas, o que neste
Além do bc efetuar operações padrões (divisão, multiplicação, soma e subtração),
caso, obteria o mesmo resultado.
é possı́vel realizar diversas operações mais complexas envolvendo variáveis e sentenças
\$ cat texto.txt | head -n -20 lógicas.
5.3. CAIXA DE FERRAMENTAS 71 72 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

5.3.5 Substituição de caracteres # Sem endereços, imprimindo todas as linhas:


\$ cat texto.txt | sed p

# Endereçamento direto, imprimindo a linha 5:


O que aparece com certa frequência quando estamos trabalhando com o terminal \$ cat texto.txt | sed ’5p’
do Linux, é a necessidade de realizarmos substituições de caracteres, seja num
arquivo, ou no resultado de um comando. Através do comando tr podemos fazer # Endereçamento direto, imprimindo da linha 5 até a linha 10:
isso. Por exemplo, se quisermos substituir toda ocorrência do caractere a de uma \$ cat texto.txt | sed ’5,10p’
frase por um e terı́amos que executar:
# Endereçamento por conteúdo, imprimindo as linhas que contêm a palavra
\$ cat texto.txt | tr a e # "abobrinha"
\$ cat texto.txt | sed ’/abobrinha/p’

O tr só lê da entrada padrão, e só escreve na saı́da padrão. Ele não abre # Endereçamento direto, imprimindo da linha 5 até a primeira linha contendo
arquivos diretamente, é sempre preciso usar o comando cat (comando 4.1, p. 36) # a palavra "abobrinha":
para passar um arquivo para o tr. \$ cat texto.txt | sed ’5,/abobrinha/p’

Além de executar substituições de caracteres, o tr tem algumas outras fun- Se você executou os comandos acima percebeu que as linhas são duplicadas,
cionalidades interessantes, como a possibilidade de deletar caracteres e eliminar isso acontece porque por padrão o sed joga para a saı́da padrão todas as linhas do
repetições. arquivo, o que geralmente causa alguma confusão (e nesse caso gera duplicação
de linhas). Para resolver este problema basta chamar o sed com a opção -n, que
faz com que o sed não imprima nada automaticamente na saı́da padrão. Se adi-
cionássemos este parâmetro nos exemplos acima, apenas as linhas especificadas
para a função p seriam impressas.
Outra caracterı́stica importante do sed é a possibilidade de executar diversas
5.3.6 Manipulação avançada de texto funções ao mesmo tempo, separando-os por ponto-e-vı́rgula:
# Imprimir todas as linhas contendo "abobrinha",
# assim como as linhas de 1 a 10:
SED \$ cat texto.txt | sed ’1,10p;/abobrinha/p’

Agora que já conhecemos a estrutura básica do comando sed vamos ver al-
O sed é o comando de edição de fluxo (Stream EDitor) do Linux, e permite a gumas outras funções importantes, começando com a função s, que realiza a
realização de diversas tarefas de transformação de textos de forma automática. substituição de padrões encontrados. A função s do sed é composto por duas par-
Além disso, sua versatilidade é grande, tanto que existem até jogos escritos através tes que podem ser divididas por qualquer caractere, para que seja possı́vel usar
dele. um separador que não aparece no padrão buscado ou no texto de substituição,
por exemplo, se quiséssemos substituir um diretório, o caractere / não seria o
separador mais indicado pois terı́amos que evitar que as barras normais sejam
Usando o sed tratadas como separadores, o que pode nos levar a uma linha complicada. Por
exemplo, para substituir todas as ocorrências de /etc/passwd por /var/lib/:

O sed funciona como um filtro, especifica-se algumas regras de transformação \$ sed ’s/\/etc\/passwd/\/var\/lib\//’
do texto, ele recebe o texto de entrada, aplica as regras e joga o texto resultante
na saı́da padrão. As regras do sed sempre seguem a seguinte sintaxe: Um pouco confuso, não acha? Seria muito melhor neste caso usar um outro
caractere como separador, para nos livrar da necessidade de escapar as barras
sed [opções] regras [arquivo] com contra-barras. Usar um underline, por exemplo, resolveria o problema:
\$ sed ’s_/etc/passwd_/var/lib/_’
E as regras são da seguinte forma:

[endereço 1[, endereço 2]] função [argumento] Remover linhas inteiras do texto é muito simples, bastando usar a função d.
Antes de passarmos para o próximo comando, vale a pena dar uma olhada em
O sed analisa linha a linha, de cima para baixo, da esquerda para a direita. O alguns detalhes importantı́ssimos do sed:
endereço serve para aplicar a função apenas às linhas indicadas, que podem ser
especificadas pelo número da linha ou por parte do seu conteúdo entre / (barras)
O sed diferencia maiúsculas de minúsculas.
(O sed utiliza expressões regulares nessa busca por padrões, o que o torna mais
poderoso ainda). Vamos ver alguns exemplos de endereçamento com a função p,
que imprime linhas: Existem duas maneiras de fazer com que o sed passe a ignorar a diferença
5.3. CAIXA DE FERRAMENTAS 73 74 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

(tornar-se case-insensitive), o primeiro é indicando todas as possibilidades, como Da mesma forma que o sed, é possı́vel escrever os comandos awk em um ar-
no seguinte exemplo: quivo separado, usualmente com extensão .awk, e então chamar o interpretador
awk da seguinte forma:
\$ cat texto.txt | sed ’/[Ee][Rr][Rr][Oo]/d’
$ awk -f=comandos.awk [arquivo de entrada 1] ...
Isso removeria todas as linhas contendo a palavra erro, escrita de qualquer
É possı́vel também utilizar o awk direto da linha de comando, sempre utilizando
forma (Erro, ERRO, eRRo, etc). Uma outra solução, muito mais prática, é usar
a seguinte sintaxe:
a label I, que diz ao sed que ele não deve diferenciar maı́usculas de minúsculas
ao tentar casar o padrão com o que ele encontrar no texto de entrada. A linha do $ awk ’condiçãofunção’ [arquivo de entrada 1] ...
exemplo anterior ficaria assim:
Onde condição pode ser literalmente uma condição (uma comparação), um
\$ cat texto.txt | sed ’/erro/Id’ padrão a ser encontrado nas linhas dos arquivos de entrada ou ainda uma das
condições especiais do awk como BEGIN e END que servem para que uma ou mais
O que é muito mais simples, fácil e elegante. funções sejam executadas no inı́cio ou logo após o término do tratamento dos
arquivos de entrada, respectivamente. Se nenhuma condição for especificada as
funções serão executadas para todas as linhas do arquivo de entrada.
Cuidados ao usar o sed:
Com o awk nós podemos utilizar variáveis, o que permite realizar diversos pro-
cessamentos que não eram tão simples com os comandos vistos até agora. Vamos
Ao usar o sed no terminal, utilizar aspas simples envolvendo o comando é ver um exemplo simples usando as condições BEGIN, END e variáveis, além de
opcional, mas para evitar qualquer conflito com o shell, é recomendado utilizá-las operadores aritméticos.
sempre. Se não usarmos aspas simples, alguns caracteres como $,*,\ e ! serão
tratados como metacaracteres do shell antes mesmo de serem enviados ao sed, o Como seria o comando awk para simular o funcionamento do comando wc -l
que fará com que o comando gere resultados estranhos ou nem seja executado. (comando 5.10, p. 76)?
Se quisermos que algo seja interpretado no meio do comando, como uma Para começar, precisaremos de uma variável para armazenar o número de li-
variável, por exemplo, devemos envolver o comando com aspas duplas: nhas conforme andamos pelo arquivo de entrada. E precisaremos inicializá-la
com o valor 0 no inı́cio da execuçao do nosso comando, para isso precisaremos
\$ cat texto.txt | sed "s/abobrinha/\$CONTEUDO/" começar com a seguinte linha:

A seguir iremos ver uma terceira alternativa para resolver esse tipo de conflito: \$ awk ’BEGIN { numero_de_linhas = 0 } \

Note que a contrabarra ao final da linha serve apenas para escapar a mudança
Os comandos do sed podem ser colocados em arquivo de linha, e isso só é necessário ao utilizarmos o awk diretamente na linha de
comando ou embutido em um shell script. Agora que temos nossa variável criada
e devidamente inicializada, devemos incrementá-la a cada linha encontrada. Para
É possı́vel criar um arquivo executável com os comandos do sed e ao cha- isso, temos o seguinte continuação do comando:
marmos o sed na linha de comando, ao invés de escrever tudo na hora, basta
especificar o arquivo contendo os comandos através da opção -f do sed. > { numero_de_linhas++ }\

Como o sed é um comando complexo, cheio de opções e funções, merece um E, finalmente, ao terminar de passar pelo arquivo de entrada precisamos mostrar
tutorial só para ele, não será possı́vel cobrir nesta apostila tudo que o sed é capaz na tela o total de linhas que encontramos:
de fazer. Porém, se você quiser obter maiores informações sobre este comando, > END{ print numero_de_linhas}’ arquivo_de_entrada
vale a pena dar uma olhada na documentação disponı́vel. Além, é claro, de confe-
rir a referência presente nesta apostila. Além de podermos usar variáveis à vontade no awk ele já nos oferece algumas
especı́ficas que são extremamente úteis, como a NF, que guarda o número do
último campo da linha que está sendo processada, ou ainda a NR que guarda o
AWK número de linhas tratadas até o momento. Utilizando essas variáveis do awk o
exemplo anterior se resume a isto:
Assim como o sed, o awk não é exatamente um comando e está mais para uma \$ awk ’END{ print NR }’ arquivo_de_entrada
linguagem de programação e a forma de processamento é idêntica, ou seja, é
feita linha a linha. Esta linguagem é especialmente útil para extrair dados de Uma aplicação interessante da função print do awk é a possibilidade de impri-
arquivos organizados de forma sistemática em colunas com um separador fixo que mir um certo campo da linha que está sendo processada (similar ao cut) (comando
não aparece no conteúdo do arquivo, um exemplo desse formato são os arquivos 5.8, p. 75). Para fazer isso basta especificar o campo com um $ na frente:
/etc/group e /etc/passwd. Note que as linhas dos dois arquivos são compostas
\$ awk ’{ print \$2 }’ entrada
por conteúdo separado por sinais de igual, e o sinal de igual só aparece como
separador. Esse formato de arquivo é o ideal para se trabalhar com awk. Essa linha de comando imprime todos os segundos campos de todas as linhas do
5.3. CAIXA DE FERRAMENTAS 75 76 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

arquivo entrada. O separador de campos, por padrão é um espaço, mas é possı́vel das informações por quebras de linha (1). Desta forma temos uma informação por
modificar o separador. O awk utiliza uma variável para guardar o separador de linha, facilitando a leitura.
campos, chamada FS. Para mudar o separador de campos basta atribuir um novo
Após isso devemos filtrar os campos, para que apenas os registros dos Analistas
valor a essa variável:
Plenos sejam impressos. O uso de uma expressão regular juntamente com a função
\$ awk ’BEGIN{ FS = ","}’ p do sed em (2) resolve este problema.
Isso faria com que a vı́rgula fosse usada como separador de campos ao invés do Para finalizar, em (3) especificamos a opção -n para o sed pois sem ela ele pas-
espaço. Isso mostra como o awk é mais versátil que o cut e outras ferramentas. saria o arquivo todo para a saı́da padrão, inutilizando nossa busca, e passamos o
O separador de campos pode mudar conforme os arquivos de entrada são ana- arquivo com os dados (tabelaEmpresa.txti) como parâmetro. Este comando pode
lisados, e é possı́vel utilizar uma variável para especificar qual campo se deseja ser escrito em uma única linha.
imprimir.
Com o que vimos até aqui e com o conteúdo extra que pode ser encontrado
na referência deste apostila podemos criar diversos comandos awk para vários
fins, como calcular uma média entre vários valores armazenados em um arquivo,
imprimir somente algumas linhas de um arquivo efetuando qualquer comparação
de texto ou aritmética, entre outros.
Essa apostila vai se limitar ao básico do awk sem entrar em detalhes de progra-
mação avançada com awk, para saber mais sobre o programa existe uma extensa
documentação disponı́vel.

Exercı́cio Resolvido 5.1 Procurar no arquivo


/pastas\_exercicios/Diversos/aprovadosUFPR.txt

todas as pessoas que tenham o sobrenome Teixeira. Fazer dois novos arquivos cha-
mados Teixeiras aleatorios.txt e Teixeiras ordenados, apenas com o primeiro nome
dessas pessoas. No primeiro arquivo os nomes devem estar arranjados de maneira
aleatória e no segundo em ordem alfabética. Comparar quantos nomes iguais per-
maneceram na mesma linha, sendo o arquivo ordenado ou não.
$ cat aprovadosUFPR.txt | egrep TEIXEIRA | tr -s | \
> cut -d -f2 | sort -R | tee Teixeiras aleatorios.txt | \
> sort | tee Teixeiras ordenados.txt
$ diff -y Teixeiras aleatorios.txt Teixeiras ordenados.txt | \
> grep -v ’[<, >, |]’| wc -l
Com apenas duas linhas de comando, podemos resolver esse problema. Na pri-
meira, pesquisamos pelos nomes e formamos os arquivos pedidos. Na segunda
linha, comparamos os dois arquivos. Como o comando diff, com o parametro -
y, mostra quais linhas mudaram ou permaneceram iguais com os sinais ¡,¿ e —,
usamos uma expressao regular para excluir essas linhas.

Exercı́cio Resolvido 5.2 Você está responsável por entrar em contato com todos de
sua empresa que tenham entre suas funções a de “analista pleno”. Tudo que você
tem em mãos é uma lista muito confusa contendo os nomes, e-mails e atribuições
de cada funcionário (arquivo empresa/tabelaEmpresa.txt.
É possı́vel filtrar e melhorar a formatação das informações desta lista utilizando
apenas o comando sed:
$ sed ’s & \n /g; \ (1)
>/.*analista pleno.*/Ip’ \ (2)
>-n tabelaEmpresa.txt (3)

Para imprimir uma lista contendo apenas o contato dos Analistas Plenos com uma
formatação mais legı́vel, primeiro vamos trocar os & responsáveis pela separação
5.3. CAIXA DE FERRAMENTAS 77 78 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

Comando 5.9 tr Substitui ou deleta caracteres.


NOME
tr

SINTAXE
Comando 5.8 cut Remove seções de cada linha de arquivos. tr [opcões] Conjunto 1 [Conjunto 2]

NOME DESCRIÇÃO
cut O comando tr realiza substituição ou remoção de caracteres da en-
trada padrão, produzindo seu resultado na saı́da padrão. Para realizar
SINTAXE substituição de caracteres nenhum parâmetro deve ser especı́ficado e os
cut [opcões] [arquivo] ... dois conjuntos de caracteres devem estar presentes.
DESCRIÇÃO OPÇÕES
O comando cut imprime apenas as partes selecionadas das linhas de um -d Deleta os caracteres do Conjunto 1;
arquivo para a saı́da padrão, sendo possı́vel selecionar campos, caracteres
ou bytes. -s Substitui cada sequência de dois ou mais caracteres do Conjunto 1
As LISTAS que servem para selecionar as partes desejadas funcionam da por uma única ocorrência do caractere, removendo repetições.
seguinte forma:
Comando 5.10 wc Conta o número de linhas, bytes, caracteres ou palavras.
N Seleciona apenas a parte N;
NOME
-N Seleciona do começo da linha até N; wc
N-M Seleciona de N até M; SINTAXE
wc [opcões] [arquivo] ...
N- Seleciona de N até o fim da linha.
As listas podem ser combinadas através de vı́rgulas. Por exemplo, o co- DESCRIÇÃO
mando a seguir tem como DELIMITADOR o caractere : (dois pontos) e sele- O comando wc serve para contar o número de linhas, bytes, caracteres ou
ciona as colunas 1, 2, 3, 4, 6, 18, 19 e 20: palavras de um arquivo.
$ cut -d ":" -f 1-4,6,18-20 texto.txt OPÇÕES
OPÇÕES
-w Imprime a contagem de palavras;
-s Não imprime nenhuma linha que não contenha nenhum delimitador
de campo; -l Imprime a contagem de linhas;
-b LISTA -c Imprime a contagem de bytes;
Seleciona apenas estes bytes;
-m Imprime a contagem de caracteres;
-c LISTA
Seleciona apenas estes caracteres; -L Imprime o comprimento da linha mais longa.
-d DELIMITADOR 
Utiliza DELIMITADOR ao invés de TAB  como separador de campo; Comando 5.11 nl Numera linhas.
NOME
-f LISTA
Seleciona apenas estes campos. Imprime qualquer linha que não nl
contenha nenhum DELIMITADOR a não ser que a opção -s seja es-
SINTAXE
pecificada.
nl [arquivo] ...

DESCRIÇÃO
Mostra o conteúdo do arquivo na saı́da padrão com a numeração das li-
nhas ao lado de cada linha. Se nenhum arquivo for indicado, lê da entrada
padrão.
5.3. CAIXA DE FERRAMENTAS 79 80 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

Comando 5.12 head Imprime as primeiras linhas de um arquivo.


NOME
head

SINTAXE
head [opções] [arquivo] ...

DESCRIÇÃO
Mostra as 10 primeiras linhas do arquivo na saı́da padrão, a não ser que
alguma opção seja utilizada. Se nenhum arquivo for especificado, lê da
entrada padrão.
OPÇÕES
Comando 5.14 sort Ordena arquivos por linha.
-v Imprime o nome do arquivo antes de qualquer outra saı́da;
NOME
-n [-]NUM sort
Imprime as NUM primeiras linhas do arquivo na saı́da padrão ou,
se o - for utilizado diante de NUM, imprime todas menos as NUM SINTAXE
últimas linhas na saı́da padrão; sort [opções] [arquivo] ...
-c [-]NUM DESCRIÇÃO
Imprime os NUM primeiros bytes do arquivo na saı́da padrão ou, se o
Ordena as linhas de um arquivo numérica ou alfabeticamente e mostra
- for utilizado diante de NUM, imprime todos menos os NUM últimos
o resultado na saı́da padrão. Se nenhum arquivo for especificado, lê da
bytes na saı́da padrão.
entrada padrão.
OPÇÕES
-d Ordena por ordem alfabética considerando apenas caractéres alfa-
Comando 5.13 tail Imprime as últimas linhas de um arquivo. numéricos;
NOME -f Desconsidera diferenças entre maı́usculas e minúsculas;
tail
-n Ordena numericamente;
SINTAXE
tail [opções] [arquivo] ... -h Considera números em formato legı́vel para humanos (ex: 20k, 1G,
etc.);
DESCRIÇÃO
Mostra as 10 últimas linhas do arquivo na saı́da padrão, a não ser que -R “Ordenação” aleatória;
alguma opção seja utilizada. Se nenhum arquivo for especificado, lê da
-r Inverte os resultados da ordenação.
entrada padrão.
OPÇÕES
-v Imprime o nome do arquivo antes de qualquer outra saı́da;
-n [+]NUM
Imprime as NUM últimas linhas do arquivo na saı́da padrão ou, se o
+ for utilizado diante de NUM, imprime todas menos as NUM primei-
ras linhas na saı́da padrão;
-c [+]NUM
Imprime os NUM últimos bytes do arquivo na saı́da padrão ou, se o +
for utilizado diante de NUM, imprime todos menos os NUM primeiros
bytes na saı́da padrão.
5.3. CAIXA DE FERRAMENTAS 81 82 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

Comando 5.16 sed Edita fluxos de texto.


NOME
sed
Comando 5.15 bc Calculadora.
NOME SINTAXE
sed [opções] funções [arquivo] ...
bc

SINTAXE DESCRIÇÃO
bc [-l] expressão
Comando usado para editar fluxos de texto de forma automática e eficiente. Se
DESCRIÇÃO nenhum arquivo for especificado, lê o conteúdo da entrada padrão. As funções
Permite a realização de operações diretamente na linha de comando, mos- do sed têm uma sintaxe especı́fica e não muito intuitiva. Para uma explicação
trando o resultado da expressão na saı́da padrão. detalhada ver a seção Manipulação avançada de texto (ver 5.3.6).
OPÇÕES
OPÇÕES
-n Desabilita a impressão automática na saı́da padrão;
-l Carrega a biblioteca matemática padrão.
-e função
PRINCIPAIS EXPRESSÕES Adiciona a função à lista de comandos a serem executados;
expr1 + expr2
Executa a operação de soma entre expr1 e expr2. Ex: 2 + 2; -f arquivo
Ao invés de escrever os comandos do sed na linha de comando, estes
expr1 - expr2 estarão armazenados no arquivo.
Executa a operação de subtração entre expr1 e expr2. Ex: 10 − 2;
RESUMO DAS PRINCIPAIS FUNÇÕES
expr1 / expr2
143 d Deletar linha(s);
Executa a operação de divisão entre expr1 e expr2. Ex: 5 ;
/padrão/
expr1 * expr2 Endereçar linhas que contenham o padrão (expressões regulares são
Executa a operação de multiplicação entre expr1 e expr2. Ex: 5 ∗ 4; suportadas);
expr1 ˆ expr2
s Busca e substituição de padrão: ’s/padrãoBuscado/novoConteúdo’
Executa a operação de potenciação entre expr1 e expr2. Ex: 25 ;
(percorre cada linha em busca do “padrãoBuscado” e caso encontre
expr1 % expr2 realiza sua substituição por “novoConteúdo”;
Executa a operação de módulo (o resultado é o resto da divisão) entre
expr1 e expr2. Ex: 4%2. p Imprimir linha(s);

= Imprimir número da linha atual;

q Sair do sed.
5.3. CAIXA DE FERRAMENTAS 83 84 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

5.4 Compactação e Afins

Compactar é uma forma de representar dados de forma eficiente, ou seja, fazer


com que vários arquivos sejam representados por um único arquivo de tamanho
reduzido. Se um bloco de dados é compactado usando uma determinada extensão,
este só pode ser descompactado por um software que trate esta mesma extensão.
No Linux existe uma grande variedade de extensões de arquivos compactados.
Entre as mais utilizadas estão: bz2, gz e zip. Nesta serão serão abordados apenas
os comandos gzip e gunzip, que lidam com a extensão .gz, porém existem coman-
dos muito similares que lidam com outras extensões, como zip, unzip, rar, unrar,
bzip e bunzip.
Já a operação de split consiste em dividir um arquivo em pequenas partes, sem
mudança de representação ou do espaço total ocupado por este. Ele apenas divide
Comando 5.17 awk Filtra e edita arquivos. o conteúdo do arquivo em pedaços e distribui estas partes em diversos arquivos.
Para juntar as partes geradas pelo split pode-se utilizar o comando cat (comando
NOME 4.1, p. 36), redirecionando a saı́da das partes para um outro arquivo, gerando o
awk arquivo original.
Já o conceito de armazenamento, ou empacotamento, é o inverso do split, ao
SINTAXE
invés de dividir um arquivo em várias partes, junta-se vários arquivos em apenas
awk [opções] [’texto do programa’] [arquivo] ...
um novo arquivo, porém sem compactá-lo.
DESCRIÇÃO
Exercı́cio Resolvido 5.3 Como dividir um arquivo em partes de 500kb?
Executa busca por padrões, filtragem por campos, operações aritméticas, oferece $ split -b500 nome arquivo nome da parte
uso de variáveis, laços e operações condicionais na hora de manipular um arquivo
de texto especificado como parâmetro ou, caso nenhum arquivo seja indicado, O comando split é o responsável pela divisão se arquivos, a opção -b500 indica o
manipular o conteúdo lido da entrada padrão. tamanho de cada parte, nesse caso 500kb, e o nome dos arquivos resultantes será
OPÇÕES parte a,parte b,partec, . . .

-f arquivo Exercı́cio Resolvido 5.4 Como gerar um arquivo que una todos os diretórios abaixo
Ao invés de escrever o [‘texto do programa’] diretamente ao chamar o /pasta exercicios ?
awk, os comandos serão lidos do arquivo; $ cd /home/user $ tar -cf diretorios.tar pasta exercicios

-F valor O comando tar é o responsável pela concatenação, a opção -cf criam um novo tar e
O caractere separador de campos (FS) passa a ser valor; especifica o tar a ser usado. Após as opções indica-se o diretório a ser concatenado.

-v var=valor
A variável do programa var recebe o valor valor.
5.4. COMPACTAÇÃO E AFINS 85 86 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

Comando 5.19 tar Empacota arquivos.


NOME
tar

SINTAXE
tar [opcões] [-f arquivo destinatário(.tar)] [-C diretório]
[arquivo 1] ...
DESCRIÇÃO
O comando tar basicamente empacota e desempacota arquivos. Porém
Comando 5.18 split Divide um arquivo em partes menores.
com algumas opções, este comando serve também para compactar o pacote
NOME gerado. Por exemplo, para criar um arquivo chamado backup.tar que con-
split tenha os arquivos 1.txt e 2.txt da pasta corrente, o arquivo 3.avi que
está na pasta Videos e a pasta Musicas inteira:
SINTAXE $ tar -cf backup.tar 1.txt 2.txt Musicas/ -C Videos/ 3.avi
split [opcões] [arquivo [prefixo]] O uso mais comum deste comando:
$ tar -czvf backup.tar.gz Home/
DESCRIÇÃO E para descompactar:
Este comando permite dividir um arquivo em várias partes. Por padrão, $ tar -xzvf backup.tar.gz
ele dividirá um arquivo a cada 1000 linhas, porém isso pode ser alterado Ou descompactar na pasta raiz:
com suas opções. O prefixo padrão é ‘x’, logo, os arquivos de saı́das são $ tar -xzvf backup.tar.gz -C /
denominados xaa, xab... OPÇÕES
OPÇÕES -f Este é mais que uma opção, é item quase que obrigatório, pois espe-
-b TAM cifica o arquivo tar a ser usado;
Divide o arquivo pelo tamanho desejado em bytes. Por exemplo,
-b512 irá colocar 512 bytes em cada arquivo de saı́da. Pode-se -c Cria um novo arquivo tar;
também usufruir das letras k, m e g para representar kilobytes, me-
-t Exibe o conteúdo de um arquivo tar;
gabytes e gigabytes, respectivamente. Por exemplo, -b500m divide
em partes de 500 megabytes; -x Extrai arquivos de um arquivo tar;
-l TAM
-C Especifica o diretório dos arquivos a serem armazenados;
Divide o arquivo pelo número de linhas. Por exemplo, -l650 irá colo-
car 650 linhas em cada arquivo de saı́da. -z Comprime ou extrai arquivos tar resultante com o gzip;

-j Comprime ou extrai arquivos tar resultante com o bz2;

-v Exibe detalhes da operação;

-w Pede confirmação antes de cada ação;

-r Acrescenta arquivos a um arquivo tar;

-p Mantém as permissões originais dos arquivos.


5.4. COMPACTAÇÃO E AFINS 87 88 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

5.5 Expandindo Meu Território

Uma das utilizações e necessidades mais comuns na computação moderna é a


possibilidade de transferência de dados, comunicação e acesso remoto à informa-
Comando 5.20 gzip Compacta um arquivo.
ções e dados. Essas aplicações são comumente utilizadas, porém a grande maioria
NOME das vezes em modo gráfico. Veremos aqui que estas funcionalidades podem ser
gzip executadas através de linhas de comando, rapidamente e sem complicações.
É importante saber a sintaxe quando se referência um computador remota-
SINTAXE mente ou um determinado arquivo neste computador.
gzip [opcões] arquivo
usuário@hostname:endereço do arquivo
DESCRIÇÃO
Gzip é a abreviação de GNU zip, um Software Livre de compactação de da- Nesta sintaxe, usuário refere-se ao usuário da máquina a ser acessada remota-
dos. A extensão gerada pelo gzip é o .gz, e seu formato contém apenas um mente, esta máquina é referenciada através de seu hostname. Caso o acesso seja
arquivo comprimido. É comum gerar um arquivo contendo diversos outros a um determinado arquivo ou diretório, deve-se colocar : (dois pontos) e após isto
arquivos com o programa tar, e depois comprimi-lo com o gzip, gerando um o endereço completo onde encontra-se o arquivo desejado.
arquivo .tar.gz. Após compactar um arquivo e gerar o .gz, o arquivo original
é excluı́do. O comando a seguir gera o arquivo arquivo.txt.gz.
Acesso Remoto
$gzip arquivo.txt
OPÇÕES A necessidade de acessar um outro computador para utilizar ou ter acesso a seus
-c Mostra conteúdo do arquivo a ser compactado na saı́da padrão; dados é muito comum, por isso existem protocolos de acesso remoto. O protocolo
SSH (Secure SHell) permite a conexão com outro computador, permitindo executar
-d Descompacta um arquivo .gz. comandos em uma unidade remota, com a vantagem da conexão entre o cliente e
NOTAS o servidor ser criptografada.
É importante ressaltar que este comando exclui o arquivo original. Porém
com a opção -c é possı́vel redirecionar o conteúdo para outro arquivo, man-
Web
tendo as informações originais. Assim:
$ gzip -c arquivo.txt > NovoArquivo.txt
É extremamente comum utilizar a internet com navegadores em modo gráfico.
Também é possı́vel navegar via linhas de comando, além de realizar download de
um modo muito prático.

Exercı́cio Resolvido 5.5 Como acessar remotamente uma máquina, com disponi-
bilidade do acesso gráfico?
$ssh -X user@ip

O comando ssh é o responsável pelo acesso remoto, e a opção -X permite a visualização


Comando 5.21 gunzip Descompacta um arquivo. do modo gráfico.
NOME
gunzip

SINTAXE
gunzip arquivo

DESCRIÇÃO
Serve para descompactar um arquivo .gzip.
$gunzip arquivo.gz
5.5. EXPANDINDO MEU TERRITÓRIO 89 90 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

Comando 5.24 sshfs Montar pastas remotamente


NOME
Comando 5.22 ssh Acesso remoto. sshfs

NOME SINTAXE
ssh sshfs usuário@hostname:diretório ponto de montagem

SINTAXE DESCRIÇÃO
ssh [-CX] usuário@hostname [comando] O comando sshfs é utilizado para montar pastas remotamente. Estas pastas
ficam sincronizadas, ou seja, qualquer alteração em uma afetará a outra.
DESCRIÇÃO O ponto de montagem deve ser uma pasta vazia que assumirá o papel do
Comando utilizado para acesso remoto utilizando o protocolo SSH. Caso o diretório sincronizado. Por exemplo, pode-se criar uma pasta remote no
comando não seja especificado a conexão será de acesso ao terminal, como seu Desktop para servir para isso. O que resultaria em uma linha de código
se estivesse com um terminal aberto e com o usuário em frente à máquina. assim:
Para encerrar a conexão, pode-se utilizar o comando exit. $ sshfs usuário@hostname:Desktop ˜/Desktop/remote
OPCOES $ sshfs usuário@hostname:/home/usuário/Desktop ˜/Desktop/remote
Para desmontar o diretório montado remotamente pode-se usar o comando
-C gera uma transmissão com dados compactados; fusermount desta maneira:
fusermount -u ponto de montagem
-X gera uma transmissão que suporta a parte gráfica.
Para o exemplo citado acima:
$ fusermount -u remote

Comando 5.25 wget Baixa arquivos de um servidor.


NOME
wget

Comando 5.23 scp Tranferência remota. SINTAXE


wget [URL] ...
NOME
scp DESCRIÇÃO
O comando wget recebe como parametro uma ou mais URLs e baixa o ar-
SINTAXE quivo para o computador.
scp [-lP] [usuário@hostname:]endereço origem
[usuário@hostname:]endereço destino
DESCRIÇÃO
Comando utilizado para copiar arquivos remotamente. Pode-se copiar ar- Comando 5.26 wget Visualiza uma página web no modo texto.
quivos de uma máquina remota para a outra, sem necessidade de copiá-los
NOME
para a máquina que está sendo utilizada fisicamente.
Para fazer referência à máquina local é possı́vel apenas suprimir seu lynx
usuário@hostname:
SINTAXE
OPCOES lynx URL
-l limita a velocidade da transferência;
DESCRIÇÃO
-P indica uma porta especı́fica. O comando lynx é na verdade um navegador em modo texto. Não se iluda,
por ser em modo texto, a navegação não será como você deve estar acostu-
mado. Pois o lynx não exibe imagens nem distingue fontes porém, isso deixa
a navegação extremamente rápida para quem se habitua a este comando.
5.6. EXERCÍCIOS 91 92 CAPÍTULO 5. TERMINAL DO LINUX, UMA MÃO NA RODA

5.6 Exercı́cios

Para resolver esses desafios, utilize as man pages, juntamento com as informações
da apostila. Não esqueça de fazer o download do diretório de exercicios que acom-
panha a apostila.

Exercı́cio 5.6 Procure na sua home por todos os arquivos que só possuem per-
missão de leitura.

Exercı́cio 5.7 Caso o seu computador desligue enquanto você faz um trabalho que
foi salvo algumas vezes, e não se tem certeza do nome nem de onde estão os ar-
quivos. Como encontrar todos arquivos acessados a menos de 30 minutos e que
tenham extensão .txt?

Exercı́cio 5.8 Para liberar espaco no HD, basta deletar alguns arquivos grandes
que sejam inúteis. O que deve-se fazer para listar todos os arquivos com mais de
100 Mb e que possuem permissão para que o usuário atual os exclua? rabalho.

Exercı́cio 5.9 Existe um arquivo em uma servidor remoto cujo conteúdo lhe inte-
ressa, porém você não sabe em que diretório se encontra este arquivo. Como copiar
o conteúdo desse arquivo para a sua máquina usando o menor número de linhas de
comando possı́veis?

Exercı́cio 5.10 Vários arquivos da sua home precisam ser transferidos para uni-
dades de armazenamento externos, que são em quantidade limitada, e em cada
uma dessas unidades tem pouco espaço disponı́vel. Como transferir estes arquivos
para as unidades? Existe mais de uma forma de executar esta ação? Se sim, qual
a maneira mais eficiente de se resolver este problema?

Exercı́cio 5.11 Você está cursando o segundo perı́odo do curso de Ciência da Computação,
e para se familiarizar com a linguagem de programação C, decidiu escrever um pe-
queno programa para simular o famoso Jogo da Vida (/Programacao/jogoDaVida.c).
Depois de algum tempo escrevendo código e alguns testes, você percebe que não de-
veria ter usado o tipo int em suas declarações de variáveis, e sim unsigned int. Para
não perder tempo procurando por cada ocorrência, escreva uma linha de comando
utilizando o sed que automatize esta tarefa.

Exercı́cio 5.12 Você tem uma lista com nomes, telefones, e-emails e endereços de
colegas /empresa/enderecos.txt. Você quer saber quantos destes contatos uti-
lizam o serviço de e-mail do departamento de informática da UFPR ( @inf.ufpr.br )
e quer saber o nome e telefone destas pessoas. Como você faria isso utilizando o
comando awk?
94 APÊNDICE A. INSTALAÇÃO DO UBUNTU

Apêndice A

Instalação do Ubuntu

A.1 Obtendo o Ubuntu

No site do ubuntu (http://www.ubuntu.com/) tem o sistema operacional para


baixar gratuitamente e também se explica de forma fácil e clara como gravar um
cd ou um pendrive bootável.
Caso 1: Instalar lado-a-lado com outro Sistema Operacional

A opção ”Instalar o lado a lado” irá pegar o espaço vazio da partição e criará uma
nova partição para o Ubuntu, isso sem apagar os dados, mas levará bastante
A.2 Instalação tempo. Caso o computador for interrompido, pode-se perder os dados do disco
rı́gido. Então recomenda-se, antes, salvar os dados mais importantes e desfrag-
mentar o disco.
Após baixar e fazer o cd ou pendrive bootável, reinicie o computador e configure
a bios para bootar pelo pendrive ou cd. Se não ocorrer nenhum erro, o computa-
dor estará executando o Ubuntu e você poderá usar o sistema como quiser sem
nenhum problema. Então para instalar o Ubuntu haverá no desktop um icone,
que inicializará o processo de instalação. A instalação é fácil, em grande parte só
pedirá algumas informações, mas o particionamento do disco rı́gido é um pouco Caso 2: Apagar e usar o Disco Inteiro
difı́cil e há o risco de se perder os dados do disco.

A opção ”usar o Disco Inteiro” simplesmente apagará todos os dados do disco e


criará as partições, como o sistema achar melhor.

A.2.1 Particionamento

O disco rı́gido no computador pode ser dividido em várias partes. Cada parte Caso 3: Especificar particionamento manualmente
é chamada de partição, nela deverá ter apenas um sistema operacional e será
tratada como se fosse um outro disco rı́gido. Então para instalar o Ubuntu é
necessario criar uma partição apenas para o Ubuntu, de no mı́nimo 8gb, e no Na opção ”Particionamento manual”, você irá configurar as partições do disco
sistema de arquivos do linux (Ext3, Ext4 ou ReiserFS). como você quiser. Por exemplo:

93
A.2. INSTALAÇÃO 95 96 APÊNDICE A. INSTALAÇÃO DO UBUNTU

Dispositivo
Indica os discos rı́gidos e suas partições, por exemplo, sda1: disco A e
partição 1;

Tipo Sistema de arquivo utilizado ou que será colocado na partição;


Ponto de Montagem
O diretório onde será montado a partição. Portanto é obrigatório indicar
uma partição para a raiz /, pois é onde será instalado o sistema;
Formatar?
Se selecionado, então a partição terá todos os dados apagados, mas é a
única forma de alterar o sistema de arquivo de uma partição;
Tamanho
Tamanho total da partição;

Entendido as informações da ferramenta, agora falta particionar o disco para


o Ubuntu. Normalmente se utiliza uma partição de no mı́nimo de 8gb para a raiz,
outra de no máximo 2gb para Swap, que apenas serve para dados temporários
do sistema, ou seja, o usuário não tem acesso; e outra de tamanho livre para
/home, onde ficará os dados dos usuários do sistema, mas essa partição não é
obrigatória. Porém, recomenda-se utilizar uma partição separada para o /home,
pois caso necessite formatar a raiz em outra situação, os dados do usuarios não
serão apagados.
Após particionar, o resto da instalação será mamão com açucar.
98 APÊNDICE B. INSTALAÇÃO DE PROGRAMAS

B.2 Pacotes Deb

O sistema operacional Debian desenvolveu um sistema para facilitar a instalação


de pacotes que é utilizado por grande parte dos sistemas baseados no Debian,
inclusive o Ubuntu. Grande parte desses pacotes estão no site do debian e após
baixados no computador, podem-se ser instalados pelo comando dpkg.
Apêndice B

Instalação de Programas

B.1 Apt-Get

A instalação de novos programas usando os comandos Apt-Get ou Aptitude são


bastante faceis de usar, porém o inconveniente é ficar limitado aos programas
contidos no repositório. O funcionamento desse sistema é bem simples, em algum
lugar do mundo existe um servidor onde fica guardado vários pacotes e programas
gratuitos. Então em seu computador existe um arquivo, que armazena o endereço
desse servidor e quais pacotes e programas o repositório contém.

Comando B.2 dpkg


NOME
Comando B.1 apt-get Instala algum pacote ou programa do repositório. dpkg

NOME SINTAXE
apt-get dpkg [Opcões] Pacote

SINTAXE DESCRIÇÃO
apt-get [opcões] programa O comando dpkg é a base do funcionamente do Apt-Get. Ele é capaz de
instalar e gerenciar os pacotes Deb.
DESCRIÇÃO OPÇÕES
O comando apt-get gerencia os pacotes e programas do computador, pode-
se instalar ou remover programas do sistema. Como a instalação de progra- -i Instala um novo pacote .deb;
mas envolve sempre arquivos do sistema, é necessario ser root ou utilizar
junto o comando sudo. -r Remove um pacote controlado pelo repositorio;
OPÇÕES -l Mostra os pacotes contidos no repositorio;
update
Atualiza a lista de pacotes e programas; -s Mostra o status de algum pacote do repositorio no sistema;

install --unpack
Baixa e instala algum pacote ou programa; Descompacta um pacote .deb.
EXEMPLOS
autoremove dpkg -i pacote.deb dpkg -r pacote dpkg -l texlive* dpkg -s openssh-server
Remove algum pacote ou programa já instalado.

97
B.3. NA UNHA 99 100 APÊNDICE B. INSTALAÇÃO DE PROGRAMAS

B.3 Na Unha

No Linux, quando você baixar um novo programa, normalmente vem apenas o


codigo-fonte do programa e não o codigo executável como no Windows. Se tem o
codigo executável, para instalar é apenas copiar os arquivos, jogar para alguma
pasta e executar o programa. Porém o codigo executavel é dependente de arqui-
tetura de computador e retira a liberdade de alterar o software. Então no linux
para instalar um novo programa é necessario transformar o codigo-fonte em co-
digo executavel, essa transformação chama-se compilar um programa.
Para facilitar essa etapa de transformação, foi desenvolvido um método padrão.
Todo programa que segue esse padrão, tem um script na pasta ... chamado con-
figure. Então antes de compilar algum programa é necessario executar o script
configure, que verificará se todas as bibliotecas utilizadas pelo programa já estão
instaladas. Caso falte alguma biblioteca, tente instalar pelo apt-get, caso contra-
rio a instalação tornará extramente trabalhoso e cansativo. Se der tudo certo, o
script criará um arquivo na mesma pasta chamado de Makefile, então agora é só
executar o comando make, que compilará o codigo-fonte. Aguarde um bom tempo,
alguns programas demoram horas para terminar de compilar. Agora o programa
tem o codigo-executavel e só falta copiar o arquivo executável para o sistema e
configurar. Essa parte é feita pelo comando make install, lembrando que como a
alteração é feita nos diretorios do sistema é necessario ser root ou utilizar o co-
mando sudo junto nessa última etapa.

Resumindo
Descompacte o novo programa em algum lugar
Entre no diretorio, onde o programa foi descompactado
execute o arquivo configure
execute o comando make
execute o comando make install (sudo make install)
102 APÊNDICE C. COMANDOS DE REDE

Apêndice C Comando C.1 ifconfig Mostra as conexoes de rede do computador


NOME
ifconfig
Comandos de Rede SINTAXE
ifconfig [Opcoes]

DESCRIÇÃO
O comando ifconfig mostra como esta configurado os dispositivos de rede.

OPÇÕES
-a Mostra todos os dispositivos de rede;
up Dispositivo
liga o dispositivo de rede;

down Dispositivo
desliga o dispositivo de rede;
EXEMPLOS
ifconfig

Saida:
Dispositivo Informaçoes do Dispositivo
eth0 Link encap:Ethernet HWaddr 00:19:d1:26:ed:c5 (Tipo e MAC)
inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 (IP)
inet6 addr: fe80::219:d1ff:fe26:edc5/64 (IPv6)
... RX bytes:484457852 (484.4 MB) TX bytes:36230552 (36.2 MB)

eth1 Link encap:Ethernet HWaddr 00:e0:7d:a7:e7:59


inet addr:192.168.0.2 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::2e0:7dff:fea7:e759/64 Scope:Link
...
RX bytes:35093357 (35.0 MB) TX bytes:801545308 (801.5 MB)
Interrupt:21 Base address:0x1100

...

ifconfig down eth0

101
103 104 APÊNDICE C. COMANDOS DE REDE

Comando C.4 netcat Cria um servidor


NOME
Comando C.2 dhclient conecta a rede local nc
NOME
dhclient SINTAXE
nc -lp Porta
SINTAXE nc -lp Porta -e Comando
dhclient [Dispositivo] DESCRIÇÃO
O comando netcat com a opção -l coloca o computador escutando a Porta se-
DESCRIÇÃO lecionada e simplesmente mostra os dados recebidos na porta. Ou também,
O comando dhclient conecta ao servidor da rede local (Servidor DHCP) e além de mostrar os dados, é possivel executar algum comando, quando re-
pede para o servidor colocar o novo computador na rede. Após a execução ceber algum dados na porta, isso é feito adicionando a opção -e.
do comando, se não houver nenhum erro, o computador já estará na rede OPÇÕES
local. Então pode-se acessar os outros computadores e acessar a internet,
caso a rede tiver internet. -lp Porta
EXEMPLOS Coloca o computador para escutar (-l) na porta selecionada (-p);
dhclient
-e Comando
dhclient eth0
Ao receber alguma informação, o computador executa o comando
selecionado
EXEMPLOS
Cria um servidor escutando a porta 5000
nc -lp 5000

Cria um servidor escutando a porta 5000 com acesso ao terminal


nc -lp 5000 -e /bin/bash

Conecta ao servidor
Comando C.3 netcat Conecta em algum servidor
nc Servidor 5000
NOME
nc

SINTAXE
nc [Opcoes] Servidor Porta
Comando C.5 netcat Envia dados para um computador
DESCRIÇÃO
NOME
nc
OPÇÕES
SINTAXE
-v Mostra o log, se ocorreu algum erro ou não;
nc Servidor Porta Arquivo
EXEMPLOS
nc www.google.com.br 80 DESCRIÇÃO
após conectado envie o seguinte dados ????, então você receberá a pagina
do google em html
OPÇÕES
-v Imprime o nome do arquivo antes de qualquer outra saı́da.
105 106 APÊNDICE C. COMANDOS DE REDE

Comando C.6 netcat Realiza um scanner pelas portas


NOME
nc

SINTAXE
nc -vz Servidor Portas -w Timeout

DESCRIÇÃO
O comando netcat dessa forma, cria um scanner pelas portas de algum
servidor e irá dizer quais portas estão abertas.
OPÇÕES
-v Mostra o log, se ocorreu algum erro ou não;

-z Conecta e logo desconecta do servidor, necessario pois se houver


alguma porta aberta o nc irá se conectar e só sairá se o usuario
desconectar;
-w Timeout
Tempo limite para conectar ao servidor;
EXEMPLOS
nc -vz www.google.com.br 80-90 -w 3

Comando C.7 netcat Cria um proxy


NOME
nc

SINTAXE
nc -l Porta

DESCRIÇÃO

OPÇÕES
-v Imprime o nome do arquivo antes de qualquer outra saı́da.
108 APÊNDICE D. EDITORES DE TEXTO

ME - Entrar no Modo de Comando



ESC  entra no modo de comando;

MC - Arquivo
Apêndice D :e NomeArquivo
abre o arquivo NomeArquivo;

salva o arquivo atual


Editores de Texto
:w
:w NomeArquivo
salva o arquivo corrente no arquivo NomeArquivo;
:w! NomeArquivo
força salvar o arquivo corrente no arquivo NomeArquivo, use esse caso
Este capı́tulo ensinará como usar um editor de texto no terminal do linux, que pela
ocorra algum erro no :w;
sua grande quantidade de ferramentas disponiveis e portando apenas o teclado
como forma de entrada de dados, teve o seu uso dificultado. Também é importante :q sai sem salvar, porem ele nao sai do programa se o arquivo foi modificado
saber pelo menos o mı́nimo, pois pode haver alguma circustância, da qual você e nao salvado;
terá apenas o modo texto e precisará dele para fazer o que você quer.
:q! força sair sem salvar, caso o arquivo foi modificado;

:wq salva e sai;


D.1 Vi

D.1.1 Introdução MC - Editar

O Visual Interface (VI) foi criado no inicio da década de 80. Ele contém dois d recorta o texto a partir do cursor até o final da linha;
modos de operação: Modo de Comando e Modo de Inserção. O usuário só pode
estar em apenas um modo, que pode ser trocado. Cada modo altera o significado dw recorta a palavra sobre o cursor;
das teclas, por exemplo, a tecla ’D’ no modo de comando indica ao computador
para deletar uma linha, já no modo de inserção, o computador insere a letra ’D’ dd recorta a linha corrente;
no texto. Quando entrar no editor, por padrão, ele estará no modo de comando.
y$ copia o texto a partir do cursor até o final da linha;

yw copia a palavra sobre o cursor;


D.1.2 Comandos
yy copia a linha corrente;
MC = Modo de Comando ME = Modo de Edição
p cola depois do cursor;

P cola antes do cursor;


MC - Entrar no Modo de Edição
x deleta o caracter sobre o cursor;
i entra no modo de edição;
dw deleta a palavra sobre o cursor;
a entra no modo e o cursor avança um caracter;
dd deleta a linha atual;
r entra no modo e coloca o cursor no inicio da linha atual;
D deleta a linha a partir da posição do cursor ate o final;
A entra no modo e coloca o cursor no final da linha atual;
N,M d apaga da linha N até a M
o entra no modo, cria uma nova linha abaixo da atual e coloca o cursor na
nova linha. u desfaz a última modificação;

107
D.1. VI 109 110 APÊNDICE D. EDITORES DE TEXTO

U desfaz todas as modificações feitas na linha atual; $ move o cursor para o final da linha atual;

nG move o cursor para a linha n;


MC - Busca e substituição
G move o cursor para a última linha do arquivo;
/exp. regular
procura exp. regular no texto; ME - Edição de Texto
n vai para a próxima ocorrência; Teclas de A-Z
insere no texto o caracter correspondente
N vai para a ocorrência anterior;
:s/exp. regular/string/
substitui a primeira ocorrência de exp. regular por string. D.2 Emacs
:s/exp. regular/string/g
substitui todas as ocorrências de exp. regular por string na linha atual. D.2.1 Introdução
:L1,L2 s/exp. regular/string/g O Emacs é outro editor de texto bastante utilizado. Ele facilita um pouco o uso,
substitui todas as ocorrências de exp. regular por string da linha L1 até pois não usa estados como o VI e sim combinações de teclas.
L2.
:% s/exp. regular/string/g
substitui todas as ocorrências de exp. regular por string em todo o texto. D.2.2 Comandos

Arquivo
MC - Navegação    
Ctrl  + x  e Ctrl  + f  NomeArquivo
  abre o arquivo NomeArquivo;
Ctrl  + f   
move o cursor para proxima página;  
Ctrl  + x  e Ctrl  + s  NomeArquivo
  salva o arquivo corrente no arquivo NomeArquivo;
Ctrl  + b   
move o cursor para página anterior; Ctrl
 
  + x  e Ctrl  + w  NomeArquivo
salva como
H move o cursor para a primeira linha da página;  
 
L move o cursor para a ultima linha da página; Ctrl  + x  e Ctrl  + c 
Salva e sai do emacs.
h move o cursor um caracter a esquerda;
Editar
j move o cursor para a proxima linha;
 
k move o cursor para linha anterior; ESQ  + @  ou Mouse
seleciona um bloco;
l move o cursor um caracter a direita;  
Ctrl  + w 
w move o cursor para o inicio da próxima palavra, ignorando a pontuacão; recorta o bloco selecionado;
 
W move o cursor para o inicio da próxima palavra, não ignorando a pon- ESQ  + w 
tuacão; copia o bloco selecionado;
 
b move o cursor para o inicio da palavra anterior, ignorando a pontuacão; Ctrl  + y 
cola o bloco;
B move o cursor para o inicio da palavra anterior, não ignorando a pontuacão;  
Ctrl  + d 
0 move o cursor para o inicio da linha atual; deleta o caracter sob o cursor;
D.2. EMACS 111 112 APÊNDICE D. EDITORES DE TEXTO
   
ESC  + d  Ctrl  + End 
deleta a palavra sob o cursor; Ir ao fim do documento
    
Ctrl  + k  Ctrl  + M  + n 
deleta a linha atual; Avança ao próximo parêntese que casa com aquele sob o cursor
    
Ctrl  + w  Ctrl  + M  + p 
deleta os caracteres selecionados; Avança ao último parêntese que casa com aquele sob o cursor
  
Ctrl  + x  + u 
desfaz a última modificação; Janela
  
Ctrl  + x  e 1 
Deixa apenas uma janela;
Pesquisar  

Ctrl  + x  e 2 
Divide a tela na horizontal;
 
Ctrl  + s 
pesquisa por alguma string e avança para a próxima ocorrência;   
Ctrl  + x  e 3 
  Divide a tela na vertical;
Ctrl  + r 
pesquisa por alguma string e avança para a ocorrência anterior; 
Ctrl

  + o 
  Muda de janela;
ESQ  + % 
Inicia o processo de substituição;

D.3 Gedit

Espaço 
Substitui e avança para a próxima ocorrência;
 O Gedit é um editor de texto modo grafico, logo não existe muito segredo para
Delete  editar, salvar ou abrir um arquivos. Mas é importante citar para aqueles, que
Não substitui e avança para a próxima ocorrência;
preferem utilizar o modo gráfico.

!  Substitui todas as ocorrências;
.
  Substitui e sai do processo de substituição;

ESQ  Sai do processo de substituição.

Navegação
  
Alt  + v  ou PgUp 
Voltar uma página
  
Ctrl  + v  ou PgDown 
Avançar uma página
  
Ctrl  + a  ou Home 
Ir ao inı́cio da linha
  
Ctrl  + e  ou End 
Ir ao fim da linha
 
Ctrl  + Home 
Ir inı́cio do documento

Você também pode gostar