Você está na página 1de 60

1 Linux : guia prtico Captulo 1: Entendendo o sistema O fato de existirem tantas distribuies Linux e tantas verses diferentes do sistema,

permite que o Linux seja usado nas mais diversas reas, de um PC domstico a um supercomputador. O grande problema que com tanta variedade, at mesmo os mais experientes acabam se sentindo perdidos, o que dizer ento dos novos usurios. Muitos acabam ento se limitando a usar uma nica distribuio e a dominar seus recursos na medida do possvel, enquanto outros preferem simplesmente continuar no Windows, onde as coisas parecem mais simples. Vamos ento a uma introduo (no to introdutria assim) sobre as distribuies Linux e os diferentes componentes que formam o sistema, para depois nos aprofundarmos nas peculiaridades de cada uma. A rvore genealgica das distribuies No comeo, instalar o Linux era uma tarefa ingrata. Tudo o que existia era o cdigo-fonte dokernel, que precisava ser compilado (usando o Minix ou outro sistema operacional) e combinado com outros utilitrios e bibliotecas (que tambm precisavam ser compilados, um a um) para que voc tivesse um sistema operacional funcional. Isso explica por que nos primeiros meses, aps o clebre anncio feito por Linus Torvalds em agosto de 1991, o Linux tinha apenas algumas dezenas de usurios, a maior parte deles programadores, que em maior ou menor grau participavam do desenvolvimento do sistema. Algum chegou a uma concluso bvia: por que no distribuir verses j compiladas do sistema, que pudessem ser instaladas diretamente? Surgiram ento as primeiras distribuies Linux, que rapidamente passaram a ganhar novos adeptos. Hoje em dia existem mais de 500 distribuies Linux, contando apenas as ativas. Apesar disso, 98% delas so personalizaes de outras distribuies j existentes, de forma que, se voc comear a estudar um pouco sobre a rvore genealgica das distribuies, vai perceber que existem menos de 10 distribuies principais (Debian, Red Hat/Fedora, Mandriva, Ubuntu, Slackware, Gentoo, etc.) das quais todas as outras so derivadas. Por mais diferente que seja a aparncia e a escolha de softwares pr-instalados, as distribuies derivadas mantm muitas das caractersticas da distribuio-me, de forma que se voc consegue aprender a trabalhar com as distribuies principais, passa a no ter grandes problemas ao trabalhar com qualquer uma das distribuies derivadas delas. Esta a grande proposta deste livro: permitir que voc tenha uma viso abrangente do sistema e consiga utilizar qualquer distribuio, migrando de uma para outra sem muita dificuldade. Com isso, voc pode ter uma distribuio principal, com a qual tem mais afinidade e onde se sente mais em casa, mas tambm ter um bom conhecimento sobre as outras, o suficiente para conseguir fazer o que precisa. Vamos l. :) As primeiras distribuies Linux A primeira distribuio de que se tem notcia um par de disquetes, chamados simplesmente de "Boot/Root", que foram desenvolvidos no final de 1991 por HJ Lu (que at hoje participa do desenvolvimento do kernel). Eles incluam apenas o mnimo necessrio para inicializar o sistema e rodar algumas ferramentas bsicas, em modo texto. No era exatamente uma "distribuio Linux" no sentido atual, mas foi um ponto de partida. O "Boot/Root" foi sucedido por distribuies como o MCC Interim Linux (lanado em fevereiro de 1992), o SLS Linux (maio de 1992) e o Yggdrasil (novembro de 1992). Cada uma delas segue uma ideia bastante diferente. O MCC era ainda uma distribuio em modo texto, mas que j oferecia um conjunto mais completo de aplicativos e compiladores. O SLS era distribudo na forma de um conjunto de arquivos .zip, que eram usados para gerar os disquetes de instalao a partir do MS/DOS, enquanto o Yggdrasil foi

2 uma espcie de antecessor dos live-CDs: voc dava boot atravs de um disquete e o sistema rodava a partir de um CD-ROM, com direito a ambiente grfico e a opo de instal-lo no HD usando um script em shell. O sistema era extremamente lento (os PCs da poca usavam CD-ROMs 1x ou 2x e tinham apenas 4 ou 8 MB de memria), mas funcionava. A distribuio mais antiga ainda ativa o Slackware, lanado em julho de 1993. O Slackware uma das distribuies mais espartanas, que tem como objetivo preservar a tradio dos sistemas Unix, provendo um sistema estvel, organizado, mas com poucas ferramentas automatizadas, o que te obriga a estudar e ir mais a fundo na estrutura do sistema para conseguir usar. Muita gente usa o Slackware como ferramenta de aprendizado, encarando os problemas e deficincias como um estmulo para aprender. Temos aqui o famoso instalador em modo texto, que usado por todas as verses do Slackware. Ele basicamente o mesmo desde as primeiras verses, recebendo apenas algumas pequenas modificaes de acordo com as mudanas nos componentes includos no sistema:

Assim como quase todas as distribuies atuais, o Slackware comeou como um "remaster" de uma distribuio anterior (o SLS Linux), incluindo diversas modificaes e melhorias. Esta , justamente, a caracterstica mais marcante do desenvolvimento do sistema. Novas distribuies raramente so criadas do zero; quase sempre usada uma distribuio j existente como base, o que permite que os desenvolvedores se concentrem em adicionar novos recursos e corrigir problemas, aumentando radicalmente a velocidade de desenvolvimento de novos projetos. A famlia Red Hat Pouco depois, em novembro de 1994, foi lanado o Red Hat, que foi desenvolvido com o objetivo de facilitar a configurao e tornar o uso do sistema mais transparente, permitindo que ele atingisse um pblico mais abrangente. Apesar de sua alma comercial, todas as ferramentas desenvolvidas pela equipe do Red Hat tinham seu cdigo aberto, o que possibilitou o surgimento de muitas outras distribuies derivadas dele, incluindo o Mandrake (Frana), o Conectiva (Brasil) e o SuSE (Alemanha). O Red Hat foi a primeira distribuio a usar um sistema de gerenciamento de pacotes, onde cada programa includo no sistema transformado em um pacote compactado, que pode ser instalado atravs de um nico comando. O sistema guarda as informaes dos pacotes instalados, permitindo que voc possa remov-los completamente depois (sem deixar restos de bibliotecas e chaves de registro, como no Windows). A ideia surgiu da observao dos processos que envolvem a instalao de aplicativos a partir do cdigo-fonte, onde voc usa os tradicionais comandos "./configure", "make" e "make install". O primeiro comando analisa o sistema e gera a configurao necessria para fazer a instalao; o segundo faz a compilao propriamente dita, enquanto o terceiro finaliza a instalao, copiando os executveis, bibliotecas e arquivos de configurao para as pastas correspondentes do sistema. Ao agrupar todos os arquivos em um nico pacote compactado e descompact-lo no diretrio raiz do sistema, voc tem justamente um sistema rudimentar de pacotes. A partir da, a ideia foi evoluindo at chegar a ferramentas como o yum e o apt-get e repositrios gigantescos que temos hoje em dia. O uso do gerenciamento de pacotes uma das diferenas mais visveis entre o Linux e o Windows: no Windows voc clica no executvel do programa e aberto um instalador; no Linux voc usa o gerenciador de pacotes para instalar os programas que quer usar. Aqui temos o venervel Red Hat 9, lanado em 2003:

A partir de 2003 a Red Hat mudou seu foco, concentrando seus esforos no pblico empresarial, desenvolvendo o Red Hat Enterprise Linux (RHEL) e vendendo pacotes com o sistema, suporte e

3 atualizaes. A consequncia mais marcante da deciso foi a descontinuidade do Red Hat Desktop, que era at ento a distribuio Linux com o maior nmero de usurios. A ltima verso foi o Red Hat 9. A partir da, passou a ser desenvolvido o Fedora, combinando os esforos de parte da equipe da Red Hat e vrios voluntrios que, com a maior abertura, passaram a contribuir com melhorias, documentao e suporte comunitrio nos fruns. O Fedora herdou a maior parte dos usurios do Red Hat Desktop, tornando-se rapidamente uma das distribuies mais usadas. Fedora Core 5, rodando o GNOME Em seguida temos o Mandrake, que comeou de uma forma modesta, como uma verso modificada do Red Hat, lanada em julho de 1998, cuja principal modificao foi a incluso do KDE (ainda na verso 1.0). O KDE e o GNOME so os dois ambientes grficos mais usados no Linux, dividindo a preferncia dos usurios e das distribuies. Ambos rodam sobre o X, usando os recursos oferecidos por ele. O X cuida do acesso placa de vdeo, teclado, mouse e outras funes bsicas, enquanto o KDE ou GNOME cuidam da interface que mostrada a voc. Superando todas as expectativas, o Mandrake conquistou rapidamente um grande nmero de usurios. A partir de um certo ponto, ele passou a ser desenvolvido de forma independente, sempre com o foco na facilidade de uso. Muita gente comeou a usar Linux justamente com o Mandrake 10 e o 10.1: Mandrake 10.1: o primeiro contato com o Linux para muitos O Conectiva foi a primeira distribuio Linux nacional e por muito tempo foi uma das mais usadas por aqui, atendendo tanto usurios domsticos, quanto empresas. Em 2005 aconteceu a fuso entre o Mandrake e o Conectiva, que deu origem ao atual Mandriva, uma evoluo do Mandrake, que passou a ser desenvolvido combinando os esforos das equipes de ambas as distribuies. A histria do SuSE um pouco mais complicada. As primeiras verses foram baseadas no SLS (assim como o Slackware). Em 1995 os scripts e ferramentas foram migrados para o Jurix, que por sua vez era baseado no Slackware. A partir da verso 5.0, lanada em 1998, o SuSE passou a utilizar pacotes RPM, o formato do Red Hat, incorporando a partir da cada vez mais caractersticas e ferramentas derivadas dele. Todas estas ferramentas foram integradas no Yast, um painel de controle central que facilita bastante a administrao do sistema. Devido a todas estas mudanas, o SuSE difcil de catalogar, mas atualmente o sistema possui muito mais semelhanas com o Fedora e com o Mandriva do que com o Slackware; por isso mais acertado coloc-lo dentro da famlia Red Hat. Em 2003 a SuSE foi adquirida pela Novell, dando origem ao Novell Desktop (uma soluo comercial) e ao OpenSUSE, um projeto comunitrio, que usa uma estrutura organizacional inspirada no exemplo do Fedora. Ao contrrio do Ubuntu e mesmo do Mandriva, o OpenSUSE tem uma base de usurios relativamente pequena aqui no Brasil. Parte disto se deve ao fato de, no passado, o SuSE ter sido uma distribuio fortemente comercial. O sistema no era disponibilizado para download e mesmo a compra das caixinhas era complicada, j que no existia uma filial nacional. S com a abertura do sistema depois da compra pela Novel que o OpenSUSE passou a recuperar o terreno perdido.

O Debian Finalmente, temos o Debian, que provavelmente a maior distribuio Linux no-comercial, tanto em volume de desenvolvedores quanto em nmero de usurios, diretos e indiretos. O primeiro anncio pblico do Debian foi feito em agosto de 1993, mas a primeira verso (chamada Buzz) foi finalizada apenas em 1996. A demora se deu devido ao tempo necessrio para

4 desenvolver as ferramentas de gerenciamento de pacotes, as ferramentas de atualizao do sistema e de manuteno dos repositrios e toda a metodologia de desenvolvimento que continua at hoje. O Debian utiliza um sistema de desenvolvimento contnuo, onde so desenvolvidas simultaneamente 3 verses, chamadas de Stable (estvel), Testing (teste) e Unstable(instvel). A verso estvel o release oficial, que tem suporte e atualizaes de segurana frequentes, o atual o Lenny (5.0), lanado em fevereiro de 2009. Antes dele vieram o Etch (4.0), lanado em dezembro de 2006, o Sarge (3.1), lanado em junho de 2005 e o Woody (3.0), lanado em julho de 2002. Atualmente, novas verses estveis do Debian so lanadas a cada 18 meses, sendo que a prxima, batizada de Squeeze, est prevista para o final de 2010. A verso instvel do Debian (chamada Sid) a mais peculiar. Ela uma eterna verso de testes, que no finalizada nunca. Ela serve como um campo de testes para novos programas e novas verses dos pacotes j existentes, permitindo que os problemas sejam detectados e corrigidos. Ao usar o Sid, voc tem acesso s verses mais recentes de todos os programas, mas, em compensao, no existe garantia de estabilidade. Um programa que funciona perfeitamente hoje pode deixar de funcionar amanh e ser novamente corrigido na verso seguinte. Um erro em algum dos pacotes base pode fazer com que o sistema deixe de inicializar depois de atualizado e assim por diante. As verses estveis do Debian so to estveis justamente porque ficam congeladas, recebendo apenas atualizaes de segurana e correes de bugs. Diz a teoria que, se voc continuar corrigindo bugs em um programa, sem adicionar outros no processo, em um determinado momento voc chegar a um programa livre de falhas. O maior problema que, devido ao longo intervalo entre os lanamentos das verses estveis, os pacotes acabam ficando defasados em relao a outras distribuies, que utilizam um ciclo de releases mais curto. Para amenizar o inconveniente, existe a opo de usar o Testing, que uma prvia da prxima verso estvel. Como o Testing uma verso "incompleta", que ainda est em desenvolvimento, normalmente o utilizamos em conjunto com o Unstable, de forma que pacotes que ainda no estejam disponveis no Testing, possam ser instalados a partir dele. Tipicamente, os pacotes comeam no Unstable, onde recebem uma primeira rodada de testes e, depois de algumas semanas, so movidos para o Testing. Periodicamente, os pacotes no Testing so congelados, dando origem a uma nova verso estvel. Alm destes, existe o Experimental, usado como um laboratrio para a incluso de novos pacotes. Knoppix e os live-CDs O Debian em si bastante espartano em termos de ferramentas de configurao e por isso mais popular em servidores do que em desktops. Entretanto, por oferecer um repositrio de pacotes incrivelmente completo, o Debian usado como base para o desenvolvimento de inmeras outras distribuies, que combinam os pacotes dos repositrios do Debian com personalizaes, scripts e componentes adicionais, de forma a atingirem nichos especficos. Um exemplo de destaque o Knoppix, cuja verso 3.0 (a primeira a ganhar notoriedade) foi lanada em julho de 2002. O Knoppix acabou se tornando um marco dentro da histria doLinux por dois motivos. O primeiro que ele foi a primeira distribuio Linux live-CD realmente utilizvel, oferecendo um bom desempenho e um excelente script de autoconfigurao, que detectava o hardware da mquina durante o boot, gerando os arquivos de configurao de forma automtica e entregando um sistema funcional no final do processo. Distribuies live-CD anteriores, como o DemoLinux, eram muito mais lentas, limitadas e imprticas de usar. O segundo motivo, e talvez o mais importante, era a possibilidade de remasterizar o CD, gerando uma distribuio personalizada. Graas a isso, o Knoppix deu origem a um enorme nmero de novas distribuies, como o Kanotix (que deu origem ao atual Sidux), o Morphix (que, devido sua

5 arquitetura modular, ajudou a criar toda uma nova famlia de distribuies) e o Kurumin, que desenvolvi de 2003 a 2008. Um live-CD , em poucas palavras, uma verso pr-instalada do sistema, que utiliza um conjunto de truques para rodar diretamente a partir do CD-ROM. Tradicionalmente, qualquersistema operacional precisa ser instalado no HD antes de ser usado. Voc d boot usando o CD ou DVD de instalao e aberto um instalador (que, por sua vez, roda sobre algum sistema minimalista), que se encarrega de instalar e configurar o sistema principal. Depois de algum tempo respondendo perguntas e vendo a barra de progresso da cpia dos arquivos, voc reinicia o micro e pode finalmente comear a usar o sistema. Isso vlido tanto para o Windows quanto para a maior parte das distribuies Linux. Para quem j se acostumou com a ideia, pode parecer natural rodar o sistema a partir do CD e at mesmo instalar novos programas sem precisar modificar as informaes salvas no HD, mas, em 2002, quando o Knoppix comeou a ganhar popularidade, a ideia de rodar uma distribuio Linux completa a partir do CD-ROM era considerada extica. Muitas pessoas s acreditavam depois de desconectar o cabo flat do HD e ver que o sistema realmente dava boot apenas com o CD-ROM. :o Apesar de receberam crticas por parte de alguns puristas, os live-CDs cresceram rapidamente em popularidade. O Ubuntu passou a ser um live-CD instalvel a partir da verso 6.06, o Mandriva aderiu ideia com o Mandriva Discovery (que foi sucedido pelo atual Mandriva One) e at mesmo o Fedora ganhou uma verso live-CD, o Fedora Live, sem contar o gigantesco volume de distribuies baseadas neles. Apesar do incio tmido, os live-CDs dominaram o mundo. A base de tudo um mdulo de kernel chamado SquashFS (nas primeiras verses do Knoppix era usado o cloop, baseado no mesmo princpio), um hack que permite que o sistema rode a partir de um sistema de arquivos compactado, gravado no CD-ROM. Os dados sodescompactados "on-thefly", conforme so necessrios. O uso da compresso oferece duas vantagens: permitir que o sistema fique muito menor (colocando at 2 GB de dados em um CD-ROM de 700 MB) e melhorar o desempenho do sistema, aumentando a taxa de transferncia efetiva do CD-ROM. A ideia que um CD-ROM de 52x capaz de ler a, em mdia, 5.8 MB/s, pois como o CD gira sempre na mesma velocidade, as informaes gravadas nas trilhas da parte externa do CD (mais longas) so lidas a mais ou menos o dobro da velocidade das do centro (que so mais curtas). Um CD-ROM de 52x l a 7.8 MB/s nas trilhas externas mas a apenas 3.9 MB/s nas internas. Como o CD-ROM gravado a partir do centro, na maior parte do tempo ele l os dados a 5 ou 6 MB/s. No entanto, ao ler 5 MB/s de dados compactados a uma razo de 3x, ele estar lendo, na prtica, a quase 15 MB/s, um valor muito mais prximo taxa de transferncia oferecida por um HD. Naturalmente, ainda existem outros problemas, como o tempo de busca (que muito mais alto em um CD-ROM), mas o problema principal amenizado. Se no fosse o sistema de compresso, os live-CDs seriam trs vezes maiores e trs vezes mais lentos ao rodar a partir do CD, deficincias que os tornariam sistemas muito menos atrativos. Em contrapartida, a compresso faz com que o trabalho do processador passe a ser maior, pois, alm de processar os dados referentes aos programas, ele tem que, ao mesmo tempo, descompactar os dados lidos pelo CD-ROM. Por isso, mais do que em distribuies instaladas, o desempenho aumenta de acordo com o poder de processamento da mquina. Voltando ao Knoppix, a primeira etapa do boot uma tela de boas-vindas, contendo uma linha de opes onde voc pode fornecer parmetros para o boot. Logo depois carregado o kernel, que por sua vez inicializa o hardware, cria um ramdisk usando uma parte (pequena) da memria RAM, onde so armazenados arquivos de configurao e outros dados que precisam ser alterados durante o uso. Depois disso, entra em ao o hwsetup, o programa de deteco que, junto com um conjunto de outros scripts, se encarrega de detectar a placa de vdeo, som, rede, modem e outros perifricos suportados, exibindo mensagens que ajudam a identificar a configurao da mquina e saber de

6 antemo detalhes como o processador, quantidade de memria RAM e placa de vdeo instalada (imagine o caso de um tcnico que instala o sistema em vrios micros diferentes, por exemplo): Mensagens de boot no Knoppix, mostrando detalhes sobre a mquina Como comentei, as primeiras distribuies live-CD utilizavam um ramdisk para armazenar arquivos de configurao, o diretrio home e outros arquivos do sistema que precisam ser alterados durante sua execuo. Entretanto, a maior parte dos arquivos do sistema eram acessados diretamente a partir do CD-ROM, de forma que voc no podia instalar novos programas, nem fazer alteraes em componentes do sistema enquanto ele estivesse rodando a partir do CD, devido limitao bvia de que o CD-ROM uma mdia somente-leitura. O soluo para esta ltima barreira veio com o UnionFS, que passou a ser usado em larga escala a partir de 2005. O UnionFS funciona de uma forma bastante engenhosa; uma daquelas idias aparentemente simples, que resolvem problemas complexos. O UnionFS permite juntar dois (ou mais) diretrios em um, estabelecendo uma hierarquia entre eles. O "Union" vem justamente de "unio". Temos ento o arquivo compactado do CD em um nvel hierrquico mais baixo, montado em modo somente-leitura e um ramdisk, que originalmente est quase vazio, mas que vai armazenando todas as alteraes. Os dois so montados em uma nica pasta, que contm o contedo do arquivo compactado e do ramdisk. Na hora de ler um arquivo, o sistema verifica se existe uma verso mais recente armazenada no ramdisk, caso contrrio l no arquivo principal. Na hora de gravar, as alteraes so sempre armazenadas no ramdisk, de forma automtica e transparente. No final, voc acaba podendo instalar programas via apt-get e fazer qualquer tipo de alterao no sistema, praticamente da mesma forma como faria se ele estivesse instalado. Naturalmente, todas as alteraes so salvas na memria RAM, de maneira que, para realmente instalar um volume significativo de novos pacotes ou manipular grandes arquivos, voc precisa ter um PC com pelo menos 1 GB de memria RAM. Em micros com pouca RAM voc ver uma mensagem de "disco cheio" (quando na verdade o que acabou foi o espao no ramdisk) ou at mesmo efeitos diversos por falta de memria disponvel. O UnionFS (juntamente com o AUFS, que seu sucessor) usado por padro em quase todas as distribuies live-CD atuais, incluindo o Ubuntu Desktop. Isso permite que voc teste novos programas (ou at mesmo configure servidores como o Samba e o Squid) com o sistema rodando a partir do CD-ROM, sem qualquer alterao nos arquivos do HD. Isso permite uma liberdade muito grande para fuar e brincar com o sistema, j que, em caso de problemas, basta reiniciar o micro e comear de novo. O Ubuntu Tambm derivado do Debian, o Ubuntu provavelmente a distribuio Linux mais usada atualmente. Ele desenvolvido pela Ubuntu Foundation, uma organizao sem fins lucrativos, que por sua vez patrocinada pela Canonical Inc., que ganha dinheiro vendendo suporte, treinamentos e customizaes do Ubuntu. Esta combinao de ONG e empresa tem dado muito certo, combinando os esforos de um sem-nmero de voluntrios e um grupo de desenvolvedores bem pagos que trabalham em tempo integral no desenvolvimento do sistema. Ao invs do tradicional 1.0, 2.0, 3.0, etc., o Ubuntu usa um sistema de numerao das verses bastante incomum. Os releases so numerados com base no ms e ano em que so lanados e recebem um codinome. A primeira verso oficial foi o Ubuntu 4.10 (lanado em outubro de 2004), apelidado de "Warty Warthog", seguido pelo 5.04 (lanado em abril de 2005), apelidado de "Hoary Hedgehog" e pelo 5.10 (outubro de 2005), batizado de "Breezy Badger". Os prximos foram o 6.06 (Dapper Drake), 6.10 (Edgy Eft), 7.04 (Feisty Fawn), 7.10 (Gutsy Gibbon), 8.04 (Hardy Heron), o 8.10 (Intrepid Ibex) e o 9.04 (Jaunty Jackalope).

