1 Seja bem-vindo ao Linux Neste Capítulo: A ligação GNU–Linux .................... 02 A tradição histórica do Linux: UNIX .. 04 O que o Linux tem de tão bom? ..... 05 Visão geral do Linux ...................... 09 Recursos adicionais do Linux ........ 13 O kernel do Linux foi desenvolvido por Linus Torvalds, um estudante universitário finlandês que usou a Internet para disponibilizar gratuitamente o código fonte ao público. A versão 0.01 foi lançada em setembro de 1991. Este novo sistema operacional foi resultado de muito trabalho. Programadores do mundo todo rapidamente estenderam o kernel e desenvolveram outras ferramentas, adicionando novas funcionalidades e a mesma que já se encontrava no BSD e no System V (SVR4), ambos do Unix. Um produto da Internet que foi desenvolvido com a colaboração de diversas pessoas do mundo todo, o sistema operacional Linux é livre. Isto é, seu código fonte é gratuito. Você pode analisá-lo, redistribuí-lo e modificá-lo. Devido a essa gratuidade, há programas, códigos, documentações ou suporte disponíveis e livres de custos em grupos de discussão, listas de divulgação e outras fontes na Internet. A definição de software livre da GNU é a seguinte: 1 2 Capítulo 1 Seja bem-vindo ao Linux Free beer Cerveja grátis: “Software livre” é uma questão de liberdade, não de preço. Para entender esse conceito deve-se pensar em “livre” como em “liberdade de expressão” e não como em “cerveja grátis”.1 A Ligação GNU–Linux Um sistema operacional é um software de baixo nível que agenda tarefas, aloca o espaço de armazenamento e lida com as interfaces para os hardwares periféricos, como impressoras, unidades de disquete, monitor, teclado e mouse. Um sistema operacional possui duas partes principais: o kernel e os programas de sistema. A primeira aloca os recursos da máquina a serem utilizados, incluindo memória, espaço de disco e os ciclos da CPU (p. 861), para outros programas que são executados no computador. Já a segunda efetua operações de alto nível, geralmente atuando como servidores em uma relação cliente/servidor. Linux é o nome do kernel que Linus Torvalds apresentou ao mundo em 1991 e no qual muitas pessoas têm trabalhado desde então, de modo a aprimorar, estabilizar, expandir e torná-lo mais seguro. A história do GNU/Linux Esta seção apresenta um pouco da história da relação entre a GNU e o Linux. 1983 Richard Stallman (www.stallman.org) anuncia1 o Projeto GNU para a criação de um sistema operacional, incluindo tanto o kernel quanto os programas de sistemas e apresenta o Manifesto2 GNU, que começa assim: GNU, que significa Gnu’s not UNIX (Gnu não é Unix), é o nome do sistema de software totalmente compatível com o Unix que estou criando para, então, poder disponibilizá-lo como um sistema livre para quem desejar usá-lo. Alguns anos depois, ao perceber que havia criado uma certa confusão, Richard adicionou uma observação ao texto: Não usei as palavras adequadas aqui. A intenção era dizer que ninguém teria de pagar por uma ‘permissão’ (direitos autorais) para usar o sistema GNU. Mas isso não ficou claro e as pessoas estavam interpretando como se as cópias do GNU devessem ser distribuídas sempre a um preço baixo ou totalmente de graça. Não foi isso o que quis dizer. É mencionado mais adiante no manifesto a possibilidade de companhias distribuírem o GNU e cobrarem certo valor. Foi nesse momento que aprendi a diferenciar ‘livre’, no sentido de liberdade, de ‘gratuito’, no sentido de preço. O software livre é aquele que os usuários têm a liberdade de distribuí-lo e modificá-lo. Alguns podem obter cópias gratuitamente, enquanto outros pagam por elas. Neste caso, se o dinheiro arrecadado for para ajudar a melhorar o software, melhor ainda. O importante é que todos que possuem uma cópia do GNU tenham a liberdade de contribuir com outras pessoas em seu uso. No manifesto, após ter explicado um pouco sobre o projeto e o que foi conseguido até então, Richard prossegue: 1. www.gnu.org/gnu/initial-announcement.html 2. www.gnu.org/gnu/manifesto.html A ligação GNU–Linux 3 Por que devo escrever o GNU? Para mim a regra de ouro determina que, se gosto de um programa, devo compartilhá-lo com outras pessoas que também gostam dele. Vendedores de softwares querem dividir e ganhar os usurários para si, fazendo com que estes não concordem em compartilhar uns com os outros. Recusome a impedir a solidariedade para com outros usuários dessa forma. Não posso, em sã consciência, assinar um contrato de confidencialidade ou de licença de software. Por anos trabalhei no Artificial Intelligence Lab (Laboratório de Inteligência Artificial) tentando resistir ao máximo a tais tendências e outras inospitalidades, mas chegou um momento em que foram longe demais e não pude permanecer em uma instituição que faz coisas incompatíveis com o meu julgamento. Portanto, para que eu continue a usar computadores sem sentir vergonha de mim mesmo, decidi criar um software livre, de modo que funcione com qualquer outro que não seja livre. Pedi demissão do laboratório de IA para poder negar ao Instituto de Tecnologia de Massachusetts (MIT) qualquer tentativa legal que me impedisse de disponibilizar o GNU como desejo. 1991 O projeto GNU tem ido bem até agora. A maioria do sistema operacional GNU, exceto pelo Kernel, já está completa. Mais tarde, Richard Stallman publica: No início da década de 1990, separamos do kernel o sistema inteiro (além de estarmos trabalhando em outro kernel, o GNU HURD,3 que roda sobre o Mach4). Desenvolver esse Kernel tem sido mais árduo do que esperávamos e ainda não o terminamos5. (...) Muitos acreditam que após o Linus Torvalds terminar de escrever o Kernel, seus amigos olharam em volta, procurando uma idéia para outro software livre e, por incrível que pareça, praticamente tudo necessário para criar um sistema voltado para o Unix já estava disponível. O que encontraram não era mera coincidência, foi o sistema GNU. O software livre disponível tornou-se um sistema completo, pois, desde 1984, o Projeto GNU tem trabalhado para isso. O Manifesto do GNU apresentava o objetivo de desenvolver um sistema livre voltado para o Unix. No Comunicado Inicial desse projeto também estão destacados alguns dos planejamentos originais para o sistema GNU que já estava quase pronto quando o Linux surgiu. Atualmente, o ‘sistema operacional’ GNU roda com total compatibilidade binária com o Linux sobre os kernels do FreeBSD (www.freebsd.org) e o do NetBSD (www. netbsd.org) e sobre as versões anteriores do Hurd e do Darwin (developer.apple. com/darwin), porém sem essa compatibilidade. O Software é Livre A tradição do software livre vem desde a época em que o Unix foi lançado para as universidades a um custo nominal, o que contribuiu para a sua portabilidade e 3. www.gnu.org/software/hurd/hurd.html 4. www.gnu.org/software/hurd/gnumach.html 5. www.gnu.org/software/hurd/hurd-and-linux.html 4 Capítulo 1 Seja bem-vindo ao Linux O Minix GLP sucesso. Porém, essa tradição desapareceu quando o Unix passou a ser comercializado e os fabricantes enxergavam o código fonte como sua propriedade, tornando-o efetivamente indisponível. Outro problema com as versões comerciais do Unix está relacionado à sua complexidade, pois, conforme cada fabricante o modifica para uma arquitetura específica, ele perde portabilidade e se torna complicado para ensinar e analisar. Dois professores criaram sua própria modificação do Unix para fins didáticos: Doug Comer criou o Xinu (www.cs.purdue.edu/research/xinu.html) e Andrew Tanenbaum, o Minix (www.cs.vu.nl/~ast/minix.html). Linus Torvalds criou o Linux para suprir as desvantagens do Minix. Toda vez que devia escolher entre a simplicidade do código e recursos/eficiência, Tanenbaum optava pela primeira de modo a tornar o Minix mais fácil de ensinar. Isso significava que esse sistema não possuía muitas das vantagens desejadas pelas pessoas. Era nesse ponto que o Linux ganhava. O Linux pode ser baixado gratuitamente pela Internet. Além de poder obter o código do GNU através dos serviços de correios dos EUA por um preço justo pelos materiais e frete. Pode-se ajudar a “Free Software Foundation” (Fundação do Software Livre) através da compra daquele mesmo código (GNU) que vem em pacotes com preços mais caros ou dos produtos comerciais do Linux (chamados distribuições) que incluem manual de instalação, software e ajuda. Os softwares Linux e GNU são distribuídos sob os termos da Licença Pública Geral da GNU (GNU GPL, sigla em inglês − www.gnu.org/licenses/licenses.html), que dizem que você tem o direito de copiar, alterar e redistribuir o código escrito no acordo. Se você redistribuir o código, terá de distribuir a mesma licença com ele, tornando ambos inseparáveis. Se baixar o código da Internet para um programa qualquer, como um de contabilidade, por exemplo, que esteja sob os termos da GPL, modificar o código e, então, redistribuir uma versão executável do programa, você também terá de distribuir o código fonte alterado, juntamente com o acordo do GPL. Dessa maneira, se concede os direitos em vez de limitá-los, o que é o inverso dos termos normais de direitos autorais (copyright), portanto o GPL foi chamado de copyleft8 (este parágrafo não demonstra uma interpretação de cunho legal do GPL, mas simplesmente dá uma idéia de como ele funciona. Portanto, se quiser fazer uso dele, leia os termos completos). Divirta-se! O termo-chave para Linux é “Divirta-se!” e sempre aparece em linhas de comando e documentações. A cultura do UNIX − agora chamado de Linux − está repleta de humor que pode ser encontrado por todo o sistema. Por exemplo, “pouco” (less) significa “muito” (more) − o GNU substituiu o utilitário de nome more, que exibia um arquivo de maneira paginada, por um novo, mais aprimorado, chamado less. O programa para visualizar documentos PostScript é chamado ghostscript (script fantasma) e um dos diversos substitutos do editor “vi” se chama “elvis”. Enquanto máquinas com processadores Intel carregam o logotipo “Intel Inside” do lado de fora, algumas com o Linux possuem o adesivo "Linux Inside". Pessoas afirmam que já viram o próprio Linus Torvalds vestindo uma blusa com a estampa “Linus Inside”. A tradição histórica do Linux: O UNIX O sistema Unix foi desenvolvido por pesquisadores que necessitavam de uma série de ferramentas modernas de computação para auxiliá-los em seus projetos. Ele permitiu a uma equipe que trabalhava em um projeto compartilhar dados e programas selecionados ao mesmo tempo em que mantinha privadas as outras informações. O Que o Linux Tem de Tão Bom? 5 Universidades e faculdades tiveram um papel importante na popularização do sistema operacional Unix ao longo dos quatro anos seguintes. Quando o Unix tornou-se amplamente disponível, em 1975, a “Bell Labs” o ofereceu a instituições de educação a um preço nominal. As universidades, por sua vez, usaram-no em suas turmas de Ciência da Computação de modo que os estudantes se familiarizassem com ele. Como o Unix era um sistema de desenvolvimento avançado, os estudantes logo se acostumaram a um ambiente de programação sofisticado. Todos se formaram, saindo direto para o mercado de trabalho, pois já esperavam trabalhar em um ambiente tão avançado quanto. Conforme mais desses estudantes ascendiam no mercado, mais espaço o sistema operacional Unix conquistou, acabou chegando ao mercado de produção. Além de apresentar o Unix aos seus estudantes, o Systems Research Group (CSRG, “Grupo de Pesquisa de Sistemas”) da Universidade de Berkeley, na Califórnia, EUA, fez significativas alterações e acréscimos ao sistema. Na verdade, suas modificações tornaram-se tão populares que uma versão do sistema foi chamada de Berkeley Software Distribution (BSD) do Unix, ou simplesmente Berkeley UNIX (Unix da Berkely). A outra versão principal é a System V (SVR4) do Unix, que derivou das versões desenvolvidas e preservadas pela AT&T e o UNIX System Laboratories. O Que o Linux Tem de Tão Bom? Aplicativos Periféricos Nos últimos anos, o Linux surgiu como um sistema operacional poderoso e inovador que funciona com o Unix. Sua popularidade ultrapassa aquela dos seus predecessores. Embora imite o Unix em vários aspectos, o sistema operacional Linux se difere dele de diversas formas: o kernel do Linux é implementado independentemente do BSD e do System V; o seu desenvolvimento contínuo ocorre através de esforços combinados de diversas pessoas pelo mundo e o Linux facilita o acesso ao poder do Unix para usuários de computadores domésticos ou empresariais. Atualmente, através da Internet, programadores habilidosos enviam ao Linus Torvalds, ao GNU ou a outros autores do Linux acréscimos e melhorias para o sistema. Há disponível para Linux uma rica seleção de aplicativos (gratuitos e comerciais), além de uma ampla gama de ferramentas variadas para lidar com: imagens, textos, redes, segurança, administração, servidor Web e muitas outras. Recentemente, grandes empresas de software, como a IBM (www.ibm.com/linux), têm visto as vantagens de adotar o Linux e já possuem programadores efetivos cujo trabalho é desenvolver e programar o kernel do Linux, o GNU, o KDE ou outro software que rode no sistema. Este segue mais os padrões POSIX, outras distribuições e partes de outras também o seguem. Para mais informações, veja o tópico Padrões adiante. Esses fatos significam que o Linux está se tornando cada vez mais a tendência predominante e é respeitado como uma alternativa atraente a outros sistemas operacionais mais populares. Outro aspecto do Linux que atrai os usuários é a impressionante variedade de periféricos suportados e a velocidade com que aparece o suporte aos novos periféricos. O Linux geralmente surge com suporte a uma placa de interface ou periférico antes de qualquer outra empresa. Mas, infelizmente, falta o suporte a alguns tipos, especialmente a placas de vídeo de marca, pois seus fabricantes não liberam suas especificações ou o código fonte dos drivers em tempo hábil, se é que jamais o fazem. 6 Capítulo 1 Seja bem-vindo ao Linux Software Plataformas Emuladores A quantidade de programas disponíveis também é importante para os usuários, não apenas o código fonte (que precisa ser compilado), mas também os pacotes binários, que são de fácil instalação e estão prontos para serem executados. Isso não significa apenas softwares gratuitos. O Netscape já com suporte a Java, por exemplo, está disponível no Linux desde o início, mesmo antes de muitas empresas comerciais oferecerem tal recurso. Atualmente, seu irmão, o Mozilla, também é um prático navegador, cliente de e-mail e programa de acesso a grupos de discussão, além de muitas outras funções. O Linux não é só para plataformas baseadas em Intel, mas também para aquelas do Power PC, incluindo computadores da Apple (ppclinux), dos baseados no Alpha da Compaq (NEC Digital Equipment Corporation), no MIPS, no 68K da Motorola e no S/390 da IBM. Nem é apenas para máquinas com um único processador: na versão 2.0, ele funciona em computadores com múltiplos processadores (SMP, sigla em inglês que significa “Multiprocessadores Simétricos”). Já na versão 2.5.2, o Linux possui um O(1) scheduler (projeto do kernel que agenda processos dentro de uma quantidade constante de tempo), o que aumenta consideravelmente a capacidade de expansão em sistemas SMP. O Linux suporta programas chamados emuladores, que executam códigos feitos para outros sistemas operacionais. Ao usar esses programas você pode rodar no Linux alguns softwares do DOS, do Windows e do Macintosh. O Wine (www.winehq.com) é uma implementação de código aberto do API do Windows sobre o X e o Unix/ Linux. O QEMU (fabrice.bellard.free.fr/qemu) é um emulador de processador que executa binários x86 do Linux em sistemas que não foram feitos para eles. Por Que o Linux Faz Sucesso Entre Desenvolvedores e Fabricantes de Hardware? Sistemas operacionais exclusivos Sistemas operacionais genéricos Duas marcas no mercado de informática prepararam o terreno para a popularidade do Unix e do Linux. Primeiramente, os avanços na tecnologia de hardwares geraram a necessidade para um sistema operacional que pudesse tirar proveito da potência do hardware disponível. Em meados da década de 1970, os microcomputadores começaram a ameaçar os mainframes (computadores de grande porte), pois aqueles possuíam diversos aplicativos capazes de fazer as mesmas funções que estes e com um custo menor. Mais recentemente, os poderosos chips de processadores de 64 bits, memória barata e abundante e o baixo preço dos discos-rígidos permitiram que os fabricantes de hardware instalassem sistemas operacionais multiusuário em computadores de mesa (desktop). Segundo, com a constante queda do preço dos hardwares, seus fabricantes não têm mais condições de desenvolver e manter seus próprios sistemas operacionais. Um fabricante do hardware costumava criar um sistema operacional e, conseqüentemente, era seu dono (por exemplo, a DEC/Compaq é a dona do VMS). Mas hoje em dia eles precisam de um sistema genérico com o qual possam adaptar facilmente às suas máquinas. Um sistema operacional genérico não é criado pelo fabricante que produz o hardware. Ele é vendido (Unix, Windows) ou oferecido de graça (Linux). Esse é um sistema operacional genérico por rodar em diferentes tipos de hardware produzidos por variados fabricantes. É claro que, se esses podem pagar apenas pelo desenvolvimento O Que o Linux Tem de Tão Bom? 7 e evitar o custo por unidade (como precisam pagar à Microsoft por cada cópia que venderem do Windows), os desenvolvedores saem muito mais em conta. Esses, por sua vez, precisam manter baixos os preços de seus produtos e para isso não têm como converter seus produtos para rodarem em vários sistemas operacionais exclusivos. Assim como os fabricantes de hardware, os desenvolvedores de software precisam de um sistema operacional genérico. Apesar de o sistema Unix uma vez satisfazer às necessidades dos fabricantes de hardware e dos pesquisadores por um sistema operacional genérico, com o tempo ele se tornou cada vez mais exclusivo, conforme fabricantes adicionavam suporte para recursos especializados e incluíam novas bibliotecas de software e utilitários. O Linux surgiu para tratar de ambas as necessidades. Ele é um sistema operacional genérico que tira proveito da potência do hardware disponível. O Linux Possui Portabilidade Um sistema operacional portátil é aquele que pode rodar em diversos computadores. Mais de 95% do sistema operacional do Linux é escrito na linguagem C, é portátil por ser escrito em uma linguagem de alto nível e independente da máquina (o compilador do C é escrito em C). Como o Linux é portátil, pode-se adotá-lo (portá-lo) em diferentes máquinas e satisfazer requisitos especiais. Por exemplo, usa-se o Linux em computadores embutidos, como aqueles de telefones celulares, PDAs e decodificadores de TV a cabo. A estrutura do arquivo tira total proveito dos discos rígidos amplos e rápidos. Importante também é que o Linux foi originalmente desenvolvido para ser multiusuário, recurso que não foi pensado posteriormente de modo a favorecer diversos usuários em um mesmo sistema. Compartilhar a potência do computador entre muitos usuários e dar-lhes a capacidade de partilhar dados e programas é o recurso central do sistema. O Linux, por ser adaptável e tirar proveito do hardware disponível, agora roda tanto em mainframes quanto em sistemas com diferentes microprocessadores. É esse aspecto o responsável pela popularidade do Linux. Estes microcomputadores ficam cada vez mais rápidos e com aproximadamente os mesmos preços anteriores. O Linux em um microcomputador rápido tornou-se bom o suficiente para substituir as estações de trabalho em muitos computadores de mesa. O Linux beneficia tanto aos usuários, que não gostam de ter que aprender um novo sistema operacional para cada fabricante de hardware, quanto aos administradores de sistema, que gostam de um ambiente estável de software. O advento de um sistema operacional padrão ajudou no desenvolvimento os fabricantes de software. Agora, eles têm condições de tornar disponível a versão de um produto em máquinas de diferentes fabricantes. Padrões Pessoas de companhias em todo o mercado de informática se uniram para desenvolver o padrão POSIX (Portable Operating System Interface for computer Environments, ou “Interface de Sistema Operacional Portátil para Ambientes de Computador), baseado amplamente no System V Interface Definition (SVID) do Unix e outros esforços de padronização anteriores. 8 Capítulo 1 Seja bem-vindo ao Linux Tais esforços foram estimulados pelo governo dos EUA, que precisava de um ambiente de computação padrão para minimizar seus custos de treinamento e logística. Agora, com esses padrões ganhando cada vez mais aceitação, os desenvolvedores de software são capazes de desenvolver aplicativos que rodam em todas as versões do Unix, Linux e outros sistemas que adotaram esses padrões. A Linguagem de Programação C Ken Thompson escreveu o sistema operacional Unix em 1969 na linguagem assembly do PDP-7, a qual dependente da máquina a ser usada: programas escritos em assembly funcionam apenas em uma única máquina, ou melhor, em uma “família” delas. O Unix original, portanto, não podia ser transportado facilmente para rodar em outras máquinas (não era portátil). A fim de o tornar portátil, Ken desenvolveu a linguagem de programa B, que era independente da máquina, a partir da linguagem BCPL. Dennis Ritchie desenvolveu a linguagem C, ao modificar a B, e juntamente com Ken Thompson reescreveu o Unix em C, no ano de 1973. Esse sistema operacional alterado podia ser transportado com mais facilidade para rodar em outras máquinas. Esse desenvolvimento marcou o início de C. Suas raízes revelam algumas das razões de por que ele é tão poderoso. Usa-se a linguagem C para escrever programas independentemente da máquina em que irão rodar. Um programador que desenvolve um programa para ser portátil pode facilmente movê-lo para outro computador que possua um compilador de C. Essa linguagem também foi projetada para ser compilada para um código bastante eficiente. Com o advento do C, um programador não precisava mais recorrer à linguagem assembly para obter o código que rodaria bem naquela máquina (isso, apenas em termos de rapidez, pois um assembler sempre produzirá um código mais eficiente do que uma linguagem de alto nível). O C é uma boa linguagem de sistemas e altamente estruturado, mas não necessariamente uma linguagem de alto nível. Você pode escrever um compilador ou um sistema operacional em C. A linguagem C permite ao programador manipular bits e bytes, como é necessário ao escrever um sistema operacional. Mas ela também possui construções de nível mais alto que permitem uma programação eficiente e modular. No final da década de 1980, a American National Standards Institute (ANSI, ou “Instituto Nacional Americano de Padronização”) determinou uma versão padrão da linguagem C, comumente referida como ANSI C ou C89 (devido ao ano de publicação do padrão, 1989). Dez anos mais tarde foi publicado o padrão C99, especialmente suportado pelo compilador “C” (o gcc) do projeto GNU. Geralmente referem-se à versão original da linguagem como C do Kernighan & Ritchie (ou K&R), nomes estes dos autores do primeiro livro que descreveu a linguagem em questão. Outro pesquisador na Labs Bell, Bjarne Stroustrup, criou uma linguagem de programação orientada a objeto chamada de “C++”, que tem como base a linguagem C. Devido ao fato de muitos empregadores hoje em dia adotarem a programação orientada a objeto, prefere-se o “C++” ao “C” em muitos ambientes. O compilador “C” do Projeto GNU e seu compilador “C++” (g++) são partes integrais do sistema operacional Linux. Visão Geral do Linux Compiladores Sistemas de gerenciamento de banco de dados Utilitários/Shells do GNU Processadores de texto Utilitários de e-mail e mensagens Outros utilitários/shells 9 Formatadores Sistema X-Window Kernel 1 do Linux Hardware Figura 1.1: Visão em camadas do sistema operacional Linux Visão Geral do Linux O sistema operacional Linux possui muitos recursos exclusivos e poderosos. Assim como outros sistemas, o Linux é um programa de controle para computadores. Mas como o Unix, ele é também um conjunto bem sucedido de programas utilitários (ver Figura 1.1) e uma série de ferramentas que permitem aos usuários conectarem e usarem esses utilitários para construir sistemas e aplicativos. O Linux Tem uma Interface de Programação do Kernel O coração do sistema operacional Linux é o seu kernel. Esse é o responsável pela alocação dos recursos do computador e agendamento das tarefas do usuário, de modo que cada um partilhe de uma parte justa dos recursos do sistema, incluindo o acesso à CPU, dispositivos periféricos, como armazenamento em discos, DVD e CD-ROM, impressoras e unidades de fita. O programa interage com o kernel através de chamadas ao sistema, funções especiais com nomes bastante conhecidos. Um programador pode usar uma única chamada ao sistema para interagir com muitos tipos de dispositivos. Por exemplo, há uma chamada de sistema denominada “write” (escrita), não há muitos que sejam específicos a um determinado dispositivo. Quando um programa envia um pedido “write”, o kernel interpreta o contexto e passa o pedido ao dispositivo adequado. Essa flexibilidade permite que utilitários antigos funcionem com dispositivos que não existiam quando aqueles foram originalmente criados. Além disso, é possível mover programas para nova versões do sistema operacional sem precisar reescrevê-los (levando em conta que a nova versão reconheça as mesmas chamadas de sistema). O Linux é Multiusuário Dependendo do hardware e dos tipos das tarefas executadas pelo computador, um sistema Linux pode suportar de 1 até mais de 1000 usuários, cada um 10 Capítulo 1 Seja bem-vindo ao Linux executando uma série diferente de programas ao mesmo tempo. O custo por usuário de um computador com esse recurso é menor do que o de um que possa ser usado por apenas uma pessoa. Isso porque uma pessoa geralmente não pode usar todos os recursos disponíveis em um computador. Ninguém coloca uma impressora para imprimir constantemente, mantém todo o sistema de memória, deixa os discos ocupados lendo e escrevendo, mantém conexão da Internet em uso constante e deixa todos os terminais ocupados, isso tudo ao mesmo tempo. Mas um sistema operacional multiusuário permite que muitas pessoas usem esses recursos do sistema quase que simultaneamente. O uso de recursos mais pesados pode ser maximizado e o custo por usuário minimizado. Há objetos primários em um sistema operacional multiusuário. O Linux Pode Executar Muitas Tarefas O Linux é um sistema totalmente multitarefa, o que permite a cada usuário executar mais de uma tarefa ao mesmo tempo. Os processos podem se comunicar entre si sem sofrerem interferências de outro, assim como o kernel é protegido de todos os processos. Você pode executar diversas tarefas em segundo plano (background) enquanto dedica toda sua atenção àquela sendo exibida na sua tela, além de poder alternar entre elas. Se estiver usando o sistema X-Window (ver página 13), você pode executar programas diferentes em diversas janelas em uma mesma tela e visualizar todas. Essa capacidade garante uma maior produtividade dos usuários. O Linux Possui um Sistema de Arquivos Hierárquico e Seguro Padrões Links Segurança Um arquivo é uma coleção de informações, como um texto para um memorando ou relatório, um acúmulo de números de vendas, uma imagem, uma música ou um programa executável. Cada arquivo é armazenado sob um identificador único em um dispositivo de armazenamento, como um disco rígido. O sistema de arquivos do Linux oferece uma estrutura na qual estes estão dispostos em diretórios e, portanto, em uma organização em árvore. Essa estrutura ajuda os usuários a acompanharem o grande número de arquivos através do agrupamento em diretórios de arquivos relacionados. Cada usuário tem um diretório principal, dentro do qual há diversos subdiretórios necessários (ver Figura 1.2). Com a idéia de facilitar a vida dos administradores de sistema e dos desenvolvedores de software, um grupo de pessoas se reuniu na Internet e desenvolveu o FSSTND (padrão para sistema de arquivos) do Linux, que depois evoluiu para o FHS (padrão para sistema de arquivos hierárquico) do Linux. Antes desse padrão ser adotado, os programas principais variavam em localização nas diferentes distribuições do Linux. Mas hoje você pode, em um sistema Linux, saber exatamente onde encontrar determinado programa padrão. Um link permite o acesso a um arquivo determinado através de um ou mais nomes diferentes (o Windows usa o termo atalho em vez de link). Os nomes alternativos podem estar ou não no mesmo diretório que o arquivo original. Pode-se usar os links para fazer o mesmo arquivo aparecer nos diretórios de variados usuários, facilitando o compartilhamento do arquivo. Assim como a maioria dos sistemas operacionais multiusuários, o Linux permite controlar acesso de outros usuários a seus dados . Isso possibilita que usuários compartilhem dados específicos e programas através de um simples, porém eficiente, Visão Geral do Linux 11 esquema de proteção. São as permissões de acesso a arquivos que oferecem esse nível de segurança, elas limitam os usuários que podem ler, escrever ou executar um arquivo. As Listas de Acesso de Controle (ACL, sigla em inglês) foram recentemente adicionadas ao kernel do Linux. As ACLs dão aos usuários e administradores um controle mais restrito sobre as permissões de acesso aos arquivos. Figura 1.2: Estrutura de sistema de arquivos do Linux. Shell: Interpretador de Comando e Linguagem de Programação Em um ambiente textual, a Shell, um interpretador de comando, funciona como uma interface entre você e o sistema operacional. Ao digitar um comando na tela, a Shell o interpreta e invoca o comando pedido. Há disponível no Linux várias shells, das quais as mais comuns são: • Bash (Bourne Again Shell): uma versão melhorada do Bourne Shell, uma das shells originais do Unix. • Tcsh (TC Shell): uma versão melhorada da versão da C Shell, desenvolvida como parte do Unix do BSD. Devido aos usuários geralmente terem sua Shell predileta, um sistema multiusuário pode ter uma série de shells diferentes em uso. A possibilidade de escolha da Shell representa um dos poderes do Linux: a capacidade de oferecer uma interface de usuário personalizada. Além de executar sua função de interpretar comandos a partir de um teclado e enviá-los ao sistema operacional, a Shell é uma linguagem de programação de alto nível. Pode-se organizar os seus comandos em um arquivo para execução futura. O Linux chama esses arquivos de Shell scripts (scripts Shell). No Windows e no DOS eles são os batch files (arquivos de lote). A flexibilidade desses scripts permite aos usuários efetuarem, com certa facilidade, operações complexas, geralmente através de comandos curtos, além de construir, com um pequeno esforço, programas elaborados que executam operações altamente complexas. 12 Capítulo 1 Seja bem-vindo ao Linux Criação de Nome de Arquivo Ao digitar comandos para serem processados pela Shell, pode-se construir padrões usando caracteres que possuem significados especiais à Shell. Eles são chamados de caracteres wildcard. Estes padrões representam um tipo de abreviatura: em vez de digitar o nome completo dos arquivos, os usuários podem usar apenas os padrões e a Shell os completará. Esses padrões são chamados de referências ambíguas a arquivos. Elas podem poupar-lhe do esforço de digitar um nome de arquivo muito longo ou uma longa série de nomes parecidos. Além disso, ela pode ser útil quando você sabe apenas uma parte do nome de um arquivo, ou quando não se lembra exatamente das letras. Entrada e Saída Independente de Dispositivo Redirecionamento Dispositivos (como uma impressora ou um terminal) e discos rígidos, todos parecem ser vistos como arquivos pelos programas no Linux. Ao dar um comando a esse sistema operacional, você pode instruí-lo para enviar a saída para qualquer um dos diversos dispositivos ou arquivos. Esse desvio é chamado redirecionamento de saída. Da mesma forma, a entrada de um programa, que normalmente vem de um teclado, pode ser redirecionada, de modo que venha do arquivo de um disco. Entrada e saída são independentes de dispositivo, ou seja, é possível redirecionálos para ou a partir de qualquer dispositivo apropriado. Um exemplo seria o utilitário cat que costuma exibir o conteúdo de um arquivo na tela. Ao executar um comando cat, você pode facilmente redirecionar sua saída para um arquivo no disco em vez da tela. Funções de Shell Um dos recursos mais importantes da Shell é que os usuários podem usá-la como uma linguagem de programação. Devido à Shell ser um interpretador, não compila programas escritos para ela, mas os interpreta sempre que são carregados a partir do disco. Carregar e interpretar programas pode consumir muito tempo. Muitas shells, incluindo o bash, abarcam funções que ficam em sua memória, de modo que não precisem ser lidos a partir do disco sempre que forem executadas. A Shell também mantém as funções em um formato interno, de forma que não seja preciso gastar muito tempo para interpretá-las. Controle de tarefas (job control) Este é um recurso de Shell que permite aos usuários trabalharem com várias tarefas de uma vez, alternando entre elas conforme necessário. Ao iniciar uma tarefa, geralmente ela fica em primeiro plano, dessa forma conectada ao seu terminal. Mas com o controle de tarefas você pode mover para segundo plano aquela na qual está trabalhando, deixando-a ainda em execução enquanto trabalha ou observa outra coisa no primeiro plano. Então, se uma tarefa que está em segundo plano requisitar sua atenção, você pode trazê-la de volta para o primeiro e voltar a trabalhar nela. O conceito de controle de tarefas (job control) surgiu com o Unix do BSD, na C Shell. Recursos Adicionais do Linux 13 Uma Grande Coleção de Utilitários Práticos O Linux possui um conjunto de centenas de programas utilitários, geralmente chamados de comandos. Eles executam funções que são praticamente exigidas por qualquer usuário. Um exemplo é o sort, que ordena alfabética ou numericamente listas (ou grupos de listas) e pode ser usado para classificar por número, sobrenome, cidade, CEP, número do telefone, idade, tamanho, custo, etc. O sort é uma ferramenta de programação importante e parte do sistema padrão do Linux. Outros utilitários permitem aos usuários criar, exibir, imprimir, copiar, pesquisar e excluir arquivos, assim como editar, formatar e diagramar (formatar para a impressão) o texto. Os utilitários man (de “manual”) e info exibem a documentação do próprio Linux. Comunicação Entre Processos Pipes e filtros O Linux permite ao usuário usar tanto pipes (lê-se “páipes”, barra vertical) quanto filtros, na linha de comando. Um pipe envia a saída de um programa como a entrada de outro. Um filtro é uma forma especial de pipe, que processa um fluxo de dados de entrada que produz um fluxo de dados de saída. Ele processa a saída de outro programa, alterando-a. A saída do filtro, então, se torna a entrada de outro programa. Pipes e filtros freqüentemente unem utilitários para executar uma tarefa específica. Por exemplo, você pode usar um pipe para enviar a saída do utilitário cat para o sort, um filtro. Então, usar outro pipe para enviar a saída de sort para um terceiro utilitário, o lpr, que envia os dados para a impressora. Portanto, em uma única linha de comando você pode usar três comandos juntos para ordenar e imprimir um arquivo. Administração do Sistema Em um sistema Linux, o administrador costuma ser o dono e único usuário, o que exige muitas responsabilidades. A primeira, talvez seja configurar o sistema e instalar o software. Com o sistema pronto e funcionando, o administrador é responsável por baixar e instalar programas (incluindo a atualização do sistema operacional), fazer backup e restauração dos arquivos e gerenciar recursos do sistema como impressoras, terminais, servidores e uma rede local. O administrador do também é responsável por criar as contas de novos usuários em um sistema multiusuário, desligando o sistema caso seja necessário, e lidar com os problemas que surgirem. Recursos Adicionais do Linux Os desenvolvedores do Linux incluíram recursos do BSD, do System V e do Solaris da Sun Microsystems, assim como novos recursos. Embora a maioria das ferramentas encontradas no Unix exista no Linux, em muitos casos elas foram substituídas por seus equivalentes mais modernos. A seção seguinte descreve algumas das ferramentas e recursos mais populares disponíveis no Linux. 14 Capítulo 1 Seja bem-vindo ao Linux GUIs: Interfaces Gráficas para o Usuário Gerenciador de área de trabalho Gerenciador de janela O sistema X-Window (também chamado de X) foi desenvolvido em parte por pesquisadores no MIT e é a base das GUIs disponíveis para o Linux. Dado um terminal ou estação de trabalho que suporte o X, um usuário pode interagir com o computador através de diversas janelas na tela, exibir informações em formato gráfico ou usar aplicativos específicos de desenho, monitorar processos ou prévisualizar uma saída formatada. O X é um protocolo de comunicação de rede que permite ao usuário abrir uma janela remota numa estação de trabalho ou sistema de computador que não esteja na CPU onde se abre tal janela. Geralmente, duas camadas rodam sob o X: um gerenciador de área de trabalho e um de janela. O primeiro é voltado para a interface gráfica do usuário, que lhe permite interagir com programas do sistema através da manipulação de ícones, em vez da digitação de comandos na Shell. O GNOME (www.gnome.org) e o KDE (www.kde.org) são os gerenciadores de área de trabalho mais populares. É um programa que roda sob o gerenciador de área de trabalho e permite abrir e fechar janelas, iniciar programas e configurar um mouse de modo que este faça coisas diferentes dependendo de como e onde você clicar. O gerenciador de janela também dá uma personalização à tela. O Microsoft Windows permite alterar a cor dos elementos principais em uma janela, mas este gerenciador, no X, possibilita mudar a aparência completa de sua tela: modificar como uma janela é e funciona (alterando suas bordas, botões e barras de rolamento), definir uma área de trabalho virtual, criar menus e muito mais. Diversos gerenciadores de janela populares rodam no X e no Linux, incluindo o Metacity (o padrão do GNOME) e o Kwin (o padrão do KDE). Há também outros, como o Sawfish e o WindowMaker. Utilitários de Rede e Entre Redes O suporte à rede no Linux inclui muitos utilitários que lhe permitem acessar remotamente sistemas em uma variedade de redes. Além de enviar e-mail para usuários em outros sistemas, você pode acessar arquivos em discos montados em outros computadores como se estivessem no sistema local, tornar, da mesma forma, seus arquivos disponíveis para outros sistemas, fazer transferências de arquivos, executar programas em sistemas remotos enquanto exibe os resultados no sistema local e efetuar diversas outras operações pelas LANs (redes locais) e WANs (redes de longa distância), incluindo a Internet. Na camada ao topo deste acesso de rede está a grande quantidade de aplicativos que ampliam os recursos do computador pelo mundo. Você pode conversar com pessoas no mundo todo, coletar informações sobre uma variedade de assuntos e baixar novos programas da Internet de maneira rápida e confiável. Desenvolvimento de software Uma das competências principais do Linux é o rico ambiente de desenvolvimento de software. Pode-se encontrar compiladores e interpretadores em diversas línguas de computador. Além do C e do C++, outras linguagens disponíveis para o Linux são: Ada, Fortran, Java, Lisp, Pascal, Perl, Python, dentre outras. Exercícios 15 O utilitário bison gera o código de análise de sintaxe, o que facilita a escritura de programas para construir compiladores (ferramentas que analisam sintaticamente arquivos que contêm informações estruturadas). O flex gera “escaneadores”, ou seja, código que reconhece padrões lexicais em um texto. O utilitário make e o (configure) de configuração automática make, do GNU, facilitam o gerenciamento de projetos de desenvolvimento complexo. Os sistemas de gerenciamento de código fonte, como o CVS, simplificam o controle de versão. Diversos depuradores, incluindo o ups e o gbd, ajudam na identificação e reparo dos defeitos no software. O compilador C (gcc), do GNU, funciona com o utilitário de definição de perfil gprof, que auxilia programadores a identificarem possíveis obstruções na performance de um programa. O compilador C possui opções para efetuar extensiva verificação do código C, o que pode tornar o código mais portátil e reduzir o tempo de depuração. Resumo O sistema operacional Linux surgiu de uma tradição do Unix para se tornar uma alternativa popular aos sistemas tradicionais (isto é, o Windows) disponíveis para hardware de microcomputadores. Os usuários do Unix encontram um ambiente familiar no Linux, cujas distribuições já possuem os utilitários do Unix e uma série de ferramentas desenvolvidas para o projeto GNU. Tudo isso, graças a programadores do mundo todo que contribuíram para esse projeto. A comunidade Linux está comprometida com o desenvolvimento contínuo deste sistema. Suporte a novos dispositivos e recursos para microcomputadores são adicionados logo após a disponibilização do hardware. Além disso, ferramentas disponíveis no Linux continuam a ser aprimoradas. Com muitos pacotes de software comerciais disponíveis para esta plataforma e muitos fabricantes de hardware oferecendo o Linux como seus sistemas operacionais, fica claro que esse sistema evoluiu muito além de sua proposta original. Ou seja, o que seria apenas um projeto acadêmico, tornou-se um sistema operacional de escolha acadêmica, comercial, profissional e para uso pessoal. Exercícios 1. O que é software livre? Cite três características. 2. Qual o motivo da popularidade do Linux? Por que ele é tão popular no ambiente acadêmico? 3. O que são sistemas multiusuários? Por que eles deram certo? 4. O que é a Fundação do Software Livre do GNU? O que é Linux? Quais as partes do sistema operacional Linux e o que cada uma oferece? Quem mais ajudou a construir e melhorar o sistema? 5. Em qual linguagem é escrito o Linux? Qual a relação dela para com o sucesso do Linux? 6. O que é um programa utilitário? 7. O que é uma Shell? Como ela trabalha com o kernel e com o usuário? 8. Como você pode usar os programas utilitários e uma Shell para criar seus próprios aplicativos? 16 Capítulo 1 Seja bem-vindo ao Linux 9. Por que se diz que o sistema de arquivos do Linux é hierárquico? 10. Qual a diferença entre um multiprocessador e um sistema multitarefa? 11. Dê um exemplo de quando você usaria um sistema multitarefa. 12. Cerca de quantas pessoas escreveram o Linux? Por que isso é um caso único? 13. Quais são os termos principais do da Licença Pública Geral (GPL) do GNU?