Linux ® A Bíblia Tradução da 8a Edição Christopher Negus com a colaboração de Christine Bresnahan Rio de Janeiro, 2014 PFCG_Book 1.indb 3 13/05/2014 16:48:11 PFCG_Book 1.indb 30 13/05/2014 16:48:13 Introdução V ocê não pode aprender Linux sem usá-lo. Cheguei a essa conclusão depois de mais de uma década ensinando as pessoas a aprenderem Linux. Você não pode simplesmente ler um livro, você não pode simplesmente ouvir uma palestra. Você precisa de alguém para guiá-lo e você precisa mergulhar no assunto e praticar. Em 1999, a Wiley publicou a primeira edição do livro Linux – A Bíblia. O enorme sucesso me deu a oportunidade de me tornar um autor de tempo integral e independente sobre o Linux. Por cerca de uma década, escrevi dezenas de livros sobre Linux e explorei as melhores maneiras de explicar Linux a partir da quietude no meu pequeno escritório doméstico. Em 2008, peguei a estrada. Fui contratado pela Red Hat, Inc. como um instrutor em tempo integral, ensinando Linux para administradores de sistema profissionais que procuram a certificação Red Hat Certified Engineer (RHCE). Em meus três anos como instrutor de Linux, aperfeiçoei minhas habilidades de ensino na frente de pessoas vivas cuja experiência em Linux variava de zero a um profissional experiente. Neste livro, espero aplicar minha experiência em texto transformando você de alguém que nunca usou o Linux em alguém com as habilidades para se tornar um profissional em Linux. Agora em sua oitava edição, este livro adquiriu um escopo muito amplo em edições anteriores. O livro cobria várias distribuições do Linux, descrevia como executar aplicativos, tocava na questão da administração de sistema e fornecia uma entrada para o desenvolvimento de software em Linux. Apesar de ter sido eleito um dos cinco melhores livros de todos os tempos do Linux há três anos, Linux – A Bíblia tinha perdido seu caminho. Esta oitava edição de Linux – A Bíblia representa uma grande revisão. Quase todo o conteúdo anterior foi reescrito ou, na maioria dos casos, completamente substituído. O novo foco do livro pode ser resumido das seguintes maneiras: ■■ Iniciante a profissional certificado: Desde que você tenha usado um computador, mouse e teclado, você pode começar com este livro. Nós lhe dizemos como obter o Linux e como começar a usá-lo, passamos por temas críticos e, por fim, chegamos a como dominar a administração e segurança do sistema. ■■ Focado no administrador de sistema: Quando tiver concluído a leitura deste livro, você não só vai saber como usar o Linux mas como modificá-lo e mantê-lo. Todos os tópicos necessários para se tornar um Red Hat Certified Engineer são abordados neste livro. ■■ Ênfase nas ferramentas de linha de comando: Embora a interface gráfica de janelas para gerenciar o Linux tenha melhorado significativamente nos últimos anos, muitos recursos avançados só podem ser utilizados digitando comandos e editando arquivos de configuração manualmente. Nós ensinamos como se tornar proficiente com o shell de linha de comando do Linux. xxxi PFCG_Book 1.indb 31 13/05/2014 16:48:13 Introdução ■■ Destinado a menos distribuições do Linux: Em edições anteriores, descrevi cerca de 18 diferentes distribuições do Linux. Com apenas algumas exceções notáveis, distribuições do Linux mais populares são ou são baseadas no Red Hat (Red Hat Enterprise Linux, Fedora, CentOS etc) ou no Debian (Ubuntu, Linux Mint, Knoppix etc). Concentrei-me no Red Hat, porque é onde estão os trabalhos com Linux mais bem remunerados; abordo um pouco o Ubuntu porque é com ele que muitos dos maiores fãs do Linux começam. ■■ Muitas, muitas demos e exercícios: Em vez de apenas dizer o que o Linux faz, eu realmente mostro o que ele faz. Então, para garantir que aprendeu o assunto, você tem a oportunidade de experimentar os exercícios sozinhos. Todos os procedimentos e exercícios foram testados para funcionar no Fedora ou no Red Hat Enterprise Linux. Muitos vão funcionar no Ubuntu também. Como este livro está organizado O livro está organizado para que você possa começar logo no início com o Linux e crescer para se tornar um administrador de sistema Linux profissional e um “power user”, um usuário avançado. A Parte I, “Começando”, inclui dois capítulos destinados a ajudar você a entender o que é o Linux e apresenta um desktop Linux: ■■ O Capítulo 1, “Começando com o Linux”, aborda temas como o que é o sistema operacional Linux, de onde ele vem e como começar a usá-lo. ■■ O Capítulo 2, “Criando o desktop perfeito em Linux”, fornece informações sobre como você pode criar um sistema desktop e usar alguns dos recursos de desktop mais populares. A Parte II, “Tornando-se um usuário avançando do Linux”, fornece detalhes em profundidade sobre como usar o shell do Linux, trabalhar com sistemas de arquivos, manipular arquivos de texto, gerenciar processos e usar scripts de shell: ■■ O Capítulo 3, “Utilizando o Shell”, inclui informações sobre como acessar um shell, executar comandos, recuperar comandos (usando o histórico) e usar o completamento de comando com a tecla Tab. O capítulo também descreve como usar variáveis, aliases e páginas do manual. ■■ O Capítulo 4, “Movendo-se pelo sistema de arquivos”, inclui comandos para listar, criar, copiar e mover arquivos e diretórios. Tópicos mais avançados neste capítulo incluem a segurança do sistema de arquivos, tais como a posse de arquivo, permissões e listas de controle de acesso. ■■ O Capítulo 5, “Trabalhando com arquivos de texto”, inclui tudo, desde editores de textos básicos até ferramentas para encontrar arquivos e pesquisar texto dentro de arquivos. ■■ O Capítulo 6, “Gerenciando processos em execução”, descreve a forma de ver os processos que estão em execução no sistema e alterar esses processos. Maneiras de alterar processos incluem eliminar, pausar e enviar outros tipos de sinais. ■■ O Capítulo 7, “Escrevendo scripts de shell simples”, inclui comandos e funções de shell que você pode reunir em um arquivo para ser executado como um único comando. xxxii PFCG_Book 1.indb 32 13/05/2014 16:48:13 Introdução Na Parte III, “Tornando-se um administrador de sistema Linux”, você aprende a administrar sistemas Linux: ■■ O Capítulo 8, “Aprendendo administração de sistema”, fornece informações básicas sobre ferramentas gráficas, comandos e arquivos de configuração para a administração de sistemas Linux. ■■ O Capítulo 9, “Instalando o Linux”, aborda as tarefas de instalações comuns, como o particionamento de disco e a seleção inicial do pacote de software, assim como ferramentas de instalação avançadas, como a instalação a partir de arquivos kickstart. ■■ O Capítulo 10, “Obtendo e gerenciando software”, fornece uma compreensão de como os pacotes de software funcionam e como obtê-los e gerenciá-los. ■■ O Capítulo 11, “Gerenciando contas de usuário”, discute ferramentas para adicionar e excluir usuários e grupos, bem como a forma de centralizar o gerenciamento de conta de usuário. ■■ O Capítulo 12, “Gerenciando discos e sistemas de arquivos”, fornece informações sobre a adição de partições, criar e montar sistemas de arquivos, bem como trabalhar com gerenciamento de volume lógico. Na Parte IV, “Tornando-se um administrador de servidor Linux”, você aprenderá a criar servidores de rede poderosos e as ferramentas necessárias para gerenciá-los: ■■ O Capítulo 13, “Entendendo administração de servidores”, aborda o registro em log remoto, ferramentas de monitoramento e o processo de inicialização do Linux. ■■ O Capítulo 14, “Administrando redes”, discute a configuração de rede. ■■ O Capítulo 15, “Iniciando e parando serviços”, fornece informações sobre como iniciar e parar serviços de rede. ■■ O Capítulo 16, “Configurando um servidor de impressão”, descreve como configurar impressoras para usar localmente no seu sistema Linux ou através da rede a partir de outros computadores. ■■ O Capítulo 17, “Configurando um servidor web”, descreve como configurar um servidor Web Apache. ■■ O Capítulo 18, “Configurando um servidor FTP”, aborda os procedimentos para a configuração de um servidor FTP que pode ser usado para permitir que outros baixem arquivos de seu sistema Linux através da rede. ■■ O Capítulo 19, “Configurando um servidor de compartilhamento de arquivos do Windows (Samba)”, abrange configuração do servidor de arquivos Windows com o Samba. ■■ O Capítulo 20, “Configurando um servidor de arquivos NFS”, descreve como usar os recursos de rede do sistema de arquivos para compartilhar pastas de arquivos entre sistemas em uma rede. ■■ O Capítulo 21, “Solução de problemas do Linux”, abrange ferramentas populares para a solução de problemas no seu sistema Linux. Na Parte V, “Aprendendo técnicas de segurança do Linux”, você aprende a proteger seus sistemas e serviços Linux: ■■ O Capítulo 22, “Entendendo a segurança básica do Linux”, aborda os conceitos e técnicas básicas de segurança. xxxiii PFCG_Book 1.indb 33 13/05/2014 16:48:13 Introdução ■■ O Capítulo 23, “Entendendo segurança avançada do Linux”, fornece informações sobre o uso de Pluggable Authentication Modules (PAM) e ferramentas de criptologia para reforçar a segurança e autenticação do sistema. ■■ O Capítulo 24, “Aprimorando a segurança do Linux com o SELinux”, mostra como ativar Security Enhanced Linux (SELinux) para garantir os serviços do sistema. ■■ O Capítulo 25, “Protegendo Linux na rede”, abrange recursos de segurança de rede, como firewalls iptables, para garantir a segurança dos serviços do sistema. A Parte VI contém dois apêndices para ajudar você a obter o máximo de sua compreensão do Linux. O Apêndice A, “Mídia”, fornece orientação sobre download de distribuições do Linux. O Apêndice B, “Respostas dos Exercícios”, fornece soluções de exemplo para os exercícios incluídos nos capítulos 2 a 25. Convenções utilizadas neste livro Ao longo do livro, uma tipografia especial indica código e comandos. Comandos e códigos são mostrados em uma fonte monoespaçada: This is how code looks. No caso de um exemplo incluir tanto a entrada como a saída, a fonte monoespaçada é ainda usada, mas a entrada é apresentada em negrito para diferenciar um do outro. Eis um exemplo: $ ftp ftp.handsonhistory.com Name (home:jake): jake Password: ****** Quanto aos estilos no texto: ■■ Novos termos e palavras importantes aparecem em itálico quando introduzidos. ■■ Teclas de atalho aparecem assim: Ctrl+A ■■ Nomes de arquivos, URLs e código dentro do texto aparecem assim: persistence. properties. Os seguintes itens chamam a atenção para pontos que são particularmente importantes. Nota Uma caixa de Nota fornece informações extras para as quais você precisa dedicar uma atenção especial. Dica Uma caixa de Dica mostra uma maneira especial de realizar uma tarefa em particular. xxxiv PFCG_Book 1.indb 34 13/05/2014 16:48:13 Introdução Atenção Uma caixa de Atenção alerta para você tomar cuidado especial ao executar um procedimento ou seu hardware ou software pode ser danificado. Mergulhando no Linux Se você é iniciante em Linux, pode ter vagas ideias sobre o que ele é e de onde veio. Você já deve ter ouvido algo sobre ele ser “free” no sentido de “gratuito” ou no sentido de “livre” (como a liberdade de usá-lo como você quiser). Antes de começar a pôr as mãos no Linux (o que faremos em breve), o Capítulo 1 procura responder algumas de suas perguntas sobre as origens e os recursos do Linux. Dedique um tempo para estudar este livro a fim de entender o Linux e como você pode fazê-lo trabalhar para atender suas necessidades. Esse é o seu convite para entrar e dar o primeiro passo para se tornar um especialista em Linux! Visite o site Linux Bible Para encontrar links para as várias distribuições do Linux, dicas sobre como obter a certificação Linux e correções para o livro à medida que se tornam disponíveis, visite http://www.wiley.com/WileyCDA/. xxxv PFCG_Book 1.indb 35 13/05/2014 16:48:13 Parte I Começando nesta parte Capítulo 1 Começando com o Linux Capítulo 2 Criando o Desktop Perfeito em Linux PFCG_Book 1.indb 3 13/05/2014 16:48:13 PFCG_Book 1.indb 4 13/05/2014 16:48:13 1 C a p ítulo Começando com o Linux NESTE CAPÍTULO Aprendendo o que é Linux Aprendendo de onde o Linux veio Escolhendo distribuições Linux Explorando oportunidades profissionais com o Linux O Tornando-se certificado em Linux Linux é um dos avanços tecnológicos mais importantes do século XXI. Além de seu impacto sobre o crescimento da internet e do seu lugar como uma tecnologia capacitadora para uma série de dispositivos baseados em computador, o desenvolvimento do Linux tem sido um exemplo de como projetos colaborativos podem ultrapassar o que as pessoas e empresas individuais podem fazer sozinhas. O Google roda milhares e milhares de servidores Linux para fornecer sua tecnologia de busca. Seus telefones Android são baseados no Linux. Da mesma forma, quando você baixa e executa o Google Chrome OS, você tem um navegador que é apoiado por um sistema operacional Linux. O Facebook constrói e implanta em seu site usando o que é conhecido como uma pilha LAMP (Linux, servidor web Apache, banco de dados MySQL e linguagem de script web PHP) — todos são projetos open source, isto é, baseados em código livre. Na verdade, o próprio Facebook usa um modelo de desenvolvimento de código-fonte aberto, tornando o código-fonte para os aplicativos e ferramentas que guiam o Facebook disponíveis para o público. Esse modelo tem ajudado o Facebook a eliminar bugs rapidamente, obter contribuições de todo o mundo e impulsionar o crescimento exponencial dessa rede social. Organizações financeiras que têm trilhões de dólares dependendo da velocidade e da segurança de seus sistemas operacionais também se baseiam muito no Linux. Essas incluem as bolsas de valores de Nova York, Chicago e Tóquio. A ampla adoção do Linux em todo o mundo criou uma demanda enorme pelo seu conhecimento. Este capítulo inicia você em um caminho para se tornar um especialista em Linux, ajudando-o a entender o que o Linux é, de onde veio e quais são suas oportunidades por se tornar proficiente nesse sistema. O restante deste livro fornece atividades práticas para lhe ajudar a ganhar essa experiência. 5 PFCG_Book 1.indb 5 13/05/2014 16:48:13 Parte I: Começando Entendendo o que é o Linux Linux é um sistema operacional de computador. Um sistema operacional consiste no software que gerencia seu computador e permite que você execute aplicativos nele. O que caracteriza os sistemas operacionais Linux e similares é: ■■ Detectar e preparar hardware — Quando o sistema Linux inicializa (quando você liga seu computador), ele olha para os componentes em seu computador (CPU, disco rígido, placas de rede etc.) e carrega os softwares (drivers e módulos) necessários para acessar dispositivos de hardware específicos. ■■ Gerenciar processos — O sistema operacional deve manter o controle de vários processos em execução ao mesmo tempo e decidir quais têm acesso à CPU e quando. O sistema também deve oferecer formas de iniciar, parar e alterar o status dos processos. ■■ Gerenciar memória — Memória RAM e espaço de troca (memória estendida) precisam ser alocados para aplicativos conforme eles precisam de memória. O sistema operacional decide como as solicitações de memória são manipuladas. ■■ Fornecer interfaces de usuário — Um sistema operacional deve fornecer maneiras de acessar o sistema. Os primeiros sistemas Linux eram acessados a partir de um interpretador de linha de comando chamado shell. Hoje, as interfaces gráficas desktop estão comumente disponíveis. ■■ Controlar sistemas de arquivos — Estruturas do sistema de arquivos são incorporadas ao sistema operacional (ou carregadas como módulos). O sistema operacional controla a posse e acesso aos arquivos e diretórios que contêm os sistemas de arquivos. ■■ Proporcionar acesso e autenticação de usuário — Criar contas de usuários e definir limites para eles é uma característica básica do Linux. Separar contas de usuário e de grupo permite o controle de seus próprios arquivos e processos. ■■ Oferecer utilitários administrativos — No Linux, existem centenas (talvez milhares) de comandos e janelas gráficas para fazer coisas como adicionar usuários, gerenciar discos, monitorar a rede, instalar softwares e, de maneira geral, proteger e gerenciar seu computador. ■■ Iniciar serviços — Para utilizar impressoras, tratar mensagens de log e fornecer uma variedade de sistemas e serviços de rede, processos rodam em segundo plano, à espera de pedidos por vir. Há muitos tipos de serviços que são executados no Linux e ele fornece diferentes maneiras de iniciar e parar esses serviços. Em outras palavras, enquanto o Linux possui navegadores para exibir páginas da web, ele também pode ser aquele que serve essas páginas a outros. Recursos de servidores populares incluem servidores de web, e-mail, banco de dados, impressora, arquivo, DNS e DHCP. ■■ Ferramentas de programação — Uma grande variedade de utilitários de programação para criar aplicativos e bibliotecas a fim de implementar interfaces especiais estão disponíveis com o Linux. Como um gerenciador de sistemas Linux, você precisa aprender a trabalhar com as características descritas anteriormente. Embora muitos recursos possam ser gerenciados usando interfaces gráficas, uma compreensão da linha de comando do shell é fundamental para alguém que administra sistemas Linux. 6 PFCG_Book 1.indb 6 13/05/2014 16:48:14 Capítulo 1: Começando com o Linux Os modernos sistemas Linux agora vão muito além do que podiam os primeiros sistemas UNIX (em que o Linux se baseava). Recursos avançados no Linux, frequentemente usados em grandes empresas, incluem os seguintes: ■■ Clustering — O Linux pode ser configurado para trabalhar em “clusters”, ou aglomerados de computadores, de modo a fazer vários sistemas aparecerem como um sistema para o mundo exterior. Os serviços podem ser configurados para se distribuírem entre os nós do cluster, enquanto, para aqueles que os utilizam, pareçam estar funcionando sem interrupção. ■■ Virtualização — Para gerenciar recursos de computação de forma mais eficiente, o Linux pode funcionar como um servidor de virtualização. Nesse servidor, você pode executar outros sistemas Linux, Microsoft Windows, BSD, ou outros sistemas operacionais como convidados virtuais. Para o mundo exterior, cada um dos convidados virtuais aparece como um computador separado. O KVM e o Xen são duas tecnologias em Linux para a criação de máquinas virtuais. Red Hat Enterprise Virtualization é um produto da Red Hat, Inc. para gerenciar múltiplos servidores de virtualização, convidados virtuais e armazenamento de dados. ■■ Computação em tempo real — O Linux pode ser configurado para computação em tempo real, em que os processos de alta prioridade possam esperar uma atenção rápida e previsível. ■■ Armazenamento especializado — Em vez de apenas armazenar dados no disco rígido do computador, várias interfaces especializadas de armazenamento local e em rede estão disponíveis em Linux. Dispositivos compartilhados de armazenamento em Linux incluem o iSCSI, o Fibre Channel e o InfiniBand. 1 Muitos desses tópicos avançados não são abordados neste livro. Mas os recursos abordados aqui para usar o shell, trabalhar com discos, iniciar e parar serviços e configurar uma grande variedade de servidores devem servir como uma base para trabalhar com esses recursos avançados. Entendendo como o Linux difere de outros sistemas operacionais Se você é novo no Linux, é provável que tenha usado um sistema operacional Microsoft Windows ou Apple Ma­c OS. Embora o Mac OS X tenha suas raízes em um sistema operacional de software livre, referido como Berkeley Software Distribution (mais sobre isso mais adiante), os sistemas operacionais da Microsoft e da Apple são considerados sistemas operacionais proprietários. Isso significa que: ■■ Você não pode ver o código usado para criar o sistema operacional. ■■ Você, portanto, não pode alterar o sistema operacional em seus níveis mais básicos se ele não atender suas necessidades — e você não pode usar o sistema operacional para construir seu próprio sistema operacional a partir do código-fonte. ■■ Você não pode verificar o código para encontrar erros, explorar vulnerabilidades de segurança, ou simplesmente saber o que o código está fazendo. ■■ Você pode não ser capaz de facilmente conectar seu próprio software com o sistema operacional se os criadores desse sistema não quiserem expor as interfaces de programação que você precisa para o mundo exterior. 7 PFCG_Book 1.indb 7 13/05/2014 16:48:14 Parte I: Começando Você pode ler as declarações sobre o software proprietário e dizer: “O que me importa? Eu não sou um desenvolvedor de software. Eu não quero ver ou mudar o modo como meu sistema operacional é construído.” Isso pode ser verdade. Mas o fato de que outros podem ter software livre e de códigofonte aberto e usá-lo como quiserem tem impulsionado o crescimento explosivo da internet, telefones celulares (pense no Android), dispositivos de computação especiais (pense no Tivo) e centenas de empresas de tecnologia. O software livre baixou os custos de computação e permitiu uma explosão de inovação. Talvez você não queira usar o Linux — de forma semelhante a que o Google, o Facebook e outras empresas têm usado — para construir a fundação de uma empresa de bilhões de dólares. Mas essas e outras empresas que agora contam com o Linux para conduzir suas infraestruturas de computador estão precisando de cada vez mais pessoas com as habilidades para rodar esses sistemas. Você pode se perguntar como um sistema de computador que é tão poderoso e flexível tornou-se livre também. Para entender como isso aconteceu, você precisa ver de onde o Linux veio. Assim, a próxima seção deste capítulo descreve o caminho estranho e sinuoso do movimento do software livre que levou ao Linux. Explorando a história do Linux Algumas histórias do Linux começam com essa mensagem postada por Linus Torvalds no newsgroup comp.os.minix em 26 de agosto de 1991 (http://groups.google. com/group/comp.os.minix/msg/b813d52cbc5a044b): Linus Benedict Torvalds Olá pessoal por aí usando minix Estou criando um sistema operacional (livre) (apenas um hobby, não será grande e profissional como o gnu) para clones AT 386(486). Ele vem crescendo desde abril e está começando a ficar pronto. Eu gostaria de qualquer feedback das pessoas sobre o que gostaram ou não no minix, uma vez que meu OS se parece um pouco com ele (mesmo layout físico do sistema de arquivos (devido a razões práticas, entre outras coisas)... Quaisquer sugestões serão bem-vindas, mas não prometo que vou implementá-las. :-) Linus ([email protected]) P.S.: Sim — não contém nenhum código minix e tem um fs multi-threaded. NÃO é portável [sic] (usa alternância de tarefas de 386 etc) e provavelmente nunca vai suportar outra coisa senão discos rígidos AT, já que isso é tudo o que tenho. :-( O Minix era um sistema operacional tipo UNIX que rodava em PCs no início da década de 1990. Assim como o Minix, o Linux também era um clone do sistema operacional UNIX. Com poucas exceções, como o Microsoft Windows, sistemas de computadores mais modernos (incluindo Mac OS X e Linux) eram provenientes de sistemas operacionais UNIX, criados originalmente pela AT&T. Para apreciar verdadeiramente como um sistema operacional livre poderia ter sido projetado com base em um sistema proprietário dos Laboratórios Bell da AT&T, ajuda entender a cultura em que o UNIX foi criado e a cadeia de eventos que tornaram possível reproduzir livremente a essência desse sistema. 8 PFCG_Book 1.indb 8 13/05/2014 16:48:14 Capítulo 1: Começando com o Linux Nota Para saber mais sobre como o Linux foi criado, pegue o livro Just For Fun: The Story of an Accidental Revolutionary, de Linus Torvalds (Harper Collins Publishing, 2001). 1 A cultura de fluxo livre do UNIX no Bell Labs Desde o início, o sistema operacional UNIX foi criado e nutrido em um ambiente de comunidade. Sua criação não foi impulsionada por necessidades do mercado, mas por um desejo de superar os obstáculos na produção de programas. A AT&T, que detinha a marca UNIX originalmente, acabou transformando o UNIX em um produto comercial, mas a essa altura, muitos dos conceitos (e até mesmo grande parte do código inicial) que tornavam o UNIX especial tinham caído em domínio público. Se você não tem idade suficiente para lembrar quando a AT&T se dividiu, em 1984, você pode não se lembrar de uma época em que a AT&T era “a” companhia telefônica. Até o início de 1980, a AT&T não precisava pensar muito em competição, porque se você queria um telefone nos Estados Unidos, tinha de recorrer à AT&T. Ela se dava ao luxo de financiar projetos de pesquisa pura. A Meca para tais projetos era o Bell Laboratories, em Murray Hill, Nova Jersey. Depois que um projeto chamado Multics falhou por volta de 1969, os funcionários da Bell Labs Ken Thompson e Dennis Ritchie decidiram sair e criar por conta própria um sistema operacional que oferecesse um melhor ambiente para o desenvolvimento de software. Naquela época, a maioria dos programas era escrita em cartões perfurados que tinham de ser inseridos em lotes em computadores mainframe. Em uma palestra em 1980 sobre “A Evolução do Sistema de Compartilhamento de Tempo do UNIX”, Dennis Ritchie resumiu o espírito que iniciou o UNIX: O que queríamos preservar era não só um bom ambiente para fazer programação, mas um sistema em torno do qual um companheirismo poderia se formar. Sabíamos, por experiência, que a essência da computação em comunidade da maneira proporcionada pelo acesso remoto e o compartilhamento de tempo de máquinas não é apenas para digitar programas em um terminal em vez de um furador de papel, mas para encorajar a comunicação de perto. A simplicidade e o poder do projeto UNIX começou a quebrar as barreiras que, até esse ponto, impediam os desenvolvedores de software. A fundação do UNIX foi criada com vários elementos-chave: ■■ O sistema de arquivos UNIX — Porque incluía uma estrutura que permitia níveis de subdiretórios (os quais, para os usuários de desktop de hoje, parecem pastas dentro de pastas), o UNIX poderia ser usado para organizar os arquivos e diretórios de forma intuitiva. Além disso, os complexos métodos de acessar discos, fitas e outros dispositivos foram significativamente simplificados, representando esses dispositivos como arquivos de dispositivos individuais que você também podia acessar como itens em um diretório. ■■ Redirecionamento de entrada/saída — Os primeiros sistemas UNIX também incluíam redirecionamento de entrada. A partir de uma linha de comando, os usuários UNIX podiam direcionar a saída de um comando para um arquivo usando uma tecla de seta para a direita (>). Mais tarde, o conceito de redirecionamento (usando o caractere |, conhecido como “pipe” em inglês) foi ampliado fazendo a saída de um comando ser direcionada para a entrada de outro. Por exemplo, o 9 PFCG_Book 1.indb 9 13/05/2014 16:48:14 Parte I: Começando comando a seguir concatena (cat) o arquivo1 e arquivo2, ordena (sort) as linhas nesses arquivos alfabeticamente, pagina o texto classificado para a impressão (pr) e direciona a saída para a impressora padrão do computador (lpr): $ cat file1 file2 | sort | pr | lpr Esse método de direcionar entrada e saída permitiu aos desenvolvedores criar seus próprios utilitários especializados que podiam ser vinculados com utilitários existentes. Essa modularidade tornou possível que lotes de código fossem desenvolvidos por muitas pessoas diferentes. Um usuário poderia simplesmente montar as peças para o que ele precisava. ■■ Portabilidade — Simplificar a experiência de usar UNIX também o tornou extremamente portátil para rodar em diferentes computadores. Por ter drivers de dispositivo (representados por arquivos na árvore de arquivos), o UNIX poderia apresentar uma interface para aplicações de tal forma que os programas não precisavam saber sobre os detalhes do hardware subjacente. Para mais tarde portar o UNIX para outro sistema, os desenvolvedores só precisavam mudar os drivers. Os programas aplicativos não precisavam ser alterados para rodar em um hardware diferente! Para tornar a portabilidade uma realidade, era necessária uma linguagem de programação de alto nível a fim de implementar o software necessário. Para esse fim, Brian Kernighan e Dennis Ritchie criaram a linguagem de programação C. Em 1973, o UNIX foi reescrito em C. Hoje, o C ainda é o principal idioma usado para criar o kernel dos sistemas operacionais Unix (e Linux). Como Ritchie chegou a dizer em uma palestra, em 1979 (hhtp://.bell-labs.com/ who/dmr/hist.html): Hoje, o único programa UNIX importante ainda escrito em assembler é o assembler em si, praticamente todos os programas utilitários estão em C e por isso são a maioria dos programas, embora também existam locais com muitos em Fortran, Pascal e Algol 68. Parece certo que a maior parte do sucesso do UNIX resulta da legibilidade, modificabilidade e portabilidade do seu software que, por sua vez, resulta da sua expressão em linguagens de alto nível. Se você é um entusiasta do Linux e está interessado nos recursos de seus primeiros dias que sobreviveram até hoje, uma leitura interessante é a reimpressão do primeiro manual programador UNIX feito por Dennis Ritchie (datado em 3 de novembro de 1971). Você pode encontrá-lo no site de Dennis Ritchie: http://cm.belllabs.com/cm/cs/who/ dmr/1stEdman.html. A forma dessa documentação é a das “páginas man” (página do manual) do UNIX — que ainda é o principal formato para documentar comandos de sistema operacional UNIX e Linux e ferramentas de programação de hoje em dia. O que fica claro quando você lê a documentação inicial e os relatos do sistema UNIX é que o desenvolvimento foi um processo de fluxo livre, sem ego, e se dedicou a tornar o UNIX excelente. Esse processo levou a um compartilhamento de código (dentro e fora da Bell Labs), o que permitiu o rápido desenvolvimento de um sistema operacional UNIX de alta qualidade. Isso também levou a um sistema operacional que a AT&T teria dificuldade em recuperar mais tarde. 10 PFCG_Book 1.indb 10 13/05/2014 16:48:14 Capítulo 1: Começando com o Linux O UNIX comercializado Antes da alienação de participação societária da AT&T em 1984, quando ela foi dividida em AT&T e sete empresas “Baby Bell”, a AT&T foi proibida de vender sistemas de computador. As empresas que mais tarde se tornariam Verizon, Qwest e Alcatel-Lucent eram todas parte da AT&T. Como resultado desse monopólio do sistema de telefonia, o governo dos EUA estava preocupado com a possibilidade de que uma AT&T irrestrita pudesse dominar a incipiente indústria de computadores. 1 Por causa disso, a AT&T foi impedida de vender computadores diretamente aos clientes antes de sua alienação, o código-fonte UNIX foi licenciado para universidades por um valor simbólico. Não havia um sistema operacional UNIX para venda pela AT&T que você não tivesse de compilar por sua própria conta. Chega a Berkeley Software Distribution Em 1975, o UNIX V6 tornou-se a primeira versão UNIX disponível para uso generalizado fora da Bell Laboratories. A partir desse código-fonte UNIX inicial, a primeira variante importante do UNIX foi criada na Universidade da Califórnia, em Berkeley, e foi batizada como Berkeley Software Distribution (BSD). Durante a maior parte da década seguinte, as versões BSD e UNIX da Bell Labs tomaram direções distintas. O BSD continuou à frente no estilo fluxo livre e compartilhado, que era a marca do UNIX inicial da Bell Labs, enquanto a AT&T começava a direcionar o UNIX para a comercialização. Com a formação de um UNIX Laboratory separado, que saiu de Murray Hill e se estabeleceu em Summit, Nova Jersey, a AT&T iniciou suas tentativas de comercializar o UNIX. Em 1984, a alienação societária imposta pelo governo espreitava a AT&T e ela estava pronta para realmente começar a comercializar o UNIX. O UNIX Laboratory e a Comercialização O UNIX Laboratory era considerado uma joia que não conseguia encontrar um lar ou uma maneira de dar lucro. Enquanto se movia entre a Bell Laboratories e outras áreas da AT&T, seu nome mudou várias vezes. Ele é provavelmente melhor lembrado pelo nome que tinha quando começou sua proliferação a partir da AT&T: UNIX System Laboratories (USL). O código-fonte do UNIX que saiu da USL, o legado que agora pertence em parte à Santa Cruz Operation (SCO), tem sido usado como base para os processos da SCO contra os principais fornecedores do Linux (como a IBM e a Red Hat, Inc.). Por causa disso, acho que os esforços de USL que contribuíram para o sucesso do Linux são esquecidos pela maioria das pessoas. Durante a década de 1980, naturalmente, muitas empresas de informática tinham medo de que a recém-vendida AT&T representasse uma ameaça maior para o controle da indústria de computadores do que seria uma empresa iniciante, em Redmond, Washington. Para acalmar os temores da IBM, Intel, Digital Equipment Corporation e outras empresas de informática, o UNIX Lab fez os seguintes compromissos para garantir a igualdade de condições: ■■ Código-fonte único — Em vez de produzir seu próprio conjunto de caixas UNIX, a AT&T continuou a vender apenas o código-fonte e torná-lo disponível igualmente a todos os licenciados. Cada empresa, então, portaria o UNIX para seu próprio equipamento. Mas foi só em 1992, quando o laboratório foi desmembrado 11 PFCG_Book 1.indb 11 13/05/2014 16:48:14 Parte I: Começando como uma joint venture com a Novell (chamada Univel) e então acabou sendo vendido para a Novell, que um conjunto comercial em caixa do UNIX (chamado UnixWare) foi produzido diretamente a partir daquele código-fonte. ■■ Interfaces publicadas — Para criar um ambiente de justiça e comunidade para seus OEMs (fabricantes de equipamentos originais), a AT&T começou a padronizar o que os diferentes fornecedores de UNIX tinham de ser capazes de fazer para continuar a ser chamado de UNIX. Para esse fim, o Portable Operating System Interface (POSIX) e a AT&T UNIX System V Interface Definition (SVID) eram especificações que os fornecedores de Unix poderiam usar para criar sistemas compatíveis com UNIX. Esses mesmos documentos também serviram como roteiros para a criação do Linux. Nota Em uma postagem inicial no grupo de notícias por e-mail, Linus Torvalds fez um pedido de uma cópia, de preferência online, do padrão POSIX. Acho que ninguém da AT&T esperava alguém ser realmente capaz de escrever seu próprio clone do UNIX a partir dessas interfaces, sem o uso de qualquer parte do seu código-fonte UNIX. ■■ Abordagem técnica — Mais uma vez, até o fim da USL, a maioria das decisões sobre a direção do UNIX eram feitas com base em considerações técnicas. O gerenciamento foi promovido entre o pessoal técnico e, até onde eu sei, nunca houve qualquer conversa sobre escrever um software para quebrar o de outras empresas ou restringir o sucesso de parceiros da USL. Quando por fim a USL começou a contratar especialistas em marketing e criar um produto desktop UNIX para usuários finais, o Microsoft Windows já tinha uma firme predominância no mercado de desktops. Também, porque a direção do UNIX tinha ido sempre no sentido do código-fonte de licenciamento destinado a sistemas de computação de grande porte, a USL tinha dificuldades para precificar seus produtos. Por exemplo, em um software que ela estava incluindo no UNIX, a USL era obrigada a pagar taxas de licenciamento por computador que se baseavam em mainframes de US$ 100.000 em vez de computadores de US$ 2.000. Adicione a isso o fato de que não havia programas aplicativos disponíveis para o UnixWare e você pode ver por que o esforço falhou. Mas um marketing de sucesso de sistemas UNIX da época estava acontecendo com outras empresas de informática. A SCO tinha encontrado um nicho de mercado, principalmente vendendo versões para PC do UNIX executando terminais burros em pequenos escritórios. A Sun Microsystems estava vendendo um grande número de estações de trabalho UNIX (originalmente baseadas no BSD, mas fundidas com o UNIX no SVR4) para programadores e aplicações de tecnologia sofisticada (como bolsas de valores). Outros sistemas UNIX comerciais também foram surgindo na década de 1980. Essa nova afirmação de propriedade do UNIX estava começando a cobrar seu preço ao espírito das contribuições abertas. Começaram a surgir processos para proteger o código-fonte e marcas comerciais do UNIX. Em 1984, esse novo UNIX restritivo deu origem a uma organização que pavimentou uma estrada para o Linux: a Free Software Foundation (Fundação do Software Livre). 12 PFCG_Book 1.indb 12 13/05/2014 16:48:14