7 As verses regulares do Ubuntu recebem atualizaes e correes durante um perodo de 18 meses, de forma que voc acaba sendo obrigado a atualizar o sistema a cada trs verses. Como uma opo para quem quer mais estabilidade e deseja manter o sistema por mais tempo (sem precisar sair correndo para atualiz-lo a cada 6 meses), existem as verses LTS(long term support), que recebem atualizaes por um perodo de 3 anos (5 anos no caso dosservidores). Elas so as verses recomendveis para estaes de trabalho e para uso em empresas. As verses LTS so montadas dentro de um controle de qualidade mais estrito e passam por um perodo de testes mais longo, resultando em releases mais estveis. A primeira verso LTS foi o Ubuntu 6.06 (que receber atualizaes at junho de 2009), seguido pelo 8.04 (atualizaes at abril de 2011). Se os planos no mudarem, a prxima verso LTS ser o 10.04, planejado para abril de 2010. Nas primeiras verses, o Ubuntu era fornecido em duas verses diferentes. O "Live CD" (que rodava diretamente a partir do CD-ROM) e o "Install CD", a verso principal, que era instalada atravs de um instalador em modo texto, derivado do instalador do Debian Sarge:

A partir do 6.10 as duas verses foram unificadas. O sistema passou a ser um Live-CD (chamado de "Desktop Edition"), que pode ser instalado diretamente. O maior problema com o Desktop Edition que o boot do sistema demorado e ele fica muito lento em mquinas com menos de 512 MB de RAM. Para quem usa mquinas antigas, ou prefere instalar o sistema diretamente, sem primeiro esperar o carregamento do desktop, est disponvel o "Alternate CD", que inclui os mesmos pacotes, mas instalado atravs do instalador em modo texto. Apesar de ser distribudo em um nico CD, o Ubuntu utiliza um repositrio bastante completo. Ao instalar o sistema, voc tem um desktop pr-configurado, contendo um conjunto bsico de aplicativos, que voc pode personalizar instalando pacotes adicionais. Os repositrios do Ubuntu so construdos a partir do repositrio unstable do Debian, processo no qual os pacotes recebem correes diversas e so recompilados, gerando o repositrio "Universe". O Ubuntu deu origem a diversas distribuies, como o Kubuntu (baseado no KDE), o Xubuntu(baseado no XFCE) e assim por diante, que compartilham o mesmo repositrio, mas so baseadas em conjuntos diferentes de pacotes. Est disponvel tambm o "Server Edition", uma verso destinada a servidores, que baseada no mesmo repositrio, mas instala apenas os componentes bsicos do sistema, criando uma instalao enxuta, qual voc pode adicionar apenas os servios e os componentes desejados. Juntando as peas Em resumo, podemos classificar as distribuies Linux em trs grandes famlias: as derivadas do Red Hat, como o Fedora e o Mandriva, as derivadas do Debian, como o Ubuntu e o Kubuntu e as derivadas do Slackware, como o Slax. Apesar das diferenas estticas, distribuies da mesma famlia so muito similares na organizao dos arquivos, gerenciamento de pacotes, localizao dos arquivos de configurao e assim por diante, de forma que mais fcil para algum acostumado com o Debian migrar para o Ubuntu, que faz parte da mesma famlia, do que migrar para o Fedora, por exemplo, que tem razes completamente diferentes. Voc pode ver uma tabela mais completa com as origens de cada distribuio neste link do Distrowatch: http://distrowatch.com/dwres.php?resource=independence Entre as distribuies nacionais, temos o DreamLinux (baseado no Debian), o Big Linux (baseado no Ubuntu) e o GoblinX (baseado no Slackware). Como comentei na introduo, existem mais de 500 distribuies Linux sendo desenvolvidas ativamente. Se incluirmos tambm as descontinuadas, o nmero sobe para mais de 2.000.

8 Basicamente, qualquer pessoa ou empresa com tempo e conhecimentos suficientes pode desenvolver uma distribuio, usando outra j existente como ponto de partida. O enorme volume de distribuies ao mesmo tempo o principal defeito e o principal atrativo do Linux. Defeito no sentido de que a falta de um sistema "padro" (como no caso doWindows) gera confuso e retarda a adoo do sistema em muitos nichos; e, atrativo, no sentido de que justamente o grande nmero de distribuies e o processo de seleo natural que ocorre entre elas, que faz com que o sistema evolua to rapidamente e seja capaz de se adaptar a ambientes to diferentes. Gentoo, BSD e Solaris Voc pode estar se perguntando em qual das famlias se encaixa o Gentoo, que outra distribuio bastante comentada. A resposta que ele no se encaixa em nenhuma. O Gentoo inaugurou uma nova linhagem, trazendo uma abordagem diferente das demais distribuies para a questo da instalao de programas e da prpria instalao do sistema. Tradicionalmente, novos programas so instalados atravs de pacotes pr-compilados, que so, basicamente, arquivos compactados, contendo os executveis, bibliotecas e arquivos de configurao usados pelo programa. Estes pacotes so gerenciados pelo apt-get, urpmi, yum ou outro gerenciador de pacotes adotado pela distribuio em uso. Compilar programas a partir dos fontes passa a ser ento um ltimo recurso para instalar programas recentes, que ainda no possuem pacotes disponveis. O Gentoo utiliza o Portage, um gerenciador de pacotes que segue a ideia dos ports do FreeBSD, que outro sistema Unix, similar ao Linux em diversos aspectos. Os pacotes no contm binrios, mas sim o cdigo-fonte do programa, junto com um arquivo de configurao, contendo parmetros que so usados na compilao. Voc pode ativar as otimizaes que quiser, mas o processo de compilao e instalao automtico. Voc pode instalar todo o KDE, por exemplo, com um "emerge kde". O Portage baixa os pacotes com os fontes (de forma similar ao apt-get), compila e instala. O ponto positivo desta abordagem que voc pode compilar todo o sistema com otimizaes para o processador usado na sua mquina. Isso resulta em ganhos de 2 a 3% na maior parte dos programas, mas pode chegar a 30% em alguns aplicativos especficos. A parte ruim, que compilar programas grandes demora um bocado, mesmo em mquinas atuais. Instalar um sistema completo, com o X, o KDE e o OpenOffice, demora uma tarde inteira em um Athlon X2 e pode tomar um final de semana em uma mquina mais antiga. Voc pode usar o Portage tambm para atualizar todo sistema, usando os comandos "emerge sync && emerge -u world" de forma similar ao "apt-get upgrade" do Debian. Nas verses atuais do Gentoo, voc pode escolher entre diferentes modos de instalao. No stage 1 tudo compilado a partir dos fontes, incluindo o kernel e as bibliotecas bsicas. No stage 2 instalado um sistema base pr-compilado e apenas os aplicativos so compilados. No stage 3 o sistema inteiro instalado a partir de pacotes pr-compilados, de forma similar a outras distribuies. A nica exceo fica por conta do kernel, que sempre precisa ser compilado localmente, mesmo ao usar o stage 2 ou 3. Entre eles, o stage 1 naturalmente a instalao mais demorada, mas onde voc pode ativar otimizaes para todos os componentes do sistema. Existe um conjunto crescente de distribuies baseadas no Gentoo, como vrios live-CDs, com games e verses modificadas do sistema, alguns desenvolvidos pela equipe oficial, outros por colaboradores. Uma das primeiras distribuies a utilizar o Gentoo como base foi o Vidalinux, mas entre as derivaes atuais a mais popular o Sabayon (www.sabayonlinux.org). Embora seja uma das distribuies mais difceis, cuja instalao envolve mais trabalho manual, o Gentoo consegue ser popular entre os usurios avanados, o que acabou por criar uma grande comunidade de colaboradores em torno do projeto. Isto faz com que o Portage oferea um conjunto muito grande de pacotes, quase tantos quanto no apt-get do Debian, incluindo drivers para placas nVidia e ATI (entre outros drivers proprietrios) e exista uma grande quantidade de documentao

9 disponvel, com destaque para o Gentoo-Wiki, que inclui inmeras dicas e receitas que podem ser teis tambm em outras distribuies, sobretudo ao tentar configurar algum perifrico problemtico: http://www.gentoo-wiki.com Concluindo, alm do Linux, existem outros sistemas Unix open-source, entre os quais se destacam o FreeBSD, o OpenBSD, o NetBSD e o OpenSolaris. Embora o kernel e alguns dos utilitrios bsicos do sistema sejam diferentes, os softwares usados (tais como o KDE, GNOME, OpenOffice e assim por diante) so basicamente os mesmos, o que torna os sistemas muito similares. Temos aqui, por exemplo, um screenshot do OpenSolaris, rodando o GNOME:

