Instituto Federal de Educação, Ciência e Tecnologia do Paraná
MINISTÉRIO DAS COMUNICAÇÕES
SECRETARIA EXECUTIVA
COORDENAÇÃO GERAL DE ACOMPANHAMENTO DE PROJETOS ESPECIAIS
Elaborado por Marcos Laureano
[email protected]
CGPE/SE-MC
Brasília-DF, Maio de 2009
Sumário
1 Caracterı́sticas do Sistemas Unix/Linux
1.1 Usuários . . . . . . . . . . . . . . . .
1.2 Comandos . . . . . . . . . . . . . . .
1.3 Principais diretórios . . . . . . . . . .
1.4 O diretório HOME . . . . . . . . . .
1.5 Interpretador de Comandos . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
8
9
9
10
11
11
2 Comandos Básicos
2.1 Iniciando uma sessão . . . . . . . . . . . . . . .
2.2 Comando exit . . . . . . . . . . . . . . . . . . .
2.2.1 Atividades sugeridas . . . . . . . . . . .
2.3 Obtendo HELP no Sistema - Páginas de Manual
2.3.1 Atividades sugeridas . . . . . . . . . . .
2.4 Comando passwd . . . . . . . . . . . . . . . . .
2.4.1 Atividades sugeridas . . . . . . . . . . .
2.5 Comando expr . . . . . . . . . . . . . . . . . . .
2.5.1 Atividades sugeridas . . . . . . . . . . .
2.6 Caminho de arquivos . . . . . . . . . . . . . . .
2.7 Comandos básicos . . . . . . . . . . . . . . . . .
2.8 Diretórios Especiais “.” e “..” . . . . . . . . . .
2.8.1 Atividades sugeridas . . . . . . . . . . .
2.9 Atributos de Arquivos . . . . . . . . . . . . . .
2.9.1 Atividades sugeridas . . . . . . . . . . .
2.10 Comandos avançados . . . . . . . . . . . . . . .
2.11 Informações em arquivos . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
13
13
14
15
16
16
16
17
17
17
20
20
20
21
21
22
3 Permissões em arquivos
3.1 Definições básicas . . . . . .
3.2 Consultando permissões . .
3.3 Comando chmod . . . . . .
3.3.1 Modo Simbólico . . .
3.3.2 Modo Octal . . . . .
3.4 O comando umask . . . . .
3.5 Os comandos chown e chgrp
3.6 O comando newgrp . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
27
27
27
29
29
31
31
33
33
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Sumário
3.7
Atividades sugeridas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4 Lista de exercı́cios - 1a. Lista
35
5 Editor VI
5.1 Movimentação do Cursor . .
5.2 Controle de tela . . . . . . .
5.3 Controle de palavras . . . .
5.4 Comandos de busca . . . . .
5.5 Comandos de cancelamento
5.6 Comandos de inserção . . .
5.7 Comandos de mudança . . .
5.8 Comandos gerais . . . . . .
5.9 Comandos no modo ex . . .
5.10 Comandos de configuração .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
38
38
39
39
39
39
40
40
40
40
41
6 Sistemas de Arquivos
6.1 Partições . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.2 Estratégias de Particionamento . . . . . . . . . . . . . . . . . .
6.3 Segurança de Arquivos e Sistemas de Arquivos . . . . . . . . . .
6.3.1 Permissões de Arquivos . . . . . . . . . . . . . . . . . . .
6.3.2 Integridade de Arquivos . . . . . . . . . . . . . . . . . .
6.3.3 Cavalos de Tróia . . . . . . . . . . . . . . . . . . . . . .
6.3.4 Sistemas de Arquivo Criptografados . . . . . . . . . . . .
6.4 Criando uma partição - Comando fdisk . . . . . . . . . . . . . .
6.5 Partição EXT2 (Linux Native) . . . . . . . . . . . . . . . . . . .
6.5.1 Criando um sistema de arquivos EXT2 em uma partição
6.5.2 Criando um sistema de arquivos EXT2 em um arquivo .
6.6 Journaling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.7 Partição EXT3 (Linux Native) . . . . . . . . . . . . . . . . . . .
6.7.1 Criando um sistema de arquivos EXT3 em uma partição
6.8 Nomeando uma partição de disco - comando e2label . . . . . . .
6.9 Detalhes de uma Partição - comando dumpe2fs . . . . . . . . .
6.10 Criando sistema de arquivos Swap em uma partição . . . . . . .
6.11 Pontos de Montagem . . . . . . . . . . . . . . . . . . . . . . . .
6.11.1 Identificação de discos e partições em sistemas Linux . .
6.12 Montando (acessando) uma partição de disco - Comando mount
6.13 Arquivo fstab . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6.14 Desmontando uma partição de disco - Comando umount . . . .
6.15 Exercı́cios sugeridos . . . . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
42
42
42
44
44
45
46
46
47
49
50
50
51
51
52
52
53
53
54
54
55
56
57
57
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
7 Gerência de Processos
58
7.1 Entradas e saı́das padrão . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3
Sumário
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
7.10
7.11
7.12
7.13
7.14
7.15
Redirecionamento para arquivos . . . . . . . . . . . . . .
Redirecionamento usando pipes . . . . . . . . . . . . . .
Prática Sugerida . . . . . . . . . . . . . . . . . . . . . .
Filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Prática sugerida . . . . . . . . . . . . . . . . . . . . . . .
Programas e processos . . . . . . . . . . . . . . . . . . .
Comandos ps e pstree . . . . . . . . . . . . . . . . . . . .
Mudando prioridade processos - Comandos nice e renice .
Execução de Comandos em Background e Foreground . .
7.10.1 Caractere & . . . . . . . . . . . . . . . . . . . . .
7.10.2 Comando jobs . . . . . . . . . . . . . . . . . . . .
Suspendendo processos . . . . . . . . . . . . . . . . . . .
7.11.1 Comandos bg e fg . . . . . . . . . . . . . . . . . .
Comando nohup . . . . . . . . . . . . . . . . . . . . . . .
Comando kill . . . . . . . . . . . . . . . . . . . . . . . .
Os comandos at e batch . . . . . . . . . . . . . . . . . .
Agendando programas via crontab . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
60
61
62
63
68
68
68
72
72
72
73
73
74
75
75
77
77
8 Lista de exercı́cios - 2a. Lista
79
9 Administração de Usuários
9.1 Verificando informações do usuário . . . . . . . . . . .
9.2 Tornando-se outro usuário - Comando su . . . . . . . .
9.3 O comando sudo . . . . . . . . . . . . . . . . . . . . .
9.4 Arquivo passwd e group . . . . . . . . . . . . . . . . .
9.5 Adicionando grupos - comando groupadd . . . . . . . .
9.6 Eliminando grupos - Comando groupdel . . . . . . . .
9.7 Adicionando usuários - Comando useradd . . . . . . . .
9.8 Alterando a senha do usuário - comando passwd . . . .
9.9 Eliminando usuários - Comando userdel . . . . . . . . .
9.10 Modificando o perfil de um usuário - comando usermod
9.11 Exemplo Script automático . . . . . . . . . . . . . . .
9.12 Atividades sugeridas . . . . . . . . . . . . . . . . . . .
9.13 Controle de quotas . . . . . . . . . . . . . . . . . . . .
9.13.1 Configuração de cotas para usuários . . . . . . .
9.14 Configuração do BASH-shell . . . . . . . . . . . . . . .
81
81
81
82
83
84
85
86
88
88
89
90
91
91
91
93
10 Lista de exercı́cios - 3a. Lista
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
94
11 Programação Shell
95
11.1 Variáveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
11.2 Estrutura geral de um script em BASH-Shell . . . . . . . . . . . . . . . . . . . . 97
11.3 Parâmetros de entrada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
4
Sumário
11.4 Controle de fluxo . . . . . . . . . . . . . .
11.4.1 Outros Exemplos . . . . . . . . . .
11.5 Operadores lógicos e aritméticos . . . . . .
11.6 Operadores de teste em arquivos e strings
11.7 Expansão de variáveis . . . . . . . . . . .
11.8 Mais exemplos de script . . . . . . . . . .
11.9 Atividades sugeridas . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
99
102
103
104
107
107
111
12 Comandos Básicos
112
12.1 Comandos Iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
12.2 Comandos de Administração de Sistemas e Redes . . . . . . . . . . . . . . . . . 119
5
Lista de Figuras
1.1
Interpretador de Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.1
Exemplo de execução do comando man . . . . . . . . . . . . . . . . . . . . . . . 15
7.1
7.2
7.3
Saı́das do Sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Saı́das do Sistema ligadas ao terminal . . . . . . . . . . . . . . . . . . . . . . . . 59
Redirecionamento com pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
6
Lista de Tabelas
12.1 Comandos Básicos - Armazenamento . . . . . . . . . . . . . . . . . . . . . . . .
12.2 Comandos Básicos - Comparações . . . . . . . . . . . . . . . . . . . . . . . . . .
12.3 Comandos Básicos - Comunicação . . . . . . . . . . . . . . . . . . . . . . . . . .
12.4 Comandos Básicos - Diversos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.5 Comandos Básicos - Gerenciamento de arquivos . . . . . . . . . . . . . . . . . .
12.6 Comandos Básicos - Impressão . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.7 Comandos Básicos - Manutenção de Programas . . . . . . . . . . . . . . . . . .
12.8 Comandos Básicos - Pesquisa . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.9 Comandos Básicos - Processamento de Textos . . . . . . . . . . . . . . . . . . .
12.10Comandos Básicos - Programação . . . . . . . . . . . . . . . . . . . . . . . . . .
12.11Comandos Básicos - Programação Shell . . . . . . . . . . . . . . . . . . . . . . .
12.12Comandos Básicos - Status do Sistema . . . . . . . . . . . . . . . . . . . . . . .
12.13Comandos de Administração/Redes - Correio . . . . . . . . . . . . . . . . . . .
12.14Comandos de Administração/Redes - Daemons . . . . . . . . . . . . . . . . . .
12.15Comandos de Administração/Redes - Hardware . . . . . . . . . . . . . . . . . .
12.16Comandos de Administração/Redes - Informações de host . . . . . . . . . . . .
12.17Comandos de Administração/Redes - Instalação . . . . . . . . . . . . . . . . . .
12.18Comandos de Administração/Redes - Relógio . . . . . . . . . . . . . . . . . . .
12.19Comandos de Administração/Redes - Sistema de Arquivos . . . . . . . . . . . .
12.20Comandos de Administração/Redes - Gerenciamento de kernel . . . . . . . . . .
12.21Comandos de Administração/Redes - Interligação em rede . . . . . . . . . . . .
12.22Comandos de Administração/Redes - Impressão . . . . . . . . . . . . . . . . . .
12.23Comandos de Administração/Redes - Iniciando e parando o sistema . . . . . . .
12.24Comandos de Administração/Redes - Atividade do Sistema e Gerenciamento de
processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12.25Comandos de Administração/Redes - Usuários . . . . . . . . . . . . . . . . . . .
12.26Comandos de Administração/Redes - Diversos . . . . . . . . . . . . . . . . . . .
12.27Comandos de Administração/Redes - TCP/IP . . . . . . . . . . . . . . . . . . .
12.28Comandos de Administração/Redes - TCP/IP . . . . . . . . . . . . . . . . . . .
7
112
112
113
113
114
115
115
116
116
117
117
118
119
120
121
121
121
122
123
124
124
125
125
125
126
127
127
128
1 Caracterı́sticas do Sistemas Unix/Linux
O sistema operacionaisl Unix/Linux possui as seguintes caracerı́sticas:
• Interativo - O usuário requisita os comandos e obtém os resultados de sua execução
através do terminal.
• Multitarefa - Um único usuário pode requisitar que sejam efetuados vários comandos
ao mesmo tempo em seu terminal. É responsabilidade do sistema operacional controlar
estas execuções paralelas.
Quando um usuário executa mais de um comando ao mesmo tempo, geralmente é somente
um que necessita a interação com o usuário. Os demais comandos executados são na
sua maioria comandos que não exigem a atenção do usuário, sendo tarefas demoradas.
Quando isto ocorre, dizemos que os programas que o usuário está executando sem a
interação ficam em background. O programa que o usuário está executando e interagindo
fica em foreground.
• Multiusuário - O sistema operacional pode controlar o acesso ao sistema através de
vários terminais, virtuais ou reais, cada um pertencendo a um usuário. O Unix/Linux
aceita as requisições de comandos de cada um dos usuários e gera as filas de controle e
prioridades para que haja uma distribuição correta dos recursos de hardware necessários
a cada usuário. Devido a caracterı́stica de ser um sistema multiusuário, o sistema operacional implementa um sistema de segurança visando impedir o acesso aos arquivos e
diretórios de um usuário por outro. No módulo sobre permissões veremos como se pode
liberar ou restringir o acesso entre usuários.
Alguns termos que serão muito utilizados nas explicações e textos devem ser conhecidos, pois
toda a bibliografia e documentação se utilizam deles. Estes termos fazem parte do jargão do
Unix e Linux, são eles:
• Shell - É o termo para definir o interpretador de comandos. O shell nada mais é que
um programa que recebe os comandos do usuário e ativa o sistema operacional. Ele faz
o controle do terminal, tanto na entrada como na saı́da. Existem várias opções de shell
para o usuário, cada um com determinadas caracterı́sticas e facilidades. Dentre os mais
conhecidos podemos citar: bash, sh, rsh, csh e ksh.
• Kernel - É como é chamado o núcleo do sistema Unix e Linux. Este núcleo faz o
gerenciamento direto dos dispositivos de E/S (device drivers), gerenciamento de memória
e controle do uso da CPU pelos vários processos do sistema.
8
CAPÍTULO 1. CARACTERÍSTICAS DO SISTEMAS UNIX/LINUX
• Comando - Um comando Unix/Linux nada mais é que um arquivo (programa executável)
guardado em um diretório especı́fico do sistema. Portanto quando o usuário executa um
comando, ele simplesmente está rodando um programa como qualquer outro do sistema.
• Processo - É um conceito básico do sistema. Toda vez que se executa um programa/comando é gerado um processo no sistema. Todo gerenciamento é feito sobre este processo.
Os processos são, portanto, comandos/programas em execução. Todo processo é identificado por um número chamado process id (PID). Este ID é único no sistema durante a
execução do processo, portanto pode e deve ser usado para identificação do processo em
caso de necessidade.
1.1 Usuários
Dentro do sistema existem dois tipos de usuários: normal e super-usuário. O usuário comum
é aquele que tem acesso limitado somente a seus dados e arquivos. Se tentar acessar dados de
outro usuário, o sistema, dependendo das permissões configuradas, não deixará, emitindo uma
mensagem de erro.
O super-usuário ou conta root é uma conta com poderes supremos sobre toda a máquina.
Com ela pode-se acessar qualquer arquivo que se encontra na máquina, removê-lo, mudá-lo de
lugar, etc. O esquema de permissão e segurança do Unix/Linux não se aplica ao super-usuário.
Existem também certos comandos que só podem ser executados quando o usuário tem permissão de super-usuário. Estes comandos geralmente servem para a manutenção do sistema e
não devem ser deixados à disposição de usuários comuns devido à complexidade e perigo do
mal uso destes comandos.
1.2 Comandos
Formato geral de um comando: comando [opções] [argumentos]
• Comando - Comando ou programa a ser executado.
• Opções - Modificadores do comando (opcional).
• Argumentos - Define o objeto a ser afetado pelo comando (opcional).
A maioria dos comandos Unix/Linux possuem a sintaxe compatı́vel ao formato acima. Temos
o nome do comando, seguido de opções e argumentos. As opções, quando colocadas, devem
sempre preceder os argumentos.
Observar que os caracteres separadores dos campos da linha de comando são o espaço em
branco e o <TAB>. Um outro detalhe, muito importante, é o fato de que o Unix/Linux
9
CAPÍTULO 1. CARACTERÍSTICAS DO SISTEMAS UNIX/LINUX
faz distinção entre os caracteres maiúsculos e minúsculos. Portanto, para o Unix/Linux, Ls é
diferente de ls.
Quase sempre as opções dos comandos são precedidas pelo caractere “-” (menos) ou “+”
(mais) e podem entrar em qualquer ordem e posição na linha de comando, mas sempre antes
dos argumentos (há poucas exceções). Na maioria das vezes as opções são representadas por
letras, podendo-se agrupar uma série de letras em uma única opção. Por exemplo, as opções
“-w -l -c” do comando wc podem ser escritas como “-wlc”. Existem também opções que são
mutuamente exclusivas, não podendo aparecer ao mesmo tempo em um comando.
O terceiro tipo de opção que pode existir em um comando, é a opção que exige logo após,
um argumento especı́fico. Neste caso, quase sempre esta opção é colocada separada, precedida
por “-” ou “+” e seguida de seu argumento Caso ela seja colocada juntamente com as demais
opções, ela deve ser a última da lista.
Um detalhe que gera muita confusão para o iniciante do sistema Unix/Linux é o fato de que
as opções variam de comando para comando, tornando-se difı́cil uma memorização das mesmas.
Se isto acontecer com você, não se preocupe, pois poucas pessoas sabem todas as opções de
todos os comandos.
Os argumentos definem os objetos sobre os quais o comando será aplicado. Temos como
exemplos de argumentos: arquivos, periféricos, etc.
1.3 Principais diretórios
Os diretórios de um sistema de arquivos têm uma estrutura pré-definida, com poucas variações. A seguir ilustramos os principais:
• /home: raiz dos diretórios home dos usuários.
• /boot: arquivos de boot (kernel do sistema, etc)
• /var: arquivos variáveis, áreas de spool (impressão, e-mail, news), arquivos de log
• /etc: arquivos de configuração dos serviços
• /usr: aplicações voltadas aos usuários
• /tmp: arquivos temporários
• /mnt: montagem de diretórios compartilhados temporários
• /bin: aplicações de base para o sistema
• /dev: arquivos de acesso aos dispositivos fı́sicos e conexões de rede
• /lib: bibliotecas básicas do sistema
10
CAPÍTULO 1. CARACTERÍSTICAS DO SISTEMAS UNIX/LINUX
1.4 O diretório HOME
Cada usuário possui um diretório especial, chamado “diretório home” (casa), onde são armazenados:
• arquivos e diretórios pessoais de trabalho
• e-mails já lidos (folders pessoais)
• arquivos de configuração individuais
• configuração das aplicações usadas
O diretório home do usuário é o seu local de inı́cio de sessão de trabalho (via shell ou gráfica).
O usuário possui plenos poderes de acesso ao seu diretório home (e seus sub-diretórios), e
normalmente não pode criar arquivos fora dele. O diretório home de cada usuário é normalmente
inacessı́vel aos outros usuários, mas isso pode ser controlado pelo administrador do sistema
(root).
1.5 Interpretador de Comandos
Também conhecido como shell. É o programa responsável em interpretar as instruções enviadas pelo usuário e seus programas ao sistema operacional (o kernel). Ele que executa comandos
lidos do dispositivo de entrada padrão (teclado) ou de um arquivo executável. É a principal
ligação entre o usuário, os programas e o kernel. O Unix/Linux possui diversos tipos de interpretadores de comandos, entre eles podemos destacar o bash, ash, csh, tcsh, sh, etc. Entre
eles o mais usado é o bash (no Linux). O interpretador de comandos do DOS, por exemplo, é
o command.com.
Os comandos podem ser enviados de duas maneiras para o interpretador: interativa e nãointerativa:
• Interativa - Os comandos são digitados no aviso de comando e passados ao interpretador
de comandos um a um. Neste modo, o computador depende do usuário para executar
uma tarefa, ou próximo comando.
• Não-interativa - São usados arquivos de comandos criados pelo usuário (scripts) para
o computador executar os comandos na ordem encontrada no arquivo. Neste modo, o
computador executa os comandos do arquivo um por um e dependendo do término do
comando, o script pode checar qual será o próximo comando que será executado e dar
continuidade ao processamento. Este sistema é útil quando temos que digitar por várias
vezes seguidas um mesmo comando ou para compilar algum programa complexo.
O shell bash possui ainda outra caracterı́stica interessante: A complementação dos nomes.
Isto é feito pressionando-se a tecla <TAB>. Por exemplo, se digitar “ls tes” e pressionar
<TAB>, o bash localizará todos os arquivos que iniciam com “tes” e completará o restante do
11
CAPÍTULO 1. CARACTERÍSTICAS DO SISTEMAS UNIX/LINUX
Figura 1.1: Interpretador de Comandos
nome. Caso a complementação de nomes encontre mais do que uma expressão que satisfaça a
pesquisa, ou nenhuma, é emitido um beep. A complementação de nomes funciona sem problemas
para comandos internos.
Exemplos:
• ech (pressione <TAB>)
• ls /vm(pressione <TAB>)
12
2 Comandos Básicos
2.1 Iniciando uma sessão
O acesso ao sistema é feito através de uma conta previamente cadastrada no sistema pelo
administrador do sistema. Sem esta conta não é possı́vel o acesso ao sistema. Esta conta é
chamada user name ou login name. O nome da conta deve ser uma string de até 8 caracteres
e deve ser único em cada máquina.
Junto com a conta, é atribuı́da uma senha de acesso. Esta senha é que garante que não se
faça nenhum acesso indevido aos dados de determinado usuário. A manutenção desta senha e
de sua validade é de responsabilidade única do usuário.
Uma vez acertadas a conta e a senha, o sistema apresentará um prompt indicando que ele
está apto a receber comandos do usuário. Neste ponto dizemos que estamos com uma sessão
aberta.
2.2 Comando exit
O comando exit deve ser utilizado para encerrar uma sessão de trabalho, quando utilizado
o modo texto, terminando a conexão com o usuário. O sistema volta a pedir uma nova conta.
Quando se está utilizando terminal no modo gráfico, o comando exit fecha o terminal mas
não finaliza a conexão. Entenda por ambiente gráfico os gerenciadores de tela disponı́veis nos
sistemas Unix/Linux, tais como: Gnome, KDE, XFCE entre outros.
Um fato importante a relatar é que a sessão (dependendo do shell) pode terminar se for
digitado um <CTRL> D, pois este caractere significa fim de arquivo ou fim da entrada de
dados.
2.2.1 Atividades sugeridas
1. Verifique se o login ao sistema está correto.
13
CAPÍTULO 2. COMANDOS BÁSICOS
2.3 Obtendo HELP no Sistema - Páginas de Manual
As páginas de manual acompanham todos os sistemas Unix/Linux. Elas trazem uma descrição básica do comando/programa e detalhes sobre o funcionamento de opção. Uma página
de manual é visualizada na forma de texto único com rolagem vertical. Também documenta
parâmetros usados em alguns arquivos de configuração.
A utilização da página de manual é simples, digite:
man [opç~
oes] [seç~
ao] [tı́tulo]
Onde seção indica ao comando qual a seção do manual que será aberta, se omitido, mostra
a primeira seção sobre o comando encontrada (em ordem crescente) e tı́tulo é o nome do
comando ou arquivo que se está buscando.
Cada seção da página de manual contém explicações sobre uma determinada parte do sistema.
As seções são organizadas em diretórios separados e localizadas no diretório /usr/man. Os
programas e arquivos são classificados nas seguintes seções:
1. Programas executáveis ou comandos internos (comandos do shell);
2. Chamadas do sistema (funções oferecidas pelo kernel);
3. Chamadas de Bibliotecas (funções dentro de bibliotecas do sistema);
4. Arquivos especiais (normalmente encontrados no diretório /dev);
5. Formatos de arquivos e convenções (/etc/inittab, por exemplo).;
6. Jogos;
7. Pacotes de macros e convenções (por exemplo, man);
8. Comandos de Administração do sistema (normalmente usados pelo root);
9. Rotinas do kernel (não padrões).
Na figura 2.1 é visto a execução do comando man ls. Um detalhe deve ser observado, a
página de manual é divido em algumas partes comuns:
• NAME - Nome do comando com breve descrição.
• SYNOPSIS - Sintaxe do comando com opções e argumentos.
• DESCRIPTION - Descrição detalhada do comando.
• SEE ALSO - Na grande maioria dos casos um comando está ligado a execução de diversos
outros comandos. Nesta parte do manual são colocados todos os comandos citados no
texto acima ou que têm alguma relação com o comando.
O manual é composto de outras partes menos importantes. Outro detalhe, o número da
seção sempre aparece entre parêntese “( )” logo após o nome do comando. No nosso exemplo,
aparece LS(1).
14
CAPÍTULO 2. COMANDOS BÁSICOS
Figura 2.1: Exemplo de execução do comando man
A documentação de um programa também pode ser encontrada em 2 ou mais categorias,
como é o caso do comando printf que é documentado na seção 1 (comando do shell ) e 3
(função de biblioteca). Por este motivo é necessário digitar man 3 printf para ler a página
sobre o formato do arquivo, porque o comando man procura a página de manual nas seções em
ordem crescente e a digitação do comando man printf abriria a seção 1.
A opção -k faz com que o comando man apresente diversas opções de busca em função da
palavra informada. Por exemplo, o comando man -k bash produz o seguinte resultado:
bash (1)
bash-builtins (7)
bashbug (1)
builtins (7)
rbash (1)
-
GNU Bourne-Again SHell
bash built-in commands, see bash(1)
report a bug in bash
bash built-in commands, see bash(1)
restricted bash, see bash(1)
2.3.1 Atividades sugeridas
1. Qual a função do comando wc ? Quais são suas opções e o que representa cada uma delas
? Quais argumentos este comando aceita ?
2. Qual a função da opção -u do comando date ?
15
CAPÍTULO 2. COMANDOS BÁSICOS
3. Quais são as informações constantes do arquivo passwd ?
4. Qual é o comando correlato ao comando mesg ?
2.4 Comando passwd
Para se efetuar a troca de senha, inicialmente o comando pede, por medida de segurança,
que seja digitada a senha atual da conta. Em seguida pede que seja digitada a nova senha.
Por último, pede que seja digitada novamente a nova senha para verificação. Em todas estas
etapas as senhas digitadas não são apresentadas na tela por medida de segurança. A senha só
será trocada se a senha atual conferir com a cadastrada no sistema e a senha nova for digitada
igual na confirmação.
Algumas regras para criação de senhas:
• A senha deve ter no mı́nimo 6 caracteres.
• A senha deve ter no mı́nimo duas letras maiúsculas e/ou duas letras minúsculas e pelo
menos um dı́gito ou caractere especial.
• São aceitos somente os caracteres ASCII padrão de códigos 0 a 127.
• A senha deve diferenciar do nome da conta.
• A nova senha deve diferenciar da senha velha em pelo menos três caracteres.
2.4.1 Atividades sugeridas
1. Altere a sua senha para “cha”. O que aconteceu?
2. Altere a sua senha para “abacaxi”. O que aconteceu?
3. Altere a sua senha para “abacaxi#”. Tente alterar a senha para “abacate#”. O que
aconteceu?
4. Deixe sua senha alterada para uma outra senha que atenda aos requisitos de segurança
vistos.
2.5 Comando expr
O uso comum do expr no terminal é para fazer-se cálculos simples de adição, subtração,
divisão inteira e multiplicação. Ele apresenta a restrição de que se deve sempre colocar uma
barra invertida antes de algumas operações ou parênteses (exceto + e -) para que o shell não
interprete estes caracteres.
Exemplo: expr 14 + \( 10 \* 4 \) irá produzir o resultado 54.
16
CAPÍTULO 2. COMANDOS BÁSICOS
2.5.1 Atividades sugeridas
1. Qual é o resultado de ( 30 - 5 ) * 789 ?
2. Qual é o resultado de ( 20 / 4 ) * 15 + 4 ?
2.6 Caminho de arquivos
Sempre que precisamos localizar um arquivo para qualquer operação (ler, gravar, remover,
criar, etc.) o sistema operacional deve conhecer em que ponto do sistema de arquivos ele se
encontra. Isto é feito através da especificação de um caminho antes do nome do arquivo. Este
caminho, chamado de path, pode ser indicado de duas maneiras:
• Absoluto - O caminho absoluto sempre começa com uma barra (“/”). Este caminho dá
a localização do arquivo desde o diretório raiz do sistema. O sistema operacional, começa
pela raiz e vai seguindo os diretórios indicados até o último.
• Relativo - A procura de um arquivo através de um caminho relativo começa no próprio
diretório atual da sessão.
2.7 Comandos básicos
Os comandos a seguir implementam operações básicas em arquivos:
• ls: listar o conteúdo do diretório corrente (ou de um diretório dado).
marcos@laureano:~$ ls -l
total 96
drwxr-xr-x
2 root root
drwxr-xr-x
3 root root
lrwxrwxrwx
1 root root
drwxr-xr-x 12 root root
drwxr-xr-x 121 root root
drwxr-xr-x
3 root root
drwxr-xr-x
2 root root
lrwxrwxrwx
1 root root
drwxr-xr-x 16 root root
drwxr-xr-x
4 root root
lrwxrwxrwx
1 root root
drwx-----2 root root
drwxr-xr-x
5 root root
drwxr-xr-x
2 root root
drwxr-xr-x
2 root root
/
4096
4096
11
14080
12288
4096
4096
33
12288
4096
4
16384
4096
4096
4096
2008-02-28
2008-02-28
2008-02-27
2008-03-22
2008-03-23
2008-02-27
2007-10-15
2008-02-27
2008-02-28
2008-02-28
2008-02-27
2008-02-27
2008-03-22
2007-10-08
2007-10-15
17
09:52
22:28
15:18
22:13
00:06
15:26
21:16
15:50
22:00
22:00
15:18
15:17
22:13
07:39
21:16
bin
boot
cdrom -> media/cdrom
dev
etc
home
initrd
initrd.img -> boot/initrd.img-2.6.2
lib
lib32
lib64 -> /lib
lost+found
media
mnt
opt
CAPÍTULO 2. COMANDOS BÁSICOS
dr-xr-xr-x 143 root root
drwxr-xr-x 11 root root
drwxr-xr-x
2 root root
drwxr-xr-x
2 root root
drwxr-xr-x 12 root root
drwxrwxrwt 13 root root
drwxr-xr-x 12 root root
drwxr-xr-x 16 root root
lrwxrwxrwx
1 root root
0
4096
4096
4096
0
4096
4096
4096
30
2008-03-22
2008-03-03
2008-03-03
2007-10-15
2008-03-22
2008-03-23
2008-02-28
2008-02-29
2008-02-27
17:28
14:33
14:36
21:16
17:28
00:10
11:46
17:03
15:50
proc
root
sbin
srv
sys
tmp
usr
var
vmlinuz -> boot/vmlinuz-2.6.22-14-g
• rm: O comando rm serve para eliminar um arquivo do sistema de arquivos. Ele só fará
a remoção de diretórios se for especificada a opção -r. Com esta opção todo o diretório
é excluı́do, inclusive todos os seus subdiretórios, indiferente se o mesmo possui ou não
arquivos.
• mv: O comando mv permite a movimentação de um arquivo ou diretório de um local no
sistema para outro. Possui três formas básicas: A primeira forma permite que se mude o
nome do arquivo origem para o nome do arquivo destino (mesmo diretório); A segunda
forma do comando faz a movimentação de todos os arquivos especificados para o diretório
informado como destino e a terceira forma é similar a primeira, mas em vez de arquivo é
utilizado diretórios.
• cp: O comando cp permite a cópia de arquivos e diretórios. Existem três formas básicas
do comando: cópia de arquivos para arquivos, cópia de arquivos para diretórios e cópia
de diretórios.
• cat: apresentar o conteúdo de arquivos.
• more: visualizar o conteúdo de arquivos (paginado).
• ln: O comando ln faz uma ligação (link ) de um arquivo existente com um novo nome.
Podemos assumir que com este comando são criados dois nomes para se referenciar ao
mesmo conjunto de dados. O mais correto é trabalhar com links simbólicos , através do
comando ln -s. A funcionalidade principal do link, ou seja, de se ter mais de um nome
para o mesmo conjunto de dados continua a mesma, sendo que o link simbólico difere
somente na implementação interna. Em vez de as duas entradas no diretório possuı́rem
o mesmo inode, no link simbólico um arquivo aponta para o outro e este aponta para
os dados. Esta implementação permite que se faça links simbólicos para arquivos que
residem em sistema de arquivos diferentes (discos diferentes).
• head: O comando head mostra na tela as primeiras linhas ou caracteres dos arquivos
especificados como argumento.
marcos@laureano:~$ head /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
18
CAPÍTULO 2. COMANDOS BÁSICOS
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
• tail: Este comando mostra a última parte de um arquivo, contado em blocos, caracteres
ou linha. Quando não se coloque nenhuma opção, o comando assumirá que se está se
pedindo em linhas.
marcos@laureano:~$ tail /etc/passwd
dhcp:x:100:101::/nonexistent:/bin/false
syslog:x:101:102::/home/syslog:/bin/false
klog:x:102:103::/home/klog:/bin/false
messagebus:x:103:109::/var/run/dbus:/bin/false
hplip:x:104:7:HPLIP system user,,,:/var/run/hplip:/bin/false
avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:106:114:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
haldaemon:x:107:116:Hardware abstraction layer,,,:/home/haldaemon:/bin/false
gdm:x:108:118:Gnome Display Manager:/var/lib/gdm:/bin/false
marcos:x:1000:1000:Marcos Laureano,,,:/home/marcos:/bin/bash
• wc: O comando wc faz a contagem das linhas, palavras e caracteres de todos os arquivos
fornecidos como parâmetros.
marcos@laureano:~$ wc /etc/passwd
28
44 1294 /etc/passwd
Os comandos usados para navegação na árvore de diretórios são similares aos usados em
outros sistemas operacionais:
• pwd : indica qual o diretório corrente do shell.
• cd : troca de diretório:
• cd dir : muda para o diretório dir.
• cd .. : muda para o diretório pai imediatamente superior.
• cd -: volta para o último diretório visitado.
• cd : volta ao diretório HOME.
• mkdir dir: criação do diretório dir.
• rmdir dir: remoção do diretório dir.
19
CAPÍTULO 2. COMANDOS BÁSICOS
2.8 Diretórios Especiais “.” e “..”
Toda vez que um diretório é criado, sempre são criadas duas entradas no mesmo. Uma
entrada, com o nome de “.” , referencia-se ao próprio diretório criado. A outra entrada, com o
nome de “..”, é uma referência ao diretório anterior, ou diretório pai, na estrutura do sistema
de arquivos.
Estes dois arquivos podem ser usados para compor qualquer caminho, relativo ou absoluto,
dentro dos comandos do Unix/Linux, e visam a facilitar a digitação de comandos.
Normalmente eles não aparecem na relação de arquivos pois o sistema esconde todos os
arquivos que começam com um ponto em seu nome. Para que se liste estas duas entradas
devemos usar a opção “-a” do comando ls.
2.8.1 Atividades sugeridas
1. Se posicione no diretório /tmp.
2. O que acontecerá se for digitado neste diretório o comando ls -l .. ? Explique.
3. Quais as 2 possı́veis formas de se posicionar no diretório /etc a partir do diretório /tmp
?
2.9 Atributos de Arquivos
Qualquer arquivo no sistema operacional nada mais é do que uma seqüência de bytes, armazenados em um dispositivo de acesso direto (disco), que possui certos atributos. Estes atributos
são manipulados pelo sistema operacional sempre que for realizado um acesso sobre o arquivo.
Os atributos são:
• Tipo - Indica se um arquivo armazenado no sistema de arquivos é um arquivo propriamente dito ou um diretório. Também é utilizado para diferenciar outros tipos de arquivos
dentro do sistema de arquivos. Estes tipos podem ser:
–
–
–
–
d: Um diretório
-: Arquivo normal de dados
l: Arquivo ligado simbolicamente (simbolic link)
c: Arquivo especial de controle de dispositivos orientados a caractere (device file).
No sistema estes arquivos ficam debaixo do diretório /dev.
– b: Arquivo especial de controle de dispositivos orientados a bloco
– p: Arquivo pipe com nome
• Permissões - O atributo permissão, também conhecido como mode, ou modo de arquivo,
indica qual o tipo de acesso que um usuário pode fazer sobre o arquivo.
20
CAPÍTULO 2. COMANDOS BÁSICOS
• Links - Indica de quantas maneiras (nomes) este arquivo está sendo referenciado.
• Dono (owner) - Neste campo é colocada a identificação do usuário (user ID) a que
pertence o arquivo.
• Grupo (group) - Neste campo é colocada a identificação do grupo (group ID) a que
pertence o arquivo. Este campo e o anterior, junto com as permissões é que vão liberar
ou impedir o acesso do arquivo por outra pessoa que não seja o dono.
• Tamanho - Tamanho do arquivo.
• Nome - Nome do arquivo. Quando se usa o sistema de arquivos longo, o nome de um
arquivo pode ter até um máximo de 255 caracteres quaisquer.
2.9.1 Atividades sugeridas
1. Utilizando o comando ls -la verifique os atributos dos arquivos de seu diretório home.
2. Quais arquivos são diretórios?
2.10 Comandos avançados
Os comandos abaixo são muito úteis na manipulação de arquivos:
• grep: permite procurar strings dentro de arquivos de texto. Exemplos:
– Procurar todas as linhas contendo ’tcsh’ em /etc/passwd: grep tcsh /etc/passwd
– Procurar todas as linhas que não contenham tcsh em /etc/passwd:
grep -v tcsh /etc/passwd
• find: permite encontrar arquivos que satisfaçam certas caracterı́sticas. É possı́vel fazer-se
conjunções com os comandos de seleção através dos argumentos -a para conjunção “e”
e -o para a conjunção “ou”. Pode-se também agrupar mais de um critério através da
colocação de parênteses. Os parênteses devem ser precedidos por uma barra invertida e
devem ser colocados precedidos e sucedidos por um ou mais caracteres em branco.
Vejamos alguns exemplos de procura:
– Procurar
todas
as
entradas
*txt
dentro
do
diretório
/usr:
find /usr -name ’*txt’ -print
– Procurar todas as entradas *ab* ou *cd* (maı́usculas ou minúsculas) presentes em
/opt:find /opt -iname ’*ab*’ -or -iname ’*cd*’
– Procurar todas as entradas acessadas a mais de 3 dias em /etc:
find /etc -atime +3
– Procurar todas as entradas modificadas a menos de 2 dias em /etc que tenham mais
de 5 Kbytes de tamanho:find /etc -mtime -2 -and -size +5k
21
CAPÍTULO 2. COMANDOS BÁSICOS
– Procurar todos os diretórios dentro de /opt cujo grupo tenha acesso em
escrita:find /opt -type d -perm +g+w
• touch: atualizar a data de um arquivo
• diff : comparar dois arquivos, mostrando as diferenças entre eles.
Para maiores informações sobre as opções disponı́veis para esses comandos, consulte as
páginas de manual do sistema.
2.11 Informações em arquivos
Vários comandos permitem obter maiores informações sobre arquivos e sistemas de arquivos.
Eis os principais:
• stat: detalhes sobre um arquivo ou diretório (i-nodes).
marcos@laureano:~$ stat /bin/ls
File: ‘/bin/ls’
Size: 89824
Blocks: 184
IO Block: 4096
Device: 804h/2052d
Inode: 4725785
Links: 1
Access: (0755/-rwxr-xr-x) Uid: (
0/
root)
Gid: (
Access: 2008-03-22 23:42:12.000000000 -0300
Modify: 2007-09-28 19:06:14.000000000 -0300
Change: 2008-02-27 15:18:18.000000000 -0300
arquivo comum
0/
root)
• file : identificar o conteúdo de um arquivo, analisando-o.
marcos@laureano:~$ file /etc/*
/etc/acpi:
directory
/etc/adduser.conf:
ASCII English text
/etc/adjtime:
ASCII text
/etc/aliases:
ASCII text
/etc/alternatives:
directory
/etc/anacrontab:
ASCII text
/etc/apm:
directory
/etc/apparmor:
directory
/etc/apparmor.d:
directory
/etc/apport:
directory
/etc/apt:
directory
/etc/at.deny:
writable, regular file, no read permission
/etc/avahi:
directory
/etc/bash.bashrc:
ASCII English text
/etc/bash_completion:
ASCII Pascal program text
/etc/bash_completion.d:
directory
22
CAPÍTULO 2. COMANDOS BÁSICOS
/etc/belocs:
/etc/bindresvport.blacklist:
(continua...)
directory
ASCII English text
• whereis : indica onde estão os binários, fontes e páginas de manual de um comando
dado.
marcos@laureano:~$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz
• which : indica o caminho completo para o comando dado.
marcos@laureano:~$ which vim
/usr/bin/vim
• du : indica o espaço usado em disco pelos arquivos ou diretórios dados.
marcos@laureano:/home$ du -h /root
8,0K
/root/.wireshark
8,0K
/root/.config/gtk-2.0
12K
/root/.config
196K
/root/.synaptic/log
204K
/root/.synaptic
4,0K
/root/.mozilla
4,0K
/root/.gconf
4,0K
/root/.gconfd
4,0K
/root/.gnome2_private
4,0K
/root/.gnome2/accels
4,0K
/root/.gnome2/network-admin-locations
20K
/root/.gnome2
4,0K
/root/.wapi
288K
/root
• df : informações sobre os sistemas de arquivos disponı́veis na máquina e sua ocupação.
marcos@laureano:/home$ df -h
Sist. Arq.
Tam
Usad Disp Uso% Montado em
/dev/sda4
38G 5,2G
31G 15% /
varrun
2,0G
88K 2,0G
1% /var/run
varlock
2,0G 4,0K 2,0G
1% /var/lock
udev
2,0G
96K 2,0G
1% /dev
devshm
2,0G
0 2,0G
0% /dev/shm
lrm
2,0G
38M 1,9G
2% /lib/modules/2.6.22-14-generic/volatile
/dev/sda1
41G 6,3G
34G 16% /media/sda1
/dev/sda2
71G
32G
39G 46% /media/sda2
• tree : apresenta na tela uma estrutura de diretórios, com ou sem os arquivos.
23
CAPÍTULO 2. COMANDOS BÁSICOS
marcos@laureano:/$ tree -d -L 1 /etc
/etc
|-- NetworkManager
|-- X11
|-- acpi
|-- alternatives
|-- apm
|-- apparmor
|-- apparmor.d
|-- apport
|-- apt
|-- avahi
|-- bash_completion.d
|-- belocs
|-- bluetooth
|-- bonobo-activation
|-- brltty
|-- calendar
|-- chatscripts
|-- compizconfig
|-- console-setup
|-- console-tools
|-- cron.d
|-- cron.daily
|-- cron.hourly
|-- cron.monthly
|-- cron.weekly
|-- cups
|-- dbus-1
|-- default
|-- defoma
|-- devfs
|-- dhcp3
|-- dictionaries-common
|-- discover.d
|-- dpkg
|-- emacs
|-- esound
|-- event.d
|-- firefox
|-- fonts
|-- foomatic
24
CAPÍTULO 2. COMANDOS BÁSICOS
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|--
gamin
gconf
gdm
gimp
gnome
gnome-app-install
gnome-system-tools
gnome-vfs-2.0
groff
grub.d
gtk-2.0
hal
hotplug
hp
init.d
initramfs-tools
iproute2
java
jvm.d
laptop-mode
ld.so.conf.d
ldap
libgda-3.0
libpaper.d
logcheck
logrotate.d
lsb-base
menu
menu-methods
modprobe.d
modutils
mono
mysql
ndiswrapper
network
openoffice
opt
pam.d
pango
pcmcia
perl
power
25
CAPÍTULO 2. COMANDOS BÁSICOS
|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-‘--
ppp
pulse
purple
python
python2.5
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rcS.d
readahead
resolvconf
samba
sane.d
scim
security
sgml
skel
smartmontools
sound
ssh
ssl
terminfo
tex4ht
texmf
tidy
udev
update-notifier
vim
w3m
wpa_supplicant
xdg
xml
118 directories
26
3 Permissões em arquivos
3.1 Definições básicas
O Unix/Linux possui um sistema de controle de acesso ao sistema de arquivos seguindo o
paradigma de Listas de Controle de Acesso (ACL - Access Control Lists). A cada arquivo ou
diretório são associados:
• Um usuário proprietário (owner ). Normalmente é quem criou o arquivo.
• Um grupo proprietário. Normalmente é o grupo primário de quem criou o arquivo, mas
este pode mudá-lo para outro grupo do qual ele também faça parte.
• Permissões de acesso definidas para o usuário, o grupo e outros usuários (terceiros).
As permissões definidas para os arquivos são:
• Leitura: permitindo acesso ao conteúdo do arquivo.
• Escrita: permitindo modificar o conteúdo do arquivo.
• Execução: permitindo executar o arquivo (caso seja um executável ou script).
As permissões definidas para os diretórios são similares:
• Leitura: permitindo acesso ao conteúdo do diretório (listar os arquivos presentes).
• Escrita: permitindo modificar o conteúdo do diretório (criar ou apagar arquivos).
• Execução: permitindo entrar no diretório, ou atravessá-lo.
Pode-se afirmar que um arquivo é protegido contra leituras ou modificações por suas próprias
permissões, e contra apagamentos ou renomeações pelas permissões do diretório onde ele se
encontra.
3.2 Consultando permissões
As permissões de acesso a arquivos e diretórios podem ser consultadas através de uma listagem
de diretório longa, usando o comando ls -l. Uma listagem tı́pica deste comando seria:
27
CAPÍTULO 3. PERMISSÕES EM ARQUIVOS
marcos@laureano:/etc/apt$ ls -l
total 32
drwxr-xr-x 2 root root 4096 2008-02-27
-rw------- 1 root root
0 2007-10-15
-rw-r--r-- 1 root root 1323 2008-03-27
drwxr-xr-x 2 root root 4096 2007-10-15
-rw-r--r-- 1 root root 4203 2008-02-27
-rw------- 1 root root 1200 2007-10-15
-rw-r--r-- 1 root root 2393 2007-10-15
-rw-r--r-- 1 root root 2381 2007-10-15
15:50
21:18
10:36
18:44
15:49
21:18
21:19
21:18
apt.conf.d
secring.gpg
sources.list
sources.list.d
sources.list.old
trustdb.gpg
trusted.gpg
trusted.gpg~
Vamos analisar melhor os caracteres das colunas iniciais da listagem de diretório apresentada
acima. As entradas de diretório em um sistema UNIX têm seu tipo indicado pelo primeiro
caractere da listagem de diretório longa. Os tipos de entradas mais freqüentes são:
• -: arquivo normal
• d: diretório
• l: link simbólico (atalho)
• b: dispositivo (mapeado em /dev) orientado a blocos (como os discos rı́gidos)
• c: dispositivo (mapeado em /dev) orientado a caracteres (como modens e portas seriais)
• s: socket mapeado em arquivo (para comunicação entre processos)
• p: FIFO ou Named Pipe (outro meio de comunicação entre processos)
Os demais caracteres representam os direitos de acesso do usuário (user ), do grupo (group)
e de terceiros (others), em grupos de três caracteres:
• r: permissão de leitura (read ).
• w: permissão de escrita (write).
• x: permissão de execução (eXecute).
• -: indica que o respectivo direito está negado.
• S: bits SUID e SGID setados (veremos mais tarde).
Vejamos um exemplo: -rw-r----- 1 laureano
users
4956 mar 26 20:34 descricao.html
A linha de listagem acima indica que:
• A entrada corresponde a um arquivo normal (o primeiro caractere é “-”)
• O proprietário do arquivo descricao.html é o usuário laureano.
• O proprietário possui direito de leitura e escrita sobre o arquivo, mas não de execução.
• O arquivo também está ligado ao grupo users.
28
CAPÍTULO 3. PERMISSÕES EM ARQUIVOS
• O grupo possui apenas direito de leitura sobre o arquivo.
• Outros usuários (terceiros) não possuem nenhum direito de acesso ao arquivo.
3.3 Comando chmod
Este comando permite alterar as permissões dos arquivos e diretórios. Somente o proprietário
de um arquivo pode alterar suas permissões, mesmo que o grupo ou outros possuam direitos
de escrita sobre o arquivo. O comando chmod tem a seguinte sintaxe:
chmod
[opç~
oes] permiss~
oes arquivo(s)
A definição das permissões pode ser feita de forma simbólica ou octal. A forma simbólica
é a mais simples e por isso a mais usada por iniciantes. A forma octal é, no entanto, mais
empregada, sobretudo em scripts antigos.
3.3.1 Modo Simbólico
Neste texto vamos nos restringir à forma simbólica. As permissões na forma simbólica têm a
seguinte sintaxe:
[u g o a]
[+ - =]
[r w x u g o X]
As letras do primeiro grupo indicam de quem as permissões devem ser alteradas:
• u: o usuário, proprietário do arquivo.
• g: o grupo proprietário do arquivo.
• o: outros (terceiros)
• a : todos (all )
Os sı́mbolos do segundo grupo indicam como os direitos devem ser alterados:
• +: os direitos indicados devem ser adicionados
• -: os direitos indicados devem ser suprimidos
• =: os direitos devem ser ajustados ao valor indicado
• r: permissão de leitura
• w: permissão de escrita
• x: permissão de execução (ou acesso ao diretório)
• u: usar as permissões atribuı́das ao usuário proprietário
• g: usar as permissões atribuı́das ao grupo proprietário
• o: usar as permissões atribuı́das a outros
29
CAPÍTULO 3. PERMISSÕES EM ARQUIVOS
Vejamos alguns exemplos:
• chmod o-w *.c: retira de terceiros a permissão de escrita sobre todos os arquivos C no
diretório corrente.
marcos@laureano: ls -l
-rw-rw-rw- 1 laureano
-rwxrwxrwx 1 laureano
prof
prof
523
2321
Mar 27
Mar 25
08:51 main.c
09:37 funct.c
523
2321
Mar 27
Mar 25
08:51 main.c
09:37 funct.c
marcos@laureano: chmod o-w *.c
marcos@laureano: ls -l
-rw-rw-r-- 1 laureano
-rwxrwxr-x 1 laureano
prof
prof
• chmod go-rwx ~/*: retira do grupo e de terceiros todas as permissões (leitura, escrita,
execução) sobre todos os arquivos do diretório home.
marcos@laureano: ls -l
-rw-rw-rw- 1 laureano
-rwxrwxrwx 1 laureano
-rw-r--r-- 1 laureano
prof
523
prof 2321
prof 75643
Mar 27
Mar 25
Mar 27
08:51 main.c
09:37 funct.c
08:56 main.o
Mar 27
Mar 25
Mar 27
08:51 main.c
09:37 funct.c
08:56 main.o
marcos@laureano: chmod go-rwx ~/*
marcos@laureano: ls -l
-rw------- 1 laureano
-rwx------ 1 laureano
-rw------- 1 laureano
prof
523
prof 2321
prof 75643
• chmod u+w,go=r *.txt: dá ao usuário permissão de escrita e ajusta ao grupo e outros
somente permissão de leitura sobre os arquivos *.txt do diretório corrente. Observe que
as permissões podem ser agrupadas usando vı́rgulas:
marcos@laureano: ls -l
-r--rw-rw- 1 laureano
-rwxrwxrw- 1 laureano
prof 2386
prof 12875
Mar 27
Mar 25
08:51 readme.txt
09:37 instal.txt
Mar 27
Mar 25
08:51 readme.txt
09:37 instal.txt
marcos@laureano: chmod u+w,go=r *.txt
marcos@laureano: ls -l
-rw-r--r-- 1 laureano
-rwxr--r-- 1 laureano
prof 2386
prof 12875
O comando chmod possui uma opção interessante (-R), que permite atribuir permissões
de maneira recursiva, ou seja, nos conteúdos dos sub-diretórios. Assim, a melhor maneira de
30
CAPÍTULO 3. PERMISSÕES EM ARQUIVOS
proteger seu diretório home dos olhares indiscretos de membros do seu grupo e de terceiros é
executar o seguinte comando: chmod -R go-rwx ~
3.3.2 Modo Octal
O uso do comando chmod em modo octal é similar ao modo simbólico, embora mais difı́cil.
As expressões de permissão são substituı́das por valores octais representando as permissões
desejadas. Assim, se desejarmos atribuir as permissões rwxr-x--- a um arquivo teste.c,
devemos fazer:
r w x
1 1 1
7
r - x
1 0 1
5
- - 0 0 0
0
chmod 750 teste.c
express~
ao simbólica
em valores binários
em octal
o comando a executar
A definição binária leva aos seguintes valores:
• r=4
• w=2
• x=1
Isto quer dizer o valor 7 (rwx) é obtido pela soma de r + w + 1 (4 + 2 + 1), o valor 5 (r-x)
é obtido pela de r + x (4 + 1) e finalmente o valor 0 (—) indica que não houve nenhuma soma.
A definição de permissões em modo octal é bem menos flexı́vel que a notação simbólica, mas
ainda muito usada, por ser aceita em todos os sistemas Unix/Linux, mesmo os mais antigos.
Além disso, sua compreensão é importante para o uso do comando umask.
Observação: Cada número do conjunto octal, indica o perfil de um dos atributos (usuário,
grupo ou terceiros) do arquivo está sendo modificado. O uso do formato octal é similar ao uso
do formato simbólico ajustado.
Exemplo: chmod 750 teste.c é idêntico à chmod u=rwx,g=rx,o= teste.c.
3.4 O comando umask
O comando umask permite definir uma máscara padrão de permissões para a criação de novos
arquivos e diretórios. A sintaxe desse comando usa a notação octal, para definir as permissões
a suprimir nos novos arquivos e diretórios, a partir das permissões máximas. Vejamos um
exemplo:
31
CAPÍTULO 3. PERMISSÕES EM ARQUIVOS
r w x
- - 0 0 0
0
r - x
- w 0 1 0
2
- - - permiss~
oes
r w x permiss~
oes
1 1 1 permiss~
oes
7
máscara em
desejadas para os novos arquivos
a suprimir
a suprimir em binário
octal
Assim, o comando umask 027 permite definir a máscara desejada (rwxr-x---). Normalmente
esse comando é usado nos arquivos de configuração do shell, e nos scripts de instalação de
aplicações.
Uma forma definir a máscara de criação de arquivos é seguir o seguinte racicı́onio:
• Para que um arquivo fique com a permissão 750:
7 7 7
- 7 5 0
-------0 2 7
• Para que um arquivo fique com a permissão 640:
7 7 7
- 6 4 0
-------1 3 7
• Para que um arquivo fique com a permissão 666:
7 7 7
- 6 6 6
-------2 2 2
Ou seja, pega-se o valor que seria usado no comando chmod, subtrai-se o este valor de 777
e o resultado é utilizado no comando umask.
Observações:
• O valor do umask será utilizando somente na criação de novos arquivos. Arquivos já
existentes não terão sua permissão modificada.
• Por mais que defina no comando umask a permissão de execução, arquivos regulares jamais serão criados com esta permissão ativa. Esta permissão será habilitada somente para
a criação de novos diretórios. Esta é uma medida de precaução do sistema operacional,
pois senão, todos os novos arquivos criados seriam executáveis.
32
CAPÍTULO 3. PERMISSÕES EM ARQUIVOS
3.5 Os comandos chown e chgrp
O comando chown permite a mudança do usuário proprietário de um arquivo. Somente
o super-usuário pode fazê-lo. O comando chgrp permite a permite a mudança do grupo
proprietário de um arquivo. Somente o super-usuário (root) e o usuário proprietário do arquivo
podem fazê-lo. O proprietário só pode mudá-lo para um grupo ao qual ele também pertença.
Exemplos:
marcos@laureano: ls -l
drw------- 2 laureano
prof
0
Mar 27
08:51 dir1
marcos@laureano: chown joao dir1
(somente como root)
marcos@laureano: ls -l
drw------- 2 joao
Mar 27
prof
0
marcos@laureano: chgrp labin dir1
marcos@laureano: ls -l
drw------- 2 joao
labin
0
08:51 dir1
(somente como root ou usuário joao)
Mar 27
08:51 dir1
Estas restrições podem variar de sistema para sistema (configuração padrão do sistema). Por
exemplo, o sistema HP-UX até a versão 10.2 permitia que arquivos fossem doados, por usuários
comuns, para qualquer usuário e grupo.
3.6 O comando newgrp
Permite ao usuário mudar seu grupo principal para outro grupo ao qual ele também pertença
(somente para usuários que pertençam a mais de um grupo). Todos os arquivos e diretórios
criados a partir dessa mudança pertencerão ao novo grupo, e não mais ao grupo primário do
usuário. Por exemplo:
marcos@laureano: mkdir dir1
marcos@laureano: ls -l
drw------- 2 laureano
prof
0
Mar 27
marcos@laureano: newgrp ladis
marcos@laureano: mkdir dir2
33
08:51 dir1
CAPÍTULO 3. PERMISSÕES EM ARQUIVOS
marcos@laureano: ls -l
drw------- 2 laureano
drw------- 2 laureano
prof
ladis
0
0
Mar 27
Mar 27
08:51 dir1
08:52 dir2
Para voltar ao grupo primário basta executar exit. Para saber a quais o grupo primário e
secundário do usuário basta executar o comando id.
3.7 Atividades sugeridas
1. Você conseguiria mudar o nome de seu próprio diretório home ? Por que ?
2. Crie um arquivo teste com os direitos de acesso rw-rw-rw-, e indique como usar o comando
chmod para alterar seus direitos de acesso para:
•
•
•
•
rw-rw-r-r-xr-xr-x
rw-r--r-r--------
3. Execute o comando umask para que novos arquivos criados no sistema tenham as permissões de acesso definidas a seguir, e teste as máscaras definidas criando novos arquivos
(comando touch) e diretórios (comando mkdir). Finalmente, explique por que razão as
permissões dos arquivos não coincidem com as esperadas, mas as dos diretórios sim.
•
•
•
•
rw-rw-r-r-xr-xr-x
rw-r--r-r--------
4. Crie dois diretórios d1 e d2, com permissões respectivas r--r--r-- e r-xr-xr-x, e
compare as possibilidades de acesso em ambos. É possı́vel listar o conteúdo de ambos,
estando fora deles ? É possı́vel entrar em ambos ?
34
4 Lista de exercı́cios - 1a. Lista
A resolução dos exercı́cios faz parte da avaliação da disciplina. Para as respostas dos
exercı́cios, basta colocar o comando utilizado. Antes de executar cada comando, você deverá
anotar o resultado do comando pwd.
Exemplo: Liste o conteúdo do diretório /etc.
marcos@laureano:~$ pwd
/home/marcos
marcos@laureano:~$ ls /etc
<resultado do comando ls>
marcos@laureano:~$ cd /etc
marcos@laureano:/etc$ pwd
/etc
marcos@laureano:/etc$ ls
<resultado do comando ls>
Como pode ser observado, existe várias respostas possı́veis para o mesmo exercı́cio. Somente é
possı́vel determinar se o comando está correto, se soubermos em qual diretório você se encontra
antes da execução de cada comando.
1. Crie os seguintes diretórios abaixo do seu diretório home. Utilize no máximo 3 comandos
(veja a opção -p do comando mkdir. Digite o comando find . dentro do diretório
provas para verificar se você criou corretamente a estrutura de diretórios. O comando
tree também pode ser utilizado.
provas
|-- dira
|
|-- tst1
|
‘-- tst2
|-- dirb
|-- dirc
‘-- find
35
CAPÍTULO 4. LISTA DE EXERCÍCIOS - 1A. LISTA
2. Copie o arquivo passwd que está abaixo do /etc para o diretório tst1.
3. Crie os arquivos A1, A2 e A3 embaixo dos diretórios dira, dirb e dirc respectivamente.
Utilize o minı́mo de comandos possı́vel.
4. Deixe o arquivo A2 com a mesma data e hora do arquivo /etc/passwd (veja o comando
touch).
5. Qual o comando para trazer as respostas para o seguintes problemas matemáticos e relacionais ? Anote as respostas também.
•
•
•
•
•
(5 * 10) + 10 * 7
5>6
5<6
5=5
10 + 20 + ( 30 * 5 ) - 50
6. Apague o diretório dirb.
7. Como faço para verificar a taxa de ocupação do sistema de arquivos onde se encontra o
arquivo A3.
8. Crie os arquivos B1, B2, B3, B4, e B5 embaixo do diretório provas.
9. Renomeie o arquivo B1 para C1 e B3 para C3.
10. Copie todo o diretório dira (inclusive os arquivos embaixo dele) para debaixo do diretório
provas com o nome de direxrc.
11. Mova o diretório ts1 que está dentro do diretório direxrc para o diretório provas.
12. Quanto espaço o seu diretório home está ocupando até o momento ?
13. Imprima a primeiras 15 linhas do arquivo passwd (veja o comando head.
14. Imprima as últimas 5 linhas do arquivo passwd (veja o comando tail.
15. Quantos caracteres tem o arquivo passwd.
16. Com um único comando, copie todos os arquivos que tenham 1 no fim do nome e que
estejam embaixo do diretório home para o diretório find.
17. Mude a permissão do arquivo A3 para todos no sistema conseguirem ler. É possı́vel ?
Explique.
18. Anote a permissão atual antes de executar o comando. Mude a permissão do arquivo C3
para todos no sistema conseguirem ler e gravar no arquivo. Utilize a forma numérica e a
forma mnemônica.
19. Configure o sistema para que todos os arquivos criados a partir deste momento tenham
as seguintes permissões: total para usuário, leitura e execução para o grupo e execução
para os outros.
36
CAPÍTULO 4. LISTA DE EXERCÍCIOS - 1A. LISTA
20. Crie um arquivo chamado ARQLIXO embaixo do diretório provas e verifique se as permissões de criação de arquivo estão funcionamento conforme você configurou (veja novamente a explicação sobre o comando umask para te ajudar na resposta).
21. Crie um diretório chamado DIRLIXO embaixo do diretório provas e verifique se as permissões de criação de arquivo estão funcionamento conforme você configurou.
22. Qual a diferença dos dois comandos anteriores ?
37
5 Editor VI
Por mais que não usemos editores, eles fazem parte do dia-a-dia de quem trabalha com informática. Sempre iremos necessitar emitir relatórios, documentar programas, escrever códigos
de programas... Portanto, é essencial que saibamos como usar um editor de texto que esteja
disponı́vel no sistema.
Existem alguns editores de textos disponı́veis para Unix/Linux, porém o mais usado (e
normalmente o que sempre está disponı́vel) é o vi ou vim. Como qualquer editor de textos, o
aprendizado é essencialmente decorativo, sendo que somente a prática garantirá o aprendizado
real.
Não há a necessidade de decorar os comandos do vi, porém segue abaixo uma tabela para
consulta caso seja necessário.
Para se entrar no vi:
marcos@laureano:~$ vi arquivo
O vi trabalha em 2 modos: comando e operação Ao entrar no vi, estamos trabalhando no
modo de comando.
5.1 Movimentação do Cursor
• j - desce uma linha
• k - sobe uma linha
• h - cursor para esquerda
• l - cursor para direita
• <ENTER> - desce uma linha para primeiro caractere não branco
• 0 - retorna para inı́cio da linha
• $ - movimenta cursor para final da linha
Claro que nas versões mais atuais é possı́vel utilizar as setas do teclado normalmente.
38
CAPÍTULO 5. EDITOR VI
5.2 Controle de tela
• ^U - meia tela para cima
• ^D- meia tela para baixo
• ^B - uma tela para cima
• ^F - uma tela para baixo
• ^L - refaz a tela
5.3 Controle de palavras
• w - move o cursor para próxima palavra
• b - move o cursor para palavra anterior
• e - move o cursor para final da palavra
• dw - apaga a palavra
• cw - troca a palavra
5.4 Comandos de busca
• /string - procura o string no texto ”para frente”
• ? string - procura o string no texto ”para trás”
• n - repete a última busca para próxima ocorrência
• N - repete a última busca para ocorrência anterior
5.5 Comandos de cancelamento
• x - apaga o caracter sob o cursor
• X - apaga o caracter anterior ao cursor
• dd - apaga uma linha
• D - apaga a linha a partir do cursor
• J - apaga o ¡CR¿ do final da linha, juntando a linha de baixo com a de cima
39
CAPÍTULO 5. EDITOR VI
5.6 Comandos de inserção
• a - insere após o cursor
• A - insere no final da linha
• i - insere antes do cursor
• I - insere no inı́cio da linha
• p - recupera o buffer e o insere após a linha corrente
• P - recupera o buffer e o insere antes a linha corrente ¡ESC¿ - encerra o modo de inserção
5.7 Comandos de mudança
• cc - permite a troca de toda a linha
• C - permite a troca a partir do cursor até o final da linha
• s - mudança de um caracter
• S - mudança de toda a linha
• r - muda o caracter corrente pelo novo caracter
• R - permite escrever em cima do texto
5.8 Comandos gerais
• d objeto - apaga objeto
• c objeto - permite a mudança no objeto
• u - desfaz o último comando
• U - recupera a linha corrente
• y objeto - armazena o objeto na memória temporária
• Y - armazena a linha na memória temporária
• ZZ - grava o arquivo e encerra a sessão vi
5.9 Comandos no modo ex
• :w - grava o arquivo
• :wq - grava o arquivo e encerra a edição no vi
40
CAPÍTULO 5. EDITOR VI
• :q - encerra a edição quando não houve alteração
• :q! - abandona a edição
• :num - o cursor se desloca para linha num
• :!comando - executa o comando no shell
5.10 Comandos de configuração
• :set opção - configura o vi para opção desejada
• :set - mostra a configuração do vi (resumida)
• :set all - mostra a configuração completa do vi Utilizando o set pode-se configurar o vi
com as caracterı́sticas adequadas à aplicação de cada usuário, por exemplo:
– set number - liga a numeração de linhas
– set showmode - apresenta o modo de utilização do vi (”Insert mode”, ”Append
mode”ou ”Replace mode”)
• :map - mostra a configuração de teclado do vi
• :map <tecla> comando_vi - associa a <tecla> ao comando vi
Os comandos set e map para que fiquem sempre válidos, podem ser colocados no arquivo
de configuração do vi .exrc, no seu diretório home. Esse arquivo é lido toda vez que se abre
uma sessão.
Todos comandos do vi podem ser precedidos por um número, indicando o número de repetições do mesmo comando. Exemplo: 10j - movimenta o cursor 10 linhas para baixo
41
6 Sistemas de Arquivos
É criado durante a formatação da partição de disco. Após a formatação toda a estrutura
para leitura/gravação de arquivos e diretórios pelo sistema operacional estará pronta para ser
usada. Normalmente este passo é feito durante a instalação do sistema operacional 1 .
Cada sistema de arquivos tem uma caracterı́stica em particular, mas seu propósito é o mesmo:
Oferecer ao sistema operacional a estrutura necessária para ler/gravar os arquivos/diretórios.
6.1 Partições
São divisões existentes no disco rı́gido que marcam onde começa onde termina um sistema
de arquivos. Por causa destas divisões, pode-se usar mais de um sistema operacional no mesmo
computador (como o Linux, Windows e DOS), ou dividir o disco rı́gido em uma ou mais partes
para ser usado por um único sistema operacional.
Para gravar os dados, o disco rı́gido deve ser primeiro particionado (usando o fdisk), escolher
o tipo da partição (Linux Native, Linux Swap, etc) e depois aquela partição deve ser formatada
com o mkfs.
Depois de criada e formatada, a partição será identificada como um dispositivo no diretório
/dev e deverá ser montada para permitir seu uso no sistema.
Uma partição de disco não interfere em outras partições existentes, por este motivo é possı́vel
usar o Windows, Linux e qualquer outro sistema operacional no mesmo disco.
Para particionar (dividir) o disco rı́gido em uma ou mais partes é necessário o uso de um
programa de particionamento. Os programas mais conhecidos para particionamento de discos
no Unix/Linux são fdisk, cfdisk e o GParted.
6.2 Estratégias de Particionamento
Um dos aspectos que devem ser incluı́dos no planejamento da instalação é como será feito
o particionamento do(s) disco(s) do sistema. Embora isso dependa basicamente da utilização
1
Parte do material aqui apresentado foi retirado do Guia Foca Linux e da Conectiva.
42
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
pretendida para o sistema, existem alguns fatores que devem ser levados em consideração no
momento de decidir como o disco deve ser particionado.
Um princı́pio básico é dividir o disco em várias partições em vez de usar uma única partição
ocupando o disco inteiro. Isto é recomendável por diversas razões:
• Um usuário ou um programa mal-comportado pode lotar uma partição na qual tenha
permissão de escrita (áreas temporárias e de armazenamento de logs são suscetı́veis a este
problema). Se os programas do sistema estiverem em outra partição eles provavelmente
não serão afetados, evitando que o sistema trave.
• Caso uma partição seja corrompida por alguma razão, as outras partições provavelmente
não serão afetadas.
• Em alguns sistemas (notadamente sistemas Unix), é possı́vel definir algumas caracterı́sticas individuais para cada partição. Por exemplo, algumas partições podem ser
usadas em modo read-only, o que é útil para partições que contenham binários que são
modificados com pouca freqüência.
• Em alguns casos a existência de várias partições permite múltiplas operações de disco em
paralelo e/ou o uso de otimizações individuais para cada partição, o que pode aumentar
significativamente o desempenho do sistema.
• O uso de várias partições geralmente facilita o procedimento de backup do sistema, pois
simplifica funções como:
– Copiar partições inteiras de uma só vez;
– Excluir partições individuais do procedimento;
– Fazer backups em intervalos diferentes para cada partição.
As partições especı́ficas que devem ser criadas variam de sistema para sistema, não existindo
uma regra que possa ser sempre seguida. Entretanto, recomenda-se avaliar a conveniência da
criação de partições separadas para as áreas onde são armazenados itens como:
• programas do sistema operacional;
• dados dos usuários;
• logs;
• arquivos temporários;
• filas de envio e recepção de e-mails (servidores SMTP);
• filas de impressão (servidores de impressão);
• repositórios de arquivos (servidores FTP);
• páginas Web (servidores HTTP).
Note que a lista acima não é exaustiva, podendo existir outras áreas do sistema que mereçam
uma partição separada. Da mesma forma, existem itens dentre os acima que não se aplicam
43
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
a determinados casos. Consulte a documentação do seu sistema operacional para ver se ela
contém recomendações a respeito do particionamento adequado dos discos.
As partições devem ser dimensionadas de acordo com os requisitos de cada sistema. Em
muitos casos, o tamanho ocupado pelo sistema operacional é fornecido na sua documentação,
o que pode auxiliar na determinação do tamanho de algumas partições.
Qualquer que seja a estrutura de particionamento escolhida é recomendável que você tenha
pelo menos um esboço dela por escrito antes de começar a instalação. Isto agiliza o processo
de instalação e reduz a probabilidade de que se faça uma determinada escolha sem que as suas
conseqüências sejam adequadamente previstas.
6.3 Segurança de Arquivos e Sistemas de Arquivos
É inútil dotar o sistema de ferramentas de criptografia e autenticação, se o mesmo grava
seus dados de forma não segura, em arquivos que possam ser indevidamente acessados. Neste
contexto, o Sistema de Arquivos tem especial importância, pois é ele que responde pelo acesso
e os direitos de acesso que os usuários têm sobre os arquivos.
6.3.1 Permissões de Arquivos
Além dos atributos básicos que um arquivo pode ter (read, write e execute), existem dois
outros atributos de extrema relevância para a segurança, que são:
• SUID: Este atributo, quando definido em um arquivo, indica que este, caso seja um
executável ou um script, quando do momento de sua execução, terá o seu userid atribuı́do
de acordo com o userid de quem é o proprietário do arquivo, ao invés de quem o executa.
Este tipo de privilégio é especialmente perigoso, pois um arquivo cujo dono seja o root,
com SUID setado e que possa ser executado por qualquer usuário, independente de quem
o execute, terá os privilégios de um processo do próprio root.
• SGID: Este atributo, quando setado em um arquivo, similarmente ao SUID, fará com
que o processo herde os privilégios do grupo do proprietário do arquivo.
Apesar de muitas versões/distribuições do Unix/Linux, por padrão, ajustarem as permissões
dos arquivos especiais do sistema, é sempre aconselhável tomar certos cuidados:
• Em todos os arquivos de log do sistema, como por exemplo, o arquivo /var/log/messages
e /var/log/secure, ajustar suas permissões para 600 (-rw------), o que significa que
apenas root poderá ler e gravar nestes arquivos. Isto porque nestes arquivos podem
aparecer informações sobre possı́veis erros no sistema, que podem vir a ser explorados
pelo atacante.
44
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
• Verificar também se os arquivos de configuração do sistema (geralmente situados no diretório /etc) possui o atributo de gravação definido apenas para root (644).
• Existe um atributo pouco conhecido, que na verdade diz respeito apenas ao sistema de
arquivos do Linux, que permite que um arquivo nunca possa ser modificado/apagado. Este
atributo pode ser setado e removido apenas pelo root e pode ser uma forma interessante de
reforçar a segurança de arquivos crı́ticos. Isto pode ser feito através da linha de comando
chattr +i arquivo.
• Como root, verificar a PATH e certificar-se de que realmente esteja executando o programa que deseja, no local que este deveria estar. Há, na maioria das listas de bugs
de segurança, relatos sobre incidentes onde root inadvertidamente executa programas
maliciosos do usuário, pensando serem programas do sistema.
• Procurar por arquivos que possuam os SUID ou SGID setados; eles podem ser fonte potencial de problemas.
Para fazer isto, execute o comando
find / -type f \( -perm -04000 -o -perm -02000 \), que irá listar todos os arquivos com algum destes privilégios setados.
• Arquivos e diretórios que podem ser gravados por qualquer usuário (atributo w setado
para outros) são um considerável ponto de vulnerabilidade. Executar um comando
find / -perm -2 -print e verificar se esta permissão realmente é necessária para estes
arquivos.
• Antes de mudar a permissão de qualquer arquivo do sistema, primeiro tenha certeza de
que você sabe o que está fazendo. Nunca mude as permissões de um arquivo para tornar
seu trabalho mais fácil. Sempre determine porque aquele arquivo tem aquelas permissões,
antes de mudá-las.
6.3.2 Integridade de Arquivos
Um dilema ao qual vivem submetidos os administradores de sistema é o de saber se os arquivos
do sistema não foram indevidamente alterados. Uma forma de tentar detectar a possı́vel ação
de um intruso é através da utilização de ferramentas como o Tripwire. Este pacote lê um
arquivo de configuração que indica quais arquivos e diretórios devem ser monitorados, e então
acompanha as modificações sobre estes.
Para cada arquivo/diretório especificado, o Tripwire calcula um checksum deste e com
isto verifica se o arquivo sofreu qualquer tipo de alteração, reportando os resultados. Há a
possibilidade de se escolher entre diferentes algoritmos de assinatura digital, alguns bastante
robustos criptograficamente.
O Tripwire cria uma base de dados contendo os checksums dos arquivos monitorados, e é
extremamente aconselhável que este arquivo fique numa mı́dia que não possa ser corrompida
por um invasor. Desta forma, aconselha-se que a base de dados, ou seja, armazenada numa
45
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
mı́dia removı́vel, que deve ser removido e guardado em local seguro, ou num meio do tipo
write-once (uma única gravação, como os CDR’s tradicionais).
É aconselhável que o Tripwire seja periodicamente executado, e para tanto se pode colocar
o comando para execução na crontab do sistema.
O comando md5sum também poder ser utilizado para este propósito:
marcos@laureano:~$ md5sum /etc/hosts /etc/apt/sources.list /etc/network/interfaces
83f8abf1d36c9df53e2e8aa12148397e /etc/hosts
0d5ad540ee41fc3ec4b38046defe5ded /etc/apt/sources.list
b30b8bd1110e83cd81b8b5939e218137 /etc/network/interfaces
6.3.3 Cavalos de Tróia
O nome Cavalo de Tróia vem da história que justamente narra como soldados, escondidos
dentro de um cavalo de madeira que foi supostamente dado de presente, conseguiram entrar
na cidade de Tróia para invadi-la. Da mesma forma, muitas vezes quando um usuário faz o
download de um programa qualquer na Internet pode estar, inadvertidamente, trazendo junto
um sério risco para a segurança do sistema.
Muitos invasores divulgam na Internet programas que trazem dentro de si comandos que deliberadamente podem danificar o sistema, apagando arquivos ou alterando configurações. Podem
ainda enviar para alguém@algumlugar o arquivo de senhas ou outras informações sigilosas. Este
tipo de programa é que normalmente chamamos de Cavalo de Tróia.
Para evitar este tipo de risco, sempre vale seguir algumas regras:
• Quando for fazer o download de algum software crı́tico, principalmente aqueles que serão
utilizados por root, procurar utilizar um site confiável e conhecido publicamente. Sempre
evitar utilizar caches, ou mesmo copiar arquivos de áreas de usuários comuns.
• Muitos sites, como o caso da Red Hat, junto de seus arquivos também fornecem checksums
MD5 ou assinaturas PGP, que podem ser verificadas para comprovar a autenticidade/integridade dos arquivos.
• Apenas executar como root as tarefas mais importantes, e que somente podem ser executadas por root. Um erro comum é usar root para tarefas comuns, como editar um trabalho
ou mesmo entrar num chat. Inclusive vale citar que muitas versões de clientes IRC eram
Cavalos de Tróia, de modo que alguém como root, que inadvertidamente usasse um destes
programas, estaria expondo todo o sistema a um potencial ataque.
6.3.4 Sistemas de Arquivo Criptografados
Num caso extremo de segurança, onde o próprio acesso ao disco rı́gido não é garantido, pode
ser interessante criptografar os dados contidos no sistema de arquivos. Para tanto existe, para
46
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
o Linux, o Cryptographic File System (CFS), que usa um servidor NFS rodando na máquina
local para armazenar os arquivos criptografados.
Uma outra versão mais sofisticada do CFS é o TCFS (Transparent Cryptographic File System), que faz o mesmo que o CFS, mas de forma transparente, sendo integrado ao próprio
sistema de arquivos do Linux.
6.4 Criando uma partição - Comando fdisk
O fdisk é um comando do Unix/Linux para criar partições, sua operação é um pouco
complicada no inı́cio, pois sua interface é pouca amigável. Toda a navegação é feita através de
comandos simples.
Sua sintaxe é: fdisk [opç~
oes] [dispositivo]
Um exemplo:
• Iniciando e verificando o help
marcos@laureano:~$fdisk /dev/sda
O númeor de cilindros para este disco está configurado para 19457.
N~
ao existe nada de errado, mas isto é maior que 1024,
e pode em certas configuraç~
oes causar problemas com:
1) programas que executam em tempo de inicializaç~
ao (vers~
oes velhas do LILO)
2) inicializaç~
ao e programas de particionamento de outros OSs
(p.ex., DOS FDISK, OS/2 FDISK)
Comando (m para ajuda): m
Comando - aç~
ao
a
alterna a opç~
ao "inicializável"
b
edita rótulo BSD no disco
c
alterna a opç~
ao "compatibilidade"
d
exclui uma partiç~
ao
l
lista os tipos de partiç~
ao conhecidos
m
mostra este menu
n
cria uma nova partiç~
ao
o
cria uma nova tabela de partiç~
oes DOS vazia
p
mostra a tabela de partiç~
oes
q
sai sem salvar as alteraç~
oes
s
cria um novo rótulo de disco Sun vazio
t
altera a identificaç~
ao da partiç~
ao para o sistema
u
altera as unidades das entradas mostradas
v
verifica a tabela de partiç~
oes
47
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
w
x
grava a tabela no disco e sai
funcionalidade adicional (somente para usuários avançados)
Comando (m para ajuda):
• Listar partições ativas no sistema
marcos@laureano:~$ sudo fdisk -l /dev/sda
Disco /dev/sda: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = cilindros of 16065 * 512 = 8225280 bytes
Disk identifier: 0x18000000
Dispositivo Boot Inı́cio Fim Blocos Id Sistema
/dev/sda1
*
1
5222
41945683+
/dev/sda2
5223
14360
73400985
/dev/sda3
14361
14425
522112+
/dev/sda4
14426
19457
40419540
7
7
82
83
HPFS ou NTFS
HPFS ou NTFS
Linux swap / Solaris
Linux
Segue abaixo um passo a passo para criar-se 3 partições Linux com o fdisk, o /boot, uma
de troca e a partição raiz, num disco com o Windows já instalado.
O exemplo é de um disco de 6Gb, com 32Mb de RAM e o windows ocupando 5Gb.
• Já no fdisk, apertando-se p, aparece:
Disk /tmp/hda: 255 heads, 63 sectors, 784 cylinders
Units = cylinders of 16065 * 512 bytes
Device Boot Start
End
Blocks Id
/tmp/hda1
*
1
641
5148801
System
b
Win95 Fat32
• Então temos uma partição FAT com 5Gb e +ou- 1Gb sobrando. Para criar a partição do
/boot com 5Mb:
–
–
–
–
aperte n - para definir uma partição nova
aperte p - para definir uma partição primária
aperte 2 - para definir a partição primária de número 2
aperte 642 - para definir o primeiro cilindro da partição (que é o primeiro cilindro
disponı́vel*, neste caso o 642)
– aperte +5M - para definir o tamanho de 5Mb
– aperte p - para conferir a criação
• Para criar a partição de troca (swap) de 64Mb:
– aperte n - para definir uma partição nova
48
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
–
–
–
–
aperte
aperte
aperte
aperte
p - para definir uma partição primária
3 - para definir a partição primária de número 3
??? - sendo ???, o primeiro cilindro disponı́vel*
+64M - para definir o tamanho de 64Mb
• Agora precisamos dizer que seu tipo é Linux Swap.
–
–
–
–
aperte
aperte
aperte
aperte
t - para indicar a mudança de tipo
3 - para mudar o tipo da partição 3
82 - para definir o tipo Swap
p - para conferir a criação e o tipo
• Para criar a partição raiz (/) com o restante do espaço em disco:
–
–
–
–
–
aperte n - para definir uma partição nova
aperte p - para definir uma partição primária
aperte 4 - para definir a partição primária de número 4
aperte ??? - sendo ???, o primeiro cilindro disponı́vel*
aperte 784 - para definir esta partição como ocupante até o fim do disco (último
cilindro, neste caso, 784)
– aperte p - para conferir a criação e o tipo
• Seu particionamento ficará mais ou menos assim:
Disk /tmp/hda: 255 heads, 63 sectors, 784 cylinders
Units = cylinders of 16065 * 512 bytes
Device
Boot Start
/tmp/hda1
/tmp/hda2
/tmp/hda3
/tmp/hda4
*
1
642
???
???
End
641
???
???
784
Blocks
Id
5148801
5240
68704
1043615
b
83
82
83
System
Win95
Linux
Linux
Linux
Fat32
native
swap
native
• Confira se tudo está certo, e depois aperte w para gravar a tabela de partições e sair do
fdisk.
6.5 Partição EXT2 (Linux Native)
A partição EXT2 é o tipo usado para criar o sistema de arquivos Linux Native usado para
armazenar o sistema de arquivos EXT2 (após a formatação) e permitir o armazenamento de
dados.
49
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
Este tipo de partição é normalmente identificado pelo código 83 nos programas de particionamento de disco. Note que também é possı́vel criar um sistema de arquivos EXT2 em
um arquivo (ao invés de uma partição) que poderá ser montado e acessado normalmente pelo
sistema de arquivos.
Logo que foi inventado, Linux utilizava o sistema de arquivos Minix (e conseqüentemente
uma partição Minix) para o armazenamento de arquivos. Com a evolução do desenvolvimento,
foi criado o padrão EXT (Extended Filesystem) e logo evoluiu para o EXT2 (Second Extended
Filesystem) que ainda é usado atualmente.
6.5.1 Criando um sistema de arquivos EXT2 em uma partição
O utilitário usado para formatar uma partição EXT2 é o mkfs.ext2. Após terminar este
passo, seu sistema de arquivos EXT2 estará pronto para ser usado.
Após particionar seu disco rı́gido e criar uma (ou várias) partições EXT2, use o comando:
mkfs.ext2 /dev/hda?
Onde a ? em hda? significa o número da partição que será formatada. A identificação da
partição é mostrada durante o particionamento do disco, anote se for o caso. hda é o primeiro
disco rı́gido IDE, hdb é o segundo disco rı́gido IDE. Discos SCSI são identificados por sda?,
sdb?, etc..
Algumas opções são úteis ao mkfs.ext2:
• -c - Procura blocos danificados na partição antes de criar o sistema de arquivos.
• -L NOME - Coloca um nome (label) no sistema de arquivos.
• -b NUM - Define o tamanho do bloco, em bytes.
Agora para acessar a partição deverá ser usado o comando: mount /dev/hda? /mnt -t ext2
6.5.2 Criando um sistema de arquivos EXT2 em um arquivo
É possı́vel criar um sistema de arquivos EXT2 em um arquivo que poderá ser montado e
acessado normalmente como se fosse uma partição normal. Isto é possı́vel por causa do recurso
loop oferecido pelo kernel do Linux. Os dispositivos de loop estão disponı́veis no diretório /dev
com o nome loop?.
Isto é possı́vel usando o comando dd e o mkfs.ext2. Veja passo a passo como criar o sistema
de arquivos EXT2 em um arquivo:
Use o comando dd if=/dev/zero of=/tmp/arquivo-ext2 bs=1024 count=10000 para
criar um arquivo arquivo-ext2 vazio de 10Mb de tamanho em /tmp. Você pode modificar
os parâmetros de of para escolher onde o arquivo será criado, o tamanho do arquivo poderá
ser modificado através de count.
50
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
Formate o arquivo com mkfs.ext2 /tmp/arquivo-ext2. Ele primeiro dirá que o arquivo
arquivo-ext2 não é um dispositivo de bloco especial (uma partição de disco) e perguntará se
deve continuar, responda com y.
O sistema de arquivos EXT2 será criado em /tmp/arquivo-ext2 e estará pronto para ser
usado.
Monte o arquivo arquivo-ext2 com o comando: mount /tmp/arquivo-ext2 /mnt -o loop.
A opção -o loop com o comando mount, fará o kernel gerenciar automaticamente os dispositivos de loop.
Confira se o sistema de arquivos EXT2 em arquivo-ext2 foi realmente montado no sistema
de arquivos digitando df -T.
Como foi criado um sistema de arquivos EXT2 em arquivo-ext2, você poderá usar todos os
recursos da partição EXT2 normal, como permissões de arquivos e diretórios, links simbólicos,
etc.
6.6 Journaling
O sistema de journaling grava qualquer operação que será feita no disco em uma área especial
chamada journal, assim se acontecer algum problema durante a operação de disco, ele pode
voltar ao estado anterior do arquivo, ou finalizar a operação.
Desta forma, o journal acrescenta ao sistema de arquivos o suporte a alta disponibilidade
e maior tolerância a falhas. Após uma falha de energia, por exemplo, o journal é analisado
durante a montagem do sistema de arquivos e todas as operações que estavam sendo feitas
no disco são verificadas. Dependendo do estado da operação, elas podem ser desfeitas ou
finalizadas. O retorno do servidor é praticamente imediato (sem precisar a enorme espera da
execução do fsck em partições maiores que 10Gb), garantindo o rápido retorno dos serviços da
máquina.
Outra situação que pode ser evitada é com inconsistências no sistema de arquivos do servidor após a situação acima, fazendo o servidor ficar em estado single user e esperando pela
intervenção do administrador.
6.7 Partição EXT3 (Linux Native)
O sistema de arquivos ext3 faz parte da nova geração extended file system do Linux, sendo
que seu maior benefı́cio é o suporte a journaling.
O uso deste sistema de arquivos comparado ao ext2, na maioria dos casos, melhora o desempenho do sistema de arquivos através da gravação seqüencial dos dados na área de metadados
e acesso mhash a sua árvore de diretórios.
51
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
A estrutura da partição ext3 é semelhante a ext2, o journaling é feito em um arquivo
chamado journal que fica oculto pelo código ext3 na partição (desta forma ele não poderá
ser apagado, comprometendo o funcionamento do sistema). A estrutura idêntica da partição
ext3 com a ext2 torna mais fácil manutenção do sistema, já que todas as ferramentas para
recuperação ext2 funcionarão sem problemas.
6.7.1 Criando um sistema de arquivos EXT3 em uma partição
Para criar uma partição ext3, utilize o comando mkfs.ext3 ou o mkfs.ext2 junto com a
opção -j. As opções usadas pelo mkfs.ext3 são idênticas a do mkfs.ext2. A única vantagem
desta ferramenta comparada ao mkfs.ext2 é que a opção -j é automaticamente adicionada
a linha de comando para criar um sistema de arquivos com journal. Se você é daqueles que
querem ter um controle maior sobre o tamanho do arquivo de journal, use a opção -J [tam]
(onde tamanho é o tamanho em Megabytes).
Quando uma partição ext3 é criada, o arquivo journal é criado no raı́z da partição, sendo
usado para gravar os metadados das transações de journaling. A estrutura da partição ext2
não difere em nada da ext3, a não ser este arquivo e a opção has journal que é passada a
partição.
Por exemplo, para criar uma partição ext3 em /dev/hda1: mkfs.ext3 /dev/hda1 ou
mkfs.ext2 -j /dev/hda1
Basta agora montar a partição com o comando mount /dev/hda1 /teste -t ext3 para
montar a partição em /teste. Após, modifique o /etc/fstab para montar a partição como
ext3 quando o Linux for iniciado.
Caso o suporte à ext3 tenha sido compilado no kernel, ele tentará detectar e montar a
partição como ext3, caso contrário, ele usará ext2.
Sua partição agora está montada como ext3, para conferir digite: df -T.
Quando criar um sistema de arquivos ext3 em uma partição raı́z (/), tenha certeza de incluir
o suporte a ext3 embutido no kernel, caso contrário à partição será montada como ext2.
6.8 Nomeando uma partição de disco - comando e2label
O comando e2label é usado para esta função.
Sua sintaxe: e2label [dispositivo] [nome]
Onde:
• dispositivo - Partição que terá o nome modificado
• nome - Nome que será dado a partição (máximo de 16 caracteres). Caso seja utilizado
52
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
um nome de volume com espaços em branco, ele deverá ser colocado entre aspas.
Se não for especificado um nome, o nome atual da partição será mostrado. O nome da
partição também pode ser visualizado através do comando dumpe2fs.
Exemplo: e2label /dev/sda1 MarcosLaureano, e2label /dev/sda1 "Marcos Laureano"
6.9 Detalhes de uma Partição - comando dumpe2fs
Mostra detalhes sobre uma partição Linux.
Sua sintaxe: dumpe2fs [opç~
oes] [partiç~
ao]
Onde:
• partição - Identificação da partição que será usada.
• opções - A opção -b mostra somente os blocos marcados como defeituosos no sistema de
arquivos especificado.
Este comando lista diversas opções úteis do sistema de arquivos como o tipo do sistema de
arquivos, caracterı́sticas especiais, número de inodos, blocos livres, tamanho do bloco, intervalo
entre checagens automáticas, etc.
Exemplo: dumpe2fs /dev/sda1, dumpe2fs -b /dev/sda1
6.10 Criando sistema de arquivos Swap em uma partição
O programa usado para formatar uma partição Swap é o mkswap: mkswap /dev/hda?
O nome do dispositivo da partição Swap pode ser visualizado através de seu programa de
particionamento, você pode usar o comando fdisk -l /dev/hda para listar as partições no
primeiro disco rı́gido e assim verificar qual dispositivo corresponde à partição Swap.
A opção -c também pode ser usada com o mkswap para checar se existem agrupamentos
danificados na partição.
Com a partição Swap formatada, use o comando: swapon /dev/hda? para ativar a partição
swap.
Se utilizar mais que 1 partição Swap, pode ser útil o uso da opção -p NUM que especifica a
prioridade em que a partição Swap será usada. Pode ser usado um valor de prioridade entre 0 e
32767, partições com número maior serão usadas primeiro, sendo que na montagem automática
através de mount -a podem ser designados números negativos.
53
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
6.11 Pontos de Montagem
O Linux acessa as partições existente em seus discos rı́gidos e disquetes através de diretórios.
Os diretórios que são usados para acessar (montar) partições são chamados de Pontos de Montagem.
No Windows(DOS) cada letra de unidade (C:, D:, E:) identifica uma partição de disco, no
Linux os pontos de montagem fazem parte da grande estrutura do sistema de arquivos raiz.
Existem muitas vantagens de se usar pontos de montagem ao invés de unidade de disco para
identificar partições (método usado no Windows):
• Você pode montar a partição no diretório que quiser.
• Em caso de um sistema de arquivos cheio, você pode copiar o conteúdo de um grande
diretório para um disco separado, apagar o conteúdo do diretório original e montar o disco
onde foram copiados os arquivos naquele local.
• O uso de pontos de montagem torna o gerenciamento mais flexı́vel.
• A adição de novas partições ou substituição de discos rı́gidos não afeta a ordem de identificação dos discos e pontos de montagem (como não acontece no Windows).
6.11.1 Identificação de discos e partições em sistemas Linux
No Linux, os dispositivos existentes em seu computador (como discos rı́gidos, disquetes, tela,
portas de impressora, modem, etc) são identificados por um arquivo referente a este dispositivo
no diretório /dev.
A identificação de discos rı́gidos no Linux é feita da seguinte forma:
/dev/hda1
|
|
| |
|
|
| |_Número que identifica o número da partiç~
ao no disco rı́gido.
|
|
|
|
|
|_Letra que identifica o disco rı́gido (a=primeiro, b=segundo, etc...).
|
|
|
|_Sigla que identifica o tipo do disco rı́gido (hd=ide, sd=SCSI, xt=XT).
|
|_Diretório onde s~
ao armazenados os dispositivos existentes no sistema.
As letras de identificação de discos rı́gidos podem ir além de hdb, em meu micro, por exemplo,
a unidade de CD-ROM está localizada em /dev/hdg (Primeiro disco - quarta controladora IDE).
54
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
6.12 Montando (acessando) uma partição de disco Comando mount
É importante entender como os discos e partições são identificados no sistema, pois será
necessário usar os parâmetros corretos para monta-los. Você pode acessar uma partição de
disco usando o comando mount.
Sua sintaxe: mount [dispositivo] [ponto de montagem] [opç~
oes]
Onde:
• dispositivo - Identificação da unidade de disco/partição que deseja
(como /dev/hda1 (disco rı́gido) ou /dev/fd0 (primeira unidade de disquetes).
acessar
• ponto de montagem - Diretório de onde a unidade de disco/partição será acessado. O
diretório deve estar vazio para montagem de um sistema de arquivo. Normalmente é
usado o diretório /mnt para armazenamento de pontos de montagem temporários.
Caso você digitar mount sem parâmetros, serão mostrados os sistemas de arquivos atualmente
montados no sistema. Esta mesma listagem pode ser vista em /etc/mtab. A remontagem de
partição também é muito útil, especialmente após reparos nos sistema de arquivos do disco
rı́gido. Veja alguns exemplos de remontagem abaixo.
É necessário permissões de root para montar partições, a não ser que tenha especificado a
opção user no arquivo /etc/fstab. Exemplos de Montagem:
• Montar uma partição Windows (vfat) de /dev/hda1 em /mnt somente para leitura:
mount /dev/hda1 /mnt -r -t vfat
• Montar a primeira unidade de disquetes /dev/fd0 em /floppy:
mount /dev/fd0 /floppy -t vfat
• Montar uma partição DOS localizada em um segundo disco rı́gido /dev/hdb1 em /mnt:
mount /dev/hdb1 /mnt -t msdos
• Remontar a partição raı́z como somente leitura:
mount -o remount,rw /
• Remontar a partição raı́z como leitura/gravação (a opção -n é usada porque o mount não
conseguirá atualizar o arquivo /etc/mtab devido ao sistema de arquivos / estar montado
como somente leitura atualmente:
mount -n -o remount,rw /
55
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
6.13 Arquivo fstab
O arquivo /etc/fstab permite que as partições do sistema sejam montadas facilmente especificando somente o dispositivo ou o ponto de montagem. Este arquivo contém parâmetros sobre
as partições que são lidas pelo comando mount. Cada linha deste arquivo contém a partição que
desejamos montar, o ponto de montagem, o sistema de arquivos usado pela partição e outras
opções. O /etc/fstab tem a seguinte forma:
Sistema_de_arquivos Ponto_de_Montagem Tipo
Opcoes
/dev/hda1
/dev/hda2
/dev/hda3
/dev/hdg
defaults
defaults
defaults,noauto,rw
defaults,noauto
/
/boot
/dos
/cdrom
ext2
ext2
msdos
iso9660
dump ordem
0
0
0
0
1
2
0
0
Onde:
• Sistema de Arquivos - Partição que deseja montar.
• Ponto de montagem - Diretório do GNU/Linux onde a partição montada será acessada.
• Tipo - Tipo de sistema de arquivos usado na partição que será montada. Para partições
Linux use ext3, para partições Windows (com suporte a nomes extensos de arquivos) use
vfat, para unidades de CD-ROM use iso9660.
• Opções - Especifica as opções usadas com o sistema de arquivos:
– defaults - Utiliza valores padrões de montagem.
– noauto - Não monta os sistemas de arquivos durante a inicialização (útil para CDROMS e disquetes).
– ro - Monta como somente leitura.
– user - Permite que usuários montem o sistema de arquivos (não recomendado por
motivos de segurança).
– sync - é recomendado para uso com discos removı́veis (disquetes, zip drives, etc)
para que os dados sejam gravados imediatamente na unidade.
• Ordem - Define a ordem que os sistemas de arquivos serão verificados na inicialização do
sistema. Se usar 0, o sistema de arquivos não é verificado. O sistema de arquivos raı́z
que deverá ser verificado primeiro é o raı́z (/) (a não ser que você tenha um sistema de
arquivos de outro tipo que não é montado dentro do diretório raı́z e possui seu suporte
embutido no kernel).
Após configurar o /etc/fstab, basta digitar o comando mount /dev/hdg ou mount /cdrom
para que a unidade de CD-ROM seja montada. Não é necessário especificar o sistema de
arquivos da partição pois o mount verificará se ele já existe no /etc/fstab e caso existir, usará
56
CAPÍTULO 6. SISTEMAS DE ARQUIVOS
as opções especificadas neste arquivo. Para maiores detalhes veja as páginas de manual fstab
e mount.
Claro, cada computador pode ter arquivos /etc/fstab com diferentes configurações. Por
exemplo, atualmente o meu equipamento possue as seguintes opções de montagem:
# /etc/fstab: static file system information.
#
# <file system> <mount point>
<type> <options>
<dump> <pass>
proc
/proc
proc
defaults
0
0
# /dev/sda4
UUID=2754aa10-dac4-47b0-ab1b-3b32c3da780d /
ext3
defaults,errors=remoun
# /dev/sda1
UUID=D870616970614F76 /media/sda1
ntfs
defaults,umask=007,gid=46 0
1
# /dev/sda2
UUID=21BE559D53164EF2 /media/sda2
ntfs
defaults,umask=007,gid=46 0
1
# /dev/sda3
UUID=ac1b3db0-fcb0-4ba5-b3bc-78e33e86d8cc none
swap
sw
0
/dev/scd0
/media/cdrom0
udf,iso9660 user,noauto,exec 0
0
6.14 Desmontando uma partição de disco - Comando
umount
Para desmontar um sistema de arquivos montado com o comando mount, use o comando
umount. Você deve ter permissões de root para desmontar uma partição.
Sua sintaxe: umount [dispositivo/ponto de montagem]
Você pode tanto usar umount /dev/hda1 como umount /mnt para desmontar um sistema de
arquivos /dev/hda1 montado em /mnt.
O comando umount executa o sync automaticamente no momento da desmontagem para
garantir que todos os dados ainda não gravados serão salvos.
6.15 Exercı́cios sugeridos
1. Crie um sistema de arquivos ext3 no arquivo e altere o arquivo /etc/fstab para monta-lo
automaticamente no boot do sistema.
2. Altere as permissões do arquivo /etc/fstab para que um usuário comum possa montar
e desmontar um sistema de arquivos.
57
7 Gerência de Processos
7.1 Entradas e saı́das padrão
A maioria dos comandos pode comunicar-se com o sistema através de descritores de arquivos
especiais conhecidos como entradas e saı́das padrão. São eles:
• Entrada padrão (stdin - standard input): onde o comando vai ler seus dados de entrada.
• Saı́da padrão (stdout - standard output): onde o comando vai escrever seus dados de
saı́da.
• Saı́da de erro (stderr - standard error ): onde o comando vai enviar mensagens de erro.
A figura 7.1 mostra a relação entre um processo e os arquivos padrão.
Figura 7.1: Saı́das do Sistema
Quando um comando é lançado sem indicar seu arquivo de trabalho, ele busca seus dados
da entrada padrão. Por default, o shell onde o comando foi lançado associa o processo ao seu
terminal, ou seja: a entrada padrão do processo é associada ao teclado e as saı́das padrão e de
erros à tela da sessão corrente (figura 7.2)
Vejamos um exemplo de uso da entrada e saı́da padrão com o comando rev, que escreve em
sua saı́da padrão as linhas de texto lidas em sua entrada padrão, invertendo-as:
58
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
Figura 7.2: Saı́das do Sistema ligadas ao terminal
marcos@laureano:~$ rev
vamos fazer um teste
etset mu rezaf somav
temos que achar um palindromo
omordnilap mu rahca euq somet
opoetaamaateopo
opoetaamaateopo
Para indicar o fim entrada padrão (fim de arquivo), basta pressionar <CTRL> D. Com esse
caractere o comando rev encerra sua execução, pois chegou ao final de seu arquivo de entrada
(que neste caso é o teclado). Vejamos outro exemplo com o comando sort:
marcos@laureano:~$ sort
Jo~
ao
Maria
José
Luiz
59
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
Carlos <---pressionar <CTRL>+D ao fim deste nome
Carlos
Jo~
ao
José
Luiz
Maria
Normalmente o shell direciona a entrada padrão para o teclado e a saı́da padrão para a tela
da sessão do usuário, mas pode ser instruı́do para redirecioná-las para arquivos ou mesmo para
outros programas, como veremos na seqüência.
7.2 Redirecionamento para arquivos
O shell pode redirecionar as entrada e saı́das padrão de comandos para arquivos normais,
usando operadores de redireção. A sintaxe de redireção é especı́fica para cada shell, isto é,
não é a mesma entre o C-Shell e o Bourne Shell. Aqui veremos a sintaxe do BASH-Shell. Os
principais operadores de redireção para arquivos são:
• Saı́da em arquivo: a saı́da padrão (stdout) do comando é desviada para um arquivo
usando o operador >. Exemplo: ls > listagem.txt
• Entrada de arquivo: a entrada padrão (stdin) pode ser obtida a partir de um arquivo
usando o operador <. Exemplo: rev < listagem.txt
• Uso combinado: os dois operadores podem ser usados simultaneamente.
rev < listagem.txt > listrev.txt
Exemplo:
• Concatenação: a saı́da padrão pode ser concatenada a um arquivo existente usando-se o
operador >>. Exemplo: ls /etc >> listagem.txt
• Saı́da de erros: a saı́da de erros (stderr ) pode ser redirecionada juntamente com a saı́da
standard. Para isso basta usar o modificador &1 em conjunção com 2> ou 2>>. Vejamos
um exemplo:
marcos@laureano:~$ ls /xpto > teste.txt
ls: impossı́vel acessar /xpto: Arquivo ou diretório inexistente
marcos@laureano:~$ ls -l /xpto 2>erro.txt
marcos@laureano:~$ cat erro.txt
ls: impossı́vel acessar /xpto: Arquivo ou diretório inexistente
marcos@laureano:~$ ls -l /xpto /etc/passwd > acerto.txt 2>erro.txt
marcos@laureano:~$ cat erro.txt
60
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
ls: impossı́vel acessar /xpto: Arquivo ou diretório inexistente
marcos@laureano:~$ cat acerto.txt
-rw-r--r-- 1 root root 1465 2008-04-25 21:23 /etc/passwd
marcos@laureano:~$ ls -l /xpto /etc/passwd > acerto.txt 2>&1
marcos@laureano:~$ cat acerto.txt
ls: impossı́vel acessar /xpto: Arquivo ou diretório inexistente
-rw-r--r-- 1 root root 1465 2008-04-25 21:23 /etc/passwd
• Forçar um desvio: Caso a saı́da seja redirecionada para um arquivo já existente, o shell
recusa a operação indicando o erro (somente se a variável noclobber estiver setada através
do comando set -C). Essa operação pode ser forçada através do operador !:
marcos@laureano:~$ set -C noclobber
marcos@laureano:~$ ls -l > teste.txt
bash: teste.txt: n~
ao é possı́vel sobrescrever arquivo existente
marcos@laureano:~$ ls -l >! teste.txt
7.3 Redirecionamento usando pipes
O shell permite a construção de comandos complexos através da combinação de vários comandos simples. O operador |, conhecido como pipe, ou tubo, permite conectar a saı́da standard
de um comando à entrada standard de outro. Com isso, um mesmo fluxo de dados pode ser
tratado por diversos comandos consecutivamente, como mostra a figura 7.3
É importante ressaltar que os comandos conectados são lançados simultaneamente pelo
shell e executam ao mesmo tempo. O shell controla a execução de cada um para que não haja
acumulo de dados entre os comandos (a cada pipe é associado um buffer de tamanho limitado).
A sintaxe usada para redireção é simples. Vejamos alguns exemplos:
ls -l /etc | more
ls -l /tmp | sort | more
ls -l /usr/bin | cut -c31-40 | sort | more
61
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
Figura 7.3: Redirecionamento com pipes
7.4 Prática Sugerida
Execute os passos abaixo e explique o que acontece.
listagem.txt:
Observe o tamanho do arquivo
marcos@laureano:~$ mkdir novo
marcos@laureano:~$ cd novo
marcos@laureano:~/novo$ touch a b c
marcos@laureano:~/novo$ ls
total 0
-rw-r--r-- 1 marcos marcos
-rw-r--r-- 1 marcos marcos
-rw-r--r-- 1 marcos marcos
-l
0 2008-05-07 11:33 a
0 2008-05-07 11:33 b
0 2008-05-07 11:33 c
marcos@laureano:~/novo$ ls -l > listagem.txt
marcos@laureano:~/novo$ cat listagem.txt
total 0
-rw-r--r-- 1 marcos marcos 0 2008-05-07 11:33
-rw-r--r-- 1 marcos marcos 0 2008-05-07 11:33
-rw-r--r-- 1 marcos marcos 0 2008-05-07 11:33
-rw-r--r-- 1 marcos marcos 0 2008-05-07 11:33
marcos@laureano:~/novo$ ls -l
62
a
b
c
listagem.txt
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
total 4
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1
1
1
1
marcos
marcos
marcos
marcos
marcos
0
marcos
0
marcos
0
marcos 211
2008-05-07
2008-05-07
2008-05-07
2008-05-07
11:33
11:33
11:33
11:33
a
b
c
listagem.txt
Observe que o arquivo listagem.txt não existia, mas foi relacionado (com tamanho 0). Isto
significa que antes do comando ls -l ser executado, o arquivo listagem.txt foi criado.
7.5 Filtros
Existe um grande número de comandos bastante simples, cujo uso direto é pouco útil, mas
que podem ser de grande valia quando associados entre si através de pipes. Esses comandos
são chamados filtros, porque funcionam como filtros para o fluxo de dados. Vejamos os filtros
de uso mais corrente:
• cat - concatena diversos arquivos na saı́da padrão.
marcos@laureano:~/novo$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
dhcp:x:100:101::/nonexistent:/bin/false
syslog:x:101:102::/home/syslog:/bin/false
klog:x:102:103::/home/klog:/bin/false
messagebus:x:103:109::/var/run/dbus:/bin/false
hplip:x:104:7:HPLIP system user,,,:/var/run/hplip:/bin/false
63
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:106:114:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
haldaemon:x:107:116:Hardware abstraction layer,,,:/home/haldaemon:/bin/false
gdm:x:108:118:Gnome Display Manager:/var/lib/gdm:/bin/false
marcos:x:1000:1000:Marcos Laureano,,,:/home/marcos:/bin/bash
libuuid:x:109:121::/var/lib/libuuid:/bin/sh
pulse:x:110:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
polkituser:x:111:126:PolicyKit,,,:/var/run/PolicyKit:/bin/false
• tac - idem, mas inverte a ordem das linhas.
marcos@laureano:~/novo$ tac /etc/passwd
polkituser:x:111:126:PolicyKit,,,:/var/run/PolicyKit:/bin/false
pulse:x:110:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
libuuid:x:109:121::/var/lib/libuuid:/bin/sh
marcos:x:1000:1000:Marcos Laureano,,,:/home/marcos:/bin/bash
gdm:x:108:118:Gnome Display Manager:/var/lib/gdm:/bin/false
haldaemon:x:107:116:Hardware abstraction layer,,,:/home/haldaemon:/bin/false
avahi:x:106:114:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
hplip:x:104:7:HPLIP system user,,,:/var/run/hplip:/bin/false
messagebus:x:103:109::/var/run/dbus:/bin/false
klog:x:102:103::/home/klog:/bin/false
syslog:x:101:102::/home/syslog:/bin/false
dhcp:x:100:101::/nonexistent:/bin/false
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
proxy:x:13:13:proxy:/bin:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
games:x:5:60:games:/usr/games:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
sys:x:3:3:sys:/dev:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
root:x:0:0:root:/root:/bin/bash
64
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
• more - permite a paginação do fluxo de dados.
• tr - troca de caracteres entre dois conjuntos.
marcos@laureano:~/novo$ ls -l
total 4
-rw-r--r-- 1 marcos marcos
0 2008-05-07 11:33
-rw-r--r-- 1 marcos marcos
0 2008-05-07 11:33
-rw-r--r-- 1 marcos marcos
0 2008-05-07 11:33
-rw-r--r-- 1 marcos marcos 211 2008-05-07 11:33
marcos@laureano:~/novo$ ls -l | tr "Aa" "Bb"
totbl 4
-rw-r--r-- 1 mbrcos mbrcos
0 2008-05-07 11:33
-rw-r--r-- 1 mbrcos mbrcos
0 2008-05-07 11:33
-rw-r--r-- 1 mbrcos mbrcos
0 2008-05-07 11:33
-rw-r--r-- 1 mbrcos mbrcos 211 2008-05-07 11:33
a
b
c
listagem.txt
b
b
c
listbgem.txt
• head - seleciona as n linhas iniciais do fluxo de dados.
marcos@laureano:~/novo$ head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
• tail - seleciona as n linhas finais do fluxo de dados.
marcos@laureano:~/novo$ tail -2 /etc/passwd
pulse:x:110:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
polkituser:x:111:126:PolicyKit,,,:/var/run/PolicyKit:/bin/false
• wc - conta o número de linhas, palavras e bytes do fluxo.
• sort - ordena as linhas segundo critérios ajustáveis.
marcos@laureano:~/novo$ cat /etc/passwd | sort -t: -k1
avahi-autoipd:x:105:113:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:106:114:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
backup:x:34:34:backup:/var/backups:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
dhcp:x:100:101::/nonexistent:/bin/false
games:x:5:60:games:/usr/games:/bin/sh
gdm:x:108:118:Gnome Display Manager:/var/lib/gdm:/bin/false
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
haldaemon:x:107:116:Hardware abstraction layer,,,:/home/haldaemon:/bin/false
65
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
hplip:x:104:7:HPLIP system user,,,:/var/run/hplip:/bin/false
irc:x:39:39:ircd:/var/run/ircd:/bin/sh
klog:x:102:103::/home/klog:/bin/false
libuuid:x:109:121::/var/lib/libuuid:/bin/sh
list:x:38:38:Mailing List Manager:/var/list:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
marcos:x:1000:1000:Marcos Laureano,,,:/home/marcos:/bin/bash
messagebus:x:103:109::/var/run/dbus:/bin/false
news:x:9:9:news:/var/spool/news:/bin/sh
nobody:x:65534:65534:nobody:/nonexistent:/bin/sh
polkituser:x:111:126:PolicyKit,,,:/var/run/PolicyKit:/bin/false
proxy:x:13:13:proxy:/bin:/bin/sh
pulse:x:110:122:PulseAudio daemon,,,:/var/run/pulse:/bin/false
root:x:0:0:root:/root:/bin/bash
sync:x:4:65534:sync:/bin:/bin/sync
syslog:x:101:102::/home/syslog:/bin/false
sys:x:3:3:sys:/dev:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
www-data:x:33:33:www-data:/var/www:/bin/sh
• uniq - remove linhas repetidas, deixando uma só linha.
marcos@laureano:~/novo$ cat nomes.txt
Jo~
ao
Jo~
ao
Maria
José
Rosa
Luiz
Marcos
Marcos
marcos@laureano:~/novo$ sort nomes.txt | uniq
Jo~
ao
José
Luiz
Marcos
Maria
Rosa
• sed - para operações complexas de strings (trocas, etc).
• grep - seleciona linhas contendo uma determinada expressão.
66
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
• cut - seleciona colunas do fluxo de entrada.
marcos@laureano:~$ cat /etc/passwd | cut -d: -f1 | sort
avahi
avahi-autoipd
backup
bin
daemon
dhcp
games
gdm
gnats
haldaemon
hplip
irc
klog
libuuid
list
lp
mail
man
marcos
messagebus
news
nobody
polkituser
proxy
pulse
root
sync
sys
syslog
uucp
www-data
• rev - reverte a ordem dos caracteres de cada linha do fluxo de entrada.
• tee - duplica o fluxo de entrada (para um arquivo e para a saı́da standard).
• ...e muitos outros, são mais de 300.
Para conhecer melhor cada um dos comandos acima, consulte suas páginas de manual.
67
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
7.6 Prática sugerida
1. Determine o número de linhas da página de manual do shell bash.
2. Determine quanto arquivos normais (não diretórios nem links) existem em /usr.
3. Qual a sequência de comandos para se obter uma listagem dos alunos que cursam esta
disciplina. As informações podem ser obtidas no arquivo /etc/passwd. Para obter a
relação dos alunos, pode-se filtrar a partir do grupo de trabalho.
7.7 Programas e processos
Como vimos anteriormente, programas são arquivos em disco contendo instruções para
execução pelo processador, enquanto processos são as execuções em andamento. Cada processo executando no sistema em um determinado momento é identificado por um número único,
o PID - Process IDentifier. Além disso, cada processo possui outras informações que o caracterizam, como:
• Usuário proprietário (aquele que lançou o processo)
• Sessão de shell de onde foi lançado (se foi lançado através de um shell )
• Estado atual (Running, Suspended, SWapped, ...)
• Linha de comando usada para lançá-lo.
• Uso de memória e CPU
• etc.
7.8 Comandos ps e pstree
Podemos visualizar os processos em execução no sistema através do comando ps, cuja
execução sem parâmetros gera uma listagem como a seguinte:
marcos@laureano:~$ ps
PID TTY
TIME CMD
6767 pts/0
00:00:00 bash
16576 pts/0
00:00:00 ps
O comando ps aceita uma série de parâmetros, entre os quais os mais importantes são:
• a - mostra processos de outros usuários também (all).
• u - mostra listagem mais detalhada dos processos, com uso de memória e CPU
68
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
• x - mostra processos não conectados a terminais.
• w - mostra mais detalhes sobre as linhas de comando dos processos.
Para obter uma listagem completa dos processos em execução no sistema usam-se as opções
auxw, que geram uma listagem como a que segue:
marcos@laureano:~$ ps auxw
USER
PID %CPU %MEM
VSZ
root
1 0.0 0.0
4016
root
2 0.0 0.0
0
root
3 0.0 0.0
0
root
4 0.0 0.0
0
root
5 0.0 0.0
0
root
6 0.0 0.0
0
root
7 0.0 0.0
0
root
8 0.0 0.0
0
root
9 0.0 0.0
0
root
10 0.0 0.0
0
root
11 0.0 0.0
0
root
45 0.0 0.0
0
root
46 0.0 0.0
0
root
49 0.0 0.0
0
root
50 0.0 0.0
0
root
143 0.0 0.0
0
root
190 0.0 0.0
0
root
191 0.0 0.0
0
root
192 0.0 0.0
0
root
236 0.0 0.0
0
root
237 0.0 0.0
0
root
1442 0.0 0.0
0
root
1445 0.0 0.0
0
root
1618 0.0 0.0
0
root
1630 0.0 0.0
0
root
1633 0.0 0.0
0
root
1641 0.0 0.0
0
root
2369 0.0 0.0
0
root
2372 0.0 0.0
0
root
2374 0.0 0.0
0
root
2406 0.0 0.0
0
root
2408 0.0 0.0
0
root
2660 0.0 0.0
0
root
2907 0.0 0.0 17180
root
3226 0.0 0.0
0
RSS
888
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1296
0
TTY
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
69
STAT
Ss
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S
S
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<
S<s
S<
START
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
08:47
TIME
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:00
0:02
0:00
0:00
0:00
0:00
0:00
0:00
COMMAND
/sbin/init
[kthreadd]
[migration/0]
[ksoftirqd/0]
[watchdog/0]
[migration/1]
[ksoftirqd/1]
[watchdog/1]
[events/0]
[events/1]
[khelper]
[kblockd/0]
[kblockd/1]
[kacpid]
[kacpi_notify]
[kseriod]
[pdflush]
[pdflush]
[kswapd0]
[aio/0]
[aio/1]
[ksuspend_usbd]
[khubd]
[khpsbpkt]
[ata/0]
[ata/1]
[ata_aux]
[knodemgrd_0]
[scsi_eh_0]
[scsi_eh_1]
[scsi_eh_2]
[scsi_eh_3]
[kjournald]
/sbin/udevd --daemon
[kpsmoused]
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
root
3301 0.0 0.0
root
4338 0.0 0.0
root
4339 0.0 0.0
root
4340 0.0 0.0
< resultado suprimido>
0
0
0
0
0
0
0
0
?
?
?
?
S<
S<
S<
S<
08:47
08:47
08:47
08:47
0:00
0:01
0:00
0:00
[kmmcd]
[ntos_wq]
[ndis_wq]
[wrapndis_wq]
Os principais campos dessa listagem são:
• USER - o proprietário do processo, que pode ser quem o lançou ou, no caso de executáveis
com o bit SUID habilitado, o proprietário do arquivo executável.
• PID - número do processo.
• %CPU - porcentagem da CPU usada pelo processo.
• %MEM - porcentagem da memória usada pelo processo.
• SIZE - memória total usada pelo processo.
• RSS - memória fı́sica (RAM) usada pelo processo.
• TTY - terminal ao qual o processo está ligado.
• STAT - status do processo (rodando, suspenso, ...).
• START - data de lançamento do processo.
• TIME - tempo total de CPU usado pelo processo.
• COMMAND - comando usado para lançar o processo.
O comando pstree é útil por mostrar a hierarquia existente entre os processos ativos no
sistema:
marcos@laureano:~$ pstree
init-+-NetworkManager---2*[{NetworkManager}]
|-NetworkManagerD
|-acpid
|-anacron---sh---run-parts---apt---apt-key---wget
|-avahi-daemon---avahi-daemon
|-bonobo-activati---{bonobo-activati}
|-console-kit-dae---61*[{console-kit-dae}]
|-cron
|-cupsd
|-2*[dbus-daemon]
|-dd
|-dhcdbd---dhclient
|-evolution-data----2*[{evolution-data-}]
|-fast-user-switc
|-firefox---7*[{firefox}]
70
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
|-gconfd-2
|-gdm---gdm-+-Xorg
|
‘-gnome-session-+-bluetooth-apple
|
|-compiz---compiz.real
|
|-emerald
|
|-evolution-alarm---{evolution-alarm}
|
|-gnome-panel
|
|-gnome-settings--+-pulseaudio-+-gconf-helper
|
|
|
‘-2*[{pulseaudio}]
|
|
‘-{gnome-settings-}
|
|-nautilus---{nautilus}
|
|-nm-applet
|
|-2*[python]
|
|-seahorse-agent
|
|-tracker-applet
|
|-trackerd---2*[{trackerd}]
|
|-update-notifier
|
‘-{gnome-session}
|-6*[getty]
|-gnome-keyring-d
|-gnome-power-man
|-gnome-screensav
|-gnome-terminal-+-bash---pstree
|
|-gnome-pty-helpe
|
‘-{gnome-terminal}
|-gnome-volume-ma
|-gvfsd
|-gvfsd-burn
|-gvfsd-trash
|-hcid---2*[bluetoothd-serv]
|-klogd
|-mixer_applet2---{mixer_applet2}
|-2*[mount.ntfs]
|-syslogd
|-system-tools-ba
|-trashapplet
|-udevd
|-update-manager-+-gksu---synaptic-+-gnome-pty-helpe
|
|
‘-synaptic---dpkg
|
‘-{update-manager}
|-update-menus
‘-winefish
71
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
7.9 Mudando prioridade processos - Comandos nice e renice
O comando nice configura a prioridade da execução de um comando/programa.
Sua sintaxe: nice [opç~
oes] [comando/programa]
O comando renice configura a prioridade de um processo que já esteja em execução (somente
o dono do processo ou o superusuário podem mudar a prioridade de um processo).
Sua sintaxe: renice [opç~
oes] [processos ou usuários]
Se um programa for executado com maior prioridade, ele usará mais recursos do sistema
para seu processamento, caso tenha uma prioridade baixa, ele permitirá que outros programas
tenham preferência. A prioridade de execução de um programa/comando ou processo pode ser
ajustada de -19 (a mais alta) até 19 (a mais baixa).
Somente o superusuário pode aumentar a prioridade de um programa ou processo.
Exemplos de utilização:
marcos@laureano:~$ nice -10 find / -name apropos 2>/dev/null &
[2] 10896
marcos@laureano:~$ ps -l
F S
UID
PID PPID C PRI
0 S 1000 9457 9447 0 80
0 S 1000 10896 9457 6 90
0 R 1000 10900 9457 0 80
NI
0
10
0
ADDR SZ
- 5184
- 1342
- 1660
WCHAN
wait
wait_a
-
TTY
pts/2
pts/2
pts/2
TIME
00:00:00
00:00:00
00:00:00
CMD
bash
find
ps
marcos@laureano:~$ renice 19 -p 10896
10896: prioridade antiga = 10; prioridade nova = 19
7.10 Execução de Comandos em Background e Foreground
7.10.1 Caractere &
É possı́vel que se queira executar um comando demorado e, enquanto se espera o resultado do
mesmo, fazer-se outras coisas no terminal. Este processo de se rodar um programa ou comando
desvinculado do terminal chama-se rodar em background.
Se for colocado o caractere & na linha de comando, a mesma será executada em background,
liberando assim o terminal para outras tarefas. Se por acaso as saı́das padrão e de erro do
comando submetido em background não forem redirecionadas elas continuaram saindo na tela
apesar da execução do comando não estar mais vinculada a ele. Portanto sempre que for usar
comandos em background, redirecione tanto a saı́da padrão, como a saı́da de erro.
72
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
Exemplo: O caractere & deve ser sempre o último na linha de comando.
marcos@laureano:~$ ls -laR / >/dev/null 2>&1 &
[1] 11096
O número 11096 é o PID do processo, o valor [1] é o número de controle de processos dentro
do shell. Este número é utilizando para os comandos jobs, bg e fg.
7.10.2 Comando jobs
O comando interno jobs mostra a situação de todos os processos que estão em background
e que foram submetidos debaixo da sessão corrente. Um processo pode estar em situação
suspensa ou rodando.
Os processos estão numerados conforme o número indicado na submissão em background.
Estas informações estão armazenadas em uma tabela interna do processo shell e é perdida
quando se termina a sessão e o processo.
marcos@laureano:~$ ls -laR / >/dev/null 2>&1 &
[1] 11218
marcos@laureano:~$ jobs
[1]+ Running
ls --color=auto -laR / > /dev/null 2>&1 &
7.11 Suspendendo processos
Pode-se suspender a execução de um processo rodando em foreground através da digitação
do caractere <CTRL> + <Z>. Ao se digitar o caractere o processo é interrompido e fica
esperando um comando para que volte a rodar. Este processo fica no sistema ocupando os
recursos, mas não utiliza a CPU da máquina.
O processo suspenso pode ser cancelado, pode voltar a executar em foreground ou pode-se
colocar o mesmo para rodar em background.
marcos@laureano:~$ ls -laR / >result.txt 2>/dev/null
[1]+ Stopped
ls -laR / > result.txt 2> /dev/null
marcos@laureano:~$ jobs
[1]+ Stopped
ls -laR / > result.txt 2> /dev/null
73
<-- PRESSIONADO <CTRL>+<Z>
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
7.11.1 Comandos bg e fg
Para ativar um processo parado podemos usar os comandos internos bg ou fg, bastando
fornecer o número do processo indicado pelo comando jobs ou alguma string de caracteres que
identifique o processo.
Com o comando interno bg esta se indicando que o processo deve voltar a executar em
background.
Exemplos:
marcos@laureano:~$ jobs
[1]+ Stopped
ls --color=auto -la -R / > resultado.txt 2> /dev/null
marcos@laureano:~$ bg %1
[1]+ ls --color=auto -la -R / > resultado.txt 2> /dev/null &
marcos@laureano:~$ jobs
[1]+ Running
ls --color=auto -la -R / > resultado.txt 2> /dev/null &
Podemos também chamar um processo que está suspenso ou rodando em background para
que o mesmo volte a rodar em foreground. Usamos para isto o comando interno fg, fornecendo
o número ou uma string obtido pelo comando interno jobs.
Veja a sequência de execução:
1. Executando o comando em backgroud :
marcos@laureano:~$ ls -la -R / >resultado.txt 2>/dev/null &
[1] 11534
2. Verificando a sua situação:
marcos@laureano:~$ jobs
[1]+ Running
ls -la -R / > resultado.txt 2> /dev/null &
3. Colocando o comando em execução em foregroud, logo em seguida é paralisado pelo
comando <CTRL>+<Z>:
marcos@laureano:~$ fg %1
ls -la -R / > resultado.txt 2> /dev/null
[1]+
Stopped
ls
-la -R / > resultado.txt 2> /dev/null
ls
-la -R / > resultado.txt 2> /dev/null
4. Verificando a sua situação:
marcos@laureano:~$ jobs
[1]+ Stopped
5. Colocando o comando em execução em backgroud :
74
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
marcos@laureano:~$ bg %1
[1]+ ls -la -R / > resultado.txt 2> /dev/null &
7.12 Comando nohup
Todos os processos que o usuário roda está ligado ao seu processo shell de sessão. O Unix/Linux possui a caracterı́stica de que se o processo principal termina, todos os seus filhos serão
encerrados. Isto torna-se um problema quando temos que rodar um comando ou programa
demorado e não podemos manter a sessão aberta.
O comando nohup serve para desligar um processo do processo shell da sessão permitindo
assim que se encerre a sessão sem prejuı́zo da execução do programa ou comando. Na prática,
o comando informa ao sistema operacional que, se a sessão for encerrada (pai do processo), o
processo filho seja entregue ao processo init da máquina (PPID 1).
Exemplo: Deve-se sempre colocar o comando para rodar em background pois o nohup não
faz isto automaticamente.
marcos@laureano:~$ ls -laR / >res.txt 2>erro.txt &
[1] 11922
marcos@laureano:~$ ps -l
F S
UID
PID PPID C PRI
0 R 1000 11875 11198 0 80
0 S 1000 11922 11875 37 80
0 R 1000 11923 11875 0 80
NI
0
0
0
ADDR SZ
- 5159
- 6767
- 1660
WCHAN
-
TTY
pts/0
pts/0
pts/0
TIME
00:00:00
00:00:00
00:00:00
CMD
bash
ls
ps
Caso a sessão seja fechada e o processo seja verificado em outra sessão, será verificado que o
PPID do comando está setado para 1.
marcos@laureano:~$ ps -l
F S
UID
PID PPID C PRI NI ADDR SZ WCHAN TTY
TIME CMD
0 S 1000 11809 11198 0 80
0 - 5184 wait
pts/1
00:00:00 bash
0 S 1000 11922 1 37 80
0 - 6767 pts/0
00:00:00 ls
0 R 1000 11951 11809 0 80
0 - 1660 pts/1
00:00:00 ps
7.13 Comando kill
Quando se quer matar um processo, seja em background seja em foreground (de outro terminal) devemos usar o comando kill. Deve-se fornecer para este comando o número do PID
75
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
do processo que se quer eliminar. Somente o proprietário do processo e o usuário root podem
enviar sinais.
Opcionalmente podemos estabelecer o tipo de sinal a ser mandado para o processo. Para
isto basta se colocar o número ou mnemônico do mesmo. Caso não se coloque nenhum sinal,
será enviado o sinal 15 (TERM) para o processo.
Os sinais mais importantes são:
• 15 (SIGTERM) - Interrupção amena do processo. Este sinal pode ser interceptado e
ignorado pelo process;
• 9 (SIGKILL) - Interrupção forçada do processo. Este sinal não pode ser interceptado e
nem ignorado pelo processo;
• 19 ou 24 (SIGSTOP) - Suspende a execução de um processo. Este sinal também não
pode ser interceptado e ignorado;
• 18 ou 26 (SIGCONT) - Ativa a execução de um processo suspenso.
Os sinais SIGSTOP e SIGCONT podem ter números diferentes em cada sistema operacional,
neste caso é melhor utilizar o menemônico em vez do número do sinal.
Para visualizar todos os sinais aceitos pelo comando kill
marcos@laureano:~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
Para testar, crie o script abaixo:
#/bin/bash
trap "echo N~
ao vou terminar!!!" 15
76
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
while true
do
sleep 1
done
Para testar, só utilizar a sequência abaixo:
marcos@laureano:~$ chmod u+x tempo.sh
marcos@laureano:~$ ./tempo.sh &
[1] 12095
marcos@laureano:~$ kill -15 12095
marcos@laureano:~$ N~
ao vou terminar!!!
marcos@laureano:~$ kill -9 12095
marcos@laureano:~$
[1]+ Finalizado
./tempo.sh
7.14 Os comandos at e batch
O comando at permite agendar a execução de um comando para uma hora e data definida
pelo usuário. Os resultados (via stdout) das execuções agendadas serão enviados ao usuário
por e-mail. Vejamos um exemplo:
ppgia:~> at 23:50 12/31/2009
at> echo "Feliz 2010 a todos" | mail [email protected]
at> who
at> ^D
O comando batch permite agendar uma execução de comandos sem data marcada, assim
que a carga do sistema o permitir. Da mesma forma que no comando at, eventuais resultados
(stdout) das execuções são enviados ao usuário por e-mail.
Verifique as páginas de manual dos comandos at e batch para maiores detalhes.
7.15 Agendando programas via crontab
Enquanto o comando at permite agendar uma tarefa para uma determinada data, o sistema
crontab permite o agendamento de tarefas repetitivas ao longo do dia, semana, mês ou ano.
77
CAPÍTULO 7. GERÊNCIA DE PROCESSOS
Toda a informação sobre tarefas agendadas via crontab é mantida em um arquivo dentro do
diretório /var/spool/cron, que não é diretamente acessı́vel.
O acesso ao arquivo é feito pelo comando crontab:
• crontab -e - editar o arquivo com as definições de tarefas
• crontab -l - listar o conteúdo do arquivo atual
• crontab -r - remover o arquivo.
A estrutura do arquivo de crontab é relativamente complexa, mas permite muita flexibilidade. Vejamos um exemplo:
# Usar o shell /bin/sh to run commands
SHELL=/bin/csh
# enviar stdout
MAILTO=laureano
# Explicaç~
ao do
# minuto, hora,
5 0 * * *
para laureano, mesmo sendo o crontab de outro usuario
formato
dia, m^
es, dia da semana, comando
$HOME/bin/daily.job >>&! $HOME/tmp/out
# Rodar às 14:15 todo inı́cio de m^
es
15 14 1 * *
$HOME/bin/monthly.job
# Rodar às 22:30 todos os dias úteis
30 22 * * 1-5
mail -s "S~
ao 22:30, vá para casa !" maziero < /dev/null
# Outros exemplos
23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday"
5 4 * * sun
echo "run at 04:05 every sunday"
Para maiores informações podem ser obtidas através das páginas do manual on-line:
man crontab para o comando e man 5 crontab para o arquivo de configuração.
78
8 Lista de exercı́cios - 2a. Lista
A resolução dos exercı́cios faz parte da avaliação da disciplina. Para as respostas dos
exercı́cios, basta colocar o comando utilizado e o retorno do comando (quando necessário interpretar o resultado). Para resolver vários exercı́cios será necessário utilizar pipes.
1. Monte uma linha de comandos usando pipes para identificar todos os usuários proprietários de arquivos ou diretórios a partir de /tmp, colocando o resultado no arquivo
users-tmp.txt. Siga os seguintes passos:
• Use o comando find para listar os proprietários de todos os arquivos dentro de /tmp
(dica: use a opção -printf do comando find).
• Ordene a listagem obtida, usando o comando sort
• Remova as linhas repetidas, usando o comando uniq
• Direcione a saı́da para o arquivo indicado users-tmp.txt.
2. Qual o comando para verificar quantos processos um usuário está executando ?
3. Qual o comando para verificar quem está rodando o bash no momento ?
4. Execute o seguinte comando ls -l -R /
>/dev/null 2>&1 & em background. Qual
mensagem recebida e o que significa a mesma ? Verifique com o comando ps -l o que
está acontecendo.
5. Como fica-se sabendo que o comando em background terminou ?
6. Como é possı́vel se redirecionar a saı́da de dois comandos, agrupando os mesmos através
do uso dos parênteses ? Utilize os comandos echo "Diretório home" e ls -l ~ para
testar, gravando a saı́da dos mesmo em um arquivo chamado processos.
7. Submeta o comando ls -l -R / >/dev/null 2>&1 & em background e verifique o seu
estado através do comando jobs.
8. Enquanto o comando acima ainda estiver rodando, tente sair da sessão com o comando
exit. O que aconteceu e por que ?
9. Execute um novo exit, terminando a sessão. Abra outra sessão e veja se o comando
aparece no comando jobs. Verifique também se o comando está na relação do comando
ps -u <usuario>. Explique.
10. Execute o comando ls -l -R / >/dev/null 2>&1 & em background. Como seria
possı́vel parar este processo por um tempo, sem cancela-lo. Qual seria o comando para
voltar a executar o comando em background ?
79
CAPÍTULO 8. LISTA DE EXERCÍCIOS - 2A. LISTA
11. Como se faz para voltar a executar o comando parado acima em foreground ?
12. Rode o comando ls -l -R /
>/dev/null 2>&1 & com o comando nohup. Saia
da sessão, volte e verifique se o processo ainda está rodando. Utilizar o comando
ps -lu <usuário> para isto.
13. É possı́vel voltar a rodar este processo em foreground novamente?
14. Execute o script tempo (material de aula) em background. Anote o PID deste processo.
Suspenda a execução do mesmo usando o comando kill. Quais as duas formas do
comando?
15. Ative o processo suspenso com o comando kill. Como fica o comando ?
16. Tente matar este processo usando o sinal 15 (TERM). Conseguiu ?
17. Mate o processo definitivamente com o comando kill.
18. Efetue uma conexão SSH (Secure Shell ) no servidor de especialização. Do lado do cliente
e do servidor, identifique os processos envolvidos no estabelecimento da conexão SSH e
como eles se relacionam.
19. Você é o administrador do sistema e precisa desconectar imediatamente todos os usuários
contectados via ssh. Como você pode fazer isso em uma única linha de comando ?
20. Agende uma operação de limpeza (remoção dos arquivos *bak e *~) do seu diretório HOME
para as 23:55, todas as segundas, quartas e sextas-feiras.
21. Em qual cenário é melhor suspender um processo em vez de abortá-lo ?
22. Conforme visto em aula, alguns dos aspectos de segurança de um sistema de arquivos
é não possuir arquivos com SGID ou SUID, arquivos sem órfãos (sem usuário ou grupo
associado) e arquivos/diretórios que qualquer usuário possa gravar. Crie um script para
verificar todas estas situações (dica: utilize o comando find) e altere o crontab da
máquina virtual para executar este script todos os sábados do mês. Anote os comandos
utilizados e a configuração dos arquivos envolvidos. Para criar o script:
•
•
•
•
•
Crie um arquivo utilizando o seu editor de textos preferido.
A primeira linha do script deverá ser #/bin/bash.
Em cada linha coloque um comando find.
Salve o arquivo e atribua o direito de execução ao arquivo.
Exemplo:
#/bin/bash
echo "Oi, este é um script de exemplo"
echo "Procurando todos os arquivos .c e fazendo a cópia"
find / -name "*.c" -exec cp {} /bkp \;
23. Utilizando os comandos grep, sort e cut mostre todos os alunos ligados, em ordem
alfabética, ao grupo de especialização rss08a. Estas informações podem ser obtidas no
arquivo /etc/passwd.
80
9 Administração de Usuários
O Unix e o Linux são sistemas operacionais multiusuários, portanto é necessário que todos
os usuários sejam cadastrados e tenham permissões de acesso diferenciadas. É possı́vel também
cadastra-los em grupos para facilitar o gerenciamento.
A criação e administração de contas de usuários no sistema são exclusive do superusuário
(root). É uma tarefa que demanda responsabilidade e deve ser acompanhada com muita
atenção.
9.1 Verificando informações do usuário
Todo usuário possui um número chamado user ID com o qual o sistema Unix/Linux identificao no sistema. Além do user ID, os usuários possuem o group ID. Toda vez que um processo for
ativado será atribuı́do ao processo um User ID e um Group ID. Estes ID’s são chamados de
identificação efetiva do processo.
Sintaxe: id [ opç~
oes ][ nome ]
Exemplos de uso:
• Sem parâmetros, pegando as informações do usuário atual.
marcos@laureano:~$ id
uid=1000(marcos) gid=1000(marcos) grupos=4(adm),20(dialout),24(cdrom),25(floppy),29
• Sem parâmetros, pegando as informações do usuário bin.
marcos@laureano:~$ id bin
uid=2(bin) gid=2(bin) grupos=2(bin)
• Pegando somente o user id do usuário atual.
marcos@laureano:~$ id -u
1000
9.2 Tornando-se outro usuário - Comando su
Permite o usuário mudar sua identidade para outro usuário sem fazer o logout. Útil para
executar um programa ou comando como superusuário sem ter que abandonar a seção atual.
81
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
Sintaxe: su [-] [usuário]
Onde:
• - quando informado, indica para iniciar as configurações do usuário que se está acessando.
• usuário é o nome do usuário que deseja usar para acessar o sistema. Se não digitado, é
assumido o usuário root.
Será pedida a senha do superusuário para autenticação. Digite exit quando desejar retornar
a identificação de usuário anterior.
Exemplos de uso:
• Acessando o usuário root sem carregar suas configurações
marcos@laureano:~$ id
uid=1000(marcos) gid=1000(marcos) grupos=4(adm),20(dialout),24(cdrom),25(floppy),29
marcos@laureano:~$ su
Senha:
root@laureano:/home/marcos# id
uid=0(root) gid=0(root) grupos=0(root)
root@laureano:/home/marcos# pwd
/home/marcos
root@laureano:/home/marcos# exit
exit
• Acessando o usuário root carregando suas configurações
marcos@laureano:~$ su Senha:
root@laureano:~# id
uid=0(root) gid=0(root) grupos=0(root)
root@laureano:~# pwd
/root
9.3 O comando sudo
O comando sudo oferece outra abordagem para permitir que usuários tenham acesso administrativo. Quando um usuário confiável precede um comando administrativo com sudo, o
sistema pede que o usuário entre a sua própria senha. Então, após a autenticação, e assumindo
que seja permitido, o comando administrativo é executado como se o usuário fosse o root.
Sintaxe: sudo <comando>
82
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
No exemplo acima, <comando> seria substituı́do por um comando normalmente reservado
apenas ao usuário root, como, por exemplo, mount.
Importante: Usuários do comando sudo devem tomar cuidado extra para fazer o logout
antes de deixarem suas máquinas, já que é possı́vel usar o comando novamente sem precisar
indicar a senha, por um perı́odo de cinco minutos. Esta configuração pode ser alterada através
do arquivo de configuração /etc/sudoers.
Somente os usuários listados no arquivo de configuração /etc/sudoers podem usar o comando sudo e o comando é executado no shell do usuário, e não em um shell do root.
Cada autenticação bem-sucedida é registrada no arquivo /var/log/messages e os comandos
submetidos são registrados com o nome do usuário no arquivo /var/log/secure.
Outra vantagem do comando sudo é que um administrador pode permitir que usuários acessem diferentes comandos especı́ficos de acordo com suas necessidades. Administradores que
queiram editar o arquivo de configuração do sudo, o /etc/sudoers, devem usar o comando
visudo.
Digite visudo e adicione uma linha similar na seguinte na seção de especificação de privilégios
do usuário:
marcos ALL=(ALL) ALL
Este exemplo estabelece que o usuário marcos pode usar o sudo em qualquer máquina e
executar qualquer comando.
O exemplo abaixo ilustra a granularidade possı́vel ao configurar o sudo:
%users localhost=/sbin/shutdown -h now
Este exemplo estabelece que qualquer usuário
/sbin/shutdown -h now desde que o faça pelo console.
pode
submeter
o
comando
A página man do sudoers tem uma lista detalhada das opções para este arquivo.
9.4 Arquivo passwd e group
O arquivo /etc/passwd é o banco de dados de usuários que podem logar no sistema. Tem
um formato de vários campos, separados pelo caracter : (dois pontos) e sempre na mesma
ordem:
• nome de login do usuário
• senha (criptografada, evidentemente)
83
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
• id do usuário (identificação única, semelhante a um número de carteira de identidade)
• grupo primário deste usuário (o usuário poderá participar de vários grupos)
• nome completo (nome normal, sem ser de login)
• diretório home deste usuário
• shell inicial
Um exemplo mostra melhor como são estes valores na prática:
marcos:x:1000:1000:Marcos Laureano,,,:/home/marcos:/bin/bash
Quando estamos utilizando shadow password (um pacote que evita o acesso de hackers ao
conteúdo das senhas, mesmo criptografadas, para dificultar a tentativa de quebra de senha), o
segundo campo é substituido por um * e a senha é armazenada em outro arquivo (/etc/shadow),
normalmente inacessı́vel.
O arquivo /etc/group define os grupos aos quais os usuários pertencem. Seu conteúdo são
linhas da forma: group_name:passwd:GID:user_list
onde group_name é o nome do grupo.
Um usuário pode pertencer a qualquer número de grupos, e herdará todas as permissões
de acesso a arquivos desses grupos. Opcionalmente um grupo pode ter uma senha (campo
passwd). O GID (group id ) é um código, como o user id (no arquivo /etc/passwd), mas
relativo ao grupo. Finalmente, user list é a lista (separada por vı́rgulas) de todos os usuários
que pertencem a este grupo.
9.5 Adicionando grupos - comando groupadd
Para facilitar a administração do sistema, pode-se usar o conceito de grupos de usuários com
perfis semelhantes. Por exemplo, definir grupos conforme os departamentos de uma empresa.
Sintaxe: groupadd [ opç~
oes ] grupo
Este comando irá alterar os arquivos:
• /etc/group - informações de grupos.
• /etc/gshadow- informações de grupos armazenadas de forma segura (senhas de grupo).
Exemplos de utilização:
• Criando o grupo vendas
marcos@laureano:~$ sudo groupadd vendas
marcos@laureano:~$ tail -4 /etc/group
polkituser:x:126:
84
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
web200801:x:1001:
bsi200801:x:1002:
vendas:x:1003:
• Criando o grupos alunos com GID 2424
marcos@laureano:~$ sudo groupadd -g 2424 alunos
marcos@laureano:~$ tail -4 /etc/group
web200801:x:1001:
bsi200801:x:1002:
vendas:x:1003:
alunos:x:2424:
• Criando o grupo teste sem informar o GID (observe que o sistema pega o último GID
utilizado e soma 1)
marcos@laureano:~$ sudo groupadd teste
marcos@laureano:~$ tail -4 /etc/group
bsi200801:x:1002:
vendas:x:1003:
alunos:x:2424:
teste:x:2425:
9.6 Eliminando grupos - Comando groupdel
O comando groupdel permite que se eliminem grupos do sistema. Somente o superusuário
poderá utilizar este comando.
Sintaxe: groupdel grupo
Exemplo de utilização:
marcos@laureano:~$ sudo groupdel alunos
marcos@laureano:~$ sudo groupdel vendas
marcos@laureano:~$ sudo groupdel teste
marcos@laureano:~$ tail -4 /etc/group
mlocate:x:125:
polkituser:x:126:
web200801:x:1001:
bsi200801:x:1002:
85
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
Atenção: Ao eliminar um grupo do sistema, se existir algum usuário ligado a este grupo,
ele ficará órfão.
9.7 Adicionando usuários - Comando useradd
O comando useradd permite que se criem usuários conforme especificado em opções. Somente
o superusuário poderá utilizar este comando.
Sintaxe: useradd [ opç~
oes ] usuário
Este comando irá alterar os arquivos:
• /etc/passwd - informações de contas de usuários e senhas criptografadas;
• /etc/shadow - informações de contas de usuários e senhas criptografadas;
• /etc/group - informações de grupos.
Exemplos de utilização:
• Cria o usuário mlaureano (como não foi informado grupo, é criado um grupo com o
mesmo nome de usuário). O diretório home não foi criado.
marcos@laureano:~$ sudo useradd mlaureano
marcos@laureano:~$ id mlaureano
uid=1035(mlaureano) gid=1035(mlaureano) grupos=1035(mlaureano)
marcos@laureano:~$ tail -3 /etc/passwd
e1000801684:x:1032:1001:WILLIAN RODRIGUEZ :/home/web200801/e1000801684:/bin/mbash
e1000500643:x:1033:1002:BRUNO SANTOS:/home/bsi200801/e1000500643:/bin/bash
e1000500502:x:1034:1002:PAULO VICTOR:/home/bsi200801/e100500502:/bin/bash
mlaureano:x:1035:1035::/home/mlaureano:/bin/sh
• Cria o usuário jmedeiros e designa o diretório /home/jmedeiros como o diretório pessoal
deste.
marcos@laureano:~$ sudo useradd -d /home/jmedeiros jmedeiros
marcos@laureano:~$ id jmedeiros
uid=1036(jmedeiros) gid=1036(jmedeiros) grupos=1036(jmedeiros)
marcos@laureano:~$ tail -4 /etc/passwd
e1000500643:x:1033:1002:BRUNO SANTOS:/home/bsi200801/e1000500643:/bin/bash
e1000500502:x:1034:1002:PAULO VICTOR:/home/bsi200801/e100500502:/bin/bash
mlaureano:x:1035:1035::/home/mlaureano:/bin/sh
jmedeiros:x:1036:1036::/home/jmedeiros:/bin/sh
86
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
• Cria o usuário luiz com o shell bash.
marcos@laureano:~$ sudo useradd -s /bin/bash luiz
marcos@laureano:~$ id luiz
uid=1037(luiz) gid=1037(luiz) grupos=1037(luiz)
marcos@laureano:~$ tail -4 /etc/passwd
e1000500502:x:1034:1002:PAULO VICTOR:/home/bsi200801/e100500502:/bin/bash
mlaureano:x:1035:1035::/home/mlaureano:/bin/sh
jmedeiros:x:1036:1036::/home/jmedeiros:/bin/sh
luiz:x:1037:1037::/home/luiz:/bin/bash
• Cria o usuário rosa com o grupo root
marcos@laureano:~$ sudo useradd -g root rosa
marcos@laureano:~$ id rosa
uid=1038(rosa) gid=0(root) grupos=0(root)
marcos@laureano:~$ tail -4 /etc/passwd
mlaureano:x:1035:1035::/home/mlaureano:/bin/sh
jmedeiros:x:1036:1036::/home/jmedeiros:/bin/sh
luiz:x:1037:1037::/home/luiz:/bin/bash
rosa:x:1038:0::/home/rosa:/bin/sh
• Cria o usuário luizotavio com várias informações
marcos@laureano:~$ sudo useradd -d /home/luizotavio -g users -c "Luiz Otávio Laurea
marcos@laureano:~$ id luizotavio
uid=1039(luizotavio) gid=100(users) grupos=100(users)
marcos@laureano:~$ tail -4 /etc/passwd
jmedeiros:x:1036:1036::/home/jmedeiros:/bin/sh
luiz:x:1037:1037::/home/luiz:/bin/bash
rosa:x:1038:0::/home/rosa:/bin/sh
luizotavio:x:1039:100:Luiz Otávio Laureano:/home/luizotavio:/bin/sh
Utilize o manual on-line (man) para ver outras opções de utilização do comando useradd.
87
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
9.8 Alterando a senha do usuário - comando passwd
O comando passwd permite que se troque a senha de determinado usuário. O superusuário
pode trocar a senha de qualquer outro. O usuário comum, porém, pode trocar somente a sua
senha. As senhas são armazenadas no arquivo /etc/passwd ou /etc/shadow. No arquivo
/etc/passwd também é armazenado as informações relativas aos usuários.
Após a criação do usuário será necessário criar uma senha para este, caso contrário, não será
permitido que este usuário faça login no sistema.
Sintaxe: passwd [usuário]
9.9 Eliminando usuários - Comando userdel
O comando userdel permite que se eliminem usuários do sistema. Somente o superusuário
poderá utilizar este comando.
Sintaxe: userdel [opç~
oes] usuário
Exemplos de utilização:
• Eliminando o usuário luizotavio. O diretório home não é eliminado.
marcos@laureano:/home$ ls -l
total 24
drwxr-xr-x 4 root
bsi200801 4096 2008-05-15
drwxr-xr-x 2 luizotavio users
4096 2008-05-19
drwxr-xr-x 65 marcos
marcos
12288 2008-05-19
drwxr-xr-x 34 root
web200801 4096 2008-05-14
marcos@laureano:/home$ sudo userdel luizotavio
marcos@laureano:/home$ ls -l
total 24
drwxr-xr-x 4 root
bsi200801 4096 2008-05-15
drwxr-xr-x 2
1039 users
4096 2008-05-19
drwxr-xr-x 65 marcos marcos
12288 2008-05-19
drwxr-xr-x 34 root
web200801 4096 2008-05-14
20:19
15:22
15:10
20:06
20:19
15:22
15:10
20:06
bsi200801
luizotavio
marcos
web200801
bsi200801
luizotavio
marcos
web200801
• Eliminando o usuário luizotavio. O diretório home é eliminado.
marcos@laureano:/home$ ls -l
total 24
drwxr-xr-x 4 root
bsi200801 4096 2008-05-15
drwxr-xr-x 2 luizotavio users
4096 2008-05-19
drwxr-xr-x 65 marcos
marcos
12288 2008-05-19
drwxr-xr-x 34 root
web200801 4096 2008-05-14
88
20:19
15:22
15:10
20:06
bsi200801
luizotavio
marcos
web200801
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
marcos@laureano:/home$ sudo userdel -r luizotavio
marcos@laureano:/home$ ls -l
total 20
drwxr-xr-x 4 root
bsi200801 4096 2008-05-15 20:19 bsi200801
drwxr-xr-x 65 marcos marcos
12288 2008-05-19 15:10 marcos
drwxr-xr-x 34 root
web200801 4096 2008-05-14 20:06 web200801
Atenção: Ao eliminar um usuário do sistema, verifique se em seu diretório home não existem
arquivos importantes para a empresa, na dúvida, elimine o usuário do sistema, mas mantenha
o seu diretório home e peça para alguém analisar o conteúdo do mesmo.
Assim que tiver eliminado um usuário, talvez seja interessante verificar se o UID antigo do
usuário não tem propriedade sobre outros arquivos no sistema. Para localizar os caminhos de
arquivos órfãos, pode-se usar o comando find com o argumento -nouser.
9.10 Modificando o perfil de um usuário - comando usermod
Este comando tem a mesma sintaxe e os mesmos parâmetros (existem algumas opções a
mais) do comando useradd, a diferença é que ele modifica ou adiciona informações relativas a
um usuário já cadastrado.
Sintaxe: usermod [ opç~
oes ] usuário
Exemplo de utilização:
marcos@laureano:/home$ ls -l
total 24
drwxr-xr-x 4 root
bsi200801 4096 2008-05-15 20:19
drwxr-xr-x 65 marcos marcos
12288 2008-05-19 15:10
drwxr-xr-x 2 rosa
root
4096 2008-05-19 15:30
drwxr-xr-x 34 root
web200801 4096 2008-05-14 20:06
bsi200801
marcos
rosa
web200801
marcos@laureano:/home$ tail -2 /etc/passwd
luiz:x:1037:1037::/home/luiz:/bin/bash
rosa:x:1038:0::/home/rosa:/bin/sh
marcos@laureano:/home$ sudo usermod -s /bin/bash -d /home/bsi200801/rosa -m rosa
marcos@laureano:/home$ tail -2 /etc/passwd
luiz:x:1037:1037::/home/luiz:/bin/bash
rosa:x:1038:0::/home/bsi200801/rosa:/bin/bash
89
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
marcos@laureano:/home$ ls -l
total 20
drwxr-xr-x 5 root
bsi200801 4096 2008-05-19 15:31 bsi200801
drwxr-xr-x 65 marcos marcos
12288 2008-05-19 15:10 marcos
drwxr-xr-x 34 root
web200801 4096 2008-05-14 20:06 web200801
marcos@laureano:/home$ cd bsi200801/
marcos@laureano:/home/bsi200801$ ls -l
total 12
drwxr-xr-x 4 e1000500643 bsi200801 4096 2008-05-15 21:40 e1000500643
drwxr-xr-x 2 e1000500502 bsi200801 4096 2008-05-15 21:03 e100500502
drwxr-xr-x 2 rosa
root
4096 2008-05-19 15:30 rosa
marcos@laureano:/home/bsi200801$
Atenção: Ao modificar o diretório home de um usuário do sistema, utilize sempre a opção
-m para mover o diretório anterior para o novo diretório especificado.
Utilize o manual on-line (man) para ver outras opções de utilização do comando usermod.
9.11 Exemplo Script automático
Abaixo o script que foi utilizado para criar as contas dos alunos de especialização, considerando que o arquivo alunos.txt tem o formato:
matricula - nome
Onde:
• matricula - número de 8
• nome - Nome completo
O script aluno.sh realiza a leitura da matricula e do nome, cria uma senha padrão utilizando
o comando mkpasswd, seta a quota do usuário (comando edquota) e já define a data de validade
da conta (comando chage).
IFS=" - "
while read MATRICULA ALUNO
do
eUSER="e$MATRICULA"
ePWD="p$MATRICULA"
ePWD=$(mkpasswd -Hmd5 $ePWD)
90
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
echo "/usr/sbin/useradd -g rss08a -c ’$ALUNO’ -s /bin/bash -p ’$ePWD’ -m -d /home/esp
echo "/usr/sbin/edquota -p aluno_referencia $eUSER"
echo "/usr/bin/chage -E ’2009-12-31’ $eUSER"
done < alunos.txt
9.12 Atividades sugeridas
1. Informe os comandos e anotem o conteúdo dos arquivos /etc/group e do /etc/passwd
após cada passo (utilize o comando tail para visualizar o final do arquivo) e o resultado
do comando id.
•
•
•
•
•
Adicionar o usuário aluno01 com ID 600;
Modificar o shell para o /bin/sh;
Acrescentar o comentário Conta de teste do aluno;
Criar o grupo alunos;
Ligar o usuário aluno01 ao grupo alunos.
9.13 Controle de quotas
O sistema de cotas do Linux permite especificar limites em dois aspectos de armazenamento
de disco: O número de inodes (ou arquivos) que um usuário pode possuir e/ou o número de
blocos de disco que podem ser alocados a um usuário.
O conceito do sistema de cotas é que os usuários são forçados a ficar dentro do limite de
utilização do disco na maior parte do tempo.
9.13.1 Configuração de cotas para usuários
Esta operação é executada com o comando edquota.
Por exemplo, o comando
edquota laureano o levará ao vi permitindo a edição de cotas para o usuário laureano. Exemplo:
laureano:~> sudo /usr/sbin/edquota laureano
Disk quotas for user laureano (uid 1094):
Filesystem
blocks
/dev/sda1
152
/dev/sdb2
1213176
91
soft
0
0
hard
0
0
inodes
22
5526
soft
0
0
hard
0
0
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
• blocks - é o número total de blocos que um usuário está utilizando em uma partição.
• Inodes - é o número total de arquivos que um usuário está usando numa partição.
Os campos que o administrador deverá alterar neste arquivo são: soft e hard. Este campos
indicam os limites do usuário.
• soft indica a quantidade máxima de espaço em disco que um usuário pode usar numa
determinada partição antes de ser alertado que execedeu o seu limite.
• hard especifica o limite absoluto de uso do disco do usuário.
É possı́vel definir por quanto tempo o usuário pode permanecer entre os limites (hard e soft).
Este perı́odo de tolerância é chamado de grace period. O grace period é definido com o comando
edquota -t. Este perı́odo pode ser definido em sec (segundos), min (minutos), hour (horas),
day (dias), week (semanas), e month (meses), e é definido por sistema de arquivos, e não por
usuários ou grupos. Exemplo:
laureano:~> sudo /usr/sbin/edquota -t
Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem
Block grace period
Inode grace period
/dev/sda1
7days
7days
/dev/sdb2
7days
7days
E por fim, o comando repquota exibe um sumário do sistema de cotas. Exemplo:
laureano:~> sudo /usr/sbin/repquota /dev/sdb2
*** Report for user quotas on device /dev/sdb2
Block grace time: 7days; Inode grace time: 7days
Block limits
File limits
User
used
soft
hard grace
used soft hard grace
---------------------------------------------------------------------root
-- 6311852
0
0
63423
0
0
daemon
-52
0
0
9
0
0
lp
-16
0
0
2
0
0
games
-212
0
0
27
0
0
rpm
-- 253856
0
0
34
0
0
avahi
-32
0
0
6
0
0
apache
-232
0
0
37
0
0
ntp
-16
0
0
2
0
0
mysql
-956
0
0
62
0
0
92
CAPÍTULO 9. ADMINISTRAÇÃO DE USUÁRIOS
hsqldb
-8
0
0
gdm
-352
0
0
beaglidx -80
0
0
tomcat
-792
0
0
maziero
-0
0
0
alcides
-- 725316
0
0
jamhour
-- 123752
0
0
teigao
-- 3662744 4000000 5000000
pedroso
-- 3831500
0
0
laureano -- 1213176
0
0
santin
-- 412176
0
0
<resultado suprimido>
1
0
0
18
0
0
10
0
0
101
0
0
667
0
0
3186
0
0
5
0
0
3152 40000 50000
19574
0
0
5526
0
0
6270
0
0
9.14 Configuração do BASH-shell
Ao ser lançado, o shell lê arquivos de configuração que contém comandos para definir o
ambiente de trabalho de cada usuário. A sintaxe dos arquivos de configuração é bastante
simples, similar à das linhas de comando. O BASH-Shell lê os arquivos de configuração, caso
existam, na seqüência apresentada a seguir:
• /etc/bash.bashrc - lido pelo shell durante seu lançamento, contém configurações comuns
a todos os usuários.
• ~/.bashrc - configurações locais de cada usuário (arquivo armazendo no diretório home
de cada usuário), lidas por todos os shells (configurada através da variável do ENV).
• ~/.bash_profile - ações especı́ficas ao usuário, a executar no momento do login. Este
arquivo também fica no diretório home de cada usuário.
Para criar variáveis e aliases permanentes, ou para executar comandos ao iniciar o shell,
basta inserir os comandos correspondentes no arquivo desejado. Por exemplo, se inserirmos o
comando:
alias ola=’echo "ola $LOGNAME, como vai voce"’
No arquivo ~/.bashrc, no próximo lançamento de shell ele será lido e fará parte dos comandos disponı́veis ao usuário.
93
10 Lista de exercı́cios - 3a. Lista
1. Crie os grupos aluno mesa01, aluno mesa02, aluno mesa03.
2. Crie os usuários aluno 01 e aluno 02 com o grupo aluno mesa01.
3. Crie os usuários aluno 03 e aluno 04 com o grupo aluno mesa02.
4. Crie os usuários aluno 05 e aluno 06 com o grupo aluno mesa03.
5. Crie o grupo alunos geral.
6. Ligue todos os alunos 0X ao grupo alunos geral.
7. Crie o usuário admina.
8. Ligue o usuário admina com os grupos aluno mesa01, aluno mesa02, aluno mesa03, root
e alunos geral.
9. Mude o shell dos usuários ligado aos grupos aluno mesa01 e aluno mesa03 para /bin/sh
10. Acrescente no campo comentários de todos os alunos o nome do aluno e o grupo a que
pertecem. Por exemplo: ”aluno 01 - aluno mesa01”.
11. O usuário admina consegue montar um sistema de arquivos ?
12. Veja o comando newgrp, mude o grupo do usuário admina na sessão atual.
13. Qual o comando para verificar em todo o sistema se existe arquivos orfãos de usuário ?
14. Qual o comando para verificar em todo o sistema se existe arquivos orfãos de grupo ?
15. Utilize o seu editor de textos preferidos (exemplo: vi) e modifique o arquivo /etc/group
modificando os grupos aluno mesa01 para aluno mesa1.
16. Na relação do comando ls -l, o grupo dos arquivos pertecentes aos usuários aluno 01 e
aluno 02 foram modificados também ? Explique.
94
11 Programação Shell
11.1 Variáveis
O shell permite a criação de variáveis para armazenar valores durante uma sessão de trabalho
ou em scripts. Existem dois tipos de variáveis: locais e exportáveis ou variáveis de ambiente.
As variáveis exportáveis ou de ambiente: são acessı́veis a todos os comandos lançados pelo
shell (são passadas a todos os processos filhos do shell ). Normalmente são escritas em letras
maiúsculas. Para criar uma variável de ambienta basta fazer export var=valor, repare que
não pode existir espaços em brancos entre o nome da variável, o sinal de atribuição (=) e o
conteúdo da variável. Para destruir uma variável basta utilizar o comando unset. Exemplo:
export GRASPHOME=/usr/local/grasp
echo $GRASPHOME
unset GRASPHOME
Para acessar o conteúdo de uma variável basta utilizar o caracter $ antes do nome da variável.
Um outro exemplo de utilização:
export GRASPHOME=/usr/local/grasp
echo ${GRASPHOME}
unset GRASPHOME
Torne por hábito utilizar este último formato, ou seja, o nome da variável sempre entre { }
Algumas variáveis de ambiente exportáveis têm valor pré-definido pelo shell, e são importantes para o funcionamento normal da sessão de trabalho. Vejamos as principais (a lista de
variáveis exportáveis pode ser consultada através do comando env):
• PATH : define os diretórios onde podem ser encontrados programas executáveis.
• MANPATH : define os diretórios contendo páginas de manual.
95
CAPÍTULO 11. PROGRAMAÇÃO SHELL
• USER : nome de login do usuário da sessão.
• HOME : diretório home do usuário.
• HOST : nome do host (máquina).
• SHELL : shell ativo.
• TERM : tipo de terminal.
• MAIL: localização da caixa de correio do usuário no sistema local.
As variáveis locais são acessı́veis somente dentro do shell onde foram criadas. Para criar uma
variável local basta fazer var=valor, repare que não pode existir espaços em brancos entre o
nome da variável, o sinal de atribuição (=) e o conteúdo da variável. Para destruir uma variável
basta utilizar o comando unset.
nome=joao
echo $nome
touch $nome.txt
unset nome
nomes = (joao maria pedro antonio)
echo $nomes
echo ${nomes[2]}
mkdir ${nomes[3]}
unset nomes
As variáveis locais podem armazenar listas de valores, úteis sobretudo na construção de
scripts. A forma de definição e uso de variáveis contendo listas segue a seguinte sintaxe:
• $nome : o conteúdo da variável nome
•
${nome[x]} : o conteúdo da variável, na posição x
• ${#nome[@]} : o número de posições da variável
• ${#nome} : o número de caracteres da variável
Vejamos alguns exemplos:
96
CAPÍTULO 11. PROGRAMAÇÃO SHELL
ppgia:~> nome=( joao maria pedro antonio luis )
ppgia:~> echo $nome
joao
ppgia:~> echo ${nome[3]}
antonio
ppgia:~> echo ${#nome[@]}
5
ppgia:~> echo ${#nome}
4
11.2 Estrutura geral de um script em BASH-Shell
Os arquivos de script permitem construir esquemas de execução complexos a partir dos
comandos básicos do shell. A forma mais elementar de arquivo de script é apenas um conjunto
de comandos em um arquivo texto, com permissões de execução habilitadas. O arquivo backup,
cujo conteúdo é mostrado a seguir, é um exemplo de script:
Script 11.1: Script Backup
1
echo "Iniciando backup..."
# montar o diretório do servidor de backup
mount backserver.ppgia.pucpr.br:/backup /backup
6
# efetuar o backup em um arquivo tar compactado
tar czf /backup/home.tar.gz /home
# desmontar o diretório do servidor de backup
11
umount /backup
echo "Backup concluido !"
Quando o script backup for executado, os comandos do arquivo serão executados em seqüência
pelo shell corrente (de onde ele foi lançado). Assim, se o usuário estiver usando o shell bash,
os comandos do script serão executados por esse shell. Como isso poderia gerar problemas em
scripts usados por vários usuários, é possı́vel forçar a execução do script com um shell especı́fico
(ou outro programa que interprete os comandos do arquivo). Para isso é necessário informar
ao sistema operacional o programa a ser usado, na primeira linha do arquivo do script:
Script 11.2: Script Backup modificado
97
CAPÍTULO 11. PROGRAMAÇÃO SHELL
2
7
#!/bin/bash −−noprofile
# A opção −−noprofile inibe a leitura dos arquivos de inicialização
# do shell, tornando o lançamento do script muito mais rápido.
# comandos de um script em Bash−Shell
server=backserver.ppgia.pucpr.br
backdir=/backup
...
exit 0
Com isso, será lançado um shell bash separado, somente para interpretar as instruções do
script. O shell será terminado pelo comando exit, cujo parâmetro é devolvido ao shell inicial
através da variável $?. Esse procedimento pode ser usado para lançar scripts para outros shells,
ou mesmo outros programas, como perl, awk, sed, etc.
11.3 Parâmetros de entrada
Os argumentos da linha de comando são passados para o shell através da variável local
$argv. Os campos individuais dessa variável podem ser acessados como em uma variável local
qualquer. Além disso, uma série de atalhos é definida para facilitar o acesso a esses parâmetros:
• $0 : o nome do script;
• $n : o n-ésimo argumento;
• $* : todos os argumentos;
• $# : quantidade de argumentos;
• $? : status do último comando executado (0 = verdadeiro e 1 = falso);
• $$ : número de processo (PID) do shell que executa o script.
Vejamos um exemplo através do script listaparams:
Script 11.3: Script listaparams
#!/bin/bash
# exemplo de uso dos parâmetros de entrada
4
echo
echo
echo
echo
echo
"Nome do script : $0"
"Primeiro par^
ametro : $1"
"Todos os par^
ametros : $*"
"Numero de parametros : $#"
"Numero deste processo : $$"
9
exit 0
98
CAPÍTULO 11. PROGRAMAÇÃO SHELL
Chamando o script acima com alguns parâmetros obtemos a seguinte resposta:
ppgia:~> listaparams banana tomate pessego melao pera uva
Nome do script : listaparams
Primeiro par^
ametro : banana
Todos os par^
ametros : banana tomate pessego melao pera uva
Numero de parametros : 6
Numero deste processo : 2215
11.4 Controle de fluxo
Existem diversos construtores de controle de fluxo que podem ser usados em scripts shell.
Os principais são:
• if-then:
#!/bin/bash
read -p "Digite algo:" VALOR
if [ "$VALOR" == "xpto" ]
then
echo "Voce digitou xpto".
fi
exit 0
• if-then-else:
#!/bin/bash
read -p "Digite algo:" VALOR
if [ "$VALOR" == "xpto" ]
then
echo "Voce digitou xpto".
else
echo "Voce nao digitou xpto".
fi
exit 0
• if-then-elif-else:
99
CAPÍTULO 11. PROGRAMAÇÃO SHELL
#!/bin/bash
read -p "Digite algo:" VALOR
if [ "$VALOR" == "xpto" ]
then
echo "Voce digitou xpto."
elif [ "$VALOR" == "xptu" ]
then
echo "Voce digitou xptu."
else
echo "Voce digitou $VALOR."
fi
exit 0
• for loop :
#!/bin/bash
for ARQUIVO in ‘ls /tmp/*.~*‘
do
rm -i $ARQUIVO
done
exit 0
• while loop:
#!/bin/bash
i=1
while [ $i -le 10 ]
do
echo $i
i=$((i+1))
done
IFS=":"
while read pLOGIN pPWD pID pUID pNAME pHOME pSHELL
do
echo "$pLOGIN - $pNAME - $pSHELL"
done < /etc/passwd
• case
#!/bin/bash
100
CAPÍTULO 11. PROGRAMAÇÃO SHELL
read -p "Entre com um nome:" NOME
case $NOME in
JOAO|MARIA)
echo "Joao e maria";; #atencao para os 2 pontos-e-virgula
M*)
echo "O nome comeca com a letra M";;
*)
echo "O nome foi $NOME";;
esac
• select
#!/bin/bash
PS3="Arquivo a ser deletado:"
select ARQUIVO in * SAIR
do
if [ "$ARQUIVO" == "SAIR" ]
then
break
fi
rm -i $ARQUIVO
done
Além das estruturas acima, algumas outras podem ser usadas para executar comandos em
situações especı́ficas:
• ‘comando‘: substitui a expressão entre crases pelo resultado (stdout) da execução do
comando. Por exemplo, a linha de comando abaixo coloca na variável arqs os nomes de
arquivos retornados pelo comando find:
arqs=‘find /etc -iname ’???’‘
Uma forma similar e mais eficiente:
arqs=$(find /etc -iname ’???’)
• comando1; comando2; comando3: executa seqüencialmente os comandos indicados:
cp *.c /tmp ; rm *.txt ; ls -l
101
CAPÍTULO 11. PROGRAMAÇÃO SHELL
• ( comando ): executa o comando entre parênteses em um sub-shell (lança um shell
separado e passa o comando como parâmetro). Por exemplo:
( ls -l > stdout.txt ) 2> stderr.txt
O exemplo acima é bastante usado para separar as saı́das stderr e stdout nos shells da
famı́lia bash.
11.4.1 Outros Exemplos
Exemplo utilizando select e case:
#!/bin/bash
PS3="Please enter a number "
select i in fo*
do case $i in
food|fool|foot)
echo "good choice"
break;;
for|foxy)
echo ’poor choice’
echo ’Invalid number’
break;;
*)
echo try again;;
esac
done
Exemplo testando o retorno de um comando:
#!/bin/bash
ls /etc/passwd >/dev/null 2>&1
if [ $? ]
then
echo "Existe o arquivo"
else
echo "Arquivo nao existe!!!"
fi
Exemplo utilizando o for:
102
CAPÍTULO 11. PROGRAMAÇÃO SHELL
for arq in /etc/passwd /etc/hosts /etc/groups
do
cat $arq
done
11.5 Operadores lógicos e aritméticos
Para implementar as estruturas de controle de fluxo é necessário definir condições, que podem
ser feitas através de testes. Podemos efetuar comparações entre expressões (deve-se utilizar [ ]
ou o comando test no if/while/etc) através dos seguintes operadores:
• Comparações entre números:
–
–
–
–
–
–
-eq
-ge
-gt
-le
-lt
-ne
igual a
maior ou igual
maior que
menor ou igual
menor que
diferente (não igual)
• Comparações entre strings:
–
–
–
–
== igual a
!= diferente (não igual)
< maior
> menor
if [[ "xpto" < "xpti" ]]
then
echo "oi"
else
echo "ola"
fi
• Conectivos lógicos (and, or):
– -a e lógico
– -o ou lógico
• Operadores aritméticos: + - * / %
Para realizar uma operação matemática,
var=$((var1 express~
ao var2))
é melhor utilizar a seguinte notação
Vejamos alguns exemplos de expressões usando os operadores acima definidos:
103
CAPÍTULO 11. PROGRAMAÇÃO SHELL
# se o usuário logado for o root
if [ "$LOGNAME" == "root" ]
then
...
fi
#enquanto n~
ao esgotar toda a lista de par^
ametros
while test "$1" != ""
do
echo "Par^
ametro $1"
shift #desloca par^
ametros
done
#verificando quantos par^
ametros foram passados
if [ $# -le 3 ]
then
echo "Número insuficiente de par^
ametros de entrada"
fi
#contagem simples
CONTADOR=1
while [ $CONTADOR -le 10 ]
do
echo "Número $CONTADOR"
CONTADOR=$((CONTADOR+2))
done
#alternativa para limitar a quantidade de usuários conectados
if [ ‘who | wc -l‘ -ge $maxusers ]
then
echo "Login negado, pois há mais de $maxusers usuários conectados."
logout
else
...
fi
11.6 Operadores de teste em arquivos e strings
Os operadores de teste em arquivos e strings permitem verificar propriedades de entradas no
sistema de arquivos. Eles são usados na forma -op, onde op corresponde ao teste desejado. Os
principais testes são:
104
CAPÍTULO 11. PROGRAMAÇÃO SHELL
• e: a entrada existe;
• r: a entrada pode ser lida;
• w: a entrada pode ser escrita;
• O: usuário é o proprietário da entrada;
• s: tem tamanho maior que zero;
• f: é um arquivo normal;
• d: é um diretório;
• L: é um link simbólico;
• b: é um dispositivo orientado a bloco;
• c: é um dispositivo orientado a caracatere;
• p: é um named pipe (fifo);
• S: é um socket special file;
• u: tem o bit SUID habilitado;
• g: tem o bit SGID habilitado;
• G: grupo da entrada é o mesmo do proprietário;
• k: stick bit está habilitado;
• x: a entrada pode ser executada;
• z: a string tem tamanho zero;
• n: a string tem tamanho diferente de zero;
• nt: Verifica se um arquivo é mais novo que outro;
• ot: Verifica se um arquivo é mais velho que outro;
• ef: Verifica se é o mesmo arquivo (link).
Vejamos um exemplo de uso desses operadores:
arquivo=’/etc/passwd’
if [ -e $arquivo ]
then
if [ -f $arquivo ]
then
if [ -r $arquivo ]
then
source $arquivo
else
echo "Nao posso ler o arquivo $arquivo"
105
CAPÍTULO 11. PROGRAMAÇÃO SHELL
fi
else
echo "$arquivo n~
ao é um arquivo normal"
fi
else
echo "$arquivo n~
ao existe"
fi
#!/bin/bash
arq1=$0
arq2=’/etc/passwd’
arq3=’/etc/passwd’
if [ $arq1 -nt $arq2 ]
then
echo "Arquivo $arq1 eh mais novo que $arq2"
fi
if [ $arq1 -ot $arq2 ]
then
echo "Arquivo $arq1 eh mais velho que $arq2"
fi
if [ $arq3 -ef $arq2 ]
then
echo "Trata-se do mesmo arquivo"
fi
As opções podem ser agrupadas em um único teste. Por exemplo, -erf arquivo testa se o
arquivo indicado existe, se é um arquivo normal e se pode ser lido:
arquivo=’/etc/passwd’
if [ -efr $arquivo ]
then
source $arquivo
else
echo "Problemas no acesso a $arquivo"
fi
106
CAPÍTULO 11. PROGRAMAÇÃO SHELL
11.7 Expansão de variáveis
Muitas vezes é necessário pegar apenas uma parte de uma variável. Neste caso, é possı́vel utilizar os caracteres de expansão de variáveis para pegar partes de uma string. Alguns parâmetros
de expansão são:
• ${par^
ametro#padr~
ao} : Remove a menor parte à esquerda do parâmetro.
• ${par^
ametro##padr~
ao} : Remove a maior parte à esquerda do parâmetro.
• ${par^
ametro%padr~
ao} : Remove a menor parte à direita do parâmetro.
• ${par^
ametro%%padr~
ao} : Remove a maior parte à direita do parâmetro.
• ${par^
ametro//padr~
ao/string} : Substitui o padrão pela nova string do parâmetro.
• ${par^
ametro:inı́cio:tamanho} : Pega uma parte da variável.
Existem vários outros, consulte o comando bash (man bash) para maiores detalhes.
Vejamos script de exemplo do uso desses modificadores:
#!/bin/bash
texto="/etc/passwd"
echo "Tirando o nome do arquivo = ${texto%passwd}"
echo "Tirando o caminho do arquivo = ${texto#/etc/}"
echo "Substituindo passwd por group = ${texto//passwd/group}"
#!/bin/bash
meses=( Janeiro, Fevereiro, Marco, Abril, Maio, Junho, Julho, Agosto, Setembro, Outubro,
echo
echo "Entre com Uma data no formato dd/mm/aaaa :"
read data
dia=${data:0:2}
mes=${data:3:2}
ano=${data:6:4}
echo
echo "A data digitada foi $dia de ${meses[$mes-1]} de $ano"
echo
11.8 Mais exemplos de script
Analise e descreva o que faz o script a seguir, passo a passo:
107
CAPÍTULO 11. PROGRAMAÇÃO SHELL
#!/bin/bash --noprofile
# testar se ha um so parametro de entrada
if [ $# != 1 ]
then
echo "Erro na chamada"
echo "Uso: criadir numero de diretorios"
exit 1
fi
num=0
while [ $num -lt $1 ]
do
echo "Criando diretorio $num"
mkdir dir$num
num=$((num+1))
done
echo "Acabei de criar $1 diretorios"
exit 0
Mais outro script:
read -p "Entre com o nome do usuario:" pUser
resultado=$(grep $pUser /etc/passwd)
if [ $? -ne 0 ]
then
echo "Usuario nao existe"
else
echo -n "Login:"
echo $resultado|cut -d: -f1
echo -n "User ID:"
echo $resultado|cut -d: -f3
echo -n "Group ID:"
echo $resultado|cut -d: -f4
echo -n "Nome:"
echo $resultado|cut -d: -f5
echo -n "Diretorio de trabalho:"
echo $resultado|cut -d: -f6
echo -n "Shell padrao:"
echo $resultado|cut -d: -f7
fi
108
CAPÍTULO 11. PROGRAMAÇÃO SHELL
Exemplo completo de cadastro simples em arquivos, utiliza funções:
#!/bin/bash
function inclui()
{
read -p "Entre com o codigo:" cCodigo
grep -e "^$cCodigo" cadastro >/dev/null 2>&1
if [ $? -eq 0 ]
then
echo "Codigo cadastrado"
return
else
read -p "Nome:" cNome
read -p "Email:" cEmail
read -p "Confirma (S/N)?" cConfirma
if [ "$cConfirma" == "S" ]
then
echo "$cCodigo:$cNome:$cEmail" >> cadastro
fi
fi
return
}
function consulta()
{
read -p "Entre com o codigo:" cCodigo
consulta=$(grep -e "^$cCodigo" cadastro 2>/dev/null)
if [ $? -ne 0 ]
then
echo "Codigo nao existe"
return
else
echo -n "Nome:"
echo $consulta | cut -d: -f2
echo -n "Email:"
echo $consulta | cut -d: -f3
fi
return
}
function exclui()
109
CAPÍTULO 11. PROGRAMAÇÃO SHELL
{
read -p "Entre com o codigo:" cCodigo
consulta=$(grep -e "^$cCodigo" cadastro 2>/dev/null)
if [ $? -ne 0 ]
then
echo "Codigo nao existe"
return
else
echo -n "Nome:"
echo $consulta | cut -d: -f2
echo -n "Email:"
echo $consulta | cut -d: -f3
read -p "Confirma exclusao (S/N) ?" confirma
if [ "$confirma" == "S" ]
then
grep -e "^$cCodigo" -v cadastro > temp.tmp 2>/dev/null
mv temp.tmp cadastro
fi
fi
return
}
function relatorio()
{
l=0
>relatorio.txt
while read LINHA
do
if [ $l -eq 0 ]
then
printf "Codigo\tMatricula\tEmail\n" >> relatorio.txt
fi
r=$(echo $LINHA | cut -d: -f1)
printf "$r\t" >> relatorio.txt
r=$(echo $LINHA | cut -d: -f2)
printf "$r\t" >> relatorio.txt
r=$(echo $LINHA | cut -d: -f3)
printf "$r\n" >> relatorio.txt
l=$((l+1))
if [ $l -eq 60 ]
then
l=0
110
CAPÍTULO 11. PROGRAMAÇÃO SHELL
fi
done < cadastro
}
PS3="Escolha a opç~
ao:"
select opcao in Inclusao Alteracao Consulta Exclusao Relatorio Sair
do case $opcao in
Inclusao)
inclui;;
Consulta)
consulta;;
Exclusao)
exclui;;
Relatorio)
relatorio;;
Sair)
exit 0;;
*)
echo "Opcao ainda nao implementada";;
esac
done
11.9 Atividades sugeridas
1. Escreva um script chamado clean para limpar seu diretório $HOME, removendo todos os
arquivos com extensão ”bak”ou ” ”que não tenham sido acessados há pelo menos 3 dias.
Dica: use os comandos find e rm e a avaliação por aspas inversas.
2. Escreva um script para criar diretórios com nome DirXXX, onde XXX varia de 001 a 299.
Dica: use o comando printf para gerar o nome dos diretórios a criar.
3. Escreva um conjunto de scripts para gerenciar o apagamento de arquivos. O script del
deve mover os arquivos passados como parâmetros para um diretório lixeira; o script
undel deve mover arquivos da lixeira para o diretório corrente e o script lsdel deve listar
o conteúdo da lixeira. O diretório lixeira deve ser definido através da variável de ambiente
$LIXEIRA.
4. Funda os scripts do exercı́cio anterior em um só script del, com os demais (undel e
lsdel) sendo links simbólicos para o primeiro. Como fazer para que o script saiba qual
a operação desejada quando ele for chamado, sem precisar informá-lo via parâmetros ?
111
12 Comandos Básicos
12.1 Comandos Iniciais
Tabela 12.1: Comandos Básicos - Armazenamento
Comando
bzip2
cpio
gunzip
gzip
tar
zcat
zforce
Ação
Compacta Arquivos para liberar espaço.
Cria e desempacota repositórios de arquivos.
Expande arquivos compactados (.gz e .Z ).
Compacta arquivos para liberar espaço.
Copia ou restaura arquivos de uma mı́dia de repositório.
Exibe o conteúdo de arquivos compactados.
Obriga os arquivos gzip a terem a extensão .gz.
Tabela 12.2: Comandos Básicos - Comparações
Comando
cmp
comm
diff
diff3
sdiff
Ação
Compara
Compara
Compara
Compara
Compara
dois arquivos, byte por byte.
itens em dois arquivos ordenados.
dois arquivos, linha por linha.
três arquivos.
e mescla dois arquivos interativamente.
112
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.3: Comandos Básicos - Comunicação
Comando
dig
ftp
login
rsync
scp
ssh
talk
tftp
Ação
Consulta o servidos DNS.
File Transfer Protocol.
Se registra no sistema.
Transfere arquivos, particularmente através de uma rede.
Copia arquivos com segurança em um sistema remoto.
Executa o shell ou um comnado no sistema remoto (modo seguro/criptografado).
Troca mensagens interativamente com outros terminais.
Trivial File Transfer Protocol.
Tabela 12.4: Comandos Básicos - Diversos
Comando
banner
bc
cal
clear
info
man
nice
nohup
openvt
passwd
script
su
sudo
tee
time
wall
whoami
xargs
Ação
Faz pôsteres a partir de palavras.
Calculadora de precisão arbitrária.
Exibe o calendário.
Limpa a tela.
Obtém informações sobre um comando usando o leitor de hipertexto GNU.
Obtém informações sobre um comando.
Reduz a prioridade de uma tarefa.
Preserva uma tarefa em execução, após desconectar.
Executa um programa no próximo terminal virtual disponı́vel.
Configura sua senha de login.
Produz uma transcrição de sua sessão de login.
Torna-se um usuário diferente, freqüentemente o superusuário.
Executa um comando autorizado como root ou outro usuário.
Armazena a saı́da em arquivo e envia para a tela, simultâneamente.
Cronometra a execução de um comando.
Envia uma mensagem para todos os terminais.
Imprime a identificação do usuário corrente.
Processa muitos argumentos em partes gerenciáveis.
113
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.5: Comandos Básicos - Gerenciamento de arquivos
Comando
cat
chfn
chgrp
chmod
chown
chsh
cksum
cp
csplit
dd
file
head
hexdump
less
ln
ls
merge
mkdir
more
mv
newgrp
od
pwd
rm
rmdir
shred
split
tac
tail
tailf
touch
wc
Ação
Concatena arquivos ou os exibe.
Altera informações do usuário para finger, e-mail, etc.
Altera grupo associado aos arquivos.
Altera modos de acesso dos arquivos.
Altera proprietário dos arquivos.
Altera o shell de login.
Calcula a soma de verificação.
Copia arquivos.
Divide um arquivo em partes com um tamanho especı́fico ou em locais especı́ficos.
Copia arquivos diretamente do/para o disco.
Determina o tipo de um arquivo.
Exibe as primeiras linhas de um arquivo.
Exibe arquivos no formato hexadecimal.
Exibe arquivos na tela.
Cria alias (links) de nome de arquivo.
Lista arquivos ou diretórios.
Mescla alterações de diferentes arquivos.
Cria um diretório.
Exibe arquivos na tela.
Move ou renomeia arquivos ou diretórios.
Altera o grupo corrente (da sessão).
Exibe arquivos no formato octal.
Imprime o diretório de trabalho.
Remove arquivos/diretórios.
Remove diretórios.
Exclui arquivos com segurança.
Divide arquivos uniformemente.
Imprime linhas de um arquivo na ordem inversa.
Exibe as últimas linhas de um arquivo.
Acompanha o crescimento de um arquivo de registro.
Atualiza as indicações de tempo de um arquivo e cria o arquivo, caso ele não exista.
Conta linhas, palavras e caracteres.
114
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.6: Comandos Básicos - Impressão
Comando
lpq
lpr
lprm
lpstat
pr
Ação
Mostra o status das tarefas de impressão.
Envia para a impressora.
Remove tarefas de impressão.
Obtém o status da impressora.
Formata e pagina para impressão.
Tabela 12.7: Comandos Básicos - Manutenção de Programas
Comando
cvs
ctags
etags
gdb
gprof
make
nm
objcopy
objdump
patch
pmap
size
strace
strip
Ação
Gerencia diferentes versões (revisões) de arquivos-fonte.
Gera uma lista de sı́mbolos para uso com o editor vi.
Gera uma lista de sı́mbolos para uso com o editor Emacs.
Depurador GNU.
Exibe dados de profile do arquivo-objeto.
Mantém, atualiza e recria programas e arquivos relacionados.
Exibe a tabela de sı́mbolos do arquivo-objeto.
Copia e transforma arquivos-objeto.
Exibe informações sobre arquivos-objeto.
Aplica patches no código-fonte.
Imprime o mapa da memória de um processo.
Imprime o tamanho de um arquivo-objeto, em bytes.
Rastreia chamadas de sistema e sinais.
Extrai sı́mbolos de um arquivo-objeto.
115
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.8: Comandos Básicos - Pesquisa
Comando
apropos
egrep
fgrep
find
grep
locate
look
strings
whereis
which
Ação
Pesquisa páginas de manual sobre um tópico.
Versão extendida do comando grep.
Procura palavras literais em arquivos.
Procura arquivos pelo no sistema e adota uma variedade de ações possı́veis.
Procura padrões de texto em arquivos.
Pesquisa um banco de dados já existente para mostrar onde estão os arquivos no sistema.
Procura string no arquivo, no inı́cio das linhas.
Procura padrões de texto em arquivos binários.
Localiza comandos.
Imprime o nome do caminho de um comando.
Tabela 12.9: Comandos Básicos - Processamento de Textos
Comando
col
cut
emacs
ex
expand
fmt
fold
gawk
groff
gs
ispell
join
paste
rev
sed
sort
tr
uniq
vi
vim
Ação
Processa caracteres de controle.
Seleciona colunas para exibição.
Ambiente de trabalho com poderosos recursos de edição de textos.
Editor de linhas subjacente ao vi.
Converte tabulações em espaços.
Produz comprimentos de linhas mais ou menos uniformes.
Quebra linhas.
Processa linha ou registros, um por um.
Formata a entrada de troff.
Exibe arquivo Postscript ou PDF.
Correção ortográfica interativa.
Mescla diferentes colinas em banco de dados.
Mescla colunas ou troca a ordem.
Imprime linhas no sentido inverso.
Editor de texto não interativo.
Ordena ou mescla arquivos.
Transforma (redefine) caracteres.
Localiza linhas repetidas ou únicas em um arquivo.
Editor de texto visual.
Versão melhorada do vi.
116
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.10: Comandos Básicos - Programação
Comando
ar
as
bison
cpp
flex
g++
gcc
ld
ldd
m4
make
ranlib
rpcgen
yacc
Ação
Cria e atualiza arquivos de biblioteca.
Gera arquivo-objeto.
Gera tabelas de parsing.
Faz pré-processamento de código C.
Analisador Léxico.
Compilador C++ GNU.
Compilador C GNU.
Linkeditor.
Imprime dependências de biblioteca compartilhadas.
Processador de macros.
Cria programas.
Gera a tabela de sı́mbolos de arquivo.
Transforma código RPC em C.
Gera tabelas de parsing.
Tabela 12.11: Comandos Básicos - Programação Shell
Comando
basename
echo
envsubst
expr
mktemp
printf
sleep
test
Ação
Remove os componentes iniciais do caminho de um diretório.
Repete os argumentos da linha de comando na saı́da.
Substitui o valor de variáveis de ambiente em strings.
Efetua operações aritméticas e comparações.
Gera nome de arquivo temporário e cria o arquivo.
Formata e imprime argumentos de linha de comando.
Faz uma pausa durante o processamento.
Testa uma condição.
117
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.12: Comandos Básicos - Status do Sistema
Comando
at
atq
atrm
crontab
date
df
du
env
finger
free
hostname
kill
printev
ps
quota
stat
tty
top
tty
uname
uptime
vmstat
who
Ação
Executa comandos posteriormente.
Exibe as tarefas enfileiras por at.
Remove tarefa enfileirada por at.
Automatiza comandos.
Exibe ou configura a data.
Mostra a utilização do disco.
Mostra a utilização do disco.
Exibe variáveis de ambiente.
Exibe informações sobre usuários.
Mostra a memória livre e a usada.
Mostra o nome de host do sistema.
Termina um comando em execução.
Exibe variáveis de ambiente.
Exibe processos.
Exibe a utilização e os limites do disco.
Exibe o status de arquivo ou do sistema de arquivos.
Configura ou exibe configurações do terminal.
Exibe as tarefas que estão em execução.
Exibe o nome de arquivo do terminal conectado na entrada padrão.
Exibe informações do sistema.
Mostra há quanto tempo o sistema está funcionando.
Mostra estatı́sticas da memória virtual.
Mostra quem está conectado.
118
CAPÍTULO 12. COMANDOS BÁSICOS
12.2 Comandos de Administração de Sistemas e Redes
Tabela 12.13: Comandos de Administração/Redes - Correio
Comando
fetchmail
formail
mailq
makemap
newaliases
rmail
sendmail
Ação
Busca correio em servidores remotos.
Converte entrada para formato de correio.
Imprime um resumo da fila de correio.
Atualiza mapas de banco de dados do comando sendmail.
Reconstrói o banco de dados de alias do comando sendmail.
Manipula correio uucp.
Envia e recebe correio.
119
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.14: Comandos de Administração/Redes - Daemons
Comando
apmd
atd
bootpd
cupsd
fingerd
ftpd
imapd
klogd
mountd
named
nfsd
pppd
rdistd
rexecd
rlogind
routed
rpc.rusersd
rpc.statd
rshd
rwhod
sshd
syslogd
talkd
tcpd
tftp
xinetd
ypbind
yppasswd
ypserv
Ação
Daemon do Advanced Power Managent.
Enfileira comandos para execução posterior.
Daemon do Internet Boot Protocol.
Daemon de impressora.
Daemon do comando finger.
Daemon do File Transfer Protocol.
Daemon do servidor de caixa de correio IMAP.
Gerencia o daemon syslogd.
Servidor de pedido de montagem NFS.
Servidor de nome de dominı́o da Internet.
Daemon do NSF.
Mantém conexões de rede PPP (Point-to-Point Procol).
Servidor de distribuição de arquivos remotos.
Servidor de Execução remota.
Servidor do comando rlogin.
Daemon de roteamento.
Servidor de usuários remoto.
Daemons de estado NFS.
Servidor de shell remoto.
Servidor do comando who remoto.
Daemon de shell seguro.
Daemon de monitoração de eventos de sistema.
Daemon do comando talk.
Daemons de rede TCP.
Daemons do Trivial File Transfer Protocol.
Daemons de Serviços de Internet estendido. Inicia outros serviços, quando necessário.
Processo de vı́nculo NIS.
Servidor de modificação de senha NIS.
Prcoesso servidor NIS.
120
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.15: Comandos de Administração/Redes - Hardware
Comando
agetty
arp
cardctl
cardmgr
fdisk
hdparm
kbdrate
ramsize
setkeycodes
setserial
slattach
Ação
Iniciia sessão de usuário no terminal.
Gerencia a cache ARP.
Controlador cartões PCMCIA.
Daemons gerenciador de cartão PCMCIA.
Mantém partições de disco.
Obtém e configura parâmetros de unidade de disco rigı́do.
Gerencia a taxa de repetição do teclado.
Imprime informações sobre disco de RAM.
Altera mapeamentos de código de varredura para código de teclado.
Configura informações da porta serial.
Liga linhas seriais às interfaces de rede.
Tabela 12.16: Comandos de Administração/Redes - Informações de host
Comando
arch
dig
dnsdomainname
domainname
free
host
hostname
uname
Ação
Imprime a arquitetura da máquina.
Consulta servidores de nomes de domı́nio Internet.
Imprime nome de dominı́o DNS.
Imprime nome de dominı́o NIS.
Imprime a utilização da memória.
Imprime informações de host e zona.
Imprime ou configura nome de host.
Imprime informações de host.
Tabela 12.17: Comandos de Administração/Redes - Instalação
Comando
cpio
install
rdist
tar
Ação
Copia e grava arquivos em repositórios.
Copia arquivos em locais que fornecem acesso ao usuário e configura permissões.
Distribui arquivos para sistemas remotos.
Copia ou restaura arquivos em uma mı́dia de repositório.
121
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.18: Comandos de Administração/Redes - Relógio
Comando
hwclock
rdate
zdump
zic
Ação
Gerencia o relógio do hardware.
Obtém a hora do servidor de horário da rede.
Imprime a lista de fusos horários.
Cria arquivos de informação de conversão de hora.
122
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.19: Comandos de Administração/Redes - Sistema de Arquivos
Comando
debugfs
dosfsck
dump
dumpe2fs
e2fsck
e2image
edquota
fdformat
fsck
fsck.ext2
mke2fs
mkfs
mkfs.ext2
mkfs.ext3
mklost+found
mkraid
mkswap
mount
quotacheck
quotaon
quotaoff
quotastats
raidstart
raidstop
rdev
repquota
resize2f
restore
rootflags
setquota
showmount
swapoff
sync
tune2fs
umount
warnquota
Ação
Depura o sistema de arquivos ext2.
Verifica e repara um sistema de arquivos DOS ou VFAT.
Faz backup de dados de um sistema de arquivos.
Imprime informações sobre superbloco e grupo de blocos.
Verifica e repara um sistema de arquivos ext2.
Armazena dados de recuperação de desastres para um sistema de arquivos ext2.
Edita quotas de sistema de arquivos com vim.
Formata disquetes.
Outro nome para e2fsck.
Verifica e repara um sistema de arquivos ext2.
Cria um novo sistema de arquivos ext2.
Cria um novo sistema de arquivos.
Outro nome para mke2fs.
Mais um nome para mke2fs.
Cria o diretório lost+found.
Configura um dispositivo RAID.
Designa um espaço de trocas.
Monta um sistema de arquivos.
Faz auditoria da informação de quota armazenada.
Impõem o uso de quotas.
Não impõem o uso de quotas.
Exibe estatı́sticas de quota do kernel.
Aitva um dispositivo RAID.
Desativa um dispositivo RAID.
Descreve ou altera valores do sistema de arquivos raiz.
Exibe resumo de quota.
Aumenta ou diminui um sistema de arquivos ext2.
Restaura dados de um comando dump em um sistema de arquivos.
Lista ou configura flags para uso na montagem do sistema de arquivos raiz.
Edita quotas de sistema de arquivos.
Lista os diretórios exportados em um host remoto.
Começa a usar dispositivo para trocas.
Grava os buffers do sistema de arquivos no disco.
Gerencia um sistema de arquivos ext2.
Desmonta um sistema de arquivos.
Envia avisos de utilização do disco pelo correio para usuários.
123
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.20: Comandos de Administração/Redes - Gerenciamento de kernel
Comando
depmod
lsmod
modinfo
modprobe
sysctl
Ação
Cria listagens de dependência de módulos.
Lista os módulos do kernel.
Imprime informações de módulo do kernel.
Carrega e remove um módulo e seus módulos dependentes.
Examina ou modifica parâmetros do kernel em tempo de execução.
Tabela 12.21: Comandos de Administração/Redes - Interligação em rede
Comando
ifconfig
iptables
named
nameif
netstat
nfsstat
nsupdate
portmap
rarp
rndc
route
routed
rpcinfo
ruptime
rwho
traceroute
wvdial
Ação
Gerencia interfaces de rede.
Administra recursos de firewall.
Faz a tradução entre nomes de domı́nio e endereços IP.
Atribui nomes a dispositivos de rede.
Imprime o estado da rede.
Imprime estatı́sticas para NFS e RPC.
Envia pedidos de atualização de DNS dinâmica.
Faz o mapeamento de daemons para portas.
Gerencia a tabela RARP.
Envia comandos para um servidor de nomes BIND.
Gerencia tabelas de roteamento.
Mantém tabelas de roteamento atualizadas dinamicamente.
Relata informações de RPC.
Verifica há quanto tempo o sistema remoto está ativo.
Mostra quem está conectado no sistema remoto.
Rastreia a rota da rede até o host remoto.
Estabelece conexões de IP dial-up.
124
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.22: Comandos de Administração/Redes - Impressão
Comando
accept
lpadmin
lpinfo
lpmove
reject
tunelp
Ação
Instrui o daemon de impressora para que aceite tarefas.
Configura filas de impressora e classe.
Mostra as impressoras e drivers disponı́veis.
Move uma tarefa de impressão para uma fila diferente.
Instrui o daemon de impressora para que rejeite tarefas.
Otimiza os parâmetros de impressora.
Tabela 12.23: Comandos de Administração/Redes - Iniciando e parando o sistema
Comando
chkconfig
ctrlaltdel
halt
init
reboot
runlevel
shutdown
telinit
uptime
Ação
Define quais serviços funcionam em um nı́vel de execução.
Desliga e reinicia o sistema normalmente.
Pára ou desliga o sistema.
Altera o nı́vel de execução.
Desliga e reinicia o sistema à força.
Imprime o nı́vel de execução do sistema.
Desliga o sistema.
Altera o nı́vel de execução corrente.
Exibe o tempo de funcionamento da máquina local.
Tabela 12.24: Comandos de Administração/Redes - Atividade do Sistema e Gerenciamento de
processos
Comando
fuser
renice
top
vmstat
Ação
Identifica processos que estão usando arquivos ou sistemas de arquivos.
Altera a prioridade de processos que estão em execução.
Mostra os processos que usam a CPU mais intensamente.
Imprime estatı́sticas da memória virtual e estatı́sticas de processo.
125
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.25: Comandos de Administração/Redes - Usuários
Comando
chpasswd
groupadd
groupdel
groupmod
grpck
grpconv
lastlog
newusers
pwck
pwconv
rusers
rwall
useradd
userdel
usermod
w
wall
whoami
Ação
Altera múltiplas senhas.
Adiciona um novo grupo.
Exclui um grupos.
Modifica grupos.
Verifica a integridade de arquivos do grupo do sistema.
Converte arquivo de grupo em arquivo de grupo de sombra.
Gera relatório dos últimos logins de usuário.
Adiciona novos usuários em um lote.
Verifica a integridade de arquivos de senha do sistema.
Converte arquivo de senha em senhas de sombra.
Imprime informações no estilo do comando who sobre máquina remotas.
Imprime uma mensagem para usuários remotos.
Adiciona um novo usuário.
Exclui um usuário e o diretório de base desse usuário.
Modifica as informações de um usuário.
Lista os usuários conectados.
Escreve para todos os usuários.
Mostra como você está conectado correntemente.
126
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.26: Comandos de Administração/Redes - Diversos
Comando
anacron
atrun
cron
dmesg
ldconfig
logger
logrotate
run-parts
Ação
Agenda comandos para execução periódica.
Agenda comandos para execução posterior.
Agenda comandos para tempos especı́ficos.
Imprime mensagens de inicialização depois que o sistema está funcionando.
Atualiza links de biblioteca e utiliza o cache.
Envia mensagens para o monitorador de eventos do sistema.
Compacta e faz o rodı́zio de logs de sistema.
Executa os scripts em um diretório.
Tabela 12.27: Comandos de Administração/Redes - TCP/IP
Comando
dig
ftpd
gated
host
ifconfig
named
netstat
ping
pppd
rdate
route
routed
slattach
sshd
tcpdump
telnetd
tftpd
Ação
Consulta servidores de nome de domı́nio.
Servidor para transferências de arquivo.
Tabelas de roteamento de mensagens entre redes.
Imprime informações de host e zona.
Configura parâmetros de interface de rede.
Faz a tradução entre nomes de domı́nio e endereços IP.
Verivia se um host remoto está on-line e respondendo.
Verifica se um host remoto está on-line e respondendo.
Cria conexão PPP serial.
Notifica o servidor de horário de que a data mudou.
Gerencia tabelas de roteamento.
Mantém tabelas de roteamento atualizados dinamicamente.
Liga linhas seriais às interfaces de rede.
Servidor para conexões de shell seguras.
Escreve informações de pacotes de rede na tela ou no arquivo.
Servidor para sessões Telnet de hosts remotos.
Servidor para conjunto restrito de transferências de arquivo.
127
CAPÍTULO 12. COMANDOS BÁSICOS
Tabela 12.28: Comandos de Administração/Redes - TCP/IP
Comando
domainame
makedbm
portmap
rpcinfo
ypbind
ypcat
ypinit
ypmatch
yppasswd
yppoll
yppush
ypserv
ypset
yptest
ypwhich
ypxfr
Ação
Configura ou exibe o nome de domı́nio NIS corrente.
Reconstrói bancos de dados NIS.
Mapeador de número de programa RPC para porta DARPA.
Relata informações RPC.
Conecta a servidor NIS.
Imprime valores do banco de dados NIS.
Constrói novos bancos de dados NIS.
Imprime o valor de uma ou mais chaves NIS.
Altera a senha do usuário no banco de dados NIS.
Determina a versão do mapa NIS no servidor NIS.
Propaga o mapa NIS.
Daemon do servidor NIS.
Aponta ypbind para um servidor especı́fico.
Verifica a configuração de NIS.
Exibe o nome do servidor NIS ou do mestre de mapas.
Transfere o banco de dados NIS do servidor para o host local.
128
Download

CGPE/SE-MC