·

Sistemas de Informação ·

Linguagens de Programação

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Introdução ao Linux ISBN 9788563630193 9 788563 630193 Este curso é destinado a usuários especialistas de supor te e desenvolvedores de software que desejam aprender a utilizar o Linux um ambiente computacional moderno ágil e com um sistema operacional extremamente está vel e versátil O curso destinase também aos administra dores de sistemas Windows e aos profissionais que dese jam iniciar os estudos para a certificação LPIC1 do Linux Professional Institute Este livro inclui os roteiros das atividades práticas e o con teúdo dos slides apresentados em sala de aula apoiando profissionais na disseminação deste conhecimento em suas organizações ou localidades de origem Introdução ao Linux LIVRO DE APOIO AO CURSO Arthur Mendes Peixoto Andreia Gentil Bonfante A RNP Rede Nacional de Ensino e Pesquisa é qualificada como uma Organização Social OS sendo ligada ao Ministério da Ciência Tecnologia e Inovação MCTI e responsável pelo Programa Interministerial RNP que conta com a participação dos ministérios da Educação MEC da Saúde MS e da Cultura MinC Pioneira no acesso à Internet no Brasil a RNP planeja e mantém a rede Ipê a rede óptica nacional acadêmica de alto desempenho Com Pontos de Presença nas 27 unidades da federação a rede tem mais de 800 instituições conectadas São aproximadamente 35 milhões de usuários usufruindo de uma infraestrutura de redes avançadas para comunicação computação e experimentação que contribui para a integração entre o sistema de Ciência e Tecnologia Educação Superior Saúde e Cultura Ciência Tecnologia e Inovação Ministério da Educação Ministério da Saúde Ministério da Cultura Ministério da Arthur Mendes Peixoto possui mais de 26 anos de experiência na área de Redes de Comunicação de Dados e Engenharia de Sistemas com Disserta ção de Mestrado em Análise de Perfor mance de Sistemas Distribuídos no Instituto Militar de Engenharia IME Participou do desenvolvimento e implantação das primeiras redes com tecnologias ATM Frame Relay IP MPLS Foi con sultor de grandes projetos como o Backbone IP do Plano Nacional de Banda Larga PNBL da Telebrás Trabalhou por 22 anos no setor de Telecomunicações da Embratel atuando na prospecção de novas tecnologias para as Redes de Nova Geração NGN Participou de testes e verificações de requi sitos de RFPs nos países EUA Canadá Japão França Espa nha e México Atuou no desenvolvimento de sistemas no CPqD Campinas SP Andreia Gentil Bonfante possui gra duação em Bacharelado em Ciências de Computação pela Universidade Estadual de Londrina mestrado e doutorado em Ciências da Compu tação e Matemática Computacional pela Universidade de São Paulo Atu almente é professorapesquisadora da Universidade Fede ral de Mato Grosso Tem experiência na área de Ciência da Computação com ênfase em Inteligência Artificial atu ando principalmente nos seguintes temas Processamento de Língua Natural Mineração de Textos e Aprendizado de Máquina Atua na Educação a Distância como Coordena dora da Especialização em Informática na Educação Atuou também como instrutora dos cursos de Introdução ao Linux da Escola Superior de Redes na Unidade de Cuiabá A RNP Rede Nacional de Ensino e Pesquisa é qualificada como uma Organização Social OS sendo ligada ao Ministério da Ciência Tecnologia e Inovação MCTI e responsável pelo Programa Interministerial RNP que conta com a participação dos ministérios da Educação MEC da Saúde MS e da Cultura MinC Pioneira no acesso à Internet no Brasil a RNP planeja e mantém a rede Ipê a rede óptica nacional acadêmica de alto desempenho Com Pontos de Presença nas 27 unidades da federação a rede tem mais de 800 instituições conectadas São aproximadamente 35 milhões de usuários usufruindo de uma infraestrutura de redes avançadas para comunicação computação e experimentação que contribui para a integração entre o sistema de Ciência e Tecnologia Educação Superior Saúde e Cultura Ciência Tecnologia e Inovação Ministério da Educação Ministério da Saúde Ministério da Cultura Ministério da Arthur Peixoto Andreia Gentil Bonfante Introdução ao Linux Arthur Peixoto Andreia Gentil Bonfante Rio de Janeiro Escola Superior de Redes 2013 Introdução ao Linux Copyright 2013 Rede Nacional de Ensino e Pesquisa RNP Rua Lauro Müller 116 sala 1103 22290906 Rio de Janeiro RJ Diretor Geral Nelson Simões Diretor de Serviços e Soluções José Luiz Ribeiro Filho Escola Superior de Redes Coordenação Luiz Coelho Edição Pedro Sangirardi Revisão Técnica Marcelo Castellan Braga Coordenação Acadêmica de Administração de Sistemas Sergio Alves de Souza Equipe ESR em ordem alfabética Celia Maciel Cristiane Oliveira Derlinéa Miranda Edson Kowask Elimária Barbosa Lourdes Soncin Luciana Batista Luiz Carlos Lobato e Renato Duarte Capa projeto visual e diagramação Tecnodesign Versão 110 Este material didático foi elaborado com fins educacionais Solicitamos que qualquer erro encon trado ou dúvida com relação ao material ou seu uso seja enviado para a equipe de elaboração de conteúdo da Escola Superior de Redes no email infoesrrnpbr A Rede Nacional de Ensino e Pesquisa e os autores não assumem qualquer responsabilidade por eventuais danos ou perdas a pessoas ou bens originados do uso deste material As marcas registradas mencionadas neste material pertencem aos respectivos titulares Distribuição Escola Superior de Redes Rua Lauro Müller 116 sala 1103 22290906 Rio de Janeiro RJ httpesrrnpbr infoesrrnpbr Dados Internacionais de Catalogação na Publicação CIP P377a Peixoto Arthur Mendes Introdução ao Linux Arthur Mendes Peixoto Andreia Bonfante Revisor Marcelo Braga Rio de Janeiro RNPESR 2013 210 p il 28 cm Bibliografia p 193194 ISBN 9788563630193 1 Linux Sistema operacional de computador 2 Sistema operacional computadores 3 UNIX Shell Programa de computador I Bonfante Andreia II Braga Marcelo III Titulo CDD 00540469 iii Sumário 1 Histórico e instalação O que é um Sistema Operacional 1 Arquitetura do sistema operacional Unix 2 Características principais 3 Histórico do Unix 5 Versões do Unix 5 Similares Unix 7 Distribuições Linux 8 Exercício de fixação 1 Entendendo as licenças Unix e GPL 8 Red Hat Enterprise Linux 8 CentOS 9 Debian 9 Ubuntu 10 Mandriva Linux 10 Slackware 11 Exercício de fixação 2 Conhecendo as distribuições Linux 11 A escolha da distribuição Linux 11 Razões para utilizar o Linux 12 Hardwares suportados 12 Lista de verificação de hardware 13 Requisitos mínimos de hardware 13 Instalando o Linux 14 Criação da máquina virtual 14 Programa de instalação do Linux 15 iv Roteiro de Atividades 1 19 Atividade 11 Conhecendo as distribuições Linux 19 Atividade 12 Obtendo informações para iniciar a instalação do Linux 19 Atividade 13 Preparando o ambiente de instalação 19 Atividade 14 Instalando o Linux 20 Atividade 15 Inicializando o sistema pela primeira vez 20 2 Utilização do sistema Configurações iniciais 21 Informações da licença 21 Criando uma conta de usuário 21 Configurando data e hora 21 Habilitação e configuração do Kdump 22 Ambiente gráfico 22 Iniciando e finalizando o Servidor X 22 Configurando o Servidor X 23 Arquivo xorgconf 23 Abrindo uma sessão 26 GNOME desktop 26 Menu Aplicativos 27 Menu Locais 28 Menu Sistema 28 Aplicações 28 Configurando o GNOME 29 KDE desktop 30 Lançador de aplicações 31 Aplicações do KDE 33 Configurando o KDE 34 Documentação 35 Roteiro de Atividades 2 37 Atividade 21 Conhecendo o ambiente gráfico 37 Atividade 22 Conhecendo os gerenciadores de arquivos 37 Atividade 23 Trabalhando com arquivos e diretórios 37 v 3 Organização do Linux Sistema de arquivos do Linux 39 Exercício de fixação 1 Conhecendo o sistema de arquivos 40 Exercício de fixação 2 Estrutura de diretórios 40 Montando e desmontando um dispositivo 41 Inode 41 Tipos de arquivos 42 Arquivo regular 42 Diretório 42 Arquivos de dispositivos 43 Named pipes 44 Para que servem os links 45 Exercício de fixação 3 Links 45 Sockets 46 Atributos dos arquivos 46 Permissões de arquivos 47 Exercício de fixação 4 Atributos e permissões de arquivos 50 Operações com arquivos e diretórios 50 Exercício de fixação 5 Criando arquivos 52 Criando diretórios 52 Exercício de fixação 6 Criando diretórios 53 Copiando arquivos e diretórios 53 Removendo arquivos e diretórios 54 Exercício de fixação 7 Removendo arquivos 54 Movendo arquivos e diretórios 54 Exercício de fixação 8 Renomeando arquivos 55 Listando arquivos e diretórios 55 Exercício de fixação 9 Listando arquivos 56 Procurando arquivos e diretórios 56 Navegando pela árvore de diretórios 57 Empacotando e compactando arquivos e diretórios 58 Exercício de fixação 10 Página de manuais 60 Roteiro de Atividades 3 61 Atividade 31 Conhecendo os arquivos 61 Atividade 32 Criando arquivos 61 Atividade 33 Criando diretórios e copiando arquivos 61 Atividade 34 Empacotando e compactando arquivos 61 Atividade 35 Removendo arquivos e diretórios 61 vi 4 Desvendando o Linux Entrada e saída padrão de dados e saída padrão de erros 63 Redirecionamento de entrada e saída 64 Pipe ou canalização 66 Exercício de fixação 1 Comando sort 68 Comandos para manipulação de arquivos 68 Substituindo nomes de arquivos 68 Visualizando o conteúdo de arquivos 68 Exercício de fixação 2 Visualizando conteúdo de arquivos 69 Contabilizando o conteúdo de arquivos 70 Exibindo o conteúdo inicial e final de arquivos 70 Exercício de fixação 3 Exibindo o conteúdo de arquivos 71 Selecionando trechos de arquivos 71 Comparação entre arquivos 74 Ordenação em arquivos 75 Roteiro de Atividades 4 77 Atividade 41 Pesquisando em arquivos 77 Atividade 42 Contabilizando arquivos 77 Atividade 43 Controlando a exibição do conteúdo de arquivos 77 Atividade 44 Combinando comandos para criar novas funcionalidades 77 5 Edição de texto Processadores de texto 79 Editores de texto 79 Editor Vi 80 Modos do editor Vi 82 Exercício de fixação 1 Primeiro arquivo com Vi 87 Roteiro de Atividades 5 91 Atividade 51 Criando um texto no Vi 91 Atividade 52 Usando recursos básicos do Vi 91 Atividade 53 Combinando recursos do Vi 92 Atividade 54 Execução de comandos diversos 92 Atividade 55 Execução de comandos avançados 92 vii 6 Shell Noções básicas 93 Gerenciamento de processos 95 Criação de processos 96 Processos em background e daemons 98 Sinais do sistema 99 Visualização de processos 101 Variáveis de ambiente 102 Uso de aspas simples duplas e barra invertida 104 Exercício de fixação 1 Visualização de processos 104 Exercício de fixação 2 Visualização de processos em tempo real 105 Exercício de fixação 3 Visualização de árvore de processos 105 Shell Script 105 Exercício de fixação 4 Criando um script simples 107 Variáveis do Shell Script 107 Escopo das variáveis 109 Expressões e testes 110 Comando read 113 Parâmetros de linha de comando variáveis especiais 114 Roteiro de Atividades 6 117 Atividade 61 Exibindo processos em estados específicos 117 Atividade 62 Executando processos em background 117 Atividade 63 Utilizando um daemon 117 Atividade 64 Usando testes dentro dos scripts 117 Atividade 66 Lendo variáveis e usando expressões nos scripts 117 Atividade 67 Utilizando parâmetros 118 Atividade 68 Utilizando parâmetros e testes 118 Atividade 69 Utilizando testes de diretório 118 Atividade 610 Listando arquivos passados por parâmetro 118 7 Shell Script Estruturas de decisão 119 Comando if 119 Comando if tipos de condição 121 viii Comando if else 121 Aninhando comandos if e else 123 Exercício de fixação 1 Estrutura de decisão 124 Comando case 124 Expressões regulares 126 Operador 129 Comando sed 130 Comando tr 130 Exercício de fixação 2 Metacaracteres 130 Roteiro de Atividades 7 131 Atividade 71 Verificando a existência de arquivos 131 Atividade 72 Verificando a entrada de parâmetros 131 Atividade 73 Executando sequências de comandos 131 Atividade 74 Combinando parâmetros leitura e execução de comandos 132 Atividade 75 Utilizando comando grepegrep 132 Atividade 76 Ainda usando grepegrep 133 Atividade 77 Combinando comandos 134 Atividade 78 Aninhando condicionais 134 Atividade 79 Utilizando expressões regulares 135 Atividade 710 Utilizando case 135 Atividade 711 Utilizando case com menu de opções 135 Atividade 712 Combinando if com case 135 Atividade 713 Combinando if case e comandos 135 8 Shell Script Estruturas de repetição 137 Comando for 137 Exercício de fixação 1 Alterando o valor da variável IFS 140 Comandos while e until 140 Funções 141 Exercício de fixação 2 Etapas do script 147 Arrays 147 Roteiro de Atividades 8 151 Atividade 81 Verificando permissão dos arquivos 151 ix Atividade 82 Verificando usuários e informações 151 Atividade 83 Percorrendo um diretório com o comando for e utilizando contadores 151 Atividade 84 Ainda manipulando listas com o comando for e contadores 151 Atividade 85 Manipulando sequências com o comando for 151 Atividade 86 Testando os diversos comandos de repetição 151 Atividade 87 Utilizando o comando for como contador 151 Atividade 88 Utilizando repetição condicionada 151 Atividade 89 Criando uma agenda simples 151 Atividade 810 Criando uma calculadora simples utilizando funções 152 9 Instalação de aplicações Aplicações no sistema operacional Linux 153 Linguagens de programação 154 Instalando aplicações a partir de seus códigosfontes 156 Obtenção dos arquivosfontes 156 Verificação do ambiente para a compilação 156 Compilação 157 Instalação 157 Instalando aplicações a partir de arquivos binários 158 Pacotes RPM 159 Dependências 161 Exercício de fixação 1 Gerenciador de pacotes RPM 162 YUM 163 Configurando o YUM 163 Utilizando o YUM 164 APT 168 Configurando o APT 168 Utilizando o APT 168 Dicas sobre gerenciadores de pacotes 170 Exercício de fixação 2 Gerenciador de pacotes APT 171 Roteiro de Atividades 9 173 Atividade 91 Encontrando bibliotecas utilizadas por um programa 173 Atividade 92 Instalando uma aplicação a partir do seu códigofonte 173 Atividade 93 Instalando uma aplicação a partir de um arquivo binário 173 Atividade 94 Instalando um pacote rpm 173 x Atividade 95 Descobrindo a qual pacote pertence uma biblioteca 173 Atividade 96 Descobrindo as dependências dos pacotes 173 Atividade 97 Atualizando o sistema com yum 173 Atividade 98 Instalando pacotes com yum 173 10 Configuração e utilização de dispositivos de hardware Introdução 175 Exercício de fixação 1 Verificando o kernel 176 Arquivos de dispositivos 176 Exercício de fixação 2 Arquivos de dispositivos 177 Módulos 177 Exercício de fixação 3 Módulos 179 Initrd 179 Gerenciando dispositivos 179 Hotplug 179 Udev 180 Exercício de fixação 4 Gerenciando dispositivos 181 Identificando e configurando dispositivos 181 Unidades de CDDVD 183 Dispositivos de armazenamento USB 185 Interfaces de rede 186 Placas SCSI 188 Placas de vídeo 188 Gerenciamento de energia 190 Advanced Power Management APM 190 Advanced Configuration and Power Interface ACPI 190 Roteiro de Atividades 10 191 Atividade 101 Descobrindo os dispositivos detectados pelo kernel 191 Atividade 102 Verificando os módulos carregados 191 Atividade 103 Identificando os dispositivos PCI 191 Atividade 104 Utilizando um pen drive 191 Atividade 105 Verificando e identificando as placas de rede 191 Atividade 106 Identificando a placa gráfica e seu driver 191 Bibliografia 193 xi A Escola Superior de Redes ESR é a unidade da Rede Nacional de Ensino e Pesquisa RNP responsável pela disseminação do conhecimento em Tecnologias da Informação e Comunicação TIC A ESR nasce com a proposta de ser a formadora e disseminadora de competências em TIC para o corpo técnicoadministrativo das universidades federais escolas técnicas e unidades federais de pesquisa Sua missão fundamental é realizar a capacitação técnica do corpo funcional das organizações usuárias da RNP para o exercício de competências aplicáveis ao uso eficaz e eficiente das TIC A ESR oferece dezenas de cursos distribuídos nas áreas temáticas Administração e Pro jeto de Redes Administração de Sistemas Segurança Mídias de Suporte à Colaboração Digital e Governança de TI A ESR também participa de diversos projetos de interesse público como a elaboração e execução de planos de capacitação para formação de multiplicadores para projetos educacionais como formação no uso da conferência web para a Universidade Aberta do Brasil UAB formação do suporte técnico de laboratórios do Proinfo e criação de um con junto de cartilhas sobre redes sem fio para o programa Um Computador por Aluno UCA A metodologia da ESR A filosofia pedagógica e a metodologia que orientam os cursos da ESR são baseadas na aprendizagem como construção do conhecimento por meio da resolução de problemas típi cos da realidade do profissional em formação Os resultados obtidos nos cursos de natureza teóricoprática são otimizados pois o instrutor auxiliado pelo material didático atua não apenas como expositor de conceitos e informações mas principalmente como orientador do aluno na execução de atividades contextualizadas nas situações do cotidiano profissional A aprendizagem é entendida como a resposta do aluno ao desafio de situaçõesproblema semelhantes às encontradas na prática profissional que são superadas por meio de análise síntese julgamento pensamento crítico e construção de hipóteses para a resolução do pro blema em abordagem orientada ao desenvolvimento de competências Dessa forma o instrutor tem participação ativa e dialógica como orientador do aluno para as atividades em laboratório Até mesmo a apresentação da teoria no início da sessão de apren dizagem não é considerada uma simples exposição de conceitos e informações O instrutor busca incentivar a participação dos alunos continuamente Escola Superior de Redes xii As sessões de aprendizagem onde se dão a apresentação dos conteúdos e a realização das atividades práticas têm formato presencial e essencialmente prático utilizando técnicas de estudo dirigido individual trabalho em equipe e práticas orientadas para o contexto de atuação do futuro especialista que se pretende formar As sessões de aprendizagem desenvolvemse em três etapas com predominância de tempo para as atividades práticas conforme descrição a seguir Primeira etapa apresentação da teoria e esclarecimento de dúvidas de 60 a 90 minutos O instrutor apresenta de maneira sintética os conceitos teóricos correspondentes ao tema da sessão de aprendizagem com auxílio de slides em formato PowerPoint O instrutor levanta questões sobre o conteúdo dos slides em vez de apenas apresentálos convidando a turma à reflexão e participação Isso evita que as apresentações sejam monótonas e que o aluno se coloque em posição de passividade o que reduziria a aprendizagem Segunda etapa atividades práticas de aprendizagem de 120 a 150 minutos Esta etapa é a essência dos cursos da ESR A maioria das atividades dos cursos é assín crona e realizada em duplas de alunos que acompanham o ritmo do roteiro de atividades proposto no livro de apoio Instrutor e monitor circulam entre as duplas para solucionar dúvidas e oferecer explicações complementares Terceira etapa discussão das atividades realizadas 30 minutos O instrutor comenta cada atividade apresentando uma das soluções possíveis para resolvêla devendo aterse àquelas que geram maior dificuldade e polêmica Os alunos são convidados a comentar as soluções encontradas e o instrutor retoma tópicos que tenham gerado dúvidas estimulando a participação dos alunos O instrutor sempre estimula os alunos a encontrarem soluções alternativas às sugeridas por ele e pelos colegas e caso existam a comentálas Sobre o curso Esse é o curso introdutório da trilha de Administração de Sistemas Seu objetivo é intro duzir o aluno ao mundo Linux O sistema operacional SO utilizado é o CentOS que é baseado em RedHat gratuito e extremamente estável além de suportar todos os serviços necessários a um ambiente web O curso é composto de 10 capítulos de embasamento teórico e atividades correlatas para aprendizado e fixação do conhecimento O curso tem como objetivo apresentar as facilida des de administração e gerenciamento que serão exploradas com maior profundidade nos demais cursos da área de Administração de Sistemas da Escola Superior de Redes da RNP A quem se destina Este curso é destinado a usuários especialistas de suporte e desenvolvedores de software que desejam aprender a utilizar o Linux um ambiente computacional moderno ágil e com um sistema operacional extremamente estável e versátil O curso destinase também aos administradores de sistemas Windows e aos profissionais que desejam iniciar os estudos para a certificação LPIC1 do Linux Professional Institute xiii Convenções utilizadas neste livro As seguintes convenções tipográficas são usadas neste livro Itálico Indica nomes de arquivos e referências bibliográficas relacionadas ao longo do texto Largura constante Indica comandos e suas opções variáveis e atributos conteúdo de arquivos e resultado da saída de comandos Comandos que serão digitados pelo usuário são grifados em negrito e possuem o prefixo do ambiente em uso no Linux é normalmente ou enquanto no Windows é C Conteúdo de slide Indica o conteúdo dos slides referentes ao curso apresentados em sala de aula Símbolo Indica referência complementar disponível em site ou página na internet Símbolo Indica um documento como referência complementar Símbolo Indica um vídeo como referência complementar Símbolo Indica um arquivo de aúdio como referência complementar Símbolo Indica um aviso ou precaução a ser considerada Símbolo Indica questionamentos que estimulam a reflexão ou apresenta conteúdo de apoio ao entendimento do tema em questão Símbolo Indica notas e informações complementares como dicas sugestões de leitura adicional ou mesmo uma observação Permissões de uso Todos os direitos reservados à RNP Agradecemos sempre citar esta fonte quando incluir parte deste livro em outra obra Exemplo de citação PEIXOTO Arthur Mendes BONFANTE Andreia Gentil Introdução ao Linux Rio de Janeiro Escola Superior de Redes 2013 xiv Comentários e perguntas Para enviar comentários e perguntas sobre esta publicação Escola Superior de Redes RNP Endereço Av Lauro Müller 116 sala 1103 Botafogo Rio de Janeiro RJ 22290906 Email infoesrrnpbr Sobre os autores Arthur Mendes Peixoto possui mais de 26 anos de experiência na área de Redes de Comuni cação de Dados e Engenharia de Sistemas com Dissertação de Mestrado em Análise de Performance de Sistemas Distribuídos no Instituto Militar de Engenharia IME Participou do desenvolvimento e implantação das primeiras redes com tecnologias ATM Frame Relay IP MPLS Foi consultor de grandes projetos como o Backbone IP do Plano Nacional de Banda Larga PNBL da Telebrás Trabalhou por 22 anos no setor de Telecomunicações da Embratel atuando na prospecção de novas tecnologias para as Redes de Nova Geração NGN Parti cipou de testes e verificações de requisitos de RFPs nos países EUA Canadá Japão França Espanha e México Atuou no desenvolvimento de sistemas no CPqD Campinas SP Andreia Gentil Bonfante possui graduação em Bacharelado em Ciências de Computação pela Universidade Estadual de Londrina mestrado e doutorado em Ciências da Compu tação e Matemática Computacional pela Universidade de São Paulo Atualmente é profes sorapesquisadora da Universidade Federal de Mato Grosso Tem experiência na área de Ciência da Computação com ênfase em Inteligência Artificial atuando principalmente nos seguintes temas Processamento de Língua Natural Mineração de Textos e Aprendizado de Máquina Atua na Educação a Distância como Coordenadora da Especialização em Infor mática na Educação Atuou também como instrutora dos cursos de Introdução ao Linux da Escola Superior de Redes na Unidade de Cuiabá Marcelo Castellan Braga possui graduação em Engenharia Eletrônica pelo CEFETRJ pósgraduação em Análise Projeto e Gerência de Sistemas pela PUCRJ e mestrado em informática pela UNIRIO Atualmente é sócio diretor da MCB Tech empresa que presta con sultoria em redes de computadores serviços de internet segurança de dados e desenvolvi mento de software Atuou durante mais de 10 anos na área de TI em empresas como Rede Nacional de Ensino e Pesquisa RNP e Embratel Sergio Ricardo Alves de Souza possui mais de 35 anos de experiência na área de Adminis tração e Suporte de Sistemas Trabalhou em empresas como Burroughs UNISYS ARSA Infraero Cobra Computadores LNCC e outras Consultoria e treinamento em empresas como Fiocruz Jardim Botânico Museu Goeldi CefetMG IBM Brasil Participou do desen volvimento e implantação de cursos profissionalizantes em Informática em Petrópolis FAETC Participou do projeto de criação do Instituto Superior de Tecnologia em Ciência da Computação de Petrópolis Possui Notório Saber em Informática pelo LNCC 1 Capítulo 1 Histórico e instalação objetivos conceitos 1 Histórico e instalação Compreender o que é um Sistema Operacional e estudar a arquitetura do sistema operacional Unix Histórico do Unix hardwares suportados e instalação do Linux O que é um Sistema Operacional q Funções básicas de um sistema operacional 1 Gerenciar o uso da CPU 1 Gerenciar o uso da memória RAM 1 Gerenciar o armazenamento de dados 1 Gerenciar os dispositivos de entrada e saída 1 Interpretar comandos Um Sistema Operacional é a interface de comunicação entre o usuário e o hardware Para desempenhar essa função o Sistema Operacional deve conhecer a linguagem do usuário e a do hardware e também controlar a troca de mensagens entre os dois Além disso deve interpretar as ordens do usuário e passar ao hardware as instruções para que sejam execu tadas Principais funções desempenhadas por um Sistema Operacional 1 Gerenciar o uso da CPU o Sistema Operacional deve controlar a utilização da CPU dividindo seu tempo de uso de modo que ela execute os processos dos usuários e do próprio Sistema Operacional um de cada vez enquanto os outros aguardam na fila para serem processados 1 Gerenciar o uso da memória é preciso manter a integridade dos dados e dos pro gramas em execução na memória RAM do computador 1 Gerenciar os dispositivos de entrada e saída é função do Sistema Operacional gerenciar os acessos aos dispositivos de entrada e saída de dados IO como impres soras monitores teclados scanners microfones caixas de som etc Um subsistema ou subconjunto de programas realiza essa função específica do sistema que consiste entre outras coisas na leitura e escrita de dados nesses periféricos 1 Gerenciar o armazenamento de dados é função do Sistema Operacional armazenar e recuperar os dados nos dispositivos de armazenamento como discos rígidos pen drives CDs DVDs etc 2 Introdução ao Linux 1 Interpretar comandos é necessário que o sistema interaja com o usuário O interpre tador de comandos recebe os pedidos ou os comandos e compreende o que o usuário deseja executar Após interpretar o comando encaminha pedidos aos outros módulos do Sistema Operacional especializados em atender esses pedidos Estas funções básicas são as mínimas necessárias para o funcionamento de um compu tador Veremos que um sistema operacional pode ter muitas outras funções que definem sua especialização Dependendo do tipo de aplicação que um computador vai suportar seu Sistema Opera cional pode necessitar de executar funções especiais além das básicas apresentadas ante riormente Um Sistema Operacional que se destina a aplicações pessoais deve ter interface gráfica bem desenvolvida para facilitar a utilização por usuários leigos em sistemas Há aqueles que se destinam a aplicações em tempo real ou seja que são sensíveis a retardos conforme ocorre com alguns controles de processos industriais Existem computadores que são compartilhados atendendo a usuários de uma empresa ou departamento que neces sitam realizar diversas tarefas simultâneas multitarefa ou que permitem vários usuários conectados simultaneamente multiusuário Esses computadores necessitam de Sistemas Operacionais que realizem funções especiais como 1 Controle de acesso administra o acesso de múltiplos usuários às informações armaze nadas e aos dados em memória garantindo a confidencialidade dessas informações É função do Sistema Operacional garantir o sigilo às informações de cada usuário restrin gindo o acesso a essas informações a outros usuários que utilizem o mesmo sistema 1 Gerência de contabilização contabiliza todas as atividades do sistema armazenando em disco as informações relativas às estatísticas de utilização para posterior emissão de relatórios Veremos que desde o nascimento do Unix até os dias atuais além das funcionalidades básicas e especiais várias outras funções foram agregadas ao Sistema Operacional tornandoo um sistema de grande complexidade e aplicabilidade ou seja um Sistema Operacional multipurpose Arquitetura do sistema operacional Unix q 1 Independência do hardware 1 Kernel faz a interface entre o hardware e o restante do sistema 1 Gerenciador de processos faz parte do kernel O Unix foi projetado com arquitetura em camadas o que permite maior independência do hardware utilizado Para que isso seja possível apenas uma pequena parte do sistema possui acesso direto ao hardware e se comunica com o restante do sistema Somente o kernel depende do hardware permitindo que quase todo o sistema seja reapro veitado na migração entre diferentes máquinas O interpretador de comandos chamado de shell não faz parte do kernel do sistema e é uma excelente linguagem de programação que torna o Unix um sistema bastante versátil O gerenciador de processos faz parte do kernel do Sistema Operacional e é o responsável pelo gerenciamento dos processos em execução e pela divisão do tempo de processamento da CPU entre esses processos Cada processo necessita de um período de tempo reservado para que possa ser executado pela CPU Depois que esse tempo se esgota outro processo passa a ser processado e o anterior passa a aguardar por um novo período de tempo para ser novamente processado A cada processo é atribuída uma prioridade que se altera 3 Capítulo 1 Histórico e instalação dinamicamente conforme a execução de um algoritmo no kernel do Unix O gerenciador de processos também é responsável por gerenciar uma área em disco que se constitui numa extensão da memória RAM principal da máquina e que é utilizada em casos de esgotamento dessa memória A área é chamada de área de swap para onde são copiadas temporaria mente imagens dos processos liberando assim parte de memória para permitir que outros processos possam ser executados A Figura 11 mostra como é dividida a arquitetura do Sistema Operacional Unix Essa divisão proporciona a esse sistema diversas características que veremos a seguir Características principais q 1 Portabilidade 1 Multiusuário 1 Multiprocessamento 1 Estrutura hierárquica de diretórios 1 Interpretador de comandos shell 1 Pipelines 1 Utilitários 1 Desenvolvimento de software 1 Maturidade O Unix é um Sistema Operacional muito flexível com grande número de funcionalidades Principais características 1 Portabilidade o Unix é portável ou seja pode ser adaptado facilmente para ser exe cutado em diferentes arquiteturas de hardware Sua adequação a um novo hardware é rápida e exige pequeno esforço de programação Talvez essa seja a característica mais importante desse Sistema Operacional que permitiu sua adoção por centenas de fabri cantes diferentes A portabilidade se estende também para os programas e pacotes de software escritos para o Unix o que promoveu grande desenvolvimento de aplicativos e intensificou sua expansão no mercado 1 Multiusuário o Unix foi concebido para ser um sistema multiusuário suportando cone xões simultâneas de diversos usuários Com isso é possível melhor utilização da capaci dade de processamento e da manipulação e armazenamento das informações do sistema de computação Para isso o Sistema Operacional possui ferramentas de segurança para permitir o isolamento das atividades de cada usuário Figura 11 Divisão do Sistema Operacional Unix 4 Introdução ao Linux 1 Multiprocessamento a funcionalidade de multiprocessamento do Unix permite a um usuário executar múltiplas tarefas simultaneamente O sistema pode acessar um arquivo ou imprimir um relatório ao mesmo tempo em que o usuário pode editar um documento possibilitando melhor produtividade e reduzindo a ociosidade tanto do processador quanto dos recursos de entrada e saída do sistema A Figura 12 ilustra o conceito de multiprocessamento Processos Time slice Swap 3 1 3 2 4 1 2 3 4 Multi processamento 1 Estrutura hierárquica de diretórios o sistema de armazenamento de informações possui estrutura hierárquica como mostra a Figura 13 A estrutura hierárquica é uma forma de arquivamento natural pois pode ser comparada por exemplo à estrutura organizacional hierárquica de uma empresa e consequentemente torna mais fácil a localização e a manipulação de informações distribuídas por essa estrutura Folha de pagamento root Vendas Compras Leste Oeste Relatórios de venda Relatórios de vendas Arquivos de contas a pagar Arquivos de salários Arquivos de cartões de ponto 1 Interpretador de comandos shell a interação do usuário com o Sistema Operacional Unix é controlada por um poderoso interpretador de comandos conhecido como shell Esse interpretador suporta várias funcionalidades como o redirecionamento de entrada e saída a manipulação de grupos de arquivos com apenas um comando a execução de sequências de comandos predefinidos entre outras facilitando a execução de tarefas complexas 1 Pipelines o uso de pipelines ou pipes permite conectar a saída de um comando com a entrada de outro como mostra a Figura 14 Essa é uma das mais famosas características do Unix e é utilizada para a execução de funções mais complexas Muitas vezes novas tarefas exigem apenas que programas já existentes e também utilitários sejam combinados para a execução de uma nova função sem a necessidade de desenvolver um novo programa Comando 4 Comando 3 Comando 2 Comando 1 Comando1 Comando2 Comando3 Comando4 Entrada padrão Saída padrão Figura 12 Multiprocessa mento execução de múltiplas tarefas ao mesmo tempo Figura 13 Estrutura de hierar quia do sistema de armazenamento de informações Figura 14 Uso de pipelines ou pipes 5 Capítulo 1 Histórico e instalação 1 Utilitários o Unix incorpora centenas de programas utilitários para funções como seleção de dados processamento de texto e busca de informações Essas facilidades formam um conjunto de ferramentas que permitem a execução de diversos tipos de tarefas 1 Desenvolvimento de software o Unix também é conhecido como uma plataforma de desenvolvimento de software pois possui ferramentas que suportam todas as fases do processo de desenvolvimento desde a preparação até a depuração Devido à sua porta bilidade esses softwares podem ser utilizados em microcomputadores ou em computa dores de grande porte 1 Maturidade o Unix é um Sistema Operacional sólido testado e aprovado pelo mercado que vem sendo utilizado há mais de três décadas tendo atingido o estado de maturi dade Dessa forma além de sua flexibilidade e inúmeras funcionalidades tem também como característica a confiabilidade o que o torna atualmente o Sistema Operacional preferido para sistemas que suportam aplicações críticas Histórico do Unix O Unix surgiu no Bell Laboratories em 1969 a partir do trabalho de Ken Thompson na evolução de outro Sistema Operacional o Multics No desenvolvimento do Unix Thompson sentiu a necessidade de escrevêlo para diferentes tipos de arquiteturas e decidiu fazer o Unix independentemente da máquina em que fosse executado criando a linguagem B Essa linguagem evoluiu para a linguagem C desenvolvida por Dennis Ritchie o que permitiu reescrever o Unix e tornálo portável para diferentes arquiteturas Devido à característica de portabilidade do Unix no início da década de 1980 foram desenvolvidos diversos pacotes de programas que foram utilizados por diferentes fabricantes tornando mundialmente conhe cidos o Unix a linguagem C e seus aplicativos O Unix se tornou um Sistema Operacional bastante conhecido não somente no mundo acadê mico como também no meio comercial Os sistemas Unixbased e similares ao Unix prolife raram sendo oferecidos por diversos fabricantes de computadores desde os pessoais até os mainframes sempre mantendo suas características básicas tornandoo um padrão de fato Versões do Unix q 1 Unix Sexta Edição 1 PWB Unix 1 Unix Versão 7 1 Unix System III 1 Unix System V 1 Berkeley Unix BSD As versões do Unix são aquelas licenciadas exclusivamente pela ATT que podem ostentar o nome Unix Uma variedade de versões algumas mais famosas e outras menos foram desen volvidas desde seu surgimento Principais versões do Unix 1 Unix Sexta Edição é a mais antiga versão licenciada na maioria dos casos para institui ções educacionais não havendo nenhuma versão comercial dessa versão Essa versão foi lançada em 1975 1 PWB Unix versão especializada desenvolvida pelo Bell Labs que inclui facilidades para desenvolvimento de software por grandes equipes de programadores Essa versão foi lançada em 1977 6 Introdução ao Linux 1 Berkeley Unix grande parte do desenvolvimento do Unix se deu na Universidade de Berkeley na Califórnia que se tornou um centro de atividades nos anos 70 externo ao Bell LabsATT As versões 41 BSD ou 42 BSD tinham seu próprio conjunto de utilitários e incorporavam suporte para superminicomputadores VAX o editor de textos vi e um shell especialmente adaptado para programação em C chamado C Shell csh Esse sistema foi muito utilizado não somente nas universidades como também nas aplicações científicas e de engenharia O System V da ATT incorporou muitos desaes melhoramentos Essa versão foi lançada em 1977 1 Unix Versão 7 primeira versão licenciada comercialmente pela ATT com maior número de instalações em microcomputadores Essa versão foi lançada em 1979 1 Unix System III atualização da versão 7 que incorporou as características da PWB Foi um grande sucesso nos anos 80 disponibilizado pela maioria dos fabricantes de micro computadores Essa versão foi lançada em 1982 1 Unix System V incorporou melhorias no desempenho e teve ampliada a comunicação entre processos Foi a primeira versão licenciada pela ATT com suporte de software Essa versão foi lançada em 1983 A ATT licencia o software Unix mas não a marca registrada Unix que é de uso exclusivo da Bell Labs Dessa forma o fabricante adquire o códigofonte do sistema mas não pode utilizar o nome Unix tendo de atribuir um nome diferente o que contribui para a prolife ração de nomes gerando confusão em relação às versões Esses sistemas geralmente são compatíveis entre si sendo chamados de sistemas Unixbased Os principais são 1 AIX desenvolvido pela IBM em 1986 inicialmente para a plataforma IBM 6150 Atual mente suporta diversos tipos de arquitetura Entre suas características podemos des tacar sua ferramenta de gerenciamento do sistema o SMIT 1 Xenix desenvolvido pela Microsoft e posteriormente disponibilizado para a Apple e para o IBM PC tendo sido uma das versões mais conhecidas do Unix 1 HPUX desenvolvido em 1984 pela HP é um dos sistemas Unix mais utilizados atual mente É baseado na versão System V 1 SunOS desenvolvido pela Sun Microsystems em 1982 Inicialmente o SunOS era baseado no Unix BSD mas a partir da versão 50 teve seu nome alterado para Solaris e passou a ser baseado no System V Release 4 Para o desenvolvimento desses sistemas Unixbased os fabricantes de hardware devem pagar uma taxa de licença para a ATT que pode chegar a milhares de dólares por sistema vendido dependendo do número de usuários que suportam o que praticamente impossibi litou a utilização do Unix para aplicações pessoais e em empresas de pequeno porte q Sistemas Unixbased 1 Licenciados pela ATT códigofonte do Unix com nome diferente 2 AIX Xenix HPUX SunOS etc 1 Versões livres baseadas no Unix BSD 2 FreeBSD NetBSD OpenBSD etc Além dessas surgiram na década de 1990 versões livres de Unix como FreeBSD NetBSD e OpenBSD todas baseadas na distribuição BSD Em reação a essas restrições começaram a surgir sistemas similares ao Unix que simulavam as características externas do sistema proporcionando aos usuários as mesmas facilidades e comandos e permitindo executar os mesmos programas Esses sistemas não utilizam o códigofonte do Unix e podem ser vendidos sem pagar royalties à ATT Alguns exemplos desses sistemas são UNOS Unetix e Coherent 7 Capítulo 1 Histórico e instalação Alguns desses sistemas similares ao Unix mostraram grandes variações nas interfaces grá ficas protocolos de redes utilitários de gerenciamento administração de periféricos entre outras O desenvolvimento de um códigofonte novo independente da ATT e que constitu ísse de fato um padrão surgiu então como uma necessidade Similares Unix q 1 Desenvolvimento de um códigofonte novo independente da ATT 1 UNOS Unetix e Coherent 1 Grandes variações nas interfaces gráficas protocolos de redes utilitários de gerencia mento e administração de periféricos Andrew Tanenbaum pesquisador na área de redes de computadores e Sistemas Opera cionais desenvolveu um protótipo de Sistema Operacional baseado no Unix chamado de Minix descrito em Operating System Design and Implementation 1987 O Minix era utilizado em cursos de ciência da computação em diversas universidades entre elas a Uni versidade de Helsinque onde um estudante chamado Linus Torvalds decidiu escrever seu próprio Sistema Operacional Seu objetivo era fazer um Minix melhor que o Minix Torvalds desenvolveu então os primeiros kernels do Linux que já processavam alguns programas de interesse geral e abriu seu códigofonte na internet onde cada um poderia desenvolver seus próprios recursos sobre um kernel de conhecimento comum Essa é a filosofia do sof tware livre a mesma que proporcionou o desenvolvimento acelerado da internet A adesão de estudantes interessados curiosos profissionais e até hackers contribuiu para que a primeira versão considerada estável do Linux estivesse pronta para distribuição no final de 1993 O projeto GNU da Free Software Foundation uma organização que apoia projetos de desenvolvimento de software livre e os trabalhos da Universidade de Berkeley que produziram o BSD Unix foram duas importantes fontes de desenvolvimento dos atuais utilitários e aplicativos do Linux Para pensar Uma das vantagens de seu código estar disponível na internet é ter vários grupos dedicados a aprimorar ferramentas e recursos para o sistema fazendo com que este esteja sempre atualizado seguro estável e confiável constituindo uma plata forma de desenvolvimento que se tornou um padrão de fato O Linux está em franco crescimento no mercado disponível em diversos idiomas inclusive em português com interfaces gráficas processadores de texto sistemas gerenciadores de bancos de dados suporte a redes de excelente qualidade e uma infinidade de outras aplicações Na verdade existem atualmente diversas distribuições do Linux que veremos a seguir q 1 Linus Torvalds escreveu seu próprio Sistema Operacional Seu objetivo era desen volver um Minix melhor que o Minix 1 Apoio do GNU e da Free Software Foundation 1 Desenvolvimento do BSD Unix 1 Adesão de estudantes interessados curiosos profissionais hackers etc 8 Introdução ao Linux Distribuições Linux q 1 Como funciona a GPL 1 A empresa obtém gratuitamente o núcleo do Linux desenvolve pacotes e comercializaos 1 Licenças de software tradicionais restringem o acesso ao códigofonte dos pro gramas A GPL garante a liberdade de compartilhar e alterar o software livre man tendo seu acesso a todos os usuários As versões do Linux são obtidas por meio das distribuições de software As distribuições de software do Linux são mecanismos de fornecimento de software desenvolvidos pelo projeto GNU da Free Software Foundation FSF que seguem a General Public License GPL Enquanto as licenças de software tradicionais servem para restringir o acesso ao códigofonte dos programas evitando o compartilhamento e a alteração destes a GPL tem como objetivo garantir a liberdade de compartilhar e alterar o software livre fornecendo acesso irrestrito ao seu código fonte Os fabricantes protegem seus softwares por inter médio do copyright Para criar um contraste o FSF criou um novo nome que dá a ideia de um conceito oposto ao do direito autoral o copyleft Na verdade o copyleft da FSF se baseia no mesmo instrumento legal utilizado pelos proprietários de software o copyright mas a GPL inclui no copyright termos especiais de licenciamento que garantem a liberdade de uso do software Esses termos conferem a qualquer usuário o direito de utilizar modi ficar e redistribuir o software livre ou qualquer software dele derivado Por exemplo a GPL garante a uma empresa obter gratuitamente o kernel do Linux e traba lhar nele de forma a melhorar os textos das mensagens do sistema ou traduzilos para um determinado idioma e a fazer a documentação deste pacote e vendêlo como uma distri buição Linux A partir do copyleft qualquer usuário pode usar alterar e redistribuir o software livre Muitas distribuições Linux comerciais surgiram dessa maneira acoplando ao kernel utili tários interfaces gráficas aplicações matemáticas e científicas sistemas gerenciadores de bancos de dados entre outros que são colocados no mercado junto com a documentação e as instruções para a instalação do sistema A seguir são apresentadas algumas características das principais distribuições Linux Exercício de fixação 1 e Entendendo as licenças Unix e GPL Quais as diferenças entre as licenças do Unix e da GPL do Linux Tendo como base o enfoque do usuário dos desenvolvedores de aplicativos dos fabricantes de hardware e dos distribuidores de software livre 1 Liste as vantagens da GPL 1 Liste as vantagens dos sistemas Unixbased Red Hat Enterprise Linux q 1 Interface gráfica XWindow e o KDE desktop para gerenciamento de janelas 1 Especializações para versões cliente e servidor e aplicativos como suítes de escritório 9 Capítulo 1 Histórico e instalação q 1 Gerenciadores de pacotes RPM e YUM automatizam o processo de instalação e atuali zação do sistema 1 Versátil aceita diversas opções de configuração de recursos do sistema 1 Patrocínio do projeto Fedora A distribuição Red Hat Enterprise Linux incorpora facilidades como programas de configuração de recursos do sistema interfaces gráficas especializações para versões cliente e servidor e aplicativos como suítes de escritório Com ela é fornecido o ambiente gráfico XWindow con tendo o gerenciador de janelas KDE desenvolvido por um projeto de software livre Uma grande vantagem dessa distribuição é a facilidade de instalação excelente para os iniciantes em Linux Funcionalidades como pacotes précompilados e gerenciadores de pacotes como o RPM e o YUM que automatizam todo o processo de instalação e a atuali zação do sistema facilitam o processo de administração A Red Hat está patrocinando o projeto Fedora juntamente com a comunidade formada por desenvolvedores de software que dão suporte ao desenvolvimento de software livre O objetivo desse projeto da comunidade Linux é manter um Sistema Operacional completo de aplicação geral com o códigofonte totalmente aberto e gratuito CentOS q 1 Compatível com Red Hat Enterprise Linux 1 Instalação simples em modo gráfico ou texto 1 Suporte a vários idiomas inclusive o português 1 Ambiente gráfico KDE ou Gnome 1 Rico em ferramentas administrativas e gráficas 1 Gerenciamento de pacotes com RPM e YUM 1 Suporte comercial opcional por meio de revendedores A distribuição CentOS deriva da distribuição Red Hat Enterprise Linux RHEL de acordo com as regras de redistribuição definidas pela Red Hat Enterprise que são remoção de softwares proprietários de terceiros remoção de imagens logotipos e textos referenciando a Red Hat desde que não façam parte de notas de copyright entre outras O CentOS é dis tribuído sob a licença GNUGPL para aplicações com servidores de pequeno médio e grande porte e é mantido por uma ativa e crescente comunidade de usuários denominada CentOS Project Além disso possui diversas vantagens sobre outras distribuições rápida correção de bugs e vulnerabilidades grande rede de repositórios para download várias opções de suporte como chat IRC listas de email fóruns e um FAQ dinâmico e abrangente Também é possível obter suporte comercial oferecido por empresas parceiras Debian q 1 Desenvolvido por um grupo diversificado de programadores 1 Preferido pelos programadores mais experientes 1 Pacotes précompilados no formato DEB 1 Ferramentas de gerenciamento de pacotes APT e Aptitude Para mais informações acesse httpwww redhatcom e http fedoraprojectorg w Visite httpwww centosorg para saber mais detalhes sobre a distribuição CentOS w 10 Introdução ao Linux A distribuição Debian foi desenvolvida por um grupo de hackers e é o preferido entre os programadores mais experientes Possui estrutura especial de pacotes de software précompilados no formato DEB e ferramentas de gerenciamento de pacotes muito versá teis como o APT e o Aptitude Ubuntu q 1 Desenvolvido com foco em segurança 1 Edições para desktop e servidores 1 Garantia de atualizações de até 5 anos para as edições LTS e 18 meses para as demais 1 Instalação simples 1 Ferramentas de gerenciamento de pacotes APT e Aptitude 1 Suporte a vários idiomas inclusive o português A distribuição Ubuntu é mantida por uma comunidade de usuários e é baseada na distri buição Debian O Ubuntu contém todas as ferramentas necessárias desde processadores de texto e leitores de emails a servidores web e ferramentas de desenvolvimento além de utilizar os gerenciadores de pacotes APT e Aptitude O Ubuntu é desenvolvido com foco em segurança disponibilizando atualizações de segurança gratuitas por pelo menos 18 meses para desktops e servidores Com a versão LongTerm Support LTS adquirese três anos de suporte para desktops e cinco anos para servidores Não é cobrado nenhum valor pela versão LTS Mandriva Linux q 1 Fusão da Mandrake com a Conectiva 1 Foco no uso doméstico 1 Ambiente gráfico avançado 1 Compatível com os periféricos nacionais como monitores teclados e impressoras 1 Instalação muito simples 1 Manuais e textos de apoio traduzidos para o português 1 Baseada na distribuição Red Hat Enterprise Linux 1 Suporte local e facilidades para a instalação do sistema É uma distribuição francobrasileira mantida pela empresa Mandriva formada por meio da fusão da empresa francesa Mandrake e da brasileira Conectiva Seu nome é a fusão dos nomes das duas empresas Semelhante ao Windows em vários aspectos é uma distribuição voltada para desktops tanto para uso doméstico quanto corporativo Possui várias opções de idioma para instalação incluindo o português brasileiro O instalador do Mandriva é um dos mais amigáveis entre as distribuições Linux As confi gurações podem ser realizadas tanto em modo gráfico quanto em modo texto e dispõem de alguns programas de manutenção de sistema chamados de Drakes entre eles o MouseDrake para configurar o mouse o DiskDrake para configurar as partições de disco rígido e Drakconnect para configurar conexões de rede Acesse o endereço httpwwwdebianorg para saber mais detalhes w Para mais detalhes acesse httpwww ubuntucom página em inglês w Para mais detalhes acesse o site http wwwmandrivacom No site há um link para a comunidade de desenvolvedores w 11 Capítulo 1 Histórico e instalação Slackware q 1 Uma das mais populares distribuições Linux 1 Ótimo desempenho e estabilidade que o indicam para utilização em servidores de redes 1 Permite trabalhar com pacotes nativos da distribuição Red Hat Enterprise Linux 1 Ambiente gráfico XWindow e gerenciador de janelas fvwm com estilo similar à interface gráfica do Microsoft Windows 1 Pacotes de segurança avisam via email sobre alterações no sistema 1 Instalação complexa A distribuição Slackware também é uma das mais populares distribuições Linux com boa penetração de mercado Seus pontos fortes são o desempenho e a estabilidade que a indicam para utilização em servidores Além disso possui conversor que permite trabalhar com pacotes nativos da distribuição Red Hat Enterprise Linux Vem com ambiente gráfico XWindow e o gerenciador de janelas fvwm que possui design similar ao da interface do Microsoft Windows Essa distribuição ainda conta com pacotes de segurança que permitem avisar via email que uma função de inicialização do sistema ou um script foi alterado e que isso pode causar transtornos ao sistema Sua instalação é bem mais complexa Exercício de fixação 2 e Conhecendo as distribuições Linux Acesse o site das principais distribuições Linux verifique o enfoque de cada distribuição uso em servidores uso em estações de trabalho uso doméstico etc verifique também se as distribuições possuem suporte comercial listas de discussão suporte a múltiplos idiomas e plataformas e examine a forma de obtêlas via download compra de CDs ou DVDs etc 1 Red Hat 1 SlackWare 1 CentOS 1 Debian 1 Mandriva 1 Ubuntu A escolha da distribuição Linux São muitas as distribuições Linux hoje algumas com enfoque para uso em servidores visando mais segurança e alta disponibilidade outras para uso em estações de trabalho visando ambiente gráfico amigável assim como para uso doméstico jogos laptops ou outras finali dades Além disso algumas fornecem suporte comercial e garantia de atualizações Antes de escolher uma distribuição é necessário conhecer um pouco sobre cada uma delas pelo menos as principais e ter em mente a finalidade da instalação Para a nossa finalidade acadêmica vamos escolher uma distribuição que possua algumas das seguintes características 1 Suporte ao nosso idioma 1 Estabilidade no mercado 1 Ambiente gráfico com assistente de instalação Saiba mais sobre a distribuição Slackware no endereço http wwwslackwarecom w 12 Introdução ao Linux 1 Detecção automática de hardware 1 Ambiente gráfico 1 Gerenciador de pacotes 1 Programas utilitários como editores de texto navegadores para a internet editores de imagens reprodutores de áudio e vídeo Para este curso escolhemos a versão mais atual do CentOS por ser uma versão gratuita baseada no Red Hat Enterprise Linux que é uma distribuição bastante sólida no mercado Razões para utilizar o Linux q 1 Software livre 1 Flexibilidade para instalação e reinstalação 1 Sem códigoschave de licenciamento 1 Custo significativamente menor 1 Tendência de mercado 1 Sistema Operacional da família Unix que mais cresce em número de usuários Existem diversas razões para a escolha do Linux como Sistema Operacional Tratase de um software livre com maior flexibilidade para instalação e reinstalação sem a necessidade de utilização de códigoschave e licenças No ambiente Linux os softwares são normalmente gratuitos o que praticamente elimina o custo com instalações de software Outro bom motivo é estar atualizado com as tendências do mercado já que o Linux vem despontando como o Sistema Operacional da família Unix que mais cresce em número de usuários Ins talar um Sistema Operacional tão complexo quanto o Linux não é uma tarefa simples mas sem dúvida compensa o trabalho A seguir serão apresentados os requisitos e os passos necessários para a instalação desse Sistema Operacional Hardwares suportados Na URL httpwwwlinuxdriversorg podemos consultar a lista de hardwares compatíveis mantida pelas principais distribuições Linux É necessário investigar a compatibilidade de um hardware antes de comprálo Alguns distribuidores possuem uma classificação adi cional listando hardwares e softwares certificados isto é que foram oficialmente testados através de um programa de certificação que garante o funcionamento com o Linux q Como encontrar hardware compatível 1 Acesse httpwwwlinuxdriversorg 1 Linux Hardware Compatibility List Drivers índice de lista de hardwares compatíveis mantida pelas principais distribuições Linux Classificações 1 Compatível suportado pelo kernel do Linux 1 Certificado garantia de funcionamento por algum distribuidor 1 Driver em versão Alpha ou Beta o kernel ainda não suporta mas pode ser compilado e adicionado como um módulo Não há nenhuma garantia de funcionamento e não é recomendado em ambiente de produção 1 Não suportado hardwares testados com funcionamento não confirmado 13 Capítulo 1 Histórico e instalação q Nem todo hardware suporta o Sistema Operacional Linux 1 Projetos especiais de hardware para o Microsoft Windows 1 Bibliotecas de drivers cujo códigofonte não é aberto 1 Incompatibilidade acontece mesmo entre os Sistemas Operacionais da Microsoft 1 Drivers de periféricos mais antigos precisam ser reescritos 1 Vantagens do software livre com a garantia de acesso aos códigosfonte Lista de verificação de hardware A maior parte dos dispositivos de hardware é detectada automaticamente durante o processo de instalação Os drivers desses dispositivos já estão incluídos nas mídias de instalação embora as distribuições Linux não incluam drivers para todos os dispositivos de hardware O ideal é montar uma lista de verificação de hardware para o computador que será utilizado para a instalação como a apresentada na tabela da Tabela 11 Dispositivo Características Dados coletados CPU Tipo e velocidade Memória RAM Capacidade Teclado Marca e modelo Mouse Protocolo marca modelo e número de botões Discos rígidos Marca modelo e capacidade Drive de CDDVD Marca e tipo Placa de rede Marca modelo tipo e velocidade Placa de vídeo Marca modelo e quantidade de memória RAM Monitor Marca e modelo Placa de som Marca e modelo Dispositivos USB Marca e modelo Requisitos mínimos de hardware Antes de instalar o Sistema Operacional Linux devemos conhecer algumas informações do nosso hardware Neste item conheceremos as configurações mínimas de hardware reque ridas para que se possa instalar o Linux O computador deve atender a alguns requisitos mínimos para poder executar o Sistema Operacional Linux 1 Unidade de Processamento Central UCP mesmo sendo possível instalar o Linux em computadores com CPU Intel 80386 e versões anteriores se for utilizado somente o modo texto Para suporte total incluindo o ambiente gráfico é recomendado o uso de processa dores Pentium ou posteriores O Linux também suporta processadores Intel de 64 bits AMD de 32 e 64 bits IBM PowerPC e alguns processadores utilizados em computadores de grande porte O procedimento de instalação que será visto aqui é válido para a família de proces sadores Intel e AMD de 32 ou 64 bits Além do modelo do processador devese atender aos requisitos de velocidade de processamento Para que se obtenha desempenho satisfatório devese ter um processador com velocidade igual ou maior à de um Pentium III de 700 MHz Tabela 11 Lista de verificação de hardware 14 Introdução ao Linux 1 Memória para instalar e utilizar o Sistema Operacional Linux é necessário somente 4 MB de memória RAM caso seja utilizado somente o modo texto e 64 MB de memória RAM se usado o modo gráfico Mas o recomendado para atingir performance satisfatória é de pelo menos 512 MB de memória RAM 1 Drives para instalar e utilizar o Sistema Operacional Linux é necessário o mínimo de 2 GB de espaço livre no disco rígido É possível termos dois ou mais sistemas operacionais instalados no mesmo disco rígido porém cada um necessita ter seu próprio esquema de particionamento Além do disco rígido é conveniente ter um drive de CDDVD para facilitar a instalação do sistema Neste item veremos como é importante documentar todas as informações do sistema que serão solicitadas durante o processo de instalação do Linux e também as informações sobre as configurações préexistentes no caso de migração do Windows para o Linux Instalando o Linux Neste item veremos como criar uma máquina virtual para instalarmos o Linux e o passo a passo do programa de instalação Criação da máquina virtual O software utilizado para a criação e gerenciamento de máquinas virtuais é o Virtual Box A seguir são apresentados os passos para fazer a criação da máquina virtual que será utili zada para a instalação do CentOS 1 Nome da VM e Tipo de Sistema Operacional no campo Nome preencher com o valor CentOS ADS001 No campo OS Type selecionar Linux na opção Sistema Opera cional e Red Hat 64 bit na opção Versão 1 Memória selecionar 1 GB de memória RAM 1 Disco Rígido Virtual marcar as opções Disco de Boot e Criar novo disco rígido 1 Assistente de criação de discos virtuais marcar a opção VDI VirtualBox Disk Image 1 Detalhes do armazenamento de disco virtual marcar a opção Dinamicamente alocado 1 Localização e tamanho do arquivo de disco virtual no campo Localização preencher com o valor CentOS ADS001 e no campo Tamanho S selecionar 151 GB de espaço em disco 1 Sumário essa tela apresentará as opções selecionadas durante a criação do disco virtual Confirme se os dados estão corretos e em seguida clique no botão Criar 15 Capítulo 1 Histórico e instalação Para iniciar a máquina virtual basta selecionála como mostra a Figura 15 e clicar no botão Iniciar Na primeira vez que a máquina virtual é iniciada o assistente de primeira execução é automaticamente executado Esse assistente possibilita a seleção da mídia de instalação do Sistema Operacional na máquina virtual Nessa etapa deve ser selecionado o drive de CDDVD do hospedeiro Após a seleção do local onde está inserida a mídia de instalação é exibida uma tela com os dados selecionados Confirme se estão corretos e em seguida clique no botão Iniciar Programa de instalação do Linux Este item mostra passo a passo como instalar a distribuição CentOS Com base nele o aluno terá condições de instalar qualquer outra distribuição pois de um modo geral mesmo que algumas etapas apareçam em sequência diferente as informações necessárias deverão ser as mesmas Para iniciar a instalação do Linux utilizando um DVD primeiramente é neces sário reconfigurar o BIOS do PC para que o boot seja feito através do drive do DVD Para isso devemos entrar na tela de configuração do BIOS e alterar a ordem de inicialização de modo que o drive de DVD seja o primeiro na ordem de prioridade de boot 1 Teste de integridade da mídia de instalação a primeira tela do programa de insta lação apresenta a opção de testar a integridade da mídia de instalação Geralmente não é necessário executar esse teste Para passar adiante sem fazer o teste de integridade selecione a opção Skip 1 Iniciando a instalação se o computador ou máquina virtual possuírem pelo menos 640 MB de memória RAM o ambiente gráfico de instalação será aberto por padrão Caso contrário uma mensagem informará que a quantidade de memória existente é insuficiente para a instalação no modo gráfico e iniciará a instalação no modo texto Figura 15 Iniciando a máquina virtual 16 Introdução ao Linux 1 Seleção do idioma essa tela mostra os idiomas disponíveis para o processo de insta lação Escolha Portuguese Brazilian Português Brasil 1 Seleção do teclado em seguida deve ser selecionado o modelo do teclado Com base no idioma selecionado antes o instalador sugere o modelo mais apropriado que neste caso é o Português Brasileiro ABNT2 1 Selecionando o tipo de dispositivo que será utilizado na instalação esta etapa apresenta duas opções Basic Storage Devices que inclui discos IDE SATA SCSI etc e Specialized Storage Devices que inclui dispositivos de armazenamento mais complexos como Storage Area Networks SANs Selecione a opção Basic Storage Devices 1 Inicializando o disco rígido neste momento o instalador analisa o disco rígido e caso não encontre nenhum sistema de arquivos emitirá um aviso solicitando a inicialização do disco Esse processo apagará todas as informações existentes no disco Se a instalação estiver sendo feita em uma máquina virtual não se preocupe pois essa ação não apagará nenhuma informação no hospedeiro Clique no botão Sim descarte qualquer dado 1 Configuração da rede nesta etapa podem ser utilizados dois tipos de configuração 1 Configuração automática via Dynamic Host Configuration Protocol DHCP essa é a opção padrão onde deve ser informado somente o nome da máquina As outras informações necessárias para integração à rede e acesso à internet como endereço IP máscara de rede gateway servidores de DNS etc são fornecidas automaticamente pelo servidor DHCP da rede 1 Configuração manual para configurar a rede manualmente é preciso clicar no botão Configure Network Nesse caso é necessário possuir um endereço IP máscara de rede endereço IP do gateway e dos servidores de DNS para integração à rede e acesso à internet 1 Seleção do Fuso Horário nesta etapa é definido o fuso horário de acordo com a locali zação física do sistema Selecione a opção AméricaSão Paulo e deixe marcada a opção O relógio do sistema utiliza o UTC 1 Senha de Administrador usuário root o administrador do sistema possui plenos pri vilégios podendo instalar alterar ou remover qualquer programa arquivo ou diretório A escolha dessa senha deve ser criteriosa pois caso alguém a descubra poderá causar sérios danos ao sistema 1 Tipo de particionamento nesta etapa é definido o tipo de particionamento que será utilizado Selecione a opção Create Custom Layout 1 Particionando o disco rígido após inicializar o disco o programa de instalação abre o gerenciador de partições Caso o disco tenha sido inicializado anteriormente ele será exibido sem nenhuma partição mostrando todo o espaço livre existente Ao menos duas partições são necessárias para o funcionamento do Linux uma para o sistema e outra para a área de memória virtual swap As principais vantagens de se particionar um disco são segurança devido ao isolamento de falhas e independência entre as partições evitando problemas no sistema caso a capacidade de alguma partição se esgote É importante ressaltar que o dimensionamento das partições deve ser feito com bastante critério para que não ocorram situações onde o tamanho de uma partição se esgote enquanto outras partições ainda possuam bastante espaço disponível Nesta instalação serão criadas as seguintes partições 1 essa partição é a base de todo o sistema sendo conhecida como partição raiz e sim bolizada pela barra Nesta instalação será alocado 5 GB de espaço em disco para a partição raiz que usará o tipo de sistema de arquivos ext4 17 Capítulo 1 Histórico e instalação 1 boot é nessa partição que fica localizado o kernel do Linux Essa partição precisa ser primária pois será acessada pelo BIOS para fazer a carga do Sistema Operacional Nesta instalação será alocado 100 MB de espaço em disco para a partição boot Essa partição utilizará o tipo de sistema de arquivos ext4 1 var é nessa partição que ficam arquivos de sistema como arquivos de log email etc Nesta instalação será alocado 3 GB de espaço em disco para a partição var Essa par tição utilizará o tipo de sistema de arquivos ext4 1 usr é nessa partição que os programas manuais etc são instalados Nessa instalação será alocado 5 GB de espaço em disco para a partição usr Essa partição utilizará o tipo de sistema de arquivos ext4 1 swap essa partição é utilizada como memória virtual e não possui ponto de montagem Seu tipo de sistema de arquivos é swap e seu tamanho deve ser o dobro da quantidade de memória RAM instalada no sistema Nesta instalação serão alocados 2 GB de espaço em disco para a partição swap A Figura 16 mostra a tela onde é selecionado o tipo de partição que será criado Nesta insta lação serão utilizadas somente partições padrão Outras partições podem ser criadas dependendo do tipo de aplicação a que o servidor se destina assim como pode ser desnecessária a criação de algumas das partições utilizadas no esquema citado anteriormente em determinados casos É importante ressaltar que o BIOS suporta apenas quatro partições primárias Sendo assim se mais partições forem requeridas três partições deverão ser criadas como primárias e a quarta deverá ser do tipo estendida que pode ser subdividida em até 255 partições lógicas Uma partição estendida não pode conter dados mas somente partições lógicas Uma partição lógica por sua vez não pode ser utilizada para iniciar a carga de um Sistema Operacional A Figura 17 mostra a tela de criação de partições com suas opções O campo Ponto de montagem define o local da árvore de diretórios onde a partição será montada Figura 16 Escolha do tipo de partição no disco rígido 18 Introdução ao Linux O campo Tipo de sistema de arquivos define o tipo de sistema de arquivos que será utili zado para formatar a partição O campo Tamanho MB define o tamanho da partição em megabytes Além desses campos básicos temos a opção de definir a partição como primária e optar pela criptografia dos dados que serão armazenados 1 Gerenciador de boot nessa etapa é definido o local do disco onde será instalado o gerenciador de boot boot loader ou módulo inicializador do sistema Os principais gerenciadores de boot do Linux são o Grub e o Lilo O CentOS utiliza por padrão o Grub que pode ser instalado no MBR ou no setor de boot da partição ativa Utilizaremos a configuração sugerida pelo programa de instalação que instala o Grub no MBR Para isso basta deixar a opção Install boot loader on devsda e clicar no botão Avançar Nessa tela também é possível adicionarmos outros sistemas operacionais que estejam instalados no disco para serem carregados pelo Grub 1 Pacotes de aplicações nessa etapa é definida uma categoria de instalação O instalador préagrupa conjuntos de aplicações classificandoas nas seguintes categorias Desktop Minimal Desktop Minimal Basic Server Database Server Web Server Virtual Host e Software Development Workstation Selecione a opção Desktop Além disso também são definidos os repositórios que serão utilizados para fazer o download dos pacotes Nesse caso não será necessário incluir nenhum repositório extra 1 Instalação dos pacotes após a formatação das partições o instalador inicia o processo de instalação dos pacotes processo que pode demorar cerca de 15 a 30 minutos depen dendo da performance do computador utilizado e das aplicações que serão instaladas Fim da instalação terminada a instalação o programa de instalação ejetará o DVD e dará ao aluno os parabéns por ter finalizado a instalação É preciso retirar o DVD e clicar no botão Reinicializar Figura 17 Opções para a criação de partições 19 Capítulo 1 Roteiro de Atividades Roteiro de Atividades 1 Atividade 11 Conhecendo as distribuições Linux 1 Qual das distribuições Linux utiliza o gerenciador de pacotes RPM ou YUM 2 Qual das distribuições Linux vem com o gerenciador de janelas fvwm 3 Qual das distribuições Linux possui pacotes de software précompilados no formato DEB 4 Quais são as ferramentas de gerenciamento de pacotes utilizadas no Debian e no Ubuntu 5 Cite dois sistemas baseados em Red Hat Atividade 12 Obtendo informações para iniciar a instalação do Linux Colete as informações necessárias para a instalação do Linux se ele fosse ser instalado na máquina de sala de aula e preencha a Tabela 11 O hardware dessa máquina é compatível Atividade 13 Preparando o ambiente de instalação Esta atividade é destinada a preparar a instalação do Linux em uma máquina virtual criada com o software Virtual Box instalado em um computador com o sistema operacional Windows Siga os seguintes passos 1 Crie uma máquina virtual para posteriormente fazer a instalação do CentOS 1 Nome da VM e Tipo de Sistema Operacional no campo Nome preencha com o valor CentOS ADS001 No campo OS Type selecione Linux na opção Sistema Opera cional e Red Hat 64 bit na opção Versão 1 Memória selecione 1 GB de memória RAM 1 Disco virtual marque as opções Disco de Boot e Criar novo disco rígido 1 Assistente de criação de discos virtuais marque a opção VDI VirtualBox Disk Image 1 Detalhes do armazenamento de disco virtual marque a opção Dinamicamente alocado 1 Localização e tamanho do arquivo de disco virtual no campo Localização preencha com o valor CentOS ADS001 e no campo Tamanho S selecione 151 GB de espaço em disco 1 Sumário esta tela apresentará as opções selecionadas durante a criação do disco virtual Confirme se os dados estão corretos e em seguida clique no botão Criar 20 Introdução ao Linux Atividade 14 Instalando o Linux Faça a instalação do CentOS na máquina virtual criada na Atividade 13 1 Clique com o botão direito na máquina virtual criada e Configurações 2 Vá em Armazenamento 3 Em Árvore de armazenamento Controller IDE Vazio ao lado direito em atributos clique no ícone de um CD 4 Escolha a opção Selecionar uma arquivo de CDDVD virtual 5 Escolha a imagem do CentOS no desktop e inicie a máquina virtual 6 Execute o programa de instalação do CentOS 7 Teste de integridade da mídia de instalação Skip 8 Seleção do idioma Portuguese Brazilian 9 Seleção do modelo do teclado Português Brasileiro ABNT2 10 Seleção do tipo de dispositivo de armazenamento Basic Storage Devices 11 Configuração da rede configuração automática padrão inserir somente o nome da máquina 12 Seleção do fuso horário selecionar o fuso AméricaSão Paulo e deixar marcada a opção O relógio do sistema utiliza o UTC 13 Definição da senha de root definir a senha de root 14 Seleção do tipo de particionamento Create Custom Layout 15 Criação das partições crie as seguintes partições 2 com 5 GB de espaço e tipo ext4 2 boot com 100 MB de espaço e tipo ext4 definir como partição primária 2 var com 3 GB de espaço e tipo ext4 2 usr com 5 GB de espaço e tipo ext4 2 swap com 2 GB de espaço 16 Instalação do carregador de boot selecionar a opção Install boot loader on devsda 17 Seleção do tipo de instalação e dos repositórios selecione a opção Desktop Não é preciso adicionar nenhum repositório 18 Finalização da instalação retire a mídia de instalação e clique no botão Reinicializar Atividade 15 Inicializando o sistema pela primeira vez Inicialize o sistema pela primeira vez e faça login e logout nele utilizando a conta criada na inicialização Exercite também outras opções além do logout como reinicialização e término do sistema 21 Capítulo 2 Utilização do sistema objetivos conceitos 2 Utilização do sistema Conhecer as funcionalidades da interface gráfica XWindow e dos ambientes de desktop GNOME e KDE Configurações iniciais ambiente gráfico GNOME desktop e KDE desktop Configurações iniciais Após o término bemsucedido da instalação do Linux e a reinicialização do sistema a partir do disco rígido o Sistema Operacional será carregado pela primeira vez em sua máquina A primeira inicialização disponibiliza um serviço de configuração do sistema em que são mostradas diversas janelas de configuração que serão descritas a seguir Informações da licença Nesta etapa são informadas as regras de licenciamento É preciso concordar com o acordo de licença para prosseguir Criando uma conta de usuário Assim como em outros Sistemas Operacionais multiusuário as contas de usuário no Linux servem para identificar e dar permissões aos usuários limitando seus acessos e privilégios para a utilização do sistema Devese utilizar a conta criada nesta etapa para acessar o sistema A conta root só deve ser utilizada quando for preciso realizar operações adminis trativas Essa medida evita modificações acidentais no sistema como a remoção inadvertida de arquivos Crie uma conta especificando nome do usuário username nome completo do usuário e senha Configurando data e hora Permite a definição da data e da hora do sistema ou a definição de um servidor da rede para atualização e sincronização do relógio do sistema através do protocolo Network Time Protocol NTP Saiba mais O NTP permite manter o relógio de um com putador com a hora sempre certa e com grande exatidão Ori ginalmente idealizado por David L Mills da Universidade do Dela ware o NTP foi utilizado pela primeira vez antes de 1985 sendo ainda hoje muito popular e um dos mais antigos protocolos da internet l 22 Introdução ao Linux Habilitação e configuração do Kdump O Kdump é um utilitário que grava informações que estavam na memória quando ocorrem falhas no sistema Ele pode ser útil na detecção de falhas Nesta etapa é possível habilitálo e configurar a quantidade de memória que será alocada a ele Ambiente gráfico q Servidor X X Server 1 X Window System XWindow X11 ou simplesmente X é um protocolo e seu software associado possibilita o emprego de uma interface gráfica com o conceito de janelas Originalmente chamado de X foi desenvolvido no MIT em 1984 Atualmente está na versão 11 e por isso carrega no nome esse número 1 XWindow é o toolkit e o protocolo padrão para interfaces gráficas nos sistemas Unix e assemelhados como o Linux embora existam versões para outros Sistemas Opera cionais como o MS Windows e o Mac OS por exemplo 1 É um software clienteservidor 1 No CentOS o servidor X utilizado é o XOrg Outras distribuições utilizam o XFree86 1 Permite acesso via rede isto é de um computador é possível capturar a tela de outro computador e trabalhar remotamente 1 Pode ser iniciado automaticamente ou através da linha de comandos utilizando por exemplo o comando startx O servidor X é o programa que provê a interface gráfica do usuário Também chamado de XWindow permite a execução de programas e aplicações gráficas e é compatível com várias plataformas da família Unix O XWindow pode funcionar em rede permitindo executar um programa em um computador e ver sua saída gráfica na tela de outro computador conec tado à rede O XWindow é responsável pelos desenhos de seus objetos na tela e capta as entradas de dados por meio do teclado e do mouse relacionandoas com as telas gráficas Para orga nizar o desktop em objetos como janelas e menus utiliza um componente chamado geren ciador de janelas que integra as aplicações ao ambiente gráfico Muitos usuários Linux adotaram o XFree86 ou o XOrg softwares livres compatíveis com o XWindow disponíveis nas distribuições Linux Iniciando e finalizando o Servidor X O Servidor X pode ser automaticamente iniciado por intermédio do programa X Display Manager XDM O XDM pode ser iniciado automaticamente durante o boot do sistema e mantém o Servidor X rodando abrindo telas de login e iniciando sessões de trabalho O Servidor X também pode ser iniciado manualmente pelo usuário através dos comandos xinit ou startx Em caso de mau funcionamento podemos finalizar o Servidor X pressionando simultanea mente as teclas CrtlAltBackspace porém isso não é recomendável durante a operação normal do sistema pois o término abrupto de aplicações pode causar perda de dados A melhor forma de finalizar o Servidor X é utilizando a opção de saída ou logout existente no gerenciador de janelas onde é possível escolher entre desligar o computador reiniciálo ou simplesmente fechar a sessão de trabalho 23 Capítulo 2 Utilização do sistema Configurando o Servidor X O Servidor XOrg suporta vários mecanismos para suprir e obter configurações e parâme tros dinâmicos do sistema A ordem de precedência dos mecanismos é 1 Opções passadas através da linha de comando 2 Variáveis de ambiente 3 Opções definidas nos arquivos de configuração xorgconf 4 Autodetecção 5 Valores defaults do sistema Arquivo xorgconf O XOrg não possui um utilitário de configuração Em ves disso ele mesmo tenta gerar uma configuração válida com base em uma série de autodetecções É possível executar o comando XOrg configure para gerar um arquivo de configuração O arquivo de configu ração do XOrg o xorgconf fica localizado no diretório etcX11 e é dividido em sessões que são descritas abaixo 1 Files possui os paths completos para arquivos que o servidor X necessita para funcionar como tipos de fontes 1 ServerFlags possui opções de configuração globais do servidor X 1 Module é responsável pelo carregamento dinâmico de módulos do servidor X 1 InputDevice possui configurações de dispositivos de entrada de dados como teclados e mouses Deve existir um bloco InputDevice para cada dispositivo de entrada 1 Device possui configurações de dispositivos de vídeo Deve existir pelo menos um dispo sitivo de vídeo instalado 1 Monitor possui configurações de monitores de vídeo Deve existir pelo menos um monitor de vídeo instalado 1 Modes é opcional e possui configurações sobre modos de tela disponíveis para os monitores 1 Screen possui configurações de dispositivos e monitores de vídeo 1 ServerLayout agrega as sessões Screen e InputDevice 1 DRI é opcional e possui informações sobre a infraestrutura de renderização direta DRI 1 Vendor possui configurações personalizadas para cada fabricante Sessão Files Section Files FontPath usrX11libX11fonts75dpiunscaled FontPath usrX11libX11fonts100dpiunscaled FontPath usrX11libX11fontsfreefont FontPath usrX11libX11fontslatin2 FontPath usrX11libX11fontslocal 24 Introdução ao Linux FontPath usrX11libX11fontssharefont FontPath usrX11libX11fontsTTF EndSection Sessão Module Section Module Load i2c Load bitmap Load dri Load extmod Load freetype EndSection Sessão InputDevice Section InputDevice Identifier Generic Keyboard Driver kbd Option CoreKeyboard Option XkbRules xorg Option XkbModel abnt2 Option XkbLayout br Option XkbVariant abnt2 EndSection Section InputDevice Identifier Configured Mouse Driver mouse Option CorePointer Option Device devinputmice Option Protocol auto Option ZAxisMapping 4 5 6 7 EndSection 25 Capítulo 2 Utilização do sistema Sessão Device Section Device Identifier Placa de Vídeo Genérica Driver vesa BusID PCI100 EndSection Sessão Monitor Section Monitor Identifier Monitor Genérico Option DPMS HorizSync 2864 VertRefresh 4360 EndSection Sessão ServerLayout Section ServerLayout Identifier Default Layout Screen Default Screen InputDevice Generic Keyboard InputDevice Configured Mouse EndSection Sessão Screen Section Screen Identifier Default Screen Device Placa de Vídeo Genérica Monitor Monitor Genérico DefaultDepth 24 SubSection Display Depth 4 Modes 1024768 EndSubSection SubSection Display Depth 8 26 Introdução ao Linux Modes 1024768 EndSubSection SubSection Display Depth 15 Modes 1024768 EndSubSection SubSection Display Depth 16 Modes 1024768 EndSubSection SubSection Display Depth 24 Modes 1024768 EndSubSection EndSection Abrindo uma sessão Para abrir uma sessão de trabalho ou fazer o login no sistema é preciso informar um nome de usuário e senha válidos Na tela de login é possível selecionar o gerenciador de janelas e o idioma a serem utilizados como mostra a figura a seguir GNOME desktop Após realizar o login no sistema será exibida a janela principal do gerenciador GNU Network Object Model Environment GNOME que é o gerenciador padrão do CentOS O GNOME desktop é composto da tela inteira incluindo os ícones e painéis A área vazia da tela é chamada apenas de desktop ou área de trabalho Figura 21 Fazendo o login no sistema CentOS Distribuição Linux de classe Enterprise derivada de códigos fonte gratuitamente distribuídos pela Red Hat Enterprise Linux e mantida pelo CentOS Project 27 Capítulo 2 Utilização do sistema 1 Barra de menus acesso a aplicativos locais do computador e da rede e utilitários de personalização do sistema 1 Atalhos rápidos acesso rápido a aplicativos Os seguintes aplicativos vêm por padrão com atalhos rápidos criados o navegador Firefox o cliente de email Evolution e o aplica tivo de notas rápidas 1 Barra de status exibe o status das conexões de rede o nível de volume do autofalante entre outros 1 Calendário exibe o calendário e a hora do sistema Clicando sobre ele podese ajustar a data e a hora do sistema 1 Status da conta possibilita a inserção de informações a respeito do usuário como telefones de contato endereço página pessoal entre outros Também possibilita travar a tela trocar de usuário ou encerrar a sessão de trabalho 1 Lista de janelas exibe as aplicações que estão sendo executadas 1 Atalhos da área de trabalho atalhos para aplicativos ou locais do computador ou da rede Por padrão os seguintes atalhos vêm criados Computador Pasta pessoal e Lixeira 1 Desktop é a área de trabalho onde são exibidas as janelas das aplicações que estão em uso 1 Áreas de trabalho possibilita a utilização de mais de um desktop na mesma sessão de trabalho É possível alternar entre os dois desktops disponíveis clicando sobre os eles 1 Lixeira acesso à lista de arquivos que foram excluídos pelo usuário por intermédio de programas gráficos de gerenciamento de arquivos Menu Aplicativos Permite o acesso a diversos programas de forma rápida Esse menu contém diversas categorias 1 Acessórios aplicações como calculadora captura de tela dicionário entre outras 1 Desenvolvimento aplicações para desenvolvimento de software 1 Escritório aplicações para o escritório como processador de texto planilha eletrônica apresentação de slides etc 1 Gráficos programas editores e visualizadores de imagens 1 Internet navegadores clientes de email programas de batepapo entre outros 1 Jogos jogos dos mais variados estilos 1 Multimídia programas reprodutores de arquivos de áudio e vídeo 1 Sistema utilitários para análise de discos verificação de atualizações emulador de terminal monitor de recursos etc Figura 22 Janela principal do gerenciador GNOME 28 Introdução ao Linux Menu Locais Permite o acesso a locais prédefinidos e a alguns outros recursos do sistema 1 Pasta pessoal mostra os arquivos e pastas do diretório home do usuário usando o gerenciador de arquivos Nautilus 1 Mostrar área de trabalho exibe o conteúdo da área de trabalho através do Nautilus 1 Documentos mostra a pasta documentos localizada no diretório home do usuário 1 Música exibe a pasta música localizada no diretório home do usuário 1 Imagens mostra a pasta imagens localizada no diretório home do usuário 1 Vídeos exibe a pasta vídeos localizada no diretório home do usuário 1 Downloads mostra a pasta downloads localizada no diretório home do usuário 1 Computador exibe os dispositivos de armazenamento do computador 1 Rede mostra os servidores disponíveis na rede 1 Conectar ao servidor conecta a um servidor remoto utilizando protocolos como FTP SSH HTTP entre outros 1 Pesquisar por arquivos procura por pastas e arquivos no computador 1 Documentos recentes exibe uma lista com os documentos abertos recentemente Menu Sistema Permite o acesso a ferramentas para administração e configuração do sistema e do ambiente computacional 1 Preferências acesso a diversos itens de configuração como vídeo teclado gerencia mento de energia entre outros 1 Administração acesso a diversas ferramentas de administração do sistema como configu ração de regras de firewall atualização de software gerenciamento de serviços entre outros 1 Ajuda abre o aplicativo de ajuda do GNOME 1 Sobre este computador acesso a diversas informações sobre o computador como pro cessos em execução monitoramento de recursos de hardware entre outros 1 Bloquear tela bloqueia a sessão de trabalho atual Para desbloqueála o usuário deve informar sua senha 1 Encerrar sessão finaliza a sessão de trabalho atual 1 Desligar desligar ou reiniciar o computador ou ainda entrar no modo de hibernação Aplicações Emulador de Terminal xterm O xterm é um emulador de terminal de linha de comando Ele executa funções do sistema utilizando comandos sem sair do ambiente gráfico A Figura 24 mostra a tela do terminal do xterm que é o emulador de terminal padrão do GNOME 29 Capítulo 2 Utilização do sistema Navegador de arquivos O navegador de arquivos possui um painel lateral e barras de ferramentas localização e status que podem ser habilitados ou desabilitados através do menu Ver Possui também três modos de exibição ícones lista e compacta Com o navegador de arquivos é possível apagar mover copiar ou renomear arquivos selecionados clicando e arrastando ou esco lhendo uma opção no menu A Figura 24 mostra a tela do navegador de arquivos do GNOME Configurando o GNOME Para adicionar um ícone no painel do GNOME basta clicar com o botão direito do mouse sobre o painel e selecionar a opção Adicionar ao painel A janela da Figura 25 apresenta os itens que podem ser adicionados ao painel Figura 23 Terminal do sistema GNOME Figura 24 Navegador de arquivos do GNOME Figura 25 Adicionando um ícone ao painel 30 Introdução ao Linux Para configurar a aparência do desktop e das aplicações basta clicar com o botão direito do mouse sobre o desktop e selecionar a opção Alterar plano de fundo A janela da Figura 26 é então exibida possibilitando a alteração do tema atual do plano de fundo e das fontes utilizadas no desktop e nas aplicações KDE desktop Como vimos anteriormente antes de fazer o login podemos escolher o gerenciador de desktop que vamos utilizar Os gerenciadores GNOME e KDE são bastante semelhantes tendo em vista que ambos se propõem a realizar as mesmas funções e são manipulados de forma bastante semelhante Para utilizar o KDE o usuário deve selecionálo na tela de login O KDE desktop é a tela inteira incluindo os ícones e painéis O espaço na tela onde não há ícones ou painéis é chamado de desktop ou área de trabalho O KDE possui facilidades de configuração semelhantes ao GNOME podemos adicionar e remover ícones do painel do KDE da mesma forma novos painéis podem ser criados e arras novos painéis podem ser criados e arras tados para qualquer canto da tela e novos ícones podem ser adicionados da mesma forma como no painel principal Também é possível configurar a aparência do desktop e das aplicações utilizando a opção Desktop Settings A Figura 27 mostra a tela inicial do KDE desktop e seus elementos que serão descritos a seguir bem como suas principais funcionalidades Figura 26 Preferências de aparência 31 Capítulo 2 Utilização do sistema 1 Notificador de dispositivos gerencia dispositivos removíveis como pendrives HDs externos entre outros 1 Lista de janelas exibe as aplicações que estão sendo executadas 1 Desktop é a área de trabalho onde são exibidas as janelas das aplicações que estão em uso 1 Gerenciador de widgets adiciona à área de trabalho pequenos aplicativos conhecidos como widgets Também possibilita a configuração de elementos do desktop 1 Lançador de aplicações acesso às aplicações instaladas arquivos do usuário e favoritos 1 Áreas de trabalho possibilita a utilização de vários desktops na mesma sessão de tra balho É possível alternar entre os quatro desktops disponíveis clicando em seus ícones 1 Barra de status exibe o status das conexões de rede o nível de volume do autofalante entre outros 1 Calendário exibe o calendário e a hora do sistema Clicando sobre ele podese ajustar a data e a hora do sistema Lançador de aplicações O lançador de aplicações facilita o acesso às aplicações instaladas arquivos do usuário e favo ritos A Figura 28 mostra o lançador de aplicações e suas abas que serão descritas a seguir Figura 27 KDE Desktop e suas principais informações Figura 28 Lançador de aplicações 32 Introdução ao Linux Favoritos A aba Favoritos contém as aplicações e locais os favoritos do usuário As aplicações mais utilizadas e os locais mais acessados passam a fazer parte automaticamente dos favoritos Para incluir uma aplicação aos favoritos basta clicar sobre seu ícone com o botão direito do mouse e clicar na opção Adicionar aos favoritos Por padrão a lista de favoritos contém o navegador Konqueror um atalho para as ferramentas de confi guração do sistema e o geren Konqueror um atalho para as ferramentas de confi guração do sistema e o geren um atalho para as ferramentas de configuração do sistema e o geren ciador de arquivos dolphin Aplicativos A aba Aplicativos possui diversas categorias de aplicações que serão descritas a seguir 1 Administração ferramentas de administração do Sistema Operacional Entre essas ferramentas podemos destacar configuração do firewall gerenciamento de serviços gerenciamento de contas de usuários entre outras 1 Configurações diversos utilitários de configuração como configuração de impressora teclado mouse rede entre outros 1 Desenvolvimento aplicações para desenvolvimento de software 1 Escritório um conjunto de aplicações para o escritório como processador de texto planilha eletrônica apresentações de slides entre outras 1 Gráficos contêm editores e visualizadores de imagens 1 Internet contém navegadores clientes de email programas de batepapo entre outros 1 Jogos contém possui jogos diversos 1 Multimídia possui reprodutores de arquivos de áudio e vídeo 1 Sistema contém diversos utilitários de configuração como ferramentas de configuração de disco gerenciador de arquivos visualizadores de arquivos de log emuladores de terminal entre outros 1 Utilitários contém utilitários como alarmes calculadora editores de texto entre outros 1 Ajuda exibe o aplicativo de ajuda do KDE 1 Arquivos pessoais abre o diretório home do usuário no gerenciador de arquivos dolphin 1 Procurar arquivospastas buscas por arquivos e diretórios do sistema Computador A aba Computador possibilita ao acesso às mídias de armazenamento instaladas no com putador locais e configurações do sistema A seguir são descritas as opções presentes na aba Computador 1 Configurações do sistema ferramentas de configuração do sistema divididas em cate gorias como rede e conectividade administração do computador entre outras 1 Informações do sistema informações sobre o sistema como taxa de utilização de disco e memória status das conexões de rede modelo e velocidade da CPU entre outras 1 Executar comando execução de comandos 1 Pasta do usuário exibe o conteúdo do diretório home do usuário que está logado no sistema 1 Rede exibe conexões de rede diretórios remotos etc 1 Raiz exibe o conteúdo do diretório raiz 1 Lixo exibe o conteúdo da lixeira 33 Capítulo 2 Utilização do sistema Usados recentemente A aba Usados recentemente exibe as aplicações e os documentos que foram abertos recentemente pelo usuário Sair A aba Sair possui opções para finalização da sessão de trabalho e do computador 1 Sair finaliza a sessão de trabalho atual 1 Bloquear bloqueia a sessão Para desbloqueála o usuário deve informar sua senha 1 Trocar usuário mantém a sessão de trabalho aberta mas permite que outro usuário faça login no sistema 1 Suspender para o disco pausa o computador sem encerrar a sessão de trabalho atual 1 Reiniciar reinicia o computador 1 Desligar desliga o computador Aplicações do KDE Konqueror O Konqueror possui funcionalidades de navegador web e gerenciador de arquivos A Figura 29 mostra a funcionalidade de gerenciador de arquivos Podese escolher entre várias formas de exibição de acordo com a preferência do usuário Os modos de exibição disponíveis são ícones detalhes colunas emulador de terminal e visualizar o tamanho do arquivo Podese apagar mover copiar ou renomear arquivos e diretórios selecionandoos clicando e arras tando ou escolhendo uma opção no menu Figura 29 Konqueror nave gador web e geren ciador de arquivos 34 Introdução ao Linux Konsole Assim como o GNOME o KDE também possui um simulador de terminal de linha de comando que é o Konsole Ele executa funções do sistema utilizando comandos sem sair do ambiente gráfico A Figura 210 mostra a tela do Konsole Configurando o KDE Para configurar a aparência do desktop basta clicar com o botão direito do mouse sobre o desktop e selecionar a opção Configurações da área de trabalho A janela da Figura 211 é então exibida possibilitando a alteração do tema atual e do papel de parede O aplicativo Configurações do sistema exibido na Figura 212 possui diversas ferramentas que podem ser utilizadas para configurar o sistema Essas ferramentas são divididas em categorias e podem configurar desde conexões de rede a aplicações de acessibilidade Figura 210 Konsole simulador de terminal de linha de comando Figura 211 Configurando a apa rência do desktop 35 Capítulo 2 Utilização do sistema Documentação A seguir são disponibilizadas referências sobre documentação do GNOME e do KDE Documentação online GNOME httplibrarygnomeorg KDE httpwwwkdeorgdocumentation Para documentação local utilize o comando através de um Xterm man nome do comando Figura 212 Alterando configu rações do sistema 37 Capítulo 2 Roteiro de Atividades Roteiro de Atividades 2 Atividade 21 Conhecendo o ambiente gráfico 1 Identifique o ambiente gráfico que está sendo utilizado 2 Altere o plano de fundo 3 Adicione um widget à área de trabalho 4 Altere o idioma 5 Adicione o xterm ao painel 6 Altere as configurações de gerenciamento de energia de modo que o computador hiberne após 2 horas sem uso 7 Desabilite o serviço de firewall do computador 8 Ative o outro ambiente gráfico e execute os passos 2 ao 7 observe a diferença Qual interface gráfica você achou mais amigável Atividade 22 Conhecendo os gerenciadores de arquivos Utilizando o navegador de arquivos do GNOME ou o Konqueror crie alguns arquivos utili zando a parte gráfica navegue pelos diretórios e tente excluir arquivos que você criou para simular uma situação de erro de operação Antes disso não se esqueça de anotar os diretó rios em que estes arquivos se encontram e os nomes dos arquivos Se não obtiver sucesso na remoção de algum arquivo tente explicar a razão Após finalizar a atividade recupere os arquivos excluídos Atividade 23 Trabalhando com arquivos e diretórios Exercitar algumas ações possíveis com os gerenciadores de arquivos Nautilus e Konqueror com um conjunto de arquivos existentes lembrando de retornar à situação anterior 1 Mova um arquivo para outro diretório 2 Copie um arquivo para outro diretório 3 Renomeie um arquivo 4 Apagar um arquivo 5 Recuperar o arquivo da pasta Trash 39 Capítulo 3 Organização do Linux objetivos conceitos 3 Organização do Linux Entender os conceitos de sistemas de arquivos hierárquicos e as características do sistema de arquivos do Linux conhecer os tipos de arquivos suas similaridades diferenças atributos e facilidades de segurança Sistema de arquivos do Linux tipos e atributos dos arquivos operações com arquivos e diretórios Sistema de arquivos do Linux q 1 Estrutura hierárquica 1 Arquivos sem estrutura 1 Segurança 1 Independência de dispositivo O sistema de arquivos do Linux possui diversas características que o tornam seguro e eficients 1 Estrutura hierárquica o sistema de arquivos do Linux possui estrutura hierárquica de diretórios em formato de árvore invertida Os usuários podem armazenar seus dados sem se preocupar comosestão dispostos fisicamente O sistema pode ter diversos discos todos agrupados na mesma árvore de diretórios 1 Arquivos sem estrutura não há estrutura interna ou seja não há campos registros delimitadores espaços cabeçalhos número de colunas e linha ou qualquer formato prédefinido a ser seguido pelo usuário ao inserir ou criar o conteúdo do arquivo O usuário é livre para estruturar e interpretar o conteúdo 1 Segurança os arquivos podem ser protegidos contra o uso não autorizado de diferentes usuários que compartilham o Sistema Operacional 1 Independência de dispositivo o Linux dá tratamento idêntico para arquivos e para dispositivos de entrada e saída Os mesmos procedimentos e programas utilizados para processar informações armazenadas em arquivos podem ser utilizados para leitura de dados de um terminal impressão e envio para a entrada de outro programa Principais diretórios do Linux e suas funções 1 diretórioraiz e origem da árvore hierárquica de diretórios 1 bin binários do sistema utilizado pelos usuários 40 Introdução ao Linux 1 boot arquivos especiais de inicialização do sistema 1 dev arquivos especiais de dispositivos de entrada e saída 1 etc arquivos de configuração scripts de inicialização de serviços entre outros 1 home diretórios pessoais dos usuários do sistema 1 lib bibliotecas compartilhadas pelos programas e pelo sistema 1 mnt diretório utilizado como ponto de montagens para dispositivos removíveis como pendrives CDs DVD etc 1 opt diretório utilizado para instalar pacotes opcionais que não fazem parte da distribuição 1 proc diretório virtual que contém o sistema de arquivos do kernel 1 root diretório pessoal do usuário root 1 sbin comandos de administração do sistema utilizados pelo usuário root 1 tmp arquivos temporários do sistema e de programas 1 usr programas de uso geral do sistema 1 var arquivos de tamanho variável como caixas postais de email cache lo etc A fi gura 31 representa a estrutura hierárquica de arquivos e diretórios do Linux boot dev etc home lib mnt opt proc root sbin tmp usr var bin Exercício de fixação 1 e Conhecendo o sistema de arquivos Desenhe a árvore do sistema de arquivos até o terceiro nível hierárquico No terceiro nível basta listar no máximo três diretórios se houver Considerar o ponto de partida o diretório raiz como o primeiro nível hierárquico Exercício de fixação 2 e Estrutura de diretórios O objetivo deste exercício é propor um melhor entendimento da estrutura básica de diretó rios do Linux Relacione os diretórios com seus respectivos conteúdos 1 Arquivos de configurações locais da máquina 2 bin Contém diretórios pessoais dos usuários 3 boot Hierarquia secundária de diretórios 4 dev Diretório de arquivos temporários 5 etc Bibliotecas dinâmicas 6 home Kernel do Linux mais arquivos estáticos do carregador de boot 7 lib Ponto de montagem para sistemas de arquivos temporários 8 mnt Comandos executáveis necessários para completar o boot Figura 31 Estrutura hierár quica de diretórios do Linux 41 Capítulo 3 Organização do Linux 9 sbin Diretório de documentação de softwares instalados 10 tmp Arquivos necessários ao boot geralmente usados pelo root 11 usr Arquivos de acesso comum 12 usrBin Arquivos de tamanho variável como spool e log 13 usrsharedoc Diretório raiz onde começa a estrutura de arquivos inteira 14 var Arquivos de acesso a dispositivos do sistema Montando e desmontando um dispositivo Para acessar um sistema de arquivos contido em um CD DVD ou pen drive é preciso que esses dispositivos estejam montados em alguma partição do disco rígido Quando o disposi tivo é montado seu estado é informado ao Sistema Operacional Os ambientes de desktop do GNOME e do KDE montam automaticamente esses dispositivos quando são inseridos Antes de remover CDs e DVDs que têm mídias removíveis devemos desmontálos para que a gaveta da unidade possa ser aberta O sistema não permitirá que um dispositivo seja desmontado caso esteja sendo acessado de alguma forma As mídias removíveis podem ser desmontadas através da linha de comandos ou da interface gráfica Quando o sistema é reiniciado através do comando shutdown os dispositivos são automaticamente desmontados Inode O inode é identificado por um número único que é atribuído a cada arquivo do sistema Assim o arquivo de usuários e senhas do sistema pode ser identificado por exemplo pelo número 2217 enquanto um arquivotexto de um usuário pode ser identificado pelo número 456 O Linux organiza os discos rígidos em sequência de blocos O conteúdo de um arquivo pode ser armazenado em um ou mais blocos que podem estar espalhados pelo disco e não estarem dispostos de forma sequencial O inode é uma estrutura de dados com informações que permitem encontrar os dez primeiros blocos desse arquivo Além da lista de locais dos dez primeiros blocos o inode guarda outras informações importantes a respeito de um arquivo como tipo permissões associadas proprietário grupo tamanho última vez em que foi modificado etc Quando o arquivo é aberto o inode fica disponível na memória principal permitindo com isso que os primeiros dez blocos de um arquivo possam ser encontrados rapidamente pois o acesso à memória é bem mais rápido que ao disco Assim o inode serve também para aumentar a eficiência de acesso ao conteúdo de arquivos pequenos no Linux Quando um arquivo é maior do que dez blocos o Linux passa a utilizar técnicas de acesso indireto onde as posições do décimoprimeiro bloco em diante são armazenadas não mais no inode mas em outro bloco no disco chamado de bloco indireto As posições dos blocos indiretos ficam armazenadas no inode e para acessar um bloco indiretamente passa a ser necessário tanto um acesso ao inode quanto um acesso ao bloco indireto no disco o que obviamente aumenta o tempo de acesso ao conteúdo e reduz a eficiência de acesso a arquivos grandes maiores que 10 blocos Mesmo o acesso indireto é limitado para arquivos muito extensos Assim pode ser utilizado o método indireto duplo onde um bloco chamado de bloco indireto duplo contém as posições de outros blocos indi retos e estes por sua vez contêm as localizações dos blocos do arquivo Os blocos indiretos duplos também são armazenados no disco e têm suas posições guardadas no inode GNOME GNU Network Object Model Environment é um projeto de software livre abrangendo o ambiente de trabalho GNOME para os usu ários e a plataforma de desenvolvimento GNOME para os desen volvedores O projeto dá ênfase à usabilidade acessibilidade e interna cionalização 42 Introdução ao Linux Para permitir tamanhos ilimitados de arquivos esse processo pode ser expandido através de uma hierarquia de blocos indiretos com blocos indiretos únicos duplos triplos e dessa forma aumentar sem limitações o conteúdo dos arquivos Tipos de arquivos No Linux todo objeto que é manipulado pelo Sistema Operacional é representado por um arquivo incluindo diretórios dispositivos de hardware e conexões de rede Para identificar o tipo do arquivo o Sistema Operacional consulta as informações contidas em seu inode A seguir são apresentados os tipos de arquivos existentes no Linux Arquivo regular A estrutura básica que o Linux utiliza para armazenar informações é o arquivo Nos arquivos são armazenados todos os tipos de dados desde textos até instruções em código de máquina Essa é a estrutura utilizada para armazenar todos os tipos de informações neces sa é a estrutura utilizada para armazenar todos os tipos de informações neces a é a estrutura utilizada para armazenar todos os tipos de informações neces sárias para a operação do sistema A identificação dos arquivos por números é utilizada apenas internamente pelo sistema já que na prática além de tediosa a identifi cação numé já que na prática além de tediosa a identifi cação numé já que na prática além de tediosa a identificação numé rica perde o sentido Dessa forma o sistema permite a identificação dos arquivos através de nomes O nome do arquivo pode ter qualquer sequência de até 256 caracteres mais do que suficiente para descrever o conteúdo do arquivo dando um sentido à identificação Para um sistema com milhares de arquivos é pouco provável que não sejam escolhidos nomes que já estejam sendo utilizados por outros arquivos Caracteres curinga Têm a função de substituir outros caracteres pois ao aparecerem numa determinada posição indicam que os nomes de arquivos que atendem à condição solicitada podem ter quaisquer caracteres naquela posição O caractere curinga sem aspas pode substi tuir um nome ou um conjunto de caracteres numa determinada posição de um nome de arquivo Por exemplo P significa que todos os nomes de arquivos que começam com P seguidos de quaisquer conjuntos de caracteres até o tamanho máximo de 256 carac teres atendem à condição solicitada O caractere curinga sem aspas pode substituir uma letra em determinada posição do nome por qualquer caractere Por exemplo PA significa que todos os nomes de arquivos com quatro caracteres que começam por P e terminam com A atendem à condição solicitada Diretório q 1 Conjunto de arquivos 1 Listagem de arquivos com seus inodes correspondentes Para o Sistema Operacional um diretório é apenas um arquivo especial que contém uma listagem de nomes de arquivos e seus inodes correspondentes O diretório desempenha exatamente a mesma função de um catálogo de telefones dado o nome de um arquivo o Sistema Operacional consulta seu diretório e obtém o número do inode correspondente ao arquivo Com esse número o sistema de arquivos pode examinar outras tabelas internas para determinar onde está armazenado o arquivo e tornálo acessível ao usuário A locali zação de arquivos é mostrada na Figura 32 Saiba mais Podese utilizar uma extensão para o nome do arquivo colocando um segundo nível de nome separado por ponto Essa medida faci lita ao usuário encon trar arquivos utilizando as extensões dos nomes juntamente com referências ambíguas ou caracteres curinga l 43 Capítulo 3 Organização do Linux Disco rígido Arquivo 0412 Arquivo 8014 Arquivo 5467 Arquivo 8015 Vendas 8014 Compras 0412 Salários 5467 Relatórios 8015 Diretório O Linux permite organizar arquivos agrupandoos em diretórios Um diretório desem Linux permite organizar arquivos agrupandoos em diretórios Um diretório desem permite organizar arquivos agrupandoos em diretórios Um diretório desem penha a mesma função de uma gaveta de armário para arquivamento agrupando todos os arquivos num lugar comum onde possam ser facilmente encontrados Assim o usuário ganha flexibilidade para agrupar arquivos de forma lógica Por exemplo ao criar arquivos com os resultados das vendas das filiais de uma empresa ele pode agrupar esses arquivos em diretórios com o mesmo nome do local da filial Os diretórios também podem ter nomes compostos por até 256 caracteres É recomendado também que o nome do diretório faça referência ao seu conteúdo Cada usuário do sistema tem seu diretório pessoal que geral mente possui o mesmo nome do usuário Arquivos de dispositivos q 1 Os dispositivos no Linux são referenciados por arquivos 1 Dispositivos orientados a caractere e a bloco de caracteres 1 Os arquivos de dispositivos ficam agrupados no diretório dev O sistema de arquivos estende o conceito de arquivo para tratar os dispositivos de entrada e saída como impressoras unidades de fitas e ainda outros tipos que podem ser instalados em um Sistema Operacional Linux Os dispositivos são tratados como arquivos especiais e manipu Sistema Operacional Linux Os dispositivos são tratados como arquivos especiais e manipu istema Operacional Linux Os dispositivos são tratados como arquivos especiais e manipu Operacional Linux Os dispositivos são tratados como arquivos especiais e manipu peracional Linux Os dispositivos são tratados como arquivos especiais e manipu Linux Os dispositivos são tratados como arquivos especiais e manipu Os dispositivos são tratados como arquivos especiais e manipu lados como arquivos comuns do sistema Os arquivos de dispositivos podem ser de dois tipos 1 Arquivos de dispositivos orientados a caractere realizam suas transferências de dados byte a byte e de modo sequencial As portas seriais são exemplos de dispositivos orientados a caractere Esse tipo de arquivo é representado pela letra c 1 Arquivos de dispositivos orientados a blocos de caracteres realizam suas transferên cias de dados em blocos de tamanho que pode variar entre 512 bytes e 32 Kbytes sendo o acesso feito de modo aleatório Os discos rígidos e as unidades de fita são exemplos de dispositivos orientados a bloco Esse tipo de arquivo é representado pela letra b Alguns dispositivos só podem ser acessados no modo caractere como terminais e impres soras pois não têm recursos para o acesso bloco a bloco Outros dispositivos permitem o acesso bloco a bloco como discos e fitas mas podem também ser acessados caractere a caractere dependendo da operação efetuada Por exemplo na formatação de um disco os blocos ainda não existem logo o acesso inicial a esse dispositivo deve ser orientado a caractere Existem outras situações em que os dispositivos orientados a blocos podem ser acessados caractere a caractere como por exemplo para a execução de cópias de segu rança entretanto o contrário não ocorre ou seja os dispositivos orientados a caractere não podem ser acessados pelo modo bloco a bloco Por convenção todos os dispositivos de ES no Linux recebem nomes individuais de arquivo e são agrupados no diretório dev que é a abreviatura de devices Os dispositivos mais comuns são designados de forma padronizada Figura 32 Localização de arquivos no disco rígido 44 Introdução ao Linux 1 devlp impressora do sistema 1 devtty terminais ou linhas de comunicação Disco Impressoras Fitas Terminais Linhas de comunicação Sistema de arquivos Unix Utilitários Unix Programas do usuário As operações de entrada e saída nesses dispositivos funcionam exatamente da mesma forma que nos outros tipos de arquivos Os programas de aplicação projetados para fun cionar com arquivos podem assim funcionar com todos os tipos de dispositivos de entra e saída ES sem a necessidade de modificações característica conhecida como indepen dência de arquivos dispositivos device files A independência de dispositivos permite que os mesmos comandos utilizados para manipular arquivos normais possam ser utilizados para executar funções semelhantes com arquivos de dispositivos conforme o exemplo Cópia de um arquivo para outro cp vendas relatórios O mesmo comando pode ser utilizado para copiar o arquivo para a impressora cp vendas devlp q Os dispositivos de entrada e saída ES são tratados como arquivos especiais e manipu lados como arquivos comuns do sistema Podem ser de dois tipos 1 Dispositivos orientados a caracteres tipo de arquivo representado pela letra c 1 Dispositivos orientados a blocos de caracteres tipo de arquivo representado pela letra b Named pipes q Permitem que dois processos possam trocar informações por intermédio de um canal bidirecional Pipes convencionais são os dados que entram em um extremo do canal saem no outro extremo definindo um sentido de comunicação Figura 33 Arquivos de dispositivos 45 Capítulo 3 Organização do Linux O Linux provê uma funcionalidade de comunicação entre processos denominada named pipe O named pipe permite a comunicação bidirecional entre dois processos executados no mesmo Sistema Operacional Um named pipe é referenciado pelos processos que conecta através de seu nome e faz parte do sistema de arquivos Quando criamos os named pipes eles são asso named pipes eles são asso eles são asso ciados a diretórios e a permissionamentos de acesso assim como os arquivos regulares Os named pipes podem ser criados através dos comandos mkfifo ou mknod e remo vidos com o comando rm ou por meio da chamada de sistema unlink Além do named pipe existe também o pipe convencional representado pelo caractere que é utilizado em comunicações unidirecionais conectando a saída de um processo à entrada de outro Os pipes funcionam da mesma forma que os descritores de arquivos padrão apenas lendo a informação de entrada e escrevendoa na saída sem a preocupação com o modo como ela será tratada pelos processos envolvidos na comunicação A diferença entre o named pipe e o pipe convencional é que nesse último os processos conectados devem possuir uma relação de pai para filho ou serem irmãos Além disso o named pipe precisa ser explicitamente encerrado após seu uso ao contrário do pipe convencional que é encerrado automaticamente após a execução dos processos que ele conecta Processo envia dados Processo recebe dados Entrada Saída Canalização Para que servem os links q São ponteiros para outros arquivos links simbólicos ou soft links que funcionam como ponteiros para determinados arquivo e têm as características de um arquivo Vamos supor que o arquivo usrlocaladminvendasscontenha informações de vendas de uma empresa e toda a equipe de vendedores precise acessar este arquivo Imagine o trabalho que daria copiar este arquivo para o diretório home de cada funcionário e mantêlos atualizados Com os links simbólicos criamos um link em cada diretório home que aponta para o arquivo original localizado no diretóriosusrlocaladminvendas reduzindo o trabalho e mantendo o acesso às informações sempre atualizadas Cada usuário pode criar seus links com nomes diferentes em seu diretório home apontando para o mesmo arquivo original Outra vantagem é simplificar o acesso a arquivos que tenham um caminho path extenso com vários subdire path extenso com vários subdire extenso com vários subdire tórios Ao criar um arquivo do tipo link em seu diretório home o usuário evita a digitação de todo o caminho do arquivo vendas por exemplo manipulandoo diretamente através de seu diretório home O comando para a criação de um arquivo do tipo link possui a sintaxe ln opções origem destino Onde origem ou destino podem ter um nome de arquivo ou o caminho completo do arquivo na estrutura hierárquica Exercício de fixação 3 e Links Pesquise a diferença entre HardLink e SoftLink Figura 34 Comunicação entre processos utili zando pipes 46 Introdução ao Linux Sockets q Mecanismos para troca de dados entre processos Os processos podem estar sendo executados no mesmo computador ou em computa dores diferentes conectados através da rede Uma vez estabelecida a conexão os dados podem trafegar nos dois sentidos até uma das pontas encerrar a conexão Os sockets são utilizados para a comunicação bidirecional entre dois processos que podem ser executados no mesmo computador ou em computadores diferentes Os principais tipos de sockets utilizados no Linux são Unix domain socket ou Inter Process Communication socket IPC socket que é utilizado para a comunicação entre processos executados em um mesmo sistema operacional e o socket de rede que é utilizado para a comunicação entre processos executados em computadores diferentes interligados por uma rede Existem casos em que os sockets de rede são criados para comunicação entre processos que são executados no mesmo computador Entre os sockets de rede podemos destacar o stream socket e o datagram socket Apesar de os arquivos sockets terem diversas funções específicas são muito similares aos arquivos comuns sendo tratados da mesma forma pelo sistema de arquivos do Linux Um socket de rede tem um funcionamento parecido com o telefone isto é cada arquivo socket representa um ponto de conexão de uma linha de comunicação sendo que entre esses pontos existe a rede de comunicação de dados Além disso também têm seu próprio número de identificação na rede assim como o telefone na rede telefônica Para permitir que se estabeleça o contato entre dois sockets o socket local e o remoto são identificados por um par endereço IP e porta Um socket pode ser criado através da chamada de sistema socket e removido através do comando rm ou da chamada de sistema close quando ele não estiver mais sendo utilizado A maioria das aplicações no Linux usa sockets Atributos dos arquivos q 1 Nome nome do arquivo 1 Localização local de armazenamento do arquivo no disco 1 Tamanho tamanho do arquivo em bytes 1 Ligações nomes pelos quais o arquivo é conhecido 1 Propriedade usuário que é o dono owner do arquivo 1 Grupo grupo de usuários que acessa ao arquivo 1 Tipo tipo do arquivo 1 Criação data e hora de criação do arquivo 1 Modificação data e hora da última modificação do arquivo 1 Acesso data e hora do último acesso ao arquivo 1 Permissões permissões de acesso ao arquivo 47 Capítulo 3 Organização do Linux Os arquivos possuem diversos atributos que são armazenados em seus inodes correspon inodes correspon correspon dentes Entre esses atributos podemos destacar 1 Nome nome do arquivo 1 Localização local onde o arquivo está armazenado no disco 1 Tamanho tamanho do arquivo em bytes 1 Ligações nomes pelos quais o arquivo é conhecido 1 Propriedade usuário dono owner do arquivo 1 Grupo grupo de usuários que pode ter acesso ao arquivo 1 Tipo tipo do arquivo 1 Criação data de criação do arquivo 1 Modificação data de modificação do arquivo 1 Acesso data do último acesso ao arquivo 1 Permissão permissões de acesso ao arquivo Todas essas informações são automaticamente mantidas pelo sistema na medida em que os arquivos são criados e utilizados Os diversos utilitários usam essas informações para processar arquivos seletivamente Os utilitários de backup do Linux por exemplo podem preservar cópias apenas daqueles arquivos que foram modificados após alguma data específica A data da última modificação é utilizada para selecionar os arquivos apropriados Ao listarmos arquivos e diretórios utilizando o comando ls com a opção l visualizamos as informações mostradas na Figura 35 Tipo do arquivo drwxrxrx rwrr Permissões de acesso access modes Número de links do arquivo Dono do arquivo owner 5 root 1 root Grupo de usuários group root root Tamanho em bytes 1024 dec 23 1348 GNUstep 331 feb 11 1019 Xrootenv0 Data da última modificação Nome do arquivo Permissões de arquivos O Linux é um sistema projetado para ser multiusuário Para suportar operações em ambientes com múltiplos usuários o Linux dispõe de mecanismos que restringem o acesso a arquivos e diretórios baseados na identificação do usuário que solicita o acesso e ao modo de acesso atribuído a cada arquivo e diretório Todo arquivo e diretório é associado a um usuário que é chamado de dono owner O usuário que inicialmente cria o arquivo é o dono do arquivo Cada usuário pode per tencer a um ou mais conjuntos de usuários que são chamados de grupo Cada arquivo ou diretório é associado a um grupo que é atribuído ao arquivo quando este é criado Da mesma forma o usuário que inicialmente cria o arquivo ou diretório determina o grupo que pode acessálo Esse grupo associado ao novo arquivo ou diretório é o grupo primário do usuário que os criou Tanto o dono como o grupo de um arquivo podem ser alterados As permissões de acesso conhecidas como modos de acesso determinam as operações que um usuário pode realizar em um arquivo A seguir estão os três tipos básicos de permissão que podem ser aplicadas a um arquivo ou diretório Figura 35 Saída do comando ls com a opção l 48 Introdução ao Linux 1 r read permite acesso apenas para leitura 1 w write permite acesso para leitura e gravação 1 x execute permite executar o arquivo Note que as permissões habilitam a execução de ações diferentes em arquivos e diretórios Arquivos ou diretórios podem ter uma ou mais permissões um arquivo que tenha as permis sões rw pode ter seu conteúdo lido e alterado por um usuário com acesso a ele mas não pode ser executado por esse usuário pois o arquivo não tem a permissão de execução x Os modos de acesso a um arquivo ou diretório consistem em três conjuntos de permissões com três caracteres cada um O primeiro conjunto de permissões se refere ao usuário que é o dono do arquivo ou diretório O segundo conjunto se refere ao grupo de usuários que podem ter acesso ao arquivo O terceiro conjunto de permissões restringe o acesso a outros usuários others exceto o dono ou o grupo associado ao arquivo Para alterar o dono ou o grupo do arquivo são utilizados os comandos chown change owner e chgrp change group respectivamente chown novodono arquivo chgrp novogrupo arquivo O comando chown também permite alterar dono e grupo de uma só vez chown novodononovogrupo arquivo As permissões de um arquivo também podem ser alteradas através do comando chmod change mode Cada uma das nove permissões ler escrever e executar para o dono para o grupo e para os outros pode ser individualmente concedida ou negada com esse comando A seguir são apresentados alguns exemplos de uso do comando chmod chmod r arquivo concede acesso de leitura ao arquivo ao dono ao grupo e aos outros chmod gow arquivo nega acesso de escrita aos membros do grupo e aos outros É possível utilizar uma sintaxe alternativa para o comando chmod com uma codificação que utiliza três números na base octal de 0 a 7 Cada número octal corresponde a um conjunto rwx que de acordo com a sua posição pode representar as permissões do dono primeiro conjunto do grupo segundo conjunto e dos outros terceiro conjunto Cada um desses números octais corresponde a três bits sendo o primeiro deles associado à permissão de leitura o segundo à permissão de escrita e o terceiro à permissão de execução Se o bit tiver o valor 0 indica ausência de permissão e se tiver o valor 1 indica a presença da permissão A codificação completa na base octal tem os seguintes significados Modo octal Modo binário Tipo de permissão 0 000 Sem permissão 1 001 Permissão de execução 2 010 Permissão de escrita 3 011 Permissão de escrita e execução 4 100 Permissão de leitura 5 101 Permissão de leitura e execução Tabela 31 Sintaxes do comando chmod 49 Capítulo 3 Organização do Linux Modo octal Modo binário Tipo de permissão 6 110 Permissão de leitura e escrita 7 111 Permissão total leitura escrita e execução O exemplo a seguir mostra o comando chmod com a sintaxe que utiliza a base octal chmod 764 arquivo 7 permite acesso à leitura gravação e execução do arquivo pelo seu dono 6 permite acesso à leitura e gravação do arquivo pelo grupo 4 permite somente leitura para os outros usuários q Correspondentes binários 1 Cada dígito binário corresponde a uma letra r w e x 0 indica ausência da permissão 1 indica concessão da permissão 1 São três números octais correspondentes a três dígitos binários 0000 a 7111 Um número para o dono um para o grupo e um para outros Exemplo chmod 764 arquivo 2 Onde 7 permite leitura escrita e execução rwx para o dono u 6 permite leitura e escrita rw para o grupo g e 4 permite leitura r para os outros o A Figura 36 mostra as sintaxes padrão e octal com seus respectivos correspondentes binários 6 110 rw r 111 7 100 4 rwx Caso haja uma tentativa de um usuário acessar um arquivo para realizar determinada ação mesmo ele pertencendo ao grupo ou sendo dono do arquivo se ele não tiver permissão para realizar a ação pretendida receberá a mensagem access denied acesso negado A Tabela 32 mostra as permissões ou modos de acesso para arquivos e diretórios Modo Operação permitida em diretório Operação permitida em arquivo R Listar conteúdo do diretório Ler o conteúdo do arquivo W Criar ou remover diretórios e arquivos dentro do diretório Alterar o conteúdo do arquivo X Acessar arquivos e subdiretórios dentro do diretório Executar o arquivo q Permissões 1 Dono owner proprietário do arquivo 1 Grupo group grupo primário do dono do arquivo 1 Outros others outros usuários que não são donos e que não fazem parte do grupo Figura 36 Sintaxes do comando chmod Tabela 32 Permissões de acesso para arquivos e diretórios 50 Introdução ao Linux q Comandos para manusear permissões chown novodono arquivo muda o dono do arquivo chgrp novogrupo arquivo muda o grupo do arquivo chmod ugorwx arquivo muda as permissões do arquivo Exercício de fixação 4 e Atributos e permissões de arquivos Que permissão está sendo concedida ao dono usuário e grupo em relação aos arquivos abaixo 1 Chmod 750 atividade1 1 Chmod 000 atividade2 1 Chmod ugx atividade3 1 Chmod ox atividade4 1 Chmod 680 atividade5 Especifique os tipos de arquivos seguintes suas permissões e sintaxes no padrão octal 1 brwxrxwx root aluno arquivo1 1 crwx aluno aluno arquivo1 1 rwx root aluno arquivo1 1 lrwxrwxrwx root root arquivo1 1 drwrw root root arquivo1 1 c root root arquivo1 1 srwxwx root root arquivo1 1 prxrxrx root aluno arquivo1 Operações com arquivos e diretórios Existem diversos comandos que são utilizados para trabalhar com arquivos e diretórios Esses comandos realizam funções de cópia busca remoção entre outras A seguir serão apresentados os principais comandos de manipulação de arquivos e diretórios Para a criação de arquivos existem diversas formas de se criar um arquivo no Linux Veremos algumas dessas formas Redirecionamento de entrada e saída q O Linux possui um dispositivo padrão de entrada e outro de saída que são respectivamente o teclado e o monitor 1 Os sinais e redirecionam a entrada e a saída padrão para um novo arquivo 1 O comando ls pode ter sua listagem redirecionada da saída padrão o monitor para o novo arquivo listadearquivos criando o arquivo se ele não existir ls listadearquivos Toda vez que executamos um comando digitamos as opções e parâmetros por intermédio do teclado e então recebemos sua resposta no monitor O Linux possui um dispositivo padrão de entrada e outro de saída que são respectivamente o teclado e o monitor 51 Capítulo 3 Organização do Linux Podemos redirecionar ou seja alterar a entrada ou a saída padrão dos comandos utili zando os sinais e respectivamente Essa característica do Linux é conhecida como redirecionamento de entrada e saída Dessa forma os dados provenientes da entrada padrão o teclado podem ser direcionados para outro tipo de saída como um arquivo existente ou um novo arquivo que será criado Podemos por exemplo criar um arquivo que contenha a listagem de todos os arquivos do diretório home do usuário Para isso devemos executar o seguinte comando no diretório home desse usuário ls listadearquivos O comando ls lista todos os arquivos do diretório redirecionando essa listagem da saída padrão o monitor para o novo arquivo listadearquivos criando o arquivo no diretório home do usuário Na verdade podemos criar arquivos utilizando diversos comandos simplesmente redirecionando a saída padrão para um novo arquivo Podemos utilizar o comando cat para concatenar dois arquivos existentes e gerar um novo arquivo como no exemplo cat arquivo1 arquivo2 arquivonovo O comando criará o arquivo arquivonovo com o conteúdo do arquivo1 seguido do con arquivo arquivonovo com o conteúdo do arquivo1 seguido do con arquivonovo com o conteúdo do arquivo1 seguido do con arquivonovo com o conteúdo do arquivo1 seguido do con com o conteúdo do arquivo1 seguido do con arquivo1 seguido do con seguido do con teúdo do arquivo2 A maneira mais simples de criar um arquivo de texto é redirecionar a entrada do teclado para o arquivo através do comando cat cat arquivotxt Após o comando todo o texto digitado será armazenado no arquivo pois como a entrada não foi especificada esta continua sendo a padrão ou seja o teclado Para encerrar a exe cução do comando basta finalizar a digitação e teclar CtrlD duas vezes ou teclar Enter e CtrlD q Podemos utilizar o comando cat para a concatenação de arquivos existentes gerando um novo arquivo cat arquivo1 arquivo2 arquivonovo A maneira mais simples de criar um arquivo de texto é redirecionar a entrada do teclado para o arquivo por meio do comando cat cat arquivotxt Para terminar a execução do comando tecle CtrlD duas vezes ou Enter e CtrlD Utilizando o comando touch q O comando touch é utilizado para atualizar os horários de acesso e de modificação de um arquivo existente Caso esse arquivo não exista será criado na data e hora especifi cadas no comando cuja sintaxe é touch opções arquivo Se não forem especificadas a data e a hora o sistema utilizará a data e a hora atuais Também é possível criar arquivos vazios através do comando touch utilizado normalmente para atualizar os horários de acesso e de modificações de um arquivo existente Caso esse arquivo não exista será criado na data e hora especificadas pelo comando touch opções arquivo Se não forem especificadas a data e a hora o sistema utilizará a data e hora atuais 52 Introdução ao Linux Exercício de fixação 5 e Criando arquivos 1 Qual a diferença entre os sinais e utilizados no redirecionamento 2 Qual a diferença entre os sinais e 3 Qual a diferença entre os comandos touch e cat na criação de arquivos Utilizando editores de texto q Podemos criar arquivos ao editar um arquivo inexistente por intermédio de editores de texto do Linux como o vi e o Emacs Outra forma de criação de arquivos é por meio da utilização de editores de texto como o vi e o Emacs Dessa forma ao editar um arquivo inexistente estaremos criando esse arquivo e seu conteúdo utilizando facilidades de edição providas pelos editores Estudaremos deta de edição providas pelos editores Estudaremos deta edição providas pelos editores Estudaremos deta lhadamente esses editores de texto no Capítulo 5 Criando diretórios q 1 Quando o usuário faz login no sistema ele é automaticamente direcionado ao seu diretório home onde possui permissão para criar seus arquivos e diretórios 1 A separação dos arquivos em seus diretórios home facilita aos usuários encontrarem os seus arquivos e mantêlos protegidos de outros usuários Para a criação de diretórios é utilizado o comando mkdir Quando o usuário faz login em um sistema Linux ele é automaticamente direcionado para o seu diretório home onde tem permissão para criar arquivos e diretórios Essa separação dos arquivos de cada usuário em seus diretórios pessoais facilita o usuário a encontrar os seus arquivos e mantêlos reservados protegidos dos demais usuários e de outros grupos de usuários ao qual ele não pertence Para a criação de diretórios é utilizado o comando mkdir cuja sintaxe é mkdir opções nome ou caminho completo do diretório Para criarmos uma pequena árvore de diretórios como por exemplo os diretórios home alunodocumentos e homealunodocumentosplanilhas podemos trabalhar de duas formas A primeira é criando um a um os diretórios da hierarquia como mostra o exemplo mkdir documentos cd documentos direciona para o novo diretório criado mkdir planilhas A segunda forma é feita utilizando um único comando Para gerar a hierarquia dos diretórios e subdiretórios devemos digitar o nome do diretório incluindo os diretórios de hierarquia superior utilizando a opção p do comando mkdir que cria os diretórios recursivamente como no exemplo mkdir p documentosplanilhas 53 Capítulo 3 Organização do Linux q Para criar um caminho na árvore de diretórios podemos trabalhar de duas formas diferentes Criando um a um os diretórios como no exemplo mkdir documentos cd documentos direciona para o novo diretório criado mkdir planilhas Ou criando os diretórios recursivamente utilizando um único comando mkdir p documentosplanilhas Exercício de fixação 6 e Criando diretórios Qual a diferença entre os comandos mkdir e mkdir p Copiando arquivos e diretórios A cópia de arquivos pode ser necessária por diversos motivos como por exemplo para transportar uma cópia de um arquivo para outro computador utilizando um pen drive ou para fazer cópias de segurança dos arquivos de um diretório ação recomendável para a prevenção contra problemas que possam ocorrer no disco rígido A cópia de arquivos pode ser feita com o comando cp cuja sintaxe é cp opções origem destino A origem é o caminho completo ou relativo caso o arquivo esteja no diretório corrente do arquivo ou dos arquivos que serão copiados e o destino é o caminho completo ou rela ou dos arquivos que serão copiados e o destino é o caminho completo ou rela tivo do local para onde será gerada a cópia do arquivo e o nome que este terá no destino Podese omitir o nome se quisermos manter o mesmo nome da origem Para copiar dire tórios deve ser utilizada a opção r do comando cp que faz cópias recursivas A seguir são apresentados alguns exemplos de uso do comando cp cp homealunodocumentotxt tmp cp homealunodocumentotxt tmpdocumento2txt cp r homealuno tmp Se o diretório corrente for homealuno o caminho relativo pode ser utilizado cp documentotxt tmp Se ao contrário estivermos localizados no diretório de destino tmp o comando pode ser simplificado utilizando o caractere ponto que significa o diretório corrente cp homealunodocumentotxt O comando de cópia exige que sempre sejam definidas a origem e o destino mesmo de forma simplificada Caso contrário será exibida uma mensagem de erro Podese utilizar também os caracteres curinga e sem aspas Dessa forma todos os arquivos que atenderem à especificação múltipla serão copiados O comando do exemplo abaixo copia todos os arquivos que têm seus nomes começando pela palavra planilha do diretório homealuno para o diretório tmp cp homealunoplanilha tmp 54 Introdução ao Linux q A cópia de arquivos possui diversas utilidades como transportar arquivos entre compu tadores utilizando uma mídia removível gerar cópias de segurança entre outras Sintaxe do comando de cópia cp opções origem destino A origem e o destino devem ser obrigatoriamente informados Caso contrário será exibida mensagem de erro Exemplos de uso cp homealunodocumentotxt tmp cp homealunodocumentotxt tmpdocumento2txt cp r homealuno tmp cp homealunodocumentotxt cp homealunoplanilha tmp Removendo arquivos e diretórios q 1 O comando rm é utilizado para remover arquivos do sistema 1 O nome do arquivo pode conter todo o caminho na estrutura hierárquica ou só o nome do arquivo se este estiver no diretório corrente Podem também ser utilizados caracteres curinga 1 Nem sempre será solicitada pelo sistema a confirmação do usuário para a execução da remoção 1 Para a remoção de diretórios deve ser utilizada a opção r do comando rm ou o comando rmdir caso o diretório esteja sem nenhum conteúdo O comando utilizado para remover arquivos é o rm e as mesmas regras vistas para o comando cp se aplicam ao comando rm cuja sintaxe é rm opções arquivo Onde o nome do arquivo pode conter os diretórios do caminho na estrutura hierárquica até o local do arquivo seguido do nome do arquivo A remoção de arquivos deve ser feita com atenção pois nem sempre será solicitada pelo sistema a confirmação do usuário para a execução da remoção Da mesma forma que para a cópia a remoção de todos os arquivos inclusive os diretórios pode ser feita utilizando o comando rm com a opção r Diretórios sem conteúdo também podem ser removidos com o comando rmdir Exercício de fixação 7 e Removendo arquivos 1 O que faz o comando rm rif 1 Qual a diferença entre os comandos rmdir e rm rf Movendo arquivos e diretórios q O comando mv pode ser utilizado de duas formas para mover arquivos da origem para o destino ou para renomear arquivos trocando apenas seu nome mantendoo no diretório original Sintaxe do comando mv mv opções origem destino 55 Capítulo 3 Organização do Linux Exemplos de uso mv homealunodocumentotxt tmp mv homealunodocumentotxt homealunodocumento2txt O comando mv pode ser utilizado de duas formas para mover arquivos da origem para o destino ou para renomear arquivos trocando apenas seu nome mantendoo no dire tório original As mesmas regras vistas para os comandos cp e rm também se aplicam ao comando mv cuja sintaxe é mv opções origem destino Para mover o arquivo documentotxt do diretório homealuno para o diretório tmp devemos executar o comando mv homealunodocumentotxt tmp Para renomear o arquivo documentotxt para documento2txt devemos executar o comando mv homealunodocumentotxt homealunodocumento2txt Exercício de fixação 8 e Renomeando arquivos O comando mv também serve para renomear arquivos Listando arquivos e diretórios q O comando ls é utilizado para a visualização de arquivos As regras utilizadas nos comandos anteriores também podem ser aplicadas ao comando ls Sua sintaxe é 1 ls opções arquivo Uma das opções mais utilizadas pelo usuário é a opção l para listar arquivos e diretó rios no formato longo com os seguintes detalhes 1 Tipo do arquivo permissões número de links dono do arquivo grupo do arquivo tamanho em bytes data da última alteração e nome 2 Os comandos ll dir e vdir também podem ser utilizados com pequenas diferenças em relação ao comando ls O comando ls é utilizado para listar arquivos e diretórios Sua sintaxe é ls opções arquivo Uma das opções mais utilizadas do comando ls é a opção l que permite listar arquivos e diretórios no formato longo que exibe uma série de informações as respeito dos arquivos listados como permissões de acesso número de links dono do arquivo grupo do arquivo tamanho em bytes data da última alteração e nome do arquivo O comando ls também pode utilizar as mesmas regras aplicadas aos comandos anteriores Existem variações do comando ls que podem ser utilizadas com as mesmas funcionalidades Os comandos ll dir e vdir também podem ser utilizados para listar arquivos O comando ll possui a mesma função do comando ls com as opções la O comando dir possui a mesma função do comando ls utilizado sem opções Já o comando vdir possui a mesma função do comando ls utilizado com a opção l É importante ressaltar que as mesmas opções do comando ls podem ser utilizadas para os comandos ll dir ou vdir 56 Introdução ao Linux Exercício de fixação 9 e Listando arquivos O que significam as opções lat do comando ls Procurando arquivos e diretórios q O comando find procura os arquivos ou diretórios desejados no caminho fornecido como parâmetro Sua sintaxe é 1 find caminho expressão 1 O comando locate faz uma busca em um banco de dados que contém os arquivos criados pelo usuário e lista aqueles que satisfaçam ao padrão desejado 1 Esse comando permite acesso mais rápido a esses arquivos contanto que não tenham sido criados depois da última atualização do banco de dados Podemos forçar a atualização desse banco de dados por meio do comando updatedb 1 O comando locate tem sintaxe mais simples e procura o nome do arquivo isolado ou como parte de um nome como se houvesse caracterescuringa antes e depois do nome do arquivo Para achar os arquivos books e school podemos utilizar o comando 1 locate oo O comando find é utilizado para fazer buscas por arquivos e diretórios fornecendo como resultado o caminho completo para os arquivos e diretórios encontrados É possível também utilizar caracterescuringa para ampliar a pesquisa a um conjunto de nomes que atendam a uma especificação múltipla Formato do comando find caminho expressão Esse comando faz uma busca pela expressão definida como parâmetro em todos os diretórios e subdiretórios especificados também como parâmetros no campo caminho retornando os resultados da busca caso existam O comando find possui uma série de fun cionalidades busca de arquivos sem dono busca de arquivos com o bit SUID ativado exe cução de comandos sobre o resultado da busca entre outros Para mais detalhes a respeito do comando find sua página de manual pode ser consultada Podemos utilizar ainda o comando locate que faz buscas por arquivos consultando um banco de dados que contém os arquivos criados pelo usuário Esse comando permite acesso mais rápido a esses arquivos contanto que não tenham sido criados depois da última atualização do banco de dados Para forçar a atualização desse banco de dados utilizamos o comando updatedb O comando locate tem sintaxe mais simples e funciona como se hou vesse caracteres antes e depois do nome do arquivo isto é procurase o nome do arquivo isoladamente ou como parte de um nome Por exemplo para achar os arquivos books e school podemos utilizar o seguinte comando locate oo 57 Capítulo 3 Organização do Linux Navegando pela árvore de diretórios q O diretório que fica no nível hierárquico mais alto ou no topo da árvore de diretórios é o raiz Cada caminho é representado por uma sequência única de diretórios separados pelo carac tere sem aspas que é o nome do caminho path name Existem dois tipos de caminhos 1 Caminhos absolutos iniciados no diretórioraiz 1 Caminhos relativos iniciados no diretório corrente sem utilizar a barra inicial 2 O Linux possui dois tipos especiais de nomes de diretórios diretório ponto que significa o diretório corrente como vimos anteriormente e diretório dois pontos que representa o diretório um nível acima do diretório corrente O diretório que fica num nível imediatamente acima do corrente também é chamado de diretóriopai parent directory Esses dois tipos especiais de diretórios são muito utilizados para a navegação na estrutura de diretórios do Linux Se o diretório corrente é o homealuno por exemplo podemos fazer referência ao diretório home somente digitando Outro exemplo seria o caminho alunodocumentos que significaria o mesmo que homealunodocumentos Existem dois tipos especiais de nomes de diretórios utilizados para a navegação na estrutura de diretórios do Linux 1 Ponto que representa o diretório corrente 1 Dois pontos que representa o diretório um nível acima do diretório corrente O caminho alunodocumentos significa o mesmo que homealunodocumentos O diretório que fica um nível imediatamente acima do diretório corrente é chamado de diretóriopai parent directory Conforme vimos anteriormente os diretórios do Linux são organizados hierarquicamente numa estrutura do tipo árvore invertida O diretório que fica no nível hierárquico mais alto ou no topo da árvore de diretórios é o diretórioraiz representado pela barra normal Essa forma de estrutura em árvore permite que possa haver arquivos ou diretórios com os mesmos nomes diferenciados pelo sistema como elementos distintos devido aos cami nhos diferentes paths percorridos na estrutura Cada caminho é representado por uma sequência de diretórios separados pelo caractere sem aspas Essa sequência representa o nome do caminho path name do arquivo ou diretório Existem dois tipos de caminhos os absolutos que se iniciam sempre no diretórioraiz e os relativos que são baseados no diretório corrente em vez de se utilizar o diretórioraiz como início do caminho Diferentemente do caminho absoluto sempre iniciado com o caminho relativo nunca começa com Quando um subdiretório está muitos níveis abaixo do diretórioraiz passa a ser trabalhoso utilizar o caminho absoluto como identificador desse diretório É mais conveniente utilizar o caminho relativo Além dessas facilidades existem os comandos pwd e cd para a navegação nos diretórios O primeiro passo para navegar na estrutura é saber o local onde estamos O comando pwd print working directory é utilizado para mostrar o diretório corrente retornando o caminho completo de identificação desse diretório O comando pwd é um dos mais simples do Linux pois não tem opções nem entrada e só produz uma linha de saída Outro comando utilizado para navegação na árvore de diretórios é o cd que tem a função de mudar a loca lização do usuário para outro diretório No exemplo o comando cd é utilizado para navegar até o diretório homealuno 58 Introdução ao Linux cd homealuno q O comando pwd mostra o diretório corrente e é um dos mais simples pois não tem opções nem entrada e só produz uma linha de saída O comando cd é utilizado para navegar pela árvore de diretórios No exemplo abaixo o comando cd muda a localização do usuário para o diretório homealuno cd homealuno Empacotando e compactando arquivos e diretórios O empacotamento de arquivos é um recurso utilizado para fazer cópias de segurança backups com mais rapidez mas serve também para gerar pacotes de arquivos trans portálos entre dois computadores ou enviálos pela internet O comando utilizado para empacotar arquivos é o tar que pode empacotar um número praticamente ilimitado de arquivos gerando como resultado um único arquivo cujo conteúdo é o conjunto de arquivos que foram empacotados A sintaxe do comando tar é mostrada a seguir tar opções arquivo lista de arquivos Onde arquivo é o nome do arquivo tar que será criado e lista de arquivos é a lista de arquivos e diretórios que serão empacotados O comando tar também é utilizado para desempacotar arquivos As opções c e x são utilizadas para empacotar e desempacotar arquivos respecti vamente Se quisermos especificar o nome do arquivo que será criado devemos adicionalmente utilizar a opção f O comando tar possui diversas opções entre elas a opção v que faz com que sejam listados os nomes dos arquivos que estão sendo empacotados ou desempacotados Os exemplos a seguir são as formas mais utilizadas do comando tar tar cvf backuptar homealuno agrupa todos os arquivos do diretório home do usuário aluno empacotandoos no arquivo backuptar tar xvf backuptar extrai todos os arquivos contidos no arquivo backuptar para o diretório corrente q O comando tar é utilizado para empacotar e desempacotar arquivos Sua sintaxe é tar opções arquivo lista de arquivos O empacotamento de arquivos pode ser utilizado para fazer cópias de segurança backups gerar pacotes de arquivos transportálos entre computadores por intermédio de mídias removíveis ou enviálos pela internet Opções mais utilizadas do comando tar 1 c empacotar arquivos 1 x extrair os arquivos do arquivo compactado 1 f especificar o nome do arquivo 1 v listar o nome dos arquivos que estão sendo empacotados ou desempacotados Também é possível compactar os arquivos para transporte e armazenamento gerando uma cópia menor Essa facilidade é útil por exemplo quando precisamos enviar o arquivo pela 59 Capítulo 3 Organização do Linux internet Os comandos gzip e bzip2 podem ser utilizados para compactar arquivos enquanto os comandos gunzip e bunzip2 podem ser utilizados para descompactar arquivos As sin taxes desses comandos gzip opções arquivo bzip2 opções arquivo gunzip opções arquivo bunzip2 opções arquivo O comando gzip gera um arquivo com o mesmo nome do arquivo original incluindo a termi nação gz enquanto o comando bzip2 inclui a terminação bz2 É possível utilizar os comandos gzip e bzip2 para descompactar arquivos utilizando a opçãod Uma opção muito utilizada é empacotar e compactar arquivos simultaneamente utilizando o comando tar com a opção adicional z compactação com o comando gzip ou com a opção j compactação com o comando bzip2 Os exemplos a seguir mostram o uso do comando tar fazendo compactação de dados utilizando os algoritmos dos comandos gzip e bzip2 tar zcvf backuptargz homealuno tar jcvf backuptarbz2 homealuno q Existem dois comandos que podem ser utilizados para compressão de arquivos gzip e bzip2 e dois comandos que podem ser utilizados para descompressão de arquivos gunzip e bunzip2 com os formatos gzip opções arquivo bzip2 opções arquivo gunzip opções arquivo bunzip2 opções arquivo Os comandos gzip e bzip2 geram como saída arquivos com o mesmo nome do arquivo original incluindo respectivamente as terminações gz e bzip2 É possível ainda utilizar os comandos gzip e bzip2 para descompactar arquivos utilizando a opção d Os arquivos gerados pela execução dos comandos anteriores serão gerados no diretório corrente Se no entanto desejarmos transportálos para uma fita supondo que seu dispositivo esteja montado devese especificar o caminho correspondente ao arquivo que representa o dispositivo como mostra o exemplo tar czvf devst0 homealuno Onde st0 é o dispositivo correspondente à unidade de fita Também é possível descompactar e desempacotar o arquivo simultaneamente utilizando as opções zxvf compactação feita com o comando gzip ou jxv compactação feita com o comando bzip2 do comando tar como os exemplos 60 Introdução ao Linux tar zxvf backuptargz tar jxvf backuptarbz2 q Para transportar o arquivo para uma fita supondo que seu dispositivo esteja montado devese especificar o caminho correspondente ao arquivo que representa o dispositivo como mostra o exemplo tar czvf devst0 homealuno Uma opção muito utilizada é empacotar e compactar arquivos simultaneamente utilizando o comando tar com as opções zcompactação utilizando o algoritmo do comando gzip ou j compactação utilizando o algoritmo do comando bzip2 tar zcvf backuptargz homealuno tar jcvf backuptarbz2 homealuno Exercício de fixação 10 e Página de manuais Qual dos comandos a seguir podemos utilizar para localizar o diretório no qual está armaze nada a página de manual de um determinado comando no Linux a which b w c slocate d whereis e man 61 Capítulo 3 Roteiro de Atividades Roteiro de Atividades 3 Atividade 31 Conhecendo os arquivos Indique as letras que representam os seguintes tipos de arquivos Regular Bloco Socket Pipe Arquivos Diretórios Links simbólicos Atividade 32 Criando arquivos 1 Posicionese em seu diretório de trabalho e crie os arquivos exemplo1 e exemplo2 uti lizando comandos diferentes em cada caso Ao criar um dos arquivos entre com algumas linhas de dados pelo teclado 2 Faça com que o arquivo vazio fique igual ao arquivo com conteúdo Atividade 33 Criando diretórios e copiando arquivos 3 Crie o diretório exemplos em um subdiretório temp no seu diretório home Utilize apenas um comando de criação para executar esta ação 4 Mova os arquivos exemplo1 e exemplo 2 para o diretório exemplos deixando uma cópia do segundo no diretório de origem Atividade 34 Empacotando e compactando arquivos 5 Entre no diretório tempexemplos Empacote e compacte os arquivos criados anteriormente num arquivo chamado exemplostargz Use um único comando para efetuar esta operação 6 Crie um diretório chamado exemplos2 e mova o arquivo exemplostargz para o dire tório exemplos2 7 Entre no diretório exemplos2 e com um único comando descompacte e desempacote o arquivo exemplostargz Atividade 35 Removendo arquivos e diretórios 1 Após o término das atividades volte à situação original e remova todos os elementos criados 62 63 Capítulo 4 Desvendando o Linux objetivos conceitos 4 Desvendando o Linux Utilizar o redirecionamento padrão de arquivos de entrada saída e erro para arquivos normais ou arquivos de dispositivos e criar funções a partir de uma sequência de comandos com a utilização de canalizações ou pipes Entrada e saída padrão de dados e saída padrão de erros pipes ou canalizações e comandos para manipulação de arquivos Entrada e saída padrão de dados e saída padrão de erros q 1 Os programas utilitários ou comandos do Linux desempenham funções simples e bem definidas 1 Os comandos obtêm dados como entrada executam o processamento desses dados e fornecem resultados como saída 1 No Linux a entrada padrão de dados é o teclado a saída padrão de dados é o monitor e a saída padrão de erros também é o monitor Nesta sessão de aprendizagem veremos com mais detalhes alguns conceitos básicos do Linux importantes para entendermos o funcionamento desse Sistema Operacional Como todos os elementos no Linux são representados por arquivos necessitamos conhecer também as formas de manipulação do conteúdo dos arquivos assim como já vimos algumas operações no sistema de arquivos A maior parte dos programas utilitários do Linux desem penha uma função simples e bem definida Eles obtêm dados como entrada executam o processamento desses dados e fornecem resultados como saída Todo programa quando é executado possui uma entrada e uma saída de dados e uma saída de erros No Linux a entrada padrão de dados é o teclado a saída padrão de dados é o monitor e a saída padrão de erros também é o monitor A Figura 41 mostra a entrada e a saída padrão de dados e a saída padrão de erros 64 Introdução ao Linux Saída de erro padrão Utilitário ou programa do usuário Saída padrão Entrada padrão Redirecionamento de entrada e saída q Para redirecionar arquivos padrão devemos usar combinações de redirecionamentos e descritores de arquivos Os descritores de arquivos só são obrigatórios no redirecio namento de erros Os descritores de arquivo utilizados no redirecionamento são 0 para o arquivo de entrada padrão 1 para o arquivo de saída padrão e 2 para o arquivo de erro padrão Uma das facilidades que o Linux oferece é a possibilidade de alterar a entrada e a saída padrão de dados bem como a saída padrão de erros Essa característica é conhecida como redirecionamento de entrada e saída Por exemplo suponhamos que um programa chamado consulta solicite o número de um cliente como entrada e apresente seus dados como saída Normalmente o programa receberá a entrada de dados do teclado e exibirá a saída na tela consulta 12345 Cliente nº12345 Nome Aluno1 Endereço Av Atlântica 110 Cidade Rio de Janeiro Estado RJ q O Linux oferece a possibilidade de alterar a entrada e a saída padrão de dados bem como a saída padrão de erros Exemplo o programa consulta solicita o número de um cliente como entrada do teclado e apresenta seus dados como saída na tela 1 consulta 12345 1 Cliente n 12345 1 Nome Aluno1 1 Endereço Av Atlântica 110 1 Cidade Rio de Janeiro 1 Estado RJ Se o programa de consulta tiver de ser executado para uma lista de uma centena de clientes seria cansativo digitar os números dos clientes um a um como entrada do programa o que Figura 41 Entrada e saídas padrão 65 Capítulo 4 Desvendando o Linux poderia ainda conduzir a erros de digitação Alternativamente a listagem dos números dos clientes pode ser colocada em um arquivo chamado números editandoo previamente com um dos utilitários de edição de texto do Linux Poderemos então redirecionar a entrada padrão do comando consulta através do símbolo que significa a entrada padrão do sistema consulta numeros O caractere instrui o interpretador de comandos shell a executar o programa consulta tornando sua entrada padrão o arquivo números em vez do teclado isto é redirecionando a entrada do comando Nesse caso apareceria na tela uma lista com todos os dados de todos os clientes o que provavelmente encheria várias telas ocasionando perda de informa ções Similarmente em vez de utilizar a saída padrão podemos redirecionar os dados para uma impressora utilizando o comando consulta devlp O caractere instrui o shell a executar o programa consulta utilizando como saída padrão a impressora em vez do monitor de vídeo Podemos também utilizar o redirecionamento de entrada juntamente com o de saída consulta números clientes q A listagem dos números dos clientes está no arquivo números e a entradapadrão do comando consulta será redirecionada através do operador de redirecionamento de entrada consulta numeros O caractere instrui o interpretador de comandos shell a executar o programa consulta utilizando como saídapadrão a impressora em vez do monitor de vídeo consulta devlp Podemos utilizar o redirecionamento de entrada juntamente com o de saída como no exemplo consulta números clientes A Figura 42 mostra como funciona o redirecionamento de entrada e saída Os dados de entrada são lidos do arquivo números e os dados de saída são escritos no arquivo cliente Se o arquivo cliente não existir ele será criado com o comando do exemplo anterior Caso ele exista seu conteúdo será sobrescrito com os dados de saída do comando Saída de erro padrão Utilitário ou programa do usuário Saída padrão Entrada padrão Arquivo clientes Arquivo números Figura 42 Redirecionamento de entrada e saída 66 Introdução ao Linux Também é possível adicionar os dados de saída no final de um arquivo acrescentando esses dados ao conteúdo existente nesse arquivo Para isso devemos utilizar os caracteres Para o redirecionamento de entrada e saída de dados podemos opcionalmente utilizar descritores de arquivos mas para o redirecionamento de saída de erro o uso de descritores de arquivos é obrigatório Os descritores de arquivo utilizados no redirecionamento são 0 para o arquivo de entrada padrão 1 para o arquivo de saída padrão e 2 para o arquivo de erro padrão comando arquivo redireciona a entrada padrão lendo dados do arquivo comando 0 arquivo redireciona a entrada padrão lendo dados do arquivo comando arquivo redireciona a saída padrão sobrescrevendo o arquivo comando 1 arquivo redireciona a saída padrão sobrescrevendo o arquivo comando arquivo redireciona a saída padrão anexando os dados no arquivo comando 2 arquivo redireciona a saída de erro padrão reescrevendo o arquivo comando 2 arquivo redireciona a saída de erro padrão anexando os dados no arquivo comando arquivo 21 envia a saída de erro padrão reescrevendo o arquivo comando arquivo 21 envia a saída de erro padrão anexando os dados no arquivo No Capítulo 3 vimos que uma das características do sistema de arquivos do Linux é a independência de dispositivo e arquivo Essa característica combinada com a capacidade de redirecionamento de entrada e saída cria uma ferramenta poderosa Pipe ou canalização q Os utilitários do Linux desempenham funções específicas Tarefas mais complexas são executadas pela combinação sequencial de utilitários ou comandos Um pipe é utilizado para executar uma sequência de comandos passando a saída de um comando diretamente a outro comando que a utilizará como entrada de dados Geralmente os utilitários do Linux são desenvolvidos para desempenhar uma única função Tarefas mais complexas são executadas através da combinação sequencial de utilitários com a saída de um servindo de entrada para o outro Tal combinação é possível por meio da facilidade de canalização do Linux Uma canalização mais conhecida como pipe é utilizada para direcionar a saída de um comando para outro comando que a utilizará como entrada de dados Essa funcionalidade é especialmente útil quando dois comandos são executados em sequência como mostra a Figura 43 Comando 1 Comando 2 Utilizando o exemplo anterior vamos colocar os clientes em ordem numérica e mostrar suas respectivas informações por intermédio do programa consulta na tela do monitor Para executar estas duas funções devemos executar os comandos Figura 43 Canalização ou pipe 67 Capítulo 4 Desvendando o Linux sort numeros temp ordena os números de identificação dos clientes em ordem crescente consulta temp lista os dados dos clientes segundo a ordenação anterior O mesmo resultado pode ser conseguido ao se utilizar uma canalização ou pipe que é representado pelo caractere sort números consulta q Exemplo colocar os clientes em ordem numérica e mostrar suas informações por meio do programa consulta na tela do monitor O comando sort é utilizado para ordenar os números dos clientes em ordem crescente sort numeros temp consulta temp O mesmo resultado pode ser conseguido utilizando apenas uma linha de comando conectando os comandos através de um pipe sort numeros consulta A Figura 44 mostra um diagrama funcional da linha de comando executada no exemplo anterior Com a funcionalidade pipe o Linux permite que diversos comandos sejam conec pipe o Linux permite que diversos comandos sejam conec o Linux permite que diversos comandos sejam conec tados em uma sequência conhecida como canalização Como no exemplo anterior a saída padrão de cada comando é canalizada para a entrada do próximo comando exceto a última que nesse caso é mantida como a saída padrão de forma que a listagem seja mostrada no terminal de vídeo Redireciona entrada Saída padrão Consulta Sort O Linux manipula automaticamente o fluxo de dados de um programa para o outro pro duzindo o mesmo efeito de uma execução de um programa que contém várias instruções Geralmente os arquivos de saída intermediários de uma canalização não são utilizados fora dela pois os seus dados não são armazenados para serem utilizados por outros programas ou pelo usuário O sistema simplesmente descarta esses dados depois que a canalização terminou de ser executada Para preservar a saída de um arquivo intermediário no interior de uma canalização para processamento posterior podemos utilizar o comando tee como parte da canalização O exemplo abaixo mostra como funciona o comando tee que copia cada linha do arquivo de entrada para o arquivo de saída passando todos os dados que recebe do comando sort para o programa consulta mas também copia sua saída para o arquivo especificado como parâmetro que neste exemplo é o arquivo temp sort numeros tee temp consulta Figura 44 Combinação de comandos utili zando pipes 68 Introdução ao Linux Exercício de fixação 1 e Comando sort 1 Qual a utilidade do comando sort 2 Através da página de manual do comando encontre a opção que organiza o arquivo com base nas colunas 3 Pesquise três opções do comando sort Comandos para manipulação de arquivos Neste tópico veremos alguns comandos que trabalham com arquivos Esses comandos rea lizam funções de exibição contabilização e filtragem de dados A seguir serão apresentados em detalhes esses comandos Substituindo nomes de arquivos Vimos que o comando mv serve para mover o arquivo da origem para o destino na verdade uma cópia destrutiva porque retira o arquivo de seu local original e faz uma cópia dele no local de destino eliminando o arquivo do local de origem O comando mv também pode ser utilizado para mudar o nome de arquivos quando o usuário desejar gerar uma nova versão de um arquivo ou um novo arquivo que tenha um nome que o diferencie do anterior É importante lembrar que o arquivo original não será mantido após ser reno meado A sintaxe do comando mv é mv opções arquivo novonomedoarquivo O comando rename pode ser utilizado exclusivamente para renomear arquivos mas com a funcionalidade adicional de trocar partes de nomes sendo muito útil quando utilizado com caracterescuringa No exemplo abaixo as terminações de todos os arquivos do diretório corrente são trocadas de htm para html rename htm html htm q O comando mv move o arquivo da origem para o destino fazendo uma cópia no local de destino e eliminando o arquivo do local de origem O comando mv também pode ser utilizado para mudar o nome de arquivos É importante lembrar que o arquivo original não será mantido após ser renomeado A forma do comando mv é mv opções arquivoorigem arquivodestino O comando rename pode ser utilizado exclusivamente para trocar os nomes de arquivos mas com a funcionalidade adicional de trocar parte de nome do nome dos arquivos O comando abaixo pode ser utilizado parar trocar as terminações de todos os arquivos do diretório corrente de htm para html rename htm html htm Visualizando o conteúdo de arquivos Vimos que o comando cat pode ser utilizado para criar um arquivo mesmo sendo sua função principal a de concatenar arquivos Como a sua saída padrão é a tela do monitor ao executar o comando a seguir o conteúdo do arquivo será mostrado na tela 69 Capítulo 4 Desvendando o Linux cat arquivo O resultado da concatenação será o próprio arquivo pois não há nenhum outro arquivo especificado no comando para ser concatenado O problema do comando cat é que se o tamanho do texto contido no arquivo ultrapassar o número de linhas da tela do monitor ele continuará mostrando o arquivo até o final sem pausas de forma que a tela só pare de rolar quando todo o conteúdo do arquivo for exibido Logo só serão mostradas na tela as últimas linhas do arquivo e não veremos as linhas anteriores ou melhor elas serão mos tradas rapidamente na tela não havendo tempo reservado para a sua leitura Para evitar o problema de visualização de arquivos maiores que o número de linhas da tela devemos uti lizar os comandos more ou less que listam o arquivo dando uma pausa na listagem quando ela preenche toda a tela permitindo que se controle a exibição do conteúdo A sintaxe desses comandos pode ser vista abaixo more opções num padrão númerodalinha arquivo less opções arquivo Utilizando o comando more se o conteúdo do arquivo for maior que a quantidade de linhas do monitor será exibida no final da tela a expressão morex onde x representa a porcen tagem do arquivo que já foi exibida indicando que há mais texto a ser visualizado Se pressio narmos a tecla Enter o comando more mostrará mais uma linha do texto rolando a primeira linha para cima na tela Se quisermos mostrar mais uma tela inteira com as linhas seguintes do texto devemos pressionar a barra de espaço Podemos dessa forma controlar a exibição do texto passandoo linha a linha na tela ou paginandoo tela a tela Para sair do comando more antes de chegar ao fim do arquivo podemos utilizar as teclas CtrlC ou a tecla q O comando less possui praticamente as mesmas funcionalidades do comando more só que mais recursos q O comando cat tem a função principal de concatenar arquivos mas pode ser utilizado para mostrar o conteúdo de um arquivo cat opções arquivo O comando cat não controla a exibição na tela deixandoa rolar até o final do arquivo e dificultando a sua visualização Devemos utilizar os comandos more ou less que dão uma pausa na listagem quando ela preenche toda a tela more opções padrão numerodalinha arquivo less opções arquivo Exercício de fixação 2 e Visualizando conteúdo de arquivos Quais recursos o comando less possui a mais que o comando more 70 Introdução ao Linux Contabilizando o conteúdo de arquivos Podemos contabilizar os elementos contidos em um arquivo texto que são os caracteres as palavras e as linhas de texto desses arquivos Para isso existe um utilitário chamado wc que conta e imprime o número de caracteres de palavras ou de linhas de um arquivo A sintaxe do comando é wc opções arquivo Caso não seja especificado nenhum arquivo o comando wc lê a entrada padrão O comando do exemplo a seguir lista o conteúdo do diretório corrente e direciona a sua saída para a entrada do comando wc que com a opção l conta o número de linhas listadas pelo comando ls l e fornece como resultado o número de arquivos e diretórios contidos no diretório etc ls l etc wc l Como a primeira linha da saída do comando ls l não é um arquivo ou diretório devemos descontála do resultado Veremos nos próximos itens comandos mais complexos que per mitem obter resultados exatos para a contagem de conteúdos O comando wc também pode ser utilizado para determinar que dois arquivos não são idênticos mostrando que não têm o mesmo número de linhas palavras ou caracteres No entanto se tiverem números idênticos de linhas palavras e caracteres existe uma grande probabilidade de que sejam idênticos mas não há garantia total q O comando wc conta e imprime o número de caracteres de palavras ou de linhas de um arquivo wc opções arquivo Opções do comando wc 1 l conta o número de linhas do arquivo 1 w conta o número de palavras do arquivo 1 c conta o número de caracteres do arquivo Caso não seja especificado nenhum arquivo o comando wc lê a entrada padrão Se não for escolhida uma opção o comando wc conta e retorna todas as opções anteriores Exibindo o conteúdo inicial e final de arquivos Para exibir o conteúdo inicial e final de arquivos texto existem dois comandos o head e o tail respectivamente O comando head permite que visualizemos as primeiras linhas de um arquivo Sua sintaxe é head opções arquivo1 arquivo2 Caso não seja especificado nenhum arquivo o comando head lê a entrada padrão Caso seja especificado mais de um arquivo cada um deles terá suas 10 primeiras linhas exibidas na tela e seu conteúdo será precedido pelo nome do arquivo como mostra o exemplo arquivo A principal opção desse comando é a que especifica o número de linhas iniciais que serão listadas como mostra o exemplo abaixo que exibe as cinco primeiras linhas do arquivo relatóriotxt head 5 relatoriotxt 71 Capítulo 4 Desvendando o Linux Se não for informado o número de linhas o comando retornará as 10 primeiras linhas por padrão O inverso do comando head é o comando tail que mostra as últimas linhas de um arquivo Sintaxe do comando tail tail opções arquivo1 arquivo2 Por exemplo se quisermos exibir as últimas 15 linhas do arquivo relatóriotxt devemos digitar o comando tail 15 relatoriotxt Se não for especificado o número de linhas a serem exibidas o comando retornará as últimas 10 linhas por padrão q 1 Para exibir o início e o final do conteúdo de um arquivo são utilizados os comandos head e tail respectivamente 1 O comando head permite que visualizemos as primeiras linhas de um arquivo O comando do exemplo abaixo exibe as cinco primeiras linhas do arquivo relatóriotxt head 5 relatoriotxt 1 O comando tail mostra as últimas linhas de um arquivo O comando do exemplo abaixo exibe as últimas quinze linhas do arquivo relatóriotxt tail 15 relatoriotxt 1 Se não forem especificados os números de linhas a serem exibidas os comandos head e tail retornarão as primeiras ou últimas dez linhas respectivamente Exercício de fixação 3 e Exibindo o conteúdo de arquivos Que saídas serão mostradas com os comandos abaixo 1 Ls la 1 Ls l 1 Ls l etcresolvconf wc l 1 Ls etc wc c Selecionando trechos de arquivos A pesquisa e seleção de conteúdos de arquivos no Linux é uma operação muito comum e pode ser utilizada para encontrar uma determinada informação Vamos supor que tenhamos de encontrar no arquivo de clientes do primeiro exemplo todos os clientes que residam no mesmo estado na mesma cidade ou na mesma rua Existem vários utilitários do Linux que realizam a pesquisa de conteúdo embora alguns sejam muito sofisticados para o escopo deste curso introdutório Estudaremos o mais utilizado e que atende a maior parte das necessidades comuns do usuário O comando grep é um utilitário de seleção e pesquisa de arquivos A Figura 45 mostra o funcionamento do comando grep 72 Introdução ao Linux Texto original Linhas escolhidas GREP Padrões Linhas rejeitadas Arquivo de saída Arquivos de entrada O usuário especifica um padrão que será utilizado pelo comando grep para fazer a pes quisa nos arquivos de entrada Esse utilitário examina as linhas do arquivo verificando se cada uma contém o padrão especificado Quando o padrão é encontrado a linha é copiada para o arquivo de saída ou para a tela do terminal se for utilizada a saída padrão Se a linha não contém o padrão é rejeitada isto é não é copiada no arquivo de saída Quando o comando grep termina de pesquisar os arquivos de entrada o arquivo de saída vai conter todas as linhas que contêm os padrões desejados A sintaxe do comando grep é grep opções padrão arquivo Caso não seja especificado nenhum arquivo o comando grep lê a entrada padrão teclado Um exemplo de uso do comando grep pode ser conferido a seguir onde é utilizado para selecionar somente os clientes que moram no Distrito Federal cat clientes 12341 Aluno1 Rua Goiás 25 Planaltina DF 12342 Aluno2 Av Beira Rio 1005 Vitória ES 12343 Aluno3 Rua Guarani Campinas SP 12344 Aluno4 SQS 205 F 306 Brasília DF 12345 Aluno5 Av Atlântica 110 Rio de Janeiro RJ 12346 Aluno6 Av Castro Alves 320 Salvador BA 12347 Aluno7 Rua da Praia 215 Porto Alegre RS 12348 Aluno8 Rua das Laranjeiras1020 Rio de Janeiro RJ grep DF clientes 12341 Aluno1 Rua Goiás 25 Planaltina DF 12344 Aluno4 SQS 205 F 306 Brasília DF Os padrões utilizados pelo comando grep são chamados de expressões regulares Podemos utilizar caracteres especiais que dão maior flexibilidade ao comando grep q 1 O comando grep é utilizado para seleção e pesquisa de arquivos por meio de um padrão especificado pelo usuário 1 Quando o padrão é encontrado a linha é copiada para o arquivo de saída Se a linha não contém o padrão é rejeitada Figura 45 Funcionamento do comando grep Saiba mais O utilitário grep também funciona como um filtro de canalização Quando utilizado em uma canalização seleciona algumas saídas do programa ou comando anterior e envia o resul tado para a entrada do programa seguinte que irá processálas l 73 Capítulo 4 Desvendando o Linux q 1 Quando o comando grep terminar de pesquisar os arquivos de entrada o arquivo de saída conterá todas as linhas que contêm os padrões desejados grep opções padrão arquivo 2 Se não for especificado nenhum arquivo o comando grep lê a entrada padrão 1 O utilitário grep funciona também como um filtro de canalização selecionando algumas saídas do comando anterior e enviando o resultado para a entrada do comando seguinte 1 Podemos usar caracteres especiais que dão maior flexibilidade ao comando grep 1 O caractere ponto é um caractere especial que permite encontrar padrões com qualquer caractere na posição determinada pelo ponto 1 Caracteres entre colchetes xyz permitem achar o conjunto especificado de caracteres na posição determinada pelos colchetes 1 O caractere asterisco permite achar qualquer número inclusive zero de ocorrências do caractere que o precede Por exemplo a expressão grep abc pode selecionar linhas que contêm ab abc abcc abccc abcccc etc 1 O caractere seleciona as linhas que começam com o padrão sucedido por ele Por exemplo a expressão grep Linux seleciona as linhas de um arquivo que começam com a palavra Linux 1 O caractere seleciona as linhas que terminam com o padrão precedido por ele Por exemplo a expressão grep Linux seleciona as linhas de um arquivo que ter minam com a palavra Linux O comando egrep extended grep como o próprio nome diz aceita expressões regulares mais elaboradas do que o comando grep Podemos utilizar os seguintes caracteres especiais adicionais 1 Números entre chaves nm que permitem encontrar padrões com n a m ocorrências do caractere que precede as chaves Por exemplo a expressão egrep abc02 arquivo pode selecionar ab abc ou abcc Devese utilizar sempre aspas simples ou duplas na expressão 1 O caractere permite encontrar uma ou mais letras entre os colchetes que o precedem concatenandoas com os caracteres que o sucedem Por exemplo a expressão egrep azove permite achar move aprove love etc 1 O caractere permite encontrar zero ou uma ocorrência da letra que o precede Por exemplo a expressão love permite encontrar love ou lve 1 O caractere permite encontrar expressões iguais às que o antecedem e às que o sucedem Por exemplo a expressão egrep lovehate permite encontrar expressões que contêm as palavras love ou hate 1 Caracteres entre parênteses xyz como por exemplo egrep loveablely permitem encontrar as palavras lovable ou lovely Existe ainda o comando rgrep que permite estender a pesquisa de um padrão de caracteres recursivamente ou seja no diretório corrente e em seus subdiretórios e exibe não só a linha procurada como também o nome do arquivo que contém a linha Utilizando as opções r e n no comando grep obtémse o mesmo resultado Outra alternativa ao comando grep é o comando fgrep fi xed grep ou fast grep que fun fixed grep ou fast grep que fun ou fast grep que fun fast grep que fun que fun ciona similarmente ao comando grep mas não reconhece nenhum caractere especial em expressões regulares Todos os caracteres representam apenas a si mesmos não havendo significados metafóricos 74 Introdução ao Linux q Outros comandos alternativos ao grep 1 O comando egrep extended grep permite usar caracteres especiais adicionais aos caracteres do comando grep 1 O comando rgrep permite estender a pesquisa de um padrão de caracteres recursi vamente ou seja no diretório corrente e em seus subdiretórios exibindo não só a linha procurada como também o nome do arquivo que contém a linha A opção r do comando grep possui a mesma funcionalidade do comando rgrep 1 O comando fgrep fixed grep ou fast grep funciona similarmente ao comando grep mas não reconhece nenhum caractere especial em expressões regulares Todos os caracteres representam apenas eles mesmos não havendo significados metafóricos Comparação entre arquivos q O comando cmp compara os arquivos e mostra a posição em que aparece a primeira diferença O exemplo a seguir compara dois arquivos que têm um caractere diferente na posição 17 da linha 10 cmp arquivo1 arquivo2 arquivo1 arquivo2 differ char 17 line 10 Podemos comparar o conteúdo de arquivos e determinar quais são as suas diferenças se não possuírem conteúdos idênticos Uma necessidade de comparação surge quando o usuário faz uma cópia do arquivo e quer verificar se essa cópia foi bemsucedida Um dos comandos utilizados para a comparação entre dois arquivos é o cmp que compara os arquivos e mostra a posição em que aparece a primeira diferença A Figura 46 mostra como é o funcionamento do comando cmp Arquivo 1 de entrada Arquivo 2 de entrada CMP Localização das diferenças Por exemplo se compararmos dois arquivos que possuem o 17º caractere diferente estando este localizado na linha 10 teremos a resposta cmp arquivo1 arquivo2 arquivo1 arquivo2 differ byte 17 line 10 Figura 46 Funcionamento do comando cmp 75 Capítulo 4 Desvendando o Linux Outro comando utilizado para comparar arquivos é o diff que exibe as diferenças entre eles gerando uma lista de procedimentos que podem ser aplicados ao arquivo original usando o utilitário patch para tornar os arquivos idênticos O comando diff possui mais recursos que o comando cmp A saída do comando diff é uma lista de ações a serem editadas que quando apli cadas ao conteúdo do primeiro arquivo geram o arquivo editado As ações a serem editadas incluem adição de uma linha eliminação de uma linha ou então mudança em uma linha q 1 O comando diff gera ações que incluem adição de uma linha eliminação de uma linha ou mudança de uma linha 1 O comando patch é utilizado para ler a lista de ações geradas pelo diff e fazer as devidas alterações no arquivo original para deixálo igual ao arquivo editado 1 O comando diff pode ser muito eficiente para guardar diferentes versões do mesmo arquivo armazenando apenas as diferenças entre eles e com isso economizando espaço em disco Ordenação em arquivos q O comando sort obtém as linhas de um ou mais arquivos de entrada e produz um arquivo de saída com as linhas em ordem classificada Sintaxe do comando sort sort opções arquivo Cada linha de um arquivo de entrada é tratada como campos separados uns dos outros por espaços como se fossem colunas O conteúdo de um arquivo pode ser ordenado antes de ser processado O comando sort obtém as linhas de um ou mais arquivos de entrada e a seguir as processa produzindo um arquivo de saída que contém as linhas em ordem classificada Sintaxe do comando sort sort opções arquivo O comando sort trata cada linha de um arquivo de entrada como uma série de um ou mais campos separados uns dos outros por espaços como se fossem colunas O exemplo a seguir lista o arquivo de entrada clientes com o primeiro campo em ordem numérica decrescente sort nr clientes 12348 Aluno8 Rua das Laranjeiras1020 Rio de Janeiro RJ 12347 Aluno7 Rua da Praia 215 Porto Alegre RS 12346 Aluno6 Av Castro Alves 320 Salvador BA 12345 Aluno5 Av Atlântica 110 Rio de Janeiro RJ 12344 Aluno4 SQS 205 F 306 Brasília DF 12343 Aluno3 Rua Guarani 510 Campinas SP 12342 Aluno2 Av Beira Rio 1005 Vitória ES 12341 Aluno1 Rua Goiás 25 Planaltina DF 76 Introdução ao Linux Se quisermos ordenar o arquivo por estado deveremos utilizar o comando a seguir que ordena alfabeticamente pelo número da coluna especificada na opção k sort k5 clientes 12345 Aluno5 Av Atlântica 110 Rio de Janeiro RJ 12341 Aluno1 Rua Goiás 25 Planaltina DF 12343 Aluno3 Rua Guarani 510 Campinas SP 12346 Aluno6 Av Castro Alves 320 Salvador BA 12344 Aluno4 SQS 205 F 306 Brasília DF 12348 Aluno8 Rua das Laranjeiras1020 Rio de Janeiro RJ 12347 Aluno7 Rua da Praia 215 Porto Alegre RS 12342 Aluno2 Av Beira Rio 1005 Vitória ES 77 Capítulo 4 Roteiro de Atividades Roteiro de Atividades 4 Atividade 41 Pesquisando em arquivos 1 Copie ou crie o arquivo atividade contendo as seguintes linhas abcdefghijklmUnixnopqrstuvwxyz abcdefghiUnixjklmnopqrstuvwxyzUnix abcdefghijklmnopqrstuvwxyzLinux abcdefghijklmnopqrstuUnixvwxyz Unixabcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyzUnix abcdefghijklmnopLinuxqrstuvwxyz abcdefghUnixijklmnopqrstuUnixvwxyz Supondo que você não conheça o conteúdo do arquivo mas imagina que deveria haver a palavra Unix em todas as suas linhas utilize uma linha de comando para mostrar na tela as linhas com seus respectivos números nas quais está faltando a palavra Unix salve esse resultado no arquivo chamado atividadetemp Atividade 42 Contabilizando arquivos Utilizando o comando grep encontre mais de uma forma de mostrar na tela o número de linhas em que a palavra Unix aparece pelo menos uma vez no arquivo atividade não mostrar as linhas Atividade 43 Controlando a exibição do conteúdo de arquivos Utilizando uma canalização liste na tela do monitor a terceira e a quarta linhas do arquivo atividade Atividade 44 Combinando comandos para criar novas funcionalidades Utilizando o arquivo clientes crie um comando utilizando os conceitos de canalização e redirecionamento que execute passo a passo a mesma função do comando abaixo sort n clientes 12348 Aluno8 R das Laranjeiras 1020 Rio de Janeiro RJ 12347 Aluno7 Rua da Praia 215 Porto Alegre RS 12346 Aluno6 Av Castro Alves 320 Salvador BA 12345 Aluno5 Av Atlântica 110 Rio de Janeiro RJ 12344 Aluno4 SQS 205 F 306 Brasília DF 12343 Aluno3 Rua Guarani Campinas SP 78 Introdução ao Linux 12342 Aluno2 Av Beira Rio 1005 Vitória ES 12341 Aluno1 Rua Goiás 25 Planaltina DF Passo a passo significa que a cada execução do comando uma linha será colocada em ordem Após cada comando verifique a ordenação no arquivo clientes 79 Capítulo 5 Edição de texto objetivos conceitos 5 Edição de texto Conhecer as formas de entrar e sair do editor Vi bem como seus comandos de movimentação inserção e remoção de texto salvar as modificações e procurar por padrões de caracteres e palavras no texto Processadores de texto e editores de texto Processadores de texto Os processadores de texto oferecem suporte à criação edição e formatação de documentos que suportam inclusão de textos tabelas equações científicas entre outros utilizando um conjunto de funcionalidades próprias O Linux oferece um conjunto de ferramentas para processamento de texto com destaque para o Writer do pacote Open Office As primeiras aplicações do Unix foram as de criação de documentos de texto e de desenvol vimento de software que exigiram o desenvolvimento de ferramentas eficientes de proces samento de texto As ferramentas de processamento de texto do Linux são uma família de utilitários que atuam em todas as fases de preparação de um documento Nesta sessão de aprendizagem não abordaremos o uso de processadores de texto desta cando apenas alguns editores de texto mais utilizados do Linux com destaque para o editor Vi que será visto em detalhes Editores de texto Os editores de texto são utilizados para a edição de arquivos que contenham somente texto sem qualquer tipo de formatação Eles permitem a entrada remoção ou substituição de texto além de oferecer diversas funcionalidades busca correção de erros cópia e colagem de texto entre outros Os editores de texto podem ser divididos em duas categorias os edi Os editores de texto podem ser divididos em duas categorias os edi tores de tela que exibem o texto na tela inteira e os editores de linha que exibem o conteúdo do arquivo linha a linha Esta sessão de aprendizagem será baseada no editor de textos Vi que será visto no próximo tópico Por isso não entraremos em detalhes no modo de utili zação dos outros editores apresentados a seguir 1 Emacs um editor de texto de tela cheia que foi desenvolvido por Richard Stallman guru e fundador da Free Software Foundation O Emacs é um poderoso ambiente de edição de textos que inclui funções adicionais chamadas de extensões Entre essas funções estão 80 Introdução ao Linux o envio de emails de dentro do editor a conversão de dados de arquivos em outros for matos e até mesmo a compilação de programas editados pelo Emacs Para abrirmos um arquivo utilizando o editor Emacs devemos utilizar o comando emacs seguido do nome do arquivo Se o arquivo especificado na linha de comando não existir ele será criado Caso contrário o arquivo existente ficará disponível para edição Se o Emacs for aberto em um ambiente gráfico como o GNOME ou o KDE será aberta uma janela com uma interface baseada em menus Para ativar uma das opções do menu basta posicionar o cursor do mouse e clicar sobre a opção Serão exibidas então as opções de cada menu 1 Pico o Pine Composer é um editor de texto de tela cheia desenvolvido pela Universidade de Washington que é parte integrante do programa cliente de email Pine Apesar disso o Pico pode ser utilizado para editar arquivos texto independentemente do Pine O Pico possui várias funcionalidades como busca de texto e verificador de erros entre outras Para abrirmos um arquivo utilizando o editor Pico devemos utilizar o comando pico seguido do nome do arquivo Se o arquivo especificado na linha de comando não existir ele será criado Caso contrário o arquivo existente ficará disponível para edição 1 JOE o Joes Own Editor é um editor de texto de tela cheia criado por Joseph H Allen em 1991 e distribuído pela GPL O JOE possui uma série de funcionalidades um sistema inte grado de ajuda busca de texto emulação de funcionalidades de outros editores entre outras Para abrirmos um arquivo utilizando o editor JOE devemos utilizar o comando joe seguido do nome do arquivo Se o arquivo especificado na linha de comando não existir ele será criado Caso contrário o arquivo existente ficará disponível para edição 1 Ed um editor de texto de linha criado em 1971 pelo criador do Unix Ken Thompson Para abrirmos um arquivo utilizando o editor Ed devemos utilizar o comando ed seguido do nome do arquivo Se o arquivo especificado na linha de comando não existir ele será criado Caso contrário o arquivo existente ficará disponível para edição Quando um arquivo é aberto pelo Ed por padrão a última linha do arquivo é exibida permitindo a inserção de texto após ela Os comandos do Ed só afetam a linha que está sendo exibida na tela a não ser que outra linha ou mesmo um conjunto de linhas seja especificado Editor Vi Visual Editor Vi é um dos mais antigos editores de texto para sistemas Unixlike Desen volvido em Berkeley passou a ser incorporado por padrão às diversas versões do sistema operacional Unix O Vi possui uma interface bastante simples sem os requintados recursos de edição oferecidos pelos processadores de textos para ambientes gráficos Apesar de sua simplicidade o Vi oferece vários recursos de edição de texto dos simples aos mais sofisti cados e é largamente utilizado por administradores de sistema e programadores Por esse motivo será o editor que detalharemos nesta sessão de aprendizagem O Vi copia o conteúdo do arquivo de texto que está sendo editado para um buffer de edição na memória principal utilizando a tela do monitor de vídeo como uma janela para visualização deste buffer A tela pode ser movimentada para cima ou para baixo mostrando outras linhas do texto armazenado no buffer possibilitando ao usuário a navegar por todo o arquivo Na Figura 51 vemos como a tela do terminal mostra o conteúdo do buffer Para editar o texto o usuário simplesmente move o cursor pela tela utilizando comandos de um só carac tere ou utilizando as setas do teclado Outros comandos de edição de texto são utilizados para inserir modificar e remover texto O comando especifica se a alteração a ser executada é em um caractere em uma palavra ou em uma linha Os resultados de cada comando são refletidos imediatamente no vídeo Saiba mais sobre os editores de texto Emacs httpwwwgnu orgsoftwareemacs Pico httpwww washingtonedupine manpico Joe http joeeditorsourceforge net e Ed httpwww gnuorgsoftwareed edhtml w Saiba mais O buffer nada mais é do que um local na memória RAM para onde é copiado o con teúdo de um arquivo quando este está sendo editado l 81 Capítulo 5 Edição de texto Buffer de edição Monitor de vídeo Janela Os comandos do Vi permitem fazer mudanças em massa no documento inteiro ou em partes dele As alterações realizadas são refletidas imediatamente no texto após a execução de um comando q O Vi copia o conteúdo de um arquivo de texto para o buffer de edição na memória principal e utiliza a tela do monitor de vídeo como uma janela para a visualização do buffer A tela pode ser movimentada para cima ou para baixo mostrando as demais linhas do texto Quando o Vi salva as alterações realizadas ele copia o texto editado no buffer para o arquivo armazenado de forma permanente substituindo o conteúdo anterior O comando vi é utilizado para executar o editor Vi e sua sintaxe é vi opções arquivo Se o nome do arquivo for omitido o Vi abrirá um novo arquivo sem nome no buffer de edição que ficará vazio aguardando o usuário digitar seu texto Os caracteres na coluna da esquerda da tela indicam que não há texto no arquivo nem mesmo espaços em branco Na última linha da tela é mostrado o nome do arquivo e informado se ele é novo ou se já existia Caso o arquivo já exista é mostrado o seu nome o número de linhas e o número de caracteres que ele possui Para sair do Vi sem salvar o arquivo editado devese digitar a tecla Esc para sair do modo de inserção digitar o comando q e em seguida teclar Enter Dessa forma a última versão do arquivo é preservada e as alterações feitas são descar tadas O Vi por padrão não permite a saída do editor com o descarte das alterações feitas no buffer O ponto de exclamação após o comando q permite sair do Vi mesmo que o buffer tenha sido modificado O nome do arquivo deve ser único dentro do seu diretório Um nome de arquivo pode incluir qualquer caractere exceto alguns caracteres especiais como e entre outros É possível incluir espaços em um nome de arquivo digitando uma barra invertida antes do espaço Durante a edição de um texto é possível sair do editor a qualquer momento salvando as modificações realizadas e retornando ao prompt do Linux O comando para sair do editor salvando as modificações realizadas é ZZ em maiúsculas Também é possível sair do editor salvando as modificações feitas utilizando os comandos w e q simultaneamente wq O comando w é utilizado para salvar as modificações sem sair do Vi e o comando q é utili zado para sair do editor desde que não tenha sido feita nenhuma modificação Figura 51 Exibição do con teúdo do buffer 82 Introdução ao Linux q O comando vi inicia o editor Vi e sua sintaxe é vi opções arquivo Para fechar o arquivo existem algumas opções 1 ZZ salva as alterações e fecha o arquivo 1 wq salva as alterações e fecha o arquivo 1 q sair do arquivo descartando as alterações feitas Modos do editor Vi Existem três formas básicas ou modos de trabalhar com o editor Vi 1 Modo comando quando se abre um arquivo para edição o Vi entra no modo de comando Os comandos realizam diversas funções como rolar através do texto fazer buscas por trechos do texto apagar caracteres palavras ou linhas entre outros Para facilitar a execução de comandos no Vi podese ativar a exibição dos números das linhas do arquivo através do comando set number 1 Modo de inserção esse modo é utilizado quando se deseja inserir texto em um arquivo A mudança do modo de comando para o modo de inserção é feita por intermédio de uma das opções 2 i entra no modo de inserção de texto começando na posição atual do cursor 2 a entra no modo de inserção de texto começando um caractere depois da posição do cursor 2 A entra no modo de inserção de texto começando no fim da linha onde está o cursor 2 o entra no modo de inserção de texto começando uma linha abaixo da posição atual do cursor 2 O entra no modo de inserção de texto começando na posição atual do cursor e pas sando a linha atual uma linha para baixo 2 s entra no modo de inserção de texto substituindo o caractere da posição atual do cursor 2 cw entra no modo de inserção de texto substituindo uma palavra a partir do carac tere onde o cursor está posicionado Outras variações do comando c também podem ser utilizadas para entrar no modo de edição Essas opções de comando serão vistas no tópico Substituindo texto Para sair do modo de inserção basta teclar Esc 1 Modo de execução esse modo é uma variante do modo de comandos do Vi que também permite a execução de comandos do Linux sem precisar sair do editor Vi Os comandos do modo de execução sempre começam com dois pontos Vários comandos de edição de arquivos do Vi também podem ser executados nesse modo Para executar comandos do Linux devese digitar no prompt do Vi os caracteres seguidos pelo comando Por exemplo para conhecer a localização do arquivo que está sendo editado devese executar o seguinte comando pwd 83 Capítulo 5 Edição de texto q 1 Modo de comando quando se abre um arquivo o editor entra no modo de comando que permite realizar funções como rolar através do texto buscar por palavras apagar caracteres específicos palavras ou linhas de texto entre outras 1 Modo de inserção a mudança do modo de comando para o modo de inserção é feita por meio dos comandos i a A o A O s ou cw no modo de comando Esse modo é utilizado quando se deseja inserir texto em um arquivo Para retornar ao modo de comando basta teclar Esc 1 Modo de execução este modo também permite a execução de comandos do Vi Além disso permite a execução de comandos do Linux dentro do editor Vi Movimentando o cursor q Teclas de movimentação do cursor 1 h move o cursor uma posição à esquerda 1 j move o cursor uma linha abaixo 1 k move o cursor uma linha acima 1 l move o cursor uma posição à direita As setas também podem ser utilizadas para movimentar o cursor No modo de comando é possível posicionar o cursor em qualquer lugar do arquivo o que é necessário para fazer as modificações remoções ou cópias de texto a partir da posição do cursor Existem comandos no Vi para mover o cursor que permitem subir descer ir para a esquerda ou para a direita caractere por caractere ir para frente ou para trás de bloco em bloco de texto como palavras frases ou parágrafos ir para frente ou para trás de tela em tela em um arquivo entre outras Os comandos abaixo podem ser utilizados para realizar movimentos simples do cursor 1 h um espaço à esquerda 1 j uma linha abaixo 1 k uma linha acima 1 l um espaço à direita É possível também utilizar as teclas de setas para movimentar o cursor Apesar de mostrar melhor a direção de movimento as setas não são suportadas por todos os terminais Com o tempo e a experiência o usuário do Vi verá que é muito prático movimentar o cursor utili zando as teclas h j k e l mantendo os dedos nas posições corretas do teclado Utilizando as teclas h ou l podese movimentar o cursor do início ao final da linha Ao chegarmos ao início ou ao fim de uma linha o cursor para de se mover não permitindo a mudança de linha e se tentarmos avançar o cursor um bip é emitido indicando que a ação não pode ser execu tada Para mover o cursor uma linha abaixo ou acima é necessário utilizar as teclas j ou k que também estão limitadas a movimentar o cursor dentro das linhas do texto não permi tindo mover o cursor acima da primeira linha ou abaixo da última linha do arquivo Podemos utilizar números combinados com os comandos de movimentação multiplicando a sua ação como no exemplo da Figura 52 onde o comando 4l move o cursor quatro posições para a direita executando a mesma ação que utilizar a tecla l quatro vezes 84 Introdução ao Linux A Figura 53 mostra os movimentos do cursor de sua posição original caractere s na décima sétima coluna da terceira linha para as posições marcadas pelos círculos utilizando diversos comandos do Vi Alguns comandos de movimentação do cursor 1 0 move o cursor para o início da linha 1 move o cursor para o final da linha 1 w move o cursor de palavra em palavra para a direita contando símbolos e pontuações equivalentes a palavras 1 W move o cursor de palavra em palavra para a direita sem contar símbolos e pontuações 1 b move o cursor de palavra em palavra para a esquerda contando símbolos e pontua ções equivalentes a palavras 1 B move o cursor de palavra em palavra para a esquerda sem contar símbolos e pontuações q Para mover o cursor por blocos de texto como palavras frases ou parágrafos utilizamse os comandos 1 0 move o cursor para o início da linha 1 move o cursor para o final da linha 1 w move o cursor uma palavra para a direita 1 W move o cursor uma palavra para a direita sem contar símbolos e pontuações 1 b move o cursor uma palavra para a esquerda 1 B move o cursor uma palavra para a esquerda sem contar símbolos e pontuações Quando salvamos um arquivo o Vi mostra na parte inferior esquerda da tela o nome e o número de linhas e de caracteres desse arquivo É importante saber que uma linha não é necessariamente limitada ao tamanho visível na tela do monitor Para finalizarmos uma linha utilizando o Vi devemos utilizar a tecla Enter no modo de inserção Se digitarmos caracteres indefinidamente em uma linha sem teclar Enter o Vi considerará que estes caracteres formam uma única linha mesmo que ela seja mostrada na tela como se fossem várias linhas Editando texto q Comandos para edição de texto 1 i inserir texto 1 a anexar texto Figura 52 Movimentando o cursor Figura 53 Comandos de movimentação do cursor 85 Capítulo 5 Edição de texto q 1 c alterar texto 1 d remover texto 1 x remover texto 1 y copiar texto 1 p colar texto copiado ou removido Ao editarmos um arquivo necessitamos fazer diversas operações como inserção remoção substituição entre outras Os comandos a seguir são utilizados para realizar algumas das mais comuns alterações em um arquivo texto 1 i inserir texto 1 a anexar texto 1 c alterar texto 1 d remover texto 1 x remover texto 1 y copiar texto 1 p colar texto copiado ou removido A Figura 54 mostra um texto com diversos erros e as correções necessárias O Vi permite fazer essas correções no texto utilizando teclas básicas de edição Substituindo texto O comando c permite fazer alterações utilizando combinações de comandos de movimen tação do cursor como pode ser visto nos exemplos cw substituir uma palavra ou parte de uma palavra onde o cursor estiver posicionado Se o cursor estiver posicionado no meio da palavra ela será substituída da posição do cursor até o fim da palavra Por exemplo para trocar fazer por fazendo devemos posicionar o cursor na letra r digitar o comando cw e inserir as letras ndo cc substituir a linha inteira onde o cursor está posicionado Para executar esse comando o cursor pode estar posicionado em qualquer local da linha que será substituída cb substituir uma palavra ou parte de uma palavra onde o cursor estiver posicionado Se o cursor estiver posicionado no meio da palavra ela será substituída da posição do cursor até o início da palavra Por exemplo para substituir a palavra fazendo pela palavra trazendo devemos posicionar o cursor na letra z digitar o comando cb e inserir as letras tra Figura 54 Comandos de edição 86 Introdução ao Linux c altera o texto da posição do cursor até o fim da linha c0 altera o texto da posição do cursor até o início da linha q O comando c permite fazer alterações no texto mediante combinações de comandos de movimentação do cursor como 1 cw altera o texto da posição do cursor até o fim da palavra 1 cb altera o texto da posição do cursor até o início da palavra 1 cc permite substituir a linha inteira onde o cursor está posicionado 1 c altera o texto da posição do cursor até o fim da linha 1 c0 altera o texto da posição do cursor até o início da linha Após digitar o comando de alteração podemos inserir qualquer texto sem limite de carac teres A inserção ou modificação de texto também pode ser feita com os seguintes comandos r substituir o caractere onde o cursor está posicionado sem sair do modo de comando Esse comando pode ter seu efeito multiplicado se for precedido por algum número Por exemplo para substituir as próximas três letras a contar da posição do cursor o comando 3r deve ser utilizado É muito útil para corrigir erros de digitação no texto evitando o uso de cw que obriga a digitação de parte da palavra novamente s substituir o caractere onde o cursor está posicionado entrando automaticamente no modo de inserção Esse comando pode ter seu efeito multiplicado se for precedido por algum número Por exemplo para substituir as próximas três letras a contar da posição do cursor o comando 3s deve ser utilizado A diferença desse comando para o anterior é que ele entra no modo de inserção enquanto o outro permanece no modo comando C substituir o texto de uma linha a partir da posição do cursor até o final da linha funcio nando da mesma forma que o comando composto c R substituir texto de forma que cada caractere digitado se sobrepõe ao caractere original Esse modo de substituição altera no máximo uma linha substituindo caractere por caractere S alterar linhas inteiras removendo a linha independentemente de onde o cursor estiver posicionado O número que preceder esse comando determina quantas linhas serão substi tuídas Para retornar ao modo comando devese teclar Esc após terminar a substituição alterar o caractere onde o cursor está posicionado de minúscula para maiúscula e viceversa É possível também utilizar números multiplicadores precedentes ao comando de modo que altere vários caracteres q A inserção ou modificação de texto também pode ser feita com os seguintes comandos 1 r substituir caracteres sem entrar no modo de inserção 1 s substituir caracteres entrando automaticamente no modo de inserção 1 C substituir o texto de uma linha a partir da posição do cursor até o final da linha 1 R substituir o texto de forma que cada caractere digitado se sobrepõe ao caractere original Só pode substituir caracteres da linha corrente 1 S alterar linhas inteiras removendo a linha onde o cursor estiver posicionado 1 alterar o caractere onde o cursor está posicionado de minúscula para maiúscula e viceversa 87 Capítulo 5 Edição de texto Exercício de fixação 1 e Primeiro arquivo com Vi Acesse o terminal e crie no diretório home do seu usuário o primeiro arquivo chamado Arquivo1txt Escreva o texto abaixo tentando utilizar os atalhos citados Qual o seu nome Meu nome é Aluno Acesse o manual do editor Vi através do comando man vi Removendo texto q 1 dl remove o caractere onde o cursor está posicionado 1 dd remove a linha corrente 1 dw remove uma palavra da posição do cursor em diante 1 db remove uma palavra da posição do cursor para trás 1 d0 remove os caracteres de uma linha da posição do cursor até o início da linha 1 d remove os caracteres de uma linha da posição do cursor até o final da linha Com o comando d podemos remover qualquer texto no arquivo editado Assim como o comando c o comando d de remoção necessita ser acompanhado de uma tecla que defi nirá a abrangência do texto que será removido A seguir são vistas as opções que podem ser utilizadas com o comando d dl remove o caractere onde o cursor está posicionado É possível também utilizar números multiplicadores precedentes ao comando de modo que ele remova diversas linhas dd remove a linha corrente É possível também utilizar números multiplicadores prece dentes ao comando de modo que ele remova diversas linhas dw remove uma palavra O comando dw executado no meio de uma palavra remove apenas a parte final dessa palavra É importante notar que o espaço em branco após a palavra também é removido de remove os caracteres de uma palavra mantendo os espaços em branco após a palavra dE remove os caracteres até o final da palavra incluindo a pontuação se houver db remove os caracteres de uma palavra da posição do cursor até o início da palavra d0 remove os caracteres de uma linha da posição do cursor até o início da linha d remove os caracteres de uma linha da posição do cursor até o final da linha Rolagem do arquivo q 1 CtrlF rola a tela inteira para a frente no texto 1 CtrlB rola a tela inteira para trás no texto 1 CtrlD rola a metade da tela para a frente no texto 1 CtrlU rola a metade da tela para trás no texto 1 CtrlE rola a tela uma linha para cima 1 CtrlY rola a tela uma linha para baixo 1 zEnter rola a linha corrente para o topo da tela 88 Introdução ao Linux q 1 gg move o cursor para a primeira linha do arquivo 1 G move o cursor para a última linha do arquivo Durante a inserção de texto quando chegamos ao final da última linha da parte inferior da tela a primeira linha da parte superior deixa de ser mostrada todas as linhas sobem na tela e uma nova linha passa a ser mostrada na posição da linha inferior Essa movimentação é chamada de scrolling ou rolagem de tela Alguns comandos para rolamento de tela CtrlF rola a tela inteira para a frente no texto CtrlB rola a tela inteira para trás no texto CtrlD rola a metade da tela para a frente no texto CtrlU rola a metade da tela para trás no texto CtrlE rola a tela uma linha para cima CtrlY rola a tela uma linha para baixo zEnter rola a linha corrente para o topo da tela gg move o cursor para a primeira linha do arquivo G move o cursor para a última linha do arquivo O comando z pode ser precedido pelo número da linha que será utilizada no lugar da linha corrente Por exemplo o comando 200zEnter rola a linha 200 do texto para o topo da tela e não a linha corrente Existem outros comandos de rolagem além dos comandos acima que podem ser consultados em guias de referência do Vi na internet Se abrirmos o Vi no ambiente gráfico utilizando o Xterm a exibição do texto do arquivo será feita dentro da janela do Xterm que pode ou não estar ocupando toda a tela do monitor Quando o número de linhas do texto for maior que o número de linhas configurado na janela aparecerão no lado direito da janela botões de scrolling Esses botões permitem o rolamento do texto utilizandose um mouse Comando de busca q 1 O comando de busca é o caractere que mostra uma barra na linha inferior da tela onde deve ser digitado o texto que será o padrão a ser procurado 1 Este padrão de busca pode ser uma palavra ou qualquer sequência de caracteres Os espaços em branco também são considerados parte do padrão 1 O Vi inicia a procura do padrão na posição do cursor seguindo adiante no arquivo e ao chegar ao final volta ao início do arquivo e continua a procura até a posição do cursor 1 O cursor é movido para a posição da primeira ocorrência do padrão procurado Se não há nenhuma ocorrência do padrão a mensagem Pattern not found é mostrada na parte inferior esquerda da tela O comando de busca é o caractere que quando teclado mostra uma barra na linha inferior da tela onde deve ser digitado o texto que se quer procurar Esse padrão de busca pode ser uma palavra ou qualquer sequência de caracteres Os espaços em branco também são considerados como parte do padrão O Vi inicia a procura do padrão na posição do cursor seguindo adiante no arquivo e ao chegar ao final volta ao início do arquivo e continua a procura até a posição do cursor Se o padrão for encontrado o cursor é movido para a posição de sua primeira ocorrência 89 Capítulo 5 Edição de texto Se não há nenhuma ocorrência do padrão a mensagem Pattern not found é mostrada na parte inferior esquerda da tela Na verdade essa mensagem pode variar dependendo da versão do Vi ou do Linux mas o significado será o mesmo Para realizar a procura no sentido inverso voltando sobre o texto devemos utilizar o comando Nesse caso a pesquisa é feita até o início do texto e reiniciada no final até chegar à posição do cursor Os comandos a seguir podem ser utilizados para repetição da última busca com o último padrão utilizado Isso evita a digitação de todo o padrão nova mente o que é útil para encontrar diversas ocorrências repetidas de um mesmo padrão n repete a busca na mesma direção N repete a busca na direção oposta Enter repete a busca adiante no texto Enter repete a busca voltando no texto Os comandos de repetição de busca permitem achar padrões realizar alterações e iniciar novas buscas facilitando substituições em todo o texto Podese combinar simultaneamente o comando de busca com o de substituição para alterar todas as ocorrências de uma palavra por outra O comando abaixo faz uma busca partindo da primeira linha 1 até a última e substitui as ocorrências da palavra umapalavra pela palavra novapalavra 1sumapalavranovapalavra q 1 Para realizar a procura no sentido contrário voltando sobre o texto devemos utilizar o comando 1 Comandos para repetição em buscas 2 n repete a busca na mesma direção 2 N repete a busca na direção oposta 2 Enter repete a busca adiante no texto 2 Enter repete a busca voltando no texto 1 Combinando o comando de busca com o de substituição podemos por exemplo alterar todas as ocorrências de uma palavra por outra em todo o texto como no exemplo 1sumapalavranovapalavra Exercício de fixação 2 e Busca no arquivo com Vi Acesse o arquivo criado no exercício anterior e teste os comandos de busca utilizando todos os recursos citados Comandos combinados Conhecemos nos itens anteriores algumas combinações de comandos utilizando também números multiplicadores Na Tabela 51 são mostrados exemplos de combinações possíveis de comandos e suas ações correlatas 90 Introdução ao Linux Alteração Remoção Cópia Do cursor a cH dH yH primeira linha da tela cL dL yL última linha da tela c d y próxima linha c5I d5I y5I coluna 5 da linha corrente cpadrão dpadrão ypadrão padrão cn dn yn próximo padrão cG dG yG última linha do arquivo c13G d13G y13G linha 13 do arquivo Vimos que o Vi é um editor simples porém muito poderoso que nos oferece grande flexibilidade para a edição de textos Entendemos agora porque é um dos editores preferidos dos administradores de sistemas Unixlike Tabela 51 Comandos combinados 91 Capítulo 5 Roteiro de Atividades Roteiro de Atividades 5 Atividade 51 Criando um texto no Vi Crie o arquivo atividades utilizando o Vi contendo o seguinte texto Brasília tem caso suspeito de parasitose do peixe cru BRASÍLIA A Secretaria de Saúde do Distrito Federal detectou o primeiro caso suspeito de difilobotríase parasitose intestinal transmitida pela ingestão de peixe cru ou mal cozido que já atingiu pelo menos 27 pessoas em São Paulo nos últimos doze meses A possível vítima uma mulher de 25 anos teria se contaminado em outro estado A vigilância sanitária local prometeu reforçar os cuidados nas operações de fiscalização a estabelecimentos comer ciais pretendendo centrar as atenções na forma de armazenamento dos peixes A suspeita de contaminação foi notificada pela Secretaria de Saúde local no último dia 6 O laudo do laboratório contratado pela Secretaria está sendo aguardado para os próximos dias com a confirmação da presença do parasita no organismo da vítima O infectologista Alexandre Cunha que atendeu a paciente afirmou que fez uma análise morfológica do parasita encontrado em amostra das fezes da vítima e constatou tratarse do causador da difilobotríase Ainda não temos certeza da contaminação Esse tipo de parasita não é comum no Brasil Mas o congelamento do peixe de forma adequada impede a transmissão explicou a dire tora de vigilância epidemiológica local Disney Antezana A Agência Nacional de Vigilância Sanitária Anvisa recomenda que se evite o consumo de peixes crus ou se certifiquem de que o produto esteve congelado em pelo menos 20 graus negativos por no mínimo sete dias Para matar o transmissor também é possível manter o peixe em 35 graus negativos por 15 horas Carolina Brígido O Globo Os caracteres acentuados podem ser digitados sem acento caso o sistema opera cional não possua suporte à acentuação Atividade 52 Usando recursos básicos do Vi Utilize os comandos básicos do Vi para realizar funções simples de cada vez em sequência ou seja movimentação inserção remoção ou busca para executar as seguintes edições no texto a Pesquise o número de ocorrências da palavra que b Apague as linhas da posição do cursor até o final do arquivo c Movimente a linha 2 para o final do texto d Coloque o nome Anvisa em maiúsculas e Apague os 15 primeiros caracteres da linha 3 Como essa ação poderia ser feita utilizando outro comando f Volte ao prompt do Linux sem salvar as modificações no texto 92 Introdução ao Linux Atividade 53 Combinando recursos do Vi a Encontre e altere as ocorrências da palavra que colocandoas em maiúsculas execu tando uma combinação de comandos que faça esta ação de uma só vez b Remova do quinto caractere da linha 1 até o final desta linha c Substitua todos os espaços em branco do texto pelo caractere d Sem sair do Vi informe quantos bytes tem o arquivo que está sendo editado e Apague as cinco primeiras palavras da linha 1 f Volte ao prompt do Linux sem salvar as modificações no texto Atividade 54 Execução de comandos diversos a Executando um comando de movimentação vá para a linha 3 e apague as linhas 3 e 4 b Mova as linhas da posição atual do cursor até a última linha para o início do texto c Desfaça as duas últimas alterações d Refaça somente a última alteração e Copie as duas primeiras linhas e coleas no fim do arquivo f Volte ao prompt do Linux sem salvar as modificações no texto Atividade 55 Execução de comandos avançados a Abra o arquivo atividades de forma que o cursor fique posicionado na linha 3 b Utilize um único comando para apagar todas as linhas do texto que não possuam a palavra Anvisa c Salve o arquivo com o mesmo nome no diretório tmp d Remova todas as linhas que contenham a palavra peixe utilizando um único comando e Sem sair do arquivo atividades abra na mesma janela do Vi o arquivo etcprofile f Volte ao prompt do Linux salvando as modificações feitas no arquivo atividades 93 Capítulo 6 Shell objetivos conceitos 6 Shell Conhecer o funcionamento do Shell e aprender a lidar com seus processos Shell gerenciamento criação e execução de processos ambientes e suas variáveis e noções de Shell Script Noções básicas Shell é um ambiente de interpretação de comandos Ele é a ponte entre o usuário e o sistema operacional ou seja é através dele que o usuário requisita ações ao sistema utilizandose de comandos Podemos observar a atuação do Shell quando abrimos um ter de comandos Podemos observar a atuação do Shell quando abrimos um ter minal ou console e executamos comandos como ls cat touch mkdir cp rm mv etc A interação do usuário com o Shell adquire a forma de um diálogo Primeiramente o Shell solicita uma entrada ao usuário mostrando um prompt na tela do terminal Assim que um comando é digitado o Shell o executa Este comando pode fazer parte de seus comandos internos built in ou ser algum outro comandoprograma do sistema operacional Quando a tarefa do comando foi completada o Shell uma vez mais solicita nova entrada ao usuário mostrando novamente o cursor de modo que se possa continuar digitando comandos e interagindo com o Shell A Figura 61 mostra a sequência de passos em um diálogo do usuário com o Shell 94 Introdução ao Linux Login acesso Shell pede um comando O usuário digita o comando Shell faz executar o comando O usuário interage com o utilitário O usuário digita CtrlD Logout saída Shell pede novo comando q O Shell é tão poderoso que suporta várias funcionalidades como 1 Redirecionamento de entrada e saída de aplicações como por exemplo ls home saida 1 Execução de sequências de comandos cat etcpasswd grep root 1 Escrita na saída padrão ou redirecionada echo Este é um curso de Introdução ao Linux 1 Automatização de sequências de comandos programação Ele possui ainda uma poderosa ferramenta de programação permitindo a automatização de tarefas complexas por usuários ou administradores A não ser que seja feito um redireciona mento a entrada padrão do Shell é o teclado e a saída é o monitor Podemos fazer com que o Shell escreva qualquer coisa na saída padrão ou saída redirecionada através do comando echo Essa informação pode ser por exemplo um texto echo Este é um curso de Introdução ao Linux O uso das aspas é opcional No entanto convencionase usálas para indicar ao Shell que não é necessário interpretar aquele conteúdo basta mostrálo na saída dese jada Essa convenção será obrigatória em outras ocasiões Cada conta de usuário quando criada recebe um Shell padrão através do qual aquele usuário fará a interação em modo texto com o Sistema Operacional Para o Linux são vários os Shells disponíveis Os mais comuns são os da família Bourne Shell dentre eles o Bourne Shell sh e o Bourne Again Shell bash O bash é o mais usado nas distribuições Linux Há ainda os da família C Shell como o csh que possui suporte à computação numérica bastante deficitário na família Bourne mas com a desvantagem de ter uma sintaxe parecida com a linguagem C não muito fácil de ser utilizada A diferença entre os diversos Shells exis tentes está basicamente nas funcionalidades incorporadas e na sintaxe dos comandos que podem ser simples ou mais complexas Figura 61 Diálogo do usuário com o Shell 95 Capítulo 6 Shell Para saber qual Shell está configurado para o seu usuário basta verificar no arquivo etcpasswd E para saber os Shells que estão disponíveis no seu Linux basta verificar o arquivo etcshells Este curso é focado no Shell bash Gerenciamento de processos q O que é um processo 1 Um programa em execução Duração de um processo 1 Enquanto houver instruções para serem executadas Recursos e gerenciamento 1 Os processos utilizam recursos como processador e memória e são organizados e gerenciados pelo Sistema Operacional Processo INIT 1 Processo pai de todos os outros processos Escalonamento 1 Baseado em timesharing Um processo é um programa em execução A vida de um processo começa no início de um programa e dura enquanto as instruções do programa continuarem a especificar novas ope rações Quando o programa chega ao final isto é o sistema operacional termina a execução de suas instruções o processo relativo a este programa morre O processo utiliza recursos do computador como processador e memória para realizar suas tarefas É de responsabilidade do sistema operacional organizar e gerenciar todos os processos Quando o sistema é iniciado a função start kernel cria o processo número zero que é uma thread que gerará todos os demais processos Esta função chama a função init que será o processo número um O processo INIT será o pai de todos os processos e um dos últimos a morrer O conceito de thread está associado às máquinas multiprocessadores e atividades concorrentes Usualmente é definido como um fluxo de controle no interior de um processo Quando dois processos compartilham as mesmas estruturas eles atuam como se fossem diferentes threads no interior de um único processo No Linux threads e processos são tratados da mesma forma O gerenciamento de processos permite a estruturação dos programas executados pelo sistema Quem decide que processo deve ser executado a cada momento é o escalonador Ele faz isso de forma que não seja desperdiçado tempo de hardware garantindo a eficiência do sistema O escalonador do Linux é baseado em timesharing ou seja o tempo do processador é dividido em fatias de tempo quantum em que são alocados os processos Se durante a exe cução de um processo esgotase o quantum um novo processo é selecionado para execução através das regras de escalonamento que se baseiam nas prioridades atribuídas a cada processo Como o quantum é bastante pequeno temse a impressão de que o sistema opera cional executa vários processos ao mesmo tempo característica chamada de multitarefa 96 Introdução ao Linux q Requisições feitas pelos processos ao Sistema Operacional 1 Criar processos gerenciar memória ler e escrever arquivos etc 1 Exemplos fork exec exit kill 1 As chamadas de sistema alteram o ciclo normal de vida de um processo Como é feito o controle de um processo 1 Através de características como estado prioridade de execução recursos de memória etc 1 O processo é identificado pelo PID e PPID processopai que o criou 1 ps f visualiza essas informações Existem diversas chamadas de sistema no Linux que alteram o ciclo normal de vida de um processo As chamadas de sistema são requisições feitas pelos processos ao sistema opera cional por recursos aos quais ele não consegue acessar As chamadas são usualmente para criar processos gerenciar memória ler e escrever arquivos e fazer entrada e saída Estão entre as mais comuns fork exec exit kill O controle dos processos é feito através de um conjunto de características como proprie tário do processo seu estado se está em espera em execução etc prioridade de execução e recursos de memória Para que se viabilize o controle cada processo é identificado com um único número chamado de process identifier ou PID Cada processo possui um pro cessopai exceto o processo init que é o PID do processo que o criou chamado de parent process identifier ou PPID O comando ps f permite visualizar esses números q Permissões controladas pelo UID e GID 1 Root UID 0 1 Para usuário ter privilégios de root GID 0 1 Visualizados no arquivo etcpasswd 2 Ex rootx00rootrootbinbash os números são UID e GID respectivamente O controle das permissões dos processos funciona usando a mesma lógica Os adminis tradores do sistema atribuem números para os usuários user identifier ou UID e para grupos group identifier ou GID quando são criadas as contas de usuário O sistema usa o UID e o GID de um usuário para recuperar informações de sua base de dados relativas aos privilégios permitidos para o usuário O usuário de maior privilégio é o root também conhecido como superusuário que tem o UID igual a 0 zero em uma escala que vai além de 65 mil dependendo do sistema operacional O usuário root é usualmente o administrador do sistema possuindo plenos poderes Cada processo pertence a um usuário e também pertence ao seu grupo Para fazer com que um usuário tenha os mesmos privilégios que o root é necessário que o GID dele seja 0 No arquivo etcpasswd é possível visualizar o UID primeiro número que aparece e o GID segundo número de cada usuário criado se não for especificado o sistema operacional cria um grupo para cada usuário Criação de processos q Os processos são criados a partir de outros processos processospai 1 Processo inicial INIT 97 Capítulo 6 Shell q A criação se dá através de 1 Duplicação de um processo já existente 2 Operação forkexec 2 Execução concorrente 2 fork duplica o processo 2 exec substitui o código antigo pelo novo no processo criado No Linux somente o processo INIT é criado a partir do zero Todos os demais processos são criados a partir dele A criação de um processo é baseada em uma operação do tipo forkexec na qual um processo já existente se duplica através de uma chamada de sistema chamada fork e em seguida substitui seu código por outro através da chamada de sistema exec permi tindo que o código do filho seja executado sem que o código dele seja prejudicado Isso acontece quando digitamos um comando no Shell O bash no nosso caso se duplica usando fork e então chama o exec para sobrepor sua memória com os conteúdos do comando solicitado Essa combinação permite que os processos gerados sejam concor rentes ou seja executem de forma independente uns dos outros A Figura 62 ilustra outro exemplo típico no qual um programa de menu oferece uma opção de três telas de entrada de dados Quando o usuário faz uma seleção o programa de menu bifurca um processopai que executa o programa escolhido e o programa de entrada de dados roda até a sua conclusão Enquanto isso o programa de menu pode ser usado para outra opção o que gera uma nova bifurcação EXEC FORK EXEC Processo 1 executando programa menu Processo 2 executando programa menu Processo 2 executando a opção 1 Processo 1 executando programa menu No fork o PID de cada um dos processos clonados é diferente No entanto o PPID é igual observe a árvore hierárquica dos processos e seus PIDs via comando pstree p No exec como ele faz simplesmente uma sobreposição de conteúdo os PIDs dos dois processos são iguais Existe ainda a função clone semelhante à fork mas com algumas características diferentes Da mesma forma é possível executar processos de forma sequencial sem que haja uma bifurcação ou duplicação de código Através da chamada de sistema exec o kernel carrega o novo programa na memória e inicia a execução do novo processo especificado pelo exec Este novo programa começa a execução no mesmo ambiente do seu predecessor Os arquivos abertos pelo programa anterior permanecem abertos para o novo processo que também retém as identidades do usuário e do grupo de usuários A Figura 63 mostra um exemplo simples de como a sequência de programas de impressão de relatório pode ser executada usandose exec EXEC EXEC Processo imprime o Relatório 1 Processo imprime o Relatório 2 Processo imprime o Relatório final Figura 62 Execução concorrente Figura 63 Execução sequencial 98 Introdução ao Linux O primeiro processo imprime o relatório antes de exec executar o segundo programa de impressão de relatório O segundo programa acrescenta seus relatórios chama o terceiro programa para imprimir o relatório final e finalmente fecha os arquivos e termina o pro cesso As chamadas exec são usadas muito similarmente ao encadeamento de programas A função exec faz com que o processo por ele chamado substitua o processo em execução Assim qualquer sequência que houver neste processo após o comando exec não será executada Processos em background e daemons q Daemon é um processo executado em background 1 Geralmente não tem tempo de vida definido Tarefas nas quais os daemons são usados 1 Paginação de memória 1 Solicitações de login 1 Manipulação de emails 1 Transferência de arquivos 1 Coletas de estatísticas de operações do sistema 1 Solicitações de impressão Quando um comando é digitado pelo usuário por intermédio da entrada padrão o teclado o Shell solicita ao kernel do sistema operacional a execução deste comando aguarda pela sua finalização e exibe o resultado do comando na tela voltando a aguardar a entrada de novos comandos Quando a entrada e saída padrão são o teclado e o terminal de vídeo o usuário pode terminar a execução de um comando digitando o caractere de interrupção por default CtrlC ou C Este tipo de execução de processo pelo Shell é chamado de fore ground ou em primeiro plano Podese também executar o mesmo processo em back ground ou em segundo plano de forma que o usuário não precisa ficar aguardando pela finalização do processo para entrar com um novo comando pois o prompt é automatica mente liberado para a entrada de novos comandos Utilizase o caractere para a execução de um comando em background A sintaxe utilizada é a seguinte comando A execução de um comando em background permite ao usuário executar outros comandos simultaneamente Estes comandos são executados imediata e independentemente de já haver um processo em execução Outra vantagem é utilizar a execução em background para realizar tarefas demoradas como a impressão de arquivos extensos ou a execução de sort ou find em arquivos grandes ou ainda programas que serão executados por algum tempo como por exemplo um navegador web um editor de textos etc Entretanto devese tomar cuidado ao rodar scripts em background pois a saída continua a ser a padrão e podem aparecer resultados do programa na tela atrapalhando a visuali zação de outras tarefas do usuário É recomendável que a saída do processo em background seja redirecionada para um arquivo usando a seguinte sintaxe comando arquivo 21 1 pid 99 Capítulo 6 Shell Desta forma toda a saídapadrão e a saída de erros serão redirecionadas para o arquivo O número do processo correspondente é mostrado logo a seguir Este número pode ser usado para finalizar o processo ou monitorálo Quando o processo termina uma men sagem é mostrada assim que pressionamos uma tecla qualquer geralmente a tecla Enter A mensagem tem a seguinte forma 1 Done comando q 1 Cron usado para programar tarefas 1 Editando o crontab do usuário é possível programar tarefas crontab e 1 Na última linha do arquivo programase o comando Exemplo 03 17 cp etcpasswd homeUSERpasswd 1 Onde 03 são os minutos e 17 a hora Um daemon é um processo executado em background e normalmente não tem tempo de vida definido podendo ser executado por tempo indeterminado O sistema operacional Linux utiliza muitos daemons para realizar rotinas e tarefas como a paginação da memória as solicitações de login a manipulação de emails a transferência de arquivos a coleta de estatísticas de operação do sistema e as solicitações de impressão Um daemon interessante é o cron Ele acorda uma vez por minuto para ver se existe algum trabalho a ser feito Caso exista ele o faz Depois volta a dormir até o momento da próxima verificação Para programar as tarefas que devem ser realizadas pelo cron basta editar o crontab do usuário através do comando crontab e E seguir a sintaxe especificada no próprio arquivo agendando minutos horas dias mês dia da semana e tarefa a ser executada lembrese de deixar uma linha em branco no final do arquivo para garantir que o último comando seja lido Assim é possível automatizar qualquer tarefa como um backup por exemplo Para ver as tarefas agendadas utilize o comando crontab l Se o agendamento não funcionar reinicie o cron com o comando sudo restart cron Sinais do sistema q Um sinal é uma notificação de software enviada por um processo ou pelo sistema opera cional relativo a um evento ocorrido Sinais são usados para passar informações 1 ABRT aborta o processo 1 INT sinal de CtrlC 1 Outro processo pode usar o sinal para realizar alguma ação se ele ativar seu manipu lador de sinais Alguns sinais são gerados por comandos no Shell Exemplo kill 9 pid 100 Introdução ao Linux q 1 Usado para terminar a execução de um processo Para manter a execução de um processo após o logout nohup arquivo 1 A saída do arquivo é redirecionada para o arquivo nohupout no diretório home do usuário Os processos concorrentes são de natureza assíncrona ou seja não há uma ligação neces sária entre a execução destes processos Alguns processos podem necessitar de informa ções sobre o estado de outros processos que estão sendo executados simultaneamente Para passar informações entre processos são utilizados sinais um sinal é uma notificação de software enviada por um determinado processo ou pelo sistema operacional relativo a um evento neles ocorrido Outro processo pode utilizar este sinal para realizar uma ação O tempo de vida de um sinal é o intervalo entre sua geração e seu envio Um sinal que foi gerado mas não foi enviado é um sinal pendente Um determinado processo recebe um sinal se tiver ativado um manipulador de sinais quando o sinal for enviado Um programa ativa um manipulador de sinais através de uma chamada de sistema com o nome do programa do usuário Um processo pode temporariamente bloquear o recebimento de um sinal de forma que este sinal bloqueado não afete a execução do processo mesmo que seja enviado Bloquear um sinal é diferente de ignorar um sinal Quando um processo bloqueia um sinal o sistema operacional não envia o sinal até que o processo o desbloqueie De outra forma um processo pode ignorar um sinal em vez de bloqueálo neste caso o processo manipula o sinal recebido e o descarta sem utilizálo Na Tabela 61 são apresentados alguns desses sinais Alguns sinais também são gerados por comandos no Shell como o comando kill utilizado quando queremos terminar um processo Ele utiliza o número associado ao processo para terminálo A sintaxe do comando é kill pid Após a digitação ao teclar Enter a seguinte mensagem será mostrada informando que o processo foi terminado 1 Terminated process Se nenhuma mensagem de indicação de finalização do processo for mostrada aguarde um minuto pois a terminação do processo pode estar sendo realizada Caso haja demora exces siva podese executar outra forma do comando kill kill 9 pid 1 Killed process Este comando fará com que a terminação do processo seja realizada de maneira imediata enquanto outros processos em background continuam a ser executados após o logout Sinal Exemplo ABRT Aborta o processo ALRM Sinal do temporizador da chamada de sistema alarm CHLD Termina interrompe e continua o processofilho CONT Continua a execução do processo interrompido 101 Capítulo 6 Shell Sinal Exemplo FPE Sinaliza erro em operação aritmética como a divisão por zero ILL Indica instrução inválida INT Sinal de CtrlC KILL Indicação de processo terminado que não pode ser ignorada PIPE Saída de um pipe não recebida SEGV Referência de memória inválida STOP Sinal de interrupção de processo de execução TERM Sinal de término de processo TSTP Interrompe a digitação de caracteres no terminal TTIN Processo em background aguardando entrada do terminal TTOU Processo em background aguardando saída do terminal URG Dados de alta prioridade disponíveis em um socket Para manter a execução de um processo após o logout deve ser usado o comando nohup nohup arquivo Este comando executa o arquivo de forma que não seja encerrado com a saída da sessão de trabalho A saída do arquivo é redirecionada para o arquivo nohupout no diretório home do usuário o que é muito útil por exemplo quando se quer executar programas longos e há necessidade de se ausentar e terminar a sessão Visualização de processos q Quando um processo está sendo executado podemos usar o seu número de identifi cação para verificar o estado da sua execução por meio do comando ps ps ps aux ps l 1 Lista de informações UID PID PPID PRI STAT TIME COMM CPU TTY INTPRI SZ e WCHAN 1 Usado também em canalizações para produção de filtros ps aux grep mozilla Quando um processo está sendo executado podemos usar o seu número de identificação para verificar o estado da sua execução por meio do comando ps O comando ps sozinho sem argumentos mostra apenas os processos associados ao usuário Já o comando ps aux mostra todos os processos em execução no sistema no momento inclusive os daemons Outra opção é o comando ps l que retorna uma longa lista associada a cada processo incluindo as seguintes informações 1 UID identificador do usuário dono do processo 1 PID identificador único associado a cada processo Tabela 61 Sinais do sistema 102 Introdução ao Linux 1 PPID identificador único associado ao processopai do processo em questão 1 PRI prioridade do processo programas de prioridade mais alta conseguem mais rapida mente a atenção da CPU 1 STAT situação atual ou estado do processo com as seguintes opções O não existente I processo intermediário R executando running S dormindo sleeping W em espera waiting Z processo terminado T processo parado stopped 1 TIME tempo decorrido desde a emissão do comando que deu origem ao processo até o momento de emissão do comando em minutos e segundos 1 COMM nome do comando submetido pelo terminal especificado no parâmetro TTY 1 CPU porcentagem de utilização da CPU pelo processo 1 TTY terminal TTY ao qual foi submetido o comando que deu origem ao processo 1 INTPRI prioridade do processo internamente ao kernel 1 SZ tamanho em kilobytes 1024 bytes da imagem do processo no kernel 1 WCHAN evento sob o qual o processo está aguardando quando está nos estados de espera W ou dormindo S O comando ps também pode ser executado em canalizações com o comando grep o que facilita encontrar as informações sobre processos executados em background Por exemplo ps aux grep mozilla Permite mostrar apenas os dados do processo que está executando o navegador web Mozilla Variáveis de ambiente q São utilizadas para manipular as posições de armazenamento na memória do computador É possível acessar essa posição armazenando lendo modificando o dado lá gravado 1 Uma variável tem um nome e um valor a ela associado 1 Os conteúdos das variáveis são preenchidos através do comando de atribuição teste10 não deve haver espaço entre os ele mentos de uma atribuição 1 Para visualizar o conteúdo de uma variável echo teste Outros exemplos X1 funciona Xteste funciona Xvarias palavras erro Xvarias palavras funciona XY unidades o Y será substituído pelo valor da variável Y 103 Capítulo 6 Shell XY unidades Y não será substituído Quando fazemos login no sistema várias ações automáticas são desencadeadas tais como leituras de arquivos execução de programas etc Estas ações acontecem para configurar um ambiente no qual o usuário realizará suas tarefas A configuração padrão default do ambiente é definida previamente em alguns arquivos por meio entre outros de variáveis de ambiente Elas são usadas pelo Shell para armazenar informações de usos específicos Na Tabela 62 são mostradas algumas dessas variáveis Variável Descrição PATH Contém uma lista de caminhos a serem pesquisados em busca de comandos Cada caminho é separado por dois pontos e é definido no arquivo etc profile seja cuidadoso a mudança neste arquivo afeta a todos os usuários HOME Contém o diretório do usuário atual local padrão destinado a armazenar suas informações É definido no arquivo etcpasswd SHELL Contém o tipo de Shell padrão para aquele usuário específico Pode ser con figurado no arquivo etcpasswd PWD Contém o diretório de trabalho mais recente RANDOM Gera um número inteiro entre 0 e 32767 IFS Contém o separador usado para separar palavras no Shell geralmente é espaço tab e nova linha As variáveis de ambiente são sempre usadas com letras maiúsculas O Shell é por característica sensível ao caso ou seja interpreta letras maiúsculas e minúsculas como sendo diferentes A visualização do conteúdo das variáveis de ambiente é feita através do comando echo Para sabermos qual Shell está sendo usado para aquele usuário específico basta executar o comando echo SHELL Devemos instruir o comando echo para mostrar o conteúdo da variável de ambiente SHELL e não a própria palavra SHELL Isso é indicado com o uso do caractere antes do nome da variável de ambiente O comando set nos permite visualizar todas as variáveis locais disponíveis no Shell corrente Para visualizarmos as variáveis de ambiente globais do Shell corrente devemos usar o comando env O comando set também pode ser usado para definir o valor de uma variável de ambiente É possível usar o comando unset para eliminar uma variável em vez de defini la com o valor null É uma tarefa relativamente simples customizar o seu ambiente no Linux Você pode visualizar como está configurado o seu ambiente digitando set Uma das principais variáveis de ambiente é a UID utilizada pelo sistema para identificar os usuários e suas permissões Algumas variáveis no entanto são do formato readonly sendo neces sárias permissões de administrador para alterálas Desta forma permanecem protegidas e mantidas sem alterações após serem definidas Para declararmos uma variável de ambiente como readonly devemos usar o comando readonly ou o comando declare com a opção r O administrador pode se necessário tornar variáveis de ambiente readonly no arquivo etcprofile O objetivo é fornecer uma visão do modo como o ambiente do usuário é definido por intermédio de variáveis Tabela 62 Algumas variáveis de ambiente do Shell 104 Introdução ao Linux Uso de aspas simples duplas e barra invertida q São usadas para proteger caracteres para que não sejam interpretados pelo Shell 1 A barra invertida protege o caractere que vem logo após ela touch meuarquivo o nome do arquivo criado será meuarquivo 1 As aspas simples protegem todos os caracteres que estão entre elas echo Estamos estudando o uso das aspas protege as aspas duplas echo Estamos estudando o uso das aspas não protege a si mesma As aspas duplas também são usadas para isso mas não protegem e echo Estamos estudando o uso das aspas echo Estamos estudando o uso das aspas echo Conteúdo do diretório home HOME echo Estamos estudando o uso das aspas não protege a si mesma As aspas simples e duplas e a barra invertida são usadas quando é necessário que os caracteres por eles marcados fiquem protegidos ou seja não sejam interpretados pelo Shell Assim temos 1 A barra invertida protege o caractere que vem logo após ela Por exemplo para criar um nome de um arquivo contendo o caractere que sabemos ser de redirecionamento temos que protegêlo touch meuarquivo 1 As aspas simples protegem todos os caracteres que estão entre eles echo Estamos estudando o uso das apas protege as aspas duplas echo Estamos estudando o uso das aspas não protege a sim mesma 1 As aspas duplas também são usadas para isso mas não protegem e echo Estamos estudando o uso das aspas echo Estamos estudando o uso das aspas echo Conteúdo do diretório home HOME echo Estamos estudando o uso das aspas não protege a sim mesma Exercício de fixação 1 e Visualização de processos Utilizando a página de manual do comando ps descreva a diferença entre o comando ps aux e ps ef Em que sintaxe cada um deles é visto 105 Capítulo 6 Shell Exercício de fixação 2 e Visualização de processos em tempo real Qual comando é usado como um monitor do sistema que mostra a atividade do processador em tempo real exibindo as tarefas que estão sendo executadas na CPU e fornecendo uma interface amigável para o gerenciamento de processos F grep F mkdir F os F top F egrep Exercício de fixação 3 e Visualização de árvore de processos Qual comando é usado para visualizar a árvore de processos F apple F tree F pstree F bg F fg Shell Script q Shell Script é uma linguagem de programação baseada no conceito de interpretação que pode ser utilizada na linha de comando do Shell Os programas escritos nessa linguagem são chamados de scripts 1 Com os comandos separados por cd homeandreiabackup tar cvf bkktar varloglog Ou pode ser utilizada para automatizar sequências de comandos em arquivos executáveis especiais 1 Com os comandos separados por ou colocados um em cada linha file arquivo utilizado para ver se um arquivo é script Com o objetivo de automatizar sequências de tarefas que serão repetidas várias vezes encapsulamonas em arquivos executáveis especiais Neles podemos escrever sequências de comandos do sistema operacional tal como fazemos no Shell adicionando também a lógica de programação Por exemplo uma das atividades rotineiras de um administrador de sistemas Linux é realizar operações de backup mantendo cópias de segurança dos arquivos importantes Supondo que vamos fazer um backup bem simples de por exemplo arquivos log gerados pasta varlog e compactalos gerando um arquivo com extensão tar colocandoo em um diretório chamado backup na área de usuário Uma sequência possível de comandos a ser digitada no Shell seria a seguinte cd homeusuariobackup tar cvf bktar varloglog 106 Introdução ao Linux Supõese aqui que o usuário atual seja chamado de usuario e que exista o diretório backup já previamente criado Se tal atividade for realizada periodicamente é interessante que seja criado um programa para automatizar essa tarefa No Shell os programas são interpretados e por essa caracte rística são chamados de scripts Assim os scripts nada mais são do que programas con tendo sequências de comandos que são interpretados pelo Shell linha após linha O script é um arquivo executável com diretrizes na linha inicial que diz qual Shell deverá interpretar aquela sequência de comandos quando o arquivo for executado Essa linha deve ser a primeira linha do script e começa com os caracteres chamados de shebang seguidos do caminho na árvore de diretórios no qual o Shell será encontrado e qual será ele O sistema de arquivos do Linux identifica um script através do conteúdo dos seus dois pri meiros bytes No entanto nem todos os arquivos são identificados através do conteúdo dos seus dois primeiros bytes Para verificar o tipo de um arquivo podese utilizar o comando file cuja sintaxe é a seguinte file arquivo Para indicar o Shell bash como o interpretador daquela sequência de comandos contida no arquivo supondo que o interpretador bash esteja no diretório bin devemos ter a primeira linha como binbash Podemos então criar um arquivo chamando de por exemplo scriptBackup e nele colocar os comandos necessários para realizar o backup dos arquivos binbash cd homeusuariobackup aqui você coloca o comentário tar cvf bktar varloglog Por padrão os comandos são colocados um em cada linha Para colocálos na mesma linha basta separálos com Para colocar linhas que não devem ser interpretadas ou seja acrescentar comentários no script basta introduzir o caractere antes da frase Para executar a sequência de comandos do script basta executar o arquivo na linha de comando do Shell scriptBackup Lembrese que o arquivo deve ser executável Para tanto devemos dar a permissão de x para o arquivo usando por exemplo o comando chmod x scriptBackup Podemos ainda incrementar o script adicionando mensagens para que o usuário acom panhe o que está sendo feito e também por exemplo incrementar o nome do arquivo de backup com a data usando o comando date binbash echo Realizando o backup dos arquivos de Log cd homeusuariobackup 107 Capítulo 6 Shell tar cvf bkdate dmYtar varloglog echo Backup concluído O comando date dmY trará a data atual do sistema no formato dia mês e ano em quatro dígitos Ele está entre crases para indicar ao Shell que ele deve ser interpretado e o resultado dele deve ser colocado naquele ponto Assim se a data atual do sistema for 08022012 o nome do arquivo a ser criado será bk08022012tar Outro exemplo de script cuja sequência de comandos busca por informações do usuário atual pode ser binbash echo Informações do usuário atual cat etcpasswd grep whoami Temos na linha 3 três comandos que devem ser executados nesta ordem O comando cat listará o arquivo passwd que contém informações sobre todos os usuários do sistema o resultado do comando servirá de entrada para o comando grep que tem por propósito filtrar todas as linhas que contenham o padrão do parâmetro No entanto este padrão só será conhecido após a execução do comando whoami que busca qual o usuário atual Por isso ele está entre crases Exercício de fixação 4 e Criando um script simples Crie um script para remover todos os arquivos texto do diretório home do usuário Se necessário crie previamente alguns arquivos de texto no diretório Não se esqueça de alterar o script para que ele se torne executável chmod x script Variáveis do Shell Script q São utilizadas para manipular as posições de armazenamento na memória do compu tador É possível acessar essa posição armazenando lendo e modificando o dado nela gravado Uma variável tem um nome e um valor associado a ela Os conteúdos das variá veis são preenchidos através do comando de atribuição Não deve haver espaço entre os elementos de uma atribuição teste10 Para visualizar o conteúdo de uma variável echo teste 108 Introdução ao Linux q Outros exemplos X1 funciona Xteste funciona Xvarias palavras erro Xvarias palavras funciona XY unidades o Y será substituído pelo valor da variável Y XY unidades Y não será substituído As variáveis são usadas para manipular as posições de armazenamento na memória do com putador Assim através da variável é possível acessar essa posição armazenando lendo modificando o dado lá gravado Uma variável tem um nome e um valor associado a ela Assim por exemplo podemos ter uma variável de nome teste com o valor 10 como seu dado ou conteúdo Os conteúdos das variáveis são preenchidos de duas formas Uma delas é através de um comando de atribuição Por exemplo teste10 não deve haver espaço entre os elementos de uma atribuição Para visualizar o conteúdo de uma variável podemos usar o comando echo echo teste Para indicar ao Shell que aquela letra ou sequência de caracteres deve ser interpretada como uma variável basta usála ao longo do programa O nome de uma variável é atribuído pelo programador Por padrão o nome deve ser representativo do que ela vai armazenar No entanto não se pode nomear uma variável com nomes já usados em comandos ou itens da sintaxe da linguagem script Os nomes de variáveis começam sempre com uma letra e são seguidos de um ou mais números e letras Não são permitidos caracteres especiais para construir o nome de uma variável apenas o caractere underline como por exemplo somatotal q Apesar de não ser necessário por ser característica própria das linguagens scripts as variáveis podem ser declaradas antes de serem usadas Isso é prática em programas grandes com uma grande quantidade de variáveis A declaração se dá com o comando declare e acontece de praxe no início do programa Assim por exemplo podemos criar uma variável atribuir um valor a ela e mandar mostrar na tela como no exemplo abaixo binbash este script declara uma variável declare curso cursoshell script echo Estamos estudando o conteúdo de curso 109 Capítulo 6 Shell Alguns outros exemplos de atribuições X1 funciona Xteste funciona Xvarias palavras erro Xvarias palavras funciona XY unidades o Y será substituído pelo valor da variável Y XY unidades Y não será substituído Um recurso poderoso do bash também pode ser usado na atribuição a uma variável a utili zação da saída de um comando que pode ser feita de duas formas utilizando comando back ticks ou crases ou a forma comando conforme o exemplo Ydate Zuptime Um cuidado deve ser tomado com as formas citadas acima o bash não preserva a forma tação da saída destes comandos eliminando assim tabulações e quebras de linhas Escopo das variáveis q É chamado de escopo o espaço na qual uma variável é visível e pode ser utilizada Uma variável criada dentro de um script só é visível e manipulável dentro desse script 1 Chamada de variável local todas as variáveis criadas nos scripts X1 Outras variáveis podem se tornar visíveis dentro e fora de um script visíveis em todo o ambiente de um Shell 1 Chamadas de variáveis de ambiente 1 Criadas através do comando export export X export Yhomeusuarioteste Chamamos de escopo de uma variável o espaço onde ela se torna visível e pode ser utilizada Uma variável criada dentro de um script só é visível e manipulável dentro deste script outras variáveis podem se tornar visíveis dentro e fora de um script visíveis em todo o ambiente de um Shell Ao primeiro tipo de variável chamamos de variáveis locais e ao segundo chamamos de variáveis de ambiente Para criar uma variável local basta lhe atribuir um valor Porém para criar uma variável de ambiente que será utilizada no Shell cor rente e em todos os scripts ou subshells lançados a partir do Shell atual é necessário usar o comando export Este comando pode ser utilizado para transformar uma variável local em global ou para criar uma variável local conforme nos exemplos abaixo X1 export X export Yhomeusuarioteste 110 Introdução ao Linux Ao iniciar um Shell é provável que muitas variáveis de ambiente já estejam definidas Para listálas podese utilizar os comandos env ou printenv Para listar todas as variáveis locais e de ambiente utilize o comando set sem argumentos Expressões e testes q 1º formato expressão Usado quando será avaliada uma operação aritmética Por exemplo para fazer com que uma variável y receba o conteúdo da soma 5 6 y5 6 As expressões em Shell são usadas em três formatos expressão Usada quando será avaliada uma operação aritmética Por exemplo para fazer com que uma variável y receba o conteúdo da soma 5 6 fazemos y5 6 Assim são suportadas várias operações aritméticas tal como mostrado na Tabela 63 Operação Sinal Exemplo Adição res1 1 ou res 11 Subtração res4 1 ou res41 Multiplicação res3 6 ou res36 Exponenciação res23 ou res23 resultado8 Divisão de inteiros res5 2 ou res52 resultado2 Resto S5 2 ou res52 resultado1 Deslocamentos de bits à esquerda S5 2 desloca 2 bits à esquerda resultado20 Deslocamentos de bits à direita S4 2 resultado2 Há ainda os operadores de incremento e decremento que somam ou subtraem de uma unidade Assim se tivermos uma variável x com valor 2 e aplicarmos a operação x teremos x com valor 3 As precedências pelos operadores aritméticos seguem a ordem descendente 1 Por exemplo na expressão r3 2 4 o operador será executado primeiro Assim o valor de r será 5 Se quisermos mudar a precedência basta utilizarmos parênteses r324 cujo resultado será 4 São suportadas também operações de comparação aritmética Tabela 63 Operações aritméticas 111 Capítulo 6 Shell Operação Sinal Exemplo Igualdade X Y Desigualdade X Y Maior que 5 3 Menor que 2 3 Maior ou igual X 3 Menor ou igual Y 1 Note que resultado de uma operação de comparação será 0 zero ou 1 um dependendo da comparação resultar em falso ou verdadeiro Exemplo echo 5 5 resultado 1 echo 5 10 resultado 0 Com relação à precedência os operadores de comparação aparecem após os aritméticos na ordem O bash suporta ainda as principais operações lógicas como E OU e a negação Estes operadores também podem ser combinados na avaliação de condições com vários termos Operação Sinal Exemplo E lógico condição1 condição2 OU lógico condição1 condição2 Negação NOT condição1 q Expressões e testes 2º formato expressão ou test expressão Usados para fazer testes em números textos e arquivos Este tipo de formato também é capaz de fazer testes em números textos e arquivos Outra forma de fazer isso é usando o comando test Algumas opções de parâmetro para uso são mostradas na Tabela 66 Operação Sinal Exemplo Igualdade eq 5 eq 5 Desigualdade ne 5 ne 4 Maior que gt 6 gt 5 Menor que lt 5 lt 6 Maior ou igual ge 6 ge 5 Menor ou igual le 5 le 6 Tabela 64 Operações de com paração aritmética Tabela 65 Principais opera ções lógicas Tabela 66 Opções de parâmetro 112 Introdução ao Linux q Além de ser usado com variáveisnúmeros o comando test também faz operações com arquivos Por exemplo para saber se o conteúdo da variável de ambiente HOME é um diretório podemos usar o comando test d HOME echo O comando echo escreve o valor 0 como o conteúdo da variável de status pois o comando foi bemsucedido ou seja HOME tem um diretório como conteúdo E combinações test HOME usr a 5 le 7 echo HOME usr a 5 le 7 echo forma alternativa Expressões e testes 3º formato expressão Esse formato é usado para testar atributos de um arquivo ou diretório fazer compara ções com strings e algumas comparações numéricas Exemplo d HOME w HOME echo Conforme vimos uma sequência de comandos pode vir na mesma linha desde que separada por No exemplo acima usamos o comando echo para mostrar o conteúdo do parâmetro que guarda o status de execução do último comando executado se zero o comando foi bemsucedido caso contrário não Assim como o conteúdo de HOME é um diretório ou seja o comando foi bemsucedido o comando echo deve imprimir valor zero Se usássemos a opção f que verifica se é um arquivo o resultado seria diferente de zero Outras opções podem ser observadas na Tabela 67 Característica Característica d É um diretório f É um arquivo normal e Se o arquivo existe também usado a r Tem permissão de leitura para meu usuário n Se o arquivo não está vazio w Tem permissão de leitura para meu usuário N Foi modificado desde a última leitura Para testes entre pares de arquivos Operaçao nt Testa se o arquivo 1 é mais novo que o arquivo 2 considerando a data ot Testa se arquivo 1 é mais velho que arquivo 2 considerando a data As opções a e o permitem combinar expressões com operadores lógicos E e OU respecti vamente Podemos inclusive combinar as opções test HOME usr a 5 le 7 echo HOME usr a 5 le 7 echo forma alternativa Na qual temos uma sequência de testes onde verificase se o conteúdo da variável HOME é diferente de usr No caso sim Ou seja o resultado é 0 O próximo teste é 5 é menor que le 7 Sim o resultado é 0 O parâmetro a quando usado com expressões significa que deve ser feita uma operação lógica E entre o resultado do que vem antes dele com o Tabela 67 Outras opções Tabela 68 Testes em pares de arquivos 113 Capítulo 6 Shell resultado do que vem depois dele A operação E só retorna verdadeiro se ambos forem ver dadeiros Com o resultado dos dois lados é zero o resultado da operação também será zero ou seja tudo verdade no teste expressão Esse formato é usado para testar atributos de um arquivo ou diretório fazer comparações com strings e algumas comparações numéricas Por exemplo d HOME w HOME echo A variável HOME contém um diretório e este diretório tem permissão de escrita o resultado será zero no comando echo ou seja bem sucedido Comando read q 1 Lê um valor da entrada padrão e coloca o conteúdo na variável indicada 1 A utilização do comando read é outra forma de atribuir valor a uma variável 1 O comando read pode também acumular a função que seria do comando echo de mostrar algo na tela 1 Através do parâmetro p é possível combinar saída e entrada no mesmo comando read Outra forma de atribuir valor a uma variável é através do comando read Quando acionado o comando read lê um valor da entrada padrão e o coloca como conteúdo da variável indicada Por exemplo binbash echo Digite seu nome read nome echo Bom dia nome No exemplo acima o comando echo solicita ao usuário que ele digite o nome O comando read fica a espera de que algo seja digitado e seja teclado enter Quando isso acontece atribui aquele conteúdo à variável nome O comando echo então escreve esse conteúdo q O comando read pode também acumular a função que seria do comando echo de mostrar algo na tela Através do parâmetro p é possível combinar saída e entrada no mesmo comando read Podemos transformar a sequência acima para esta que faz a mesma ação binbash read p Digite seu nome nome echo Bom dia nome Usado com o parâmetro s o comando read oculta a entrada dos caracteres Isso serve para por exemplo manipular senha binbash read p Usuário usuario read p Senha s senha echo e O seu usuário é usuario e sua senha é senha 114 Introdução ao Linux q 1 A opção e no comando echo faz com que seja interpretada a mudança de linha 1 Um mesmo comando read pode atribuir valores a diversas variáveis Qualquer entrada separada por espaço em branco caracterizase como diversos valores read valor1 valor2 1 Podemos ainda adicionar testes para incrementar um pouco nosso script usando o comando test binbash echo Você está entrando em uma área segura Deseja continuar sn read resposta test resposta n exit read p Usuário usuario read p Senha s senha echo e O seu usuário é usuario e sua senha é senha Forma alternativa do comando test resposta n à resposta n Neste exemplo o comando test verifica se o valor da variável resposta é n se for aplica o comando exit que encerra a execução do script senão continua a executar o script No exemplo acima podemos substituir o comando test resposta n por resposta n O resultado será o mesmo Parâmetros de linha de comando variáveis especiais q 1 Um parâmetro é um nome número ou caractere especial que armazena um valor 1 Parâmetro de linha de comando é chamado de parâmetro posicional 1 São usados para passar valores junto com o nome do programa na linha de comando Esses valores são armazenados nos parâmetros especiais e podem ser usados dentro do script soma 3 9 Ao interpretar essa linha de comando o Shell atribui os valores ali encontrados nos parâmetros posicionais começando do valor 0 e indo até o valor 9 1 Parâmetro 0 nome do programa 1 Parâmetro 1 o número 3 1 Parâmetro 2 o número 9 Um parâmetro é um nome número ou caractere especial que armazena um valor Um parâ metro de linha de comando é chamado de parâmetro posicional São usados para passar valores junto com o nome do programa na linha de comando Esses valores são armaze nados nos parâmetros especiais e podem ser usados dentro do script Assim para elaborar 115 Capítulo 6 Shell um script que se comporta como uma calculadora somando quaisquer dois números podemos deixar que o usuário de nosso script diga quais são esses dois números quando for executar o script soma 3 9 1 Assim soma seria o script 3 e 9 seriam os números a serem somados 1 Ao interpretar essa linha de comando o Shell atribui os valores ali encontrados nos parâ metros posicionais começando do valor 0 e indo até o valor 9 Assim o primeiro valor que é o nome do programa é armazenado no parâmetro 0 o número 3 no parâmetro 1 e o 9 no parâmetro 2 Para acessar o conteúdo de cada parâmetro basta por exemplo usalo com o binbash echo o nome do programa passado no parâmetro 0 é 0 echo o parâmetro 1 recebeu o valor 1 echo o parâmetro 2 recebeu o valor 2 q Para acessar o conteúdo de cada parâmetro basta por exemplo usálo com o 1 Apesar de existirem apenas 9 parâmetros posicionais é possível passar quantos valores forem necessários na linha de comando 1 Esses valores ficam armazenados numa pilha Os nove primeiros valores são alocados nos parâmetros 1 Para acessar os valores que ficaram na pilha basta usar o somando shift quantidade 1 Assim shift 1 diz ao shell para que seja ignorado o primeiro valor e que os demais sejam deslocados em uma posição 1 O parâmetro 1 passa a ter o segundo valor e o nono parâmetro passa a ter o 10º valor Esse deslocamento pode ser de qualquer valor ditado pelo comando shift 1 Alguns parâmetros especiais são também usados pelo Shell para nos mostrar algumas informações Por exemplo o parâmetro traz a quantidade de parâmetros recebidos em linha de comando Se quisermos saber quantos parâmetros basta mandar escrever Há ainda o parâmetro que contem uma lista de todos os parâ metros recebidos Observe no exemplo abaixo binbash echo o nome do programa passado no parâmetro 0 é 0 echo o parâmetro 1 recebeu o valor 1 echo o parâmetro 2 recebeu o valor 2 echo o total de parâmetros recebidos é echo lista de todos os parâmetros recebidos 116 Introdução ao Linux Outros parâmetros também são usados pelo Shell e que podemos visualizar Parâmetro Descrição Contém o status de saída do último comando a ser executado no Shell Se o comando foi executado com sucesso tem valor 0 se não terá valor diferente de 0 Contém o PID do shell Contém o PID do último processo executado em background Tabela 69 Parâmetros do Shell 117 Capítulo 6 Roteiro de Atividades Roteiro de Atividades 6 Atividade 61 Exibindo processos em estados específicos Pesquise as opções do comando ps e crie um comando para listar apenas os identificadores e nomes dos processos que estão no estado R running Verifique também o comando top uma versão interativa do comando ps atualizando a lis tagem de processos a cada n segundos e ordenandoos por uso de CPU e memória Atividade 62 Executando processos em background A partir do Shell execute um programa em background por exemplo o navegador web Observe a árvore hierárquica de processos e visualize as dependências destes processos Observe ainda seu PID e PPID e compare aos do bash Verifique também o comando jobs Ele mostra a situação de todos os processos que estão em background naquele Shell Atividade 63 Utilizando um daemon Utilize o daemon cron para realizar um backup daqui a cinco minutos dos arquivos log da pasta varlog O arquivo de backup deve ser compactado e colocado dentro de sua pasta Utilize crontab e para editar o arquivo e o comando tar zcvf destino origem para fazer a compactação dos arquivos log Atividade 64 Usando testes dentro dos scripts Crie um script que mostra qual é o usuário atual qual o diretório atual e o Shell que está usando Uma dica é lembrar que no arquivo etcpasswd encontramse listados os usuários e seus shells Use o comando cut com a sintaxe cut d DELIMITADOR f NUMERODOCAMPO O comando cut corta somente os campos de número NUMERODOCAMPO e utiliza o sepa rador DELIMITADOR para delimitar cada campo No caso do arquivo passwd o delimitador é Atividade 66 Lendo variáveis e usando expressões nos scripts Complete o script que lê três números armazenaos em três variáveis usando o comando read e escreve na tela a soma e a subtração deles binbash echo Digite o primeiro número echo Digite o segundo número 118 Introdução ao Linux echo Digite o terceiro número echo A soma destes números é soma echo A subtração destes números é sub Atividade 67 Utilizando parâmetros Crie um script que recebe 12 números por parâmetro e em seguida escreve na tela quais são eles Como são apenas 9 os parâmetros mapeados 1 até 9 você deverá usar o comando shift 3 para deslocar os três valores restantes Atividade 68 Utilizando parâmetros e testes Crie um script que verifica o número de parâmetros recebidos na linha de comando Para esta atividade você deve verificar se existe apenas um parâmetro Use o comando test para verificar e o comando exit para sair se for número incorreto de parâmetros Lembrese de que o número de parâmetros está na variável Atividade 69 Utilizando testes de diretório Continue a atividade anterior para verificar se o parâmetro é um diretório Mande uma men sagem dizendo ao usuário se é ou não Exemplo testedir home Use o teste d 1 para verificar isso Lembrese que a variável traz o status da execução se zero o comando foi bemsucedido se diferente de zero o comando não foi bemsucedido no caso o parâmetro recebido não é o nome de um diretório Atividade 610 Listando arquivos passados por parâmetro Continue a atividade anterior agora para receber dois parâmetros um nome de diretório tal como na anterior e uma letra Se o parâmetro 1 for um diretório o script deve listar todos os arquivos que começam com a letra recebida no parâmetro 2 Use o comando ls 2 119 Capítulo 7 Shell Script objetivos conceitos 7 Shell Script Aprender a controlar o fluxo de execução sequencial num script com o uso de estruturas de decisão e a criar máscaras ou padrões de pesquisas na busca por informações através de expressões regulares Estruturas de decisão e expressões regulares Estruturas de decisão q 1 São usadas para direcionar o fluxo de execução do programa 1 As ações só são tomadas após a verificação de uma condição 2 Para cada alternativa um conjunto diferente de comandos é executado Esse conceito é implementado no Shell através de duas estruturas 1 Com o comando if 1 Ou com o comando case Uma decisão é tomada a partir de possíveis alternativas baseadas em alguma condição Ou seja antes de executar uma ação é verificada uma condição Este conceito é implementado no Shell através de duas estruturas o comando if e o comando case Comando if q Sintaxe do comando if condição then comandos fi Semântica do comando 1 Avaliase a condição 1 Se após avaliada a condição o valor retornado for 2 Verdadeiro executamse os comandos dentro do if 2 Falso não se executam os comandos 120 Introdução ao Linux Durante a execução de um script pode ser necessário executar um grupo de comandos somente mediante a observação de um determinado cenário ou condição Caso não seja este grupo de comandos não deverá ser executado O bash suporta as operações de exe cução condicional por meio do comando if que possui a seguinte forma if condição then comandos fi Se a condição após ser avaliada retornar falso os comandos do if não serão executados se a avaliação gera um valor verdadeiro os comando dentro do if serão executados q A condição pode ser o resultado de um comando binbash if ls home then echo Este é o conteúdo da pasta home fi 1 No caso a condição do if é o retorno do comando ls home 1 Se existir a pasta home ele a lista e retorna comando bemsucedido fazendo com que a condição do if seja verdadeira Assim o comando echo é executado A condição pode ser também o resultado de uma comparação aritmética Por exemplo binbash read p Digite um número a read p Digite outro número b if a b 3 then echo A soma dos dois valores é maior que 3 fi Neste script são lidos dois valores e a partir daí executada a expressão da condição a b 3 Se a expressão for avaliada como verdadeira o comando echo será executado A condição pode ainda ser qualquer padrão de expressão e teste visto na unidade ante rior O exemplo abaixo testa se o arquivo bash existe no diretório bin binbash if a binbash then echo o arquivo existe fi 121 Capítulo 7 Shell Script Comando if tipos de condição q A condição do comando if pode ser o resultado de um comando binbash if ls home then echo Este é o conteúdo da pasta home fi A condição do if é o retorno do comando ls home 1 Se existir a pasta home ele a lista e retorna comando bemsucedido fazendo com que a condição do if seja verdadeira e por consequência executando o comando echo Comando if else q Sintaxe do comando if condição then comandos executados caso a condição seja verdadeira else comandos executados caso a condição seja falsa fi Semântica do comando 1 Se a condição for avaliada como verdadeira executamse os comandos do if 1 Se a condição for avaliada como falsa executamse os comandos do else A forma básica do comando if permite a execução de um grupo de comandos caso uma condição ou grupo de condições sejam verdadeiras No entanto é bastante comum ser necessário executar um grupo de comandos quando uma condição for verdadeira e outro grupo de comandos quando a condição for falsa Para tanto são utilizados os comandos if else com essa sintaxe if condição then comandos executados caso a condição seja verdadeira else comandos executados caso a condição seja falsa fi Por exemplo binbash echo read p Digite um número num 122 Introdução ao Linux if num lt 10 then echo O número num é menor que 10 else echo O número num é maior ou igual a 10 fi q Neste script é lido um número Se esse número for menor que 10 lt ou seja a ava liação da condição retornar um valor verdadeiro executase o primeiro comando echo Caso contrário executase o segundo comando echo aquele que está sob o else Outra forma de utilização do comando if é quando se deseja aninhar outras comparações caso uma condição seja falsa executase outro if Para tanto é utilizado o comando elif no lugar do else da seguinte forma if condição then comandos executados caso a condição seja verdadeira elif outra condição then comandos executados caso a outra condição seja verdadeira else comandos executados caso nenhuma opção seja verdadeira fi Por exemplo binbash read p Digite um número num if num lt 10 then echo O número num é menor que 10 elif num gt 10 then echo O número num é maior que 10 else echo O número é igual a 10 fi 123 Capítulo 7 Shell Script q Este script desmembra o script que de verificação anterior agora apontando se o número é menor maior ou igual ao número 10 Exemplo binbash read p Digite um número num if num lt 10 then echo O número num é menor que 10 else echo O número num é maior ou igual a 10 fi 1 Lêse um número read 1 Se esse número for menor que 10 lt executase o primeiro comando echo 1 Caso contrário executase o segundo comando echo aquele que está sob o else Aninhando comandos if e else q Sintaxe do comando if condição then comandos executados caso a condição seja verdadeira elif outra condição then comandos executados caso a outra condição seja verdadeira else comandos executados caso nenhuma opção seja verdadeira fi Semântica do comando 1 Se a condição do if for verdadeira executamse os comandos dele 1 Caso contrário avaliase a condição do elif 2 Se for verdadeira executamse os comandos dele 2 Caso contrário executamse os comandos do else Exemplo binbash read p Digite um número num if num lt 10 then echo O número num é menor que 10 124 Introdução ao Linux q elif num gt 10 then echo O número num é maior que 10 else echo O número é igual a 10 fi Esse script desmembra o script de verificação anterior agora apontando se o número é menor maior ou igual ao número 10 Exercício de fixação 1 e Estrutura de decisão Complete o script abaixo para que receba como parâmetro dois números e verifique qual é o maior binbash echo O número 1 é maior que o número 2 echo O número 2 é maior que o número 1 Comando case q Sintaxe do comando case variavel in valor1 comandos valor2 comandos valor comandos esac Semântica do comando 1 O conteúdo da variável é comparado aos valores valor1 valor2 e valor3 2 São executados os comandos sob o valor que se encaixa aquele que valida o teste CaracteresCuringa 1 2 Zero ou mais caracteres quaisquer 125 Capítulo 7 Shell Script q 1 2 Um caractere qualquer Formam um padrão de casamento Exemplo 1 o padrão st casaria com valores tais como start stop st ou stabcd 1 Já o padrão k casaria apenas com valores que iniciassem com a letra k e tivessem exatamente mais um caractere como por exemplo os valores k1 e kO No comando case o pode ser usado como forma de else ou valor default 1 Se o valor da variável não casou com nenhum outro padrão anterior casará com o Exemplo case valor in start echo iniciando stop echo parando echo valor não encontrado use apenas start ou stop esac O comando case provê outra forma de execução condicional sendo apropriado quando for necessário executar um comando de acordo com uma opção tipicamente um valor contido em uma variável A sintaxe do comando é case variavel in valor1 comandos valor2 comandos valor comandos esac No exemplo o conteúdo da variável é comparado aos valores valor1 valor2 e valor3 Além de valores exatos como os usados no exemplo acima podemos utilizar também caracteres curinga como o e para formar um padrão de casamento Por exemplo o padrão st casaria com valores tais como start stop st ou stabcd indica zero ou mais caracteres quaisquer Já o padrão k casaria apenas com valores que iniciassem com a letra k e tivessem exatamente mais um caractere como por exemplo os valores k1 e kO indica um caractere qualquer 126 Introdução ao Linux Uma técnica utilizada em blocos case é colocar como último padrão o como uma forma de else ou seja se o valor da variável não casou com nenhum outro padrão anterior casará com o conforme mostra o exemplo abaixo case valor in start echo iniciando stop echo parando echo valor não encontrado use apenas start ou stop esac Lembrese de que cada bloco de comandos é separado do padrão seguinte por e que o comando case é encerrado com um esac Expressões regulares q As expressões regulares são usadas para descrever formalmente os padrões de texto Com o seu uso é possível criar uma máscara ou padrão de pesquisa para buscar informações 1 As pesquisas se tornam mais abrangentes e mais poderosas Os padrões são descritos por meio de metacaracteres 1 Se a pesquisa pelo padrão gera um resultado positivo dizse que o texto casou com a expressão 1 Considerando um extrato do arquivo etcpasswd 1 Usando o comando egrep rootx00rootrootbinbash daemonx11daemonusrsbinbinsh binx22binbinbinsh couchdbx113124CouchAdministratorvarlibcouchdbbinbash lightdmx114125Light Display Managervarliblightdmbinfalse colordx115126comanagement daemonvarlibcolordbinfalse usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash As expressões regulares são usadas para descrever formalmente os padrões de texto Com seu uso é possível criar uma máscara ou padrão de pesquisa para buscar informações Assim as pesquisas se tornam mais abrangentes e mais poderosas 127 Capítulo 7 Shell Script Os padrões são descritos através de metacaracteres Se a pesquisa pelo padrão gera um resul tado positivo dizse que o texto casou com a expressão Nas Tabelas 71 a 74 são abordados alguns deles Para exemplificar cada um desses elementos tomamos como base o arquivo etcpasswd Em um extrato feito como exemplo consideraremos este conjunto de linhas rootx00rootrootbinbash daemonx11daemonusrsbinbinsh binx22binbinbinsh couchdbx113124CouchAdministratorvarlibcouchdbbinbash lightdmx114125Light Display Managervarliblightdmbinfalse colordx115126comanagement daemonvarlibcolordbinfalse usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash No qual os campos separados por são respectivamente login de usuário senha UID GID comentários do usuário tal como nome diretório home e shell do usuário Para exemplificar cada um dos casos do uso das expressões pegamos emprestado o comando egrep que tem suporte nativo para expressões regulares recuperando linhas no arquivo que seguem ou casam com aquele padrão Metacaractere Significado Indica o começo da linha Indica o final da linha Exemplo Semântica do comando egrep u etcpasswd todas as linhas que começam com a letra u resultado usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash egrep bash etcpasswd todas as linhas que terminam com a palavra bash resultado rootx00rootrootbinbash couchdbx113124CouchAdministratorvarlibcouchdbbinbash usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash Listas Significado abc Lista com três padrões a b ou c ad Lista de intervalos procura por padrões no intervalo entre as letras ou seja a b c d abc Lista negada procura por padrões que não são a b ou c joaojose Procura por cadeias de caracteres joao ou jose Tabela 71 Descrição de padrões por meta caracteres 128 Introdução ao Linux Exemplo Semântica do comando egrep Joas etcpasswd busca pelos padrões que começam com Jo e em seguida vem a ou s resultado usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash egrep ae etcpasswd busca pelos padrões que começam a linha com as letras abcd ou e resultado daemonx11daemonusrsbinbinsh binx22binbinbinsh couchdbx113124CouchAdministratorvarlibcouchdbbinbash colordx115126comanagement daemonvarlibcolordbinfalse egrep aeiou etc passwd busca pelos padrões que começam a linha com as vogais resultado usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash egrep aeiou etc passwd busca pelos padrões que começam a linha com as consoantes resultado rootx00rootrootbinbash daemonx11daemonusrsbinbinsh binx22binbinbinsh couchdbx113124CouchAdministratorvarlibcouchdbbinbash lightdmx114125Light Display Managervarliblightdmbinfalse colordx115126comanagement daemonvarlibcolordbinfalse egrep JoaoJose etc passwd busca pelos padrões cujas linhas tenham a palavra Joao ou Jose resultado usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash Quantidade Significado a2 Procura pela letra a aparecendo 2 vezes a24 Procura pela letra a aparecendo de 2 a 4 vezes a2 Procura pela letra a no mínimo 2 vezes a Procura pela letra a aparecendo zero ou uma vez a Procura pela letra a aparecendo zero ou mais vezes a Procura pela letra a uma ou mais vezes Exemplo Semântica do comando egrep 02 etcpasswd busca por linhas contenham dois zeros seguidos resultado usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash Tabela 72 Descrição de padrões por meta caracteres 129 Capítulo 7 Shell Script Exemplo Semântica do comando egrep 014 etcpasswd busca por linhas que contenham de um a quatro zeros resultado rootx00rootrootbinbash usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash egrep 1 etcpasswd busca por linhas que contenham um ou mais 1s resultado daemonx11daemonusrsbinbinsh couchdbx113124CouchAdministratorvarlibcouchdbbinbash lightdmx114125Light Display Managervarliblightdmbinfalse colordx115126comanagement daemonvarlibcolordbinfalse usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash Curingas Significado Casa com um caractere qualquer Casa com qualquer quantidade de caracteres Exemplo Semântica do comando egrep usuario etcpasswd busca pelos padrões cujas linhas tenham a palavra usuário seguida de qualquer caractere resultado usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash egrep Jo etcpasswd busca pelos padrões cujas linhas tenham Jo seguido de qualquer quantidade de caracteres resultado usuario1x10001000Joao da Silvahomejoaobinbash usuario2x10011001Jose da Silvahomejosebinbash Operador q As expressões regulares podem ser combinadas da forma que for necessária para cumprirse a tarefa desejada Podem inclusive ser usadas nos scripts que criamos basta que seja usado o operador de expressão regular como por exemplo binbash senhashellscript if senha set then echo senha é a senha correta else echo senha não é a senha correta fi Tabela 73 Descrição de padrões por meta caracteres Tabela 74 Descrição de padrões por metacaracteres 130 Introdução ao Linux q No código acima a condição do comando if verifica se o conteúdo da variável senha começa com s seguido por um caractere qualquer seguido da letra e seguido de qual quer número de caracteres terminando com t senha set Este padrão casa com o valor shellscript da variável e portanto escreve dizendo que a senha é correta Comando sed q O comando sed recebe como entrada o valor da variável senha através do pipe e subs titui as letras ll por LL além de colocar o resultado dentro da própria variável senha Outros tipos de expressões regulares são ainda usados como por exemplo nos casos de substituição com o uso de comando sed binbash senhashellscript echo senha antes senha senhaecho senha sed sllLL echo senha depois senha O comando sed recebe um arquivo ou um valor de uma entrada padrão e substitui nele o que está escrito na expressão No exemplo acima o comando sed recebe como entrada o valor da variável senha através do pipe e substitui as letras ll por LL e coloca o resultado dentro da própria variável senha Comando tr q Sua função é receber dois conjuntos de caracteres e substituir as ocorrências dos carac teres no primeiro conjunto pelos elementos correspondentes do segundo conjunto Ele é usado para traduzir caracteres como no exemplo binbash senhashellscript echo senha antes senha senhaecho senha tr az AZ echo senha depois senha No qual a variável senha tem seus todas as suas letras traduzidas de minúsculas para maiús culas tr az AZ Exercício de fixação 2 e Metacaracteres Acesse o arquivo etcpasswd utilizando o comando egrep Crie comandos que selecionem apenas o que está sendo pedido 1 Apenas as linhas do usuário root 1 Linhas que começam com vogal 1 Linhas que tenham root ou www no início 1 Logins de 4 caracteres 1 Linhas que não terminam com 1 Números com no mínimo de 3 dígitos 131 Capítulo 7 Roteiro de Atividades Roteiro de Atividades 7 Atividade 71 Verificando a existência de arquivos Crie um script que recebe como parâmetro um nome de arquivo e verifica se este arquivo existe binbash if 1 echo O arquivo 1 existe echo Arquivo inexistente fi Atividade 72 Verificando a entrada de parâmetros Modifique o script da Atividade 71 de forma que ele teste se realmente recebeu um parâmetro Atividade 73 Executando sequências de comandos Estenda o script da Atividade 72 para escrever o tamanho do arquivo caso ele exista Utilize o comando ls lh que traz a informação do arquivo combinado com o comando cut para trazer somente o campo do tamanho do arquivo binbash if then echo Script que verifica se um arquivo existe echo Uso arquivo else if then echo Tamanho do arquivo 1 else echo Arquivo inexistente 132 Introdução ao Linux fi fi Atividade 74 Combinando parâmetros leitura e execução de comandos Crie um script que auxilie na criação de arquivos Ele deve receber como parâmetro um nome e criar o arquivo no diretório corrente com a permissão de escrita Em seguida deve per guntar ao usuário se ele quer editar o arquivo ou não Se sim abrir um arquivo em um editor Verifique se o usuário passou o número correto de parâmetros 1 e se o arquivo que ele pediu para criar já existe binbash if then echo este arquivo já existe else chmod 1 echo O arquivo foi criado echo Deseja editalo agora sn if opcao vi fi fi Atividade 75 Utilizando comando grepegrep Crie um script que solicita a informação de um nome de usuário e verifica se o nome infor mado é de um usuário válido no sistema desconsiderando as diferenças entre maiúsculas e minúsculas binbash then echo Script que verifica se um usuário é válido no sistema echo Uso 0 nomeusuário 133 Capítulo 7 Roteiro de Atividades echo Você deve passar o nome de um usuário else then else fi fi Atividade 76 Ainda usando grepegrep Crie um arquivo chamado agenda contendo nomes e telefones no formato nome sobre nome telefone Crie um script que recebe como parâmetro um nome e imprima as linhas do arquivo agenda que o contenham Verifique se realmente foi passado um parâmetro binbash then exit 1 else then echo recuperando informações grep agenda fi fi 134 Introdução ao Linux Atividade 77 Combinando comandos Crie um script que armazena em uma variável a quantidade de arquivos do diretório corrente e em seguida escreve o valor dessa variável Utilize os comando pwd para ver o diretório cor rente ls para listalo e wc para contar binbash dir quant if then echo O diretório corrente tem arquivos else echo Não há arquivos no diretório corrente fi Atividade 78 Aninhando condicionais Crie um script que recebe três números como parâmetros e exiba o maior deles Verifique se realmente foram passados três parâmetros binbash then echo Script que verifica qual é o maior entre 3 números echo Entre com os números nos parâmetros echo Uso 0 numero1 numero2 numero3 exit 1 else if then maior elif then maior else maior fi 135 Capítulo 7 Roteiro de Atividades echo O número é o maior deles fi Atividade 79 Utilizando expressões regulares 1 Crie um script que recebe duas palavras como parâmetro e verifica se a primeira está contida na segunda 2 Crie um script que recebe o nome de um arquivo texto como parâmetro verifica se o usuário possui permissão de leitura deste arquivo e caso tenha exiba as seguintes infor mações sobre o arquivo número de caracteres número de palavras e número de linhas do arquivo utilize o comando wc Atividade 710 Utilizando case Crie um script que retorna o dia da semana por extenso a partir do comando date Exemplo hoje é segundafeira Atividade 711 Utilizando case com menu de opções Crie um script que apresenta ao usuário um menu com as seguintes opções 1 Exibir status da utilização das partições do sistema df h 2 Exibir relação de usuário logados who 3 Exibir datahora date 4 Sair A partir daí receba a opção digitada pelo usuário e execute o comando respectivo Informe ao usuário caso ele esteja digitando uma opção fora das esperadas Atividade 712 Combinando if com case Crie um script que realiza as operações aritméticas básicas soma subtração divisão e multiplicação recebendo a operação e os operandos como parâmetros Verifique se os operandos são numéricos com sinal ou sem sinal Use o padrão de comparação das expressões regulares para verificar se o parâmetro contém somente números 2 09 Atividade 713 Combinando if case e comandos Crie um script que recebe o nome de um arquivo como parâmetro e que caso este arquivo não exista escreva a lista de arquivos de home neste arquivo Se o arquivo existir exibe uma mensagem dizendo o arquivo já existe em seguida dar a opção de apagar o arquivo anterior substituindo seu conteúdo ou a opção de adicionar no final do arquivo a nova informação 136 137 Capítulo 8 Shell Script objetivos conceitos 8 Shell Script Aprender a controlar o fluxo de execução dos scripts com o uso de repetições programar de forma modular e utilizar variáveis compostas do tipo lista Estruturas de repetição funções e arrays Estruturas de repetição q As estruturas de repetição servem para executar uma sequência de comandos várias vezes Existem dois tipos de comandos de repetição 1 Baseados em contadores 2 Comando for 1 Condicionais 2 Comando while 2 Comando until Cada repetição de comandos é chamada de iteração Uma estrutura de repetição é usada na programação quando se deseja que uma determi nada sequência de comandos seja executada várias vezes Existem dois tipos de comandos de repetição os baseados em contadores for e os condicionais while e until Comando for q 1 Bastante utilizado em várias linguagens de programação 1 Forma mais comum é utilizar contador com incrementodecremento e condição de parada 1 Sintaxe 1 do comando for expressao1 expressão2 expressão3 do comandos done 138 Introdução ao Linux q Semântica do comando 1 A primeira expressão é executada na inicialização do comando e geralmente atribui um valor inicial para uma variável 1 A segunda expressão é avaliada a cada iteração do comando e geralmente é uma comparação de uma variável com uma condição de parada 1 A terceira expressão é executada e utilizada para incrementar ou decrementar a variável de controle do laço O comando for é bastante utilizado em várias linguagens de programação Na sua forma mais comum um grupo de comandos é executado com base no valor de uma variável que é inicializada ao se iniciar o comando for Ao final de cada loop iteração do comando a variável é modificada a partir daí verificase uma condição de parada que se alcançada faz parar o comando Assim o comando for pode ser expresso como for expressao1 expressão2 expressão3 do comandos done A primeira expressão é executada na inicialização do comando e pode servir para atri buir um valor inicial para uma variável A segunda expressão é avaliada a cada iteração do comando e tipicamente é utilizada a comparação de uma variável com uma condição de parada Por fim ao final de cada iteração a terceira expressão é executada e utilizada para incrementar ou decrementar a variável de controle do laço O exemplo seguinte inicializa uma variável com o valor 1 compara o valor desta variável com 10 executa o comando echo e por fim incrementa o valor da variável de controle x em uma unidade x binbash for x1 x 10 x do echo x done O comando é executado até que a variável x atinja o valor 10 q 1 Embora esta seja a forma comumente utilizada em outras linguagens de progra mação no bash a forma mais comum de utilizar o comando for é percorrendo os valores de uma lista 1 Essa lista pode ser de valores de uma variável ou a saída de um comando for variavel in lista do comando done 139 Capítulo 8 Shell Script No próximo exemplo o comando seq é utilizado para gerar valores de 1 a 9 A variável x assume cada um destes valores a cada iteração do comando for binbash for x in seq 1 9 do echo x done q 1 O comando seq é utilizado para gerar valores de 1 a 9 1 A variável x assume cada um destes valores a cada iteração do comando for 1 Uma lista é uma string na qual os elementos estão separados por caracteres especiais 2 No bash usase a variável especial IFS para definir o separador dos elementos da lista 3 O valor padrão é um sinal de tabulação uma nova linha ou um espaço em branco Para o bash uma lista é basicamente uma string na qual os elementos estão separados por caracteres especiais O bash utiliza o valor de uma variável especial chamada IFS como separador de elementos O valor padrão desta variável considera um sinal de tabulação uma nova linha ou um espaço em branco como separadores de elementos O exemplo abaixo demonstra isso binbash valoresa b c 1 2 3 for i in valores do echo i done q 1 O comando for percorre toda a lista escrevendo os valores um a um 1 É possível modificar o valor da variável IFS para que o bash utilize outro caractere como separador de elementos de uma lista tal como no exemplo abaixo binbash IFS listaa1a2a3a4 for i in lista do echo elemento i done 140 Introdução ao Linux Exercício de fixação 1 e Alterando o valor da variável IFS Modifique o valor da variável IFS para que o bash utilize outro caractere como separador de elementos de uma lista Comandos while e until q Os comandos while e until são utilizados para executar um bloco de comandos uma ou mais vezes mediante uma condição de parada Eles diferem entre si apenas na forma de interpretação Comando while 1 O comando while realiza iterações enquanto a expressão da condição for avaliada como verdadeira Comando until 1 O comando until realiza iterações até que a expressão da condição seja avaliada como verdadeira Os comandos while e until são utilizados para executar um bloco de comandos enquanto uma determinada expressão for avaliada como verdadeira O comando while realiza iterações enquanto a expressão for avaliada como verdadeira já o comando until funciona até que a condição seja avaliada como verdadeira Sintaxe do comando while while condição do comandos done Sintaxe do comando until until expressao do comandos done O exemplo seguinte escreve os valores de 1 a 9 utilizando o comando while binbash x1 while x 10 141 Capítulo 8 Shell Script do echo x xx1 done Lembrese de que utilizamos os duplos parênteses para avaliar expressões aritméticas O mesmo código utilizando until seria binbash x1 until x 10 do echo x xx1 done Funções q 1 São usadas na programação para promover a organização do código em blocos de funcionalidades 1 Também são chamadas de módulos subprogramas ou subrotinas 1 Permitem a reutilização dos códigos 1 Capazes de aceitar valor e retornar resultados 1 São implementadas dentro dos scripts e definidas por padrão no início deles 1 O conjunto de comandos fica encapsulado dentro da função 1 Para executar os comandos basta invocar o nome da função ao longo do script 2 Quando isso acontece o fluxo de execução que estava seguindo linha a linha de cima para baixo é deslocado para o conteúdo da função As funções são usadas na programação para promover uma maior organização do código em blocos de funcionalidades chamados de módulos que o encapsula de forma autocon tida Assim permitese a reutilização dos códigos em outros cenários Cada função é considerada como um subprograma uma subrotina ou um módulo capaz de aceitar valor e retornar resultados As funções são implementadas dentro dos scripts e são por padrão definidas no início deles A sintaxe de uma função é function nomedafunção comandos 142 Introdução ao Linux Onde Nomedafunção é um nome que o programador escolhe para representar aquela sequência de código Ele deve seguir a mesma lei de formação de variáveis começando por letra e seguido por letras eou dígitos com o caractere permitido para ligar palavras Assim o conjunto de comandos é encapsulado e só é executado quando o nome da função é invocado ao longo do script Quando isso acontece o fluxo de execução que estava seguindo linha a linha de cima para baixo é deslocado para o conteúdo da função Vamos considerar o exemplo da repetição mostrado anteriormente cuja função é escrever os números de 1 a 9 A sequência de código foi colocada dentro de uma função chamada conta binbash x1 function conta until x 10 do echo x xx1 done echo Realizando a contagem de 1 a 9 conta echo Saindo do script q 1 Função conta escreve os números de 1 a 9 1 O código da função deve necessariamente ser descrito antes de a função ser invocada No exemplo o primeiro comando a ser executado é o comando echo Realizando a contagem de 1 a 9 pois ele está no fluxo normal da execução Após ele ser executado passase então para o próximo comando que é a invocação ou chamada da função conta Neste momento a execução é desviada para o conteúdo da função executandose o comando until Após serem feitas as iterações necessárias dentro do comando de repetição e não havendo mais comandos dentro da função a execução retorna para o próximo comando depois da chamada da função que é a execução do comando echo Saindo do script Após sua exe cução o script é encerrado O código da função deve necessariamente ser descrito antes de a função ser invo cada Por esse motivo é que se aconselha que as funções sejam especificadas no início do script 143 Capítulo 8 Shell Script q Ideia da modularização e da reutilização de uma função 1 Que elas não sejam dependentes de outras partes do script ou seja não utilizem de valores de variáveis definidas fora da função Como conseguir isso 1 A comunicação do resto do script com a função pode ser feita através de parâmetros da mesma forma que os parâmetros posicionais são passados aos comandos Passagem de parâmetros 1 Permite a generalização da função simplesmente mudando o valor passado por parâmetro Para garantir a modularização e a reutilização de uma função em outro script qualquer os dados de que ela necessita não podem ser dependentes de outras partes do script No exemplo ante rior a contagem começa no valor atribuído à variável x que é definida fora da função Assim se usarmos a função conta em outro script precisaríamos da garantia de que haveria uma variável x também definida com valor 1 no outro script Isso nem sempre é possível ou desejável A ideia é que o valor seja comunicado à função independente de existir a variável x Essa comunicação é feita através de parâmetros Da mesma forma que passamos parâmetros aos comandos passamos também às funções colocando os valores após o nome da função quando vamos chamála Daí a função recebe os valores através dos parâmetros posicionais Por exemplo binbash function conta x1 until x 10 do echo x xx1 done echo Realizando a contagem de 1 a 9 conta 1 echo Saindo do script q 1 O valor 1 é passado junto com o nome da função conta por parâmetro 1 Dentro dela a variável x recebe esse valor No exemplo temos que o valor 1 é passado junto com o nome da função conta Só dentro dela que a variável x recebe esse valor Isso garante que essa sequência de código possa ser usada em qualquer outro script sem a necessidade de haver uma variável x definida nele 144 Introdução ao Linux Esta técnica permite ainda que esse valor seja flexibilizado ou seja se for passado o valor 2 junto ao nome da função a contagem passa a ser feita a partir de 2 e não mais de 1 Os parâmetros são percorridos também como uma lista pelo comando de repetição for Por exemplo binbash function imprimeparametros echo Esses são os parâmetros recebidos pela função for i in do echo i done imprimeparametros um dois tres quatro q O comando for percorre a lista de parâmetros e o comando echo i escreve cada um deles Da mesma forma que função recebe valores através dos parâmetros ela é capaz de retornar valor Na verdade ela retorna o status de execução Esse valor é retornado através do comando return como por exemplo binbash function impar res12 if res ne 0 then return 0 else return 1 fi impar 3 echo 1 Para o valor 3 passado por parâmetro a função retorna 0 1 Esse valor é retornado na variável Assim ao chamar a função impar com o parâmetro 3 é verificado que o resto da divisão de 3 por 2 res12 é diferente de zero e portanto ímpar Assim executase o comando if retornando valor 0 Esse valor é retornado na variável 145 Capítulo 8 Shell Script Podemos usar esse conceito para retornar direto na condição do comando if Como por exemplo binbash function impar res12 if res ne 0 then return 0 sucesso else return 1 falha fi if impar 3 then echo número ímpar else echo número par fi q Com o mesmo valor 3 passado por parâmetro e o retorno 0 da função A condição estando com valor 0 implica sucesso do comando Portanto aciona o comando echo que escreve número ímpar Lembrando que para o bash o valor 0 significa sucesso de execução de um determinado comando Ao colocar a função impar como condição do if e ela retornando 0 como no caso do exemplo significa para o comando que foi bemsucedido tornando assim a condição verdadeira portanto será executado o comando echo número ímpar No entanto é permitido ao comando return retornar apenas valores numéricos Valores diferentes de números devem ser retornados através do comando echo como por exemplo binbash function teste echo aqui retornase o valor não numérico da função return 23 valorteste echo o status da função retornou echo retorno valor 146 Introdução ao Linux q A execução do comando valorteste faz com a função teste seja chamada e o retorno dela seja atribuído à variável valor Este retorno é ditado pelo conteúdo expresso no comando echo Aqui retornase o valor não numérico da função Ao invés de escrever na tela ele escreve na variável A execução do comando valorteste faz com que a função teste seja chamada e o retorno dela seja atribuído à variável valor No entanto este retorno é ditado pelo conteúdo expresso no comando echo aqui retornase o valor não numérico da função que quando usado desta forma na função é capaz de retornar um valor não numérico O exemplo mostra ainda a combinação dos dois retornos usando também o comando return para retornar na variável de status S o valor 23 Para aumentar ainda mais o conceito de encapsulamento fazendo com que as funções se comportem como módulos independentes e possam ser portadasreutilizadas em qual quer outro script é desejável que qualquer variável usada dentro da função seja também específica dela Esse efeito é conseguido através do conceito de criação de variáveis locais Elas têm esse nome porque são vistas somente dentro do escopo da função a qual foram declaradas Por exemplo binbash x20 function conta local x1 until x 10 do echo x xx1 done echo imprimindo x dentro da função x echo Realizando a contagem de 1 a 9 conta echo imprimindo x fora da função x echo Saindo do script O valor de x local só é vistomodificado dentro da função Aqui existem duas instâncias da variável x Uma criada fora da função com valor 20 e outra declarada como local com valor inicial 1 Quando a variável é criada como local passa a ser visível somente dentro do escopo da função onde foi declarada Assim a variável x que está fora da função não sofre mudanças O comando echo imprimindo x dentro da função x mostrará o valor 10 para a variável x valor que ela terá após a iteração until de 1 a 9 Já fora da função o comando echo imprimindo x fora da função x mostrará o valor 20 para a variável x valor que não foi alterado pela função conta 147 Capítulo 8 Shell Script Exercício de fixação 2 e Etapas do script binbash x20 function conta local x1 until x 10 do echo x xx1 done echo imprimindo x dentro da função x echo Realizando a contagem de 1 a 9 conta echo imprimindo x fora da função x echo Saindo do script Arrays q 1 Um array é uma variável que contém uma lista de elementos 1 Esses elementos são tratados de maneira individual através de índices 1 Os índices são valores numéricos que começam em 0 e vão até o número de ele mentos do array menos 1 1 São usados para reunir informações de natureza comum 2 Exemplo uma data no formato dia mês e ano Um array é uma variável que contém uma lista de elementos Esses elementos são tratados de maneira individual através de índices Os índices são valores numéricos que começam em 0 e vão até o número de elementos do array menos 1 São usados para reunir infor mações de natureza comum Por exemplo para armazenar uma data no formato dia mês e ano temos três informações que se relacionam É desejável que estejam armazenadas juntas para facilitar o trabalho do programador q Um array pode ser declarado através do comando declare a nomearray Os valores dentro do array são atribuídos de duas formas 1 Através de seus índices individuais nomearrayindicevalor 148 Introdução ao Linux q 1 Ou da especificação completa da lista nomearrayvalor1 valor2 valor3 valor N Por exemplo o array data descrito acima poderia ter seus valores atribuídos desta forma binbash declare a data data010 data12 data22012 Colocandose o dia no campo de índice 0 do array e mês e ano nos campos de índice 1 e 2 respectivamente Ou então desta forma binbash declare a data data10 2 2012 Preenchendose todos os valores ao mesmo tempo O acesso a cada valor também é feito através dos índices Por exemplo para mostrar a data armazenada podemos usar o comando echo desta forma binbash declare a data data010 data12 data22012 echo data0 echo data1 echo data2 Ou então através do comando for binbash declare a data data010 data12 data22012 149 Capítulo 8 Shell Script for num in 0 1 2 do echo datanum done As chaves são usadas no comando echo datanum para garantir que aquele índice específico seja considerado O número de elementos de um array pode ser obtido através do comando nomearray Assim para garantirmos que todos os elementos do array sejam alcançados no comando for por exemplo podemos utilizar este comando para definir o limite binbash declare a data data010 data12 data22012 tamanhodata1 for num in seq 0 tamanho do echo datanum done O comando for lista todos os elementos do array 1 tamanho tamanho do vetor data 3 1 1 seq varia de 0 até 2 A variável tamanho recebe o tamanho do vetor data que é três menos 1 para que sirva de contagem no comando seq de 0 até 2 obedecendo aos índices do array Assim serão recu perados cada um dos elementos e escritos através do comando echo datanum Podemos também utilizar o comando read para armazenar valores no array binbash declare a lista read p Quantos elementos serão inseridos total 150 Introdução ao Linux for i0 i total i do read p Entre com valor listai done totaltotal1 echo Estes foram os valores lidos for num in seq 0 total do echo listanum done q 1 No primeiro comando for são lidos os elementos e armazenados no array lista 1 No segundo comando for são escritos todos eles O primeiro comando for acessa cada um dos índices do array lista com a variável i recebendo valores de 0 até a quantidade de elementos total armazenando os valores lidos através do comando read O segundo comando for apenas escreve todos eles 151 Capítulo 8 Roteiro de Atividades Roteiro de Atividades 8 Atividade 81 Verificando permissão dos arquivos Crie um script que exibe para o diretório atual a lista de arquivos com permissão de execução Atividade 82 Verificando usuários e informações Crie um script que apresenta na tela todos os usuários cadastrados no sistema e seus respectivos diretórios home Atividade 83 Percorrendo um diretório com o comando for e utilizando contadores Crie um script que recebe como parâmetro o caminho de um diretório e lista seus arquivos e diretórios um a um Se for diretório deve escrever dir ao lado do diretório Numere cada uma das linhas Lembrese de testar se realmente foi passado um parâmetro Atividade 84 Ainda manipulando listas com o comando for e contadores Crie um script que conta o número de palavras no conteúdo do diretório passado por parâ metro Use repetição para fazer a contagem Lembrese de testar se realmente foi passado um parâmetro Atividade 85 Manipulando sequências com o comando for Crie um script que recebe um número como parâmetro e exibe todos os números de 1 até o número recebido Lembrese de testar se realmente foi passado um parâmetro Atividade 86 Testando os diversos comandos de repetição Crie um script que recebe um número como parâmetro e exibe todos os números pares de 1 até o número recebido Lembrese de testar se realmente foi passado um parâmetro Faça usando a repetição for e em seguida usando while ou until Atividade 87 Utilizando o comando for como contador Crie um script que recebe dois números passados por parâmetro e escreve o primeiro número a quantidade de vezes especificada no segundo parâmetro Lembrese de testar se realmente foram passados dois parâmetros Atividade 88 Utilizando repetição condicionada Crie um script que lê valores do teclado enquanto o valor digitado for diferente de 0 Atividade 89 Criando uma agenda simples Crie um script que constrói uma agenda telefônica Você deve apresentar um menu ao usuário contendo essas opções 1 inserir 2 listar 3 sair O script deve aceitar opções até que seja digitada a opção de sair Na opção 1 deve ler um nome e um telefone e arma zenar nas próximas duas posições vazias de um array chamado agenda Assim se agenda estiver vazio o nome será armazenado na posição 0 e o telefone na posição 1 Na opção 2 o script deve listar todos os nomes com seus respectivos telefones registrados na agenda 152 Introdução ao Linux Atividade 810 Criando uma calculadora simples utilizando funções Crie um script que realiza as operações aritméticas básicas Ele deve apresentar o menu 1soma 2 subtração 3 divisão 4 multiplicação 5 sair e fazer as operações enquanto não for digitada a opção 5 Use funções para cada uma das operações Verifique se os ope randos são numéricos com sinal ou sem sinal Use o padrão de comparação das expressões regulares para verificar se o parâmetro contém somente números 2 09 153 Capítulo 9 Instalação de aplicações objetivos conceitos 9 Instalação de aplicações Instalar aplicações a partir de seus códigosfontes e de arquivos binários Aplicações no sistema operacional Linux Aplicações no sistema operacional Linux Aplicações são instaladas em um sistema por diversos motivos como necessidade dos usu ários e mudanças nas funções desempenhadas pelo sistema entre outros Se uma aplicação não estiver mais sendo utilizada deve ser logo removida pois pode se tornar uma porta de entrada para invasores Também é importante que as aplicações instaladas sejam sempre atualizadas seja para corrigir defeitos incluir novas funcionalidades ou mesmo para corrigir vulnerabilidades que possam afetar a segurança do sistema Saber como instalar remover e atualizar uma aplicação corretamente é uma habilidade fun damental para qualquer administrador de sistemas Neste capítulo veremos como executar essas tarefas Mas antes disso começaremos a entender como as aplicações são desenvol vidas quais são suas principais características e como são distribuídas Antes que uma aplicação esteja pronta para uso alguém deve projetála e escrevêla As aplicações são escritas utilizando uma ou mais linguagens de programação que nada mais são do que linguagens intermediárias entre o que os humanos entendem linguagem natural e o que o computador entende linguagem de máquina Algumas linguagens de programação se aproximam mais da linguagem natural pois se servem de conceitos mais abstratos e em geral são capazes de efetuar mais tarefas com uma quantidade menor de comandos Essas linguagens são conhecidas como linguagens de alto nível Outras linguagens conhecidas como linguagens de baixo nível se aproximam mais da linguagem utilizada pela máquina e em geral apresentam melhor desempenho ao custo de um esforço maior de programação já que normalmente são necessários muito mais comandos para efetuar uma mesma tarefa Chamamos os arquivos que contêm a aplicação escrita com uma linguagem de programação de códigofonte Seja qual for o nível da linguagem o códigofonte deve passar por um processo de tradução para que seja entendido pelo computador Esse processo pode ser feito uma única vez e o resultado pode ser armazenado em um ou mais arquivos contendo o código já traduzido para a linguagem de máquina ou ainda pode ser feito toda vez que a 154 Introdução ao Linux aplicação for executada No primeiro caso o processo de transformar o códigofonte em um arquivo contendo código de máquina arquivo binário é chamado de compilação Quando esse processo de tradução acontece sempre que a aplicação é executada é chamado de interpretação No capítulo anterior quando foi vista a programação em shell script vimos que os programas criados são interpretados todas as vezes em que são executados por um interpretador que neste caso é o próprio shell Linguagens de programação q 1 Alto nível C Java 1 Baixo nível Assembly 1 Linguages compiladas C C Pascal 1 Linguagens interpretadas Bash Perl PHP No Linux as linguagens mais utilizadas no desenvolvimento de programas são C e C A lin guagem C é considerada por alguns uma linguagem de médio nível pois apesar de possuir características de linguagens de alto nível também possui características de linguagens de baixo nível como o acesso direto ao hardware A linguagem C foi criada no início da década de 1970 e desde então tornouse a linguagem preferida para o desenvolvimento de sistemas operacionais O kernel do Linux é escrito em C assim como vários de seus aplicativos e bibliotecas de funções A linguagem C é uma linguagem criada a partir da linguagem C acrescentando a ela características de linguagens de alto nível como a orientação a objetos Um programa escrito em C precisa ser compilado antes de ser utilizado Dependendo do seu tamanho o código de um programa em C pode estar contido em diversos arquivos cada um contendo um módulo ou parte do programa A compilação de um programa é feita com o auxílio de programas como compiladores e ligadores do inglês linkers O processo de com pilação pode ser simplificado através do uso do programa make que lê um arquivo chamado Makefile que contém as instruções de como compilar de maneira correta os arquivosfontes de uma aplicação No Linux o compilador C mais utilizado é o GNU C Compiler também conhecido como gcc Uma das características dos sistemas Unix é a modularidade Seus comandos em geral desempenham tarefas simples e as tarefas mais complexas são executadas utilizando dois ou mais comandos De forma análoga programas complexos são criados através da combinação de funções contidas em módulos menores também chamados de bibliotecas Para entender melhor este conceito vamos utilizar um exemplo imagine um programador que deseja escrever um programa capaz de tocar arquivos mp3 O programa deverá ser capaz de abrir um arquivo mp3 decodificar o seu conteúdo e reproduzilo utilizando a placa de som além de prover uma interface para o usuário que permita executar as ações de parar iniciar avançar e retroceder a posição da música Ele poderá escrever um código capaz de fazer todas essas funções ou poderá utilizar bibliotecas de funções criadas por outros programadores que disponibilizem as funções descritas acima facilitando o desenvolvimento do programa As funções de uma biblioteca podem ser utilizadas por um programa de duas maneiras estaticamente ou dinamicamente No modo estático o código da função utilizada pelo pro grama é embutido no binário do programa Desta forma o programa pode ser executado em um sistema sem que haja a necessidade deste possuir as bibliotecas com as funções que o programa utiliza Esta forma apresenta como desvantagem o tamanho dos arquivos binários dos programas que passam a ser bem maiores Por outro lado um programa pode utilizar uma biblioteca de função de maneira dinâmica Neste caso quando o programa é executado ele procura no sistema as bibliotecas de que necessita e as carrega na memória 155 Capítulo 9 Instalação de aplicações A vantagem de utilizar esta forma é que vários programas podem utilizar a mesma biblio teca já carregada na memória diminuindo assim o total de memória utilizada pelo sistema como um todo Além disso programas que utilizam bibliotecas carregadas dinamicamente possuem arquivos binários menores No Linux os arquivos contendo bibliotecas dinâmicas se localizam geralmente nos dire tórios lib e usrlib Geralmente estes arquivos são nomeados utilizando o padrão libXXX sozy onde XXX é o nome ou sigla da biblioteca so é a extensão que identifica bibliotecas dinâmicas e zy é a versão da biblioteca que pode ser opcional Dado um arquivo binário qualquer podemos identificar as bibliotecas que ele utiliza com o comando ldd O exemplo a seguir mostra a lista das bibliotecas que o shell bash utiliza ldd binbash Linuxgateso1 0xffffe000 libncursesso5 liblibncursesso5 0xb7f82000 libdlso2 libtlslibdlso2 0xb7f7e000 libcso6 libtlslibcso6 0xb7e46000 libldLinuxso2 0xb7fd1000 A saída do comando apresenta o nome das bibliotecas utilizadas o caminho completo do arquivo onde estão contidas e um número que identifica a posição de memória que ocupam Quando um programa necessita carregar uma biblioteca ele utiliza um carregador em tempo de execução do inglês runtime linker conhecido como ldso Esse carregador por sua vez precisa identificar os diretórios que contêm as bibliotecas Para isso ele utiliza o arquivo etc ldsocache que é gerado através da execução do comando ldconfig Este comando quando executado lê o arquivo etcldsoconf que contém os diretórios do sistema onde os arquivos de bibliotecas podem ser encontrados Sempre que o arquivo etcldsoconf for alterado o comando ldconfig deve ser executado para atualizar o arquivo etcldsocache Quando um programador decide distribuir sua aplicação ele pode fazêlo de duas maneiras distribuir os arquivosfontes ou a aplicação já compilada Veremos a seguir como pro ceder para instalar aplicações distribuídas nas duas formas citadas Vale lembrar que uma aplicação não é composta apenas pelo seu arquivo binário Em geral uma aplicação possui também arquivos de configuração manuais de sistema e arquivos de documentação além de exemplos Chamamos esse conjunto de arquivos de pacote q Reaproveitamento de código 1 Uso de bibliotecas estáticas ou dinâmicas 2 Vantagens tamanho dos programas fica reduzido e as bibliotecas podem ser com partilhadas com outros programas 2 Desvantagens a compilação e execução do programa só é possível se a biblioteca estiver instalada no sistema 1 Em geral arquivos de bibliotecas possuem o formato libXXXsozy 1 O comando ldd identifica as bibliotecas usadas por uma aplicação 156 Introdução ao Linux Instalando aplicações a partir de seus códigosfontes O método de instalação a partir de arquivosfontes é o método que envolve mais trabalho para quem vai instalar porém envolve menos trabalho para o programador já que ele deve apenas disponibilizar os arquivosfontes A grande maioria das aplicações escritas para sistemas Unix tem seu códigofonte disponibilizado possibilitando a todos o acesso ao modo como o programa foi escrito É comum que programas licenciados pela General Public License GPL ou por uma licença open source estejam disponíveis nessa forma e que programas proprietários não estejam Embora esta seja a forma de instalação mais trabalhosa este método permite que o programa seja modificado e personalizado Em geral é possível escolher onde o programa deverá ser instalado e onde procurará por arquivos de configuração No entanto o grau de personalização de um programa depende muito de sua função e do seu programador Imagine um programa que funcione como um cadastro de telefones Este programa poderia armazenar suas informações em um dos diversos Sistemas Gerenciadores de Bancos de Dados SGBDs disponíveis para Linux ou poderia simplesmente armazenar as informações em arquivos textos O programador que desenvolveu esse aplicativo poderia permitir que o administrador escolhesse o modo de armazenamento dos dados gerados pelo programa por meio de opções especiais utilizadas no processo de compilação Ativando ou desa tivando essas opções os requisitos para a instalação do programa e o seu tamanho se alteram já que por exemplo ao desativar o suporte para armazenagem de dados em bancos de dados tal programa não iria requerer bibliotecas com funções de acesso a bancos de dados Usualmente o processo de instalação de um programa a partir de um arquivofonte é composto de quatro passos que serão descritos a seguir Obtenção dos arquivosfontes A obtenção dos arquivosfontes pode se dar através de um DVD ou mais comumente através de sites como o Sourceforge que funciona como um imenso repositório de projetos de software livre e disponibiliza milhares de programas Os códigosfontes geralmente são distribuídos em arquivos compactados no formato targz ou tarbz2 Os exemplos seguintes mostram como descompactar arquivos nos formatos targz e tarbz2 respectivamente tar xvfz programatargz tar xvfj programatarbz2 Verificação do ambiente para a compilação q Configurando a aplicação 1 Buscar documentação arquivos INSTALL e README 1 Script de configuração configure Problema de dependência 1 Verificar se todas as bibliotecas necessárias estão instaladas Após descompactar o arquivo é recomendável ler o conteúdo de arquivos como INSTALL eou README caso estejam presentes pois contêm informações sobre como compilar e instalar o programa em questão A verificação do ambiente necessária para a compilação é feita através de um script auxiliar chamado configure presente na grande maioria dos programas Esse script verifica se todos os prérequisitos necessários para a compilação do programa estão presentes e gera o arquivo Makefile O script configure geralmente possui a Visite o site do desenvolvedor Sourceforge http wwwsourceforgenet w 157 Capítulo 9 Instalação de aplicações opção help que lista todas as opções de configuração de um programa O comando a seguir executa o script configure configure Como vimos os programadores escrevem programas utilizando funções presentes em bibliotecas de funções Mas só as bibliotecas não bastam na hora de compilar um programa sendo necessário também que estejam presentes seus arquivos de cabeçalho headers Nas linguagens C e C antes de uma função ser utilizada precisa ser definida ou seja é necessária uma espécie de descrição contendo o nome da função seu tipo e os parâmetros que aceita Para que não seja necessário manter no sistema vários arquivos com todos os códigos de funções os projetistas dessas linguagens pensaram num jeito de separar do seu código as declarações das funções Assim ao compilar um programa é necessário apenas ter essas declarações que ficam contidas em arquivos com a extensão h Para satisfazer os prérequisitos para a compilação de um programa os arquivos de cabeçalho e as bibliotecas que o programa utiliza ainda será preciso instalar e compilar as bibliotecas necessárias ou instalálas por intermédio de pacotes da distribuição como veremos adiante Compilação q Compilando e instalando a aplicação com Makefile 1 make 1 make install Uma vez configurados e satisfeitos os prérequisitos para a compilação do programa podemos iniciar o processo de compilação utilizando o comando make que na verdade não é um compilador mas apenas lê arquivos especiais Makefiles que contêm regras para com pilar o programa Essas regras especificam os arquivosfontes que devem ser compilados o compilador que deve ser utilizado o modo como esses arquivosfontes devem ser ligados e os diretórios onde devem ser armazenados ao serem instalados entre outros aspectos Sua utilização é bastante simples bastando executálo no diretório em que se encontra o arquivo Makefile como mostra o comando a seguir make Instalação O processo de compilação tanto pode ser rápido para programas simples quanto pode durar horas dependendo do tamanho e da complexidade do códigofonte e da velocidade da máquina Por fim a instalação propriamente dita é feita pelo programa make usualmente utilizandose a opção install que em geral especifica uma regra especial dentro do Makefile que faz com que o make copie os arquivos do programa já compilado para os diretórios onde deverão ser instalados no sistema Para fazer a instalação basta executar o comando abaixo make install Isso fará com que o make copie os arquivos contendo o código compilado manuais e arquivos de configuração para os diretórios adequados Note que embora os outros dois passos possam ser executados com uma conta de usuário comum este último passo deve ser feito utilizando a conta root Por convenção os programas compilados pelo administrador são instalados nos diretórios apropriados bin sbin etc var dentro do diretório usrlocal Isso é feito para que haja uma separação dos programas instalados dessa forma dos programas instalados por meio de 158 Introdução ao Linux pacotes da própria distribuição Vale observar que ao contrário destes últimos os programas instalados através de códigofonte não são registrados em uma base de dados e não podem ser removidos e atualizados de forma automática Alguns programas podem ser removidos por intermédio do comando make uninstall A opção uninstall usualmente especifica uma regra dentro do Makefile que contém os comandos para remover os arquivos instalados Embora essa seja uma prática comum não são todos os arquivosfontes que apresentam essa opção Uma boa prática ao se instalar programas dessa forma é utilizar um programa auxiliar como o checkinstall que registre os arquivos que foram inseridos no sistema facilitando assim a sua remoção e atualização no futuro A instalação de programas utilizando o código fonte é recomendada para os casos em que não exista um pacote binário pronto na distri buição ou em casos onde é necessário alterar o códigofonte da aplicação Para os outros casos prefira utilizar os pacotes disponibilizados pela distribuição q Recomendações 1 Deixar os arquivos separados e organizados em usrlocal 1 Lembrar dos arquivos e lugares onde foram instalados Dica checkinstall Para remover make uninstall caso exista esta opção no Makefile Instalando aplicações a partir de arquivos binários q Aplicações que utilizam arquivos binários 1 Cuidados adicionais dependências local dos arquivos 1 Pacotes binários de distribuições 2 DebianUbuntu pacotes no formato deb 2 Red HatFedoraCentOS pacotes no formato rpm Nessa forma de instalação as aplicações são distribuídas em arquivos que contêm a apli cação na sua forma já compilada por isso o nome arquivos binários necessitando apenas de que sejam armazenadas nos diretórios adequados Faremos aqui uma pequena distinção entre dois tipos de arquivos binários o primeiro tipo é criado pelo desenvolvedor do pro grama e o segundo é um tipo especial de arquivo binário criado exclusivamente para uma determinada distribuição Linux Veremos o primeiro tipo agora e o segundo mais adiante A instalação de uma aplicação a partir de arquivos binários é bem mais simples do que a instalação a partir de arquivosfontes Geralmente é necessário apenas obter o arquivo contendo a aplicação descompactálo e copiar os arquivos para os diretórios corretos Esse último passo pode ser feito por um script distribuído juntamente com a aplicação especificamente para esse fim Neste tipo de instalação não há como o desenvolvedor garantir que o seu sistema contenha todos os prérequisitos para que a aplicação funcione adequadamente Sendo assim é comum que ele adote uma das duas estratégias desen volver a aplicação de modo que ela requeira um conjunto mínimo de bibliotecas deixando por conta do usuário a instalação delas ou incluir as bibliotecas estaticamente na apli cação deixando ela pronta para uso não necessitando de nenhuma biblioteca adicional A distribuição de aplicações em arquivos binários é usualmente utilizada por empresas que produzem programas proprietários e que têm a necessidade de manter seus códigos fontes inacessíveis para terceiros a partir de um arquivo binário é praticamente impos sível obter o códigofonte original Para facilitar a disseminação instalação e sobretudo a manutenção de um sistema as distribuições Linux criaram o que chamamos de pacotes Um pacote é um arquivo que 159 Capítulo 9 Instalação de aplicações contém uma aplicação ou biblioteca scripts de instalação e dados como sua descrição e prérequisitos Os pacotes são manipulados por meio de programas especiais que além de instalar desinstalar ou atualizar um pacote gravam informações sobre eles em uma base de dados no sistema No Linux os pacotes nos formatos rpm e deb são os dois tipos de pacotes mais populares O padrão de pacotes rpm foi originalmente criado pela Red Hat e posterior mente adotado por outras distribuições como SUSE e Fedora Os pacotes deb foram criados pela distribuição Debian e são utilizados também pelas distribuições derivadas e baseadas nela como a distribuição Ubuntu O funcionamento de ambos os tipos de pacotes é bastante semelhante mudando apenas as ferramentas utilizadas para gerenciálos Veremos a seguir como trabalhar com pacotes rpm Os pacotes rpm são nomeados na forma nomedopacote versaoreleasearchrpm O campo arch indica para qual arquitetura de hardware o pacote foi compilado As princi pais arquiteturas são vistas a seguir 1 i386 pacotes para arquiteturas que utilizam processadores baseados na linha x86 da Intel 1 PPC pacotes para arquiteturas que utilizam processadores PowerPC utilizados pela Apple 1 x8664 pacotes para arquiteturas que utilizam processadores de 64 bits 1 SRC pacotes que não contêm binários mas sim o códigofonte da aplicação o que a torna portável para vários tipos de arquiteturas Podemos ver a seguir um exemplo de nome de pacote bash3031i386rpm Nome do pacote bash Versão 30 Release 31 Arquitetura i386 Pacotes rpm nomedopacoteversaoreleasearchrpm Exemplo bash3031i386rpm Nome do pacote bash Versão 30 Release 31 Arquitetura i386 Pacotes RPM O comando rpm é a principal ferramenta utilizada para instalar desinstalar consultar e atualizar pacotes no formato Red Hat Package Manager RPM A Tabela 91 apresenta as principais opções do comando rpm e as ações que elas executam 160 Introdução ao Linux Opção Ação i Instala um pacote e Remove um pacote U Atualiza um pacote caso já esteja instalado ou instala o pacote caso não esteja instalado F Atualiza um pacote apenas se o pacote já estiver instalado v Habilita o modo verbose O comando mostrará informações adicionais durante a sua execução h Habilita o modo hash O comando mostrará uma espécie de barra de progresso durante a instalação dos pacotes Usualmente utilizamos as opções v e h combinadas com as opções i ou U ao instalar ou atualizar um pacote A sintaxe do comando rpm pode ser vista a seguir rpm opção pacote Comando rpm Ferramenta utilizada para instalar desinstalar e atualizar pacotes Não resolve problemas com dependências entre pacotes rpm opção pacote A seguir são apresentados alguns exemplos de utilização do comando rpm Instalando um pacote rpm ivh chkconfig13201i386rpm Atualizando um pacote rpm Uvh chkconfig13201i386rpm Removendo um pacote rpm e finger Observe que para remover um pacote só é necessário indicar o nome do pacote ou nomeversão e não o nome completo do arquivo que contém o pacote Ao instalar ou remover um pacote o comando rpm verifica se este possui dependências e caso o pacote a ser instalado necessite de algum pacote ainda não instalado ou o pacote a ser removido seja uma dependência de algum pacote ainda instalado uma mensagem de erro será apresentada como mostram os exemplos abaixo rpm ivh dvgrab173i386rpm error Failed dependencies libavc1394so0 is needed by dvgrab173i386 libdvso4 is needed by dvgrab173i386 libraw1394so8 is needed by dvgrab173i386 librom1394so0 is needed by dvgrab173i386 Tabela 91 Opções básicas do comando rpm 161 Capítulo 9 Instalação de aplicações rpm ev bzip2 error Failed dependencies bzip2 is needed by installed man15p4i386 bzip2 is needed by installed systemconfigprinter 061311i386 Repare que o comando rpm apenas indica a existência de uma dependência que deve ser instalada manualmente caso necessário Veremos mais adiante uma ferramenta capaz de resolver automaticamente problemas com dependências Dependências Como vimos anteriormente para funcionar adequadamente um programa pode necessitar de uma biblioteca ou até mesmo de outro programa Quando lidamos com pacotes chamamos esses prérequisitos de dependências Assim podemos dizer que o pacote A depende do pacote B ou ainda que o pacote B é uma dependência do pacote A Quando instalamos um pacote a ferramenta utilizada para instalálo verifica nas informações contidas no pacote quais são suas dependências Em seguida verifica se essas dependências já estão instaladas no sistema consultando a base de dados de pacotes instalados Dependendo da ferramenta ela solicitará que as dependências sejam instaladas ou tentará instalar as dependências auto maticamente De forma semelhante ao tentar remover um pacote instalado no sistema as mesmas verificações são efetuadas e a ferramenta indicará os outros pacotes que devem ser desinstalados juntamente com o pacote desejado Essas verificações são feitas com o intuito de deixar o sistema sempre num estado consistente isto é garantindo que estejam instaladas todas as dependências de todos os pacotes instalados Consultando informações sobre pacotes O comando rpm possui opções que permitem listar ou consultar informações de pacotes já instalados no sistema e de arquivos contendo pacotes ainda não instalados Para fazer consultas com o comando rpm utilizamos a seguinte sintaxe rpm qopções pacote arquivo As opções de consulta devem ser sempre utilizadas em conjunto com a opção q A Tabela 92 apresenta as principais opções de consulta utilizadas no comando rpm e suas ações Opção Ação A Lista todos os pacotes instalados no sistema f arquivo Lista o pacote ao qual pertence o arquivo arquivo p arquivo de pacote Consulta o arquivo de pacote Utilizada para consultar um arquivo contendo um pacote ainda não instalado i pacote Mostra informações sobre o pacote incluindo nome versão e descrição l pacote Lista os arquivos que pertencem a um pacote R pacote Lista as dependências de pacote Tabela 92 Opções de consulta do comando rpm 162 Introdução ao Linux A seguir são apresentados alguns exemplos de consultas combinando as opções da Tabela 92 O resultado não será mostrado aqui mas você pode executar os comandos no seu sistema e verificar suas respostas q Listando todos os pacotes instalados no sistema 1 rpm qa Descobrindo a qual pacote pertence um arquivo 1 rpm qf etcpasswd Mostrando informações sobre um pacote instalado 1 rpm qi bash Mostrando informações sobre um pacote ainda não instalado arquivo de pacote 1 rpm qpi dvgrab173i386rpm Listando todos os arquivos que pertencem a um pacote 1 rpm ql bash Conforme vimos embora o comando rpm seja a principal ferramenta para instalar atua lizar remover e consultar pacotes faltamlhe opções de como resolver automaticamente problemas com dependências ou de atualizar todo o sistema Para resolver esse tipo de problema foram criadas ferramentas de mais alto nível como o Yellowdog Update Modifier YUM da distribuição Red Hat e o Advanced Packaging Tool APT da distribuição Debian q 1 Como atualizar todos os pacotes do sistema com RPM 1 Como resolver dependências automaticamente com RPM 1 Ferramentas criadas para resolver estes problemas YUM q 1 APT Exercício de fixação 1 e Gerenciador de pacotes RPM 1 Para instalar um software qualquer qual seria a opção a ser utilizada junto com o geren ciador RPM 2 Para instalar um software qualquer e mostrar detalhes da instalação qual seria a opção a ser utilizada junto com o gerenciador RPM 3 Para instalar um software qualquer exibindo à medida que os arquivos são descom à medida que os arquivos são descom medida que os arquivos são descom pactados qual seria a opção a ser utilizada junto com o gerenciador RPM 4 Para atualizar um software devese utilizar o comando RPM com que opções 5 Para verificar se um pacote está instalado ou não utilizase qual comando 6 Para listar todos os pacotes instalados qual comando devo utilizar 7 Para remover um software utilizase qual comando Este exercício permite encontrar pacotes no repositório do YUM assim como proceder com sua instalação 163 Capítulo 9 Instalação de aplicações YUM O YUM utiliza o conceito de repositório de pacotes e por isso não há a necessidade de que os arquivos de pacotes sejam obtidos manualmente Um repositório é um site especial mente preparado contendo pacotes e arquivos de índice com informações sobre esses pacotes O comando yum é capaz de consultar um repositório e automaticamente e baixar e instalar pacotes liberando o administrador de efetuar essas tarefas manualmente Os repositórios do YUM estão divididos em três tipos básicos 1 Base nos repositórios base se localizam os pacotes que fazem parte da distribuição como os distribuídos no DVD de instalação 1 Updates nos repositórios update estão atualizações para os pacotes do repositório base e pacotes que não fazem parte dos repositórios base nem suas atualizações se encon tram nos repositórios extra 1 Extras um repositório extra pode conter pacotes não suportados oficialmente pela distribuição Configurando o YUM q YUM utiliza repositórios divididos em base update e extra 1 Arquivo etcyumconf 2 Tentativas de acesso aos repositórios 2 Arquivo de log 2 Local para armazenar os pacotes baixados 1 Arquivos repo etcyumreposdarquivorepo O YUM é configurado por meio do arquivo etcyumconf que define opções como número de tentativas de acesso a um repositório arquivo de log diretório onde manterá os pacotes baixados entre outras Já a localização dos repositórios a serem consultados é definida nos arquivos que ficam armazenados no diretório etcyumreposd A configuração padrão de ambos é suficiente para seu funcionamento correto Nesse capítulo veremos somente como adicionar novos repositórios Cada repositório é configurado mediante um arquivo com a extensão repo usualmente disponível no website do repositório Um único repositório pode ter vários espelhos mirrors que funcionam como cópias idênticas do repositório original mas ficam localizados em outros servidores permitindo que o administrador escolha aquele que está localizado mais próximo ou que possua um link de maior capacidade O exemplo abaixo mostra o conteúdo do arquivo jpackagerepo que configura o repositório jpackage que contém pacotes relacionados ao Java jpackage6fc17 nameJPackage 60 for Fedora Core 17 baseurlhttpmirrorsdotsrcorgjpackage60fedora17free gpgcheck1 Ao configurar um repositório é preciso verificar a versão de sua distribuição que no exemplo acima é o Fedora Core 4 Repositórios e pacotes de outras distribuições ou versões podem não funcionar corretamente Como medida de segurança os pacotes rpm podem ser 164 Introdução ao Linux assinados digitalmente Dessa forma é possível verificar se um pacote realmente veio de um determinado repositório e se não foi adulterado Os pacotes rpm são assinados com a chave GPG do repositório ou do desenvolvedor e podem ser verificados utilizandose sua chave pública Para isso é necessário importar essa chave pública por intermédio do comando rpm conforme os exemplos abaixo rpm import GPGPUBKEYasc rpm import httpwwwrepositoriocomGPGPUBKEYasc No primeiro exemplo a chave pública é importada por meio de um arquivo que a contém e no segundo a chave é importada diretamente do site q Exemplo de arquivo de repositório para pacotes relacionados ao Java jpackage16fc4 nameJPackage 16 for Fedora Core 4 baseurlhttpmirrorsdotsrcorgjpackage16fedora 4free gpgcheck1 Cuidados 1 Verificar a versão da distribuição 1 Verificar a assinatura digital rpm import GPGPUBKEYasc rpm import httpwwwrepositoriocomGPGPUBKEYasc Utilizando o YUM q 1 Instalar desinstalar e atualizar pacotes 1 Instalar e remover grupos de pacotes 1 Busca de pacotes com expressões regulares 1 Resolução de problemas com dependências entre pacotes 1 Atualização automática de todos os pacotes instalados no sistema Assim como rpm o comando yum também pode ser utilizado para instalar desinstalar e atualizar pacotes Além disso permite a instalação e remoção de grupos de pacotes a busca de pacotes com expressões regulares a resolução de problemas com dependências entre pacotes e a atualização automática de todos os pacotes instalados no sistema Veremos a seguir como efetuar cada uma dessas operações Instalando e removendo pacotes q Instalando e removendo pacotes com o yum yum install tcpdump Instalando pacotes utilizando arquivos locais yum localinstall pythonnumeric23702i386rpm Removendo um pacote yum remove tcpdump 165 Capítulo 9 Instalação de aplicações Para instalar um pacote basta executar o comando yum com a opção install seguida do nome do pacote O yum consulta então os repositórios em busca da versão mais recente do pacote e em seguida faz o download dele e de suas dependências caso necessário Após obter todos os pacotes necessários a instalação deles é executada O comando do exemplo seguinte instala o pacote tcpdump e suas dependências yum install tcpdump O yum também pode ser utilizado para instalar pacotes que já se encontram armazenados no computador do usuário Nestes casos utilizase a opção localinstall como mostra o exemplo yum localinstall pythonnumeric23702i386rpm Para remover um pacote e suas dependências basta utilizar a opção remove como mostra o exemplo yum remove tcpdump Sempre que o yum instala atualiza ou remove um pacote ele apresenta um sumário do que será feito e pede a confirmação do administrador antes de executar as ações necessárias O comando do exemplo acima apresentará o seguinte sumário Setting up Remove Process Resolving Dependencies Populating transaction set with selected packages Please wait Package tcpdumpi386 1438213FC4 set to be erased Running transaction check Dependencies Resolved Package Arch Version Repository Size Removing tcpdump i386 1438213FC4 installed 765 k Transaction Summary Install 0 Packages Update 0 Packages Remove 1 Packages Total download size 0 Is this ok yN Instalando grupos de pacotes q Instalando grupos de pacotes yum groupinstall MySQL Database Para listar grupos disponíveis yum grouplist 166 Introdução ao Linux O yum provê uma forma simples de instalar um grupo de pacotes relacionados a um deter minado serviço ou perfil do sistema Imagine que desejamos preparar um sistema para que funcione como um servidor de banco de dados Para tanto precisaríamos instalar um aplicativo Sistema Gerenciador de Banco de Dados SGBD e possivelmente bibliotecas de funções relacionadas A opção groupinstall do yum pode nos auxiliar nesta tarefa O exemplo abaixo instalaria o SGBD Mysql suas dependências e programas relacionados yum groupinstall MySQL Database As aspas são utilizadas no exemplo acima porque o nome do grupo possui caracteres de espaço Para obter uma lista dos grupos de pacotes conhecidos pelo yum utilize a opção grouplist conforme no exemplo abaixo yum grouplist De maneira análoga para remover um grupo de pacotes utilizamos a opção groupremove Atualizando o sistema q Atualizando o sistema yum update Atualizando somente determinados pacotes yum update bash tcpdump Listando pacotes que devem ser atualizados yum checkupdate O yum pode ser utilizado para atualizar apenas determinados pacotes ou para atualizar todos os pacotes instalados no sistema Quando utilizado com a opção update o yum compara as versões de todos os pacotes instalados com as versões destes mesmos pacotes disponíveis nos repositórios efetuando em seguida a atualização de todos os pacotes que estejam desatualizados Para atualizar todo o sistema basta executar o comando seguinte yum update Para atualizar somente determinados pacotes basta acrescentar os nomes dos pacotes ao comando Assim para atualizar somente os pacotes bash e tcpdump devemos executar o comando abaixo yum update bash tcpdump Outra opção é apenas listar os pacotes que deverão ser atualizados sem proceder com a atualização propriamente dita Isso pode ser feito com a opção checkupdate que retorna a lista dos pacotes a serem atualizados as novas versões disponíveis e o tipo de repositório de onde será baixado cada pacote Fazendo buscas e obtendo informações sobre pacotes q Listando os pacotes instalados yum list installed Listando um pacote com detalhes yum list bash Listando pacotes instalados que casem com a expressão regular yum list installed c 167 Capítulo 9 Instalação de aplicações q Listando os pacotes desatualizados yum list updates É possível consultar a base de dados de pacotes instalados no sistema e os pacotes dispo níveis em um repositório Também é possível listar os pacotes que atendam a um determi nado padrão de busca utilizando a opção list com alguns parâmetros adicionais que serão vistos a seguir Listando os pacotes instalados yum list installed Listando informações sobre o pacote bash yum list bash Listando os pacotes instalados que comecem com a letra c yum list installed c Listando os pacotes desatualizados yum list updates O yum possui ainda um poderoso mecanismo de busca capaz de procurar por palavraschave nome do pacote e sumário ou descrição do pacote Isso é bastante útil quando precisamos de um aplicativo que execute uma determinada função mas ainda não sabemos qual pacote utilizar Digamos que estamos a procura de um aplicativo que funcione como um servidor web Poderíamos então executar o yum com a opção search como no exemplo abaixo yum search webserver Toda vez que o comando yum é utilizado ele faz uma verificação por atualizações nos arquivos de índices dos repositórios Para evitar a demora ocasionada por esta ação podemos dizer ao yum que procure nas informações que já obteve desses repositórios sem ter que consultálos novamente Para isso utilizamos a opção C Para obter a descrição de um pacote basta utilizar a opção info O exemplo a seguir mostra como obter informações sobre o pacote bash yum info bash q Busca por pacotes usando palavrachave yum search webserver 1 Opção C serve para não buscar no repositório Para obter a descrição de um pacote yum info bash Outra opção interessante é a opção provides que retorna o nome do pacote que oferece um determinado serviço ou a qual pacote pertence um determinado arquivo Quando insta lamos um programa a partir dos arquivosfontes podemos necessitar instalar pacotes para atender a certos prérequisitos deste programa Por exemplo um determinado programa precisa de que a biblioteca libxyz esteja presente no sistema mas não sabemos o pacote que fornece essa biblioteca Poderíamos utilizar então o yum da seguinte maneira yum provides libxyz 168 Introdução ao Linux Para buscar um pacote que oferece um determinado serviço ou para descobrir a qual pacote pertence um determinado arquivo yum provides libxyzso1 q O cache do yum pode excluir informações manualmente yum clean yum clean headerspackagesall APT Advanced Packaging Tool APT é uma ferramenta de gerenciamento de pacotes utilizada na distribuição Debian e suas variantes que trata de forma automática problemas com dependências entre pacotes O APT possui um banco de dados que armazena informações sobre os pacotes instalados no sistema e utiliza essas informações para poder realizar a instalação atualização e remoção de pacotes de maneira correta Configurando o APT O APT é configurado por meio de diversos arquivos armazenados no diretório etcaptapt confd Neste arquivos são definidas opções relativas à configuração de proxy tempo de timeout para conexões com servidores entre outras Outro arquivo de configuração impor tante é o etcaptsourceslist onde são definidos os repositórios que serão utilizados para a instalação e atualização de pacotes Utilizando o APT O APT utiliza o comando aptget para realizar diversas tarefas como instalar atualizar e remover pacotes Veremos a seguir as principais funcionalidades deste comando Atualizando as lista de pacotes disponíveis Antes de fazer qualquer instalação atualização ou remoção de pacotes é preciso sincro nizar o banco de dados do APT com a lista de pacotes disponíveis nos repositórios Esta ação é executada através do comando abaixo aptget update Instalando pacotes Para instalar um pacote basta executar o comando aptget com a opção install seguida do nome do pacote O APT consulta então os repositórios definidos no arquivo sourceslist em busca da versão mais recente do pacote e em seguida faz o download dele e de suas dependências caso necessário Após obter todos os pacotes necessários a instalação deles é executada O comando do exemplo seguinte instala o pacote bind9 e suas dependências aptget install bind9 Sempre que utilizamos o aptget para instalar atualizar ou remover um pacote é apresentado um resumo das ações que serão executadas solicitando a confirmação do administrador antes de executálas O comando do exemplo anterior apresentará o seguinte resumo Reading package lists Done Building dependency tree 169 Capítulo 9 Instalação de aplicações Reading state information Done The following extra packages will be installed bind9utils Suggested packages bind9doc resolvconf The following NEW packages will be installed bind9 bind9utils 0 upgraded 2 newly installed 0 to remove and 23 not upgraded Need to get 466kB of archives After this operation 1413kB of additional disk space will be used Do you want to continue Yn A opção install também pode ser utilizada para atualizar pacotes A sintaxe do comando para atualizar um pacote é a mesma utilizada para a instalação de novos pacotes Se o pacote passado como parâmetro não estiver desatualizado uma mensagem será mostrada infor mando que a versão instalada já é a mais atual como mostra o exemplo aptget install wget Reading package lists Done Building dependency tree Reading state information Done wget is already the newest version 0 upgraded 0 newly installed 0 to remove and 21 not upgraded Removendo pacotes Para remover um pacote e suas dependências basta utilizar a opção remove como mostra o exemplo aptget remove bind9 A opção remove só remove os pacotes mantendo no sistema seus arquivos de configuração Para removêlos também é preciso acrescentar a opção purge como mostra o exemplo aptget remove bind9 purge Atualizando pacotes Para atualizar todos os pacotes instalados no sistema devemos utilizar a opção upgrade como mostra o exemplo aptget upgrade Antes disso no entanto é importante atualizar o banco de dados do APT com a opção update 170 Introdução ao Linux Atualizando a distribuição Para atualizar toda a distribuição de uma só vez devemos utilizar a opção distupgrade como mostra o exemplo aptget distupgrade Limpando o repositório local Quando instalamos um pacote através do comando aptget os arquivos necessários são baixados dos repositórios e armazenados em um repositório local que fica no diretório varcacheaptarchives Os arquivos utilizados para instalar os pacotes no sistema podem ser removidos com a opção clean como mostra o exemplo abaixo aptget clean q Opções mais utilizadas do comando aptget 1 update adquire novas listas de pacotes 1 install instala novos pacotes ou atualiza pacotes desatualizados 1 remove remove um pacote 1 upgrade faz uma atualização 1 distupgrade atualiza a distribuição 1 clean apaga arquivos baixados para instalação Fazendo buscas e obtendo informações sobre pacotes É possível fazer buscas por pacotes consultando a base de dados do APT através do comando aptcache com a opção search como mostra o exemplo a seguir aptcache search dns O comando anterior lista todos os pacotes cujo nome ou descrição casem com o padrão passado como parâmetro na busca A opção de busca é útil quando não sabemos o nome exato de um pacote De posse do nome correto do pacote podemos utilizar a opção show do comando aptcache para exibir informações sobre o pacote como mostra o exemplo abaixo aptcache show dnsutils Dicas sobre gerenciadores de pacotes q 1 Prefira pacotes feitos para sua distribuição 1 Tome cuidado com arquivos rpm de outras distribuições 1 Arquivos com headers estão em pacotes com sufixo dev ou devel 2 libpngdevel 1 Mantenha o controle dos pacotes que foram instalados a partir do códigofonte Prefira sempre instalar aplicativos a partir de pacotes feitos para sua distribuiçãoversão Em geral foram preparados visando a integração com o sistema e já vêm com correções de segurança aplicadas Ao instalar aplicativos a partir de arquivosfontes procure satisfazer os seus prérequisitos por intermédio de pacotes da própria distribuição Se for necessário utilize os arquivos de headers das bibliotecas que podem ser encontrados em pacotes especiais da distribuição Em geral esses pacotes recebem o nome da biblioteca acrescido dos sufixos dev ou devel Procure manter o códigofonte de aplicações dentro do diretório usrsrc 171 Capítulo 9 Instalação de aplicações É aconselhável manter um controle dos pacotes que foram instalados a partir do códigofonte ou de arquivos binários que deverão ser atualizados manualmente sempre que necessário Em alguns casos é possível manter todos os arquivos de um aplicativo instalado a partir do códigofonte ou de um arquivo binário sob um único diretório como por exemplo usrlocalaplicativo Isso pode facilitar a remoção do aplicativo quando ele não for mais necessário Exercício de fixação 2 e Gerenciador de pacotes APT 1 Qual a finalidade do comando aptget install nomepacote 2 Qual a diferença entre aptget upgrade e aptget distupgrade 3 Qual o gerenciador de pacotes da distribuição Debian 4 O que faz o comando aptcache 5 O que faz o comando aptcdrom 6 Pesquise a diferença entre aptitude e aptget 7 O que é um Mirror 172 173 Capítulo 9 Roteiro de Atividades Roteiro de Atividades 9 Atividade 91 Encontrando bibliotecas utilizadas por um programa Escolha três arquivos binários de programas dentro do diretório usrbin Verifique quais bibliotecas esses binários utilizam Atividade 92 Instalando uma aplicação a partir do seu códigofonte Instale a última versão do aplicativo wget a partir do seu códigofonte e configureo para que seja instalado dentro do diretório usrlocalcurso Caso não seja possível instalar descreva as dificuldades encontradas Verifique o conteúdo de usrlocalcurso após a instalação O códigofonte do wget pode ser obtido na seguinte URL httpftpgnuorggnuwget Atividade 93 Instalando uma aplicação a partir de um arquivo binário Instale o plugin do flash a partir de seu arquivo binário e descreva o que aconteceu na instalação Atividade 94 Instalando um pacote rpm A partir do arquivo de instalação localize o arquivo de pacote do programa tcpdump e o instale ou atualizeo utilizando o comando rpm Descreva o que você fez para instalar o pro grama e justifique qualquer problema ocorrido Se o tcpdump já estiver instalado no sistema o comando retornará a seguinte mensagem de erro o pacote tcpdump14400320090921gitdf3cb41el6x8664 já está instalado Atividade 95 Descobrindo a qual pacote pertence uma biblioteca Descubra a que pacote pertencem as bibliotecas utilizadas por um dos binários escolhidos na Atividade 91 Atividade 96 Descobrindo as dependências dos pacotes Utilizando o comando rpm descubra algumas das dependências do pacote utilizado na ativi dade anterior Verifique a utilidade de cada dependência Atividade 97 Atualizando o sistema com yum Utilize o yum para descobrir se há algum pacote a ser atualizado no seu sistema Se houver proceda com a atualização Atividade 98 Instalando pacotes com yum Utilize o yum para instalar a biblioteca ncurses e os seus arquivos de headers 174 175 Capítulo 10 Configuração e utilização de dispositivos de hardware objetivos conceitos 10 Configuração e utilização de dispositivos de hardware Configurar e utilizar os principais tipos de dispositivos como unidades de CDDVD pen drives placas de rede controladoras SCSI e placas de vídeo Arquivos de dispositivos módulos gerenciamento e configuração de dispositivos e gerenciamento de energia Introdução q Suporte a dispositivos no Linux 1 Como um dispositivo interage com o sistema operacional Linux Um driver no Linux pode ser 1 Embutido no kernel 1 Um módulo do kernel O Linux assim como outros sistemas operacionais modernos é capaz de suportar um grande número de dispositivos de hardware Particularmente nos últimos anos grandes mudanças foram feitas no sistema permitindo um melhor suporte a uma série de disposi tivos tornandoos progressivamente plugandplay Embora esteja cada vez mais fácil confi gurar e utilizar um dispositivo no Linux seja de forma automática ou com a ajuda de algum aplicativo gráfico abordaremos alguns conceitos por trás dessas facilidades e sempre que possível demonstraremos como configurar e utilizar os principais dispositivos sem fazer uso de aplicativos gráficos Assim o aluno estará se preparando para situações em que esses aplicativos não estejam disponíveis como em um servidor por exemplo ou quando a con figuração automática eventualmente não funcionar Veremos como funciona o suporte aos dispositivos no Linux abordando o kernel e seus subsistemas Em seguida veremos como configurar e utilizar algumas das classes de dispositivos mais comuns Para que um sistema operacional seja capaz de utilizar um dispositiv é necessário um pequeno programa capaz de se comunicar com o dispositivo em questão traduzindo requi sições do sistema para comandos deste dispositivo Esse programa é conhecido como driver e no Linux está intimamente ligado ao kernel podendo inclusive estar embutido nele No entanto como o número de dispositivos suportados é bastante grande e embutir todos os drivers diretamente no kernel o tornaria grande demais foi criado um mecanismo que torna 176 Introdução ao Linux possível separar os drivers em pequenos arquivos chamados de módulos que podem ser carregados e utilizados pelo kernel sob demanda Uma vez carregados esses módulos fun cionam como se fossem uma parte do kernel sendo executados com os mesmos privilégios que ele o que é conhecido como kernelspace Usualmente o kernel é compilado de forma a ter suporte aos principais dispositivos como teclados mouses placas de rede discos rígido etc Os drivers desses dispositivos são embutidos diretamente no kernel e os drivers dos demais dispositivos são disponibilizados como módulos Exercício de fixação 1 e Verificando o kernel Qual comando você pode utilizar para verificar a versão do kernel em seu sistema Arquivos de dispositivos q Arquivos de dispositivos 1 Permitem operações como abrir fechar ler e escrever 1 Localizados no diretório dev 1 Criados através do comando mknod 1 Números Major e minor utilizados pelo kernel para identificar o tipo de dispositivo e o dispositivo em si respectivamente 1 Podem ser orientados poa bloco ou caractere Os projetistas do sistema Unix no qual o Linux se baseia tinham como princípio de projeto a máxima de que tudo no Unix é um arquivo Com isso pretendiam simplificar o desen volvimento de aplicações oferecendo aos programadores uma interface com o sistema onde todos os seus recursos são tratados como arquivos isto é suportando as operações de abrir fechar ler e escrever A grande maioria dos dispositivos no Linux está associada a um arquivo especial no diretório dev por meio do qual os programas podem se comunicar com estes dispositivos Por exemplo se um programador deseja escrever um programa que leia um determinado dado de uma porta serial basta fazer com que esse programa abra o arquivo devttyS0 e leia os seus dados As mesmas permissões aplicadas a arquivos comuns também são aplicadas a arquivos de dispositivos Sendo assim é possível controlar qual usuário ou grupo de usuários tem acesso a um dispositivo Cada arquivo de dispositivo é criado por intermédio do comando mknod e está associado a dois números chamados de major e minor Esses números são utilizados pelo kernel para identificar a qual dispositivo estão associados Além disso cada dispositivo pode ser do tipo block quando manipulam dados em blocos de 512 bytes ou múltiplos ou character quando manipulam dados byte a byte O primeiro tipo permite a leitura e a escrita de maneira aleatória podese especificar de onde se quer ler ou escrever Já no segundo a leitura e a escrita só podem ser feitas de forma sequencial A Tabela 101 mostra alguns dispositivos do Linux com suas descrições e arquivos associados Arquivo Dispositivo Descrição hda Disco ou unidade de CDDVD IDE Disco IDE master conectado à controla dora IDE primária hda1 Primeira partição primária do disco IDE master conectado à controladora IDE primária Os arquivos hda1 até hda4 são as parti ções primárias de um disco A partir de hda5 são as partições estendida e lógicas 177 Capítulo 10 Configuração e utilização de dispositivos de hardware Arquivo Dispositivo Descrição hdb Disco ou unidade de CDDVD IDE Disco IDE slave conectado à controladora IDE primária hdc Disco ou unidade de CDDVD IDE Disco IDE master conectado à controla dora IDE secundária hdd Disco ou unidade de CDDVD IDE Disco IDE slave conectado à controladora IDE secundária ttySO Primeira interface serial As interfaces seriais são identificadas por ttyS0 ttyS1 etc dsp0 Primeira placa de som mixer Dispositivo de controle da placa de som sda Disco ou unidade de CDDVD SCSI ou pen drive Assim como os discos IDE os discos SCSI são identificados por sda sdb etc e as partições são identificadas como sda1 sda2 etc scd0 Unidade de CDDVD SCSI Primeira unidade de CDDVD SCSI Os demais são identificados por scd1 scd2 etc input mice Mouse Mouse PS2 ou USB input event0 Teclado Teclado PS2 cdrom Unidade de CDDVD IDE Link para hda hdb hdc ou hdd pois a unidade de CDDVD é tratada como um disco IDE Exercício de fixação 2 e Arquivos de dispositivos Descreva o que seriam os dispositivos abaixo 1 Sda3 1 Hda2 1 Cdrom 1 Scd2 1 Dsp2 Módulos Módulos são pequenos arquivos que contêm trechos de códigos que implementam fun cionalidades do kernel Eles fornecem suporte a dispositivos de hardware ou a funcionali dades do sistema operacionalOs módulos utilizados pelo kernel são específicos para cada versão e se encontram no diretório libmodulesversaokernel Por meio dos comandos insmod modprobe rmmod e lsmod é possível carregar módulos no kernel remover e listar os módulos em uso Veremos a seguir como efetuar cada uma dessas operações Tabela 101 Principais disposi tivos do Linux 178 Introdução ao Linux Para listar todos os módulos carregados pelo kernel basta utilizar o comando lsmod conforme o exemplo abaixo lsmod Module Size Used by lp 12164 0 nfs 208324 1 lockd 62472 2 nfs sunrpc 144452 3 nfslockd parportpc 41540 1 parport 38856 2 lpparportpc A saída do comando lsmod apresenta o nome dos módulos o seu tamanho em bytes o número de instâncias dos módulos que estão carregadas e quais são os outros módulos que os utilizam já que um módulo pode prover funções necessárias para outro módulo Observe também que o nome de um módulo é o nome do arquivo que contém esse módulo sem sua extensão Para carregar um módulo manualmente podemos utilizar os comandos insmod ou modprobe O comando insmod insere apenas o módulo especificado na linha de comando enquanto o comando modprobe é capaz de inserir o módulo especificado e ainda carregar de forma automática os módulos adicionais utilizados pelo módulo especificado É pos sível também por meio desses comandos passar alguns parâmetros para o módulo que está sendo carregado A sintaxe desses comandos é apresentada a seguir insmod nomedomodulo parametros modprobe nomedomodulo parametros Para obter mais informações sobre um módulo como por exemplo saber os parâmetros que ele aceita podemos utilizar o comando modinfo O comando do exemplo abaixo mostra as informações relativas ao módulo lp modinfo lp filename libmodules26132kerneldriverscharlpko alias charmajor6 license GPL vermagic 26132 SMP preempt PENTIUM4 gcc40 depends parport parm resetbool parm parportarray of charp Para descarregar um módulo da memória utilizamos o comando rmmod Convém notar que caso o módulo esteja sendo utilizado por outro módulo o sistema não irá removê lo O comando modprobe pode ser utilizado para remover tanto um determinado módulo quanto os módulos que dependem desse módulo utilizandose a opção r como no exemplo abaixo 179 Capítulo 10 Configuração e utilização de dispositivos de hardware modprobe r lp q Módulos são específicos para cada versão do kernel São encontrados no diretório libmodulesversão do kernel Comandos relacionados 1 lsmod lista os módulos carregados na memória 1 insmod carrega um modulo 1 modprobe carrega um módulo e seus módulos dependentes 1 modinfo exibe informações sobre um módulo 1 rmmod descarrega um módulo da memória O comando modprobe pode ser utili zado com a opção r para descarregar um módulo e seus módulos dependentes Exercício de fixação 3 e Módulos 1 Liste alguns módulos carregados na memória 1 Carregue algum módulo 1 Exibir informações sobre algum módulo 1 Descarregue o módulo anteriormente carregado Initrd Imagine que o sistema de arquivos em que se encontram os módulos do kernel esteja arma zenado em um disco conectado a uma controladora de discos que necessita de um módulo do kernel para poder ser utilizada pelo sistema operacional Temos então um impasse Para resolver este problema os programadores do kernel criaram o initrd initial RAM disk O initrd é um sistema de arquivos temporário que é carregado em memória RAM durante o boot do sistema operacional no qual estão presentes todos os módulos que o kernel precisa no momento do boot O initrd é carregado juntamente com o kernel pelo carregador de boot de segundo estágio q Como ter acesso a um disco SCSI durante o boot se o driver para esse dispositivo está em um módulo do kernel O kernel precisa do módulo para acessar o disco SCSI mas esse módulo está armazenado no disco SCSI e o kernel ainda não carregou o módulo da controladora de discos SCSI Solução sistema de arquivos simples que o carregador de boot entende contendo os módulos necessários para o sistema inicializar Gerenciando dispositivos O gerenciamento de dispositivos no Linux é feito de forma automática por programas que serão descritos neste tópico Hotplug Desde a introdução da série 26 do kernel do Linux este passou a contar com um subsis tema conhecido como hotplug cuja função é detectar e gerar eventos sempre que um novo dispositivo é conectado a um barramento USB PCI SCSI PCMCIA ou firewire O hotplug 180 Introdução ao Linux também é capaz de identificar os dispositivos presentes durante o processo de boot do sistema Isto é feito através de mensagens enviadas aos barramentos citados Quando algum dispositivo é conectado ele responde à mensagem fornecendo ao kernel um identi ficador ID Com esse ID o kernel pode consultar uma tabela para identificar o dispositivo e executar em espaço de usuário um programa também chamado de hotplug que é capaz de carregar os módulos de controle de um dispositivo e configurálo automaticamente Além disso o hotplug também pode executar scripts localizados nos diretórios etchotplug e etchotplugd Um script pode por exemplo criar um ícone no desktop para acesso a um pen drive sempre que este for conectado ao computador Neste módulo não veremos a criação de scripts para atuar em conjunto com o hotplug Udev Tradicionalmente o conteúdo do diretório dev era estático ou seja durante a instalação um script criava todos os arquivos de dispositivos mesmo que seus dispositivos asso ciados não estivessem instalados no sistema Além disso se fosse instalado um novo tipo de dispositivo para o qual não existisse um arquivo de dispositivo correspondente era necessário criar esse arquivo manualmente Para evitar essa situação foi criado um sistema de arquivos conhecido como devfs capaz de criar esses dispositivos automaticamente Pos teriormente esse sistema foi substituído por outro conhecido como udev que inicialmente foi concebido para trabalhar em conjunto com o hotplug Assim quando um dispositivo era detectado o kernel disparava um processo também chamado de hotplug que por sua vez acionava o udev para que ele criasse o arquivo de dispositivo dinamicamente Em algumas distribuições o udev trabalha em conjunto com o hotplug enquanto em outras substitui completamente o hotplug executando suas funções Uma característica do udev é que podemos definir arquivos de dispositivos fixos para cada dispositivo de hardware utilizado Isto facilita a criação de scripts utilizados pelo udev pois caso tenhamos dois dispositivos do mesmo tipo como por exemplo duas impressoras pode acontecer de a cada boot do sistema elas serem associadas a arquivos de dispositivos dife rentes o que dificultaria a automatização de tarefas associadas a cada uma das impressoras nesses scripts Por exemplo ao invés de utilizarmos os arquivos de dispositivo padrão para impressoras devlp0 e devlp1 podemos definir através do udev os arquivos devhp e dev epson Assim nos scripts disparados pelo udev as ações executadas pela impressora HP estariam sempre associadas ao arquivo de dispositivo devhp Outra característica importante do udev é o uso de regras que permitem a execução de ações quando um dispositivo é conectado ao sistema As regras do udev ficam localizadas em arquivos dentro do diretório etcudevrulesd e possuem uma sintaxe específica Um exemplo de regra pode ser abrir o gerenciador de arquivos konqueror sempre que um pen drive for conectado A regra do exemplo abaixo executa o script connectpendrivesh sempre que um pen drive for conectado ao computador BUSusb ACTIONadd KERNELsd NAMEk RUNusr localbinconnectpendrivesh A sintaxe das regras do udev é bem intuitiva como pode ser visto no exemplo acima mas não será apresentada neste módulo 181 Capítulo 10 Configuração e utilização de dispositivos de hardware q 1 Detecção de dispositivos no Linux 1 Plug and Play 1 O suporte é dado pelo kernel por intermédio do hotplug 2 ID do dispositivo 2 Verifica o ID em uma tabela 1 Módulo pode ser carregado automaticamente com o auxílio do programa hotplug O diretório dev passou a ser criado em memória contendo apenas os arquivos de disposi tivos que realmente estavam conectados ao sistema Nas versões do kernel posteriores à versão 2615 o programa hotplug passou a ser substituído por uma nova versão do udev capaz de fazer todas as funções anteriormente desempenhadas pelos dois programas isto é carregar módulos configurar o dispositivo e criar os arquivos de dispositivo q O conteúdo do diretório dev é estático Desvantagens 1 Centenas de arquivos de dispositivos eram criados mas muitos jamais seriam utilizados 1 Um novo tipo de dispositivo poderia necessitar que um arquivo de dispositivo fosse criado manualmente Soluções 1 devfs 1 udev evolução do devfs com suporte às facilidades do hotplug Exercício de fixação 4 e Gerenciando dispositivos Descreva a diferença entre hotPlug e udev Identificando e configurando dispositivos Conforme foi visto cada vez mais as novas versões de kernel e programas associados se encarregam de fazer todo o trabalho de identificação e configuração de dispositivos No entanto em alguns poucos casos ainda é necessária a intervenção do administrador para configurar determinados dispositivos Na maioria dos casos isto se deve ao fato de que os módulos necessários para suportar estses dispositivos não estão disponíveis no sistema Algumas ferramentas podem ser bastante úteis nessa tarefa como veremos a seguir Para identificar os dispositivos PCI conectados podemos utilizar o comando lspci que lê informações de arquivos localizados no diretório proc e as apresenta em um formato mais apropriado O diretório proc é um sistema de arquivos virtual criado pelo kernel durante o boot que armazena seus dados em memória RAM O comando lspci na sua forma mais básica traz a posição do dispositivo no barramento seguida de sua descrição como mostra o exemplo abaixo lspci 000000000 Host bridge Silicon Integrated Systems SiS 740 Host rev 01 000000010 PCI bridge Silicon Integrated Systems SiS 182 Introdução ao Linux Virtual PCItoPCI bridge AGP 000000025 IDE interface Silicon Integrated Systems SiS 5513 IDE 000000027 Multimedia audio controller Silicon Integrated Systems SiS Sound Controller rev a0 000000030 USB Controller Silicon Integrated Systems SiS USB 10 Controller rev 0f 000000033 USB Controller Silicon Integrated Systems SiS USB 20 Controller 000000040 Ethernet controller Silicon Integrated Systems SiS SiS900 PCI Fast Ethernet rev 90 000001000 VGA compatible controller Silicon Integrated Systems SiS 65xM650740 PCIAGP VGA Display Adapter No exemplo acima podemos ver que o comando lspci lista também um dispositivo AGP a placa de vídeo os controladores USB e alguns subsistemas da placamãe como o contro lador IDE e o Host Bridge q Apesar das facilidades do hotplug algumas vezes é necessário que o administrador do sistema identifique algum dispositivo manualmente Para listar os dispositivos conectados ao barramento PCI 1 O comando lspci lê dados do diretório procbuspci e apresenta os dispositivos instalados Outros comandos úteis para verificação de informações sobre os dispositivos instalados são listados a seguir 1 lscpu exibe diversos parâmetros da CPU que são obtidos através do arquivo proccpuinfo 1 lshw exibe informações detalhadas a respeito do hardware instalado no computador Entre as informações exibidas podemos destacar dados sobre a placamãe CPU memória barramentos interfaces discos entre outros 1 lsusb exibe informações sobre os barramentos USB disponíveis no sistema e sobre os dispositivos a eles conectados O diretório proc é também uma fonte de informações sobre o hardware instalado no com putador Nele temos diversos arquivos entre os quais podemos destacar 1 proccpuinfo arquivo que exibe informações sobre a CPU 1 procmeminfo arquivo que exibe informações sobre a memória 1 procdevices arquivo que exibe informações sobre dispositivos ativos no sistema 1 procfilesystems arquivo que exibe a lista de sistemas de arquivos suportados pelo kernel 1 procinterrupts arquivo que exibe a lista de interrupções e seus respectivos dispositivos 1 procacpi diretório que contém informações sobre o sistema de gerenciamento de energia Advanced Configuration and Power Interface ACPI 183 Capítulo 10 Configuração e utilização de dispositivos de hardware 1 procbus diretório que contém informações sobre dispositivos PCI USB entre outros 1 procnet diretório que contém informações sobre os protocolos de rede disponíveis no sistema 1 procsys diretório que além de fornecer informações sobre o sistema permite que parâmetros de configuração do kernel sejam alterados Além de fornecer diversas informações sobre o hardware do sistema ainda é possível confi gurarmos diversos parâmetros do kernel através do diretório proc No entanto neste curso não veremos a parte de configuração do kernel q O diretório proc contém diversas informações sobre o sistema com destaque para os arquivos 1 proccpuinfo 1 procmeminfo 1 procdevices 1 procfilesystems 1 procinterrupts 1 procacpi 1 procbus 1 procnet 1 procsys Os kernels a partir da versão 26 apresentam também o diretório sys que contém informações sobre dispositivos de maneira análoga ao diretório proc Unidades de CDDVD q Unidades de CDDVD IDE 1 Barramento primário 2 Master hda 2 Slave hdb 1 Barramento secundário 2 Master hdc 2 Slave hdd Unidades de CDDVD SCSI 1 Primeiro dispositivo detectado scd0 1 Segundo dispositivo detectado scd1 O dispositivo é configurado durante a instalação 1 Arquivo etcfstab Unidades de CDDVD do tipo IDE são suportadas de maneira praticamente transparente pelo kernel Quando conectamos uma unidade de CDDVD ao computador esta é associada a um arquivo de dispositivo de acordo com a sua posição no barramento IDE Se a unidade estiver conectada ao barramento primário será associada aos arquivos hda ou hdb caso esteja configurada como master ou slave respectivamente Já se estiver conectada ao bar ramento secundário será associada aos arquivos hdc ou hdd caso esteja configurada como master ou slave respectivamente 184 Introdução ao Linux Unidades de CDDVD do tipo SCSI necessitam que a interface SCSI onde estão conectados tenha sido corretamente reconhecida e que o módulo que suporta unidades de CDDVD SCSI tenha sido carregado o que normalmente acontece de forma automática Uma vez reconhecidas as unidades de CDDVD SCSI são associadas aos seus arquivos de disposi tivos scd0 para a primeira unidade scd1 para a segunda e assim por diante Durante a instalação do Linux o programa instalador identifica em que tipo de barramento e em que posição a unidade de CDDVD se encontra e configura o arquivo etcfstab de acordo com essa localização O programa instalador pode também criar o link devcdrom apontando para o arquivo real correspondente à unidade de CDDVD O arquivo etcfstab é lido por alguns scripts de iniciali zação durante o boot e pelos comandos mount e umount Neste arquivo são relacionados os arquivos de dispositivos o seu ponto de montagem o tipo de sistema de arquivos as opções de montagem a opção de dump e a ordem de verificação do sistema de arquivos Para obter mais detalhes sobre o arquivo etcfstab sua página de manual pode ser consultada Durante o boot o kernel identifica os dispositivos conectados listandoos um a um Estas informações podem ser recuperadas com o comando dmesg O exemplo abaixo mostra o trecho que lista a unidade de CDDVD IDE Probing IDE interface IDE0 hdb HLDTST DVDRAM GSA4163B ATAPI CDDVDROM drive hdb ATAPI 40X DVDROM DVDRRAM CDRRW drive 2048kB Cache UDMA33 q O arquivo de dispositivo pode ser um link 1 devcdrom O comando dmesg pode ajudar a identificar qual o dispositivo correspondente à unidade de CDDVD Probing IDE interface IDE0 hdb HLDTST DVDRAM GSA4163B ATAPI CDDVDROM drive hdb ATAPI 40X DVDROM DVDRRAM CDRRW drive 2048kB Cache UDMA33 Observe que no trecho acima estão listados um disco IDE hda e suas partições e o drive de CDDVD hdb Ao contrário de discos IDE CDs não apresentam partições portanto são acessados por intermédio de seu arquivo raiz que no exemplo acima seria devhdb Assim como ocorre com discos IDE para podermos ler o conteúdo de um CD ou DVD temos que montálo antes utilizando o comando mount Supondo que a unidade de CDDVD esteja associada ao arquivo devhdb poderíamos montálo no diretório mntcdrom com o seguinte comando mount devhdb mntcdrom Poderíamos alterar o arquivo etcfstab introduzindo a linha abaixo para que a unidade de CDDVD seja montada automaticamente no boot 185 Capítulo 10 Configuração e utilização de dispositivos de hardware devhdb mntcdrom iso9660 rousernoauto 0 0 Nesta linha indicamos o dispositivo o seu ponto de montagem o tipo de sistema de arquivos CDs e DVDs utilizam sempre o tipo iso9660 seguido das opções de montagem No caso de CDs e DVDs as opções mais utilizadas são ro read only noauto o dispositivo não é montado automaticamente durante o boot e user permite que qualquer usuário monte o dispositivo e não apenas o usuário root Com o arquivo etcfstab configurado adequada mente um usuário do sistema poderia montar a unidade de CDDVD indicando apenas o ponto de montagem como mostra o exemplo abaixo mount mntcdrom Para ejetarmos um CD ou DVD devemos desmontar a unidade antes utilizando o comando umount como mostra o exemplo abaixo umount mntcdrom É importante ressaltar que o Linux não permite que um dispositivo seja desmontado se algum arquivo contido nele estiver sendo utilizado por algum recurso do sistema Assim o simples fato de existir um shell aberto com o diretório corrente pertencente ao dispositivo impede que o mesmo seja desmontado Além disso o botão eject da unidade de CDDVD não funciona enquanto o dispositivo estiver montado q Montando uma unidade de CDDVD mount devhdb mntcdrom Configurar o fstab para facilitar o uso devhdb mntcdrom iso9660 rousernoauto 0 0 Com isso temos o uso simplificado por parte de qualquer usuário mount mntcdrom Após o uso do CD ou DVD a unidade deve ser desmontada com o comando abaixo umount mntcdrom Para desmontar a unidade de CDDVD todos os arquivos do dispositivo devem estar fechados Além disso não é possível utilizar o botão eject se o dispositivo estiver montado Dispositivos de armazenamento USB q O dispositivo de armazenamento USB é suportado pelo kernel por meio do módulo usbstorage que por sua vez utiliza subsistema SCSI Pen drives são tratados como discos SCSI 1 devsda1 1 devsda2 Os dispositivos de armazenamento USB são suportados por meio do módulo usbstorage que por sua vez utiliza o subsistema SCSI Assim os dispositivos de armazenamento USB como pen drives são tratados como se fossem discos SCSI utilizando como arquivos de dispositivos os tradicionais devsdXY onde X é uma letra e Y um número Ao conectarmos um pen drive o subsistema hotplug detecta este evento identifica o dispositivo carrega os módulos necessários e monta o dispositivo O processo de montagem é semelhante ao de unidades CDDVD mudando apenas o arquivo de dispositivo associado Podemos verificar se o sistema reconheceu o pen drive executando o comando dmesg Em seguida podemos 186 Introdução ao Linux verificar qual arquivo de dispositivo foi designado para o pen drive mediante as informa ções obtidas no arquivo procpartitions Este arquivo lista os discos e partições encontrados no sistema como mostra o exemplo abaixo cat procpartitions Major Minor Blocks Name 3 0 58605120 hda 3 1 25438896 hda1 3 2 594405 hda2 8 0 1993728 sda 8 1 1993724 sda1 No exemplo acima podemos observar que a máquina possui um disco IDE com duas parti ções e um pen drive de 2 GB com uma partição Os pen drives geralmente utilizam o sistema de arquivos VFAT para manter a compatibili dade com sistemas Windows mas nada nos impede de criar nelas um sistema de arquivos do tipo ext3 ou ext4 q 1 O hotplug pode carregar automaticamente os módulos necessários para o uso de pen drives 1 O comando dmesg pode informar se o sistema reconheceu o dispositivo 1 O arquivo procpartitions mostra qual o arquivo de dispositivo está associado ao pen drive cat procpartitions Major Minor Blocks Name 3 0 58605120 hda 3 1 25438896 hda1 3 2 594405 hda2 8 0 1993728 sda 8 1 1993724 sda1 Interfaces de rede q 1 Interfaces de rede possuem um bom suporte no Linux 1 Não possuem um arquivo de dispositivo associado no diretório dev 1 O acesso a esses dispositivos se faz por meio de sockets 1 Interfaces ethernet são usualmente identificadas pelo sistema como ethX 1 Interfaces wireless são usualmente identificadas pelo sistema como wlanX Interfaces de rede são provavelmente um dos dispositivos mais bem suportados pelo Linux Desde o seu surgimento até hoje a Internet é o principal meio de comunicação entre os desen volvedores do sistema logo é natural que seja dada uma atenção especial para os dispositivos de rede Usualmente as interfaces de rede são detectadas pelo subsistema hotplugudev durante o boot e seus módulos são automaticamente carregados Ao contrário de outros dispo 187 Capítulo 10 Configuração e utilização de dispositivos de hardware sitivos as interfaces de rede não possuem um arquivo de dispositivo a elas associado O acesso a este tipo de dispositivo acontece por outro método conhecido como sockets Usualmente as interfaces de rede que utilizam o padrão ethernet são nomeadas como ethX onde X é um número inteiro Já as interfaces de rede sem fio são usualmente nome adas como wlanX embora também possam ser nomeadas utilizando o mesmo padrão das interfaces ethernet Exibindo as interfaces de rede do sistema Para verificarmos as interfaces de rede disponíveis no sistema podemos listar conteúdo do arquivo procnetdev ou utilizar o comando ip como mostra o exemplo abaixo ip link list 1 lo LOOPBACKUPLOWERUP mtu 16436 qdisc noqueue state UNKNOWN linkloopback 000000000000 brd 000000000000 2 eth0 BROADCASTMULTICASTUPLOWERUP mtu 1500 qdisc pfifofast state UP qlen 1000 linkether 080027ded199 brd ffffffffffff Observe que são listados dois dispositivos de redes lo e eth0 O dispositivo lo referese à interface de loopback que é um dispositivo virtual utilizado para comunicação local entre apli cações Logo o sistema acima possui apenas uma placa de rede identificada pelo nome eth0 O comando acima mostra ainda o endereço físico MAC Address das interfaces listadas Este e outros comandos de configuração de interfaces de rede serão vistos em detalhes em outro módulo Veremos aqui apenas como fazer configurações simples de rede q 1 O arquivo procnetdev contém os dispositivos de redes disponíveis no sistema 1 O comando ip link list também retorna dados dos dispositivos de redes do sistema ip link list 1 lo LOOPBACKUP mtu 16436 qdisc noqueue linkloopback 000000000000 brd 000000000000 2 eth0 BROADCASTMULTICASTUP mtu 1500 qdisc pfifofast qlen 1000 linkether 0002555d07c6 brd ffffffffffff Gerenciando as interfaces de rede do sistema O comando do exemplo abaixo ativa a interface de rede eth0 utilizando o endereço IP 19216801 e a máscara de rede 2552552550 ifconfig eth0 19216801 netmask 2552552550 up Para desativarmos a interface eth0 podemos utilizar também o comando ifconfig como mostra o exemplo abaixo ifconfig eth0 down Para tornar estas modificações permanentes devemos editar os arquivos de configuração ifcfgethX dentro do diretório etcsysconfignetworkscripts o que pode ser feito manual mente ou com o auxílio de um programa de configuração gráfico tópico que também não será abordado neste módulo 188 Introdução ao Linux q O principal comando para ativar e modificar endereços de redes é o ifconfig ifconfig eth0 19216801 netmask 2552552550 up ifconfig eth0 down Configurações permanentes etcsysconfignetworkscriptsifcfgethX Placas SCSI q 1 O padrão Small Computer System Interface SCSI estabelece um conjunto de inter faces e comandos para transferência de dados entre dispositivos 1 O Linux oferece suporte a vários tipos de controladoras SCSI 1 A ordem de detecção é dada pelo ID do disco no barramento 1 Discos SCSI também podem ser montados e utilizados da mesma maneira que discos IDE 1 Eventualmente tornase necessário o uso de initrd para carregar os módulos SCSI da controladora durante o processo de boot do sistema O padrão SCSI estabelece um conjunto de interfaces e comandos para transferência de dados entre dispositivos Este padrão geralmente é utilizado em servidores que necessitam de discos de alto desempenho Além disso o preço de dispositivos SCSI não os torna atra entes para uso em desktops Para que um disco SCSI funcione ele deve ser conectado a uma controladora de discos com patível com o padrão SCSI O Linux suporta vários tipos de placas controladoras SCSI e o sub vários tipos de placas controladoras SCSI e o sub os tipos de placas controladoras SCSI e o sub sistema hotplug é capaz de detectar e carregar o módulo apropriado para cada controladora Ao contrário de discos IDE em sistemas SCSI não existe o conceito de controladoras pri não existe o conceito de controladoras pri controladoras pri mária e secundária e discos master e slave Um disco em um barramento SCSI é nomeado de acordo com a ordem na qual é detectado Assim o primeiro disco SCSI é associado ao dispositivo devsda o segundo ao devsdb e assim por diante A ordem de detecção é dada pelo ID do disco no barramento uma configuração feita por meio de jumpers no disco Discos SCSI também podem ser montados e utilizados da mesma maneira que discos IDE A única complicação que aparece fica por conta da situação em que temos o nosso sistema de arquivos montado em um disco SCSI Neste caso pode ser necessário acrescentar numa imagem initrd os módulos de suporte à controladora SCSI Este procedimento não será des crito aqui mas o aluno que desejar mais informações pode começar consultando o manual de sistema do comando mkinitrd Placas de vídeo q O Linux possui suporte a placas de vídeo em três modos 1 Modo texto suporte nativo 1 Modo framebuffer o suporte deve ser habilitado no kernel 1 Modo gráfico para suportar a interface gráfica é necessário habilitar o servidor Xorg O Linux pode suportar placas de vídeo em três modos distintos texto framebuffer e gráfico O modo texto suporta apenas texto podendo utilizar também algumas cores É neste modo que utilizamos a interface de linha de comando O suporte para o modo texto é nativo no kernel O modo framebuffer é uma espécie de melhoria do modo texto onde os programas 189 Capítulo 10 Configuração e utilização de dispositivos de hardware acessam diretamente a memória de vídeo da placa o que possibilita que apresentem imagens e gráficos no que seria apenas um terminal com suporte a texto Usualmente esse modo é utilizado pelos kernels das distribuições Linux para a criação de processos de boots gráficos Esse modo exige o suporte no kernel para uma placa específica ou um padrão de vídeo conhe cido como VESA O modo gráfico ao qual daremos mais destaque necessita que a placa de vídeo seja configurada de modo adequado para que seja suportada pelo servidor Xorg A princípio o Xorg não necessita de nenhum módulo do kernel já que possui seus próprios módulos Os módulos do Xorg se encontram no diretório usrX11R6libmodulesdrivers ou no diretório usrlibxorgmodulesdrivers e são nomeados utilizando o padrão nomedomódulodrvso Os módulos do Xorg são bastante genéricos O módulo trident por exemplo suporta várias placas com chipsets da Trident Para obter a lista de todas as placas suportadas por um módulo basta consultar sua página de manual no sistema É possível utilizar o comando Xorg para gerar automaticamente um arquivo de configuração como mostra o exemplo abaixo Xorg configure Este comando irá gerar um arquivo de configuração de exemplo chamado xorgconfnew no diretório root que depois deverá ser copiado para o diretório etcX11 com o nome de xorg conf O módulo configurado para a placa de vídeo detectada pode ser encontrado na seção device do arquivo xorgconf Neste módulo não veremos a parte de configuração do Xorg q O Xorg possui os seus próprios módulos 1 usrX11R6libmodulesdrivers 1 usrlibxorgmodulesdrivers Nome dos arquivos de drivers 1 nomedomódulodrvso Um módulo pode suportar diversos modelos de placas do mesmo fabricante Configuração automática do Xorg 1 Xorg configure A grande maioria das placas também funciona com o módulo VESA que possui suporte a um conjunto mínimo de funcionalidades definidas pelo padrão VESA Algumas placas no entanto necessitam de um suporte extra do kernel para que o sistema seja capaz de utilizar algumas funcionalidades avançadas disponibilizadas pelo hardware como acele ração de vídeo e funções 3D Algumas placas com chipsets da ATI e da NVIDIA necessitam ainda de um módulo especial para o Xorg e outro para o kernel Estes módulos especiais são disponibilizados pelo fabricante na forma de arquivos de instalação binários q Interface gráfica Xorg tem funcionalidades avançadas de algumas placas dependem do kernel 1 Aceleração de vídeo 1 Funções 3D Placas NVIDIA e ATI possuem um módulo para o Xorg e outro para o kernel este último geralmente disponibilizado pelo fabricante em modo binário 190 Introdução ao Linux Gerenciamento de energia Praticamente todos os componentes de hardware possuem funcionalidades que visam diminuir o consumo de energia em situações onde estão ociosos Para que estas funcionalidades possam ser utilizadas é preciso que algum sistema de gerenciamento de energia seja utilizado O Linux utiliza basicamente dois padrões de gerenciamento de energia que serão descritos a seguir Advanced Power Management APM q 1 API desenvolvida pela Intel e pela Microsoft que possibilita ao sistema operacional gerenciar o consumo de energia através de funcionalidades do BIOS 1 Com o surgimento do padrão ACPI o APM foi descontinuado e o suporte no Linux só foi mantido até a versão 2639 do kernel O APM é uma API Application Program Interface desenvolvida pela Intel e pela Microsoft que possibilita ao sistema operacional gerenciar o consumo de energia através de funcionali dades do BIOS O principal objetivo do APM é diminuir o consumo de energia do computador executando ações como redução do clock da CPU desativação de discos e do monitor de vídeo entre outras O Linux implementa o APM através do daemon apmd mas é necessário também que o suporte ao APM seja habilitado no kernel Com o surgimento do padrão ACPI o APM foi descontinuado e o suporte no Linux só foi mantido até a versão 2639 do kernel Advanced Configuration and Power Interface ACPI q 1 Padrão criado pela Intel Microsoft e Toshiba que permite gerenciar o consumo de energia dos dispositivos de hardware de um computador 1 Camada do sistema operacional que permite o controle de funcionalidades imple mentadas nos dispositivos de hardware visando controlar o consumo de energia de forma racional 1 É configurado para executar ações quando ocorrem determinados eventos O ACPI é um padrão criado pela Intel Microsoft e Toshiba que permite gerenciar o consumo de energia dos dispositivos de hardware de um computador O ACPI é implementado como uma camada do sistema operacional que permite o controle de funcionalidades imple mentadas nos dispositivos de hardware visando controlar o consumo de energia de forma racional O ACPI por possuir mais recursos e ser um padrão mais novo que APM deve ser preferencialmente ativado no sistema apesar de os dois poderem ser utilizados em conjunto O ACPI é implementado no Linux pelo daemon acpid que é configurado para executar ações quando ocorrem determinados eventos As ações que são executadas pelo acpid são definidas em arquivos dentro do diretório etcacpiactions e os eventos são definidos em arquivos dentro do diretório etcacpievents O exemplo abaixo mostra o conteúdo do arquivo etcacpieventspowerbtn evento que é disparado quando o botão de power é pressionado eventbutton power actionetcacpiactionspowerbtnsh Como pode ser visto o script etcacpiactionspowerbtnsh é executado sempre que o evento associado ao botão de power for detectado O conteúdo deste script não será exibido aqui devido ao seu tamanho mas sua função é desligar o sistema operacional de forma correta para que dados em memória não sejam perdidos ou corrompidos 191 Capítulo 10 Roteiro de Atividades Roteiro de Atividades 10 Atividade 101 Descobrindo os dispositivos detectados pelo kernel Durante o boot de um sistema Linux o kernel automaticamente detecta uma série de dispo sitivos Você seria capaz utilizando o comando dmesg de identificar os discos IDE presentes no seu sistema HDs e unidades de CDDVD Atividade 102 Verificando os módulos carregados Verifique os módulos carregados no sistema selecione três módulos e obtenha mais infor mações sobre eles Atividade 103 Identificando os dispositivos PCI Identifique os dispositivos PCI conectados ao seu computador Qual é a placa de vídeo E a placa de rede Atividade 104 Utilizando um pen drive Nesta atividade o aluno deve solicitar ao instrutor um pen drive 1 Antes de inserir o pen drive verifique o conteúdo do arquivo procpartitions 2 Insira o pen drive e utilizando o comando dmesg verifique se o kernel o detectou oedispositivo 3 Verifique novamente o conteúdo do arquivo procpartitions 4 Monte o pen drive e acesse o seu conteúdo 5 Desmonte o pen drive Atividade 105 Verificando e identificando as placas de rede Verifique os dispositivos de rede instalados no seu sistema Quantas placas Ethernet o sistema possui Atividade 106 Identificando a placa gráfica e seu driver Esta atividade permite a detecção e a identificação da placa de vídeo e a verificação do driver usado pelo ambiente gráfico Ela pode não funcionar corretamentemnum ambiente virtual Certifiquese de que o ambiente gráfico não está sendo executado Talvez seja neces sário reiniciar o computador utilizando o comando telinit 3 Como usuário root execute o comando X configure que gerará um arquivo de configuração no diretório root Identifique na sessão Device o driver de vídeo que foi configurado 192 193 Bibliografia Bibliografia 1 MEADORS Todd Guide to Linux Shell Script Programing Thompson Course Technology 2003 1 TANEMBAUM Andrew S Sistemas Operacionais Modernos 3a Edição Pearson 2010 1 JARGAS Aurélio Marinho Shell Script Profissional Novatec 2008 1 GITE Vivek G Linux Shell Scripting Tutorial A beginners handbook Disponível em httpwwwdisuniroma1itbordinoshelltutorialpdf Acessado em abril 2012 1 KOCHAN Stephen G WOOD Patrick H Exploring the Unix System SAMS Prentice Hall 1996 1 JANG Michael Dominando Red Hat Linux 9 Rio de Janeiro Editora Ciência Moderna 2003 1 PEEK Jerry et alli Learning Unix Operating System OReilly Associates 2002 1 KDE Project httpwwwkdeorg 1 Red Hat Inc Fedora Project httpfedoraredhatcom 1 Red Hat Inc Red Hat Linux 9 Red Hat Linux Getting Started Guide httpwwwredhatcomdocsmanualslinuxRHL9Manualgetting startedguide 1 Red Hat Inc Red Hat Linux 9 Red Hat Linux x86 Installation Guide httpwwwredhatcomdocsmanualslinuxRHL9Manualinstallguide 1 The XFree86 Project Inc XFree86TM httpwwwxfree86org 1 TLDP The Linux Documentation Project httpwwwtldporg 1 Informações em português sobre Linux httpbrlinuxorg 194 Introdução ao Linux 1 Índice das mais diversas distribuições Linux httpwwwlinuxorg 1 Informações em inglês sobre Linux httpwwwlinuxjournalcom httpwwwlinuxcentralcomv3 1 Índice de listas de hardware compatível httpwwwlinuxdriversorg 1 Free Software Foundation httpwwwfsforg 1 Desenvolvimento de software livre httpsourceforgenet 1 Índice de atualizações de software UnixLinux httpfreshmeatnet 1 ComunidadeFórum brasileiro de Linux httpwwwvivaolinuxcombr 1 Sistema Operacional Livre GNU Unix Compatível httpwwwgnuorg 1 Licença GPL Versão 3 httpgplv3fsforg 1 Fabricante do VMware httpwwwvmwarecom 1 Home page do desktop KDE httpwwwkdeorg 1 Home page do desktop Gnome httpwwwgnomeorg 1 Documentação Linux em geral httptldporg 1 The Gnu Operating System Repositório de software livre httpwwwgnuorg 1 Fabricante do flash player para o Mozilla httpwwwadobecom 1 Fabricante do navegador Mozilla httpwwwmozillacom 1 The Linux Documentation Projetc httpwwwtldporg 1 XOrg Foundation httpwwwxorg Débora Christina Muchaluat Saade é professora associada do Departamento de Ciência da Computação da Universi dade Federal Fluminense UFF É enge nheira de computação formada pela PUCRio e possui mestrado e doutorado em informática pela mesma universi dade É bolsista de produtividade em Desenvolvimento Tec nológico e Extensão Inovadora pelo CNPq e foi Jovem Cientista do Estado do Rio de Janeiro pela Faperj Suas áreas de pesquisa são redes de computadores redes sem fio siste mas multimídia e hipermídia TV digital interativa e telemedi cina Já coordenou diversos projetos de pesquisa financiados pelo CNPq e Faperj e foi coordenadora do projeto piloto Edu roambr financiado pela RNP e realizado em parceria com a UFMS UFRJ e diversas outras instituições implantando o ser viço piloto eduroam no Brasil Ricardo Campanha Carrano é enge nheiro de telecomunicações formado em 1995 pela Universidade Federal Fluminense Em 2008 obteve o título de Mestre em Engenharia de Teleco municações pela mesma instituição e atualmente cursa o doutorado em Computação também na UFF onde atua como Professor do Departamento de Engenharia de Telecomunicações Foi empresário e participou da implantação de provedores de acesso no início da Internet comercial no Brasil em 1995 Atuou como Engenheiro de Redes para a ONG internacio nal One Laptop per Child OLPC e já participou de diversos projetos de pesquisa financiados pela RNP pelo MEC e por empresas privadas Edelberto Franco Silva se tornou Bacharel em Sistemas de Informação pela Faculdade Metodista Granbery em 2006 e obteve o título de Mestre em Computação pela Universidade Federal Fluminense em 2011 Atual mente é Doutorando em Computação pela Universidade Federal Fluminense Participou de diver sos projetos de pesquisa possuindo experiência na área de Ciência da Computação com ênfase em redes atuando principalmente nos temas relacionados a redes sem fio Internet do Futuro e segurança Arthur Mendes Peixoto possui mais de 26 anos de experiência na área de Redes de Comunicação de Dados e Engenharia de Sistemas com Disserta ção de Mestrado em Análise de Perfor mance de Sistemas Distribuídos no Instituto Militar de Engenharia IME Participou do desenvolvimento e implantação das primeiras redes com tecnologias ATM Frame Relay IP MPLS Foi con sultor de grandes projetos como o Backbone IP do Plano Nacional de Banda Larga PNBL da Telebrás Trabalhou por 22 anos no setor de Telecomunicações da Embratel atuando na prospecção de novas tecnologias para as Redes de Nova Geração NGN Participou de testes e verificações de requi sitos de RFPs nos países EUA Canadá Japão França Espa nha e México Atuou no desenvolvimento de sistemas no CPqD Campinas SP Andreia Gentil Bonfante possui gra duação em Bacharelado em Ciências de Computação pela Universidade Estadual de Londrina mestrado e doutorado em Ciências da Compu tação e Matemática Computacional pela Universidade de São Paulo Atu almente é professorapesquisadora da Universidade Fede ral de Mato Grosso Tem experiência na área de Ciência da Computação com ênfase em Inteligência Artificial atu ando principalmente nos seguintes temas Processamento de Língua Natural Mineração de Textos e Aprendizado de Máquina Atua na Educação a Distância como Coordena dora da Especialização em Informática na Educação Atuou também como instrutora dos cursos de Introdução ao Linux da Escola Superior de Redes na Unidade de Cuiabá Introdução ao Linux ISBN 9788563630193 9 788563 630193 Este curso é destinado a usuários especialistas de supor te e desenvolvedores de software que desejam aprender a utilizar o Linux um ambiente computacional moderno ágil e com um sistema operacional extremamente está vel e versátil O curso destinase também aos administra dores de sistemas Windows e aos profissionais que dese jam iniciar os estudos para a certificação LPIC1 do Linux Professional Institute Este livro inclui os roteiros das atividades práticas e o con teúdo dos slides apresentados em sala de aula apoiando profissionais na disseminação deste conhecimento em suas organizações ou localidades de origem Introdução ao Linux LIVRO DE APOIO AO CURSO Arthur Mendes Peixoto Andreia Gentil Bonfante A RNP Rede Nacional de Ensino e Pesquisa é qualificada como uma Organização Social OS sendo ligada ao Ministério da Ciência Tecnologia e Inovação MCTI e responsável pelo Programa Interministerial RNP que conta com a participação dos ministérios da Educação MEC da Saúde MS e da Cultura MinC Pioneira no acesso à Internet no Brasil a RNP planeja e mantém a rede Ipê a rede óptica nacional acadêmica de alto desempenho Com Pontos de Presença nas 27 unidades da federação a rede tem mais de 800 instituições conectadas São aproximadamente 35 milhões de usuários usufruindo de uma infraestrutura de redes avançadas para comunicação computação e experimentação que contribui para a integração entre o sistema de Ciência e Tecnologia Educação Superior Saúde e Cultura Ciência Tecnologia e Inovação Ministério da Educação Ministério da Saúde Ministério da Cultura Ministério da Arthur Mendes Peixoto possui mais de 26 anos de experiência na área de Redes de Comunicação de Dados e Engenharia de Sistemas com Disserta ção de Mestrado em Análise de Perfor mance de Sistemas Distribuídos no Instituto Militar de Engenharia IME Participou do desenvolvimento e implantação das primeiras redes com tecnologias ATM Frame Relay IP MPLS Foi con sultor de grandes projetos como o Backbone IP do Plano Nacional de Banda Larga PNBL da Telebrás Trabalhou por 22 anos no setor de Telecomunicações da Embratel atuando na prospecção de novas tecnologias para as Redes de Nova Geração NGN Participou de testes e verificações de requi sitos de RFPs nos países EUA Canadá Japão França Espa nha e México Atuou no desenvolvimento de sistemas no CPqD Campinas SP Andreia Gentil Bonfante possui gra duação em Bacharelado em Ciências de Computação pela Universidade Estadual de Londrina mestrado e doutorado em Ciências da Compu tação e Matemática Computacional pela Universidade de São Paulo Atu almente é professorapesquisadora da Universidade Fede ral de Mato Grosso Tem experiência na área de Ciência da Computação com ênfase em Inteligência Artificial atu ando principalmente nos seguintes temas Processamento de Língua Natural Mineração de Textos e Aprendizado de Máquina Atua na Educação a Distância como Coordena dora da Especialização em Informática na Educação Atuou também como instrutora dos cursos de Introdução ao Linux da Escola Superior de Redes na Unidade de Cuiabá