Se fosse feito um teste cego com uma instalao do FreeBSD ou do OpenSolaris, configurados com o GNOME e outros softwares, a maioria dos usurios pensaria se tratar de apenas mais uma distribuio Linux. Um bom exemplo o PC-BSD (http://www.pcbsd.org), uma distribuio do FreeBSD baseada no KDE, que tem como objetivo ser um sistema fcil de usar. Por bizarro que possa parecer, possvel rodar o KDE e outros aplicativos at mesmo sobre o Windows, substituindo a interface e os aplicativos padro. o tipo de exerccio que no tem muita utilidade prtica, j que se a ideia usar o KDE, muito mais fcil simplesmente baixar uma distribuio Linux que j venha com ele pr-instalado, como o Mandriva One, mas isso mostra at que ponto vai a criatividade dos desenvolvedores. :) A questo dos aplicativos Por mais importante que seja, o sistema operacional , na verdade, apenas um palco que serve como base para os atores principais, que so os aplicativos. Embora muito se discuta sobre as diferenas entre o Windows, o Mac OS X e o Linux, e as vantagens de cada um, no final das contas os argumentos mais efetivos a favor ou contra uma determinada plataforma se concentram nos aplicativos para ela. Sem aplicativos, o sistema operacional no passa de um conjunto de drivers e bibliotecas, sem qualquer utilidade. Ningum usaria o Linux se no existissem bons programas disponveis para ele. A instalao de novos programas no Linux no to complicada quanto pode parecer primeira vista. Pelo contrrio, muitas vezes at mais simples que no Windows, pois raramente voc precisar perder tempo comprando e registrando o programa, retirando banners de propaganda, desativando spywares e coisas do gnero. No Linux, temos uma predominncia de aplicativos open-source, enquanto no Windows temos uma predominncia de programas proprietrios. O fato de um programa ter o cdigo aberto no significa necessariamente que ele seja gratuito, mas a grande maioria . O nico custo relacionado a usar o Gimp, por exemplo, o "custo" de baixar ou copiar o programa. A princpio, pode parecer lgico que os programas proprietrios tenham uma qualidade melhor, j que eles so desenvolvidos por equipes de programadores profissionais, que so pagos para trabalhar em tempo integral no software. Mas, na realidade, no bem assim. De uma forma geral, programas proprietrios tendem a ser melhores em nichos e em reas especializadas; um exemplo o AutoCAD, que at hoje no tem um concorrente aberto altura. Isso acontece porque estes programas de nicho so usados por uma fatia pequena dos usurios (o AutoCAD usado apenas por engenheiros e assim por diante), que acaba no sendo suficiente para despertar o interesse de um grupo suficientemente grande de desenvolvedores. Por outro lado, para programas de uso geral temos um cenrio oposto. A base de usurios muito grande e por isso os projetos prosperam, muitas vezes superando os aplicativos comerciais em qualidade. Veja o caso do Firefox x Internet Explorer, por exemplo. Outro ponto a favor dos aplicativos abertos o reaproveitamento de cdigo. Um desenvolvedor pode comear do ponto onde um projeto anterior parou, trabalhando diretamente nos recursos que deseja adicionar, ao invs de ter que comear do zero. No mundo proprietrio tudo mais complicado, envolvendo licenciamento de componentes e assim por diante.

10 A grande oferta de aplicativos abertos acaba sendo uma grande vantagem do Linux, pois as distribuies j vm com um grande nmero de programas pr-instalados e voc pode instalar outros sem custo. No Windows, as coisas funcionam de maneira bem diferente: o sistema inclui apenas alguns aplicativos bsicos e, depois de instal-lo, voc precisa adquirir softwares de terceiros para realizar tarefas mais elaboradas. A chance de a prxima verso do Windows j vir com o Photoshop e o CorelDraw, por exemplo, muito remota. Isso faz com que muitos usurios (possivelmente a maioria) acabem recorrendo pirataria, o que acaba gerando outros problemas. Mesmo deixando todo o aspecto legal e moral de lado, baixar e instalar programas piratas tambm tem seus desafios, j que necessrio procurar um crack, remover vrus e trojans antes de instalar e assim por diante. No caso do Linux, a instalao acaba sendo mais simples, j que voc precisa apenas abrir o gerenciador de pacotes e instalar o aplicativo desejado. A grande dificuldade no est na instalao propriamente dita, mas sim na dificuldade em encontrar softwares que substituam os que voc utiliza no dia a dia. Conforme voc se familiariza com um sistema, voc constri uma base mental de conhecimento, com aplicativos e solues para problemas. Quando voc quer editar imagens voc usa o aplicativo X, quando quer baixar um arquivo via bittorrent usa o aplicativo Y, quando tem um problema com o som voc faz Z e assim por diante. Quando voc resolve mudar para outra plataforma, grande parte dessa biblioteca mental perdida, pois as dicas no se aplicam mais ao outro sistema. Isso faz com que a mudana acabe sendo muito mais penosa do que uma simples mudana de interface, j que voc precisar substituir cada um dos aplicativos que utilizava na outra plataforma e lidar com um conjunto diferente de problemas. Isso no se aplica apenas ao migrar do Windows pra o Linux (ou vice-versa), mas tambm, embora em menor grau, ao migrar de uma distribuio Linux para outra. Um bom indicativo disso que, de uma forma geral, os usurios que encontram menos dificuldades em migrar do Windows para o Linux so justamente os mais iniciantes, que usam menos funes do sistema (muitas vezes apenas o navegador e o player de mdia) e que, por isso, no encontram dificuldades em substitu-los. No outro extremo, temos os usurios mais tarimbados, que, por estranho que possa parecer, so justamente os que encontram mais dificuldades, j que, por possurem uma "biblioteca mental" maior, acabam tendo que encontrar substitutos para um volume muito maior de funes. Nesse processo importante mudar um pouco a mentalidade, no procurar programas "iguais" aos usados no Windows, mas sim pensar nas tarefas que voc deseja realizar e procurar programas que ofeream um conjunto de recursos o mais prximo possvel do que voc precisa. O Office pode ser substitudo pelo OpenOffice, o Photoshop pelo Gimp, o Corel pelo Inkscape, o IE pelo Firefox, o MSN pelo Pidgin ou pelo Kopete, o Outlook pelo Evolution, o Media Player pelo Totem, VLC, Mplayer ou Kaffeine, o Nero pelo K3B, o iTunes pelo Amarok e assim por diante. importante enfatizar que no mundo Linux tambm existem aplicativos proprietrios e aplicativos comercias. Alguns exemplos so o VMware, o Acrobat Reader, o Cedega, o Skype e jogos como o Quake 4 e Doom 3, que possuem verso Linux. Tambm possvel rodar alguns aplicativos Windows atravs do Wine, mas quase sempre com pequenas falhas ou limitaes diversas. Outra opo usar uma mquina virtual, utilizando o VirtualBox ou o VMware para rodar uma cpia completa do Windows, instalando os aplicativos desejados sobre ela. Muito se fala sobre o avano dos sistemas de virtualizao e dos aplicativos web. Dois bons exemplos disso so os webmails, que eliminaram quase que inteiramente o uso de leitores de email dedicados, e o assustador crescimento do uso de virtualizao em servidores, com destaque para o Cloud Computing (computao em nuvem). Ele nada mais do que a combinao de duas idias antigas: o uso de clusters (vrios computadores interligados em rede, trabalhando como se fossem apenas um) e o uso de virtualizao, para que este "super-servidor" rode vrias mquinas virtuais, cada uma funcionando

11 como se fosse um servidor separado. Estes servidores virtuais armazenam as informaes e fazem todo o processamento, permitindo que os aplicativos rodem dentro do navegador, como no caso do Gmail e tantos outros web-apps. Estas duas tecnologias eventualmente eliminaro o problema das diferenas entre plataformas, j que voc poder rodar qualquer software em qualquer computador, dentro do navegador ou em uma mquina virtual. Entretanto, esta uma mudana que ainda vai demorar um pouco para ocorrer, de maneira que os aplicativos locais continuam em voga. Pacotes e instaladores Chegamos ento questo da instalao de programas, que outro tema de dvidas. Para quem est chegando agora, a instalao de aplicativos no linux pode parecer algo incompreensvel, uma vez que existem muitos procedimentos diferentes. De acordo com o aplicativo e a distribuio em uso, o procedimento pode ser incrivelmente simples, como abrir um gerenciador de programas e clicar no aplicativo desejado, ou incrivelmente complicado, envolvendo o download de compiladores, edio de arquivos de texto e comandos manuais. Vamos ento a uma tentativa de colocar ordem na casa. No comeo, existia o cdigo-fonte. Voc baixava um pacote .tar.gz, contendo o cdigo-fonte do programa, e a instalao consistia em compilar e instalar os executveis gerados na sua mquina. Esta forma de instalao faz sentido em se tratando de aplicativos abertos, pois permite que voc veja e at mesmo adapte o cdigo-fonte se necessrio. Em muitos casos, possvel instalar o programa em outro sistema operacional (a maior parte dos programas do Linux podem ser instalados no BSD, com pequenas adaptaes) ou at mesmo em outras plataformas. O problema que instalar programas a partir dos fontes demorado e nem sempre simples, j que voc precisa ter instalado uma grande quantidade de compiladores e bibliotecas, necessrios para compilar os mais diversos programas. Existem incontveis pequenas bibliotecas e ferramentas de desenvolvimento por a e no muito vivel tentar manter todas elas instaladas. Compilar significa transformar o cdigo-fonte, escrito pelo programador, nos arquivos binrios que so executados pelo sistema. Ao compilar um programa, so gerados vrios executveis, bibliotecas e arquivos de configurao, que so copiados para pastas especficas do sistema. Os executveis vo para a pasta "/usr/bin", as bibliotecas para a "/usr/lib", os arquivos de configurao para a "/etc" e assim por diante. Algum chegou, ento, a uma concluso bvia: ao invs de cada um ter o trabalho de compilar o programa na sua prpria mquina, seria mais simples se algum compilasse e distribusse um arquivo pronto, com os componentes j compilados, em um formato simples de instalar. Nasceram, ento, os pacotes pr-compilados. Os pacotes surgiram a partir de uma ideia muito simples. Voc cria um arquivo compactado contendo a mesma estrutura de pastas e arquivos que seria criada ao instalar o programa manualmente. Ao instalar o pacote, os arquivos so descompactados no diretrio raiz, fazendo com que todos os arquivos sejam colocados nos diretrios corretos. Ao desinstalar o pacote, os arquivos so removidos, deixando o sistema como estava inicialmente, uma forma rpida e limpa de instalar programas. Existem basicamente trs formatos de pacotes diferentes: os pacotes .deb, usados pelas distribuies derivadas do Debian (incluindo o Ubuntu, o Kubuntu e todas as inmeras distribuies baseadas neles), os pacotes .rpm, usados pelas distribuies derivadas do Red Hat (Fedora, Mandriva e outros) e os pacotes .tgz, usados pelo Slackware e derivados. No existe nada de fundamentalmente diferente entre os trs formatos, e inclusive possvel transformar um pacote .rpm em um pacote .deb, usando utilitrios como o alien. Entretanto, devido s diferenas que existem entre uma distribuio e outra, no existe garantia de que um pacote do Fedora funcionar no Debian, por exemplo.

12 O prximo passo foi a criao dos gerenciadores de pacotes, programas que permitem baixar e instalar novos programas de forma automtica, verificando as dependncias e, caso necessrio, baixando outros programas e bibliotecas de que o programa inicial precisa. O primeiro gerenciador que vem mente o apt-get, que usado em um nmero assustador de distribuies. Para instalar o "pidgin", por exemplo, voc precisaria apenas usar o: # apt-get install pidgin Existem ainda gerenciadores grficos, como o Synaptic, que tornam a tarefa ainda mais amigvel. Alm do apt-get, outros exemplos de gerenciadores so o urpmi, usado no Mandriva, o yum, usado no Fedora e o zypper, usado no OpenSUSE. Voc pode se perguntar por que no fazem como no Windows, onde cada programa tem seu instalador. Na verdade, muitos programas so distribudos desta forma, como o Java, OpenOffice, Firefox, Thunderbird, VMware e diversos games. Nestes casos, voc simplesmente executa o arquivo e o instalador se encarrega do resto da instalao. O inconveniente que estes pacotes so desenvolvidos para funcionarem em qualquer distribuio, por isso incluem todo tipo de bibliotecas e mdulos de que o programa possa precisar, sem reaproveitar os componentes que voc j tem instalados. Isso faz com que os pacotes sejam prticos de instalar, mas, em compensao, bem maiores (e mais pesados), assim como muitos dos programas do Windows. Outra dificuldade que no existe no Linux uma biblioteca grfica padro, que esteja disponvel em qualquer distribuio. Ao usar um instalador grfico que utilize a biblioteca Qt (do KDE), por exemplo, usurios do Ubuntu e de outras distribuies onde ela no vem pr-instalada precisaro instalar um conjunto de pacotes adicionais antes de conseguirem abrir o instalador. Se usar um instalador baseado na biblioteca GTK, os usurios de distribuies baseadas no KDE (onde o GTK geralmente no vem pr-instalado) que tero dificuldades, e assim por diante. Devido a isso, aplicativos comerciais como o VMware e tambm alguns drivers (como os drivers 3D da nVidia) utilizam instaladores em texto puro, de forma a poderem ser instalados sem dificuldades em qualquer distribuio. Naturalmente, existem excees, como no caso dos jogos que utilizam o instalador grfico desenvolvido pela Loki, como o Quake 3, Unreal, Medal of Honour e outros. Caso esteja curioso, voc pode baixar os instaladores e demos de muitos jogos portados no http://darkstar.ist.utl.pt/pub/games/:

Estes instaladores quase sempre usam a extenso ".sh" e so fceis de instalar, j que basta executar o arquivo no terminal para iniciar a instalao. Ao baixar o arquivo, ele sempre vir com a permisso de execuo desmarcada, uma medida de segurana para prevenir acidentes com possveis arquivos infectados com vrus e trojans. Apesar de parecer perda de tempo, esta uma das medidas que mais contribui para a segurana geral do sistema em um desktop, pois voc no corre o risco de executar um arquivo simplesmente por clicar por acidente em um link no navegador ou no leitor de e-mails: precisa realmente salv-lo no HD, marcar a permisso de execuo e finalmente execut-lo. Um vrus que se propagasse via email encontraria um terreno muito menos frtil no Linux. Para ativar a permisso de execuo, use o comando "chmod +x", como em: # chmod +x mohaa-lnx-1.11-beta3.run

13 Muitos instaladores podem ser executados diretamente com seu login de usurio, desde que voc instale o programa em uma pasta dentro do seu diretrio home. Outros realmente precisam ser executados como root. Voc pode executar o programa diretamente pelo gerenciador de arquivos, clicando sobre ele, ou pelo terminal, usando o "./", como em "./mohaa-lnx-1.11-beta3.run". Em resumo, podemos dizer que existem trs formas de instalar programas no Linux: 1- Usar o apt-get ou outro gerenciador para instalar pacotes prprios da distribuio em uso. Esta a forma mais simples e menos passvel de problemas, que voc deve usar sempre que possvel. 2- Programas com instaladores prprios, destinados a funcionar em vrias distribuies. Eles tambm so simples de instalar, mas no to simples quanto usar o apt-get. Muitos aplicativos proprietrios so distribudos apenas desta forma, como o VMware. 3- Instalar o programa a partir do cdigo-fonte, o que pode ser necessrio no caso de aplicativos pouco comuns, que no estejam disponveis de outra forma, e tambm no caso de muitos drivers, onde necessrio gerar um mdulo personalizado para o kernel em uso. Entendendo o sistema Os primeiros sistemas Unix foram desenvolvidos na dcada de 1970, com o objetivo de serem robustos, simples e utilizarem pouca memria, de forma a rodarem com um bom desempenho nos computadores limitados da poca. O grande objetivo era reduzir o uso de memria e aproveitar ao mximo os recursos da mquina, e no a facilidade de uso. Na poca, o simples fato de ter um sistema operacional, por mais complicado que fosse, j era um enorme avano sobre os primeiros computadores, onde os programas eram escritos com papel e lpis e depois gravados em cartes perfurados, para s ento poderem ser executados. :O O Linux conserva muitas das caractersticas dos sistemas Unix originais. Para quem vem do Windows, a organizao das pastas, a instalao de novos programas e o uso dos arquivos de configurao parece algo esotrico, mas no fundo as coisas no so to complicadas assim. Vamos ento a um resumo dos componentes que compem o sistema: O Kernel Hoje em dia, quando falamos em "Linux", estamos normalmente nos referindo plataforma como um todo, incluindo as diferentes distribuies e softwares. Mas, no incio, o Linux era apenas o kernel desenvolvido pelo Linus Torvalds. Mesmo hoje em dia, alguns puristas ainda insistem na ideia de que o "Linux" apenas o kernel e todos os outros componentes so softwares que rodam sobre ele. O principal argumento a favor dessa ideia que outros sistemas Unix, como o FreeBSD e o OpenSolaris, so baseados em outros kernels (e so por isso considerados sistemas diferentes) mas, apesar disso, rodam o X, KDE, Firefox e outros softwares, assim como no caso das distribuies Linux. De qualquer forma, a ideia de usar o termo Linux para a plataforma como um todo bem mais simples e natural, por isso adoto esta terminologia no livro. O kernel a pea fundamental do sistema, responsvel por prover a infra-estrutura bsica necessria para que os programas funcionem, alm de ser o responsvel por dar suporte aos mais diferentes perifricos: placas de rede, som e o que mais voc tiver espetado no micro. Essa justamente uma das principais diferenas entre o Windows e as distribuies Linux. No Windows, o sistema inclui um conjunto relativamente pequeno de drivers e voc depende dos CDs de instalao e dos drivers disponibilizados pelos fabricantes. No Linux, quase todos os drivers disponveis so incorporados diretamente no kernel e j vm pr-instalados nas distribuies. Isso faz com que os perifricos suportados sejam detectados automaticamente. Isso faz com que a importncia de usar uma distribuio atual seja muito maior, j que uma distribuio antiga ou desatualizada incluir no apenas softwares antigos, mas tambm um conjunto desatualizado de drivers, que faro com que muitos componentes do PC no sejam reconhecidos.

14 Comeando do incio, se voc der uma olhada dentro da pasta "/boot" de qualquer distribuio Linux, vai encontrar o executvel do kernel no meio de um pequeno conjunto de arquivos. Ele o primeiro componente carregado pelo gerenciador de boot durante a inicializao do sistema:

Voc deve estar se perguntando por que o arquivo se chama "vmlinuz" e no "vmlinux", como seria mais lgico. Na verdade, esta uma longa histria, mas, em resumo, o "z" no nome usado porque o arquivo do kernel guardado no HD na forma de um arquivo compactado. Nas primeiras distribuies Linux, todos os drivers e outros componentes eram compilados diretamente nesse arquivo principal, e voc podia escolher os componentes a ativar na hora de compilar o kernel. Se voc habilitasse tudo, no teria problemas com nenhum dispositivo suportado, tudo iria funcionar facilmente, mas, por outro lado, voc teria um kernel gigantesco, que rodaria muito devagar no seu 486 com 8 MB de RAM. Se, por outro lado, voc compilasse um kernel enxuto e esquecesse de habilitar o suporte a algum recurso necessrio, teria que recompilar tudo de novo para ativ-lo. Como resultado disso, as distribuies passaram a incluir diversas opes de kernel, compiladas com configuraes diferentes. Voc tinha ento que escolher qual usar, de acordo com os componentes do micro. Este problema foi resolvido durante o desenvolvimento do kernel 2.0, atravs do suporte a mdulos. Os mdulos so peas independentes que podem ser ativadas ou desativadas com osistema em uso. Do kernel 2.2 (lanado em 1999) em diante, quase tudo pode ser compilado como mdulo, o que tornou as coisas muito mais prticas e abriu as portas para os sistemas de deteco automtica de hardware que so usados nas distribuies atuais. Os mdulos nada mais so do que arquivos, que so armazenados dentro da pasta "/lib/modules/verso_do_kernel". Veja que os mdulos ficam organizados em pastas: a pasta "kernel/drivers/net/" contm drivers para placas de rede, a pasta "kernel/drivers/usb/" agrupa os que do suporte dispositivos USB, e assim por diante:

Na maioria dos casos, os mdulos possuem nomes que do uma ideia do dispositivo a que oferecem suporte. O "8139too.ko" d suporte s placas de rede com o chipset Realtek 8139, o "sis900.ko" d suporte s placas SiS 900, enquanto o "e100.ko" ativa as placas Intel E100, por exemplo. Se voc fizer uma pesquisa pelo nome de um mdulo especfico no Google, vai quase sempre chegar pgina do projeto ou a alguma pgina ou manual explicando o que ele faz.

15 Para ativar o suporte a um certo dispositivo, voc (ou o utilitrio de deteco includo no sistema) precisa apenas carregar o mdulo referente a ele. O resto feito pelo prprio kernel, que se encarrega de ativar o dispositivo e criar um caminho de acesso para ele. Cada vez mais, o trabalho de deteco e carregamento dos mdulos passa a ser feito de maneira automtica pelas distribuies, atravs dos cdigos de identificao includos nos prprios dispositivos. Uma placa de rede com chipset Realtek, por exemplo, retorna algo como "Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+". Com base nesses cdigos, o sistema pode descobrir quais perifricos esto instalados e carregar os mdulos apropriados, de forma automtica. Voc pode checar os cdigos de identificao dos dispositivos instalados usando os comandos "lspci" e "lsusb". Nos casos em que voc precisa carregar um mdulo manualmente, usado o comando "modprobe", seguido do mdulo desejado, como em: # modprobe ndiswrapper Para descarregar um mdulo, usado o "modprobe -r", como em: # modprobe -r ndiswrapper Voc pode ver uma lista com todos os mdulos disponveis usando o comando "modprobe -l". A lista muito longa para caber na tela ou mesmo no buffer do terminal, por isso interessante adicionar um "| more", que adiciona quebras de pgina na exibio. Basta ir pressionando a barra de espao para avanar: # modprobe -l | more Essa longa lista mais uma curiosidade, mas os mais curiosos podem us-la para tentar entender mais sobre o suporte a hardware e os componentes do sistema. A lista mostra a estrutura de pastas completa at os mdulos, o que ajuda a descobrir para que cada um serve. Ao ver o "/lib/modules/2.6.29-1-686/kernel/drivers/net/wireless/ipw2200.ko" na lista, por exemplo, voc pode presumir que se trata do mdulo que d suporte a placas de rede wireless com chipsets Intel IPW2200. Algumas distribuies oferecem uma opo de carregar mdulos adicionais durante a instalao, atendendo justamente aos raros casos onde voc precisa de um determinado mdulo para ativar a placa SCSI onde est instalado o HD, por exemplo. Os mdulos so gerados durante a compilao do kernel. Voc no precisa se preocupar com isso se no quiser, pois as distribuies quase sempre incluem verses bem completas do kernel por padro, mas, de qualquer forma, existe sempre a possibilidade de recompilar o kernel, mexendo nas opes e ativando ou desativando os mdulos que quiser. Na prtica, a situao mais comum onde voc precisa lidar com mdulos quando precisa instalar manualmente algum driver modificado ou proprietrio, necessrio para ativar algum dispositivo em particular. Infelizmente, isso ainda relativamente comum ao usar componentes recm lanados, ou em algumas configuraes problemticas, como em alguns notebooks com chipset SiS ou VIA. Diferente dos drivers open-source, que so includos diretamente no kernel, os drivers proprietrios so distribudos sob licenas mais restritivas, que impedem sua incluso direta. Os desenvolvedores do kernel so especialmente cuidadosos com relao ao uso de componentes proprietrios, para evitar que o sistema se torne vulnervel a disputas na justia. Um bom exemplo de como esta atitude cautelosa importante, o caso da SCO (http://en.wikipedia.org/wiki/SCO_v._IBM), que em 2003 entrou na justia contra a IBM, alegando que ela havia contribudo com trechos de cdigo de propriedade da SCO no kernel Linux e exigindo reparaes. No final, as acusaes se provaram falsas e a SCO que acabou sendo condenada a pagar reparaes (acabando por ir falncia), mas o caso foi um alerta muito claro. Em alguns casos, os drivers proprietrios so de livre distribuio e (embora no faam parte do kernel) podem ser includos diretamente nas distribuies. Em outros, voc mesmo precisar baixar

16 e instalar o driver. aqui que entram os drivers para muitos softmodems, para algumas placas wireless e tambm os drivers para placas 3D da nVidia e da ATI. A psicologia para lidar com eles a seguinte: instalar um destes drivers envolve duas tarefas, baixar e instalar o mdulo propriamente dito e criar um "dispositivo" (device), um atalho que aponta para o endereo de hardware usado por ele. Para facilitar esta tarefa, geralmente os drivers vm com algum tipo de instalador, geralmente um script simples de modo texto que cuida disso para voc. Os mdulos so parte integrante do kernel, por isso os mdulos compilados para uso em uma determinada distribuio no funcionam em outra, a menos que, por uma grande coincidncia, as duas utilizem exatamente a mesma verso do kernel. Isso bastante improvvel, j que o kernel Linux atualizado quase que diariamente. Se voc usar uma distribuio popular, Mandriva, Fedora, SuSE, etc., possvel que voc encontre um driver pr-compilado para download (que pode ser encontrado com a ajuda do bom e velho Google). Neste caso, voc s vai precisar instalar um pacote RPM ou executar um arquivo de instalao. Em outras situaes, voc encontrar apenas um arquivo genrico ainda no compilado, contendo um instalador que se encarrega de compilar um mdulo sob medida para o kernel em uso. Como o script de compilao no tem como adivinhar qual distribuio ou kernel voc est utilizando, necessrio ter instalado os pacotes "kernel-source" e "kernel-headers", que acompanham qualquer distribuio. No Mandriva, por exemplo, voc pode instal-los usando os comandos: # urpmi kernel-source # urpmi kernel-headers Naturalmente, para conseguir compilar qualquer coisa, voc precisar tambm de um compilador (o gcc), que tambm acompanha as distribuies. Se voc tiver estas trs coisas, vai conseguir instalar qualquer driver sem maiores problemas, basta seguir as instrues na pgina de download ou no arquivo INSTALL ou README dentro do pacote. No Ubuntu, por exemplo, o gcc, juntamente com os utilitrios bsicos de compilao, podem ser instalados atravs do pacote "build-essential", que comentei no tpico sobre instalao do VMware Player na introduo. Ele um meta-pacote (um pacote que, quando instalado, dispara a instalao de vrios outros), que se encarrega de instalar um conjunto bsico de compiladores e bibliotecas. Entendendo os diretrios O primeiro choque para quem est chegando agora a estrutura de diretrios do Linux, que no lembra em nada o que temos no Windows. No Windows temos os arquivos do sistema concentrados nas pastas "Windows" e "Arquivos de programas", e voc pode criar e organizar suas pastas da forma que quiser. No Linux, basicamente o contrrio. O diretrio raiz est tomado pelas pastas do sistema e esperase que voc armazene seus arquivos pessoais dentro da sua pasta no diretrio "/home". Naturalmente, possvel ajustar as permisses de uma maneira que voc possa salvar arquivos em outros locais, mas isso nem sempre uma boa ideia. A primeira coisa com que voc precisa se habituar, que no Linux os discos e parties no aparecem necessariamente como unidades diferentes, como o C:\, D:\ e E:\ do Windows. Tudo faz parte de um nico diretrio, chamado diretrio raiz ou simplesmente "/". Dentro deste diretrio temos no apenas todos os arquivos e as parties de disco, mas tambm o CD-ROM, drive de disquete e outros dispositivos, formando a estrutura que voc v no gerenciador de arquivos:

17

O diretrio "/bin" armazena os executveis de alguns comandos bsicos do sistema, como o "su", "tar", "cat", "rm", "pwd", etc., um conjunto que na maioria das distribuies ocupa de 6 a 8 MB, pouca coisa. O principal motivo de eles ficarem separados dos outros executveis do sistema (que vo dentro da pasta /usr) permitir que eles fiquem acessveis desde o incio do boot, mesmo que voc resolva armazenar a pasta /usr em uma partio separada (o que muito comum em servidores). Ele complementado pelo diretrio "/sbin", que tem a mesma funo bsica, mas se diferencia por armazenar aplicativos que podem ser usados apenas pelo root, como, por exemplo, o "adduser", que permite criar novos usurios. A maior parte dos aplicativos e outros componentes ficam instalados dentro do diretrio /usr(de "Unix System Resources", ou recursos de sistema Unix). Este de longe o diretrio com mais arquivos em qualquer distribuio Linux, pois aqui que ficam os executveis e bibliotecas de todos os principais programas instalados:

A pasta "/usr/bin" (bin de binrio), por exemplo, armazena cerca de 2.000 programas e atalhos para programas em uma instalao tpica do sistema. Como os executveis de quase todos os programas instalados so armazenados nela, o nmero s faz crescer conforme voc instala novos pacotes. Outro diretrio com um enorme volume de arquivos o "/usr/lib", onde ficam armazenadas as bibliotecas usadas pelos programas. A funo destas bibliotecas lembra um pouco a dos arquivos .dll no Windows. As bibliotecas com extenso ".a" so bibliotecas estticas, que fazem parte de um programa especfico, enquanto as terminadas em ".so.verso" (xxx.so.1, yyy.so.3, etc.) so bibliotecas compartilhadas, usadas por vrios programas. Elas so gerenciadas de maneira automtica pelo gerenciador de pacotes; quando uma biblioteca atualizada, por exemplo, so deixados links apontando para a nova verso, o que permite que os aplicativos que utilizavam a verso antiga continuem funcionando. Outras pastas dignas de nota so a "/usr/local", que reservada a programas e scripts que voc instalar manualmente; a "/usr/sbin", que reservada a executveis que podem ser usados apenas pelo root (similar pasta "/sbin") e a "/usr/src", que usada para armazenar o cdigo-fonte de programas e tambm o cdigo-fonte do kernel (caso disponvel). A pasta "/usr/X11R6" era originalmente destinada a armazenar os componentes do X, responsvel pelo ambiente grfico, mas ela est caindo em desuso.

18 Subindo de novo, a pasta "/boot" armazena o kernel e alguns arquivos usados na fase inicial do boot, como comentei no tpico anterior. Alm do kernel, ela armazena tambm a configurao do gerenciador de boot, responsvel pelas opes mostradas na tela de boot e as opes de inicializao aplicadas a cada uma. A configurao do grub, que o gerenciador usado na maioria das distribuies atuais, vai no arquivo "/boot/grub/menu.lst". Logo a seguir temos o diretrio "/dev", que de longe o exemplo mais extico de estrutura de diretrio no Linux. Todos os arquivos contidos aqui, como, por exemplo, "/dev/sda", "/dev/dsp", "/dev/modem", etc., no so arquivos armazenados no HD, mas sim ponteiros para dispositivos de hardware. O "arquivo""/dev/mouse" contm as informaes enviadas pelo mouse, enquanto o "/dev/dsp" permite acessar a placa de som, por exemplo. Essa organizao visa facilitar a vida dos programadores, que podem acessar o hardware do micro simplesmente fazendo seus programas lerem e gravarem em arquivos, deixando que o kernel se encarregue da parte complicada. Ele complementado pelo diretrio "/proc", que no armazena arquivos, mas sim informaes sobre o hardware e sobre a configurao do sistema. Estas informaes so usadas por utilitrios de deteco e configurao do sistema, mas podem ser teis tambm quando voc quer checar alguma configurao manualmente. O comando "cat /proc/net/dev" mostra informaes sobre as interfaces de rede, o "cat /proc/cpuinfo" mostra informaes sobre o processador e assim por diante. O diretrio /proc faz par com o "/sys", uma novidade introduzida a partir do kernel 2.6, que agrupa informaes sobre os dispositivos instalados, incluindo o tipo, fabricante, capacidade, endereos usados e assim por diante. Estas informaes so geradas automaticamente pelo kernel e permitem que os servios responsveis pela deteco de hardware faam seu trabalho, configurando impressoras e criando cones no desktop para acesso ao pendrive, por exemplo. O diretrio "/etc" concentra os arquivos de configurao do sistema, substituindo de certa forma o registro do Windows. A vantagem que, enquanto o registro uma espcie de caixa preta, os scripts e arquivos de configurao do diretrio "/etc" so desenvolvidos justamente para facilitar a edio manual. bem verdade que na maioria dos casos isto no necessrio, graas aos vrios utilitrios de configurao disponveis, mas a possibilidade continua existindo. Os arquivos recebem o nome dos programas, seguidos geralmente da extenso .conf. O arquivo de configurao do servidor DHCP (que pode ser configurado para atribuir endereos IP aos outros micros da rede) o "/etc/dhcpd.conf", enquanto o do servidor FTP o "/etc/proftpd.conf", por exemplo. A boa notcia que, ao contrrio do registro do Windows, os arquivos do "/etc" no se corrompem sozinhos e fcil fazer cpias de segurana caso necessrio. Falarei mais sobre eles no captulo sobre o Slackware, onde o principal objetivo justamente mostrar como configurar o sistema manualmente. Concluindo, o diretrio "/mnt" (de "mount") recebe este nome justamente por servir de ponto de montagem para o drive ptico ("/mnt/cdrom" ou "/mnt/dvd") e outros dispositivos de armazenamento. Na maioria das distribuies atuais ele substitudo pelo diretrio "/media", que tem a mesma funo. Ao plugar um pendrive no Ubuntu, por exemplo, ele montado pelo sistema na pasta "/media/disk"; ao plugar um carto de memria, ele visto como "/media/card" e assim por diante. Na verdade, o uso do diretrio "/media" ou "/mnt" apenas uma conveno. Voc pode perfeitamente montar o seu pendrive dentro da pasta "/home/fulano/pendrive", por exemplo, desde que faa a montagem de forma manual. Os diretrios padro de montagem das parties so configurveis atravs do "/etc/fstab", que um dos arquivos bsicos de configurao do sistema. Usando o terminal No incio, todos os sistemas operacionais usavam interfaces de modo texto, j que elas so uma forma simples de aceitar comandos e exibir os resultados, mesmo em mquinas com poucos recursos. Antes do Windows, existiu o DOS e, antes do KDE, GNOME e todas as outras interfaces que temos atualmente; o Linux tinha tambm apenas uma interface de modo texto. Mesmo com

19 toda a evoluo com relao s interfaces e aos utilitrios de configurao grficos, o bom e velho terminal continua prestando bons servios. O grande atrativo do terminal que, com exceo de alguns poucos aplicativos especficos, os comandos so sempre os mesmos. Isso faz com que ele seja um porto seguro, com o qual voc pode contar, sem importar se voc est no Ubuntu ou no Slackware. O terminal tambm a forma mais natural de "conversar" com o sistema, sempre que voc precisa de qualquer coisa alm do arroz com feijo. Por exemplo, imagine que voc precisa mover todos os arquivos com extenso .jpg de uma pasta com muitos arquivos para outra. Em vez de precisar mover um por um, ou fazer algum malabarismo com a ordem de exibio dos arquivos (para organizar a exibio com base na extenso dos arquivos e poder assim selecionar todos os .jpg com o mouse), voc poderia simplesmente abrir o terminal e digitar: $ mv *.jpg /outra-pasta Alm dos comandos bsicos, dois outros recursos que tornam o terminal to poderoso so a possibilidade de combinar diferentes comandos para executar tarefas mais complexas (ou filtrar os resultados para localizar informaes especficas) e a possibilidade de escrever pequenos programas em shell script. Por exemplo, para assistir vdeos no meu Nokia E71, preciso convert-los para um formato especial, suportado pelo RealPlayer, com o fluxo de vdeo em MPEG4 e o udio em AAC. No Windows, precisaria converter os vdeos um a um, mas no Linux, posso usar um pequeno script para automatizar o trabalho: for video in *; do ffmpeg -i "$video" -f mp4 -vcodec mpeg4 -b 350000 -r 15 -s 320x240 \ -acodec aac -ar 24000 -ab 128 -ac 2 "$video".mp4 done Quando executado dentro de uma pasta com vrios arquivos de vdeo, o script simplesmente converte todos os arquivos, um a um, gerando os arquivos .mp4 que posso ento copiar para o smartphone. Com isso, preciso apenas mover todos os vdeos que quero converter para uma pasta, executar o script e deixar o micro trabalhando durante a noite, fazendo o trabalho mecnico de converso, em vez de precisar repetir os mesmos passos para cada arquivo que quisesse converter. Os scripts em shell podem ser usados para automatizar qualquer tipo de tarefa que voc precisa executar repetidamente, de atualizaes do sistema a backups. Essencialmente, tudo o que possvel fazer via linha de comando (ou seja, praticamente tudo), pode ser automatizado atravs de um shell script. Se voc chegou a usar o Kurumin 7, deve se lembrar do Clica-Aki, um painel grfico com vrias funes, que era um dos grandes atrativos do sistema. Apesar da complexidade, ele nada mais era do que um conjunto de shell scripts, acionados atravs das opes e botes dentro da interface. At mesmo o instalador do sistema era inteiramente escrito em shell script:

Curiosamente, uma das grandes reivindicaes de administradores Windows sempre foi uma interface de linha de comando, que permitisse administrar o sistema remotamente (sem a necessidade de usar a interface grfica) e automatizar tarefas diversas. Mesmo a contragosto, a Microsoft acabou sendo

20 obrigada a dar o brao a torcer e desenvolver o PowerShell, que nada mais do que uma interface de linha de comando para o Windows. A grande diferena que no Linux a interface de modo texto evoluiu junto com o restante do sistema e se integrou de uma forma bastante consistente com os aplicativos grficos. Aprender a usar o modo texto parecido com aprender uma segunda lngua: um processo gradual e constante, no qual voc sempre est aprendendo comandos, parmetros e truques novos. Quanto mais voc aprende, mais tempo voc acaba passando no terminal; no por masoquismo, mas porque ele realmente mais prtico para executar muitas tarefas. Um dos usos mais bsicos para o terminal simplesmente abrir aplicativos, substituindo o uso do iniciar. Voc pode chamar qualquer aplicativo grfico a partir do terminal: na maioria dos casos o comando o prprio nome do programa, como "konqueror" ou "firefox". Durante o livro, voc vai notar que, em muitos exemplos, ensino os passos para executar tarefas atravs da linha de comando, pois os atalhos para abrir os programas, itens nos menus, etc., podem mudar de lugar, mas os comandos de texto so algo mais ou menos universal, mudam pouco mesmo entre diferentes distribuies. Esta mesma abordagem adotada de forma geral dentro dos livros sobre Linux. Por exemplo, para descompactar um arquivo com a extenso .tar.gz, pelo terminal, voc usaria o comando: $ tar -zxvf arquivo.tar.gz Aqui o "tar" o comando e o "-zxvf" so parmetros passados para ele. O tar permite tanto compactar quanto descompactar arquivos e pode trabalhar com muitos formatos de arquivos diferentes, por isso necessrio especificar que ele deve descompactar o arquivo (-x) e que o arquivo est comprimido no formato gzip (z). O "v" na verdade opcional, ele ativa o modo verbose, onde ele lista na tela os arquivos extrados e para onde foram. Se voc tivesse em mos um arquivo .tar.bz2 (que usa o bzip2, um formato de compactao diferente do gzip), mudaria a primeira letra dos parmetros, que passaria a ser "j", indicando o formato, como em: $ tar -jxvf arquivo.tar.bz2 Voc poderia tambm descompactar o arquivo clicando com o boto direito sobre ele em uma janela do Konqueror e usando a opo "Extrair > Extrair aqui". Para quem escreve, normalmente mais fcil e direto incluir o comando de texto, mas voc pode escolher a maneira mais prtica na hora de fazer. Existem duas formas de usar o terminal. Voc pode acessar um terminal "puro" pressionando as teclas "Ctrl+Alt+F1", mudar entre os terminais virtuais pressionando "Alt+F2", "Alt+F3", etc. e depois voltar ao modo grfico pressionando "Alt+F7" (em muitas distribuies a combinao pode ser "Alt+F5" ou mesmo "Alt+F3", dependendo do nmero de terminais de texto usados por padro). Estes terminais so s vezes necessrios para manuteno do sistema, nos casos em que o modo grfico deixa de abrir; mas, no dia a dia no prtico us-los, pois sempre existe uma pequena demora ao mudar para o terminal de texto e voltar para o ambiente grfico. Outra limitao que estes terminais no permitem usar aplicativos grficos. Na maior parte do tempo, usamos a segunda opo, que usar um "emulador de terminal", um terminal grfico que permite rodar tanto os aplicativos de texto, quanto os grficos. No KDE, procure o atalho para abrir o Konsole. Ele possui vrias opes de configurao (fontes, cores, mltiplas janelas, etc.). No GNOME usado o GNOME Terminal, que oferece recursos similares, incluindo a possibilidade de abrir diversas abas, onde cada uma se comporta como um terminal separado (similar s abas do Firefox). Se voc preferir uma alternativa mais simples, procure pelo Xterm.

21 Um pequeno complicador com relao ao uso do terminal, e tambm de editores de texto de uma maneira geral, foi a recente mudana do ISO-8859-15 (o bom a velho ASCII) para o UTF8 como padro de codificao padro na maioria das distribuies. Sempre que voc executar scripts, ou acessar outras mquinas remotamente e o terminal passar a exibir caracteres estranhos no lugar dos caracteres acentuados, mude o padro de codificao na configurao do terminal:

Na maioria dos casos, ao chamar um programa grfico atravs do terminal, voc pode passar parmetros para ele, fazendo com que ele abra diretamente algum arquivo ou pasta. Para abrir o arquivo "/etc/fstab" no Kedit, por exemplo, use: $ kedit /etc/fstab Para abrir o arquivo "imagem.png" no Gimp, use: $ gimp imagem.png Ao chamar algum aplicativo, o terminal ficar bloqueado at que o aplicativo seja finalizado. Voc pode evitar isso adicionando um "&" no final do comando, o que faz com que ele seja executado em segundo plano, mantendo o terminal livre. Se voc esquecer de acrescentar o "&" ao abrir um programa, ainda pode "destravar" o terminal pressionando "Ctrl+Z" (que paralisa o programa e te devolve o controle do terminal) e depois usar o comando "bg", que reinicia o programa em background. Outra opo simplesmente abrir outro terminal, ou (se estiver usando o konsole ou o gnome-terminal), abrir outra aba. :) Alguns aplicativos exibem mensagens diversas e avisos depois de serem abertos, o que "suja" o terminal, mas sem comprometer o que voc estiver fazendo. Se isto te incomodar, voc pode adicionar um "&>/dev/null" ao comando, o que descarta todas as mensagens, como em "konqueror /etc & &>/dev/null". No comeo, faz realmente pouco sentido ficar tentando lembrar do comando para chamar um determinado aplicativo ao invs de simplesmente clicar de uma vez no cone do iniciar. Entretanto, depois de algum tempo voc vai perceber que muitas tarefas so realmente mais prticas de fazer via terminal. mais rpido digitar "kedit /etc/fstab" do que abrir o kedit pelo menu, clicar no "Arquivo > Abrir" e ir at o arquivo usando o menu, por exemplo. uma questo de costume e gosto. O importante que voc veja o terminal como mais uma opo, que pode ser utilizada quando conveniente, para melhorar sua produtividade, e no simplesmente como algo arcaico ou ultrapassado, como muitos pregam. Vamos ento a algumas dicas bsicas: Completando com a tecla tab: Um dos recursos que torna o terminal um ambiente dinmico a possibilidade de completar comandos e nomes de arquivos usando a tecla tab do teclado, o famoso autocompletar. Alm de facilitar o uso do terminal, reduzindo brutalmente o volume de caracteres digitados, o autocompletar previne erros nos comandos (afinal, voc pode se enganar, mas o computador no) e evita que voc precise lembrar dos nomes exatos dos arquivos e dos comandos, j que voc pode digitar apenas as primeiras letras e pressionar a tecla tab. Por exemplo, em vez de precisar digitar:

22 $ md5sum ubuntu-8.10-desktop-i386.iso ... voc poderia digitar apenas md5<tab> ub<tab>, ou seja, apenas 8 toques, incluindo o espao. Se, por acaso, houver outro comando comeado com "md5" ou outro arquivo na mesma pasta comeado com "ub", ento o autocompletar completar o comando ou arquivo at o ponto em que as opes forem iguais. Pressionando o tab pela segunda vez, ele exibe uma lista com as possibilidades para que voc termine de completar o comando. Se tivesse os arquivos "ubuntu-8.04-desktop-i386.iso" e "ubuntu-8.10-desktop-i386.iso" na mesma pasta, por exemplo, ele completaria at o "md5sum ubuntu-8." onde os nomes diferem, e deixaria que voc completasse o comando a partir da. Histrico: O terminal mantm um histrico dos ltimos 500 comandos digitados, o que tambm acaba sendo muito til, j que normal que voc repita comandos similares, mudando apenas o nome do arquivo ou outro detalhe. Para repetir um comando recente, simplesmente pressione as setas para cima ou para baixo at encontr-lo. Para fazer uma busca, use o comando "history | grep comando", como em "history | grep cp" para mostrar todas as entradas onde foi usado o comando "cp". O "|" (ou "pipe", que pronunciamos como "pipi") muito usado no shell, pois permite combinar vrios comandos, fazendo com que a sada de um seja processada pelo outro. No comando anterior, por exemplo, o "history" gera uma longa lista de todos os comandos anteriormente digitados, enquanto o "| grep cp" faz com que o texto seja processado pelo grep, que deixa passar apenas as linhas que incluem o "cp". Colando com o terceiro boto: O boto central do mouse, que no tem muita serventia no Windows, permite copiar e colar entre aplicativos ou at mesmo entre aplicativos grficos e terminais abertos dentro da interface grfica. Isso substitui o Ctrl+C, Ctrl+V, com a vantagem do comando ser dado com um nico clique do mouse. Basta selecionar o trecho de texto, a imagem, ou o que quiser copiar e clicar com o boto central na janela onde quiser colar a seleo. Se voc no tiver um mouse de trs botes (como no caso de um notebook), pressione simultaneamente os dois botes para obter o mesmo resultado. Este recurso acaba sendo extremamente til ao seguir tutoriais ou executar listas de comandos, j que voc pode selecionar o comando a executar no navegador ou no editor de textos e colar diretamente no terminal, usando o boto central. Outra dica que voc pode usar o boto central para colar nomes de arquivos, sempre que precisar us-los em comandos. Use o "ls" para listar os arquivos da pasta e, em seguida, use o mouse para selecionar e colar os nomes, completando os comandos. As limitaes so que o boto central no funciona muito bem para copiar grandes quantidades de texto, e o texto a ser copiado precisa ficar selecionado durante a operao. Basicamente, voc consegue copiar o que puder ser visualizado na tela. No funciona para copiar 120 pginas de texto do Abiword para o OpenOffice, por exemplo. Pensando nisso, os desenvolvedores do KDE e do GNOME se preocuparam em incluir sistemas de copiar e colar com um funcionamento semelhante ao do Windows. Voc pode selecionar vrias pginas de texto do Kword e colar no Kmail, por exemplo, usando o bom e velho Ctrl+C, Ctrl+V. O KDE inclui at um Applet, o Klipper, que multiplica a rea de transferncia. Voc tem vrios slots que armazenam todas as ltimas operaes e pode colar qualquer uma das anteriores, selecionando a desejada atravs do cone ao lado do relgio, de maneira bem prtica. Case Sensitive: Salvo poucas excees, todos os comandos e parmetros dentro de arquivos de configurao so case-sensitive, ou seja, precisam ser digitados literalmente, respeitando as maisculas e minsculas. Na maioria dos casos, tanto os comandos quanto os parmetros suportados por eles utilizam letras minsculas, mas existem alguns casos de comandos que suportam parmetros com letras

23 maisculas e minsculas, com resultados diferentes. O comando "ls -s", por exemplo, mostra o tamanho dos arquivos na listagem, enquanto o "ls -S" mostra os arquivos organizados por tamanho (o maior primeiro), por isso sempre importante prestar ateno. Man: Como comentei no incio, ningum pode dizer que sabe tudo sobre todos os comandos do terminal. Para facilitar as coisas, cada comando possui um manual, onde so citados todos os parmetros e vrios exemplos de uso. Todos estes manuais so acessados atravs de um comando nico, o "man". Para ver as (muitas) opes do "ls", por exemplo, use "man ls". Use as setas para rolar a tela e, para sair do manual, pressione a tecla "q". O man acaba sendo um componente essencial para quem usa muito a linha de comando, pois mesmo comandos simples, como o "ls", o "cat" e o "grep", usados no dia a dia, possuem mais parmetros do que possvel memorizar, de forma que o man acaba servindo como um guia de consulta rpida. Entretanto, devido quantidade de parmetros disponveis, os manuais de muitos programas so muito longos e complicados. Por isso, muitos suportam o parmetro "--help", que exibe uma ajuda resumida, contendo apenas os parmetros mais usados. Experimente, por exemplo, o "ls --help". Comandos do prompt Apesar da interface grfica ser muito mais fcil de usar, bom voc ter pelo menos uma boa noo de como as coisas funcionam pelo prompt de comando. Isso vai lhe dar um domnio muito maior sobre o sistema. Em vrios pontos deste livro, sem falar de outros tipos de documentao sobre Linux, voc ver receitas com longas listas de comandos que devem ser digitados para configurar ou alterar algo. Em muitos casos existe algum utilitrio grfico que permite fazer o mesmo, mas os autores geralmente preferem dar a receita de como fazer via linha de comando, pois nem todo mundo ter os utilitrios mo e muitas vezes existem diferenas entre as opes disponveis nas diferentes distribuies. Vamos ento a um guia rpido dos comandos bsicos do terminal, que iremos aprofundar ao longo do livro: Comandos bsicos: Comeando do bsico, o comando "cd" permite navegar entre os diretrios. Ao abrir o terminal, voc comea dentro do seu diretrio home (como "/home/gdh") e pode acessar outros diretrios diretamente, especificando-os no comando, como em "cd /etc" ou "cd /mnt/cdrom". Para subir um diretrio use "cd .." e, para voltar ao home, digite simplesmente "cd", sem parmetro algum. Sempre que quiser confirmar em qual diretrio est, use o comando "pwd". Em seguida temos o "ls", que serve para listar os arquivos dentro da pasta. Na maioria das distribuies, a listagem aparece colorida, permitindo diferenciar as pastas e os diferentes tipos de arquivos. As pastas aparecem em azul, os links em azul claro, os arquivos compactados em vermelho, as imagens em rosa, os executveis em verde e os arquivos de texto e outros formatos em preto (ou em branco, de acordo com o esquema de cores usado). Para incluir os arquivos ocultos (que no Linux comeam com "."), use "ls -a". Para ver mais detalhes sobre cada arquivo, incluindo o tamanho, permisses de acesso e dono, use "ls -lh". Para incluir os ocultos, adicione o "a", como em "ls -lha". A ordem dos parmetros no altera o resultado do comando. Tanto faz digitar "ls -lha" ou "ls -alh", voc pode simplesmente decorar os parmetros na ordem que achar mais fcil de lembrar. Para copiar arquivos de uma pasta para outra usamos o "cp", especificando o nome do arquivo e a pasta para onde ele vai, como em "cp arquivo.zip /mnt/sda1/". Se voc quiser copiar um arquivo que est em outra pasta para o diretrio atual, inclua a localizao completa do arquivo e em seguida o "./" (que representa o diretrio atual), como em "cp /mnt/cdrom/video.avi ./". Voc pode tambm usar o "*" como curinga para copiar vrios arquivos. Para copiar todos os arquivos da pasta atual para a pasta "/mnt/hda6", por exemplo, use "cp * /mnt/hda6". O "cp" por padro um comando bastante chato e difcil de entender, j que por default ele omite pastas, altera a permisso dos arquivos e assim por diante. Um parmetro bastante til o "-a",

24 que faz com que o cp sempre copie recursivamente (ou seja, copie todos os arquivos e subpastas), mantenha as permisses do arquivo original e preserve os links simblicos que encontrar pelo caminho. Em resumo, faz o cp se comportar de uma forma mais simples e lgica. Para copiar uma pasta do CD-ROM para o diretrio atual, por exemplo, voc poderia usar "cp a /mnt/cdrom/musicas ./". O cp faz par com o "mv", que serve tanto para mover quanto para renomear arquivos. Para mover o arquivo foto.png para a pasta "/mnt/hda6/", o comando seria "mv foto.png /mnt/hda6". Para renomear um arquivo, basta especificar o nome original e o novo, como em "mv antigo.txt novo.txt". Para criar diretrios, usamos o comando "mkdir", como em "mkdir arquivos" (que cria a pasta arquivos no diretrio atual) ou "mkdir /mnt/sda6/arquivos". possvel tambm criar pastas recursivamente (criando todas as pastas necessrias at chegar a que voc pediu) adicionando o parmetro "-p" como em "mkdir -p /mnt/hda6/arquivos/novos/2009". Mesmo que a pasta "arquivos" e a pasta "novos" no existam, elas sero criadas. Em seguida temos o "rm", que serve tanto para remover arquivos quanto diretrios, de acordo com os parmetros usados. Para remover um arquivo simples, basta us-lo diretamente, como em "rm arquivo". Para que ele remova sem pedir a confirmao, adicione o parmetro "-f", como em "rm -f arquivo". Para remover uma pasta e todos os arquivos e diretrios dentro dela, adicione o parmetro "-r", como em "rm -rf arquivos/". Tome cuidado ao usar o "-rf", pois ele no pede confirmao, deleta os arquivos diretamente, sem escalas. Respire fundo e verifique se realmente est deletando a pasta certa antes de confirmar o comando. possvel tambm usar caracteres curingas na hora de remover arquivos. Para remover todos que possurem a extenso ".jpg", use "rm -f *.jpg". Para remover todos os arquivos que comearem com "img", use "rm -f img*". Voc pode usar tambm o "?" quando quiser usar o curinga para apenas um caractere especfico. Se voc quiser remover os arquivos "doc1.txt", "doc2.txt" e "doc3.txt", voc poderia usar o comando "rm -f doc?.txt". Temos tambm o comando "rmdir", uma variao do mkdir, que permite remover diretrios. A diferena entre ele e o "rm -rf" que o rmdir s remove diretrios vazios. Acostume-se a us-lo no lugar do "rm -rf" ao deletar uma pasta que acha que est vazia, assim voc evita acidentes. Para verificar o espao em disco disponvel, use o "df". Ele mostra o espao disponvel (assim como outras informaes, incluindo a capacidade e o diretrio de montagem) de cada uma das parties do sistema, incluindo pendrives e outros dispositivos de armazenamento que estejam montados. Ele faz par com o "free", que permite checar rapidamente o uso da memria RAM (ignore a primeira linha e veja diretamente a linha "-/+ buffers/cache", que mostra o uso real, descartando o usado pelo cache de disco). Outro comando til o "du", que permite ver uma lista com o espao ocupado por cada pasta dentro do diretrio atual. Para facilitar, use sempre o "du -h", que exibe o tamanho dos arquivos de forma amigvel, escrevendo "2,8G" ao invs de "2876322", por exemplo. Voc tambm pode executar uma fila de comandos de uma vez. Basta separ-los por ponto e vrgula, como em "ls; pwd" ou "cd /mnt/arquivos; ls". Localizando arquivos e comandos: Uma maneira rpida de localizar arquivos usar o comando "locate", que permite realizar buscas de forma quase instantnea. Para procurar um arquivo, simplesmente use "locate arquivo" (funciona tambm se voc especificar apenas parte do nome, ou usar o asterisco para encontrar arquivos de determinadas extenses). O locate muito rpido, pois executa a busca dentro de uma base de dados, que gerada ao rodar o comando "updatedb". A desvantagem dessa abordagem que voc precisa rodar o updatedb (como root) de vez em quando, a fim de incluir as ltimas modificaes. Se voc est procurando por um programa, experimente o comando "which", uma variante do locate que mostra apenas executveis.

25 Temos tambm o "find", que tambm permite localizar arquivos, mas funciona da forma tradicional, realmente vasculhando os diretrios em busca dos arquivos. Embora seja lento ao procurar em diretrios com muitos arquivos e subdiretrios, o find eficiente se voc souber previamente onde procurar. Por exemplo, o diretrio "/etc" concentra as configuraes do sistema. Se voc estiver procurando pelo arquivo "smb.conf" (onde armazenada a configurao do Samba), voc poderia ir direto fonte, usando o comando "find /etc -name smb.conf". Note que alm do diretrio onde ele vai procurar (/etc no exemplo), voc deve usar o parmetro "name" antes de indicar o nome do arquivo que est procurando. Omitindo o diretrio, ele simplesmente procura dentro do diretrio atual. Voc pode tambm fazer buscas por todos os arquivos com uma determinada extenso, como em "find /mnt/hda6 -name *.mp3". Assim como outros comandos do terminal, o find pode ser usado de forma mais amigvel atravs de ferramentas grficas. No KDE, por exemplo, voc pode usar o "kfind". Atravs dele voc pode procurar pelo nome ou tipo de arquivo (voc pode fazer uma busca incluindo apenas arquivos de imagem, por exemplo), procurar dentro de pastas especficas ou localizar arquivos pertencentes a um determinado usurio ou grupo do sistema, ou at mesmo procurar por arquivos modificados recentemente:

No GNOME, voc pode utilizar o "gnome-searchtool", disponvel no "Locais > Pesquisar por arquivos", que cumpre uma funo similar. Assim como no caso dos nomes de arquivos, voc pode completar os comandos usando a tecla TAB, o que reduz a necessidade de realmente decor-los. Outra dica usar o comando "apropos" para ajudar a localizar comandos quando voc tem apenas uma vaga ideia do nome. Basta cham-lo incluindo algumas letras que faam parte do comando (no importa se do comeo ou do final), como em "apropos keyg" ou "apropos ogg". Ele mostra uma lista com todos os comandos que contm os caracteres especificados no nome, juntamente com uma pequena descrio. Desligando: Assim como no Windows, voc precisa desligar o sistema corretamente para evitar perda de arquivos e danos estrutura das parties (sem falar em evitar o chato fsck no boot seguinte). Alm das opes nos menus do KDE ou GNOME, voc pode desligar via terminal, usando os comandos "halt" (desligar) e "reboot" (reiniciar). Existe tambm o Ctrl+Alt+Del, que se executado em um dos terminais de texto puro reinicia o micro e, se pressionado dentro do ambiente grfico abre (na maioria das distribuies) o dilogo com as opes de desligar e reiniciar. Informaes sobre o hardware: Como comentei no tpico sobre os diretrios, a pasta "/proc" no armazena arquivos, mas sim informaes sobre o hardware e sobre a configurao do sistema. Embora seja possvel ver o contedo dos arquivos usando qualquer editor de texto (como no caso do "cat /proc/cpuinfo"), a maior parte das informaes so crpticas demais para qualquer ser humano normal. Se voc quer apenas descobrir qual o chipset da placa wireless ou da placa de som, por exemplo, pode ver uma listagem resumida do hardware da mquina usando o comando "lspci". Para os dispositivos USB (que no aparecem na lista do lspci), temos o "lsusb". Dois outros comandos relacionados so o "lshal" (que mostra todos os componentes detectados pelo HAL, responsvel por detectar o hardware e carregar os mdulos apropriados) e o "lshw" que mostra uma longa lista de detalhes sobre a mquina, lembrando um pouco o gerenciador de

26 dispositivos do Windows, porm em modo texto. Complementando, temos o clssico "uname -a", que permite verificar rapidamente qual verso do kernel est sendo usada. Rede: O comando bsico para gerenciar a configurao de rede no Linux o "ifconfig". Quando chamado sem argumentos, ele mostra a configurao atual da rede (o que o torna uma opo rpida para verificar qual endereo IP seu PC est usando, ou se ele obteve a configurao corretamente a partir do servidor DHCP), mas ele pode ser usado tambm para alterar a configurao da rede rapidamente. Ao digitar "ifconfig eth0 192.168.1.2", por exemplo, voc troca o endereo da placa "eth0". Ele complementado pelo "iwconfig", que se aplica s placas wireless. Ao cham-lo sem argumentos, ele mostra a configurao atual, incluindo o SSID da rede, o endereo MAC do ponto de acesso, a qualidade do sinal e a velocidade atual de transmisso, mas ele pode ser usado tambm para configurar a rede Wi-Fi manualmente, como veremos em detalhes no captulo sobre o Slackware. O su, o sux e o sudo O Linux nasceu como um sistema multiusurio, mantendo a tradio dos sistemas Unix. Ele oferece um sistema de permisses bastante simples, porm ao mesmo tempo bastante efetivo, atendendo tanto a desktops domsticos, usados por apenas duas ou trs pessoas, quanto a servidores com centenas de usurios. No Linux, o root o nico que tem acesso a todos os arquivos e configuraes do sistema. Os usurios normais tm, por padro, acesso apenas a seus arquivos dentro do diretrio /home e alguns outros arquivos especficos. Em um desktop, a ideia bsica que voc use um login normal de usurio para rodar programas e executar as tarefas do dia a dia e logue-se como root quando precisar instalar programas ou alterar a configurao do sistema. Todos os programas salvam suas configuraes dentro de pastas ocultas, dentro do diretrio home, como a ".gnome2", que armazena a maior parte das configuraes relacionadas ao GNOME e a ".kde", que guarda as configuraes do KDE e dos aplicativos baseados nele. Cada usurio tem suas prprias pastas de configurao e pode alterar apenas seus prprios arquivos, o que evita confuso em PCs ou servidores compartilhados entre vrios usurios. O mximo que poderia acontecer seria um usurio deletar seus prprios arquivos, ou bagunar suas prprias configuraes. Em qualquer distribuio, voc pode se logar como root usando o comando "su" no terminal, fornecendo a senha de root. De uma forma geral, recomenda-se us-lo com o parmetro "-", que atualiza as variveis de ambiente: $ su O smbolo do terminal muda de um "$" para um "#", indicando que, a partir da, todos os comandos digitados nesse terminal especfico sero executados como root. Um problema comum voc no conseguir rodar aplicativos grficos depois de logado como root, recebendo um "konqueror: cannot connect to X server " ou um "Error: no display specified". Isso acontece por que, na maioria das distribuies, as permisses do X no so atualizadas, fazendo com que, por paradoxal que possa parecer, o root no tenha permisso para usar o ambiente grfico. Isso acaba sendo um grande empecilho, j que voc no pode usar editores de texto como o gedit ou o kwrite para editar arquivos de configurao, por exemplo. A soluo mais simples instalar o pacote "sux" e passar a usar o comando no lugar do su. O "sux" atualiza as permisses do ambiente grfico, solucionando o problema. Basta passar a us-lo no lugar do "su" quando quiser rodar aplicativos grficos: $ sux Outra opo rodar os programas grficos usando o "gksudo" (no GNOME) ou o "kdesu" (no KDE), seguidos do comando desejado, como em: $ gksudo gedit

27 ou: $ kdesu konqueror /etc Assim como no caso do sux, eles ajustam as permisses do X automaticamente. Uma forma prtica de us-los, rodar os comandos usando o "Alt+F2" que abre a janela do "Executar comando", onde voc pode rodar o comando diretamente, sem precisar primeiro abrir um terminal. Em algumas distribuies (como no caso do OpenSUSE), o gksudo substitudo pelo "gnomesu", mas a funo a mesma. Continuando, as distribuies atuais tm adotado cada vez mais o uso do "sudo" como uma forma de facilitar o uso do sistema, permitindo que voc execute aplicativos como root quando precisar. Muita gente associa o uso do sudo ao Ubuntu, mas ele, na verdade, comeou a ser usado em larga escala um pouco antes, no Knoppix e em outros live-CDs baseados nele, como o Kurumin. No caso dos live-CDs, o sudo usado como um facilitador, para que o sistema permita a execuo de comandos como root sem a necessidade de definir uma senha default para o root. Quando voc precisa abrir uma janela do gerenciador de arquivos como root, para recuperar arquivos dentro de uma partio do HD, por exemplo, voc precisa apenas cham-lo colocando um "sudo" antes do comando, como em: $ sudo konqueror /mnt/sda2 O sudo pode ser usado at mesmo para alterar a senha de root, permitindo que voc defina uma senha para o live-CD, mesmo sem saber a senha anterior: $ sudo passwd O Ubuntu (depois de instalado) usa uma abordagem mais conservadora, confirmando sua senha de usurio antes de executar o comando. Essa uma precauo bsica de segurana, que evita que algum possa alterar a senha de root e assumir o controle do seu PC enquanto voc estiver tomando um cafezinho, por exemplo. Em qualquer um dos casos, a configurao do sudo vai no arquivo "/etc/sudoers", onde so especificados os usurios que podero usar o comando. No Ubuntu, por exemplo, usada a seguinte configurao: %admin ALL=(ALL) ALL O "%admin" indica que a regra no se aplica a um usurio especfico, mas sim a todos os usurios que fazem parte do grupo "admin". Por default, apenas o usurio criado durante a instalao faz parte do grupo e somante ele pode usar o sudo, mas voc pode criar outros usurios administrativos posteriormente simplesmente adicionando-os ao grupo, como em: # addgroup gdh admin Devido ao "ALL=(ALL) ALL", o sistema permite que o sudo seja usado para executar qualquer comando (com algumas poucas excees), mas apenas depois de confirmada a senha do usurio. Para poder executar comandos sem precisar confirmar a senha (como ao rodar usando o live-CD), voc precisaria apenas alterar a linha, substituindo o "(ALL)" por um "NOPASSWD:", como em: %admin ALL=NOPASSWD: ALL No caso do Ubuntu, o arquivo vem com a linha "%sudo ALL=NOPASSWD: ALL" comentada, que tem um efeito semelhante, permitindo que os usurios includos no grupo "sudo" possam usar o sudo sem senha. Por ser um arquivo essencial dentro do sistema de permisses, o "/etc/sudoers" um arquivo extremamente sensvel. Qualquer erro dentro da configurao, ou qualquer alterao nas permisses do arquivo (que devem ser, obrigatoriamente, "0440"), fazem com que o sudo deixe de funcionar, bloqueando parcialmente o sistema at que o problema seja resolvido.

28 por isso que recomendado que voc edite o arquivo usando o comando "visudo", que no permite que voc salve o arquivo caso existam erros na configurao. O grande problema que ele complicado de usar, o que faz com que muitos dispensem o conselho e usem outros editores de texto. No existe nada de errado nisso, desde que voc cheque e recheque a configurao antes de salvar. Outra dica que voc sempre destrave a conta de root usando o "sudo passwd" antes de tentar editar o arquivo. Isso garante que voc continue conseguindo se logar como root no sistema caso o sudo fique travado por um erro na configurao do arquivo. A questo das permisses Clicando sobre as propriedades de qualquer pasta ou arquivo dentro do gerenciador de arquivos, voc encontra um menu com o ajuste de permisses, onde pode definir individualmente as permisses para o dono do arquivo, para usurios que faam parte do mesmo grupo e para os outros, que inclui todos os demais usurios com acesso ao sistema:

Cada um dos campos aceita trs possibilidades: "Nenhum", "Apenas leitura" e "Leitura e escrita". Por default, o dono o nico que pode ler e escrever, os demais (grupo e outros) podem apenas ler o arquivo, sem modific-lo. No caso dos arquivos, existe uma quarta permisso, que o campo "Permitir execuo do arquivo como um programa". Esta uma daquelas diferenas fundamentais entre o Linux e o Windows: o sistema no decide quais arquivos so programas pela extenso, mas sim pelas permisses. Isso aumenta bastante a segurana do sistema, mas, por outro lado, causa um pouco de dor de cabea em algumas situaes. Sempre que voc baixar um instalador qualquer via web (o driver da nVidia, por exemplo), vai precisar primeiro ativar a permisso de execuo nas propriedades do arquivo antes de conseguir instal-lo. O "dono" do arquivo por default o usurio que o criou. Apenas este usurio pode alterar as permisses de acesso ao arquivo ou pasta. Em seguida, vem a configurao do grupo, que permite que vrios usurios tenham acesso a um arquivo ou pasta, sem ter que apelar para o campo "outros" que daria acesso a qualquer um. Imagine o caso de um servidor de arquivos, usado por diversos usurios diferentes, onde voc precise fazer com que um determinado arquivo fique acessvel apenas para trs usurios especficos. Uma maneira simples de resolver o problema seria criar um novo grupo, adicionar a ele os usurios que devem ter acesso e, em seguida, alterar as permisses de acesso, para que o grupo passe a ser dono do arquivo e os integrantes sejam os nicos com permisso para ler e fazer alteraes. Voc pode criar novos grupos e adicionar usurios a eles atravs do "users-admin" ("Sistema > Administrao > Usurios e Grupos", nas distribuies derivadas do GNOME), ou usando outra ferramenta grfica includa na distribuio, como o UserDrake (disponvel no Mandriva) ou o Kuser (disponvel em muitas distribuies com o KDE).

29

Configurao dos grupos com o usersadmin Para criar um novo grupo usando o users-admin, clique em "Gerenciar Grupo > Adicionar Grupo". Na janela que ser aberta, especifique o nome do grupo e os usurios que faro parte dele. Um mesmo usurio pode fazer parte de vrios grupos simultaneamente. Muita gente cria um grupo diferente para cada pasta importante, de forma a poder definir individualmente quem ter acesso a ela. Voc notar que nesta tela aparecem vrios usurios que no so mostrados na tela principal, como o "bin", "daemon" e "mail". Estes so usurios ocultos do sistema, contas sem privilgios e que no possuem senhas definidas ( simplesmente impossvel fazer login com qualquer uma delas), que so usadas para isolar os programas, fazendo com que cada um tenha acesso apenas a seus prprios arquivos. Isso limita muito os danos que um aplicativo ou servio com bugs ou falhas de segurana pode causar quando alguma coisa d errado. De fato, a configurao default da maior parte das distribuies Linux atuais, dar acesso de leitura para a maioria das pastas (com exceo, naturalmente, dos arquivos de senha e outros arquivos crticos do sistema) para todos os usurios, mas, ao mesmo tempo, dar acesso de gravao apenas para o diretrio home de cada um. Por default, o nico que pode alterar o dono das pastas o prprio root (os usurios podem alterar apenas o grupo e ainda assim somente entre os grupos de que fazem parte). Um dos motivos para isso o suporte a quotas, que (embora no seja muito usado em desktops) est disponvel em qualquer distribuio Linux. Se qualquer usurio pudesse alterar a posse dos arquivos, transferindo-os para outros usurios, o sistema de quotas seria muito fcil de burlar. A maneira mais simples de alterar os donos e grupos dos arquivos e pastas simplesmente abrir uma janela do gerenciador de arquivos como root, como em: $ gksudo nautilus Diferente do que temos ao rodar o gerenciador de arquivos como usurio, ao acessar as propriedades dos arquivos como root os campos do dono e do grupo ficam desbloqueados, permitindo que voc ajuste as permisses livremente. Como de praxe, voc pode tambm ajustar as permisses via linha de comando, usando os comandos "chmod" e "chown". O primeiro permite ajustar as permisses dos arquivos e pastas, enquanto o segundo permite transferir a posse, dizendo a qual usurio e a qual grupo determinada pasta ou arquivo pertence. Um exemplo comum quando voc cria ou copia uma pasta como root e, devido a isso, fica sem poder modificar os arquivos usando seu login de usurio. Uma maneira simples de resolver o problema seria usar o comando "chown" (como root) para transferir a posse da pasta, como em: # chown -R gdh /home/gdh/arquivos/ O "-R" no comando faz com que ele seja aplicado recursivamente, ou seja, altere as permisses no apenas da pasta, mas de todo o contedo. Sem ele, voc passaria a conseguir escrever dentro

30 da pasta, mas ainda continuaria sem acesso s subpastas dentro dela. Em seguida, temos o "gdh", que indica o usurio e a pasta que ser modificada. Outro uso comum especificar tambm o grupo, como em: # chown -R gdh:gdh /home/gdh/arquivos/ Voc pode tambm criar novos usurios e alterar as senhas usando o "adduser" e o "passwd", que permitem, respectivamente, adicionar novos usurios e alterar as senhas de acesso posteriormente, como em: # adduser joao (cria o usurio) # passwd joao (altera a senha posteriormente) O prprio usurio pode alterar a senha usando o comando "passwd", desde que ele saiba a senha antiga. Se o usurio esqueceu a senha, voc pode definir uma nova executando o comando como root; nesse caso, o sistema pede a nova senha diretamente, sem solicitar a antiga. Bem antigamente, as senhas eram salvas no prprio arquivo "/etc/passwd", juntamente com as demais informaes da conta, o que abria brecha para diversos tipos de ataques. A partir de um certo ponto (por volta de 1996), todas as distribuies passaram a utilizar o sistema shadow, onde as senhas so armazenadas de forma encriptada em um arquivo separado, o "/etc/shadow". As senhas so encriptadas usando um algoritmo de mo nica, que permite apenas encript-las, mas no recuper-las. Durante o login, o sistema aplica o mesmo algoritmo senha digitada pelo usurio e compara a string resultante com a armazenada no arquivo. Se o resultado for o mesmo, o sistema sabe que a senha confere e o acesso autorizado. Continuando, para remover um usurio anteriormente criado, utilize o comando "deluser", como em: # deluser joao Por questo de segurana, o comando remove apenas a conta, sem apagar o diretrio home ou outras pastas com dados do usurio. O diretrio home especialmente importante, pois ele guarda todas as configuraes e os arquivos do usurio, de forma que voc s deve remov-lo depois de ter realmente certeza do que est fazendo. Concluindo, voc pode alterar as permisses de acesso de arquivos e pastas usando o comando chmod. A sintaxe dele parece um pouco complicada primeira vista (justamente por isso a maioria acaba preferindo usar diretamente o gerenciador de arquivos), mas nada que um pouco de prtica no possa resolver. Um exemplo tpico seria: # chmod 744 arquivo Os trs nmeros indicam, respectivamente, as permisses para o dono do arquivo, para o grupo e para os demais usurios. Temos trs permisses: leitura, gravao e execuo. Cada uma representada por um nmero: 4: Ler. 2: Alterar o contedo, criar novos arquivos (no caso de uma pasta). 1: Execuo (no caso dos arquivos) ou listar os arquivos (no caso das pastas). Voc simplesmente soma estes nmeros para ter o nmero referente ao conjunto de permisses que deseja: 0: Sem permisso alguma. Se for uma pasta, o usurio sequer pode ver o contedo. 1: Permisso apenas para executar (no possvel ler o arquivo ou alter-lo, apenas executar um

31 programa). No caso de uma pasta, o "1" permite que se liste os arquivos dentro dela, mas sem ler ou alterar os arquivos. 4: Apenas leitura. 5 (4+1): Ler e executar (no caso de um arquivo) ou ver os arquivos e abri-los, no caso de uma pasta. 6 (4+2): Leitura + gravao. 7 (4+2+1): Controle total: leitura + gravao + permisso para executar. Uma observao importante que, ao configurar as permisses de acesso de uma pasta, voc sempre deve usar 5 (4+1) ou 7 (4+2+1), pois, sem permisso para listar o contedo da pasta, voc no consegue ver os arquivos dentro dela. Se voc quisesse dar controle total do arquivo ou pasta para o dono e para o grupo, mas permisso de apenas leitura para os demais usurios, usaria o nmero774; se voc quisesse que todos os usurios tivessem permisso de leitura e gravao, mas sem poder executar nada, usaria o nmero 666; se quisesse dar controle total para todo mundo, usaria 777 e assim por diante. Outra configurao que no deve ser subestimada a dos privilgios de usurio, que fica disponvel dentro das propriedades da conta, no "users-admin":

Como voc pode ver, ela inclui opes para usar diversos componentes do sistema, incluindo o uso da placa de som, compartilhamento de arquivos e assim por diante. Estas permisses so na verdade definidas de uma maneira bastante simples, atravs de grupos. Quando voc marca a permisso para usar dispositivos de udio, por exemplo, tudo o que o usersadmin faz adicionar o usurio ao grupo correspondente. No caso do Ubuntu, est disponvel tambm a opo "Administrar o sistema", que adiciona o usurio ao grupo "admin", permitindo que ele use o sudo e altere as configuraes do sistema. Por default, o nico administrador o usurio criado durante a instalao, mas voc pode criar outros. Sempre que voc adiciona um novo login de usurio e, ao logar com ele, no consegue ouvir sons, usar a impressora ou outros recursos do sistema, verifique antes de mais nada se as opes correspondentes esto marcadas dentro da aba de privilgios do usurio. Uma introduo ao shell-script Imagine que, em um futuro distante, o Google decida transformar o Android em um sistema para robs pessoais. Seu rob com o Android poderia ser ento instrudo a executar qualquer tipo de tarefa, desde que voc conseguisse explicar para ele o que precisa fazer na forma de instrues simples. Uma ida at a geladeira para pegar uma lata de refrigerante poderia ser explicada dessa forma: Ir at a cozinha. Abrir a geladeira. Olhar a prateleira da direita. Se encontrar uma lata de coca-cola, trazer para mim.

32 Seno, trazer a lata de guaran. Se no encontrar lata alguma, fechar a geladeira e voltar. Este mesmo princpio, de dividir a tarefa a ser feita em instrues simples, comum a todas as linguagens de programao. Elas podem variar em complexidade, mas a ideia central sempre a mesma: explicar ao sistema o que fazer, em uma linguagem que ele seja capaz de entender. No caso do shell-script, voc precisa apenas pensar em uma maneira de "explicar" o que voc quer que seja feito atravs de comandos de terminal. Conforme voc vai adquirindo mais familiaridade com o sistema, este acaba se tornando um processo natural, j que qualquer conjunto de comandos para executar uma determinada tarefa pode ser transformado em um script rapidamente. Vamos ento a alguns exemplos bsicos para quebrar o gelo. O tipo mais simples de script consiste em um bloco de comandos, que automatiza alguma tarefa repetitiva. Estes scripts "burros" so uma excelente forma de simplificar o uso do sistema, evitando que voc precise memorizar sequncias de comandos. Um bom exemplo este mini-script que uso para conectar um mouse bluetooth: #!/bin/sh # Checagem para ter certeza que o suporte a bluetooth est ativado: hciconfig hci0 down /etc/init.d/bluetooth restart hciconfig hci0 up # Ativa o mouse: hidd --connect 00:07:61:62:cb:bb Estes quatro comandos permitem ativar o mouse em qualquer distribuio, de forma que preciso apenas executar o script e coloc-lo para ser inicializado automaticamente, sem precisar me preocupar com as peculiaridades de cada uma. Para us-lo, necessrio apenas criar um arquivo de texto chamado "btmouse.sh" (ou qualquer outro nome que escolher), coloc-lo dentro do seu home, ou da sua partio de dados (para que ele no seja perdido ao reinstalar o sistema) e marcar a permisso de execuo ("chmod +x btmouse.sh"). A partir da, voc pode passar a executar o script quando precisar ativar o mouse: # /mnt/sda6/btmouse.sh ... ou adicionar o comando no final do arquivo "/etc/rc.d/rc.local" (ou outro arquivo de inicializao) para que ele passe a ser executado automaticamente. O problema com esses scripts simples que eles servem para propsitos bem especficos, j que os passos executados so sempre os mesmos. Este script para ativar o mouse bluetooth, por exemplo, funciona apenas com o meu mouse, j que o endereo de conexo est gravado dentro do prprio script. Scripts mais complexos comeam quase sempre com alguma pergunta. Um gerenciador de downloads precisa saber qual a URL do arquivo a baixar, um discador precisa saber qual modem ser utilizado e qual o nmero de acesso do provedor, um instalador de programas precisa saber qual programa deve ser instalado e assim por diante. Dependendo da situao, as perguntas podem ser feitas diretamente, no estilo "digite a URL do arquivo a baixar", ou atravs de um menu de seleo, onde voc lista as funes oferecidas pelo script e o usurio clica na opo desejada. Para fazer uma pergunta direta (que o formato mais simples), usamos o comando "read", que l uma resposta e a armazena em uma varivel. Quase sempre ele usado em conjunto com o "echo", que permite escrever texto na tela, fazendo a pergunta, como em:

33 echo "Digite a URL do arquivo a baixar" read arquivo wget -c $arquivo Com estes trs comandos, criamos um gerenciador de downloads primitivo, que pede a URL do arquivo (que voc poderia colar no terminal usando o boto central do mouse) e faz o download usando o wget, que um gerenciador em modo texto, muito usado em scripts. A URL digitada armazenada na varivel "arquivo", que pode ser usada ao longo do script. Ao usla, necessrio incluir um "$", que faz com que o shell entenda que se trata da varivel "arquivo" e no de um trecho de texto qualquer. Quando o script fosse executado, o "wget -c $arquivo" seria transformado em algo como "wget -c http://gdhpress.com.br/arquivo.zip", iniciando o download. O "-c" uma opo para o wget, que faz com que ele continue o download caso interrompido. Se voc pressionasse "Ctrl+C" durante o download para encerrar o script e o executasse novamente, fornecendo a mesma URL, ele continuaria o download de onde parou. Voc poderia incrementar o script, incluindo mais perguntas e usando mais opes do wget. A primeira parada nesse caso seria o "man wget", onde voc poderia garimpar as opes suportadas pelo comando e selecionar algumas que poderiam ser teis dentro do script. Um bom exemplo a opo "--limit-rate=" que permite limitar a taxa de download. Voc poderia incluir a opo no script adicionando mais uma pergunta, como em: echo "Digite a URL do arquivo a baixar" read arquivo echo "Digite a taxa mxima de download, em kbytes. ex: 48" read taxa wget -c --limit-rate=$taxa $arquivo Este formato simples funciona bem para scripts rudimentares, destinados a simplesmente automatizarem alguma tarefa especfica, a partir de algumas perguntas simples. Para scripts mais completos, precisamos comear a usar as operaes lgicas, que permitem que o script tome decises. O formato mais bsico o "se, ento, seno", que no shell script representado pelos operadores "if", "then" e "else". Imagine que voc est fazendo um script conversor de vdeos, que capaz de gerar arquivos em quatro diferentes formatos. O script comea perguntando qual formato usar e, de acordo com a resposta, executa os comandos apropriados para fazer a converso. Para simplificar, vamos fazer com que o script simplesmente converta todos os arquivos dentro do diretrio atual, em vez de perguntar quais arquivos converter ou de exibir uma caixa de seleo. A parte da pergunta poderia ser feita com o "echo", como no exemplo anterior. Como agora so vrias linhas de texto, usei aspas simples ( ' ) em vez de aspas duplas. As aspas simples permitem que voc inclua quebras de linha e caracteres especiais dentro do texto, fazendo com que o shell simplesmente escreva tudo literalmente: echo 'Escolha o formato de sada: 1) MPEG4, 320x240 (vdeos no formato 4:3) 2) MPEG4, 320x176 (vdeos em formato wide) 3) Real Player, 320x240 (vdeos no formato 4:3) 4) Real Player, 320x176 (vdeos em formato wide) (Responda 1, 2, 3 ou 4, ou qualquer outra tecla para sair)' read resposta No final deste trecho, teramos a varivel "resposta", que armazenaria um nmero de 1 a 4. Precisamos agora fazer com que o script decida o que fazer de acordo com a resposta. O jeito mais simples de fazer isso seria simplesmente colocar um bloco com 4 comandos "if" (se), um para cada possibilidade. Cada "if" sempre acompanhado por um "then" (ento) e um "fi" (fim do se), como em:

34 if [ "$resposta" = "1" ]; then [comandos ...] fi if [ "$resposta" = "2" ]; then [comandos ...] fi if [ "$resposta" = "3" ]; then [comandos ...] fi if [ "$resposta" = "4" ]; then [comandos ...] fi Uma forma mais elegante (e mais prova de falhas), seria usar o "elif" (que poderia ser traduzido para "seno se") e o "else" (seno), como em: if [ "$resposta" = "1" ]; then [comandos ...] elif [ "$resposta" = "2" ]; then [comandos ...] elif [ "$resposta" = "3" ]; then [comandos ...] elif [ "$resposta" = "4" ]; then [comandos ...] else echo "Voc digitou uma opo invlida. O script termina aqui." fi Como pode ver, ao usar o elif voc no precisa mais incluir um "fi" para cada possibilidade. Outra vantagem que voc pode agora incluir um "else" no final, que faz com que o script responda com uma mensagem de erro ao receber alguma resposta que no estava esperando. Dentro de cada uma das condies, voc incluiria um bloco de comandos destinado a gerar os arquivos convertidos com os parmetros correspondentes, como em: if [ "$resposta" = "1" ]; then for i in *; do mencoder -oac mp3lame -lameopts cbr:br=128 -ovc lavc -lavcopts \ vcodec=mpeg4:vbitrate=512 -ofps 16 -vf scale=320:176 -o "c-$i" "$i" done elif [ "$resposta" = "2" ]; then [o resto do script...] Esse comando gigante que se esparrama pela terceira e a quarta linha um comando de converso do mencoder (um pequeno utilitrio de converso de arquivos de mdia em modo texto, que bastante flexvel), que gera um arquivo de vdeo otimizado para ser assistido em smartphones. Esse o tipo de comando que longo demais para ser escrito manualmente, mas que pode perfeitamente ser usado atravs de um script. Veja que a varivel "i" usada no final da quarta linha, para indicar o nome do arquivo. O "c-$i" "$i" faz com que o script adicione o prefixo "c-" no nome dos arquivos convertidos, permitindo que eles sejam includos na pasta sem apagar os arquivos originais. O comando do mencoder colocado dentro de outra condicional, agora usando o "for" (enquanto), que permite que o script execute um conjunto de comandos repetidamente. No exemplo, ele usado para fazer com que o comando de converso do mencoder seja executado uma vez para cada arquivo dentro da pasta. Ao ser executado, a varivel "i" (poderia ser qualquer outro nome) recebe o nome do primeiro arquivo, o que faz com que ele seja convertido.

35 Ao chegar no "done", o interpretador volta linha inicial e a varivel "i" recebe agora o nome do segundo arquivo. O processo ento repetido para cada um dos arquivos da pasta, at o ltimo (a lista dos arquivos a converter gerada pelo interpretador no incio do script, por isso no existe o risco do conversor ficar em loop). O "for i in *; do" poderia ser traduzido como "para cada arquivo dentro da pasta atual, execute". Voc pode baixar o script pronto, incluindo os comandos de converso no: http://www.hardware.com.br/dicas/converter-video.html Outro exemplo de uso para o "for" seria baixar uma lista de arquivos ISO especificada em um arquivo de texto. Imagine que voc goste de testar novas distribuies e, de vez em quando, queira deixar o PC ligado durante a madrugada colocando os downloads em dia. Voc poderia facilitar as coisas usando um script como: #!/bin/sh echo "Digite a taxa mxima de download, em kbytes. ex: 48" read taxa for i in `cat /home/$USER/downloads.txt`; do wget -c --limit-rate=$taxa $i done Para us-lo, voc precisaria apenas criar um arquivo "downloads.txt" dentro do seu diretrio home, colocando os links de download dos ISOs das distribuies, um por linha, como em: http://ftp.heanet.ie/pub/linuxmint.com/stable/6/LinuxMint-6.iso ftp://ftp.nluug.nl/pub/os/Linux/distr/dreamlinux/stable/DL3.5_20092802.iso http://sidux.c3sl.ufpr.br/release/sidux-2009-01-ouranos-kde-lite-i386.iso Ao executar o script, ele comearia perguntando a taxa mxima de download (com a resposta sendo armazenada na varivel "taxa"), leria o arquivo e baixaria os arquivos listados para o diretrio atual. A linha do wget inclui duas variveis: a taxa de download e o arquivo a baixar. Por causa do "for", o comando repetido para cada um dos links listados no arquivo, fazendo com que eles sejam baixados um de cada vez. Embora simples, este script introduz algumas idias novas. A primeira o uso das crases (``), que permitem usar o resultado de um comando. Graas a elas, podemos usar o "cat" para ler o arquivo de texto e assim fazer com que o script carregue as URLs dentro da varivel "i", uma de cada vez. Outra novidade o uso do "/home/$USER", uma varivel de sistema que contm sempre o diretrio home do usurio que executou o script. Isso faz com que o script procure pelo arquivo "downloads.txt" dentro do seu diretrio home, e no em uma localizao especfica. Uma prtica um pouco mais avanada o uso de funes. Elas permitem que voc crie blocos de cdigo destinados a executarem tarefas especficas que podem ser usados ao longo do script. Em outras palavras, as funes so pequenos scripts dentro do script. A grande vantagem de criar funes (em vez de simplesmente repetir os comandos quando precisar) que, ao atualizar o script, voc precisa alterar apenas um bloco de comandos, em vez de precisar procurar e alterar os comandos manuais em vrios pontos do script. Por permitirem reaproveitar o cdigo, as funes fazem com que o script seja mais organizado e fique com menos linhas, o que facilita muito a manuteno em scripts complexos. Imagine, por exemplo, que voc precisa repetir uma mesma mensagem de erro vrias vezes ao longo do script. Voc poderia usar uma funo como esta: msgerro() { echo "Algo deu errado durante a conexo. O erro foi:" echo "$msg" }

36 Veja que a funo comea com uma declarao ("msgerro()"), onde voc especifica um nome e adiciona o "()", que faz com que o sistema entenda que se trata de uma funo e no de um outro bloco de comandos qualquer. Os comandos so, em seguida, colocados dentro de um par de chaves ( { .... } ), que indicam o incio e o final. A partir da, voc pode executar os comandos dentro do script chamando o nome da funo (msgerro), como se fosse um comando qualquer. Um exemplo o script para conectar usando modems e smartphones 3G que escrevi em 2008, que est disponvel no:http://www.hardware.com.br/dicas/script-vivo-zap.html Ele prev o uso de diversos tipos de conexo e inclui vrias funes de checagem e soluo de problemas (que so usadas repetidamente ao longo do script), por isso ele bastante longo e complexo, com quase 900 linhas. Se tiver curiosidade em acessar o tpico e olhar o cdigo, vai ver que crio diversas funes no incio do script (a "bpairing()" contm os comandos para fazer o pareamento com smartphones e conectar via Bluetooth, enquanto a "checaporta()" verifica em que porta o modem ou smartphone est conectado, por exemplo) que so usadas ao longo do script. Outra necessidade comum salvar parmetros e configuraes, evitando que o script precise perguntar tudo novamente cada vez que for executado. Uma forma simples de implementar isso fazer com que o script salve as variveis com as configuraes usadas em arquivo de texto ( geralmente usado um arquivo oculto dentro do diretrio home), como em: echo "tel=\"$tel\"" > /home/$USER/.myscript echo "porta=\"$porta\"" >> /home/$USER/.myscript Esses comandos criariam o arquivo ".myscript" dentro do diretrio home do usurio que executou o script. Graas ao uso do ponto, ele se torna um arquivo oculto, assim como os demais arquivos de configurao do sistema. O arquivo de configurao pode ser carregado dentro do script com um ". /home/$USER/.myscript" (ou seja, ponto, espao e a localizao do arquivo), o que faz com que o interpretador processe os comandos dentro do arquivo como se fossem parte do script principal. Um exemplo de uso seria uma verso aperfeioada do script para ativar mouses Bluetooth que mostrei a pouco, que perguntasse o endereo do mouse da primeira vez que fosse executado e passasse a usar a configurao salva da em diante: #!/bin/sh if [ -e "/home/$USER/.btmouse" ]; then echo "Carregando configurao salva no arquivo /home/$USER/.btmouse." . /home/$USER/.btmouse else # Se o arquivo no existir, pergunta o endereo e salva a configurao. echo "Digite o endereo do mouse que ser usado (ex: 00:07:61:62:cb:bb):" read addr echo "addr=\"$addr\"" > /home/$USER/.btmouse fi # Mensagem explicativa: echo "Conectando a $addr" echo "Delete o arquivo /home/$USER/.btmouse para trocar o endereo." # O script propriamente dito: hciconfig hci0 down /etc/init.d/bluetooth restart hciconfig hci0 up hidd --connect $addr Embora estes exemplos utilizem apenas perguntas simples, em texto, os shell-scripts podem tambm exibir janelas, avisos, perguntas e menus de seleo grficos de maneira muito simples,

37 utilizando o Xdialog, Kdialog ou o Zenity, que permitem mostrar janelas grficas de forma surpreendentemente fcil. Para mostrar uma mensagem de texto, por exemplo, voc usaria o "zenity --info --text" seguido da mensagem a mostrar, como em: zenity --info --text "Conexo ativa." Para abrir uma janela de seleo de arquivo, voc usaria o "zenity --file-selection", que exibe uma janela similar do gerenciador de arquivos, permitindo escolher o arquivo que ser usado. Normalmente, a localizao do arquivo seria simplesmente escrita no terminal. Para que ela seja armazenada em uma varivel (permitindo que voc a use posteriormente ao longo do script), voc usaria: arquivo=`zenity --file-selection --title "Escolha o arquivo"` Estes dois comandos simples poderiam ser usados para criar um aplicativo rudimentar de gravao de CDs, veja s: #!/bin/sh zenity --info --text "Coloque uma mdia virgem no drive" iso=`zenity --file-selection --title "Escolha o arquivo ISO para gravar:"` wodim dev=/dev/scd0 speed=16 -dao -eject -v $iso Quando executado, o script mostraria as duas janelas e gravaria o arquivo ISO selecionado usado o wodim, que um aplicativo de gravao de CDs via linha de comando, usado por diversos outros aplicativos. Quando voc queima um CD usando o Brasero ou o K3B, o wodim quem faz o trabalho pesado, assim como no caso do nosso script:

Graas opo "-eject" adicionada linha de gravao, o script ejeta a mdia depois de gravada, o que torna desnecessrio incluir mais uma janela avisando que a gravao foi concluda. O wodim suporta diversas outras opes de gravao (que voc pode consultar no "man wodim"), que

38 poderiam ser usadas para aperfeioar o script. Voc precisaria apenas incluir algumas perguntas adicionais, salvar as respostas em variveis e inclu-las na linha de gravao. Concluindo essa breve introduo, dois outros comandos fundamentais em se tratando de shellscripts so o pipe e o grep. Aqui vai uma explicao resumidasobre eles: pipe: Junto com as setas de redirecionamento (> e >>), o pipe ( | ) muito usado em scripts e comandos diversos. Ele permite fazer com que a sada de um comando seja enviada para outro ao invs de ser mostrada na tela. Parece uma coisa muito extica, mas acaba sendo incrivelmente til, pois permite "combinar" diversos comandos que originalmente no teriam nenhuma relao entre si, de forma que eles faam alguma coisa especfica. Um exemplo simples o "modprobe -l | more", que vimos no tpico sobre o kernel, onde o pipe usado para que a enorme lista gerada pelo comando "modprobe -l" seja enviada ao "more", que se encarrega de criar as quebras de pgina. grep: O grep permite filtrar a sada de um determinado comando, de forma que ao invs de um monte de linhas, voc veja apenas a informao que est procurando. Ele frequentemente usado em conjunto com o pipe, sobretudo em scripts. Um exemplo simples: sua placa de rede no est funcionando e voc quer saber se o mdulo de kernel "sis900", que d suporte a ela, est carregado. Voc pode ver os mdulos que esto carregados usando o comando "lsmod", mas a lista um pouco longa. Voc poderia completar o lsmod com o "| grep sis900", que vai filtrar usando o grep, mostrando na tela apenas as linhas contendo "sis900". O comando ficaria ento "lsmod | grep sis900". Se no aparecer nada na tela, voc sabe de antemo que o mdulo no est ativo. Neste caso, voc poderia tentar carreg-lo manualmente usando o comando "modprobe sis900", como root. Em um script, o mesmo comando poderia ser usado para detectar se o mdulo est carregado ou no e, a partir da, mostrar uma mensagem na tela, ou carreg-lo automaticamente. Ao longo do livro, veremos mais alguns exemplos de uso do shell-script, esta foi apenas uma introduo rpida destinada a apresentar alguns dos conceitos bsicos. Uma caracterstica importante do shell-script que assim que voc toma coragem e comea a escrever alguns scripts bsicos, voc acaba se empolgando e passa a, gradualmente, incorporar novos truques, aprendendo uma coisa aqui e outra ali, mesmo sem estudar especificamente sobre o assunto. Montando e desmontando Antigamente, existia a concorrncia entre HDs IDE (que eram vistos no Linux como /dev/hdX) e HDs SCSI, vistos pelo sistema como "/dev/sdX". O primeiro HD IDE seria detectado pelo sistema como "/dev/hda", o segundo como "/dev/hdb" e assim por diante. Entretanto, mudanas feitas nas verses recentes do kernel derrubaram essa diviso, fazendo com que todos os HDs, independentemente de serem IDE ou SATA, passassem a ser vistos pelo sistema como "/dev/sdX", como se fossem HDs SCSI. O HD principal passou ento a ser sempre visto como "/dev/sda". Isso inclui at mesmo os pendrives, que so detectados pelo sistema como se fossem HDs adicionais. Ao plugar dois pendrives, o primeiro seria reconhecido como "/dev/sdb" e o segundo como "/dev/sdc". Antes de instalar qualquer sistema operacional, necessrio particionar o HD, criando as parties de instalao. Devido a uma limitao nos endereos que vem desde a poca dos primeiros PCs, possvel criar apenas 4 parties primrias, ou at trs parties primrias e uma partio estendida, que pode ser usada para criar mais parties. Neste screenshot do Gparted, por exemplo, temos um HD dividido em 5 parties: /dev/sda1 (com uma instalao do Windows), /dev/sda2 (com uma instalao do Ubuntu), /dev/sda3 (reservada instalao de mais uma distribuio), /dev/sda5 (swap) e /dev/sda6 (para arquivos). A "/dev/sda4" a partio estendida, que criada automaticamente pelo particionador quando voc usa a opo de criar uma partio lgica, como uma espcie de "container" para as demais

39 parties. Voc pode notar que o tamanho especificado pelo particionador o das duas parties somadas:

Embora no seja obrigatria em micros com um volume suficiente de memria RAM, a partio swap sempre recomendada, pois permite que o sistema disponha de uma rea adicional para situaes em que precisa de uma quantidade muito grande de memria RAM, como (por exemplo) ao editar vdeos. A memria swap pode ser usada tambm para mover arquivos e bibliotecas que no esto em uso, liberando mais memria RAM para uso dos programas e do cache de disco. A propenso do sistema a utilizar memria swap configurvel atravs de uma opo do kernel, a "vm.swappiness", que aceita valores de 0 a 100, sendo que um valor baixo orienta o sistema a usar swap apenas quando no houver mais memria disponvel e um valor mais alto faz com que o sistema a utilize de maneira mais liberal, usando mais swap e tentando manter mais memria RAM livre para outros usos. O default na maioria das distribuies "60", o que faz com que o sistema use um pouco de swap mesmo quando tem memria de sobra disponvel. Voc pode evitar isso alterando o valor para "20" (ou menos, de acordo com o gosto do fregus). Para isso, execute, como root, o comando: # sysctl vm.swappiness=20 Para que a alterao se torne permanente, edite o arquivo "/etc/sysctl.conf" e adicione a linha "vm.swappiness=20". Este arquivo contm variveis para o kernel, que so carregadas durante o boot. Ele pode ser usado tambm para salvar outras configuraes, como, por exemplo, as opes para ativar o roteamento de pacotes, que so usadas ao compartilhar a conexo.

40 Voc pode ativar uma imagem de memria swap temporria criando um arquivo com a capacidade desejada e montando-o como se fosse uma partio de memria swap. O desempenho ser mais baixo do que ao usar uma partio swap real, mas ainda assim um bom truque, que voc pode usar em emergncias. O primeiro passo criar o arquivo vazio, usando o comando dd, especificando o tamanho, em kbytes. No exemplo, estou criando um arquivo com 512 MB: # dd if=/dev/zero of=swap.img bs=1024 count=512000 Ele simplesmente escrever zeros dentro do arquivo "swap.img" (criado dentro do diretrio atual), at atingir o tamanho indicado. Apesar de simples, o dd um comando bastante poderoso, que pode ser usado para clonar HDs, destruir dados em parties e assim por diante, por isso tome sempre muito cuidado ao us-lo. Com o arquivo criado, use o comando "mkswap" para format-lo e em seguida o "swapon" para que ele seja ativado: # mkswap swap.img # swapon swap.img Rodando o comando "free", voc ver que o total de memria swap ter aumentando, j que o arquivo passa a ser usado como um swap complementar. O arquivo temporrio desativado automaticamente ao reiniciar o micro, mas voc pode faz-lo a qualquer momento usando (dentro do diretrio onde foi criado o arquivo) o comando "swapoff swap.img". Voltando questo das parties, o sistema nunca acessa os dados dentro da partio diretamente. Ao invs disso, ele permite que voc "monte" a partio em uma determinada pasta e acesse os arquivos dentro da partio atravs dela, o que nos leva ao comando "mount". A sintaxe bsica inclui o dispositivo e a pasta onde ele ser acessado, como em: # mount /dev/sdb1 /mnt/sdb1 Na hora de desmontar a partio, voc pode especificar tanto o dispositivo, quando a pasta onde ele foi montado, como em: # umount /mnt/sdb1 No caso do CD-ROM, citamos apenas o dispositivo, sem incluir a partio (j que, diferente de um HD, um CD-ROM no pode ser particionado). Voc pode tanto usar o dispositivo correto, como "/dev/hdc" ou "/dev/hdd", quanto usar o "/dev/cdrom", um link que criado pelo sistema apontando para a localizao correta: # mount /dev/cdrom /mnt/cdrom Se quiser trocar o CD que est na bandeja, voc deve primeiro "desmontar" o CD-ROM, com o comando "umount /mnt/cdrom". O mesmo se aplica a pendrives e HDs externos: sempre necessrio desmontar antes de remover o dispositivo. No caso dos pendrives e HDs, desmontar fundamental, pois as alteraes no so necessariamente salvas imediatamente por causa do cache de disco. Removendo sem desmontar, existe uma probabilidade muito grande das ltimas alteraes serem perdidas. muito comum as pessoas gravarem arquivos no pendrive, desplugarem logo depois (sem desmontar) e, ao tentar acess-los depois, perceberem que os arquivos simplesmente no foram gravados. Os pontos de montagem, ou seja, as pastas onde as parties sero montadas, podem ser configurados atravs do arquivo "/etc/fstab". Quase sempre este arquivo configurado durante a instalao do sistema, incluindo referncias a todas as parties e CD-ROMs disponveis, de forma que voc pode montar as parties digitando apenas "mount /dev/sdb1" (por exemplo), sem precisar usar o comando completo.

41 Uma dvida comum a mensagem "device is busy", que muitas vezes exibida ao tentar desmontar um pendrive, ejetar um CD-ROM ou desmontar uma partio de arquivos do HD, como em: # umount /mnt/sdb1 umount: /: device is busy. Este erro acontece sempre que existe algum programa acessando a partio como, por exemplo, uma janela do gerenciador de arquivos, um player de udio tocando msicas salvas dentro dela, ou mesmo uma janela de terminal acessando a pasta. Voc pode descobrir o culpado usando o comando "lsof", que lista os programas que esto acessando a pasta e impedindo a desmontagem. Voc pode cham-lo tanto especificando a partio, como em "/dev/sdb1", quanto especificando a pasta onde ela est montada, como em: $ lsof /mnt/sdb1 Na primeira coluna da lista, voc encontra o nome dos programas e na segunda coluna, o PID, que o nmero do processo, que pode ser usado como ltimo recurso para fechar o programa "na marra", usando o comando "kill -9". Outra opo usar o comando "fuser -k", que tenta finalizar fora todos os programas que estiverem acessando a pasta. Ele no muito recomendvel, pois os resultados so mais imprevisveis, mas ele pode ser usado em emergncias quando, por exemplo, voc no consegue ejetar o CD-ROM por que o sistema se recusa a desmont-lo. Basta especificar a pasta, como em: $ fuser -k /media/cdrom Embora continuem sendo importantes e bastante teis na hora de solucionar problemas ou criar configuraes personalizadas, os comandos manuais so cada vez menos usados no dia a dia, devido aos sistemas de montagem automtica utilizados nas distribuies. O princpio simples: o kernel detecta automaticamente quando novos dispositivos de armazenamento so conectados, criando os dispositivos de acesso e gerando mensagens que disparam a criao de cones no desktop e outras funes. Ao plugar uma cmera digital em modo de transferncia de dados, por exemplo, so inseridas mensagens como estas no log do sistema (que voc pode ver usando o comando "dmesg"): [254728.281982] scsi 8:0:0:0: Direct-Access Sony Sony DSC 6.00 PQ: 0 ANSI: 0 CCS [254728.286070] sd 8:0:0:0: [sdb] 3973120 512-byte hardware sectors (2034 MB) [254728.287330] sd 8:0:0:0: [sdb] Write Protect is off [254728.287336] sd 8:0:0:0: [sdb] Mode Sense: 00 00 00 00 [254728.287342] sd 8:0:0:0: [sdb] Assuming drive cache: write through [254728.298707] sd 8:0:0:0: [sdb] 3973120 512-byte hardware sectors (2034 MB) [254728.299830] sd 8:0:0:0: [sdb] Write Protect is off [254728.299836] sd 8:0:0:0: [sdb] Mode Sense: 00 00 00 00 [254728.299840] sd 8:0:0:0: [sdb] Assuming drive cache: write through [254728.299850] sdb: sdb1 Pelas mensagens, possvel descobrir que foi plugada uma cmera digital da Sony, com um carto de memria de 2 GB com uma nica partio de dados, que foi detectada pelo sistema como "/dev/sdb1". Juntamente com a gerao das mensagens, o kernel cria uma pasta dentro do diretrio /sys ("/sys/block/sdb/sdb1 " no exemplo), contendo mais informaes sobre o dispositivo. Naturalmente, essas informaes no interessam muito ao usurio, que est apenas querendo acessar as fotos, e no ver detalhes sobre o nmero de blocos do carto ou sobre os endereos usados. Entram em cena ento sistemas de deteco, que monitoram estas informaes e executam as aes apropriadas. Em distribuies antigas o trabalho era feito atravs de shell-scripts, mas nas atuais entra em cena o HAL (Hardware Abstraction Layer), um servio de sistema que se encarrega de fazer o "trabalho

42 sujo", monitorando as informaes disponibilizadas pelo kernel (e no mais simplesmente monitorando os arquivos de log) e transmitindo as informaes para os aplicativos. Ele representado pelo servio "hald" (que fica ativo por padro na maior parte das distribuies atuais) e trabalha em conjunto com o servio "dbus", que controla a comunicao entre ele e os aplicativos. Caso esteja curioso, as informaes coletadas por ele podem ser exibidas usando o comando "lshal", que exibe a longa lista de informaes que monitorada pelos aplicativos. Se voc rodar o comando "ps aux | grep hald" em uma distribuio atual, vai perceber que existem vrias ramificaes do hald, responsveis por monitorar diferentes dispositivos da mquina. O "pooling /dev/sdb (every 2 sec)" no screenshot, por exemplo, indica que ele est monitorando o dispositivo da cmera, realizando checagens a cada dois segundos:

O HAL integrado a componentes do GNOME e do KDE, que se encarregam de mostrar mensagens quando novos dispositivos so plugados e executar outras funes. Ao plugar uma cmera digital, por exemplo, a presena de arquivos de imagem faz com que o utilitrio oferea a opo de abr-las diretamente com um gerenciador de fotos, em vez de simplesmente mostrar os arquivos:

No caso dos cartes de memria, pendrives e outros dispositivos de armazenamento removveis, as parties so montadas automaticamente em pastas dentro do diretrio "/media" e (na maioria das distribuies) criado um cone no desktop, acompanhado pela abertura de uma janela do gerenciador de arquivos. Ao clicar com o boto direito sobre o cone, voc tem a opo de desmontar a partio.

43

As parties so montadas de forma automtica conforme voc clica sobre os cones, sem que voc precise fornecer a senha de root. O HAL se encarrega de ajustar as permisses de acesso, de forma que os arquivos fiquem disponveis apenas para o seu login (os parmetros so detalhados no arquivo "/media/.hal-mtab"). Este sistema permite tambm manter a segurana em servidores de terminais e outros sistemas usados por diversos usurios simultaneamente. Voc vai notar ainda que as entradas referentes s parties de dispositivos removveis no so mais inseridas no fstab, uma vez que a montagem e a desmontagem feita diretamente pelo HAL. Alm de ser responsvel pelo acesso a dados em dispositivos removveis, o HAL utilizado em diversas outras funes do sistema. ele o responsvel por detectar quando um cabo de rede plugado e transmitir a informao ao NetworkManager, para que ele possa ativar a rede automaticamente, ou por fornecer as informaes sobre o hardware da mquina para que o gerenciador de drivers restritos do Ubuntu possa instalar os mdulos necessrios, por exemplo. Outro sistema que permite que as parties sejam montadas e desmontadas sem que voc precise fornecer a senha de root o "fuse", um mdulo do kernel que permite fazer uma montagem "particular". Ele usado por diversos aplicativos, entre eles o sshfs, que usado para montar pastas em servidores remotos via SSH. Concluindo, de vez em quando (sobretudo em mquinas com vrios HDs ou com um HD dividido em vrias parties de dados), voc vai notar que o boot demora bem mais do que o normal. Se voc desativar o splash (para ter acesso s mensagens exibidas no terminal), ver que a demora causada por mensagens como esta: /dev/sdb1 has been mounted 60 times without being checked, check forced. Ela ocorre devido a uma precauo do sistema contra a possibilidade de perda de arquivos devido a problemas na estrutura da partio. Todos os sistemas de arquivos atuais utilizam um sistema de journaling, que armazena uma lista das alteraes feitas. Sempre que a partio montada, o sistema verifica o journal, concluindo qualquer operao pendente, um teste rpido que no inteiramente prova de falhas. Para evitar a possibilidade de que pequenos problemas na estrutura da partio se acumulem at se tornarem um problema maior, o sistema executa um teste mais demorado periodicamente, sempre que a partio montada um determinado nmero de vezes. Como as parties so geralmente montadas durante o boot, nele que a demora se manifesta. possvel aumentar ou mesmo desativar o contador (usando o comando "tune2fs"), mas isso no muito recomendvel. O melhor nesse caso ter pacincia e simplesmente deixar o sistema fazer seu trabalho. Usando o Gparted

44 O Gparted uma espcie de particionador default no Linux. Ele vem pr-instalado em diversas distribuies, incluindo o Ubuntu, onde fica disponvel atravs do "Sistema > Administrao > Editor de Parties". Est disponvel tambm o Gparted Live, um live-CD enxuto, destinado unicamente a rodar o Gparted e assim oferecer uma ferramenta simples de particionamento do HD. Voc pode baix-lo no: http://gparted.sourceforge.net/download.php Por segurana, o Gparted se recusa a fazer modificaes em parties que esto montadas, o que um problema ao rod-lo a partir de uma instalao do sistema no HD, j que voc no tem como fazer alteraes na partio de instalao ou na partio home. A soluo utiliz-lo a partir de um live-CD, onde voc pode editar as parties sem limitaes. Se o HD possuir uma partio swap, bem provvel que ela seja montada pelo live-CD durante o boot e fique bloqueada no Gparted. Para solucionar isso, use (como root) o comando "swapoff" seguido pela partio swap, como em: # sudo swapoff /dev/sda5 De volta ao Gparted, clique no "Gparted > Atualizar Dispositivos" para que ele detecte a alterao e desbloqueie a edio. O mesmo se aplica a pendrives e cartes de memria, que so montados automaticamente quando plugados na maioria das distribuies atuais. necessrio desmontar as parties antes que voc consiga alter-las no Gparted. Assim como em outros particionadores, a interface baseada em um "mapa" do HD, que mostra as parties disponveis e o espao ocupado em cada uma; informao bastante til na hora de redimensionar parties. Clicando com o boto direito sobre a partio, voc tem acesso ao menu de aes, que inclui as opes para deletar a partio, reformat-la em outro sistema de arquivos ou redimension-la.

Voc pode usar o gparted para redimensionar a partio do Windows e liberar espao para a criao das parties Linux, que , justamente, um dos usos mais comuns. Para redimensionar, clique na partio e em seguida sobre a opo "Redimensionar/Mover", onde voc pode ajustar o novo tamanho da partio.

45

Ele capaz de redimensionar tanto parties FAT32 quanto NTFS e o processo bastante seguro. A nica exigncia que, antes de redimensionar, voc precisa desfragmentar a partio (reinicie e use o defrag do prprio Windows) para que os dados fiquem agrupados no incio da partio e o Gparted possa fazer seu trabalho sem riscos. Caso a partio no esteja desfragmentada, ou contenha erros diversos, ele aborta a operao para evitar qualquer possibilidade de perda de dados. No Windows XP, o processo de redimensionamento bastante tranquilo, com o sistema continuando a iniciar normalmente depois da alterao. No Windows Vista, entretanto, a checagem de hardware executada pelo sistema a cada boot dispara uma mensagem de erro no boot seguinte, reclamando que a inicializao do sistema falhou e que uma mudana no hardware da mquina pode ser a causa. Para resolver o problema, necessrio recuperar o sistema usando o DVD de instalao. D um boot normal, como se fosse reinstalar o sistema e, depois da seleo de linguagem, use a opo "Reparar o computador". Isso faz com que ele verifique a partio e faa as atualizaes necessrias. A partir da, basta clicar no "Reparar e reiniciar". Continuando, voc notar que, na maioria dos casos, algumas das opes de sistemas de arquivos ficam desativadas no menu. Isso acontece por que o Gparted , na verdade, uma interface grfica para vrios aplicativos de modo texto, que fazem o trabalho pesado. Ele precisa do pacote "ntfsprogs" para manipular parties NTFS, do "reiserfsprogs" para manipular parties ReiserFS e assim por diante. Ao ser aberto, ele verifica quais so os sistemas de arquivos suportados pelo sistema e desativa os demais:

46 Ao criar novas parties, voc tem a opo de criar uma partio primria ou uma partio lgica. Como comentei anteriormente, a regra bsica que voc pode ter apenas 4 parties primrias, ou at 3 parties primrias e mais uma partio estendida, contendo vrias parties lgicas. O mais comum criar uma partio para a instalao do sistema no incio do HD, seguida pela partio swap e pela partio home (ou outras parties destinadas a armazenarem arquivos). No caso do Linux, no faz muita diferena se o sistema instalado em uma partio primria ou em uma partio lgica, mas ao instalar o Windows em dual-boot, sempre importante instal-lo em uma partio logo no incio do HD (caso contrrio ele atribuir letras s parties Linux no incio do HD, criando problemas na instalao de diversos programas, que esperam que o Windows esteja instalado no C:\).

As alteraes no so feitas automaticamente. Depois de revisar tudo, clique no "Aplicar" para que as modificaes sejam aplicadas. Clicando no "Detalhes", voc pode acompanhar os passos que esto sendo executados. Outra dica que voc pode "limpar" a MBR de pendrives e HDs, eliminando todas as parties e qualquer gerenciador de boot instalado anteriormente, limpando os primeiros 512 bytes do dispositivo, que correspondem ao MBR. Isso pode ser feito rapidamente usando o comando dd, como em: # dd if=/dev/zero of=/dev/sdd bs=512 count=1 Esse comando faz com que o dd escreva, cirurgicamente, 512 bytes no primeiro setor do dispositivo indicado, limpando o setor de boot e a tabela de parties. preciso tomar extremo cuidado ao usar este comando, pois se usado no seu HD de trabalho, voc vai simplesmente apagar todas as parties. Cheque e recheque qual o device correto da unidade que deseja limpar antes de executar o comando. possvel tambm remover apenas o gerenciador de boot (em casos em que voc instalou o sistema em um pendrive e agora no consegue se livrar da cpia do grub instalada nele, por exemplo), limpando apenas os primeiros 446 bytes. Nesse caso, preservada a tabela de particionamento, que armazenada nos 66 bytes seguintes: dd if=/dev/zero of=/dev/sdd bs=446 count=1 Ao acessar o dispositivo no Gparted (aps usar o comando), ele aparecer como "espao no alocado". Para particion-lo novamente e voltar a us-lo, use a opo "Dispositivo > Criar Tabela de Partio...", para que ele recrie a tabela de parties:

47

Outra dica que, em muitos micros, preciso reiniciar depois de modificar o particionamento do HD para que o sistema seja capaz de perceber as alteraes. A limitao neste caso o BIOS da placa-me, que em muitos casos s capaz de ler a tabela de parties do HD durante o boot. Concluindo, os sistemas de arquivos so sempre uma fonte comum de dvidas, vamos ento a um resumo rpido sobre o tema: FAT16: O FAT16 um dos sistemas de arquivos mais simples ainda na ativa. Devido ao uso de endereos de 16 bits, ele pode ser usado em parties de no mximo 2 GB. Devido simplicidade, ele suportado por cmeras, mp3players, celulares e diversos outros tipos de dispositivos, da o uso em cartes de memria. FAT32: similar ao FAT16, mas usa endereos de 32 bits, o que permite o uso de parties maiores. O FAT32 uma espcie de mnimo mltiplo comum entre os sistemas de arquivos, pois as parties podem ser acessadas sem dificuldades tanto no Windows quanto no Linux. Por outro lado, ele possui diversas limitaes, incluindo a ausncia de suporte permisses, enorme tendncia fragmentao e o limite de 4 GB para o tamanho dos arquivos. EXT2: Foi o primeiro sistema de arquivos a ser usado em larga escala no Linux. O grande defeito que ele no possui suporte a journaling, o que obriga o sistema a fazer uma demorada verificao cada vez que o PC desligado incorretamente, alm de aumentar a possibilidade de perda de dados. considerado obsoleto e raramente usado hoje em dia. EXT3: o sucessor do EXT2 e o sistema de arquivos usado por padro em praticamente todas as distribuies Linux atuais. A principal diferena entre os dois que o EXT3 suporta o uso de journaling, que permite que o sistema de arquivos mantenha um relatrio de todas as operaes e possa ser recuperado muito rapidamente em caso de pane, ou quando o PC desligado no boto. Ele tambm um dos sistemas de arquivos mais rpidos e oferece uma boa segurana contra perda de dados. ReiserFS: O ReiserFS foi o principal concorrente do EXT3 nos primeiros anos. Ele oferece uma boa tolerncia contra falhas, um bom desempenho e um bom gerenciamento de arquivos pequenos. O grande problema que o ReiserFS v3 (a verso usada na maioria das distribuies) no recebe grandes atualizaes h muitos anos e o desenvolvimento da verso 4 est paralisado. Isso faz com que ele no seja uma boa opo hoje em dia. NTFS: o sistema de arquivos usado por padro a partir do Windows XP. Ele oferece muitas melhorias sobre o antigo FAT32 e suporta o uso de parties maiores. At recentemente, no existia suporte de escrita em parties NTFS no Linux, o que dificultava a vida de quem usava os dois sistemas em dual-boot, mas isso foi solucionado com o NTFS-3G, que usado por padro na maioria das distribuies atuais. XFS e JFS: Estes so dois sistemas de arquivos muito usados em servidores, que oferecem vantagens sobre o EXT3 em algumas reas. O XFS permite redimensionar parties sem desligar o sistema e oferece um suporte aprimorado a quotas de disco, enquanto o JFS oferece um melhor

48 desempenho em algumas tarefas comuns em servidores, por exemplo. Entretanto, eles no so muito recomendveis para uso em desktops, onde o EXT3 uma soluo muito mais simples. EXT4: o sucessor do EXT3, que comeou a ser usado a partir do incio de 2009. Ele incorpora diversas melhorias, incluindo um novo sistema de alocao de espao, que reduz a fragmentao dos arquivos, melhorias no desempenho e suporte a arquivos de at 16 terabytes (contra o mximo de 2 terabytes do EXT3). prudente aguardar at que ele comece a ser usado por default nas principais distribuies antes de comear a us-lo. Linux-Swap: a opo destinada a criar uma partio swap. Diferente do Windows, onde o swap feito em um arquivo, no Linux usada um partio separada, que utiliza um sistema de arquivos otimizado para a tarefa. O X e as interfaces Outro componente base do sistema, usado em todas as distribuies, o servidor grfico, o famoso "X". Antes do X, o Linux tinha apenas a velha interface de modo texto, o que explicava o fato de ele ser popular apenas entre programadores e administradores de sistemas. Diferentemente do que temos no Windows, onde a interface grfica um componente essencial do sistema, no Linux o modo grfico uma camada independente. Temos um "servidor grfico", o X, que prov a infra-estrutura necessria. ele que controla o acesso placa de vdeo, l as teclas digitadas no teclado e os clicks do mouse, e oferece todos os recursos necessrios para os programas criarem janelas e mostrarem contedo na tela. Se voc chamar o X sozinho, a partir do modo texto (o que pode ser feito com o comando "X" ou "X :2" caso voc queira abrir uma segunda seo), voc ver apenas uma tela cinza, com um X que representa o cursor do mouse. Em outras palavras, o X apenas uma base, ele sozinho no faz muita coisa:

Se voc cham-lo com o comando "xinit" ou "xinit -- :2", ele abrir junto uma janela de terminal, que poder ser usada para abrir programas. Porm, ao abrir qualquer programa grfico, voc perceber que algo est estranho. A janela do programa aberta, mas fica fixa na tela; voc no tem como minimiz-la, alternar para outra janela, nem nenhuma outra opo. Isto acontece porque estas tarefas so controladas pelo gerenciador de janelas, que (em quase todas as distribuies) no carregado com o comando xinit. Chamando o X atravs do comando "startx", ou configurando o sistema para carregar o X automaticamente durante a inicializao (que o default em praticamente todas as distribuies), finalmente carregamos o conjunto completo, com o X e um desktop completo rodando sobre ele; um ambiente de trabalho mais produtivo:

49

Existem inmeros gerenciadores de janelas diferentes para o Linux, uma lista que inclui o LXDE, FluxBox, Window Maker, XFCE, Enlightenment e muitos outros. Depois deles, temos o KDE e o GNOME, que se enquadram em uma categoria parte: a dos ambientes desktop (desktop environment, ou DE). Em vez de se limitarem a serem apenas gerenciadores de janelas, eles incluem um enorme conjunto de componentes e de aplicativos, desenvolvidos de forma a oferecerem um ambiente de trabalho consistente, onde todos os aplicativos se comportam de forma similar, compartilham do mesmo tema visual, utilizam os mesmos atalhos de teclado e assim por diante. Eles incluem tambm bibliotecas e ferramentas de desenvolvimento, que oferecem um ambiente completo para quem desenvolve aplicativos. O KDE segue uma abordagem mais configurvel, oferecendo um grande volume de opes de configurao e uma interface mais parecida com a do Windows. O GNOME, por outro lado, segue a linha do Mac OS X, oferecendo um ambiente mais simples (porm no necessariamente mais leve), com menos opes de configurao. A vantagem da abordagem do GNOME que o ambiente mais amigvel para novos usurios, mas, por outro lado, ele acaba desagradando muitos usurios antigos, que sentem falta de um ambiente mais configurvel, como no KDE. A vantagem de ter dois ambientes diferentes que voc pode escolher qual usar, exercitando sua liberdade de escolha. Nada impede tambm que voc rode aplicativos do KDE (como o Konqueror e o K3B) sobre o GNOME, ou vice-versa, utilizando os melhores componentes de cada ambiente. O problema em misturar aplicativos que seu ambiente de trabalho deixa de ser consistente, j que os aplicativos do KDE utilizam um conjunto de configuraes diferentes das do GNOME. Voc acaba tendo ento que configurar os aplicativos das duas famlias de forma distinta, usando o kcontrol ou o Systemsettings para ajustar as configuraes dos aplicativos do KDE e o gnomeappearance-properties (e os demais aplicativos do painel de preferencias do GNOME) para ajustar as configuraes dos aplicativos do GNOME: Configuraes diferentes para os aplicativos do GNOME e do KDE Existe ainda o problema do desempenho. Misturando aplicativos dos dois ambientes o sistema

50 precisa manter as duas bibliotecas carregadas, o que consome mais memria RAM e processamento. Os prprios aplicativos demoram mais para carregar "fora de casa", pois preciso primeiro carregar as bibliotecas e outros componentes necessrios para depois comear o carregamento do aplicativo em si. Um exemplo clssico o Konqueror, que abre quase que instantaneamente no KDE, mas pode demorar quase 10 segundos para carregar no GNOME. Essas dificuldades fazem com que a maioria das distribuies dem preferncia para um dos dois ambientes, priorizando os aplicativos e ferramentas de configurao desenvolvidas para ele. Isso explica por que o Ubuntu centralizado em torno de aplicativos do GNOME, enquanto no Kubuntu eles so substitudos por aplicativos similares da famlia do KDE, por exemplo. Isso acaba pesando na escolha da distribuio: se voc prefere o KDE, vai se sentir mais vontade usando o Mandriva ou o Kubuntu do que usando o Ubuntu ou o Fedora, por exemplo; e vice-versa. Pesquisando sobre o KDE por a, voc encontrar referncias a um problema relacionado licena da biblioteca Qt, que leva muitos a dizerem que o KDE "no livre" at os dias de hoje. Em 1997, quando o KDE comeou a ser desenvolvido, a biblioteca Qt era de uso gratuito, mas no tinha o cdigo aberto, o que gerou uma grande polmica e levou ao surgimento do GNOME, baseado na biblioteca GTK (que j era largamente utilizada em aplicativos como o Gimp). Com o crescimento do KDE e a possibilidade de formar uma grande comunidade de desenvolvedores, que impulsionariam o desenvolvimento e o uso da sua biblioteca, a TrollTech resolveu liberar a Qt sob a GPL em setembro de 2000, o que removeu este entrave inicial. Em 2009, a Qt foi licenciada sob a LGPL, que uma licena ainda mais liberal, que permite o uso tambm em aplicativos de cdigo fechado. Assim como em outros casos, tanto o KDE quanto o GNOME passaram por muitas mudanas ao longo de sua histria. O KDE passou por 3 grandes transformaes: do KDE 1 para o KDE 2, do KDE 2 para o KDE 3 e, mais recentemente, do KDE 3 para o KDE 4, que trouxe uma interface quase que completamente redesenhada e um novo painel de controle. Por ser baseado em uma verso diferente da biblioteca Qt, o KDE 4 trouxe tambm verses diferentes dos aplicativos, que precisaram ser portados. Muitos dos aplicativos usados no KDE 3 foram abandonados no processo, sendo substitudos por outros. O GNOME tambm passou por uma grande transformao com o lanamento do GNOME 2 em 2002, que marcou a migrao da biblioteca GTK para a GTK2, uma verso atualizada que, embora mais pesada, oferece bem mais funes. Assim como no caso do KDE 4, a migrao resultou em grandes mudanas na interface e nas opes de configurao. De l pra c, o GNOME passou a evoluir de maneira gradual, mantendo um ambiente mais ou menos consistente entre as verses. Esta estabilidade foi um fator que ajudou no crescimento e na popularizao da interface. Gerenciador de login Antigamente, era muito comum dar boot em modo texto e deixar para abrir o X manualmente rodando o comando "startx" apenas quando necessrio, pois os PCs eram lentos e o X demorava para abrir. Atualmente, o mais comum usar um gerenciador de login, como o KDM (do KDE) ou o GDM(do GNOME). O gerenciador de login tem a importante funo de carregar o X, mostrar uma tela de login grfica e, a partir dela, carregar o ambiente grfico. Quando o gerenciador de login fechado (ou deixa de funcionar por qualquer motivo), todo o ambiente grfico deixa de funcionar, jogando-o de volta ao terminal em texto.

51

O gerenciador de login aberto como um servio de sistema, da mesma forma que o Apache e outros servidores. Voc pode parar o KDM e assim fechar o modo grfico usando o comando "/etc/init.d/kdm stop" e reabri-lo a partir do modo texto com o comando "/etc/init.d/kdm start". No caso do GDM, so usados os comandos "/etc/init.d/gdm stop" e "/etc/init.d/gdm start". Como sempre, tudo aberto atravs de um conjunto de scripts. O KDM guarda a base das configuraes no arquivo "/etc/kde3/kdm/kdmrc" (ou "/usr/share/config/kdm/kdmrc", dependendo da distribuio) e coloca um conjunto de scripts de inicializao, um para cadainterface instalada, dentro da pasta "/usr/share/apps/kdm/sessions/". A configurao do kdmrc permite as opes da tela de login, que vo desde opes cosmticas at a opo de aceitar que outras mquinas da rede rodem aplicativos remotamente, via XDMCP. Ao fazer login, executado o script correspondente interface escolhida. Ao usar o KDE, por exemplo, executado o script "/usr/share/apps/kdm/sessions/kde". At mesmo o comando startx um script, que geralmente vai na pasta "/usr/X11R6/bin/". Voc pode alter-lo para carregar o que quiser, mas normalmente ele carrega o gerenciador especificado no arquivo .xinitrc, dentro da pasta home do usurio. Naturalmente, tudo isso se aplica apenas a situaes onde voc quer alterar a configurao do sistema manualmente. Voc pode tambm alterar as configuraes do KDM atravs do systemsettings, no "Avanado > Gestor de Autenticao". No GNOME, voc pode alterar as configuraes do GDM usando o "gdmsetup", disponvel no "Sistema > Administrao > Janela de incio de sesso":

Ele permite ativar o login automtico, liberar o login como root (o que no aconselhvel do ponto de vista da segurana, mas acaba sendo uma questo de honra para alguns), alterar o aspecto visual ou mesmo ativar o uso do XDMCP, que o sistema de acesso remoto suportado

52 nativamente pelo X. Embora tenha cado em popularidade devido ao uso do SSH, ele ainda bastante usado. Em geral, as distribuies que utilizam o KDE como interface padro usam o KDM, enquanto as que utilizam o GNOME preferem o GDM. Isto tem a ver com o problema das bibliotecas: ao carregar apenas um programa baseado nas bibliotecas do KDE dentro do GNOME ou vice-versa, so carregadas todas as bibliotecas correspondentes, no h o que fazer. O programa demora mais para abrir, e no final, o sistema acaba consumindo muito mais memria.

Xkill e processos Embora o kernel Linux seja extremamente estvel, a ponto de ser usado em sistemas de misso crtica, o mesmo no se aplica, necessariamente, a todos os inmeros aplicativos que usamos no dia a dia. Tanto o GNOME quanto o KDE so plataformas bastante complexas, compostas por um nmero muito grande de componentes que trocam informaes entre si. No de se estranhar que, s vezes, algo d errado. Para complicar, o rpido desenvolvimento do sistema e a necessidade por novos aplicativos acabam fazendo com que, muitas vezes, as distribuies tragam aplicativos ainda em estgio beta, ou que ainda no estejam completamente estveis, o que acaba resultando em travamentos ou em outros problemas diversos. A vantagem do Linux neste ponto que voc quase nunca precisar reiniciar todo o sistema, basta matar o aplicativo problemtico, ou, no pior dos casos, reiniciar o ambiente grfico. A forma mais prtica de finalizar aplicativos usar o xkill, o "matador de programas" includo no X. Ele pode ser chamado pressionando "Ctrl+Alt+Esc", chamando o comando "xkill" usando o "Alt+F2" (que abre a janela do "Executar aplicativo") ou diretamente atravs do terminal. Ao ativar o xkill, o cursor do mouse vira um X (ou uma caveira, de acordo com a distribuio) e basta clicar sobre a janela do aplicativo travado para encerr-lo na marra:

O xkill simplesmente finaliza a primeira janela sobre a qual clicar, sem nenhuma confirmao adicional, por isso importante cham-lo com a janela em vista. Voc pode "desarmar" o xkill depois de ativado, usando o boto direito do mouse. Uma observao importante que, por default, o Ubuntu (pelo menos at a verso 8.10) no oferece um atalho de teclado para matar aplicativos travados usando o xkill, diferente de outras distribuies, onde usado o "Ctrl+Alt+Esc". Com isso, voc acaba sendo obrigado a pressionar Alt+F2 e rodar o comando "xkill" manualmente, o que no muito prtico. Aplicativos travados so um problema que ocorre mesmo nas melhores famlias, por isso uma forma rpida de acabar com eles acaba sendo importante. Vamos ento explicao de como recriar o atalho para o xkill no Ubuntu, aproveitando para falar sobre a configurao de atalhos no GNOME. A maneira tradicional de definir atalhos no GNOME usar o "System > Preferncias > Atalhos de teclado", onde voc pode especificar as teclas de atalho para um conjunto de aes pr-definidas:

53

O problema que o atalho para o xkill no est disponvel na lista, o que nos obriga a adotar o procedimento manual. Para isso, comece abrindo o "gconf-editor" usando o Alt+F2 (ou atravs do terminal). Dentro dele, acesse o "/apps/metacity/keybinding_commands" e, no campo "command_1" especifique "/usr/bin/xkill", que o caminho completo para o comando:

Em seguida, acesse o "/apps/metacity/global_keybindings" e especifique o atalho de teclas que acionar o comando, como em "<Ctrl>Escape" (Ctrl+Esc), "<Ctrl><Shift>K" (Ctrl+Shift+K) ou outro atalho que preferir. Como comentei anteriormente, o default o "Ctrl+Alt+Esc", mas no GNOME o atalho j usado para alternar entre as janelas, por isso voc vai primeiro precisar redefin-lo se quiser dedic-lo ao xkill):

Voc pode usar essa mesma dica para definir atalhos para outros aplicativos, basta usar outros campos disponveis no "apps/metacity/keybinding_commands" para indicar o comando e, em seguida, especificar o atalho de teclado no "apps/metacity/global_keybindings". Voltando questo dos aplicativos travados, em situaes mais graves, onde o mouse parar de responder e o ambiente grfico ficar congelado, voc pode reiniciar o X (o que reabre toda a

54 parte grfica) pressionando "Ctrl+Alt+Backspace". Embora voc possa perder arquivos no salvos, esta uma soluo muito menos radical (e mais rpida) do que reiniciar o micro no boto. Outra opo mudar para um dos terminais de texto puro, pressionando Ctrl+Alt+F1 (ou qualquer outra das teclas F, at a F6) e finalizar o aplicativo que est bloqueando o ambiente grfico. Se voc sabe qual o culpado (ou pelo menos suspeita quem seja), pode finaliz-lo usando o comando "killall", como em "killall totem" ou "killall firefox" O problema com o killall que, em muitos casos, o comando para fechar o programa no o mesmo que seu nome. Para os casos onde voc no souber o nome correto do programa, existe o comando "ps", que mostra todos os processos abertos. Existem vrias opes para este comando; a que costumo usar mais frequentemente "ps x | more", que mostra todos os processos iniciados usando o seu login de usurio, sempre dando uma pausa quando a lista encher a tela:

Na lista, os nomes dos aplicativos aparecem na coluna da direita. Veja que, em muitos casos, o mesmo programa aparece vrias vezes; seja porque voc abriu vrias instncias, seja por ele realmente ser dividido em vrios processos diferentes. A boa notcia que o killall se encarrega de acabar com todos. Na coluna da esquerda est o PID de cada processo, um nmero de identificao que pode ser usado em conjunto com o comando kill para matar um processo especfico, como em "kill 4060". Muitos aplicativos aparecem na lista com nomes gigantes, de forma que mais fcil fech-los pelo nmero. Em casos mais extremos, de aplicativos rebelados que no respondam ao chamado do killall ou do kill, voc pode resolver o problema adicionando um "-9" no comando, como em: # kill -9 6340 A diferena entre o "kill" ou o "killall" e o "kill -9" que no primeiro caso o sistema envia um "bilhete azul" ao aplicativo, solicitando que ele desocupe o lugar. O "kill -9", por sua vez, um comando que orienta o sistema a fechar o aplicativo na marra, mandando os seguranas para remov-lo fora. Alm do "ps -x", voc pode tentar o "ps -aux", que inclui todos os processos ativos. A lista sempre longa, pois inclui todos os servios e componentes do sistema que so carregados automaticamente durante o boot. Outro programa de texto com a mesma funo o pstree. Ele mostra os processos na forma de uma rvore, permitindo que voc veja como eles se relacionam. Como em outros casos, voc pode tambm acompanhar os aplicativos de uma maneira mais amigvel usando os monitores de sistema. Se voc estiver no KDE, pode gerenciar os processos de uma forma muito mais amigvel usando o Ksysguard. Basta procurar por ele no iniciar ou pressionar "Ctrl+Esc" para abri-lo. No GNOME, est disponvel o "Monitor de Sistema", que pode ser aberto atravs do "Sistema > Administrao", ou usando o comando "gnome-system-monitor". Alm de mostrar os aplicativos ativos e oferecer a opo de finaliz-los, ele inclui tambm informaes sobre o uso do processador, uso de memria e at mesmo sobre o espao livre nas parties:

55

Outra opo importante a "Alterar prioridade", que serve como uma interface para o comando "nice", que permite ajustar o nvel de prioridade do aplicativo em relao aos demais. Por default, todos os aplicativos (com exceo de alguns componentes do sistema) utilizam o valor "0", o que os coloca todos no mesmo nvel. Uma boa maneira de evitar que aplicativos que consumam muito processamento (como ao converter vdeos) deixem o sistema lento, simplesmente ajustar a opo, usando um valor mais alto, entre 5 e 10. Isso faz com que o aplicativo seja mais bonzinho e passe a usar os ciclos ociosos de processamento, sem atrapalhar os outros:

Boot, servios e arquivos de inicializao Ao ligar o micro, o primeiro software que carregado o BIOS da placa-me. Ele faz a contagem da memria RAM e realiza uma checagem rpida dos dispositivos instalados. Depois de fazer seu trabalho, o BIOS carrega o sistema operacional, que pode ser carregado a partir de diversas fontes, incluindo o HD, um CD-ROM ou DVD, um pendrive, ou at mesmo via rede (como feito no LTSP e em outros sistemas de terminais leves), respeitando a ordem definida na configurao do Setup. No caso dos HDs, lido o primeiro setor do disco rgido, o famoso "Master Boot Record" ouMBR. Nele gravado o gerenciador de boot, que o responsvel pelo carregamento do sistema. a presena dele que permite que voc instale mais de um sistema operacional no mesmo micro e possa escolher entre eles na hora do boot. No Linux, o gerenciador mais usado o grub (com uma pequena participao do lilo), enquanto no Windows, usado o NTLDR. O MBR tem espao para apenas um gerenciador de boot, por isso preciso prestar ateno na configurao ao instalar vrios sistemas, j que, por default, cada sistema subscreve o gerenciador de boot do anterior ao ser instalado. Apesar de sua vital importncia, o MBR engloba um nico setor do HD, meros 512 bytes. Devido a isso, ele , na verdade, usado para armazenar apenas um bootstrap, um pequeno software que instrui o BIOS a carregar o executvel do gerenciador de boot em um ponto especfico do HD. O bootstrap do gerenciador de boot utiliza os primeiros 446 bytes do MBR. Os 66 bytes restantes so usados para armazenar a tabela de parties, que guarda informaes sobre onde cada partio comea e termina. Programas de particionamento, como o cfdisk, nada mais fazem do que alterar as informaes na tabela de parties. Quando ela perdida ou danificada (seja qual for o

56 motivo), todas as parties desaparecem e voc precisa ir atrs de um programa de recuperao de dados. O gerenciador de boot tem a funo de carregar o kernel e, a partir dele, todo o restante do sistema. Tanto o grub quando o lilo podem ser configurados para carregar tambm o Windows ou outros sistemas instalados em dual-boot ou multi-boot. A maioria das distribuies atuais configuram isso automaticamente durante a instalao. Inicialmente, o kernel um arquivo compactado e somente-leitura, o "/boot/vmlinuz". Logo no incio do boot, ele descompactado em uma rea reservada da memria RAM e roda a partir da, aproveitando o fato de que a memria RAM muito mais rpida que o HD. Este executvel principal do kernel nunca alterado durante o uso normal do sistema, ele muda apenas quando voc recompila o kernel manualmente ou instala uma nova verso. Depois de carregado, a primeira coisa que o kernel faz montar a partio raiz, onde o sistema est instalado, inicialmente como somente-leitura. Neste estgio ele carrega o init, o software que inicia o boot normal do sistema, lendo os scripts de inicializao e carregando os mdulos e softwares especificados neles. O arquivo de configurao do init o "/etc/inittab". Ele geralmente o primeiro arquivo de configurao lido durante o boot. Todas essas etapas so realizadas por scripts, localizados na pasta "/etc/init.d", que executam os comandos apropriados para inicializar os servios e executar as demais operaes necessrias. Alguns deles so executados apenas durante o boot (verificando alguma configurao, por exemplo), enquanto outros inicializam servios que ficam ativos continuamente. Um bom exemplo o cups, que o servio responsvel pelo suporte a impresso. Ele usado tanto para imprimir em impressoras locais quando em impressoras de rede e usado tambm quando voc precisa compartilhar a impressora com outras mquinas da rede. Ele vem instalado por padro em quase todas as distribuies e controlado atravs do script "/etc/init.d/cups" (ou "/etc/init.d/cupsys", dependendo da distribuio). Se voc quisesse desativ-lo temporariamente, por exemplo, usaria: # /etc/init.d/cups stop Para ativ-lo novamente depois, usaria: # /etc/init.d/cups start O mesmo se aplica a quase todos os outros servios, como no caso do "samba" (responsvel pelo compartilhamento de arquivos), o "bluetooth" (responsvel pelo suporte a transmissores Bluetooth) e assim por diante. Eles so tambm chamados de "daemons", um termo usado em relao a servios que ficam ativos continuamente, executando alguma funo. O que determina se cada servio vai ser ou no ativado durante o boot, no o fato de estar ou no instalado, mas sim, a presena de um link simblico criado dentro de uma das pastas de inicializao do sistema. Por padro, so executados primeiro os links que esto dentro da pasta "/etc/rcS.d/" (que inclui os servios essenciais, executados logo no incio do boot) e, em seguida, os links dentro da pasta "/etc/rc5.d/", que inclui os demais servios. O nmero (5 no exemplo) indica o runlevel que ser usado, que pode ser um valor de 1 a 5. Cada runlevel corresponde a uma pasta, com um conjunto diferente de scripts de inicializao. Esta foi uma forma encontrada pelas distribuies para ter vrios "profiles", que podem ser usados de acordo com a situao. A configurao mais comum usar o runlevel 1 como um modo de recuperao, no qual apenas os servios essenciais para concluir o boot so carregados, sem ambiente grfico e sem suporte a rede. Hoje em dia, o runlevel 1 pouco usado, pois mais fcil corrigir problemas dando boot com um live-CD e resolvendo os problemas atravs dele, mas a possibilidade continua disponvel. Em seguida temos o runlevel 3, onde quase todos os servios so carregados, com exceo do ambiente grfico (este modo muito usado em servidores). Finalmente, temos o runlevel 5, que

57 corresponde ao modo "normal", onde o ambiente grfico carregado, junto com todos os outros servios. Como em outros casos, existem variaes; o Slackware, por exemplo, utiliza o runlevel 4 para carregamento do ambiente grfico, enquanto o Ubuntu usa um sistema completamente diferente. Usando o runlevel 5, so carregados os scripts colocados dentro da pasta "/etc/rc5.d/", enquanto que, usando o runlevel 3, so carregados os scripts dentro da pasta "/etc/rc3.d/". Nada impede que voc modifique a organizao dos arquivos manualmente, de forma a fazer o X carregar tambm no runlevel 3, ou qualquer outra coisa que quiser. So apenas pastas com scripts e links simblicos e no uma caixa preta. possvel executar praticamente qualquer tipo de comando ou programa nesta etapa, justamente por isso os passos executados durante o boot mudam de distribuio para distribuio, de acordo com o que os desenvolvedores consideram mais adequado. Uma distribuio que carregue mais servios, pode oferecer mais recursos e executar mais funes automaticamente, enquanto outra, que inicialize apenas os componentes essenciais, pode consumir menos memria e oferecer um melhor desempenho em micros antigos, por exemplo. O Ubuntu inaugurou o uso de um novo sistema de inicializao, batizado de Upstart (http://upstart.ubuntu.com/). Nele, o processo de inicializao simplificado (embora tambm perca parte da flexibilidade) e deixa de existir diferena entre os runlevels de 2 a 5, que passam a utilizar a mesma configurao, carregando o ambiente grfico por default, o que essencialmente elimina a diferenciao entre os modos. Se voc tiver a curiosidade de rodar o comando "runlevel", que mostra qual runlevel est sendo usado, ele reportar: $ runlevel N2 Em outras distribuies, o runlevel 2 configurado como um modo de recuperao, sem suporte a rede nem ambiente grfico, mas no Ubuntu ele o nvel padro, onde so carregados todos os servios. Se voc verificar a configurao dos modos 3, 4 e 5, vai perceber que a configurao a mesma em todos eles. Outro sintoma do uso do Upstart que o arquivo "/etc/inittab" deixa de existir, dando lugar ao "/etc/event.d/rc-default", que passa a ser o novo responsvel por disparar o processo de inicializao do sistema. O utilitrio padro para a configurao dos servios no Ubuntu o services-admin, disponvel no "Sistema > Administrao > Servios":

O problema que ele mostra apenas um conjunto de servios considerados "opcionais", escondendo diversos servios que so considerados componentes essenciais do sistema, como por exemplo o cups. Se voc quiser ver a lista completa, pode dar uma olhada no contedo da pasta "/etc/rc2.d":

58 Naturalmente, voc s deve se meter a desativar os servios no listados no services-admin se souber o que est fazendo, j que a maior parte deles so mesmo componentes importantes. Desativando o dbus, por exemplo, boa parte das funes de deteco de hardware, juntamente com diversos programas que o utilizam para trocar mensagens, deixam de funcionar. Para desativar os servios manualmente, use o comando "update-rc.d -f nome remove", como em: # update-rc.d -f cups remove Ele remove os links que apontarem para o servio em todas as pastas de inicializao, fazendo com que ele deixe de ser carregado durante o boot. Se voc quiser desativar o servio na hora, pode desativ-lo usando o comando "/etc/init.d/nome stop", como em "/etc/init.d/cups stop". Para reativar a inicializao do servio posteriormente, use o comando "update-rc.d -f nome defaults", como em: # update-rc.d -f cups defaults Ele recria os links simblicos, restaurando a configurao original. Estes mesmos comandos podem ser usados em outras distribuies derivadas do Debian. No caso do Mandriva e do Fedora, usado o comando "chkconfig", como em "chkconfig nome on" (ativa) e "chkconfig nome off" (desativa). Opes para solucionar problemas Em quase todas as distribuies, possvel especificar opes adicionais durante o boot. Estas opes so repassadas diretamente ao kernel, alterando seu comportamento ou desativando recursos que podem fazer com que o sistema trave durante o boot, ou que faam determinados componentes no serem reconhecidos. No Ubuntu, por exemplo, voc pode acessar a linha de opes para o kernel pressionando a tecla F6 na tela de boot:

Voc pode combinar vrias opes, caso necessrio, especificando de uma vez vrias opes para solucionar problemas comuns (acpi=off, noapic, nolapic, etc.) de maneira a tentar fazer a mquina terminar o boot e, a partir da, ir testando uma a uma para descobrir qual delas resolveu o problema. Todas estas opes possuem efeitos colaterais, de forma que elas no servem para otimizar ou melhorar o desempenho do sistema, so apenas uma forma de solucionar problemas em casos especficos. Vamos ento a uma lista das opes disponveis, que voc pode usar como fonte de consulta para quando tiver problemas: acpi=off: Esta opo desativa o ACPI, corrigindo problemas diversos de boot em muitas mquinas. O ACPI o responsvel pelo monitoramento da carga da bateria, ajuste da frequncia do processador e muitas outras funes importantes, de maneira que voc deve deixar para desativlo apenas em ltimo caso. acpi=noirq: Esta uma verso mais light da opo "acpi=off", que ao invs de desativar completamente a funo, desativa apenas a atribuio dinmica de endereos, que a causa de uma grande parte dos problemas relacionados ao ACPI. Esta opo corrige problemas na deteco da placa de rede, placa de som e placa wireless em diversos notebooks da Acer, Positivo e de outros fabricantes, alm de problemas em diversas placas-me com chipset SiS ou ATI, causados por bugs na atribuio de endereos por parte do BIOS.

59 Uma observao importante que, embora corrija problemas em algumas placas e notebooks, esta opo cria problemas de deteco de componentes e conflitos em outros, fazendo com que a placa wireless ou perifricos USB no sejam detectados, por exemplo. Voc deve us-la apenas como forma de solucionar problemas, nunca como uma opo de rotina. noapic: O APIC um recurso usado nos micros modernos para atribuir endereos de IRQ, evitando conflitos entre os dispositivos. Entretanto, muitos PCs usam BIOS com bugs diversos, que atribuem os endereos incorretamente. O resultado mais comum que alguns perifricos no sejam detectados pelo sistema, como nos misteriosos casos onde a placa de som ou a placa de rede no so detectados no Linux. Usar esta opo soluciona o problema em muitas situaes. Note que, em muitos casos, a melhor forma de corrigir de forma definitiva este tipo de problema atualizar o BIOS da placa-me, j que uma verso corrigida pode solucionar o problema direto na fonte. Muitos fabricantes, como a Gigabyte e a Asus, oferecem um bom suporte com relao a isso; vale a pena verificar se no existe uma atualizao disponvel para sua placa. Normalmente, o upgrade de BIOS feito dando boot atravs de um disquete ou CD-ROM gravado com uma imagem baixada na pgina do fabricante. Atualizar o BIOS um procedimento potencialmente perigoso, por isso no deixe de ler as instrues do fabricante e checar se o arquivo baixado realmente para a sua placa. nolapic: O LAPIC (local APIC) uma variao do APIC, que usado em mquinas com processadores dual-core ou quad-core. Assim como a "noapic", a opo "nolapic" usada para solucionar problemas relacionados ao boot ou deteco de perifricos. Embora as duas possam ser usadas em conjunto enquanto voc est atirando para todos os lados, normalmente apenas uma delas necessria. nosmp: Em mquinas com processadores dual-core, esta opo desativa o segundo ncleo, o que soluciona problemas de boot em muitas mquinas. Naturalmente, sem um dos ncleos o desempenho da mquina ser mais baixo, mas ela serve como uma soluo temporria, at que voc descubra uma soluo definitiva para o problema, que pode ser uma atualizao de BIOS, uma nova verso do kernel, ou, simplesmente, uma verso atualizada da distribuio em uso. pci=biosirq: Esta mais uma opo que resolve problemas de deteco da placa de rede ou som em algumas mquinas. Ela faz com que o sistema siga a configurao de endereos definida pelo BIOS, em vez de usar o procedimento normal de deteco. pci=bios: Mais uma opo de compatibilidade, desta vez destinada a burlar problemas com a controladora PCI da placa me. Embora raro, pode ser necessrio us-la para que o sistema consiga completar o boot em alguns notebooks. pnpbios=off: Desativa o suporte a plug-and-play por parte do BIOS da placa-me, deixando que o Kernel se encarregue da deteco de todos os componentes. Esta mais uma opo que resolve problemas de compatibilidade em algumas placas. irqpoll: Esta opo modifica a forma como o sistema detecta os dispositivos da mquina, corrigindo uma srie de problemas em PCs e notebooks recentes, sobretudo quando usados em conjunto com distribuies antigas, anteriores a 2008. Ela necessria para a placa wireless funcionar em alguns notebooks Acer com placas Broadcom; resolve problemas relacionados com a placa de som (ou com a placa de rede) em diversas configuraes; e, soluciona um problema relacionado deteco de HDs SATA em placas baseadas no chipset K8T890 (como a Asus A8V-E), entre outras. Esta opo causa poucos efeitos colaterais, se comparada com as demais. reboot=b: Essa opo faz com que seja usada uma funo alternativa para reiniciar o micro via software, resolvendo alguns casos em que a mquina no reinicia sozinha ao usar o comando "reboot". generic.all_generic_ide=1: Esta opo soluciona problemas de compatibilidade com as controladoras IDE ou SATA de algumas placas-me, sobretudo nas placas com o infame chipset

60 SiS 761GX/965L (ao usar um HD SATA), como a PC-Chips K8 A31G. Esta opo deve ser usada em casos onde o sistema no consegue detectar os HDs do micro (o que, alm de impedir que voc acesse os arquivos, impossibilita a instalao). Ao usar a opo de boot, o sistema utiliza um modo de acesso genrico para os HDs, o que soluciona o problema na maioria dos casos. Esta opo causa uma reduo significativa no desempenho do sistema, por isso s deve ser usada quando realmente necessrio. Uma peculiaridade que ela faz o sistema detectar o HD SATA como "/dev/hde" e no "/dev/sda", como seria usual. Apesar disso, a instalao do sistema ocorre de forma normal. Outra dica que, em algumas placas com chipset VIA, pode ser necessrio combin-la com a opo "irqpoll", solucionando tambm um problema com a atribuio dos endereos. Em distribuies com verses antigas do Kernel, a opo escrita como "all-generic-ide" (com traos em vez de underlines). Voc encontrar referncias tambm "all_generic_ide", que uma verso curta da mesma opo.

Você também pode gostar