254
Linux -

Linux - Tutoriais

Embed Size (px)

Citation preview

Page 1: Linux - Tutoriais

Linux -

Page 2: Linux - Tutoriais
Page 3: Linux - Tutoriais

Conteúdo • APT-RedHat: Instruções de como instalar e usar

o APT, um poderoso gerenciador de pacotes, no RedHat ou Fedora. Contém também instruções para fazer um espelho do FTP do RedHat e criar um repositório do APT na sua máquina.

• Backup remoto: Um tutorial que explica como fazer um backup simples de arquivos no sistema (backups completos ou diferenciais) e armazenar em um servidor remoto via FTP.

• Comandos: Uma série de explicações sobre comandos no Linux, para quem está querendo iniciar ou aprender mais.

• Compartilhando Internet: Uma das coisas que o Linux faz melhor é compartilhar uma conexão Internet, seja ela discada ou fixa, com outros computadores em uma rede. Além de compartilhar bem, pode dar até segurança adicional através de um firewall. Este tutorial traz o básico para quem quiser compartilhar sua conexão com uma rede local.

• Crontab: Como utilizar o cron e os arquivos crontab para automatizar as tarefas do Linux, agendando qualquer tipo de coisa. Ótimo para quem quer poupar tempo e trabalho!

• Dispositivos: Os dispositivos são uma coisa que temos que conhecer no Linux, senão agente se perde aos poucos nas configurações mais básicas. Por isso fiz esse tutorial tentando explicar algo sobre eles...

• Distribuições: Alguns comentários meus sobre as distribuições atualmente disponíveis. Pode estar um pouco desatualizado, e não incluir todas

Page 4: Linux - Tutoriais

distribuições, mas pode servir pra alguma coisa :)

• File Server: Muitas pessoas que tem máquinas Linux como servidores, com links bons e tudo mais, não acham um jeito de servir arquivos a não ser por ftp. Eis aqui uma solução para fazer um tradicional file server por IRC com o Linux, sem precisar de interface gráfica.

• htaccess: Um tutorial sobre como usar os arquivos .htaccess no Apache, incluindo autenticação de usuários, muito útil para quem mexe com servidores Web.

• Instalando Java – um texto de como instalar Java • Introdução ao Linux: Um texto um pouco grande

com uma introdução teórica do Linux, como sua história, seu funcionamento "atrás do palco", sua licença, entre outros. Bom para quem nunca ouviu falar de Linux :P

• LILO: Aprendendo a configurar o clássico gerenciador de boot do Linux fica fácil com esse tutorial, bem, pelo menos eu acho que vai ficar fácil :P

• Manipulação de usuários: Como adicionar ou remover usuários no Linux, entendendo como funciona tudo.

• Modem – como instalar mode 56kbps • MRTG: Como configurar o MRTG para analisar

o tráfego de seu roteador, e gerar gráficos em tempo real a partir dele.

• Placas de Som – como instalar audio nas placas de som.

• Primeiros Contatos: Uma série de textos falando sobre os primeiros contatos entre o usuário e o sistema Linux, sem se aprofundar muito.

Page 5: Linux - Tutoriais

• Permissões: Um tutorial clássico sobre permissões de arquivos, com o que vocë precisa saber para controlar quem acessa o que no seu sistema Linux.

• Programando em bash – como criar um script em bash

• qmail: Como montar um servidor de e-mail utilizando o qmail, um robusto e seguro servidor de e-mail. Contém instruções e passo-a-passos para instalar um sistema completo de e-mail, com filtros, anti-virus, servidor IMAP e POP3, contas gerenciáveis via MySQL, entre outros.

• Recompilando o kernel: Um passo a passo para a recompilação do kernel, bem simples, para quem quer começar a entrar na aventura que é personalizar o Linux.

• Reparticionamento: Reparticione seu HD sem precisar perder seus dados, de diversas formas. Métodos bem seguros e sem o uso de programas comerciais. SARG: Neste tutorial você poderá aprender como gerar relatórios completos de acesso ao Squid com o programa SARG, que apropósito é muito bom e feito por um brasileiro :)

• Sistema de arquivos proc: o /proc no Linux é um diretório virtual que serve como "diagnóstico" e configurações em tempo real do kernel. Este tutorial traz uma breve introdução à ele.

• Webalizer: Aprenda a montar estatísticas precisas e com gráficos a partir dos arquivos de log do servidor de páginas Apache. Saiba quem está acessando o seu servidor.

• Webmin: Aprenda a fazer a simples instalação do Webmin, um poderoso gerenciador de

Page 6: Linux - Tutoriais

computador via Web feito em Perl. Ótimo para administrar máquinas e servidores remotamente.

• ZipSlack: Para quem quiser experimentar uma distribuição Linux simpleszinha, como o Slackware, o ZipSlack é bom porque não necessita de reparticionamento, e aqui vai um tutorial de como fazer esta instalação.

2. Dicas sobre Linux • Apache: Aprenda mais sobre o mais usado e

poderoso servidor Web! :) • Tomcat: Respostas às dúvidas dos

administradores de sistema que usam o Tomcat como servidor de páginas JSP.

• VIM: Dicas para o uso deste poderoso editor de texto de modo console no Linux.

• Servidor X: Dúvidas sobre o funcionamento do servidor gráfico no Linux, o X-Window.

• ProFTPd: Com este poderoso servidor FTP, você pode obter muito, então aqui estão algumas dicas e dúvidas sobre ele.

• IPTables: Algumas dicas para se usar com este filtro de pacotes do kernel do Linux.

Início APT no RedHat/Fedora 1. O que é o APT? O APT (Advanced Package Tool, ou Ferramenta de Pacotes Avançada) é uma ferramenta que gerencia de uma maneira muito intuitiva os pacotes de programas no Linux. O APT foi originalmente criado para funcionar junto com dpkg, do Debian, mas ele foi portado pela Conectiva para funcionar com o sistema

Page 7: Linux - Tutoriais

de pacotes RPM, criado pela RedHat. O APT resolve os conflitos e dependências de pacotes de uma maneira muito fácil e automática. Além disso ela é uma ótima ferramenta para a atualização do sistema através da Internet, instalação de programas adicionais, entre outros. Neste tutorial irei ensinar como instalar e usar o APT em sistemas RedHat ou Fedora, mas com algumas adaptações, os métodos descritos aqui podem ser feitos em outras distribuições que utilizam o RPM. No caso do Debian, nada precisa ser feito pois o sistema já vem com o APT por padrão. 2. Instalando o APT no RedHat ou Fedora Para cada versão do sistema, há pacotes específicos a serem baixados. No site (http://apt.freshrpms.net/) você obtém uma lista das versões do APT para cada versão do seu RedHat ou Fedora. Abaixo segue o link direto para o RPM dos principais sistemas:

• Fedora Linux 1 - http://ftp.freshrpms.net/pub/freshrpms/fedora/linux/1/apt/apt-0.5.15cnc3-0.1.fr.i386.rpm • Red Hat Linux 9 - http://ftp.freshrpms.net/pub/freshrpms/redhat/9/apt/apt-0.5.5cnc6-fr1.i386.rpm • Red Hat Linux 8 - http://ftp.freshrpms.net/pub/freshrpms/redhat/8.0/apt/apt-0.5.5cnc6-fr0.rh80.1.i386.rpm • Red Hat Linux 7.3 - http://ftp.freshrpms.net/pub/freshrpms/redhat/7.3/apt/apt-0.5.5cnc5-fr0.rh73.2.i386.rpm

Neste tutorial, iremos usar como exemplo o RedHat 9. Então para instalar o RPM no seu sistema depois de baixado através dos links acima, utilize o comando:

Page 8: Linux - Tutoriais

# rpm -Uhv apt-0.5.5cnc6-fr1.i386.rpm

Depois de instalado no sistema, você terá de configurar o APT através de seus arquivos de configuração. O diretório /etc/apt foi criado na instalação do pacote e é nele que você vai editar os arquivos necessários para o funcionamento da ferramenta. O arquivo /etc/apt/apt.conf contém as configurações padrões do utilitário APT. As configurações neste arquivo já vêm prontas para o uso, e você só precisará modificar alguma coisa se realmente estiver precisando disso. Um exemplo do que você teria que fazer é habilitar o campo Proxy na seção Acquire para utilizar um Proxy ao baixar os pacotes na Internet. Já o arquivo /etc/apt/sources.list precisa de nossa configuração. Este arquivo contém a localização dos índices dos pacotes e os próprios pacotes na Internet. Editando este arquivo, você ira especificar onde o APT irá baixar os pacotes para instalá-los na sua máquina. O nome que damos à essa localidade é "repositório apt". Vamos pegar o exemplo que já vem por padrão na configuração:

rpm http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms rpm-src http://ayo.freshrpms.net redhat/9/i386 os updates freshrpms

As duas linhas acima especificam dois tipos de repositórios APT: um de RPMs binários, e outro de RPMs com código-fonte (SRPMS). Caso você não utilize SRPMS, só é necessário a primeira linha. A linha consiste em campos: O primeiro campo pode ser rpm ou rpm-src como já explicado. O segundo campo é o Host onde o APT se conectará para chegar ao

Page 9: Linux - Tutoriais

repositório do APT. Este host pode ser HTTP ou FTP. O terceiro campo é o diretório onde o repositório está localizado. E por último, o quarto campo em diante são os módulos contidos no repositório. Na primeira linha, eu especifiquei que acessaria o repositório ayo.freshrpms.net, e faria o índice dos RPMS do os (parte principal do sistema, ou seja, os RPMs que vem no CD; updates que são as atualizações de segurança da distribuição; e freshrpms que é um repositório especial do http://freshrpms.net/ que contém pacotes extras que a distribuição oficial não disponibiliza (por exemplo, o apt é um desses pacotes extras). Como host do repositório apt, você pode também usar os mirrors (espelhos) disponíveis, como listado na página do http://apt.freshrpms.net/:

• ayo.freshrpms.net (Principal) - Completo • ayo.ie.freshrpms.net (HEAnet - Dublin, Ireland) - Completo • ayo.us5.freshrpms.net (JTL Networks, Inc. - Colombus, OH USA) - Parcial • ayo.pt.freshrpms.net (Interacesso - Portugal) - Parcial • ayo.si.freshrpms.net (CAMTP - Maribor, Slovenia) - Parcial

...Ou você pode criar seu próprio mirror, como explicado mais a frente neste tutorial. 3. Utilizando o APT Agora é hora de colocar a ferramenta pra funcionar. Antes de mais nada precisamos atualizar os índices do repositório APT, armazenando-o no nosso sistema. Para fazer isso, você só precisa de um comando:

Page 10: Linux - Tutoriais

# apt-get update

E ele irá atualizar o índice do repositório configurado no arquivo /etc/apt/sources.list como explicado antes. Se tudo ocorrer bem, tudo ira seguir mais ou menos como mostro abaixo:

# apt-get update Get:1 http://ayo.freshrpms.ne redhat/9/en/i386 release [714B] Fetched 714B in 0s (4010B/s) Hit http://ayo.freshrpms.net redhat/9/en/i386/os pkglist Hit http://ayo.freshrpms.ne redhat/9/en/i386/os release Get:1 http://ayo.freshrpms.ne redhat/9/en/i386/updates pkglist [434kB] Hit http://ayo.freshrpms.ne redhat/9/en/i386/updates release Fetched 434kB in 2s (208kB/s) Reading Package Lists... Done Building Dependency Tree... Done

Depois do indice atualizado no sistema, é hora de você começar a colocar as coisas pra funcionar. Vamos agora por exemplo, tentar atualizar o sistema:

# apt-get upgrade Reading Package Lists... Done Building Dependency Tree... Done The following packages will be upgraded libxml2 1 packages upgraded, 0 newly installed, 0 removed and 0 not upgraded. Need to get 584kB of archives. After unpacking 160B of additional disk space will be used. Do you want to continue? [Y/n] y Get:1 http://ayo.freshrpms.net

Page 11: Linux - Tutoriais

redhat/9/en/i386/updates libxml2 2.5.4-3.rh9 [584kB] Fetched 584kB in 0s (4262kB/s) Executing RPM (-Uvh)... warning: /var/cache/apt/archives/libxml2_2.5.4-3.rh9_i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################################### [100%] 1:libxml2 ########################################### [100%]

Como você pôde ver acima, eu utilizei o comando apt-get upgrade para procurar por pacotes mais novos e atualizar o sistema com eles. Na minha configuração, eu coloquei o módulo updates no /etc/apt/sources.list, então isso quer dizer que as atualizações que estiverem neste local do repositório serão reconhecidas pelo APT. É assim que fica fácil de se atualizar o sistema. Se eu fizer novamente o processo acima, olha o que vou conseguir:

# apt-get upgrade Reading Package Lists... Done Building Dependency Tree... Done 0 packages upgraded, 0 newly installed, 0 removed and 0 not upgraded.

Ou seja, todos os pacotes estão atualizados no meu sistema. Suponhamos agora que você queira instalar uns pacotes do PHP, mas não sabe ao certo como eles se chamam. Com o APT, você pode procurar no índice por pacotes que tenham em sua descrição certas

Page 12: Linux - Tutoriais

palavras, como por exemplo PHP. Para fazer isso, utilizamos o comando apt-cache, veja só:

# apt-cache search php asp2php - Converts WWW Active Server Pages to PHP pages asp2php-gtk - gtk+ frontend for asp2php quanta - K Desktop Environment - core files php - The PHP HTML-embedded scripting language. (PHP: Hypertext Preprocessor) php-devel - Files needed for building PHP extensions. php-imap - An Apache module for PHP applications that use IMAP. php-ldap - A module for PHP applications that use LDAP. php-manual - The PHP manual, in HTML format. php-mysql - A module for PHP applications that use MySQL databases. php-odbc - A module for PHP applications that use ODBC databases. php-pgsql - A PostgreSQL database module for PHP. php-snmp - A module for PHP applications that query SNMP-managed devices. squirrelmail - SquirrelMail webmail client Viu só? Estes são os pacotes relacionados com o PHP. Que tal a gente instalar o php-manual e dar uma lida pra aprender? Veja só como se faz:

# apt-get install php-manual Reading Package Lists... Done Building Dependency Tree... Done The following NEW packages will be installed: php-manual 0 packages upgraded, 1 newly installed, 0 removed and 0 not upgraded.

Page 13: Linux - Tutoriais

Need to get 13.7MB of archives. After unpacking 92.7MB of additional disk space will be used. Get:1 http://ayo.freshrpms.net redhat/9/en/i386/updates php-manual 4.2.2-17.2 [13.7MB] Fetched 13.7MB in 1s (10.9MB/s) Executing RPM (-Uvh)... warning: /var/cache/apt/archives/php-manual_4.2.2-17.2_i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################################### [100%] 1:php-manual ########################################### [100%] Uma coisa muito legal do APT é que se você quer instalar ou remover um pacote, e este pacote depende de outros pacotes, o APT sabe disso e resolve isso pra você: ele pergunta se você quer também instalar/remover os pacotes dependentes. Ou seja, se você não tiver o PHP instalado em sua máquina e tentar instalar o php-imap, o APT vai querer instalar também o pacote principal php, pois o php-imap é dependente dele. Teste para ver. E agora que eu já li o manual do PHP inteiro em apenas alguns segundos, eu quero removê-lo. Você pode remover muito bem utilizando o RPM, mas aqui estamos aprendendo sobre o APT, então utilizaremos:

# apt-get remove php-manual Reading Package Lists... Done Building Dependency Tree... Done

Page 14: Linux - Tutoriais

The following packages will be REMOVED: php-manual 0 packages upgraded, 0 newly installed, 1 removed and 0 not upgraded. Need to get 0B of archives. After unpacking 92.7MB disk space will be freed. Do you want to continue? [Y/n] y Executing RPM (-e)... E lá se vai o manual do PHP. Como eu disse acima, se algum outro pacote depender do manual do PHP, o APT perguntará a você se deseja remover o outro pacote também. E agora como nota final de uso, você pode atualizar uma versão de distribuição inteira através do APT. Para isso você só precisa mudar a versão do seu repositório (arquivo /etc/apt/sources.list) para uma versão superior a sua e executar o comando apt-get dist-upgrade. E pra terminar essa seção, vamos à tabelinha básica dos comandos e suas funções:

Comando Função apt-get install <pacote>

Instala um pacote e suas dependências.

apt-get remove <pacote>

Remove um pacote e suas dependências.

apt-get upgrade

Procura por pacotes mais novos para fazer atualizações.

apt-get dist-upgrade

Faz uma atualização de versão da distribuição.

apt-cache search

Procura por termo nas descrições dos pacotes

Page 15: Linux - Tutoriais

<termo> disponíveis.

E basicamente é isso. Utilizar o APT é muito simples e não requer muito segredo, nem esforço. Mas uma coisa é certa: uma vez que você começa a usar o APT, não quer parar nunca por causa de sua praticidade. 4. Montando um repositório local do APT/RedHat Se você é um usuário doméstico ou tem poucas máquinas em sua mão rodando Linux, já é muito prático você utilizar o APT com os repositórios disponíveis por aí na Internet. Mas para os administradores de Rede que possuem várias máquinas Linux, seja na mesma rede ou não, pedir para cada uma delas instalar ou atualizar pacotes da Internet é um desperdício de banda, além de um péssimo favor para os servidores externos. Então por que não fazer um repositório APT local? O método aqui utilizado criará um mirror (espelho) do FTP da RedHat no seu sistema local, e scripts irão criar os índices do APT em sua máquina. Para fazer o espelho, precisaremos do pacote lftp, então se você não o possue, o que está esperando? apt-get install lftp! Criando o espelho da distribuição Baixe o script make-redhat-mirror disponível nesta página e coloque-o no diretório /usr/local/bin. Então rode inicialmente o seguinte comando:

# /usr/local/bin/make-redhat-mirror full 9

E espere. Espere bastante. O script irá baixar todo o conteúdo do RedHat 9 (inclusive as atualizações) para o diretório /var/mirror/redhat. Este diretório de destino pode ser configurado dentro do script, editando-o. Inclusive você pode editar também o FTP onde o

Page 16: Linux - Tutoriais

mirror vai tirar seus arquivos. Tente achar um mirror da RedHat mais próximo de você. Só será necessário rodar este comando uma vez. Mas depois você vai querer se manter atualizado com os novos pacotes, então para atualizar apenas a parte de updates, utilize o seguinte comando:

# /usr/local/bin/make-redhat-mirror quick 9 Mais tarde iremos também colocar no crontab para rodar as atualizações de índice com o FTP da RedHat automaticamente todo dia. Preparando o território do APT Antes de criar os índices, você precisará primeiro de um método para os clientes do APT baixarem as coisas. O método pode ser HTTP e FTP (Pode ser CD-ROM também, mas isso não vem ao caso). Fica ao seu critério escolher o método. No meu caso eu prefiro criar um host virtual no Apache chamado de apt.meudominio.com.br. Ou se você não tem domínio, pode usar seu próprio IP. Isto será extremamente necessário, e a configuração disto está fora do escopo deste tutorial. Se você não sabe, procure saber como configurar um servidor HTTP ou FTP. Provavelmente você sabe um pouco, senão não estaria lendo esta parte do tutorial :) Aqui, como eu disse, o lugar do repositório APT vai ser apt.meudominio.com.br, e o diretorio real no sistema vai ser /var/www/dominios/apt.meudominio.com.br/html. Criando o repositório APT Agora é a hora de criar o repositório do APT em sua máquina. Para isso, baixe o script make-apt disponível nesta página e coloque-o em /usr/local/bin. Edite o

Page 17: Linux - Tutoriais

script e você verá algumas variáveis no começo para serem configuradas:

# Absolute directory for top of redhat mirror MIRRORDIR=/var/mirror/redhat # Absolute directory for top of apt repository APTDIR=/var/www/dominios/apt.meudominio.com.br/html # URL of repository ORIGINURL=apt.meudominio.com.br

Veja aí o que você precisa. A variável MIRRORDIR indica onde você colocou o mirror do RedHat (isto está configurado também no script make-redhat-mirror). A variável APTDIR indica o diretório no sistema onde vai ficar o repositório do APT, que no nosso caso ficou sendo como /var/www/dominios/apt.meudominio.com.br/html. E por último a variável ORIGINURL indica a URL onde vai estar disponível o repositório, que no nosso caso ficou sendo apt.meudominio.com.br. Depois de configurado estas três variáveis, é hora de finalmente criar o repositório. Na primeira vez que você for fazer isso, utilize o comando:

# /usr/local/bin/make-apt full 9

Isso irá iniciar o processo de criação do repositório, que deve demorar um pouquinho. Depois de feito, está pronto! Agora seus usuários já podem acessar o seu repositório APT através do seu servidor HTTP. Configurando os clientes para usar seu repositório Tudo que você precisará fazer para configurar os clientes do APT para utilizar o seu repositório será alterar o arquivo /etc/apt/sources.list e utilizar a seguinte linha:

rpm http://apt.meudominio.com.br redhat/9/en/i386 os

Page 18: Linux - Tutoriais

updates

E pronto! Se você estiver rodando várias máquinas numa rede interna, apenas uma terá o repositório e o resto irá baixar tudo localmente :) Atualizando o repositório diariamente Como existem as atualizações de segurança, é sempre bom você estar sempre atualizando seu repositório. Para fazer isso diariamente, crie um arquivo chamado /usr/local/bin/mirror-apt com o seguinte conteúdo:

#!/bin/bash /usr/local/bin/make-redhat-mirror quick 9 /usr/local/bin/make-apt quick 9 Depois edite o arquivo /etc/crontab, e adicione as seguintes linhas:

# Atualizacao do Mirror RedHat e APT 01 1 * * * root /usr/local/bin/mirror-apt

Isso fará com que o sistema verifique as atualizações no FTP da RedHat e crie o repositório APT caso necessário todo dia às 1:00 da manhã. Se você quiser aprender mais sobre como agendar as tarefas através do crontab, visite meu outro tutorial: Utilizando o crontab. E pronto! Seu trabalho está feito. Experimente e modifique as coisas para aprender mais. Não é tão difícil adaptar estas informações para criar um repositório do Fedora por exemplo, ou de outra versão do RedHat. A única coisa que irá mudar será a localização do mirror, entre outras pequenas coisas. 5. Conclusão e Referências Espero que você tenha gostado desse tutorial, e que ele possa ter te ajudado a lidar melhor com sua

Page 19: Linux - Tutoriais

distribuição. Críticas e Sugestões podem ser mandadas para o meu e-mail. E agora os créditos para este tutorial:

• http://www.webmo.net/support/apt_repository.html - Foi daí que peguei os scripts make-redhat-mirror e make-apt, e foi aí que aprendi basicamente como se monta o repositório. Créditos TOTAIS para este endereço, muito bom. • FreshRPMS - Ótimo site com os recursos necessários para o APT ou YUM no RedHat. Um dos pioneiros, e o que trouxe a popularidade do APT no RedHat. • AptRpm @ Conectiva - Site do APT na Conectiva, idealizadora do projeto.

Backup Remoto Nem sempre as pessoas pensam em backup, só quando acontece alguma coisa com seu sistema. Um backup sempre é bom, mesmo que for bem simples. Vou apresentar através deste manual algumas formas de se fazer backup de arquivos do sistema Linux, opcionalmente armazenando estas cópias em um servidor remoto via FTP. Com isso os administradores de redes podem centralizer os backups em uma máquina, para depois armazenar ou em uma fita dat, ou em cd-rom, ou seja lá o que for. Para fazer os backups, utilizaremos o clássico comando "tar", que serve justamente para isso: armazenar arquivos em um arquivo. Vamos primeiro criar um exemplo de arquivo de backup:

tar -cf maquina-backup-full-20030212.tar /etc /var/named /var/log bzip2 maquina-backup-full-20030212.tar

Page 20: Linux - Tutoriais

O que fiz foi armazenar os arquivos dos diretórios "/etc", "/var/named" e "/var/log" no arquivo maquina-backup-20030212.tar, e depois compactá-lo no formato bzip2 (uma compactação melhor, mas que requer mais processamento), gerando então o arquivo "maquina-backup-20030212.tar.bz2". Este mesmo comando pode ser feito em uma linha só:

tar -jcf maquina-backup-full-20030212.tar.bz2 /etc /var/named /var/log

Com este arquivo, teremos um backup completo dos três diretórios especificados. Vamos à mais um exemplo:

tar -zcf maquina-backup-full-20030212.tar.gz /etc /var/named /var/log tar -zcf maquina-home-full-20030212.tar.gz /home

Aqui eu criei dois arquivos. Um arquivo contém o backup que criamos anteriormente, e outro arquivo terá o backup do diretório "/home", ou seja, o diretório dos usuários do sistema. A diferença aqui é que eu usei a opção "z" e não a "j". Isso quer dizer que o tar vai usar o programa gzip ao invés do bzip2. Agora vamos supor que eu alterei o conteúdo do diretório "/etc", adicionando um arquivo chamado "teste" e modificando o arquivo "crontab". Para não ter que fazer um backup total novamente, eu posso incrementar este backup somente com as modificações feitas. Para isso eu utilizo o seguinte comando:

find /etc /var/named /var/log -mtime -1 -type f -print | \ tar zcvf maquina-backup-incremental-20030212.tar.gz -T -

Aqui o Linux vai procurar por arquivos modificados numa faixa de 1 dia (usado para backups incrementais

Page 21: Linux - Tutoriais

diários) e armazená-los no arquivo "maquina-backup-incremental-20030212.tar.gz". Vejamos agora um backup feito com os arquivos modificados numa faixa de uma semana:

find /etc /var/named /var/log -mtime -7 -type f -print | \ tar zcvf maquina-backup-incremental-20030212.tar.gz -T -

Agora se você quiser automatizar, e poupar trabalho, use para a nomeação do arquivo o comando "date", gerando assim a data no arquivo. Veja o exemplo dessa compactação:

# tar zcf backup-full-`date +%Y%m%d`.tar.gz /etc # ls backup-full-20030212.tar.gz

Agora que você já aprendeu a fazer os backups, vamos armazená-lo remotamente. Eu assumo que você já tenha configurado um servidor FTP em outra máquina, se você ainda não fez isso, faça. Depois adicione um usuário com uma certa senha para acessar este ftp. Aqui no tutorial vamos usar como usuário: "backup" e como senha: "segredo". Utilize o seguinte script para automatizar o processo:

#!/bin/bash # DATA=`date +%Y_%m_%d` # Dados do arquivo de backup MAQUINA="sakura" ARQUIVO="backup-full-$MAQUINA-$DATA.tar.gz" DIRETORIOS="/etc /var/log" # Dados do servidor FTP HOST_FTP="192.168.0.1"

Page 22: Linux - Tutoriais

USUARIO_FTP="backup" SENHA_FTP="segredo" # A partir daqui não precisa mais editar. # Cria o arquivo .tar.gz no /tmp (Temporário) cd /tmp tar zcf /tmp/$ARQUIVO $DIRETORIOS # Acessa o FTP e coloca os arquivos ftp -in <<EOF open $HOST_FTP user $USUARIO_FTP $SENHA_FTP bin lcd /tmp dele $ARQUIVO put $ARQUIVO bye EOF # Remove os arquivos temporarios rm -rf /tmp/$ARQUIVO

Pronto! Lembre-se de proteger este arquivo aos olhos alheios, porque a senha do usuário do FTP está visível. Este pequeno script shell cria um backup dos diretórios "/etc" e "/var/log", conecta ao servidor FTP e envia o arquivo. Você só precisará alterar as variáveis do começo do arquivo para as suas necessidades. Com isso você terá o backup remoto que precisar. Modificando o script você pode criar também backups incrementais, e junto com o crontab, pode programar para as máquinas ficarem fazendo backups diários, semanais, mensais, ou como você quiser. Lembre-se sempre que os backups uma vez na máquina remota, devem ser colocados por segurança em uma mídia

Page 23: Linux - Tutoriais

como fita DAT ou CD-ROM. Cabe à você decidir :) Bom proveito! Depois criarei mais dicas sobre o assunto. Comandos no Linux Comandos para manipulação de arquivos A primeira coisa que sempre vem em mente no uso de um sistema operacional é como lidar com os arquivos dentro dele... Nesta seção eu vou mostrar alguns comandos básicos para mexer com os arquivos.

• cd - Navegando entre diretórios • ls - Listar arquivos • mkdir - Cria um diretório • rmdir - Remove um diretório vazio • cp - Cópia de arquivos e diretórios • mv - Move arquivos e diretórios • rm - Deleta arquivos e diretórios • ln - Linkando arquivos • cat - Exibe o conteúdo de um arquivo ou direciona-o para outro • file - Indicando tipo de arquivo

cd - Navegando entre diretórios cd [nome_do_diretório]

Este comando acima mudará o diretório atual de onde o usuário está. Há também algumas abreviações de diretórios no Linux para a facilitação, estes são:

Abreviação Significado . (ponto) Diretório atual .. (dois pontos) Diretório anterior

Page 24: Linux - Tutoriais

~ (til) Diretório HOME do usuário

/ (barra) Diretório Raiz - (hífen) Último diretório

Por exemplo, se eu quero ir para o meu diretório home, faço o seguinte:

$ pwd /usr/games $ cd ~ $ pwd /home/xxx

Ou seja, eu estava no diretório /usr/games, e com um simples cd para o diretório ~, fui para o meu diretório home (/home/xxx). Quando você deseja saber o caminho completo do diretório em que você está, utilize o comando pwd. Se você deseja ir para um diretório que está na raiz diretamente, você usa o / antes, exemplo:

$ pwd /usr/local/RealPlayer7/Codecs $ cd /etc/rc.d $ pwd /etc/rc.d $ cd - $ pwd /usr/local/RealPlayer7/Codecs Eu estava no diretório /usr/local/RealPlayer7/Codecs e quis ir para o diretório etc/rc.d que está na raiz. Note depois que eu usei o hífen e fui de volta para o último diretório em que eu estava.

Page 25: Linux - Tutoriais

ls - Listar arquivos ls [opções] [arquivo/diretório]

Este comando lista os arquivos, nada mais que isso. Se você executar apenas o ls sozinho, ele vai mostrar todos os arquivos existentes no diretório atual. Há também as opções extras:

Parâmetro Significado

-l Lista os arquivos em formato detalhado.

-a Lista os arquivos ocultos (que começam com um .)

-h Exibe o tamanho num formato legível (combine com -l)

-R Lista também os subdiretórios encontrados

Exemplo de uma listagem detalhada:

$ ls -l total 9916 drwxrwxr-x 5 xxx xxx 1302 Aug 16 10:15 CursoC_UFMG -rw-r--r-- 1 xxx xxx 122631 Jul 12 08:20 Database.pdf -rw-r--r-- 1 xxx xxx 2172065 Jul 12 08:20 MySQL.pdf -rw-r--r-- 1xxx xxx 2023315 Jul 12 08:20 PHP3.pdf

Podemos também usar no ls os wildcards, ou seja, caracteres que substituem outros. Exemplo: eu quero listar todos os arquivos que têm a extensão .txt, faço o seguinte:

$ ls *.txt debian-install.txt manualito.txt named.txt plip.txt seguranca.txt

Page 26: Linux - Tutoriais

ipfw.txt mouse.txt placa_de_video.txt rede.txt sis.txt

O wildcard é o "*", que representa "tudo".txt. Existem outros wildcards, exemplo disso é o ponto de interrogação (?), que substitui apenas 1 caractere, exemplo:

$ ls manual?.txt manual1.txt manual2.txt manual3.txt manualx.txt manualP.txt

Existe outro wildcard, que envolve os colchetes. Por exemplo:

$ ls manual[3-7].txt manual3.txt manual4.txt manual6.txt manual7.txt

Lista todos os arquivos que tiverem como manual?.txt, onde o ? pode ser substituído por 3, 4, 5, 6 e 7.

mkdir - Cria um diretório mkdir <nome_do_diretório>

Cria um diretório. Exemplo:

$ mkdir ~/paginas

Este comando criará o diretório paginas no seu diretório home.

rmdir - Remove um diretório vazio rmdir <nome_do_diretorio>

Apaga um diretório que esteja vazio. Exemplo:

$ rmdir /tmp/lixo

Isto apagará o diretório /tmp/lixo apenas se ele estiver vazio. Para apagar um diretório com seu conteúdo, refira-se ao comando rm.

Page 27: Linux - Tutoriais

cp - Cópia de arquivos e diretórios cp [opções] <arquivo_origem> <arquivo_destino>

O comando cp copia arquivos e diretórios. Como opções dele, podemos ver:

Parâmetro Significado -i Modo interativo

-v Mostra o que está sendo copiado

-R Copia recursivamente (diretórios e subdiretórios)

Exemplos: Quero copiar brasil.txt para livro.txt, com a opção de modo interativo.

$ cp -i brasil.txt livro.txt cp: sobrescrever `livro.txt'? Como o arquivo livro.txt já existia, ele pergunta se quer sobrescrever, responda y(sim) ou n(não). Agora eu quero copiar o diretório /home/ftp com tudo dentro (até seus subdiretórios) para /home/ftp2, faço o seguinte:

$ cp -R /home/ftp /home/ftp2

mv - Move arquivos e diretórios mv <arquivo_origem> <arquivo_destino>

Este comando simplesmente move algum arquivo para outro lugar. Ele também é usado para renomear um arquivo. Por exemplo, se eu quero renomear o industria.txt para fabrica.txt, eu faço o seguinte:

$ mv industria.txt fabrica.txt

Page 28: Linux - Tutoriais

Se eu quiser mover o industria.txt para /home/usuario com o mesmo nome, faço:

$ mv industria.txt /home/usuario

rm - Deleta arquivos e diretórios rm [opções] <arquivo>

Este comando apaga definitivamente o arquivo ou diretório. Exemplo:

$ rm arquivo.bin Para apagar um diretório com todo seu conteúdo, usa-se a opção -r, assim:

$ rm -r /tmp/lixo

ln - Linkando arquivos ln -s <arquivo_origem> <link simbólico>

Este comando é usado para gerar links simbólicos, ou seja, que se comportam como um arquivo ou diretório, mas são apenas redirecionadores que mandam seu comando para outro arquivo ou diretório, por exemplo:

$ ln -s /manual /home/linux-manual

Este comando criará o link /home/linux-manual, se você der um ls -l você verá que o diretório /home/linux-manual está apontando para /manual. Se você ir para o /home/linux-manual, você na verdade estará no /manual, mas como é um link, não há diferença.

cat - Exibe o conteúdo de um arquivo ou direciona-o para outro cat <arquivo>

Page 29: Linux - Tutoriais

Este comando existe para mostrar o conteúdo de um arquivo, ou para fazer a cópia deste arquivo, ou uma junção. Vejamos um exemplo, se eu quiser mostrar o conteúdo de /home/usuario/contato, eu digito:

$ cat /home/xxx/contato Aparecerá o conteúdo do arquivo contato:

Nome do usuário (xxx xxxxx..) xxx_arroba_itotal_ponto_com_ponto_br http://tlm.conectiva.com.br

Este comando pode também servir de direcionador para outro arquivo. Indicadores são usados para isso:

Indicador ">" - faz uma cópia, exemplo: $ cat contato1 > contato2 Indicador ">>" - Acrescenta um arquivo ao outro, exemplo: cat contato1 >> contato2

O cat pode fazer coisas que nem você imagina, como tocar sons. Para fazer isso é simples, ele direciona o arquivo som para o dispositivo de áudio (que no linux é representado por um arquivo), exemplo:

cat som-dumau.au > /dev/audio

file - Indicando tipo de arquivo file <arquivo>

Este comando identifica o tipo de arquivo ou diretório indicado pelo usuário conforme os padrões do sistema operacional. Há varios tipos de retorno, vamos aqui ver alguns mais importantes:

ASCII text C Program source directory ELF-Executable

Page 30: Linux - Tutoriais

data Bourn-again shell-script

Apenas um exemplo deste comando:

$ file linux.txt ASCII Text

Comandos sobre processos do sistema

• ps - Listando processos • kill - Matando um processo • killall - Matando processos pelo nome • w - Lista os usuários logados

ps - Listando processos ps [opções]

Quando um programa é executado no sistema, ele recebe um número de identificação, o chamado PID. Este comando lista esses processos executados, e apresenta o PID. Além do PID, ele também mostra o comando executado (CMD) e também o STAT (status atual do processo executado, veja nota abaixo), além de outros. O status do processo é identificado por letras, aqui segue uma tabela com as definições de cada letra:

Letra Definição 0 Não existente

S Descansando, fora de funcionamento (Sleeping)

R Rodando (Running) I Intermediando (Intermediate) Z Terminando (Zumbi) T Parado (Stopped)

Page 31: Linux - Tutoriais

W Esperando (Waiting)

Agora um exemplo para este comando:

$ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 1120 52 ? S Dec25 0:05 init root 2 0.0 0.0 0 0 ? SW Dec25 0:00 [kflushd] root 3 0.0 0.0 0 0 ? SW Dec25 0:00 [kupdate] root 4 0.0 0.0 0 0 ? SW Dec25 0:00 [kpiod] root 1004 0.0 0.0 10820 48 ? SN Dec25 0:00 [mysqld] root 1007 0.0 0.0 2852 0 ? SW Dec25 0:00 [smbd] xxx 1074 0.0 0.0 1736 0 tty1 SW Dec25 0:00 [bash] xxx 1263 0.0 0.0 1632 0 tty1 SW Dec25 0:00 [startx] xxx 1271 0.0 0.0 2304 0 tty1 SW Dec25 0:00 [xinit] xxx 1275 0.0 2.4 4312 1360 tty1 S Dec25 0:16 wmaker xxx 2461 0.0 0.0 1636 0 tty1 SW 07:09 0:00 [netscape] xxx 9618 0.9 4.9 5024 2688 pts/1 S 09:56 0:06 vim d03.html xxx 12819 6.7 6.9 5580 3796 ? S 10:03 0:13 mpg123 King Diamond - Help.mp3 Este parâmetro (aux) fez o ps listar todas as informações sobre todos os processos executados.

Page 32: Linux - Tutoriais

kill - Matando um processo kill [-SINAL] <PID>

O comando kill é muito conhecido (principalmente pelos usuários do Netscape :)), ele serve para matar um processo que está rodando. Matar? Terminar este processo, finalizar natoralmente! Para matar um processo, temos de saber o PID dele (veja o comando ps), e então executar o kill neste PID. Vamos killar o Netscape:

$ ps aux | grep netscape xxx 2461 0.0 0.0 1636 0 tty1 SW 07:09 0:00 [netscape] $ kill -9 2461

E o processo do Netscape foi morto! Vivas! O sinal -9 significa para forçar e matar natoralmente mesmo. Uma lista de sinais pode ser encontrada com o comando:

man 7 signal

killall - Matando processos pelo nome killall [-SINAL] <comando>

Faz a mesma coisa que o kill, só que a vantagem aqui é que você não precisa saber o PID do processo, e sim o nome. A desvantagem é que se tiver dois processos com o mesmo nome, os dois são finalizados. Seguindo o exemplo do comando kill:

$ ps aux | grep netscape xxx 2461 0.0 0.0 1636 0 tty1 SW 07:09 0:00 [netscape] $ killall -9 netscape

Page 33: Linux - Tutoriais

w - Listas os usuários logados w

Com este comando, é possível você ver quais usuários estão atualmente logados no seu sistema, além de informações como "O que ele está fazendo", "aonde está fazendo", "desde quando está logado", etc. Vejamos um exemplo aqui da minha máquina:

xxx@itotal xxx]$ w 10:37am up 13:45, 4 users, load average: 0.85, 0.70, 0.71 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT xxx tty1 - Mon 8pm 25.00s 34:16 0.09s -bash root tty2 - 10:37am 5.00s 0.27s 0.14s top xxx tty3 - 10:37am 11.00s 0.25s 0.13s vi cmpci.c jim tty4 - 10:37am 22.00s 0.23s 0.12s BitchX

Comandos de pacotes (instalação/desinstalação/consulta) O que são pacotes? No Linux, geralmente os aplicativos vêem em forma de código-fonte, então o usuário tem de baixar e compilar. Os pacotes servem justamente para facilitar o trabalho do usuário, dando a ele um arquivo empacotado com o código já compilado. Existem diversos gerenciadores de pacotes que iremos aprender a usar o básico deles aqui. Tem o RPM (RedHat Package Manager), que é usado por várias distribuições como o Conectiva Linux, Red Hat, SuSE e Mandrake. Também tem o DEB (Debian Packages),

Page 34: Linux - Tutoriais

muito bom também e usado pela distribuição Debian e Corel Linux (que é baseada no Debian por isso). E temos também o pacoteamento do Slackware (TGZ), que não é tão poderoso como os anteriores, mas quebra galhos também. Além de empacotar o código-fonte compilado, os gerenciadores de pacotes também armazenam as informações de instalação em um banco de dados, para depois o usuário ter informações sobre a instalação, e para desinstalar o pacote do sistema. E não há apenas pacotes com código-fonte compilado, também há pacotes que contém o código-fonte sem compilar, mas empacotado. Utilizando o PKGTOOL (Slackware) Nas distribuições Slackware, é bem simples o gerenciamento de pacotes dele. Os pacotes têm extensão .tgz (diferente de .tar.gz), e além de conter os arquivos, contém scripts de pós-descompactação também. Existe uma interface muito amigável para o gerenciamento dos pacotes .tgz, e se chama pkgtool. Tente executar o pkgtool no console e ver no que dá. Mas também existem os comandos individuais:

Comando O que faz installpkg X.tgz

Instala o pacote X.tgz

removepkg X Desinstala o pacote X

makepkg Cria um pacote

Utilizando o RPM Para instalar um pacote, usa-se a opção -i:

# rpm -i pacote.rpm

Page 35: Linux - Tutoriais

Você também pode utilizar as opções -v e -h combinadas com a -i para uma mostragem mais agradável. Se você já tem o pacote.rpm e deseja atualizar para uma versão mais recente da mesma, você utiliza a opção -U ao invés da -i, exemplo:

# rpm -Uvh pacote-atualizacao.rpm

Isso irá atualizar os arquivos do pacote. Se você quer retirar o pacote do seu sistema, você utiliza a opção -e, assim:

# rpm -e pacote Caso este pacote gere dependências com outros pacotes, e mesmo assim você queira removê-lo, você pode utilizar a opção --force, que como o nome diz, força a remoção do mesmo:

# rpm -e pacote --force Agora uma característica muito importante também para o usuário é a capacidade de consulta que o RPM traz. Por exemplo, se você quer listar todos os pacotes instalados no sistema, você utiliza o comando:

$ rpm -qa Isto irá gerar a listagem dos pacotes. Veja que a opção -q (query) é a opção de consulta, e seguida de outra letra ela faz tarefas. Combinando o comando anterior com o comando grep, podemos ver se um certo pacote está instalado no sistema:

$ rpm -qa | grep BitchX BitchX-75p3-8cl

E se você quer saber informações sobre um pacote? Então usa-se a opção -i. Vejamos um exemplo:

$ rpm -qi BitchX

Page 36: Linux - Tutoriais

Name : BitchX Relocations: (not relocateable) Version : 75p3 Vendor: conectiva Release : 8cl Build Date: qua 16 fev 2000 01:28:59 BRST Install date: dom 10 set 2000 19:33:23 BRT Build Host: mapinguari.conectiva.com.br Group : Aplicações/Internet Source RPM: BitchX-75p3-8cl.src.rpm Size : 2812352 License: GPL URL : http://www.bitchx.org Summary : Cliente IRC para o console do Linux Description : O BitchX é um cliente de IRC com suporte a cores para o console do Linux. Ele incorpora várias características que normalmente requereriam um script, e a sua interface é mais colorida, e simples de trabalhar que a do ircII :) Se quisermos ver quais pacotes fazem dependência com um certo pacote, utilizamos a opção -R:

$ rpm -qR pacote

E para verificar a qual pacote um certo arquivo pertence, utilize a opção -f, assim:

$ rpm -qf /diretorio/arquivo

Ou o contrário, se você quiser listar todos os arquivos pertencentes à um pacote, faça assim:

$ rpm -ql pacote Outros tipos de comandos Descompactar arquivos

Page 37: Linux - Tutoriais

Extensão .tar.gz tar zxpvf arquivo.tar.gz

Extensão .tar tar xpvf arquivo.tar Extensão .gz gunzip arquivo.gz Extensão .tar.bz2

bunzip2 arquivo.tar.bz2 ; tar xpvf arquivo.tar

Extensão .bz2 bunzip2 arquivo.bz2

Extensão .zip unzip arquivo.zip

Compactar arquivos

Empacotar um diretório em .tar

tar cvf diretorio/

Empacotar um diretório em .tar.gz

tar zcvf diretorio/

Compacta um arquivo para .gz

gzip arquivo

Compacta um arquivo para .bz2

bzip2 arquivo

Espaço em disco

df -h Mostra o espaço em disco das partições montadas

du -hs

Mostra o espaço ocupado pelo diretório atual

Informações do sistema

date Mostra a data e hora atual cal Mostra um calendário

uptime Mostra quanto tempo seu sistema está rodando

Page 38: Linux - Tutoriais

free Exibe a memória livre, a usada, e os buffers da memória RAM

top Mostra os processos que mais gastam memória

uname -a

Mostra informações de versão do kernel

Programas (console)

vi Editor de texto pico Editor de texto pine Leitor de E-Mail mutt Leitor de E-Mail lynx Navegador Web links Navegador Web

Compartilhando uma conexão com o Linux Um dos casos mais comuns é esse, você ter uma conexão com a Internet, e outros computadores em uma rede interna. Então você quer compartilhar essa conexão com os outros computadores. Poderia-se usar servidores de proxy para isso, mas queremos compartilhar totalmente! Então o que fazer? Primeiro de tudo, você precisa verificar qual a versão do seu kernel. Kernels diferentes utilizarão ferramentas diferentes. Vejamos:

Versão do Kernel Utilitário

2.0.x ipfwadm 2.2.x ipchains 2.4.x iptables

Page 39: Linux - Tutoriais

É claro que não podemos descartar o fato de que quanto maior a versão do kernel, melhor é a implementação desses utilitários! Então é sempre bom você usar o mais atual, que no nosso caso é o iptables! :) O que queremos fazer aqui se chama Masquerading. Masquerading é quando o Linux atua como um gateway entre a Internet e a Rede Local, alterando os pacotes, de modo que ele vá pro lugar certo, e retorne para o lugar em que saiu. Um jeito bem simples de se compartilhar a sua conexão, considerando que a sua rede local seja: 192.168.0.0/24 (que significa a faixa de IPs de 192.168.0.1 até 192.168.0.254). Vamos lá:

ipfwadm (Kernel 2.0.x) ------------------------ # ipfwadm -F -p DENY # ipfwadm -F -a ACCEPT -m -S 192.168.0.0/24 ipchains (Kernel 2.2.x) ------------------------ # ipchains -P forward -j DENY # ipchains -A forward -s 192.168.0.0/24 -j MASQ iptables (Kernel 2.4.x) ------------------------ # iptables -t nat -P POSTROUTING DROP # iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE No caso do iptables, você terá que substituir o eth0 pelo seu tipo de conexão. No exemplo a Internet aqui está funcionando através da placa de rede 'eth0' e a rede local em 'eth1', então eu ativei o masquerading na 'eth0', que é a placa da Internet.

Page 40: Linux - Tutoriais

Se você usa conexão discada, então ao invés de ser 'eth0' ou 'eth1', você usará 'ppp0', que é a interface de conexão PPP, utilizada pelos provedores de acesso discado. E antes que eu me esqueça (e você também), há um passo essencial que *nunca* pode ser descartado. Você terá que habilitar o IP Forwarding no kernel do Linux, para ele poder repassar os pacotes da sua rede interna para a Internet. Não importa que versão do kernel você tenha, execute o seguinte comando:

# echo 1 > /proc/sys/net/ipv4/ip_forward

Pronto, sua conexão está compartilhada com todos da sua rede interna. A única coisa que lhe restou pra fazer agora é configurar as próprias máquinas da rede interna para usarem esta conexão compartilhada. Se você estiver usando Linux, você apenas terá que adicionar uma rota padrão, que é o gateway:

# route add -net default gw 192.168.0.1 Onde 192.168.0.1 é o IP da máquina servidora. Pronto, sua máquina cliente já está usufruindo do masquerading que a outra máquina está fazendo. Caso a máquina cliente seja Windows, configure na placa de rede para ela ter como Gateway o IP da máquina servidora. As configurações que você fez no Linux vão se desfazer assim que você reiniciar o sistema, então é bom deixar todos estes comandos que você fez num arquivo de inicialização. Você pode colocá-los, por exemplo, dentro do arquivo '/etc/rc.d/rc.local'. Agora é USAR, USAR e USAR! Utilizando o crontab

Page 41: Linux - Tutoriais

O "cron" é um programa de "agendamento de tarefas". Com ele você pode programar para ser executado qualquer coisa numa certa periodicidade ou até mesmo em um exato dia, numa exata hora. Um uso bem comum do cron é o agendamento de tarefas administrativas de manutenção do seu sistema, como por exemplo, procura por links simbólicos quebrados, análise de segurança do sistema, backup, entre outros. Estas tarefas são programadas para todo dia, toda semana ou todo mês, serem automaticamente executadas através do crontab e um script shell comum. A configuração do cron geralmente é chamada de crontab. Os sistemas Linux possuem o cron sempre presente. Pelo menos eu nunca vi nenhuma distribuição que não incluísse o tão útil cron. A configuração tem duas partes: Uma global, e uma por usuário. Na global, que é o root quem controla, o crontab pode ser configurado para executar qualquer tarefa de qualquer lugar, como qualquer usuário. Já na parte por usuário, cada usuário tem seu próprio crontab, sendo restringido àpenas ao que o usuário pode fazer (e não tudo, como é o caso do root). Para configurar um crontab por usuário, utiliza-se o comando "crontab", junto com um parâmetro, dependendo do que você quiser fazer. Abaixo uma relação:

Comando Função

crontab -e Edita o crontab atual do usuário

crontab -l Exibe o atual conteúdo do crontab do usuário

crontab -r Remove o crontab do

Page 42: Linux - Tutoriais

usuário

Se você quiser verificar os arquivos crontab dos usuários, você precisará ser root. O comando crontab coloca os arquivos dos usuários no diretório:

/var/spool/cron/usuario Onde "usuario" corresponde ao usuário dono do arquivo crontab. Agora se você quiser editar o crontab global, este fica no arquivo "/etc/crontab", e só pode ser manipulado pelo root. E agora que já sabemos onde ficam os arquivos de configuração, vamos estudar o formato da linha do crontab, que é quem vai dizer o que executar e quando. Vamos ver um exemplo:

0 4 * * * who

Então como se pode ver, a linha é dividida em 6 campos separados por tabs ou espaço:

Campo Função 1o. Minuto 2o. Hora 3o. Dia do mês 4o. Mês 5o. Dia da semana 6o. Programa pra execução

Todos estes campos, sem contar com o 6o., são especificados por números. Veja a tabela abaixo para os valores destes campos:

Campo Função Minuto 0-59 Hora 0-23

Page 43: Linux - Tutoriais

Dia do mês 1-31 Mês 1-12 Dia da semana

0-6 (o "0" é domingo, "1" segunda, etc)

Então o que nosso primeiro exemplo estava dizendo? A linha está dizendo: "Execute o comando 'who' todo dia de todo mês sendo o dia qualquer dia da semana, às 4 horas e 0 minutos.". Vamos pegar mais exemplos para analisar:

1,21,41 * * * * echo "Meu crontab rodou mesmo!"

Aqui está dizendo: "Executar o comando do sexto campo toda hora, todo dia, nos minutos 1, 21 e 41".

30 4 * * 1 rm -rf /tmp/* Aqui está dizendo: "Apagar todo conteúdo do diretório /tmp toda segunda-feira, as 4:30 da manhã.".

45 19 1,15 * * /usr/local/bin/backup

Aqui está dizendo: "Executar o comando 'backup' todo dia 1 e 15 às 19:45.". E assim você pode ir montando inúmeros jeitos de agendamento possível. No arquivo do crontab global, o sexto campo pode ser substituído pelo nome do usuário, e um sétimo campo adicionado com o programa para a execução, como mostro no exemplo a seguir:

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg Aqui está dizendo: "Executar o mrtg como usuário root, durante 5 e 5 minutos dos minutos 0-59. Ou seja, executar de 5 em 5 minutos o mrtg sempre.".

Page 44: Linux - Tutoriais

Em alguma distribuições, os agendamentos mais comuns estão programados para serem executados. Veja as linhas abaixo:

01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly O programa "run-parts" executa todos os scripts executáveis dentro de um certo diretório. Então com essas linhas, temos diretórios programados para executar programas de hora em hora, diariamente, semanalmente ou mensalmente. Abaixo a tabela:

Diretório Período

/etc/cron.hourly De hora em hora

/etc/cron.daily Diariamente /etc/cron.weekly Semanalmente /etc/cron.monthly Mensalmente

Então todos os arquivos executáveis dentro de cada diretório serão executados no seu correspondente período. Ou seja, posso colocar um certo conteúdo no arquivo "/etc/cron.daily/teste", depois torná-lo executável através do comando "chmod +x /etc/cron.daily/teste", e então ele será executado todo dia as 4:02 da manhã. Bem é isso! Agora você já pode programar suas tarefas para serem automaticamente executadas e te poupar muito trabalho manual :)

Page 45: Linux - Tutoriais

Dicas - Apache Mostrando páginas de um servidor Intranet num servidor Internet

Às vezes você se depara com uma configuração em que você tem um servidor Apache rodando para a Internet, e outros servidores rodando internamente. Só que como fazer para que os usuários da Internet acessem os vários servidores internos? Uma solução seria configurar o firewall para que redirecione as respectivas conexões para os servidores internos via NAT. Mas o problema disso é que você não consegue redirecionar na mesma porta de acordo com o nome do host, ou seja, não tem a habilidade de fazer uma configuração de Domínio Virtual no firewall. Vamos supor que eu tenha três servidores internos e um externo. Cada um destes servidores internos carrega um site diferente, rodando sob Linux e Apache (SIM!), enquanto que no servidor externo, eu tenho um Apache rodando com alguns sites simples. Como fazer para que este Apache no servidor externo mostre aos usuários da Internet as páginas que estão nos servidores internos? Para solucionar este caso, você pode simplesmente utilizar o poderoso mod_rewrite para pegar todo um endereço da rede Interna e colocar disponível no seu servidor Internet transparentemente para o usuário. No servidor externo, você pode colocar as seguintes linhas na configuração principal ou dentro de um domínio virtual (<VirtualHost>):

RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.)?nomedodominio\.com\.br

Page 46: Linux - Tutoriais

RewriteRule (.*) http://192.168.0.1$1 [P]

Neste exemplo, quando o usuario acessar o domínio virtual www.nomedodominio.com.br, o Apache coletará as informações do servidor interno 192.168.0.1 e colocará disponível transparentemente para o usuário. Mais outros exemplos:

RewriteEngine on RewriteCond %{HTTP_HOST} ^(www\.)?nomedodominio\.com\.br RewriteRule ^/site/(.*) http://192.168.0.2$1 [P]

Isto faz com que o diretório /site dentro do dominio www.nomedodominio.com.br seja associado ao servidor interno 192.168.0.2. E por aí vai. As possibilidades são muitas, e se você souber mexer com expressões regulares e o mod_rewrite do Apache, você consegue fazer tudo! P: Como posso bloquear outros sites de fazer links diretos em meus arquivos?

R: Geralmente quando você tem um site grande, alguns usuários sem ética começam a copiar tudo e deixar links diretos para os seus arquivos em páginas próprias. Para evitar muitos casos disso, pode-se usar o mod_rewrite. É só colocar as seguintes linhas dentro da sua configuração principal ou de um domínio virtual (<VirtualHost>):

RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?nomedodominio\.com\.br/.*$ [NC]

Page 47: Linux - Tutoriais

RewriteRule \.(mid|wav|mp3|zip|avi|rm|ram|swf|mpg|wmv|pdf)$ http://www.nomedodominio.com.br/download_negado.php [NC,R,L]

Este exemplo acima fará com que os sites que não estão inclusos no dominio www.nomedodominio.com.br tenham seu acesso negado ao link direto para os arquivos com as extensões: .mid; .wav; .mp3; .zip; .avi; .rm; .ram; .swf; .mpg; .wmv; .pdf. Ou seja, se alguma outra pagina fizer um link direto para um arquivo .mp3 do seu servidor por exemplo, ao invés dele pegar o arquivo .mp3, ele cairá na página http://www.nomedodominio.com.br/download_negado.php, que poderá conter um aviso de que o download direto foi negado. P: Eu tenho muitos domínios virtuais, como posso fazer para gerar logs separados de cada um?

R: Se você usa o Apache para apenas alguns sites, você nunca passará por este problema. Mas em servidores em que a quantidade de domínios virtuais é muito grande, surge a necessidade de você separar os logs de acesso para cada um dos dominios virtuais, com o fim de fazer a análise destes logs e apresentar estatísticas para os usuários de cada domínio (O Webalizer faz isso). Mas para cada arquivo de log, o Apache abre um processo de escrita, e o sistema tem um certo limite de processos, ou seja, o Apache só poderá abrir alguns poucos processos para escrever nos logs. Para resolver isso, existe um utilitário chamado split-logfile (que vem junto com o Apache) que separa os logs de acordo com o domínio virtual. Para fazer funcionar, primeiro retire todos os logs dos seus

Page 48: Linux - Tutoriais

domínios virtuais e adicione apenas as seguintes linhas de log na configuração principal do seu servidor (e não do domínio virtual):

LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%v %h %l %u %t \"%r\" %>s %b" common CustomLog "/var/www/logs/access_log" combined ErrorLog "/var/www/logs/error_log"

As primeiras duas linhas vão criar o formato da linha de log que o Apache irá escrever. A única diferença para o formato padrão é o acréscimo do %v no início, que indica o domínio virtual usado. As duas ultimas linhas indicam onde o log vai ser gravado (o de acesso e o de erros do servidor). Agora reinicie ou recarrege o seu Apache, e o seu arquivo de log estará sendo escrito de uma forma diferente. Agora vamos separar os logs por domínio virtual, e para isso é muito simples, é só criar um pequeno script que fará todo o processo: /usr/local/bin/separa-logs-apache

#!/bin/bash # # Separa os logs cd /var/www/logs/splitted /usr/bin/split-logfile < /var/www/logs/access_log # Zera o log principal echo -n > /var/www/logs/access_log Não esqueça de criar antes também o diretório /var/www/logs/splitted. Onde estarão armazenados os logs separados.

Page 49: Linux - Tutoriais

Agora é só rodar este script e verificar o conteúdo do /var/www/logs/splitted. Existirá um arquivo .log para cada domínio virtual, sem o nome do domínio virtual (string %v do LogFormat), permitindo que você use normalmente o arquivo de log (para fazer análises com o Webalizer por exemplo). Dicas - IPTables P: Como redireciono o tráfego de toda uma porta para um servidor meu?

R: Esta pergunta é muito importante. Suponhamos que você queira redirecionar o tráfego de envio de e-mails de toda a sua rede para um servidor de preferência, como por exemplo, um servidor interno que você tenha. Assim, ao invés de os usuários da sua rede utilizarem outro servidor SMTP, serão obrigados a sempre usar o servidor SMTP que você escolher. Para isso, necessita-se da seguinte linha no IPTables: iptables -t nat -A PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 25 (Se o seu servidor SMTP for na própria máquina do filtro IPTables) iptables -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to 192.168.0.2:25 (Caso seu servidor SMTP seja o 192.168.0.2, na porta 25) iptables -t nat -A PREROUTING -p tcp --dport 25 -j DNAT --to 256.103.245.3:25 (Caso você queira redirecionar para apenas o SMTP do seu provedor, substituindo o

Page 50: Linux - Tutoriais

256.103.245.3 pelo IP do servidor SMTP do seu provedor)

E por aí vai. Qualquer endereço, seja qualquer for ele, que o destino seja a porta 25, o filtro irá redicionar a conexão para onde quiser. Assim você pode evitar problemas de uma migração por exemplo, ou obrigar os usuários da sua rede ou de seu provedor a usarem o servidor SMTP especificado. Uma boa! :) Lembrando que isso não serve apenas para SMTP, e sim qualquer porta. Este método também é muito usado para deixar o Squid como proxy transparente. Dicas - ProFTPd P: Por que quando dou upload em algum arquivo, a hora não fica igual à hora do sistema do servidor FTP?

R: Em algumas distribuições do programa ProFTPd, há uma configuração padrão bem chatinha. O padrão diz que o programa armazene os arquivos com o fuso horário universal (GMT) e não o local. E a não ser que você realmente queira que ele faça assim, isso é horrível! Modifique o /etc/proftpd.conf e adicione a diretriz: TimesGMT off

Isso fará com que os arquivos tenham as datas locais certinho. P: Como utilizar um chroot e acessar diretórios disponíevis em vários lugares do sistema?

R: Para quem conhece o ProFTPd, sabe que pode-se configurar um chroot padrão para "trancar" o usuário dentro de um diretório. Este diertório pode ser o

Page 51: Linux - Tutoriais

diretório HOME do usuário, ou pode ser um diretório especificado. O problema deste método é que ao ficar dentro de um chroot como por exemplo: /home/usuario, o usuário do FTP não poderá acessar nada além deste diretório e seu conteúdo. Pode ser que o usuário precise acessar outros diretórios, e foi aí que chegou a alternativa para o chroot. O ProFTPd contém uma configuração bem flexível, parecida com a do Apache. Com a diretriz <Directory>, podemos restringir um certo usuário a acessar apenas os diretórios que queremos. Vou usar aqui um exemplo, que pode ser adaptado facilmente. Suponhamos que eu criei o usuário tobias e seu diretório home será /home/tobias. Dentro deste diretório, eu fiz os seguintes links simbólicos:

ln -s /var/www/html /home/tobias/apache-html ln -s /var/log/httpd /home/tobias/apache-logs ln -s /etc/httpd/conf /home/tobias/apache-conf

Como deu para perceber, tenho vários diretórios que estão localizados em locais totalmente diferentes uns dos outros, e não seria possível "prender" o usuário ao diretório /home/tobias. Criei estes links simbólicos, pois eles vão dar o caminho para que o usuário quando logar, poder entrar nestes diretórios. Vá no arquivo proftpd.conf (geralmente localizado no diretório /etc) e certifique-se que não esteja usando a opção DefaultRoot, para não utilizar-se do chroot. Agora adicione uma linha assim:

include "/etc/proftpd/tobias.conf"

Nesta linha eu pedi para o ProFTPd adicionar configurações a partir deste outro arquivo. Você poderia colocar o conteúdo deste arquivo no próprio proftpd.conf, mas resolvi adotar este método pois deixa

Page 52: Linux - Tutoriais

as configurações separadas por usuário, não deixando muito grande e bagunçado o arquivo principal. Agora crie o arquivo /etc/proftpd/tobias.conf e coloque o seguinte conteúdo:

<Directory /home/tobias> <Limit ALL> AllowUser tobias </Limit> </Directory> <Directory /var/www/html> <Limit ALL> AllowUser tobias </Limit> </Directory> <Directory /var/log/httpd> <Limit ALL> AllowUser tobias </Limit> </Directory> <Directory /etc/httpd/conf> <Limit ALL> AllowUser tobias </Limit> </Directory> <Directory /*> <Limit ALL> DenyAll

Page 53: Linux - Tutoriais

</Limit> </Directory>

Estas linhas indicam que o usuário tobias, através do FTP, poderá apenas acessar os diretórios /home/tobias (que além de ser seu diretório HOME, contém os links para mandá-lo para outros diretórios no sistema), /var/www/html, /var/log/httpd e /etc/httpd/conf. Todos os outros diretórios serão negados ao usuário. Deu para notar como funciona o método né? Não é tão difícil, é apenas uma idéia para contornar o problema de "segurança máxima" que o chroot oferece. Dicas - Servidor X P: Não consigo iniciar o servidor X, e ganho o seguinte erro: Fatal server error: could not open default font 'fixed'.

R: Este erro significa que o servidor X não conseguiu uma fonte padrão para usar. Isso pode ter ocorrido por dois motivos principais: 1. Você não está com o serviço xfs rodando 2. Você não instalou o pacote das fontes do X O primeiro motivo é o mais comum, e para resolver isso você precisa iniciar o servidor XFS (X Font Server), que atua na porta 7100, servindo as fontes para o servidor X. Para iniciar o serviço, tente:

/etc/rc.d/init.d/xfs start

Ou o equivalente na sua distribuição. Se você quiser mexer na configuração do xfs, então edite o arquivo:

/etc/X11/fs/config

Page 54: Linux - Tutoriais

Caso não seja isso, você vai precisar instalar os pacotes das fontes, que são por exemplo:

XFree86-base-fonts (ou xfonts-base) XFree86-ISO8859-15-75dpi-fonts XFree86-100dpi-fonts XFree86-75dpi-fonts XFree86-ISO8859-15-100dpi-fonts Dependendo claro da sua distribuição, como sempre. No caso as principais fontes são a base e a de 75dpi.

Dicas - Tomcat P: Como desabilitar a listagem de diretórios quando não há um index?

R: No diretório de configuração do Tomcat, edite o arquivo 'web.xml'. Você pode desabilitar essa característica padrão do Tomcat no servlet 'default', que já vem pré-configurado. Geralmente as tags do servlet default se encontram no começo do arquivo. Veja o exemplo: <servlet> <servlet-name>default</servlet-name> <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> ... </servlet>

Um dos parâmetros deste servlet é o listings, e é ele que você deve desabilitar. Por padrão, fica como 'true', então colocaremos 'false':

<init-param>

Page 55: Linux - Tutoriais

<param-name>listings</param-name> <param-value>false</param-value> </init-param>

Depois é só salvar o arquivo, reiniciar o Tomcat e ir pro abraço!

Dicas - VIM P: Como associo um novo tipo de extensão com um novo syntax highlight? R: Quando o Vim carrega o arquivo, ele verifica em suas configurações que tipo de cores de sintaxe ele vai carregar para cada tipo de extensão. A configuração está localizada no arquivo filetype.vim, encontrado no diretório de arquivos de configuração do vim. Este diretório vai depender muito da sua distribuição, e da versão do próprio vim que você estiver utilizando. Um exemplo seria: /usr/share/vim/vim61/filetype.vim

Mas se você não estiver com muito saco para sair procurando pelo arquivo de diretório em diretório, busque pelo arquivo filetype.vim. Olhando inicialmente para ele, parece meio dificil, mas você só vai precisar alterar coisas mínimas. Use o bom senso e veja o exemplo:

(Antes:) " HTML (.shtml for server side) au BufNewFile,BufRead *.html,*.htm,*.shtml setf html (Depois:) " HTML (.shtml for server side)

Page 56: Linux - Tutoriais

au BufNewFile,BufRead *.html,*.htm,*.shtml,*.tpl setf html

Aqui eu adicionei a extensão .tpl (de templates) para que use as cores de sintaxe do HTML. Agora vamos supor que você queira associar a extensão .sex ao arquivo de sintaxe ecchi.vim:

au BufNewFile,BufRead *.sex setf ecchi

O arquivo ecchi.vim terá todas as especificações de cores, e terá que fica no subdiretório syntax/, dentro do diretório do vim que citei um pouco acima. E por último, caso você queira usar um certo tipo de sintaxe durante a execução do Vim, é só utilizar o comando (por exemplo):

:set syntax=python Dispositivos no Linux O que são dispositivos? Um dispositivo é todo o componente de hardware, e do sistema operacional. Um dispositivo é "algo especial" que é compartilhado com o Kernel, ou seja, um exemplo de dispositivo são as impressoras, CD-ROMs, modems, portas, mouse, HDs, etc. No Linux, os dispositivos físicos são tratados como arquivos. Estes arquivos são um tipo especial no sistema de arquivos e se encontram no diretório /dev. Se você der um ls neste diretório, verá que existe um pouquínho de arquivos (Bota pouquinho nisso :)). Cada arquivo neste diretório corresponderá a um dispositivo de acordo com o seu tipo. Se você usava DOS/Windows antes, você acessava o drive C:, lembra? No Linux não existe isso! Vai ser um

Page 57: Linux - Tutoriais

dispositivo no lugar... Você vai usar isso o tempo todo, porque você vai mexer com mouse, com impressora, IDE's, SCSI's, etc. Então aqui vai alguns arquivos do /dev e seus respectivos dispositivos: /dev/hdXX Aqui é correspondete as Interfaces IDEs, ou seja, tudo que tiver conectado nos cabos IDEs :) Exemplos, podemos citar HD's e CD-ROM's. O xx significa qual IDE, onde o primeiro x corresponde a qual IDE, e o segundo x (opcional) corresponde a partição. Veja a tabela à seguir:

Dispositivo Descrição /dev/hda IDE Primária Master /dev/hda1 Partição 1 da IDE Primária Master /dev/hda2 Partição 2 da IDE Primária Master /dev/hdb IDE Primária Slave /dev/hdb1 Partição 1 da IDE Primária Slave /dev/hdb2 Partição 2 da IDE Primária Slave /dev/hdc IDE Secundária Master /dev/hdc1 Partição 1 da IDE Secundária Master /dev/hdc2 Partição 2 da IDE Secundária Master /dev/hdd IDE Secundária Slave /dev/hdd1 Partição 1 da IDE Secundária Slave /dev/hdd2 Partição 2 da IDE Secundária Slave

... ...

Perceba aqui que cada hdx vai até os números 2, mas não é apenas até o 2, pode ir mais longe. Dependendo de quantas partições tiver o seu HD, pode ser 3, ou 4, ou 9 por exemplo. /dev/fdX

Page 58: Linux - Tutoriais

Aqui é o dispositivo equivalente ao drive de disquete, onde o x corresponde a qual driver. Caso você tenha apenas um drive, esse drive vai ser o /dev/fd0. Se tiver 2 drives, o primeiro será /dev/fd0 e o segundo /dev/fd1, e por aí vai. /dev/ttyX Quando você se loga no seu Linux, você acaba de se logar nesse terminal. Ou seja, um terminal serve para voc6e se logar e usar uma shell (interpretador de comandos). O /dev/ttyX corresponde a cada terminal, onde X vai ser substituído pelo número do terminal (são dezenas se quiser). Pode ser /dev/tty1 (Terminal 1), /dev/tty3 (Terminal 3), /dev/tty8 (Terminal 8) e por aí vai... até você enjoar :) Você também pode se deparar com /dev/ttypX. Neste caso é para terminais acessados por telnet/ssh. /dev/ttySX Portas seriais! Na versão 2.2.x do kerne, estas portas seriais correspondem ao modem, ao mouse, e outras coisas ligadas nas 'COMs'. Veja a tabela:

Dispositivo Descrição

/dev/ttyS0 COM1 (Porta serial 1)

/dev/ttyS1 COM2 (Porta serial 2)

/dev/ttyS2 COM3 (Porta serial 3)

/dev/ttyS3 COM4 (Porta serial 4)

Agora se você usa um kernel velho de versão anterior a 2.2.x, ao invés de ser /dev/ttySX, vai ser /dev/cuaX. Ou seja, você terá os equivalentes como /dev/cua0,

Page 59: Linux - Tutoriais

/dev/cua1, /dev/cua2 e /dev/cua3. E estes dispositivos /dev/cuaX são usados para determinar os modems. /dev/lpX Corresponde a porta da impressora ou porta de um serviço paralelo. X é o número correspondente a porta... 0 = LPT1 por exemplo. /dev/plipX Esse dispositivo corresponde a uma conexão de cabo paralelo. O X será o número correspondente a porta, como no exemplo anterior. /dev/console Este é um dispositivo especial, simbolizando os consoles (terminais não-gráficos). /dev/null Este é um dispositivo nulo, ou seja, tudo que você mandar ou se referir a ele, será nulamente mandado para o inferno :) Outros Os dispositivos são muitos e listar todos eles aqui não seria tão legal assim. Você pode explorar o diretório /dev procurando saber sobre eles. Se você por acaso apagou um dispositivo e quer saber como criá-lo, utilize o script /dev/MAKEDEV. Basicamente você usa este script assim:

# /dev/MAKEDEV ttyS3

Isto irá criar o dispositivo ttyS3. Para mais informações sobre a criação de dispositivos, utilize a manpage do MAKEDEV ou do mknod. Na verdade o /dev/MAKEDEV é apenas um script para intermediar o usuário e o comando mknod... O mknod é o que faz o trabalho mais árduo :)

Page 60: Linux - Tutoriais

Montando os dispositivos Primeiro eu espero que você tenha lido sobre o que é um dispositivo. Agora vamos saber como se usar um dispositivo, ou seja, um HD, um disquete, um CD-ROM, etc. O comando que usaremos aqui é o mount, que pelo próprio nome, podemos ver que ele serve para 'montar' dispositivos em um certo lugar. Vamos falar primeiro sobre como montar o disco flexível. Para fazê-lo é o seguinte. O Linux trata todos os seus dispositivos como arquivos device, estes arquivos estão localizados no diretório "/dev". Para o caso do disco flexível, o Linux trata como /dev/fdx, onde x é o número do dispostivo: o primeiro será fd0, o segundo será fd1, e assim por diante. Aqui no caso, estamos com um driver de disquete, que é o /dev/fd0. Para montar o disco flexível então, colocamos o disquete, e executamos o seguinte comando:

# mount /dev/fd0 /diretorio_onde_o_disco_vai_ser_montado O diretório_onde_o_disco_vai_ser_montado tem que existir, e tem que estar totalmente vazio. Este diretório, que você pode nomear como quiser funciona como se você estivesse no disquete. Agora se você quer montar outro disquete, você terá que desmontar o disquete montado primeiro, para depois poder montar outro. Para o desmonte, usa-se o comando "umount":

# umount /dev/fd0 (ou) # umount /diretorio_onde_o_disco_esta_montado

Você pode também fazer o seguinte, criar um shell script, que se chama, por exemplo de 'diskon' (Para ativar) e 'diskoff' (Para desativar). Então para melhor utilização, coloque este arquivo em um diretório

Page 61: Linux - Tutoriais

PATH, ou então coloque o PATH no diretório onde você quiser colocar os scripts. Agora vamos montar uma partição. É o mesmo esquema de montar o disco flexível, só que o arquivo do dispositivo é diferente. Para partições em um HD IDE, os nomes dos dispositivos são /dev/hdxx, onde o primeiro x é a letra correspondente ao HD (na ordem a, b, c, d, e por aí vai), e o segundo x é correspondente ao número da partição. Para partições em um HD SCSI, os nomes dos dispositivos são /dev/sdxx, onde o primeiro x é a letra correspondente ao HD (na ordem a, b, c, d, e por aí vai), e o segundo x é correspondente ao número da partição. Se eu quero montar a partição /dev/hda2 (HD número 1, partição número 2), eu faço:

# mount /dev/hda2 /diretorio

E para desmontar, usa-se o comando umount:

# umount /dev/hda2 (ou) # umount /diretorio Existe também no comando mount, o parâmetro -t, que vai indicar que tipo de sistema de arquivos a partição usa (FAT32, FAT16, minix, ext2, UMSDOS, etc). Se você não colocar esta opção, o comando força uma compatibilidade para a montagem. O recomendado é colocar esta opção, pois às vezes o mount não consegue detectar qual o sistema de arquivos, e gera um erro. Um exemplo do uso da opção -t é:

# mount -t vfat /dev/hda2 /diretorio

Este comando montará uma partição FAT32 em /diretorio. Como eu disse anteriormente, utilizar-se de shell scripts facilita seu trabalho. Agora vamos montar um CD-ROM. O mesmo esquema, só que você deve saber qual o dispositivo referente ao seu CD-ROM, que

Page 62: Linux - Tutoriais

tem como nome /dev/hdx, onde x é a letra correspondente à posição do CD-ROM na IDE. Para montar um exemplo, façamos:

# mount /dev/cdrom /mnt/cdrom

Para desmontar, a mesma coisa de sempre:

# umount /dev/cdrom (ou) # umount /mnt/cdrom Nota: Se você der uma olhada no arquivo /dev/cdrom, você verá que ele não é um dispositivo, e sim um link simbólico para o dispositivo correspondente ao CD-ROM (/dev/hdx). Isso quer dizer que você pode substituir o /dev/cdrom pelo /dev/hdx tranqüilamente, assim como pode também modificar o link simbólico para apontar para outro dispositivo. Existe outro método de montagem muito mais prático do que os citados acima... É uma pré-configuração de montagem no arquivo /etc/fstab. Este arquivo contém as informações de montagem para os dispositivos e seus diretórios. Por exemplo, quando a sua distribuição inicia, ela procura no /etc/fstab para saber onde está a raiz do seu sistema, e vai montar no /. Também contém informações de montagem para os diretórios especiais como o /proc, e até mesmo para o uso da memória SWAP. Vejamos aqui o meu arquivo /etc/fstab como exemplo para estudarmos ele:

$ cat /etc/fstab /dev/hda2 swap swap defaults 0 0 /dev/hda5 / reiserfs defaults 0 0 /dev/hda1 /boot ext2 defaults 1 1 /dev/fd0 /mnt/floppy auto user,noauto 0 0 /dev/cdrom /mnt/cdrom iso9660

Page 63: Linux - Tutoriais

user,noauto,ro 0 0 none /proc proc defaults 0 0 none /dev/pts devpts gid=5,mode=620 0 0

Viu este exemplo? Por exemplo, peguemos a segunda linha. Esta segunda linha é a minha raiz, que está na partição /dev/hda5, será montada automaticamente ('defaults') no diretório "/" durante a inicialização. E esta partição tem o sistema de arquivos ReiserFS. Na primeira temos a montagem da memória SWAP... E vejamos a linha que começa com /dev/cdrom. Aqui facilita as coisas porque os parâmetros 'user,noauto,ro' significam que qualquer usuário pode montar o CD-ROM (user), não é montado automaticamente na inicialização (noauto) e é montado como somente leitura. Qual a diferença? O comando mount só pode ser usado pelo root, mas com essa opção no /etc/fstab, um usuário comum pode montar o cd-rom apenas com o comando "mount /mnt/cdrom", ou "mount /dev/cdrom". A sintaxe deste arquivo não é muito difícil, e vendo este exemplo aqui, você pode muito bem criar suas próprias configurações para dar mais praticidade no seu uso com os dispositivos no Linux! Mexa à vontade, mas nunca nas linhas que já vêm, pois se não o Linux pode não achar sua partição e poderá não conseguir iniciar o sistema, e você terá de bootar com um bootdisk para consertar isto... Então mexa, mas pense duas vezes antes de mexer :) Comentários das distribuições Linux Red Hat

Page 64: Linux - Tutoriais

A empresa americana Red Hat, caracterizada com uma pessoa "sombra" com um chapéu vermelho, foi uma das pioneiras no tratamento sério do Linux. Desde o início ela é uma das principais distribuições mundiais, e tem influências em todos os lugares. Sua equipe não apenas ajuda na distribuição em si, mas também no próprio Linux (como é o caso do kernel-hacker Alan Cox). Várias e várias distribuições começaram se baseando nesta distribuição, o que a faz uma boa base para todos. Criadora do RPM, o gerenciador de pacotes mais usado atualmente no Linux, a Red Hat atualmente têm uma distribuição mais voltada para o mercado de servidores. Mas isso não quer dizer que ela não seja boa também para uso doméstico. Você encontra nela uma facilidade de manuseio, pacotes atualizados e muita coisa que fazem muita gente fica apegada à esta distribuição. http://www.redhat.com Slackware Podemos dizer que o Slackware é uma das mais famosas distribuições para Linux. O seu criador, Patrick Volkerding, lançou a primeira versão da distribuição em Abril de 1992, e desde então segue uma filosofia bem rígida: manter a distribuição o mais parecido com o UNIX possível. As prioridades da distribuição são: estabilidade e simplicidade, e é isso que a torna uma das mais populares distribuições disponíveis. O Slackware tem uma fama de ser difícil de usar, mas isto não é verdade. Ele possui uma interface de instalação bem amigável, além de uma série de scripts que ajudam na instalação e desinstalação de pacotes.

Page 65: Linux - Tutoriais

O problema é que muitos pensam que têm de se pegar as fontes dos programas, compilá-los, instalá-los para depois usar no Slackware, mas isso não é verdade! O sistema padrão de pacotes do Slackware é o .tgz (que ao contrário do que muitos pensam, não é igual ao .tar.gz, pois contém algumas informações adicionais sobre a instalação), e as atuais versões do Slackware também vêem com o gerenciador de pacotes RPM, podendo assim instalar os aplicativos já compilados em ambos os formatos. O Slackware pode ser uma alternativa tanto para usuários iniciantes como os já experientes. As opções de instalação permitem que o usuário possa instalar em sua máquina uma distribuição que tem como características uma grande variedade de desktops (gerenciadores de janelas como o Gnome, KDE, Window Maker, Enlightenment, fvwm), ou como um poderoso servidor com todos os recursos necessários (utilitários de rede, servidores http, noticias, e-mail, ftp, etc). Os pacotes sempre estão em atualização, mantidos por uma versão especial da distribuição: o slackware-current. Isto desfaz o mito de que o slackware não é uma distribuição "dinâmica". Todos aqueles aplicativos estão disponíveis, e são atualizados regularmente. Então o único potencial que o Slackware ainda não tem é um gerenciamento de pacotes que permita uma checkagem de dependências... Fora isso, ela atende todas as boas exigências facilmente! Você poderá obter mais informações e fazer o download desta distribuição através da página oficial que fica no seguinte endereço: http://www.slackware.com Debian

Page 66: Linux - Tutoriais

Talvez a filosofia do Debian seja o ponto que mais chama atenção nesta popular distribuição! No início, antes do Linux ser lançado oficialmente por Linus Torvalds, o projeto GNU já tinha várias ferramentas Unix-like disponíveis. O que faltava era um kernel, e então quando Linus Torvalds lançou o seu kernel Linux, resolveram então criar o GNU/Linux. Não, não é outro sistema diferente, é só um nome para chamarem as distribuições que usam o kernel Linux, e que têm ferramentas feitas pelo projeto GNU. Mas o que isso tudo tem haver com o Debian? O Debian GNU/Linux é uma distribuição que segue toda esta filosofia do projeto GNU, oficialmente contendo apenas pacotes com programas de código-fonte livre, feito por voluntários espalhados pelo mundo, e sem fins lucrativos alguns. Apesar de atualmente o Debian ser usado com o kernel Linux, ele se entitula como um sistema operacional que pode usar não apenas o kernel do Linux em si, mas outros kernels como o Hurd (projeto de kernel livre feito fora do escopo do Linux). Isso o faz o "Sistema Operacional Universal", pois o principal objetivo deles é fazer um sistema que rode em todos os lugares e com vários kernels. E claro, isso tudo na filosofia GNU. O Debian tem uma quantidade incrível de pacotes pre-compilados para vários tipos de arquitetura. Ele conta com mais de 3950 pacotes, que facilitam e muito a instalação e gerenciamento de programas no sistema. Além do mais, ele é o pai do apt, a ferramenta de atualização de pacotes automática, feita pela internet. Mas há quem diga que o Debian ainda tem muito o que melhorar: Uma instalação complicada e ideologismo demais são alguns pontos fracos que muita gente

Page 67: Linux - Tutoriais

encontra nesta distribuição. Cabe à você ver se é a distribuição certa ou não. http://www.debian.org Conectiva Uma empresa de serviços ISP, que trabalhava com Linux, resolveu desafiar a rotina e começou a criar uma distribuição baseada na RedHat. Esta empresa brasileira criou (até onde eu saiba) a primeira distribuição brasileira, o Conectiva Red Hat Linux. A primeira versão se chamou Parolin, e não continha muita coisa além de traduções da distribuição Red Hat. Porém, seu desenvolvimento foi crescendo e resolveram partir para um rumo próprio, fazendo suas próprias alterações e ideologias na distribuição em uma rota diferente da empresa americana Red Hat. Então surgiu o que atualmente conhecemos de Conectiva Linux. A partir do ano de 1999, o Linux começou a explodir de popularidade no Brasil. E o Conectiva Linux, que já estava na sua versão 3.0, ficou muito popular entre os usuários brasileiros, e foi isso que fez com que a empresa conseguisse investir mais ainda na distribuição. O Conectiva Linux atualmente é uma boa distribuição brasileira, que provou ser tão boa quanto as estrangeiras. Há quem aponte seus pontos fortes e fracos... Apesar de ter tomado um rumo diferente ao da Red Hat, sua distribuição ainda se baseia nos conceitos básicos da americana, assim como muitas outras baseadas na Red Hat. Mas muita coisa boa foi feita para melhorar a distribuição, como a criação do apt (ferramenta de atualização de pacotes) para pacotes RPM, o GNU parted (particionador), traduções

Page 68: Linux - Tutoriais

diversas para o português, entre outras coisas. O objetivo da distribuição é tornar fácil as coisas para os usuários novos, sem comprometer muito o andamento do sistema. http://www.conectiva.com.br SuSE A SuSE (não, não é a amiga da Barbie!) é uma empresa alemã que é uma das maiores influências do Linux no mundo, junto com a Red Hat. No início, a SuSE baseava sua distribuição no Slackware, mas logo depois tomou rumo diferente, começando a implementar os pacotes com o RPM, e fazendo mudanças na forma de organização do sistema. Criaram também uma ferramenta de configuração do sistema chamada YaST, que facilita e muito mexer nas configurações da distribuição. Atualmente o SuSE é utilizado por muitas máquinas na Europa, incluindo instituições educacionais e no governo. Sem dúvida é uma distribuição notável, porém não muito usada no Brasil. http://www.suse.de/br/ Mandrake Esta empresa francesa resolveu apostar no Linux como um sistema fácil para todos! E esse é o objetivo principal da empresa, criar uma distribuição fácil para todos os tipos de pessoas usarem. Baseada na americana Red Hat, o Mandrake vêm com vários programas de configuração fáceis de ser utilizados e bem úteis. Durante o crescimento brusco do Linux mundialmente, o Mandrake adquiriu muitos fãs e uma popularidade incrível principalmente na América do Norte, através de sua interface fácil e dinamismo. http://www.mandrake.com

Page 69: Linux - Tutoriais

LRP (Linux Router Project) Já pensou no dinheiro que você terá de gastar para comprar um roteador? Se você precisar de um roteador, vai precisar de dinheiro também. O Linux Router Project (Projeto Linux Roteador) é uma mini-distribuição que cabe em apenas um disquete, e que contém os utilitários de rede básicos para deixar um computador com duas placas de rede funcionando como um roteador. A configuração mínima para você rodar o roteador é um simples 486 com 16MB de RAM, e como só vai usar um disquete, nem precisa de HD! O site oficial para esta mini-distribuição é: http://www.linuxrouter.org LFS (Linux From Scratch) O Linux From Scratch é um projeto interessantíssimo para quem quer ver àfundo como funciona a criação de uma distribuição Linux. O autor não estava satisfeito com nenhuma distribuição que tinha usado, e resolveu criar uma pra ele mesmo. É aí que entra o espírito: ele fez um tutorial passo-a-passo de como ele montou a distribuição dele, e compartilhou com todos. Assim, com estas instruções, qualquer um pode montar sua própria distribuição. O nome Linux From Scratch significa "Linux do Zero" em inglês, e é muito bom! O site oficial para esta "distribuição" fica no seguinte endereço: http://www.linuxfromscratch.org Zipslack O zipslack é um mini-Slackware, feito para rodar numa partição DOS/Windows. Através desta versão especial, é possível qualquer um pegar na internet um arquivo em formato .zip, descompactá-lo no diretório c:\linux e usar o linux à vontade! Para realizar este feito, usa-se

Page 70: Linux - Tutoriais

o sistema de arquivos UMSDOS, e através do utilitário "loadlin" (substitui o LILO), o kernel é carregado. O arquivo do zipslack vem bem "enxuto", mas você pode rechear simplesmente pegando os pacotes .tgz e instalando-os com o comando "installpkg pacote.tgz", e com isso você pode instalar o sistema X, junto com os Gerenciadores de janelas, e também servidores como o Apache. Por que o nome zipslack? Esta mini-distribuição foi feita para se rodar em um disco de zipdrive, e tem um limite de 100MB. Claro que você pode optar em não utilizar um zipdrive, e assim poder usar o espaço que quiser, mas é um recurso muito bom para alguns utilitários básicos que você pode carregar para todo lugar junto com o disquete e drive do zipdrive. O site oficial dele é o mesmo que o do Slackware, no seguinte endereço: http://www.slackware.com Criando um file server "transparente" no Linux Quem acessa IRC deve saber o que é um file server. Um file server é um "programa" de IRC que fica em um certo canal, servindo arquivos livremente para as outras pessoas. No Windows isso já é uma realidade bem comum, mas no Linux é algo um pouco ainda oculto. Este tutorial ensina à qualquer usuário que tenha uma conta shell em um sistema Linux à montar seu file server, e não necessita nem de interface gráfica. Para fazer isso, utilizarei o seguinte:

• screen - http://www.gnu.org/software/screen/ - Um programinha muito bom que serve como um "gerenciador de janelas" para o modo texto do Linux. As distibuições geralmente vêm com ele, então

Page 71: Linux - Tutoriais

possivelmente não será necessário baixar e compilar o programa, pois ou você já tem instalado, ou deve vir um pacote pronto na sua distribuição. Verifique se o programa está instalado com o comando: "which screen". Se aparecer o cominho do executável, então ele existe, se não aparecer nada, tem que ser instalado :) • X-Chat - http://www.xchat.org - O X-Chat é um cliente de IRC muito bom que inicialmente foi feito pra GTK+ (gráfico). Mas como o autor fez o programa de forma modular, ele criou como demonstração um pequeno front-end em modo texto. O front-end não é muito bom, mas serve muito bem para o que queremos no momento. Baixe o código-fonte do X-Chat estável mais novo, pois iremos compilar apenas o modo-texto e usar em conjunto com o programa screen. • Obsidian File Server - http://tlm.conectiva.com.br/fserver_linux/obsidian-0.9.1-pre3.pl - Este é um script feito em perl que introduz um file server muito bom no X-Chat.

Compilando o X-Chat Primeiro de tudo vamos compilar o front-end texto do X-Chat. Supondo que você já tenha baixado o código-fonte do programa, vamos aos passos da compilação:

$ tar jpfx xchat-1.8.11.tar.bz2 $ cd xchat-1.8.11 $ ./configure --disable-gtkfe --disable-glib --disable-gnome \ --disable-zvt --disable-gdk-pixbuf --disable-xlib \ --disable-glibtest --disable-gtktest [...configurando a compilação...]

Page 72: Linux - Tutoriais

xchat 1.8.11 Building GTK+ Interface .... : no Building TEXT Interface .... : yes gnome-libs .......... : no gnome panel ......... : no perl ................ : yes gdk-pixbuf........... : no python .............. : no mmx tinting ......... : yes zvt shell tab ....... : no nls/gettext ......... : yes plugin interface .... : yes glib replace ........ : yes link with socks5 .... : no translation tables .. : yes openssl support ..... : no japanese conversion . : no ipv6 support ........ : no hebrew support ...... : no $ make [...compilando...] $ cd src/fe-text $ strip -s xchat-text

Pronto. Se tudo ocorreu bem, o X-Chat foi compilado com êxito. Agora vamos criar um diretório que vai ser o "home" do file server. Eu procuro sempre deixar o file server com um usuário especial para ele. Então vou criar o usuário fserver, com o seu diretório home sendo o /var/fserver, pois aqui a partição que tem mais espaço é o /var. Não se esqueça deste diretório home, pois usaremos em outros lugares neste tutorial.

# adduser fserver -d /var/fserver # passwd fserver

Page 73: Linux - Tutoriais

Changing password for user fserver. New password: Retype new password: passwd: all authentication tokens updated successfully.

Agora logue-se como este usuário, ou execute o comando "su - fserver", que te transforma no usuário fserver. Vamos criar então a estrutura de diretórios do file server:

$ pwd /var/fserver $ mkdir bin .xchat incoming fserver

Agora vamos colocar os arquivos necessários para o funcionamento do file server. Antes de mais nada, você precisará colocar o programa xchat-text dentro do diretório bin do usuário fserver. Vá no diretório onde você descompactou e compilou o código-fonte do xchat e copie:

$ cd src/fe-text $ cp xchat-text /var/fserver/bin

Agora execute o xchat-text para ele criar os arquivos de configuração padrões do x-chat. Depois aperte CTRL+C para sair do mesmo. Vamos então criar o script que irá iniciar o file server. Crie um arquivo chamado "/var/fserver/bin/fserver" e coloque o seguinte conteúdo:

#!/bin/bash # case $1 in start) screen -A -m -d -S fserver /var/fserver/bin/xchat-text ;;

Page 74: Linux - Tutoriais

stop) screen -r fserver ;; esac

Depois transforme este arquivo em executável:

$ chmod +x /var/fserver/bin/fserver

Este script quando executado, chamará o programa screen para rodar em background o programa xchat-text. Mas se ele está em background, como diremos à ele para conectar a um certo servidor e entrar em um certo canal? Para isso faremos um script em perl. Crie o arquivo "/var/fserver/.xchat/script.pl" com o seguinte conteúdo:

#!/usr/bin/perl -w # Função que entra identifica o nick, liga o file server e entra nos canais sub entrarcanais { IRC::command("/nickserv identify minhasenha"); IRC::command("/fs on"); IRC::command("/join #canal"); } # Inicialmente conectar no servidor e depois de 1 minuto (6000 milisegundos), # executar a função acima "entrarcanais" IRC::command("/server irc.brasnet.org"); IRC::add_timeout_handler(60000,"entrarcanais"); # Função que de 5 em 5 minutos atualiza o file server sub flushfiles { IRC::command("/fs on"); IRC::command("/fs update_files");

Page 75: Linux - Tutoriais

IRC::add_timeout_handler(300000,"flushfiles"); } # Ativa o timer que executa a fução flushfiles em 5 minutos IRC::add_timeout_handler(300000,"flushfiles"); Pronto, agora quando o xchat-text for iniciado, ele automaticamente vai carregar este script em perl. Agora falta configuramos melhor o xchat. Por padrão, a interface texto não cria um xchat.conf muito decente. Então sobrescreva o arquivo "/var/fserver/.xchat/xchat.conf" colocando o seguinte conteúdo:

auto_indent = 1 auto_resume = 1 auto_unmark_away = 0 autodccchat = 1 autodccsend = 1 autodialog = 1 autoopendccchatwindow = 1 autoopendccrecvwindow = 1 autoopendccsendwindow = 1 autoreconnect = 1 autoreconnectonfail = 1 autorejoin = 1 autosave = 1 autosaveurl = 0 awayreason = I'm busy background_dialog_pic = background_pic = ban_type = 0 beep_msg = 1 beep_chans = 0 bluestring =

Page 76: Linux - Tutoriais

chanmodebuttons = 1 channelbox = 0 cmdchar = / colorednicks = 0 ctcp_number_limit = 5 ctcp_time_limit = 30 dcc_blocksize = 4096 dcc_ip = dcc_permissions = 420 dcc_remove = 0 dcc_send_fillspaces = 1 dcc_stall_timeout = 60 dcc_timeout = 180 dccdir = /var/fserver/incoming dccwithnick = 0 dialog_height = 100 dialog_indent_nicks = 1 dialog_indent_pixels = 80 dialog_show_separator = 1 dialog_tint = 1 dialog_tint_blue = 151 dialog_tint_green = 151 dialog_tint_red = 151 dialog_transparent = 1 dialog_width = 300 dialog_wordwrap = 1 dnsprogram = host doubleclickuser = /QUOTE WHOIS %s fastdccsend = 1 filterbeep = 0 first_dcc_send_port = 0 font_dialog_normal = -misc-fixed-medium-r-semicondensed-*-13-*-*-*-c-*-iso8859-15 font_normal = -misc-fixed-medium-r-semicondensed-*-13-*-*-*-c-*-iso8859-1

Page 77: Linux - Tutoriais

font_shell = fudgeservernotice = 0 hide_version = 0 hidemenu = 0 hideuserlist = 0 hilight_notify = 0 hilightnick = 1 host_in_userlist = 0 hostname = indent_nicks = 1 indent_pixels = 80 inputgad_superfocus = 1 invisible = 0 ip_from_server = 1 lagometer = 2 last_dcc_send_port = 0 limitedtabhighlight = 1 logging = 0 logmask = %s,%c.xchatlog mail_check = 0 mainwindow_height = 477 mainwindow_left = 121 mainwindow_save = 1 mainwindow_top = 178 mainwindow_width = 714 max_auto_indent = 256 max_lines = 3000 msg_number_limit = 5 msg_time_limit = 30 newtabs_to_front = 1 nick_suffix = : nickcompletion = 1 nickgad = 1 nickname1 = Nick1DoFserver nickname2 = Nick2DoFserver

Page 78: Linux - Tutoriais

nickname3 = Nick3DoFserver notices_tabs = 0 notify_timeout = 15 nu_color = 4 old_nickcompletion = 0 paned_userlist = 0 partreason = Client Exiting percascii = 0 perccolor = 1 perlwarnings = 0 persist_chans = 1 pingtimeout = 0 priv_msg_tabs = 1 proxy_host = proxy_port = 0 proxy_type = 0 quitreason = Client Exiting raw_modes = 0 realname = Campo Nome reconnect_delay = 10 servernotice = 1 show_away_message = 1 show_away_once = 1 show_invite_in_front_session = 0 show_notify_in_front_session = 0 show_separator = 1 skipmotd = 0 skipserverlist = 1 stamp_format = [%H:%M:%S] stripcolor = 0 style_inputbox = 1 style_namelistgad = 0 tabchannels = 1 tabs_position = 0 thin_separator = 1

Page 79: Linux - Tutoriais

throttle = 1 throttlemeter = 2 timestamp = 0 timestamp_logs = 0 timestamp_log_format = %b %d %H:%M:%S tint = 1 tint_blue = 151 tint_green = 151 tint_red = 151 topicbar = 1 transparent = 1 trans_file = treeview = 0 truncchans = 0 use_fontset = 1 use_server_tab = 0 use_trans = 0 userhost = 1 userlist_sort = 0 userlist_icons = 1 userlistbuttons = 1 username = fserver wallops = 1 whois_on_notifyonline = 0 windows_as_tabs = 1 wordwrap = 1 Sim, este é um arquivo de configuração para o X-Chat modo gráfico, mas as opções que tem a mais não vão influenciar em nada, e tudo que queremos vai estar aí. Você só precisa modificar as linhas que estão em negrito, que são os campos de Nick, Nome Real, Username, entre outros. Veja que também a linha "dccdir = /var/fserver/incoming" dirá que todo arquivo que o file server pegar vai para este diretório. Nesta

Page 80: Linux - Tutoriais

configuração o DCC Get está habilitado para pegar automaticamente os arquivos, mas se você quiser desabilitar isso, mude no arquivo acima o valor da variável "autodccsend" para 0. Agora só falta uma coisa: O File Server! Mas é bem simples. Coloque o arquivo "obsidian-0.9.1-pre3.pl" que você baixou no diretório "/var/fserver/.xchat". O X-Chat irá carregar este script automaticamente na inicialização. E parar configurar, crie um arquivo chamado "/var/fserver/.xchat/obsidian.conf" com o seguinte conteúdo:

debug:0 ctcptrigger:1 restorequeues:1 autoon:1 notice_as_msg:0 short_notice:0 raw_chnl_msg:1 raw_wlcm_msg:0 open_tab_early:1 close_tab_auto:0 case_cmd:0 case_file:0 fs_sensitive:0 count_sends:1 send_small_now:1 ads_when_full:1 priority_op:1 priority_voice:1 max_users:10 max_sends:3 max_queues:20 slots_big:1 slots_med:4

Page 81: Linux - Tutoriais

slots_small:10 size_big:30000000 size_med:1000000 max_fails:5 min_speed:0 idle_time:180 trigger:!boboalegre serve_no_notify:#testchnl2 serve_hidden:#testchnl3 notify_to_voice:#testchnl2 notify_channels:#canal notify_timeout:0 root_dir:/var/fserver/fserver note:Aqui estão alguns arquivos!! XUGUEM! auto_backup:60 logo:^C14[^C13Oßsidian FServe^C14]^C c1:^C13 c2:^C14 c3:^C13 c4:^C15 As linhas em negrito são as principais que você tem que mudar. Vou explicá-las:

• priority_op:1 - Dá prioridade para os OPs no file server, ou seja, eles entram na frente de todo mundo na fila dos queues! :) • priority_voice:1 - Mesma coisa do item acima, só que para os que tem voice. • max_users:10 - Quantos usuários podem dar uma olhada no file server ao mesmo tempo. • max_sends:5 - Quantos envios simultâneos o file server pode fazer (1 por pessoa). • max_queues:50 - Quantos queues (ou slots) podem ser ocupados no file server.

Page 82: Linux - Tutoriais

• slots_big:1 - Quantos slots uma pessoa pode ter com arquivos grandes. • slots_med:4 - Quantos slots uma pessoa pode ter com arquivos médios. • slots_small:10 - Quantos slots uma pessoa pode ter com arquivos pequenos. • size_big:30000000 - Qual o tamanho em bytes para um arquivo ser considerado grande (Aqui: 30MB • size_med:1000000 - Qual o tamanho em bytes para um arquivo ser considerado médio (Aqui: 1MB) • max_fails:5 - Quantas falhas a transfer6encia pode ter até ser cancelado o slot/queue. • trigger:!boboalegre - Qual o trigger do file server. • notify_channels:#canal - Quais canais notificar, separados por virgula • notify_timeout:0 - De quanto em quanto tempo anunciar o file server? (0 = Modo em Silêncio) • root_dir:/var/fserver/fserver - Diretório onde ficam os arquivos do file server • note:Aqui estão alguns arquivos!! XUGUEM! - Mensagem do file server

Você pode mexer nas outras opções também, mas eu não recomendo. Vá testando os valores até você ver que ficou perfeito para você e seu file server. Agora é só rodar o file server com o seguinte comando:

$ /var/fserver/bin/fserver start

E esperar um pouco para que seu file server entre no canal já funcionando. Caso você queira mexer no file server interativamente, você pode a qualquer momento chegar no prompt de comando e digitar:

$ screen -r fserver

Page 83: Linux - Tutoriais

Isso irá restaurar a janela do file server, e você poderá utilizar ele como quiser. Inclusive mudar as configurações em tempo real com o comando "/fs". Para poder voltar ao prompt de comando sem ter que sair do xchat-text, utilize a seqüência de teclas CTRL+A D (CTRL+A, solta e aperta D logo em seguida). Pronto! Foi tão difícil assim? Esse método é ótimo para as pessoas que tem várias máquinas rodando Linux por aí, principalmente porque você pode controlar os file servers via SSH, sem a necessidade de interface gráfica nenhuma. Mas isso tudo funciona com interface gráfica também, é só colocar o script perl do obsidian e o arquivo de configuração no diretório .xchat do seu home, que ao xchat gráfico iniciar, ele também irá carregar o script com as configurações. Boa sorte! Sistema de arquivos proc O sistema de arquivos /proc é um diretório especial onde fica todas as informações de depuração do kernel. Também se encontram algumas configurações que habilitam e desabilitam o suporte à alguma coisa no kernel. É muito útil para o diagnóstico do seu hardware. Vou aqui comentar arquivos do /proc para você 'depurar' o seu hardware: • /proc/devices Aqui estão os dispositivos encontrados no seu sistema, incluindo modem, placa de som, placa de rede, teclado, impressora, etc. • /proc/interrupts Neste arquivo estão as informações das IRQs dos dispositivos.

Page 84: Linux - Tutoriais

• /proc/ioports Informações sobre os endereços das portas I/O (Input/Output). • /proc/pci Dispositivos PCI instalados no sistema. O comando 'lspci' também serve para mostrar esse arquivo. • /proc/cpuinfo Aqui você pode ver as características do seu processador e máquina. • /proc/filesystems Sistemas de arquivos suportados pelo kernel. • /proc/devices Dispositivos gerais instalados. • /proc/meminfo Informações da memória usada. O comando 'free' também serve para mostrar este arquivo. • /proc/modules Módulos carregados no kernel. O comando 'lsmod' também serve para mostrar este arquivo. • /proc/mounts Partições montadas. O comando 'mount' sem parâmetro nenhum mostra esse arquivo. • /proc/partitions Partições existentes e que o Linux reconheceu. • /proc/version Versão do kernel. O comando 'uname' também serve para mostrar este arquivo. Explore este diretório! Só não dê um cat no arquivo /proc/kcore, por favor! :) kcore = kernel core. Uso e Segurança com o .htaccess no Apache 1. Introdução

Page 85: Linux - Tutoriais

Oi pessoal, neste tutorial vou tocar em alguns métodos dee segurança com os arquivos .htaccess do Apache, para proteger diretórios na Web, criar meios de login controlado, e outras utilidades deeste arquivo. O .htaccess é um arquivo especial para o Apache. Quando um usuário está navegando por alguma página do seu servidor Apache, para todo diretório que ele tentar acessar (e se o servidor estiver configurado para isso), o Apache procura pelo tal do .htaccess e se encontrar, verifica alguma restrição ou liberação para o usuário. Com isso podemos fazer duas coisas básicas em relação à segurança: Restringir acesso aos arquivos e diretórios do servidor Web através de um usuário e senha, ou então pelo IP/Hostname de quem está acessando. Trataremos dos dois assuntos aqui neste tutorial. 2. Configurando o Apache Antes de mais nada, você precisará se certificar que o Apache está configurado para aceitar os arquivos .htaccess como arquivos especiais. Para configurar, você precisará editar o arquivo de configuração do Apache, que é o "httpd.conf". Geralmente ele está localizado no diretório "/etc/httpd/conf". Dentro deste arquivo, você encontrará uma ou duas diretrizes mais ou menos desta forma:

<Directory /> Options FollowSymLinks AllowOverride None </Directory>

ou

<Directory "/var/www/html"> Options Indexes FollowSymLinks AllowOverride None

Page 86: Linux - Tutoriais

Order allow,deny Allow from all </Directory> Nesta configuração do Apache, tudo que está dentro das significa restrtições e opções especialmente configuradas para aquele diretório. No caso acima, eu estou aplicando algumas regras tanto no diretório base do servidor Web (ou seja, todo o servidor Web, independente do domínio virtual ou qualquer outra coisa), como também estou aplicando no diretório "/var/www/html", que aqui no caso é onde ficam as páginas Web. Então cabe a você decidir escolher entre as duas diretrizes (ou utilizar a configuração nova nas duas diretrizes mesmo, ou até então criar uma diretriz nova). Como eu quero ativar o .htaccess em todo o meu servidor Web, vou colocar da seguinte maneira:

<Directory /> Options FollowSymLinks Indexes AllowOverride AuthConfig </Directory>

O que eu fiz aqui foi adicionar a opção "Indexes" neste diretório e colocar o valor "AuthConfig" no AllowOverride. Em "Options", eu digo algumas opções extras que podem ser colocadas neste diretório. Isso não tem muito haver com este tutorial e nem é necessário, mas é sempre bom saber alguma coisa a mais se já não se sabe :) Como a própria documentação do Apache diz, podemos usar as seguintes opções para diretórios: "None", "All", ou qualquer combinação de "Indexes", "Includes", "FollowSymLinks", "ExecCGI", or "MultiViews". A opção "Indexes" faz com que quando não tiver nenhum arquivo do tipo index.html,

Page 87: Linux - Tutoriais

index.htm, ou "páginas iniciais", o Apache cria uma página com a lista dos arquivos existentes no diretório. O "Includes" permite colocar arquivos do tipo SSI (Server Side Includes), que são páginas dinâmicas antigamente usadas por muitos (Agora a moda é PHP, Python, Perl, etc). O "FollowSymLinks" faz com que o Apache aceite links simbólicos no sistema, seguindo os diretórios ou arquivos que os links apontam. O "ExecCGI" faz com que neste diretório possam ser executados arquivos CGI (Common Gateway Interface). A opção ExecCGI pode ser (e geralmente é) encontrada para o diretório "/var/www/cgi-bin", onde estão localizados os scripts CGI. Já o "multiViews" serve para por exemplo, servir páginas de acordo com a preferência de língua do usuário (index.html.pt_BR, indeex.html.en, etc). O All significa todas as opções (menos o MultiViews) e o None significa nenhuma :) Deixando de lado essa parte, vamos ao que realmente interessa. A opção "AllowOverride AuthConfig" é a que diz para o Apache verificar pelos arquivos .htaccess nos diretórios e aplicar as regras contidas no arquivo nos diretórios e subdiretórios de onde o arquivo esteja localizado. Colocada esta opção, é só dar um restart ou reload no servidor Web e tudo funcionará. Para fins de entendimento, o nome "AllowOverride" já diz tudo: Ele sobrescreve as configurações padrões do servidor Apache para colocar novas configurações para aquele diretório. Estas configurações podem ser permissões dee acesso, opções (como as que mostrei acima), entre outros. 3. Utilizando o .htaccess

Page 88: Linux - Tutoriais

Agora que o servidor Apache já está configurado, teremos que criar o arquivo .htaccess com as regras. Utilize o seu editor preferido (no meu caso, o vim). Poderemos fazer várias coisas neste arquivo. Neste tutorial estarei usando vários arquivos .htaccess para demonstrar cada opção à cada caso, mas você pode utilizar um .htaccess no diretório principal do seu servidor, e definir as permissões e opções colocando-as dentro de tags , , etc. Tentarei dar alguns exemplos aqui. 3.1. Restringindo o acesso por IP/Hostname As vezes precisamos restringir certos arquivos e diretórios para cecrtos IPs. Isso é válido por exemplo, quando você tem um provedor, e só se quer permitir acessar algumas páginas de administração os IPs da Intranet do provedor. Para isso pode-se aplicar estas regras no .htaccess. Veja o exemplo abaixo:

# Deixa a Intranet acessar Order allow,deny allow from 192.168.0. deny from all

Esse exemplo de .htaccess fará com que o diretório, seus arquivos e seus subdiretórios só poderão ser acessados por quem estiver na faixa de IP de 192.168.0.1 até 192.168.0.254. Vamos supor agora que eu queira restringir apenas 1 IP, para não acessar um certo diretório. O .htaccess ficaria assim:

# Deixa todo mundo acessar, menos o IP 192.168.0.25 Order deny,allow deny from 192.168.0.25 allow from all

E está feito, quando o IP 192.168.0.25 tentar acessar, não vai conseguir. Você pode substituir o IP por um

Page 89: Linux - Tutoriais

hostname, contanto que a opção "HostnameLookups" no httpd.conf esteja habilitada (on). 3.2. Restringindo o acesso por usuário e senha Agora vem uma parte muito interessante. As vezes não temos como restringir apenas por IPs, seja porque o usuário que tem que acessar possa etar em qualquer lugar, ou ter IP dinâmico, etc. Para resolver esse caso, podemos utilizar o método de usuário e senha. Antes de mais nada você terá que ter o utilitário "htpasswd", que serve para criar um arquivo de senhas criptografadas. Neste tutorial, criaremos 3 usuários exemplo:

$ mkdir /etc/httpd/auth $ cd /etc/httpd/auth $ htpasswd -c acesso hugo New password: Re-type new password: Adding password for user hugo $ htpasswd acesso eitch New password: Re-type new password: Adding password for user eitch $ htpasswd acesso sakura New password: Re-type new password: Adding password for user sakura

O resultado que temos é o arquivo /etc/httpd/auth/acesso com o seguinte conteúdo:

hugo:zEerw0euqYD3k eitch:85QVc5DD0rB8M

Page 90: Linux - Tutoriais

sakura:UpZuXkyuIq9hw <P.Observação: Caso você não tenha o utilitário htpasswd, você pode criar as senhas criptografadas com um comando do perl. Por exemplo, se eu quiser criar a senha criptografada chamada "minhasenha", farei o seguinte comando: $ perl -e 'print crypt("minhasenha", "Lq"), "\n";'

E então é só incluir a senha no arquivo como no esquema acima. Como pode ver, as senhas estão criptografadas. Este armazenamento de senhas é muito simples. Há outros métodos de se armazenar senhas (arquivos de banco de dados por exemplo), mas por enquanto não vou cobrir isto no tutorial porque não é tão necessário. Mas fica extremamente necessário se houver muitos e muitos usuários e senhas, pois se houver muitos, o processo de autenticação pode demorar um pouco. Agora que o arquivo de usuários e senhas está criado, vamos criar o .htaccess que irá verificar este arquivo. Veja o exemplo do .htaccess:

AuthName "Acesso Restrito à Usuários" AuthType Basic AuthUserFile /etc/httpd/auth/acesso require valid-user Salve o arquivo e pronto, quando um usuário acessar a URL, o servidor irá verificar este arquivo .htaccess e irá perguntar pro cliente um usuário e senha. Epa, mas peraí, vamos explicar direitinho o arquivo acima!

• AuthName: O nome que aparece como mensagem de Login. Pode usar algo como "Entre com Login e Senha", ou coisa deste tipo.

Page 91: Linux - Tutoriais

• AuthType: Tipo de autenticação. Atualmente o Basic é o tipo mais comum. Existe também o "Digest", mas ainda não é muito utilizado e suportado pelos clientes. • AuthUserFile: Onde está o arquivo de usuários e senhas que agente criou. • require valid-user: O que o Apache precisa para validar o acesso. Neste caso a gente indicou que precisa de um usuário válido para acessar a página, ou seja, alguém que digitou um usuário e senha e bateu com o que está no arquivo de senhas. Pode-se restringir para apenas alguns usuários do arquivo de senhas. Por exemplo, se eu quisesse restringir apenas para o usuário eitch e sakura, ao invés de "require valid-user", ficaria "require user eitch sakura".

Mas se por acaso você tiver muitos usuários, e quer dividí-los em grupos, você pode muito bem fazer isso! Primeiro teremos que criar o arquivo com os grupos. Use o seu editor preferido, e vamos criar por exemplo, o arquivo "/etc/httpd/auth/grupos":

admin: xxx visitante: yyy empresa: xxx yyy

Salve o arquivo e então criamos três grupos. Para usar estes grupos, teremos que modificar o arquivo .htaccess anterior para ficar desta maneira:

AuthName "Acesso Restrito à Usuários" AuthType Basic AuthUserFile /etc/httpd/auth/acesso AuthGroupFile /etc/httpd/auth/grupos require group admin

No arquivo acima eu adicionei a linha "AuthGroupFile", que indica pro servidor onde está o

Page 92: Linux - Tutoriais

arquivo dos grupos (bem parecido com o "AuthUserFile" hein?) e no "require", coloquei que requer o grupo admin. Simples de entender, não? Agora já dá pra brincar bastante restringindo usuários :) 3.3. Opções diferentes Lembra do "Options" na diretriz no tópico 2? Pois é, você pode colocar estas opções também no .htaccess. Se por exemplo você quer que o diretório onde você colocou o .htaccess liste os arquivos caso não haja um index.html da vida, você adiciona o seguinte no .htaccess:

Options +Indexes E para tirar essa opção:

Options -Indexes E nisso você pode usar para qualquer uma das opções. 3.4. Mensagens de Erro personalizadas Vamos supor que você tenha uma sub-página no seu servidor, e queira que as mensagens de erro do servidor sejam bonitinhas e no formato que você criou. Para fazer isso, você precisará apenas saber o que significa cada código de erro do servidor e apontar para a uma página com o .htaccess:

ErrorDocument 401 /erros/falhaautorizacao.html ErrorDocument 404 /erros/naoencontrado.html ErrorDocument 403 /erros/acessonegado.html ErrorDocument 500 /erros/errointerno.html

Caso você não saiba os códigos de erro do Apache, a configuração do apache 2.x já tem uma boa ajuda quanto a isto, vou colocar as linhas aqui como referência (entenda se quiser e puder :P):

Page 93: Linux - Tutoriais

ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var ErrorDocument 410 /error/HTTP_GONE.html.var ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var

Page 94: Linux - Tutoriais

3.5. Opções para arquivos e diretórios específicos Agora vamos supor que você queira somente fazer restrições para certos arquivos e diretórios. Para isso você poderá fazer tudo o que fazia antes, só que dentro de tags como ou . Veja o exemplo de .htaccess a seguir com comentários embutidos explicando o contexto:

# Restringe o arquivo_secreto.html somente para o IP 192.168.0.30 <Files arquivo_secreto.html> Order allow,Deny Allow from 192.168.0.30 Deny from all </Files> # Restringe o diretório admin para utilizar senhas <Directory /admin> AuthName "Acesso Restrito à Usuários" AuthType Basic AuthUserFile /etc/httpd/auth/acesso AuthGroupFile /etc/httpd/auth/grupos require group admin </Directory> # Nega o acesso dos clientes ao .htaccess (bom colocar no httpd.conf) # - Vem com a configuração padrão do Apache <Files ~ "^\.ht"> Order allow,deny Deny from all </Files>

Entendeu bem como funciona o esquema? Então é só brincar bastante :) 4. Conclusão

Page 95: Linux - Tutoriais

Pudemos aprender bastante como mexer com o .htaccess, mas o que vimos aqui não foi tudo não. Tem muita coisa ainda que se dá para colocar no .htaccess. Como eu disse no início dedste tutorial, o .htaccess poded comportar todo tipo de configuração de diretórios do Apache, sobrescrevendo as configurações padrões contidas no httpd.conf. Explorar as funcionalidades é uma questão de prática, então mãos a obra! Bom proveito!

Instalando o JAVA e GLGUI.

Alguns amigos meus me pediram para resolver alguns problemas com o jlGui 2.1.1 e o java no linux, eles não estavam conseguindo rodar o jlGui então como não foram poucos os emais espero poder ajudar a turma interessada com esta pequena receita.

Programas necessários:

JAVA : http://java.sun.com/j2se/1.4/download.html

jlGui 2.1.1 : http://www.javazoom.net/jlgui/sources/jlgui2.1.1.tar.gz

Se você estiver usando o Konqueror quando for pegar o j2se(java) no link de download não selecione "salvar link como" pois o arquivo virá corrompido e não vai se auto descompactar (nem rodar vai).

Page 96: Linux - Tutoriais

Na versão RPM do j2se ele será instalado no diretório /usr/java/j2sdk1.4.0 na versão tar.gz você poderá instalar neste mesmo caminho ou outro qualquer desde que você se lembre mais tarde.

Usarei o /usr/java/j2sdk1.4.0 como $JRE daqui para frente. Abra o seu /etc/profile e adcione as seguintes linha no final do arquivo:

JRE="/usr/java/j2sdk1.4.0/bin"

No final da linha "export" adcione JRE.

No topo do mesmo arquivo (/etc/profile) aonde se encontra a linha "PATH" adcione no final a linha /usr/java/j2sdk1.4.0/bin, ex:

Antes

PATH="$PATH:/usr/bin/X11:/usr/games:/usr/local/bin"

Depois

Page 97: Linux - Tutoriais

PATH="$PATH:/usr/bin/X11:/usr/games:/usr/local/bin:/usr/java/j2sdk1.4.0/bin"

Salve o arquivo e faça um logout/login novamente para ativar as mudanças. Descompacte o jlGui em algum lugar como por exemplo em /opt/jlGui, você escolhe, crie um mini script no seu /usr/bin um atalho com as opções do java para o arquivo /opt/jlGui/.

Dentro deste arquivo (o meu se chama /usr/bin/jlGui) deve conter os seguintes comandos:

#!/bin/sh

java -jar jlGui2.1.1.jar &

Torne-o executável com chmod +x /usr/bin/jlGui Agora basta digitar no terminal jlGui para chamar o programa.

Aproveitando que já temos o java instalado no sistema, para adciona-lo ao konqueror faça o seguinte:

K/Preferências/Navegação Web/Konqueror Browser/Java

Page 98: Linux - Tutoriais

Adcione a seguinte linha no campo "Caminho para o executável Java, ou java" /usr/java/j2sdk1.4.0/bin/java (ou java uma vez que agora ele já faz parte do nosso PATH)

Ative a opção "Habilitar Java globalmente", depois vá em JavaScript e ative a mesma opção.

Entre no site http://java.sun.com e você já poderá ver os applets menus (ou seria menus applets?) rodando. Se você achar necessário adcionar o CLASSPATH no seu sistema, em /etc/profiles logo depois do JRE adcione a linha:

CLASSPATH="caminho dos zip/jar:ou diretório de onde eles se encontram"

E CLASSPATH no final da linha "export", faça um logout para ativar as mudança

Introdução ao Linux O que é Linux? Esta é uma pergunta feita por muita gente, e há muitas respostas para ela. Linux é um sistema operacional, como os *BSD (FreeBSD, NetBSD e outros), OS/2, Windows, MacOS, BeOS, etc. O sistema operacional é o que permite o usuário usar o computador. O criador do Linux se chama Linus Torvalds. Com o nome que o autor tem, já dá pra tirar uma conclusão da origem do

Page 99: Linux - Tutoriais

nome "Linux"... Como o Linux é baseado (ideologicamente falando) no Unix, ele juntou o seu nome (Linus) com Unix, e deu Linux :) O Linux é um sistema operacional multi-tarefa e multi-usuário. Além disso, ele é suportado por várias plataformas (inclusive as mais populares como a arquitetura Intel, que todo o mundo usa). Ele é usado por muitas empresas (principalmente provedores) por sua alta capacidade de Rede e conversação com outros sistemas (como por exemplo, redes Windows e Novell), além de suportar também vários tipos de sistemas de arquivos. Mas o barato de tudo, e o que deu impulso ao desenvolvimento do Linux é justamente por ele ser um sistema livre e gratuito (Open Source). Isso quer dizer que você não precisa pagar para usá-lo, e nem ele requer nenhuma licença de uso. O Linux simplesmente pode ser pego na Internet, copiado de um amigo, ou seja lá o que for, sem restrições. E além de gratuito, ele é livre! Livre? Sim, livre! O código-fonte do núcleo do sistema (kernel) está liberado sob a licença GPL, e pode ser pego na Internet por qualquer pessoa... Isto quer dizer que qualquer pessoa pode pegar e alterar o código livremente, modificando ao seu próprio gosto e suas próprias necessidades. Por ser livre, o Linux têm como desenvolvedores vários e vários hackers espalhados pelo mundo, que contribuem sempre mandando pedaços de códigos e implementações à Linus Torvalds, que organiza tudo e lança junto ao kernel oficial. Um dos nomes mais conhecidos como contribuidores para o kernel é Alan Cox, e você pode obter uma lista de outros contribuidores do kernel junto com o código-fonte do kernel que pode ser

Page 100: Linux - Tutoriais

baixado através do endereço ftp://ftp.kernel.org/ (se possível use mirrors para baixar os kernels). Quem diria que o Linux ia se desenvolver tanto! No começo nada passava de um grupo de hackers que usavam o sistema. Agora temos muitos usuários caseiros usando, além de várias empresas prestando serviços (como suporte e desenvolvimento de programas), e todo tipo de coisa mais. Sua popularidade cresceu muito, e continua crescendo. As estatisticas dizem que o Linux vai crescer e crescer, e a tendência é realmente essa! Pois o Linux é um sistema operacional de deixar qualquer um de queixo caído. No futuro, acredito que mais e mais empresas vão começar a adotar o Linux como sistema padrão, e começar a desenvolver produtos apenas para ele. Deixando de lado um pouco o monopólio de empresas como a Microsoft e seu sistema operacional Windows. Você ainda não testou? Recomendo você fazer isso agora! Pode ser um pouco estranho no começo, mas você aos poucos vai se acostumando, e acaba por se adaptar totalmente à ele! Eu mesmo me adaptei e só uso ele :) Viva o Linux! A história do Linux Como usuários fiéis, não podemos nos esquecer da história do Linux... Como surgiu isso tudo? Linus Torvalds, o pioneiro criador, era inscrito numa lista de programadores. Um dia ele estava lendo as mensagens e se bateu com uma pergunta: "Lembra-se daquela época quando os homens escreviam seus próprios drivers de dispositivos (device drivers)?' Ele então resolveu desafiar a si mesmo, e criar um sistema operacional onde se tinha uma liberdade e não se ficasse "preso' no sistema. O que ele tinha em mente era um Unix! Porém, ele não tinha verba suficiente

Page 101: Linux - Tutoriais

para comprar os caríssimos Unix que eram o tipo de sistema que ele queria. Inspirado num pequeno e humilde sistema feito por Andy Tanembaum, o Minix, Linus trabalhou duro para fazer o Linux e desenvolver ele. Um pouco antes de lançar a primeira versão oficial do kernel, Linus mandou a seguinte mensagem para o grupo de notícias comp.os.minix: "Você suspira por melhores dias do Minix-1.1, quando homens serão homens e escreverão seus próprios drivers de dispositivos? Você está sem um bom projeto e está morrendo por colocar as mãos em um sistema operacional no qual você possa modificar de acordo com suas necessidades? Você está achando frustrante quando tudo trabalha em Minix? Chega de atravessar noites para obter programas que trabalhem corretamente? Então esta mensagem pode ser exatamente para você. Como eu mencionei a um mês atrás, estou trabalhando em uma versão independente de um sistema operacional similar ao Minix para computadores AT-386. Ele está, finalmente, próximo do estágio em que poderá ser utilizado (embora possa não ser o que você esteja esperando), e eu estou disposto a colocar os fontes para ampla distribuição. Ele está na versão 0.02... contudo eu tive sucesso rodando o bash, gcc, gnu-make, gnu-sed, compressão e etc nele." No dia 5 de Outubro de 1991, Linus Torvalds anunciou a primeira versão oficial do Linux, versão 0.02. Desde então muitos programadores têm respondido ao seu chamado, e têm ajudado a fazer do Linux o sistema operacional que é hoje, uma grande maravilha. Um sistema criado inteiramente por programadores espalhados pela Internet, os hackers!

Page 102: Linux - Tutoriais

Qual a diferença entre Linux e Unix? Linus Torvalds, quando criou o Linux, criou ele nos padrões "POSIX", que é o mesmo padrão que os UNIX usam. É por esse mesmo uso do padrão POSIX que o Linux é parecido com o UNIX. Além do mais, existem vários tipos de UNIX, que têm seu código-fonte fechado, e pago. Uma resposta mais completa para esta pergunta foi feita pelo Fernando M. Roxo: Limpo, claro e definitivo: O Linux não é UNIX. O Linux é um UNIX. O UNIX foi um sistema criado e registrado pela Unix Lab. Todos os sistemas baseados naqueles códigos são chamados de uma forma geral de UNIX. Linux foi escrito desde o inicio pelo Linus Torvalds e não contém nenhuma linha de código do UNIX. Mas o Linux foi escrito para ser conforme o padrão POSIX, que deve ser o padrão da API (Application Programming Inteface) Unix, que em última análise pode ser resumido (forçando um pouco a barra) como sendo as chamadas do sistema. Por isto se diz que o Linux é um Unix (não UNIX). Tem uma diferença sutil aí. Por causa da API POSIX, do conjunto de utilitários (FSF/GNU em sua maioria) e do uso do X-Window (XFree) o Linux é tão parecido com o UNIX que existem empresas que usam o Linux para desenvolver para UNIX que não seja o dela mesma (por exemplo a IBM). As Distribuições Voltando mais um pouco ao escopo do que é Linux, podemos ressaltar que o Linux é o sistema operacional, ou seja, o kernel (núcleo). Mas o que é um sistema operacional sem programas? Para que haja um uso

Page 103: Linux - Tutoriais

dos recursos que o sistema operacional pode oferecer, os programadores vão criando aplicações e utilitários que vão dar o gostinho ao usuário. O papel das distribuições é isso: empacotar o Linux. O que as distribuições fazem é reunir os programas disponíveis com o kernel, e deixar o sistema pronto para o uso. Sem as distribuições não haveria a popularização do Linux, pois seria um grande trabalho o usuário instalar o sistema puro, e depois compilar os programas deixando-os compatíveis. Existem inúmeras distribuições existentes por esse mundo afora. Mas há sempre as distribuições mais conhecidas, que são as mais atuantes no mercado. Elas são: Slackware, Conectiva Linux, Debian, Red Hat Linux, SuSE, Mandrake. Cada um tem suas características bem marcantes. E se fôssemos discutir aqui quais as vantagens de cada uma em relação a outra, não conseguiríamos. A escolha da distribuição é uma escolha a gosto. Meu micro suporta Linux? Basicamente, para você usar o Linux, você precisará de no mínimo um 386. Isso mesmo, o Linux roda em 386! É claro que para um uso amplo de todos os programas e o sistema X-Window (gráfico), você terá de ser mais exigente com seu hardware... Mas todos os computadores compatíveis com a arquitetura Intel são suportados pelo Linux (e também outros tipos de arquiteturas como por exemplo o Alpha). Para a memória RAM, você irá precisar de no mínimo 2MB de RAM. É recomendável ter 8Mb acima para rodar o servidor X. E seguindo a mesma filosofia do que falei antes, sempre é bom você ter mais para usar tudo rápido e sem perder a paciência :) Espaço em

Page 104: Linux - Tutoriais

disco? Depende muito. As distribuições atuais disponibilizam até 6 CDs recheados de programas, que podem simplesmente acabar com o espaço do seu disco em alguns minutos! Uma instalação básica do Linux, apenas com o básico mesmo, dá 10MB. Eu acredito que 1GB seja suficiente para colocar todo tipo de coisa que você vai usar (e até coisa que você nem vai usar). Só como curiosidade, aqui em casa, eu já rodei meu Linux nos seguintes computadores: Primeiro num Pentium 100, com 24MB de RAM, e 1GB de espaço em disco. Rodei também num 386 (nem me pergunte quantos Mhz é porque eu não faço a mínima idéia :) com 8MB de memória RAM, num HD de 256MB. E por último em um Celeron 300 com 32MB de RAM e 1GB de espaço em disco. Atualmente eu estou usando em um K6-II 550, com 64MB de RAM, e 10GB de espaço no HD. Outra dúvida muito comum é: O Linux roda em laptops? Sim! Roda muito bem e suporta bem os dispositivos PCMCIA... Não tem absolutamente nada com o que se preocupar. Por que eu devo confiar no Linux? Pergunta muito fácil de se responder, inclusive eu vou responder bem grosseiramente: Ele é bom! :) O Linux tem ganhado credibilidade cada vez mais por ser um sistema seguro, estável, e confiável. É muito difícil (senào quase impossível) que o Linux em si dê um crash. Só para ter uma idéia, nestes 4 anos em que uso Linux, só obtive no máximo 3 travamentos! Por que estes travamentos? Bem, um foi na época em que exploraram uma falha no kernel e criaram o teardrop (um exploit que travou as coisas aqui), e os outros dois foi por causa de um problema na placa mãe :) Quer dizer, já aconteceu algumas outras vezes de minha

Page 105: Linux - Tutoriais

interface travar, mas eu dei um telnet e um ping na máquina através de outra na rede, e ela respondia. Geralmente isso acontece comigo no Quake, quando eu mando conectar em algum nome de host que não existe, o SVGAlib (biblioteca que o Quake usa) simplesmente para de funcionar e você não tem mais como teclar algo ou mudar de tela... Mas tive a certeza que não foi o sistema que travou e sim o SVGAlib que travou meu teclado e monitor :) Empresas cada vez mais estão apostando no Linux. A IBM é uma das empresas que mais está investindo pesado no Linux, sendo com ajuda financeira, parcerias e desenvolvimento de programas. A Intel é outra empresa que também está ajudando muito, investindo bastante nos desenvolvedores do sistema. Além disso, várias outras pequenas ou médias empresas estão cada vez mais adotando o Linux como sistema padrão pelo simples fato de que ele funciona melhor e mais estávelmente que outros sistemas como o Windows. Pode ser que você ache que isto tudo conversa fiada, mas o Linux é bem estável mesmo! Já vi sistemas Linux ligados por vários meses sem nem sequer dar um reboot na máquina. Inclusive aqui em casa eu consegui deixar o meu Linux ligado por 23 dias, pena que faltou luz e o computador desligou (buá não tenho nobreak :~(). Basicamente é isso. Você tem de confiar no Linux porque ele é bom e tá acabado. E só tende a melhorar, antigamente não havia nem uma interface gráfica muito boa e usável para quem está iniciando na computação. Hoje temos o GNOME e KDE que são duas ótimas interfaces gráficas para quem está engatinhando. São coisas que fazem o Linux valer a pena!

Page 106: Linux - Tutoriais

1.7. O que é GPL? Se você já ouviu falar bem de Linux, com certeza já deve ter ouvido falar nesta sigla. GPL significa General Public License (ou traduzindo grosseiramente: Licença Pública Geral), e foi criada pela Free Software Foundation. A grande maioria dos programas que vêm nas distribuições Linux são de código-fonte aberto, e usam esta licença. Uma licença serve para proteger o seu código quando ele for lançado para o público. A licença GPL permite que o autor do código distribua livremente o seu código... Outras pessoas podem simplesmente pegar este código, modificar à suas próprias necessidades e usar à vontade. O único requerimento é que a pessoa que modificou deve lançar o código modificado em GPL e manter também o seu código aberto (e não apenas distribuir os binários). Isso tudo cria uma comunidade de desenvolvedores onde toda a ajuda é mútua, e você pode pegar várias idéias de outros desenvolvedores simplesmente olhando o código deles. Além disso, você pode aproveitar e poder ajudar o desenvolvedor, criando correções e mandando-as para o autor. É com essa licença que o kernel do Linux é liberado. É assim que o kernel tem seu desenvolvimento feito por várias e várias pessoas em todo o mundo. Estas pessoas pegam livremente o código-fonte do kernel, analizam-no e procuram por erros. Se encontrarem erros, escrevem correções e mandam para o Linus Torvalds. E não só correções, mas desenvolvedores também fazem novas implementações ao kernel e mandam para o Linus Torvalds organizar tudo. E é assim que temos hoje em dia este grande e bem feito e organizado kernel do Linux! É assim que a filosofia

Page 107: Linux - Tutoriais

GPL funciona, e funciona muito bem para criar uma comunidade de desenvolvedores justa! Eu pessoalmente apóio e muito a licença GPL, que para mim é simplesmente perfeita. Vivas à Free Software Foundation por criar esta licença! E vivas para os desenvolvedores que a utilizam para seus códigos! :) Você pode obter a licença GPL nos seguintes endereços:

• Versão em Inglês (Oficial) - http://www.gnu.org/copyleft/gpl.txt • Versão em Português - http://lie-br.conectiva.com.br/licenca_gnu.html

Outras licenças que é interessante ver:

• GNU Free Documentation License (Inglês) - http://www.gnu.org/copyleft/fdl.txt • GNU Free Documentation License (Português) - http://www.cipsga.org.br/sections.php?op=viewarticle&artid=112 • GNU Lesser General Public License (Inglês) - http://www.gnu.org/copyleft/lesser.txt • Listagem com várias outras licenças - http://www.gnu.org/philosophy/license-list.html

Configurando o LILO O LILO é um dos mais importantes softwares do Linux, é ele quem carrega o kernel no seu sistema para começar a funcionar! Entender a configuração dele é muito importante, principalmente para quem tem muitos sistemas numa mesma máquina. Com o LILO, é possível gerenciar partições e assim bootar em diferentes sistemas operacionais. É com ele que fica

Page 108: Linux - Tutoriais

possível colocar por exemplo, o Windows e o Linux na mesma máquina. O arquivo de configuração do LILO é o /etc/lilo.conf. É editando ele que você vai poder configurar o LILO conforme as suas necessidades. Um arquivo comum para uma máquina que possui dois sistemas (Linux e Windows) segue no exemplo abaixo:

# Arquivo de configuração do LILO ### Seção dos parâmetros globais do LILO ### boot=/dev/hda vga=normal message=/boot/mensagem.txt prompt timeout=150 ### Seção de partições do LILO ### # Partição Linux image=/boot/vmlinuz-2.2.17 root=/dev/hda1 label=Linux read-only # Partição Windows other=/dev/hdb1 label=Windows table=/dev/hdb

Como você pôde ver no exemplo acima, a configuração do LILO é divida em duas partes: configuração global e configuração de partições. A configuração global carregará consigo algumas informações sobre o funcionamento geral do LILO, como ele vai se

Page 109: Linux - Tutoriais

comportar, aonde, quando, porque, cade, com quem e fazendo o que :) Na configuração de partições se define as opções de sistemas que o LILO vai bootar. Vamos ver passo-a-passo aqui as opções mostradas no exemplo acima, e também algumas opções adicionais que não estão no exemplo acima, mas você pode usar se quiser: Seção de configuração Global

• boot=/dev/hda Aqui indica onde o LILO irá ser instalado. A maioria dos casos é ele ser instalado na MBR (Master Boot Record), que é o /dev/hda, e deve funcionar perfeitamente (a não ser que seu sistema tenha frescura). Mas se você não quiser instalar na Master Boot Record e quiser por exemplo, instalar em um disquete, substitua /dev/hda por /dev/fd0.

• vga=normal Esta opção indica o modo VGA que o console do Linux irá rodar. Há várias opções que deixam a tela maior, as letras pequenininhas, ou letras maiores com tela menor, o que seja. Se você colocar 'vga=ask', antes de bootar no sistema, ele vai te dar uma série de opções para você escolher. Cada opção irá deixar o tamanho do console diferente... Experimente! Outro jeito de mudar o tamanho do console é usando o programa SVGATextMode, que é muito melhor pois você não precisa reiniciar a máquina para escolher no LILO, qual resolução você quer.

• message=/boot/mensagem.txt Esta opção é combinada com a opção 'prompt'. Antes do LILO dar o prompt, ele irá mostrar na tela o conteúdo do arquivo /boot/mensagem.txt. Você pode colocar um deseínho ou qualquer coisa que quiser

Page 110: Linux - Tutoriais

para ele mostrar durante o LILO. Um menuzinho com as opções é o que a maioria das pessoas costuma colocar :)

• prompt Indica que o LILO vai automaticamente para o prompt. Você pode não colocar esta opção, então o LILO simplesmente vai ficar esperando você apertar CTRL, ALT ou SHIFT para ativar o prompt e você poder digitar algo nele. Esta opção tem muito haver também com as outras opções 'timeout' e 'delay'.

• timeout=150 O tempo de duração que você tem para digitar algo no prompt. Se este tempo passar o LILO automaticamente vai bootar no sistema padrão. O tempo é determinado em décimos de segundos, ou seja, 150 corresponde a 15 segundos (tire/acrescente o zero do final).

• delay=150 (Não usado no exemplo). Funciona da mesma maneira que o timeout, só que ele serve para quando não se coloca o parâmetro timeout. Ele vai esperar até você apertar o CTRL, ALT ou SHIFT para ativar o prompt, e se não digitar isso, boota no sistema padrão automaticamente.

• password=zecapagodinho (Não usado no exemplo). Esta opção define uma senha para o usuário digitar toda vez que for bootar um sistema pelo LILO. Não existe forma de criptografar esta senha, então qualquer um que tiver acesso ao seu sistema poderá ver, se o arquivo /etc/lilo.conf tiver com permissão de leitura para todo mundo. Aqui a senha está como 'zecapagodinho', mude para uma senha

Page 111: Linux - Tutoriais

decente se quiser que aquele teu irmão chato não use seu computador :)

• single-key (Não usado no exemplo). Esta opção é bem interessante. Ele permite que o usuário ao invés de digitar o nome do sistema no prompt e dar enter para bootar no sistema, possa simplesmente apertar uma tecla e pronto, o sistema boota. É muito mais prático, e é combinado com a opção 'alias' na configuração de partições. Seção de configuração de partições Aqui você vai colocar as partições/sistemas que vai querer bootar. Cada conjunto de linhas corresponde à um sistema diferente (veja no exemplo anterior, para um exemplo disso :)). Vejamos aqui os parâmetros para a partição Linux que definimos:

• image=/boot/vmlinuz-2.2.17 Aqui você vai indicar onde está a imagem do kernel do Linux que você compilou ou que já vem na sua distribuição. Geralmente as imagens estão no diretório /boot (ou também na raiz), com o nome vmlinuz, ou vmlinux. No exemplo acima eu indiquei para ele usar o arquivo /boot/vmlinuz-2.2.17, que aqui é o kernel 2.2.17 que eu compilei.

• root=/dev/hda1 Onde se encontra o seu Linux, aqui você só precisa indicar em que partição está localizado o seu sistema.

• label=Linux Aqui é o 'nome' que você vai dar para esta configuração de partição. No caso aqui é Linux, então quando aparecer o prompt do LILO (LILO boot: ), eu digito Linux, dou enter e o LILO boota o sistema.

Page 112: Linux - Tutoriais

Também existe a opção 'alias', que é o equivalente só que para a opção 'single-key', descrita nas opções globais.

• read-only Partições Linux têm sempre de ter esta linha, pois ela indica que o LILO tem de montar a partição como somente leitura. Para que isso? Bem, no boot o Linux verifica seu sistema de arquivos, e para ele verificar, tem de estar somente-leitura. Depois que ele verifica, ele remonta a partição para leitura-escrita.

• alias=1 (Não usado no exemplo). Esta opção é combinada com a opção global single-key. Ao invés de eu ter que digitar no prompt do LILO a palavra definida na opção 'label', eu apenas aperto uma tecla e ele boota. No exemplo que usei aqui a tecla para bootar a partição é o número 1. Estas foram as opções para uma partição Linux. Se você quiser colocar uma Windows (como no exemplo que usei anteriormente), você só tem que substituir algumas coisinhas, como veremos a seguir:

• other=/dev/hdb1 Equivale á opção 'image' da partição Linux. Aqui você indica em que partição seu Windows está instalado.

• label=Windows Mesma coisa que na partição Linux, só que aqui eu coloquei a palavra 'Windows' ao invés de 'Linux'. Você pode colocar o nome que quiser à vontade.

• table=/dev/hdb O HD em que se encontra a partição.

Page 113: Linux - Tutoriais

Assim você poderá ir montando um arquivo de configuração com o quanto de sistemas quiser. Nota: algumas vezes me referi que o LILO boota no sistema 'padrão'. O sistema padrão é definido pela ordem que você coloca os sistemas na configuração de partições... No exemplo anterior, a partição Linux é a padrão porque defini ela primeira no arquivo. Mensagens de erro do LILO Quando o LILO é carregado, ele mostra a palavra "LILO". Cada letra é impressa na tela depois ou antes de alguma ação específica. Se o LILO falhar em alguma ação, as letras impressas na tela podem ser usadas para identificar o problema. Preste atenção que alguns digitos hexa podem aparecer depois do primeiro "L" se algum problema transitório ocorrer no disco rígido. A não ser que o LILO pare neste ponto, gerando uma corrente de erros sem fim, os digitos hexa não indicam um problema sério.

(nada)

Nenhuma parte do LILO foi carregada. Ou o LILO não está instalado ou a partição em que o setor de boot está alocado nao está ativa.

L

O primeiro estágio do carregador de boot foi carregada e inicializada, mas não pode carregar o segundo estágio. O código de erro de dois digitos indica o tipo do problema. Isto geralmente indica um erro na mídia(o HD no caso) ou os parametros do HD não foram colocados corretamente.

Page 114: Linux - Tutoriais

LI

O primeiro estágio do carregador de boot pode carregar o segundo estágio, mas não pode executá-lo. Isto pode ser causado pelos parâmetros do HD não terem sido colocados corretamente ou por mover /boot/boot.b sem executar o instalador de map.

LIL

O segundo estágio do carregador de boot foi inicializado, mas não pode carregar a tabela de descrição do arquivo map. Isto geralmente é causado por um erro de mídia(HD) ou pelos parâmetros do HD não terem sido colocados corretamente.

LIL?

O segundo estágio do carregador de boot foi inicializado em um endereco incorreto. Isto pode ser causado pelos parâmetros do HD não terem sido colocados corretamente ou por mover /boot/boot.b sem executar o instalador de map.

LIL-

A tabela de descrição está corrompida. Isto pode ser causado pelos parâmetros do HD não terem sido colocados corretamente ou por mover /boot/boot.b sem executar o instalador de map.

LILO Todas as partes do LILO foram carregadas com sucesso.

Mega-exemplo

Page 115: Linux - Tutoriais

No exemplo a seguir, vou apresentar uma configuração do LILO para 4 sistemas diferentes! São no total 3 HDs, e também duas opções para kernels diferentes, mas no mesmo sistema. Combino aqui também o arquivo /boot/mensagem.txt, a opção global single-key e uma senha.

• /boot/mensagem.txt -------------------------------------------- Exemplo de mega-configuração do LILO rodando -------------------------------------------- Digite as opções para bootar em cada sistema: [1] - Slackware Linux usando kernel 2.2.16 [2] - Conectiva Linux 5.1 usando kernel 2.2.17 [2] - Conectiva Linux 5.1 usando kernel 2.2.16-cl6 [3] - Debian 2.2 usando kernel 2.2.17 [4] - Debian 2.2 usando kernel 2.2.18 [5] - Ruindows e Nojenta e Oitxo --------------------------------------------

• /etc/lilo.conf # Arquivo de configuração do LILO ### Seção de parâmetros globais do LILO ### boot=/dev/hda vga=normal password=boboalegre message=/boot/mensagem.txt prompt timeout=100 single-key ### Seção de partições do LILO ###

Page 116: Linux - Tutoriais

# Slackware Linux usando kernel 2.2.16 image=/boot/vmlinuz-2.2.16 root=/dev/hda1 label=Slackware read-only alias=1 # Conectiva Linux 5.1 usando kernel 2.2.17 image=/boot/vmlinuz-2.2.17 root=/dev/hda2 label=Conectiva1 read-only alias=2 # Conectiva Linux 5.1 usando kernel 2.2.16-cl6 image=/boot/vmlinuz-2.2.16-cl6 root=/dev/hda2 label=Conectiva2 read-only alias=3 # Debian 2.2 usando kernel 2.2.17 image=/boot/vmlinuz-2.2.17 root=/dev/hdb1 label=Debian1 read-only alias=4 # Debian 2.2 usando kernel 2.2.18 image=/boot/vmlinuz-2.2.18 root=/dev/hdb1 label=Debian2 read-only alias=5

Page 117: Linux - Tutoriais

# Ruindows e Nojenta e Oitxo other=/dev/hdc1 label=Ruindows table=/dev/hdc alias=6 # Fim da configuração do LILO

Instalando o LILO Tá, você configurou tudinho, mas falta um pequeno detalhe: instalar! Toda vez que você modifica alguma configuração você tem de instalar/atualizar o LILO. Para isso, esteja como root e faça o comando: # /sbin/lilo Caso você queira desinstalar o LILO daonde você colocou, você utiliza a opção -U, assim: # /sbin/lilo -U Ou no DOS, você pode usar o comando "fdisk \mbr" para desinstalar. Nunca se esqueça de instalar o LILO depois de fazer suas alterações, senão nada vai funcionar hein! Manipulação de usuários Como você já deve saber, o Linux é um sistema multi-usuário, então, é claro que não só pode existir um usuário usando o sistema. Uma primeira coisa que possamos dizer é que o Linux não pode de alguma maneira ser usada sem estar sendo um usuário. O usuário 'root' é o administrador do sistema, e é ele quem você vai usar primeiro para criar outros usuários depois (a não ser que você tenha criado um usuário comum durante a instalação do seu Linux).

Page 118: Linux - Tutoriais

Antes de mais nada, fique sabendo que o root é um usuário especial, ele pode fazer TUDO em seu sistema, não importa o que acontecer, ele faz. Ao contrário dos usuários comuns, que têm restrições. Se você já instalou algum Linux, você verá que a primeira coisa que você irá fazer antes de usar o sistema é se logar como root, ou seja, preencher aquele campo login: com o usuário root. Mas aí por alguma razão você quer mudar de usuário, ou criar outro, ou qualquer coisa do tipo, então você se pergunta: "Como?" Há um comando específico para isto. Este comando é o "adduser" ou "useradd". Dependendo da distribuição, o comando "adduser" vai ser apenas um comando igual ao "useradd", ou então um script interativo que irá lhe fazendo perguntas, você irá preenchendo, e então o script criará um usuário no sistema para você. No caso do "adduser" ser um comando mesmo, você poderá utilizar assim:

adduser xxx passwd xxx

Isso respectivamente irá criar um usuário padrão chamado hugo, e depois com o comando "passwd", você definirá uma senha para este usuário. Você pode especificar outros parâmetros para o usuário, como no comando a seguir:

adduser xxx -d /var/usuarios/xxx -s /dev/null

Com estes parâmetros, especifiquei que o usuário hugo terá como diretório home o "/var/usuarios/hugo" e como shell o "/dev/null" (ou seja, não terá shell). Sem estes parâmetros, o diretório home seria "/home/xxx" e o shell seria "/bin/bash".

Page 119: Linux - Tutoriais

Vamos entender agora como este comando funciona, que é uma coisa essencial que todos deveriam saber em relação ao sistema Linux. Cada um desses programas escrevem o usuário no arquivo de configuração do Linux referente aos usuários do sistema. Este arquivo é o "/etc/passwd". Cada linha deste arquivo é um usuário cadastrado no sistema. Com as informações que vou lhe dar aqui, você pode muito bem criar uma conta sem usar estes programas/scripts citados acima. O passwd é formado por linhas onde cada linha é um usuário, como falei acima, então vamos aprender a montar cada linha desta. Vou pegar um exemplo para vocês:

xxx:x:1001:100: username:/home/xxx:/bin/bash

Vamos dividir esta linha em "campos", onde cada um é separado por : (dois pontos), olhe só:

Campo Significado

xxx Login do Usuário, aqui você pode colocar o nome que quiser com até 8 caracteres.

x

Aqui diz que o password está no arquivo /etc/shadow. Se estivesse *, a conta estaria desabilitada, e se estivesse sem nada (::), a conta não teria password.

1001 UID (User IDentification), o número de identificação do usuário.

100 GID (Group IDentification), o número de identificação do grupo do usuário.

Page 120: Linux - Tutoriais

username Comentários do usuário, como nome, telefone, etc

/home/xxx

O diretório HOME do usuário, ou seja, o diretório pertencente a ele. Geralmente estes diretorios sempre estao no /home

/bin/bash

Shell do usuário, ou seja, o programa que irá enterpretar os comandos que o usuário executar.

Obs: O /etc/shadow é um arquivo que contém a senha do usuário criptografada, se alguém tiver posse dela, esta pessoa pode muito bem comparar as senhas com uma lista de palavras, e pode descobrir as senhas dos usuários. Felizmente este arquivo está muito bem protegido pelo sistema :) Bem, legal, aprendi sobre adicionar um usuário, mas como faço para removê-lo? Simples, você pode apagar a linha referente a ele no /etc/passwd e os seus arquivos, ou simplesmente digitar userdel usuario. Combine com a opção -r para deletar junto o diretório HOME do usuário. Ahhhhh? Você quer mais? O quê? Quer deixar um usuário como se fosse root? Então vamos lá que não temos nada a perder! O root possui o UID e o GID igual à 0 (zero), e um usuário comum não. Se nós forçássemos a mudança do UID e GID de um usuário para 0, ele ficaria como se fosse o root! Por exemplo, eu tenho a linha do usuário no /etc/passwd e mudo:

xxx:x:1001:100:username:/home/xxx:/bin/bash xxx:x:0:0:username:/home/xxx:/bin/bash ^ ^

Page 121: Linux - Tutoriais

Pronto, o usuário xxx vai ser também o root do sistema, o administrador do sistema, o deus do sistema, etc. Outra dica: Não é muito bom ficar usando o usuário root, este usuário é somente para a administração do sistema, então eu recomendo à você a usar sempre um usuário normal, ser da plebe :) E se for precisar usar o root, logar como ele ou utilizar o comando "su -" para se tornar o próprio root. Outro arquivo que tem muito haver com os usuários no Linux é o /etc/group. Que contém as definições de cada grupo, como por exemplo seus nomes, GIDs, e usuários adicionais que pertencem à ele. Você adicionando uma linha neste arquivo estará criando um novo grupo. Vamos criar aqui um novo grupo no /etc/group:

metal:x:666:xxx,jim,yyy

Adicionando esta linha acima no arquivo /etc/group, um novo grupo é criado: com o nome 'metal', o GID '666' e como usuários adicionais pertencentes à ele, 'xxx, jim, yyy'. Fácil não? Bem é isso, combinando este conhecimento com algo sobre permissões dos arquivos, você pode controlar muito bem quem usa o seu sistema ou servidor, dizendo quem pertence à que grupo, quais seus diretórios, que arquivos podem acessar, entre outros. Bom proveito!

Como Fazer o modem 56k PCI 3COM/USR funcionar no linux:

Marca: 3Com

FCC: 4X2USA-32034-M5-E

Page 122: Linux - Tutoriais

Produto: 3CP2976-OEM-50

Interface: PCI

velocidade: 56K

Passos:

Determine a IRQ e endereço I/O do modem. Ambos são mostrados no boot do kernel.

1.1. Usando 'lspci': Execute: 'lspci -v' e procure alguma coisa como:

00:0c.0 Serial controller: US Robotics:

Unknown device 1008 (rev 01)

(prog-if 02)

Subsystem: Unknown device 12b9:00aa

Flags: medium devsel, IRQ 11

I/O ports at b400

Capabilities:

.2. Usando /proc/pci: Execute: 'cat /proc/pci' e procure alguma coisa como:

Bus 0, device 12, function 0:

Page 123: Linux - Tutoriais

Serial controller: Unknown vendor

Unknown device (rev 1).

Vendor id=12b9. Device id=1008.

Medium devsel. IRQ 11.

I/O at 0xb400 [0xb401].

Determine o tty do modem: O tty do modem é a proxima interface serial disponível. Se você tem ttyS0 e ttyS1, o modem deve estar na ttyS3. Tente usar: ttyS0, ttyS1, ttyS2 ou ttyS3.

Comandos de configuração do modem: Você precisa usar o comando "setserial" para configurar o modem. Para maiores informações, faça "man setserial".

Substitua a IRQ, I/O e TTY com suas configurações:

setserial /dev/TTY irq IRQ port I/O ^fourport ^auto_irq skip_test autoconfig spd_vhi

Exemplo:

setserial /dev/ttyS3 irq 11 port 0xb400 ^fourport ^auto_irq skip_test autoconfig spd_vhi

Configure o modem pra iniciar automaticamente no boot, porque é necessário configura-lo toda vez que é iniciado o linux.

Page 124: Linux - Tutoriais

4.1. Se você usa RedHat 6.x, Conectiva 5.0:

4.1.1. Crie o arquivo: /etc/rc.d/rc.serial

4.1.2. Coloque os seguintes comandos no arquivo rc.serial:

#!/bin/sh

# modem 3COM, fazendo a configuração de IRQ e PORTA:

setserial /dev/ttyS3 irq 11 port 0xb400 ^fourport ^auto_irq

skip_test autoconfig spd_vhi

# Mostrando no boot a inicialização do modem:

setserial /dev/modem -b

4.1.3. Faça o arquivo ficar executável: chmod +x /etc/rc.d/rc.serial

4.2.1. Se você não possui nenhum script de conexão, use o ppp-facil de Augusto C. Campos na seguinte home page: www.linux.trix.net Este script funciona na maioria das vezes com modems 3COM.

Configurando o MRTG O MRTG é um programa feito em perl muito útil para análisar o tráfego utilizado em sua rede/link. Ele gera gráficos que te mostram o uso da banda em termos de velocidade. Para configurar não é tão complicado, dependendo do caso, é claro. Você precisará pegar o MRTG, seja como código-fonte, ou como pacote. No caso dos pacotes, uma compilação não é necessária, e os arquivos já estarão instalados no sistema (portanto é só configurar). Mas como quero cobrir tudo aqui,

Page 125: Linux - Tutoriais

colocarei os passos de compilação e instalação manual.

• Exemplo de gráficos - http://www.stat.ee.ethz.ch/mrtg/

Se você tem uma distribuição que possui o utilitário "apt", ótimo, porque provavelmente você só terá que digitar o comando "apt-get install mrtg" e o programa irá baixar e instalar automaticamente. Agora se você quiser baixá-lo, visite a página oficial do MRTG:

• MRTG - http://people.ee.ethz.ch/~oetiker/webtools/mrtg/. • MRTG (Mirror Brasil) - http://mrtg.matrix.com.br/.

Neste endereço você poderá encontrar as versões mais atuais, tanto como código-fonte, quanto pré-compilados em pacotes ou em um binário para Windows (sim! O MRTG também funciona no Windows, se tiver o perl! Mas aqui só vou falar da instalação no linux :P) No meu caso, eu peguei a versão "2.9.25". O MRTG requer o seguinte para compilar e funcionar no seu Linux: gcc, perl, gd, libpng, zlib. Provavelmente sua distribuição já veio com esses pacotes, então não os cobrirei neste tutorial. Vamos agora começar a instalação:

# tar zpfx mrtg-2.9.25.tar.gz # cd mrtg-2.9.25 # ./configure --prefix=/usr --sysconfdir=/etc/mrtg [...configurando a compilação...] # make

Page 126: Linux - Tutoriais

[...compilando...] # make install

E pronto. Se tudo ocorrer bem, o MRTG estará instalado corretamente no seu sistema, e pronto para o uso! Mas antes, teremos que criar um arquivo de configuração para o MRTG usar. Para isso utilizaremos um utilitário do MRTG chamado "cfgmaker". Tenha em mãos o IP do seu roteador e a senha "community" dele... Se você não souber o que diabos é isso, então está precisando mexer um pouco mais com o roteador :) Execute o comando:

cfgmaker --global 'WorkDir: /var/www/html/mrtg' \ --global 'Options[_]: bits,growright' \ --output /etc/mrtg/exemplo.cfg \ [email protected]

Onde "xxx.xxx.xxx.xxx" é o IP do seu roteador. Este comando irá gerar o arquivo "/etc/mrtg/exemplo.cfg" e servirá para alterarmos manualmente, comparando com o resultado. Veja este exemplo de configuração final comentada:

# --------------------- # Configurações Globais # --------------------- # Diretório onde vai ficar a página com os gráficos gerados # pelo MRTG WorkDir: /var/www/html/mrtg # Língua usada pelo MRTG para as mensagens na página

Page 127: Linux - Tutoriais

Language: brazilian # Opções: # bits = Mostrar a velocidade em bits (bits/bytes) # growright = O gráfico cresce para a direita Options[_]: bits,growright # Rodar como Daemon? Assim não será preciso colocar # no crontab, só precisará colocar um comando na # inicialização do Linux. RunAsDaemon: yes # -------------------------------- # Configuração do link 1 (256kbps) # -------------------------------- # Aqui você terá de comparar com o exemplo gerado # pelo comando 'cfgmaker', coloque o valor igual # ao que foi mostrado. O primeiro número é essencial # para saber a ligação que estamos usando no roteador. Target[EXEMPLO]: 1:[email protected]: # A quantidade de bytes que o link suporta. # 64kbps = 8000 # 256kbps = 32000 MaxBytes[EXEMPLO]: 32000 AbsMax[EXEMPLO]: 32000 # Com essa opção, todos os 4 gráficos não serão # redimensionados de acordo com o uso do link. Eles sempre # terão a altura do máximo de tráfego que se pode chegar

Page 128: Linux - Tutoriais

# (de acordo com os itens acima). Unscaled[EXEMPLO]: dwmy # Configurações da página. Título e frase no Topo. Title[EXEMPLO]: Exemplo de Análise de Tráfego para link de 256kbps PageTop[EXEMPLO]: <h1>Exemplo de Análise de Tráfego para link de 256kbps</h1> Pronto. Já temos uma configuração básica para o MRTG. Agora vamos rodá-lo:

# mrtg

Como colocamos a opção "RunAsDaemon", ele ficará rodando e estará atualizando o gráfico de 5 em 5 minutos. Os gráficos estarão localizados no diretório "/var/www/html/mrtg, com o nome de "exemplo.html". Claro que este diretório teria que estar disponível no seu servidor Web para verificarmos o gráfico. Só que quando reiniciarmos o computador, o mrtg não estará rodando mais. Se você instalou o MRTG a partir de um pacote pré-compilado, ele já deve ter vindo com um scrip de inicialização no diretório "/etc/init.d", então coloque este script na inicialização do seu Linux. Caso você queira fazer isso manualmente, é só colocar a seguinte linha no seu arquivo "/etc/rc.d/rc.local":

# Roda o MRTG /usr/bin/mrtg

Assim, toda vez que seu sistema for iniciado, ele chama o MRTG para rodar como Daemon e gerar os gráficos de 5 em 5 minutos. O uso do MRTG é bem extenso, e não se limita àpenas monitorar o tráfego de um roteador. Mas por enquanto vamos cobrir apenas este assunto. O arquivo de

Page 129: Linux - Tutoriais

configuração que usamos é muito simples, e se você quiser se aprofundar mais no assunto, dê uma olhada no manual de referência do arquivo de configuração:

• MRTG Configuration Reference - http://people.ee.ethz.ch/~oetiker/webtools/mrtg/reference.html

E boa sorte! :)

Como fazer funcionar as placas CMI8338.

Muitas pessoas, que possuem a placa SiS530 ja sofrem um pouco para fazer o video funcionar no Xwindows, quanto mais , fazer o SoundChip (placa de som) tocar alguma coisa. Por isso, a propria cmedia (www.cmedia.com.tw) fez o driver que esta disponivel para download.

Ao fazer o download do driver, descompacte ele dentro do /usr/src/linux/drivers/sound:

tar xvzf cmipci-1.1.tar.gz -C /usr/src/linux/drivers/sound

Se voce preferir, faca um backup dos arquivos Config.in e Makefile do /usr/src/linux/drivers/sound pra garantir :)

Depois, entre na configuracao do kernel

make menuconfig

Page 130: Linux - Tutoriais

A parte de ativação do som, deverá estar setada como [M]ódulo, e dentro dela aparecerá para ativação de :

Support for C-Media PCI audio chips

[*] Enable legacy FM

[*] Enable legacy MPU-401

Pronto! Basta agora salvar a configuração, Efetuar um make modules e um make modules_install

para rodar o driver, digite a sequencia:

depmod -a

modprobe cmpci

e aproveite sua placa de som onboar

Primeiros contatos com o Linux O início A inicialização do Linux é muito importante... Primeiro porque você está iniciando o melhor sistema existente, segundo porque as mensagens que aparecem durante o boot serão muito úteis na hora de executar algumas tarefas no Linux: tais como montar dispositivos (partições, cd-roms), ver o que está sendo iniciado automaticamente, o que está sendo reconhecido pelo

Page 131: Linux - Tutoriais

kernel, e outras coisas mais que com certeza veremos mais à frente. É indispensável que você observe as mensagens de boot atentamente... Mas tem um probleminha, se tudo passa muito rápido, ou você quer consultar as mensagens de boot depois (e não quer ter de reiniciar a máquina pra ver...), existe um comando que mostra as mensagens de boot do kernel. Este comando é o dmesg, ele vai mostrar o processo de boot do kernel todo sem problemas. Logo após todas as mensagens de boot, você será presenteado com uma tela de login do usuário. Como veremos mais adiante, o Linux é multi-usuário, ou seja, suporta vários usuários. Dependendo da configuração usada na instalação, esta tela de login pode ser em modo gráfico ou texto. É aqui que começa o nosso uso no sistema! Na instalação você deve ter escolhido uma senha para o root, e deve também ter criado um usuário normal (se não criou, é recomendável que você criasse, mas isso podemos fazer depois). Logue-se como root ou como usuário normal usando o nome do usuário e a senha escolhida. Você ou cairá na interface gráfica, ou na texto (dependendo da distribuição)... Mas antes de usar vamos entender mais conceitos? É o que trataremos nas seções à seguir. Multi-tarefa e multi-usuário O Linux é multi-tarefa e multi-usuário, mas o que isso quer dizer? Multi-tarefa é a capacidade que o sistema tem de executar várias tarefas de uma só vez, dividindo assim o uso da memória. Enquanto multi-usuário é a capacidade do sistema lhe dar com várias pessoas ou

Page 132: Linux - Tutoriais

usuários, cada um com suas preferências, cada um com seus arquivos, suas permissões e assim por diante. Como um exemplo de multi-tarefa, podemos citar que você pode consultar um arquivo texto que está no diretório X, enquanto acessa o disquete, e o CD-ROM, tudo ao mesmo tempo. Ou seja, você faz as coisas, mas não fica preso somente a elas, pode executar outras tarefas enquanto uma já estiver sendo executada. Todos os sistemas atuais são multi-tarefa, então este conceito não deve ser muito novo para você. Um exemplo de sistema que não é multi-tarefa é o DOS (ugh). É muito importante destacar o multi-usuário do Linux. Tudo vai ser dividido por usuários, e junto com essas divisões haverá também as restrições. Há um usuário principal no Linux, chamado root. Este usuário pode acessar, controlar, e fazer tudo no sistema. Enquanto os usuários normais só poderão acessar seus documentos, ou os que o sistema (root) permitir. Uma ética importante para o Linux é nunca usar o usuário root... Então é recomendável que você crie um usuário primeiro e use ele, só utilize o root para tarefas administrativas! Por que isso? O usuário root tem o poder em tudo, inclusive de fazer muita besteira no sistema... Você não quer fazer besteira, ou quer? :) A interface texto (Console) A interface texto do Linux é indispensável para o uso do sistema. É nesta interface que você vai encontrar uma quantidade enorme de utilitários e comandos que irão lhe ajudar na administração do dia a dia. Se a tela de login for no modo texto, você se logará e logo após será presenteado com o interpretador de comando, onde você poderá mexer realmente no sistema. A interface texto não é tão amigável como a gráfica, mas

Page 133: Linux - Tutoriais

certamente tem suas utilidades, e é recomendado que todos os usuários não fiquem só presos a interface gráfica, e que conheçam bem o modo texto. Outro nome que podemos dar à interface texto é console. Então vamos ao que interessa, o modo texto é dividido inicialmente em 6 telas, em cada tela poderá se logar um usuário. Experimente apertar a combinação de teclas ALT+F1, ALT+F2, ..., ALT+F6. Isto o levará para os consoles 1, 2, 3, 4, 5 e 6. A partir do 7, o Linux reserva especialmente para as interfaces gráficas funcionarem. Como o Linux é um sistema multi-tarefa e multi-usuário, você pode se logar em todos ao mesmo tempo, com quaisquer usuários. Você pode por exemplo se logar como root no console 1 para qualquer emergência, e ficar usando um usuário normal no console 2. Lembre-se sempre que a interface texto é o poder do Linux! Você pode estar se perguntando como pode conviver com o ambiente texto, mas eu posso te garantir que você convive muito bem. Existem vários programas para o modo texto que você provavelmente vai querer usar... Você vai poder usar IRC (BitchX), WWW (lynx ou links), ICQ (licq ou micq), visualizar imagens (zgv), jogar joguinhos (quake, overkill, dopewars), editar arquivos (vi, pico ou joe), e um monte de coisas mais. A interface texto do Linux, ao contrário da do DOS, é bem poderosa :) Vá se acostumando com a idéia de querer usar ela. A interface gráfica (X-Window) A interface gráfica vem crescendo cada vez mais no Linux. O que permite que o Linux tenha estes recursos gráficos todos é o servidor X (X-Window). Em todas as distribuições Linux é incluído o Xfree86, um servidor X totalmente gratuito para Linux/Unix. Mas o servidor X

Page 134: Linux - Tutoriais

é apenas quem vai fornecer o recurso de gerar a interface gráfica. Para que haja um desktop, é necessário também a existência de um gerenciador de janelas (ou Window Managers) que são programas que usam a biblioteca do X-Window para gerar as aplicações, as janelas, a aparência do modo gráfico no Linux. Por exemplo, o WindowMaker é um gerenciador de janelas, ele usa a biblioteca do X-Window para gerar suas janelas e seus programas, como o dock. Sem um gerenciador de janelas, é inútil se usar um servidor X, pois ele rodará, mas o usuário não poderá fazer nada nele. Quer ver? Experimente executar o comando X. Irá se abrir uma interface gráfica, com o mouse, mas o usuário não vai ter controle nenhum. Para finalizar esta seção aperte CTRL+ALT+BACKSPACE (combinação de teclas que encerra forçadamente o servidor X). Iremos falar muito das interfaces gráficas mais adiante, por enquanto ficaremos aprendendo como mexer no console, que é a parte mais emocionante e a que mais se aprende. Estrutura de diretórios no Linux A raiz do Linux fica no diretório "/", e dentro deste diretório existem vários outros, cada um significando uma coisa. Vamos aqui aprender o significado de cada um para sabermos onde usar as coisas, e onde colocar os arquivos adequadamente e organizadamente. A estrutura de diretórios no Linux é basicamente dividida assim:

Diretório Significado

/bin Arquivos executáveis que são usados pelo sistema

Page 135: Linux - Tutoriais

freqüentemente. Aqui encontramos por exemplo os interpretadores de comandos (bash, ash, etc), o df, chmod, date, kill, dmesg, pwd, ls, e muito mais. São os comandos essenciais :)

/boot

Neste diretório ficam os arquivos de boot, como os mapas de boot e as imagens do kernel.

/dev Este é um diretório que carrega consigo todos os arquivos-dispositivos.

/etc

Arquivos de configuração do Linux. Este é o diretório que carrega todas as configurações dos principais (senão todos) os programas do Linux. Ele contém por exemplo os arquivos de usuários e senhas, arquivos de inicialização, configurações de rede, e mais uma bolada de configuração pra deixar qualquer um doido.

/home Diretório dos usuários. Cada usuário tem um diretório dentro deste diretório :)

/lib Algumas bibliotecas essenciais para o funcionamento do Linux, e também os módulos do kernel.

/proc Este é um diretório especial, ele contém informações que o

Page 136: Linux - Tutoriais

kernel gera.

/root É um diretório HOME. Só que aqui é o do usuário administrador (root).

/sbin

Executáveis poderosos, que só podem ser executados pelo root. Aqui se encontram programas para checkar e criar sistemas de arquivos, optimizar o uso do HD, configurar dispositivos, gerenciar módulos do kernel, etc.

/tmp

Diretório temporário. Neste diretório, vários utlitários criam arquivos que só serão usados por um tempinho, e depois descartados. Não há nenhuma informação importante aqui, pois pode ser acessado por qualquer usuário.

/usr

Um dos maiores diretórios, este contém as bibliotecas e arquivos gerais dos vários programas instalados no sistema.

/var

Informações variáveis que estão sempre em constante mudança, como arquivos de logs, travamentos, informações, etc.

Cada diretório tem seus subdiretórios com muita coisa para explorar. Você pode ir já dando uma olhada para ver como tudo é organizado. O interpretador de comandos

Page 137: Linux - Tutoriais

Pronto. Você acaba de se logar no sistema, o que fazer agora? A primeira coisa que você tem de saber é o com o que você está usando: um interpretador de comandos. Você estará num prompt parecido com alguns destes:

songoku:/home/xxx$ [xxx@songoku xxx]$ etc Você está dentro de um interepretador de comandos, que no caso é o bash. O interpretador de comandos é um mediador entre o usuário e a máquina. Você digita algum comando, e o interpretador lê o que você digitou e executa a tarefa correspondente. Sem um interpretador de comandos, não haveria possibilidade de o usuário interagir com o sistema. Os interepretadores mais comuns são: sh, bash, ash, csh e tcsh. Na maioria dos casos, você estará usando o bash (que na minha opinião é realmente o melhor!). Só uma nota... Nos prompts do Linux, quando se acaba com o símbolo "$", isto quer dizer que você está logado com um usuário normal. Se você estiver logado com o root, ao invés do símbolo "$", no final do prompt existirá o símbolo "#". Você pode ir testando seu interpretador de comandos executando comandos simples, ou fazendo scripts shell, ou o que seja. Caso você queira usar outro interpretador de comandos, você pode mudar a entrada no arquivo /etc/passwd para o usuário, ou pode simplesmente executar a shell dentro de uma shell. Por exemplo, se você digitar csh, você entrará nesta shell. Quando quiser sair da shell, utilize o comando exit (ou logout, ou também apertando

Page 138: Linux - Tutoriais

CTRL+D). Experimente testando todas os interpretadores que citamos aqui. Documentação As páginas de manual O que você faz quando está confuso com algum comando? Não sabe como ele funciona, quais são seus parâmetros, o que ele faz, e essas coisas... No Linux há uma maneira bem fácil de entender melhor e detalhadamente os comandos. Este método são as páginas de manual (manpages). Cada comando tem sua página de manual, e dentro desta há a descrição do comando, para que ele serve, quais são seus autores, quais são seus parâmetros, bugs conhecidos, arquivos e outros comandos relacionados, etc. Para acessar uma página de manual, você utiliza o seguinte comando:

$ man comando

Por exemplo, se você está com dúvida sobre o comando ls, simplesmente digite man ls, e aparecerá um manual falando apenas deste comando, com seus parâmetros e tudo mais. Este recurso é muito bom porque o usuário consegue uma ajuda bem rápida. Documentos disponíveis Um recurso muito bom de ser utilizado são as várias documentações do Linux. Se você tiver instalado toda a documentação, você poderá encontrá-los no diretório /usr/doc. As distribuições mais atuais estão começando a colocar estes documentos no /usr/share/doc. Dentre estes vários documentos, podemos citar os HOWTOs, que são documentos que ensinam a fazer alguma coisa em específico. Também há os FAQs que respondem a dúvidas freqüêntemente perguntadas pelos usuários, e alguns históricos de listas de discussões.

Page 139: Linux - Tutoriais

Ler a documentação é indispensável para o aprendizado de novas coisas, e na especialização de certos recursos que o Linux pode oferecer. A maioria dos documentos estão em inglês, mas também há varios traduzidos para a língua portuguesa através do projeto LDP-BR (Linux Documentation Project Brasil), localizado no endereço http://ldp-br.conectiva.com.br. RTFM! Err.. o que é isso? Bem, Read The Fine Manual :) Comandos de ajuda Além do comando man podemos contar com uma série de outros comandos que ajudam no dia a dia. Temos o info, que é semelhante ao man, traz informações sobre um certo comando. O comando locate procura por arquivos que estão incluídos no banco de dados do updatedb (Se você executar o comando updatedb, ele vai varrer seu disco e vai colocar todos os nomes dos arquivos no banco de dados, para o locate consultar depois). Há também o whatis que procura no banco de dados algum comando relacionado a uma certa palavra (para criar o banco de dados de comandos, digite makewhatis). Estes comandos vão certamente ser companheiros nas horas de aperto. Listas de discussão Lista de discussão é um recurso muito usado no mundo todo. Aqui no Brasil temos várias listas de discussões relacionadas com o Linux. Podemos citar dentre elas a lista de discussão linux-br. A lista linux-br é a mais movimentada do Brasil, e pode ser acessada no endereço http://linux-br.conectiva.com.br. Se você tem alguma dúvida que não conseguiu resolver lendo as páginas de manual, ou lendo os HOWTOs, os FAQs e ou até mesmo procurando em sites pela

Page 140: Linux - Tutoriais

Internet, o recomendado é você ir para as listas de discussão ver se alguém sabe a resolução do seu problema. Mas lembre-se sempre de ser educado e perguntar com jeito! Lembre-se que são pessoas de boa vontade que irão te ajudar :) Permissões de arquivos no Linux No Linux, como em outros sitemas Unix, cada arquivo tem uma permissão. As permissões são atributos dos arquivos que especificarão se ele pode ser lido, executado ou escrito. Estas permissões que vão definir o que um usuário pode fazer. Para saber se um programa é executável ou não, execute um 'ls -l' e veja no lado esquerdo se o arquivo tem X nos seus argumentos, como no exemplo abaixo:

drwxr-xr-x 2 root root 1024 Dec 23 15:22 bin drwxr-xr-x 2 root root 1024 Dec 31 05:48 boot drwxr-xr-x 2 root root 1024 Dec 6 15:51 cdrom drwxr-xr-x 3 root root 8192 Mar 11 10:17 dev drwxrwxr-x 2 root root 1024 Feb 27 13:52 dosa dr-xr-xr-x 11 root root 2048 Mar 11 10:19 etc drwxr-xr-x 11 root root 2048 Feb 23 19:08 home drwxr-xr-x 3 root root 1024 Feb 23 19:13 lib drwxr-xr-x 2 root root 12288 Nov 2 11:25 lost+found -rwxr--r-- 1 root root 57 Mar 10 03:44 make-backup -rw-rw-r-- 1 killer users 2342 Mar 10 03:12 teste.txt -rw-rw-rw- 1xxx visits 23412 Mar 09 22:22

Page 141: Linux - Tutoriais

teste2.doc

No exemplo acima todos os arquivos tem como dono root e como grupo também root, com exceção do 'teste.txt' que o dono é 'killer' e o grupo é 'users', e também 'teste2.doc', no qual 'xxx' é o dono e o grupo 'visits' também é dono. Como você pode ver do lado esquerdo de cada arquivo/diretório existe um série de letras r, w, x ou d! Vamos ver o que representa cada uma delas:

drwxrwxrwx 0111222333

No caso acima, a primeira coluna significa (numero 0) se o nome listado é um diretório ou não, caso não seja um diretório ele será exibido da seguinte maneira:

-rwxr--r-- 1 root root 57 Mar 10 03:44 make-backup \--------> Não contém a letra 'd', não é diretório, e sim arquivo O exemplo abaixo mostra o que seria um diretório:

drwxr--r-- 1 root root 1 Mar 10 01:12 bin \----------> Contém a letra 'd' na primeira coluna, é um diretório

Também há casos em que no lugar do 'd', aparecem outras letras que indicam outros tipos de arquivos. A letra 'l' significa que é um link simbólico, as letras 'c' e 'b' correspondem à dispositivos (/dev). Veja alguns exemplos abaixo:

crw-rw---- 1 xxx audio 14, 4 Dec 2 1999 audio brw-rw---- 2 xxx cdrom 22, 64 May 5 1998 hdd lrwxrwxrwx 1 root root 8 Oct 17 22:53 cdrom -> /dev/hdd

Page 142: Linux - Tutoriais

Continuando, na segunda coluna (números 1 de acordo com o exemplo mais acima) temos as definições para o dono do arquivo, como mostra o exemplo:

-rwxr--r-- 1 killer users 1231 Mar 09 12:12 teste.txt ||\--------> O dono do arquivo (killer) pode executar o arquivo, x=executable! |\---------> O dono do arquivo (killer) pode gravar no arquivo, w=writable! \----------> O dono do arquivo (killer) pode ler o arquivo, r=readable! Seguindo, na terceira coluna (números 2 de acordo com o exemplo lá em cima) temos as definições para o grupo que é dono do arquivo, como mostra o exemplo:

-r--rwxr-- 1 fernando visits 212 Mar 01 12:42 exemplo.doc ||\-----> O grupo dono do arquivo (visits) pode executar o arquivo! |\------> O grupo dono do arquivo (visits) pode gravar no arquivo! \-------> O grupo dono do arquivo (visits) pode ler o arquivo! Finalmente, temos a quarta coluna (composto pelos números 3), essa coluna se refere as permissões para todos os outros usuários do sistema, sem ser os donos e grupos-donos dos mesmos, exemplo:

-r--r--rwx 1 fernando visits 1231 Mar 03 12:42 exemplo2.doc ||\--> Todos os usuários (exceto fernando e usuários do grupo visits) || tem permissão para acessar o arquivo! |\---> Todos os usuários (exceto fernando e

Page 143: Linux - Tutoriais

usuários do grupo visits) | tem permissão para gravar no arquivo! \----> Todos os usuários (exceto fernando e usuários do grupo visits) tem permissão para ler o arquivo! Quando nos referimos a diretório invés de arquivos, o FLAG x (executável) diz se o diretório é ou não acessível, já que não podemos "EXECUTAR" diretórios... Exemplo:

drwxr--r-- 1 root root 2134 Mar 01 12:54 exemplo3 ||||| \----> Todos os usuários podem ler o interior do diretório, mas não ||||| podem usar o comando 'cd' para entrar nele, pois não existe ||||| o FLAG 'x' para a quarta coluna! ||||\-------> Usuários do grupo 'root' podem ler o interior do diretório, |||| mas também não podem usar 'cd' para entrar no diretório! |||\--------> O usuário 'root' pode usar 'cd' para entrar no diretório! ||\---------> O usuário 'root' pode gravar arquivos nesse diretório! |\----------> O usuário 'root' pode ler o interior desse diretório! \-----------> Indica que o nome listado é um diretório! O comando chmod pode ser usado para mudar os FLAGS 'rwx' dos arquivos e/ou diretórios, a sintaxe básica do comando é:

chmod [ugoa]{-+}[rwx] nome_do_arquivo_ou_diretório

Page 144: Linux - Tutoriais

Então vamos à um exemplo. Se eu quero mudar a permissão para o dono do arquivo (u=user) poder ler e gravar (rw) no 'arquivo1.txt', faço o seguinte:

$ chmod u+rw arquivo1.txt

Caso você queira desfazer o comando, você faria: "chmod u-rw arquivo1.txt". Como se vê, o + ou - define se os FLAGS serão ativados ou desativados! Outros exemplos:

$ chmod a+r arquivo2.txt

(Todos usuários (a=all) podem ler o 'arquivo2.txt')>

$ chmod o+w arquivo3.txt

(Outros usuários (o=others) sem ser o dono e o grupo dono do arquivo, podem gravar no 'arquivo3.txt')

$ chmod g+x netscape (O grupo-dono do arquivo (g=group) pode executar o arquivo 'netscape') O comando chmod pode também ser usado com números, em vez dos flags. Este método é chamado de octal, veja o exemplo abaixo:

$ chmod 664 arquivo.txt

O que quer dizer cada um desses números? Veja abaixo:

Número Significado 0 Nenhuma permissão 1 Permissão para executar 2 Permissão para gravar

3 Permissão para gravar e executar

Page 145: Linux - Tutoriais

4 Permissão para ler

5 Permissão para ler e executar

6 Permissão para ler e gravar

7 Permissão para ler, gravar e executar

No exemplo o comando informou que o 'arquivo.txt' pode ser lido e gravado pelo seu dono (numero 6 na primeira coluna), informou que pode também ser lido e gravado pelos usuários que compõem o grupo-dono (numero 6 na segunda coluna), e informou que pode ser lido por todos os outros usuários do sistema (numero 4 na ultima coluna). O comando chown é simples e pode ser usado para mudar o dono e o grupo dono de um arquivo/diretório. E é usado da seguinte maneira:

$ chown usuario.grupo arquivo_ou_diretorio

Como exemplo, vamos definir que um arquivo 'teste4.txt' terá como dono 'killer' e como grupo 'users':

$ chown killer.users teste4.txt

Outros exemplos:

$ chown mrdvs.visits teste5.txt $ chown xxx.users teste6.txt

Programação em BASH

A programação da shell (neste caso é a BASH) permite que o computador execute uma sequência de comandos de um modo automático (sem ser o utilizador a efetuar este processo). A script contém os nomes dos comandos que vão ser executados (a shell executa esses comandos).

Page 146: Linux - Tutoriais

Criação de uma script

Para criar uma script, é necessário utilizar um editor de texto onde vamos escrever a sequência de comandos que se pretende executar. Considere que o ficheiro fich1 contém o seguinte:

#!/bin/bash # Esta script procura em todos os ficheiros do directório actual a # string Sistemas e mostra o conteúdo de # cada ficheiro que contenha essa string. for ficheiro in * do

if grep –l Sistemas $ficheiro then

more $ficheiro

fi

done

Os comentários começam com # e continuam até ao fim da linha. Normalmente este símbolo é colocado na primeira coluna de cada linha. O comentário #!/bin/bash é um comentário especial, onde #! informa o sistema que o argumento que se segue é o programa que vai ser utilizado para executar este ficheiro (neste caso é /bin/bash).

Para executar uma script, podemos utilizar duas formas diferentes. A primeira é invocar a shell com o nome da script como parâmetro.

Exemplo:

$ /bin/bash fich1

A outra maneira de executar scripts é escrever apenas o nome da script que queremos executar. Para isso o ficheiro deve ter permissão de execução.

Page 147: Linux - Tutoriais

Exemplo:

$ chmod +x fich1

$ fich1

Nota: Também é possível obter o mesmo resultado que a script anterior em apenas uma linha de comandos. Para isso, pode-se utilizar:

$ more `grep –l Sistemas *`

ou

$ more $(grep –l Sistemas *)

Primeiro é feito o grep –l Sistemas *, e só depois a shell executa o comando more sobre o resultado obtido.

Variáveis

Para utilizar variáveis não é necessário declará-las primeiro. As variáveis são criadas quando se utilizam, isto é, quando lhes atribuímos um valor inicial. Por defeito, todas as variáveis são consideradas do tipo string, mesmo aquelas que têm valores numéricos. A shell converte a “string numérica” em valores numéricos de modo a fazer o que é necessário. Um fator a ter em conta é que os nomes das variáveis são case-sensitive.

Para se ter acesso ao conteúdo de uma variável temos de utilizar o símbolo $ antes do nome da variável e utilizar o comando echo para mostrar esse conteúdo no monitor. Em todas as situações que se utilizam as variáveis é necessário utilizar o símbolo $, excepto quando se trata de atribuir um valor a essa variável.

Exemplo:

Page 148: Linux - Tutoriais

$ valor=Sistemas $ echo $valor Sistemas $ valor=”Sistemas Operativos I” $ echo $valor Sistemas Operativos I $ valor=4+5 $ echo $valor 4+5 $

Quando se utilizam espaços, é necessário utilizar aspas como delimitador da string. A funcionalidade das variáveis como $valor depende do tipo de aspas que estamos a utilizar. Se a variável está entre aspas (“) (ex:“$valor”), então é substituída pelo valor da variável quando a linha for executada. Se a variável está entre aspas (‘) então não é efetuada nenhuma substituição. Para remover o significado especial de $ é necessário utilizar antes desse símbolo a barra invertida (\\).

Também se pode atribuir um valor a uma variável através do comando read.

Exemplo:

A script: #!/bin/bash valor = ”Sistemas Operativos I” echo $valor echo “$valor” echo \'$valor\' echo \\$valor echo Introduza texto: read valor echo \'$valor\' foi modificado para $valor

dá como resultado:

Sistemas Operativos I Sistemas Operativos I $valor $valor Introduza texto: Exame de SO1 $valor foi modificado para Exame de SO1

Variáveis Ambiente

Quando uma shell script é executada, algumas variáveis são inicializadas com os valores do seu ambiente. Os nomes das variáveis ambiente são em maiúsculas para se destinguirem das variáveis definidas nas scripts (que normalmente são em minúsculas).

Variável Ambiente Descrição

Page 149: Linux - Tutoriais

$HOME Diretório home do utilizador

$PATH Lista de diretórios separados por:

$PS1 Prompt (normalmente é $)

$PS2 Prompt secundário (normalmente é >)

$IFS Input Field Separator. Lista de caracteres utilizada para separar palavras.

$0 Nome da shell script

$# Número de parâmetros da shell script

$$ PID (Process IDentification) da shell script

Parâmetros

Se a script é invocada com parâmetros, são criadas algumas variáveis adicionais. Mesmo que não se passem parâmetros, a variável $# continua a existir, mas obviamente com o valor 0.

As variáveis que permitem trabalhar os parâmetros são:

Variável Descrição

$1, $2, $3, … Os parâmetros da script

$* Lista com todos os parâmetros, numa única variável, separados pelo primeiro caracter da variável ambiente IFS

$@ Semelhante ao $*, só que não utiliza a variável ambiente IFS

Exemplo (considere que o nome da script é script_variaveis):

Page 150: Linux - Tutoriais

#!/bin/bash

valor=“Sistemas”

echo $valor

echo “O programa $0 está a ser executado”

echo “O segundo parâmetro é $2”

echo “O primeiro parâmetro é $1”

echo “O terceiro parâmetro é $3”

echo “A lista de parâmetros é $*”

Se executar a script, obtém o seguinte:

$ script_variaveis exame sistemas operativos

Sistemas

O programa script_variaveis está a ser executado

O segundo parâmetro é sistemas

O primeiro parâmetro é exame

O terceiro parâmetro é operativos

A lista de parâmetros é exame sistemas operativos

Execução de Comandos

Para executar comandos utiliza-se $(comando) ou `comando`. O resultado é a saída do respectivo comando (não é o estado do comando).

Page 151: Linux - Tutoriais

Considere a script:

#!/bin/bash

echo A variável PATH é $PATH

echo Os utilizadores que estão no sistema são $(who)

Esta script mostra o conteúdo da variável PATH, bem como os utilizadores que estão actualmente no sistema. Tenha em atenção que foi necessário executar o comando who.

O conceito de colocar o resultado da execução de um comando numa variável é muito poderoso.

Condições

Um dos factores essenciais em todas as linguagens de programação é a possibilidade de testar condições e fazer determinadas acções em função dessas condições.

O comando test e o comando [ ]

Estes dois comandos servem para testar condições e são equivalentes.

Para perceber a funcionalidade do comando test, vamos verificar se o ficheiro fich.c existe, e se existe apresentar o seu conteúdo. O comando para verificar essa condição é test –f , portanto na script teremos:

#!/bin/bash

if test –f fich.c then

more fich.c

fi

Também podemos utilizar o comando [ ] para obter a mesma funcionalidade:

#!/bin/bash

if [ –f fich.c ] then

Page 152: Linux - Tutoriais

more fich.c

fi

Comparação de strings

Comparação Resultado

String Verdade, se a string não é vazia

String1 = string2 Verdade, se as strings são iguais

String1 != string2 Verdade, se as strings são diferentes

-n string Verdade, se a string não é nula

-z string Verdade, se a string é nula

Comparações Aritméticas:

Comparação Resultado

Expressão1 –eq expressão2 Verdade, se forem iguais

Expressão1 –ne expressão2 Verdade, se as expressões são diferentes

Expressão1 –gt expressão2 Verdade, se expressão1 > expressão2

Expressão1 –ge expressão2 Verdade, se expressão1 ³ expressão2

Expressão1 –lt expressão2 Verdade, se expressão1 < expressão2

Expressão1 –le expressão2 Verdade, se expressão1 £ expressão2

Page 153: Linux - Tutoriais

!expressão Nega a expressão. Retorna Verdade se a expressão é falsa

Condições em ficheiros:

Comparação Resultado

-d ficheiro Verdade, se o directório existe

-f ficheiro Verdade, se o ficheiro existe

-r ficheiro Verdade, se é possível ler o ficheiro

-s ficheiro Verdade, se o ficheiro tem um tamanho > 0

-w ficheiro Verdade, se é possível escrever no ficheiro

-x ficheiro Verdade, se é possível executar o ficheiro

Estruturas de Controle

IF - testa o resultado de um comando e executa condicionalmente um grupo de comandos.

if condição then

comando1

comando2

comandon

else

comando1

Page 154: Linux - Tutoriais

comandon

fi

Nota: Para utilizar o then na mesma linha do if é necessário acrescentar ; depois da condição.

Considere o seguinte exemplo, que faz uma decisão baseado numa resposta:

#!/bin/bash

echo “Passou no exame? “

read resposta

if [ $resposta = “sim” ]; then

echo “Parabens!”

else

echo “Não estudou !!!”

fi

ELIF - A script anterior tem um problema – aceita qualquer resposta, excepto a resposta sim para escrever Não estudou. Para resolver esta situação podemos utilizar o comando elif, que permite testar uma segunda condição quando o else é executado.

#!/bin/bash

echo “Passou no exame? “

read resposta

if [ $resposta = “sim” ]; then

echo “Parabéns!”

elif [ $resposta = “não” ]; then

Page 155: Linux - Tutoriais

echo “Não estudou !!!”

else

echo “Não conheço a resposta $resposta. Introduza sim ou não!”

fi

FOR – executa um ciclo um determinado número de vezes (em função de um conjunto de valores). Esses valores podem ser especificados na script, ou serem o resultado da expansão de comandos.

for variável in valores do

comando 1

comando n

done

considere o seguinte exemplo:

#!/bin/bash

for valor in exame de sistemas “SO1 – teste” operativos do

echo $valor

done

dá como resultado:

exame

de

sistemas

SO1 – teste

operativos

Page 156: Linux - Tutoriais

Considere o seguinte exemplo;

#!/bin/bash

for valor in $(ls so[123].txt) do

more $valor

done

Este exemplo mostra o conteúdo dos ficheiros que são o resultado de executar ls so[123].txt, isto é, mostra o conteúdo dos ficheiros so1.txt, so2.txt so3.txt se existirem.

O ciclo for funciona bem quando se trata de situações em que temos um conjunto de strings. Quando é necessário executar um grupo de comandos um número variável de vezes, este comando não é o mais aconselhado.

Considere a script:

#!/bin/bash

for valor in 1 2 3 4 5 6 7 8 9 10 do

echo “Sistemas Operativos”

done

Esta script escreve dez vezes \"Sistemas Operativos\". Também obteríamos o mesmo resultado se depois de in tivéssemos qualquer valor dez vezes seguidas (ex: a a a a a a a a a a ).

WHILE - o ciclo while é útil nas situações em que não existe um número fixo de vezes para executar um determinado grupo de comandos.

Estrutura do comando while:

while condição do

comando 1

Page 157: Linux - Tutoriais

comando n

done

Considere a script:

#!/bin/bash

echo \"Introduza um nome: \"

read nome

while [ \"$nome\" != \"Sistemas\" ]; do

echo “Não acertou no nome - tente de novo !”

read nome

done

Esta script só termina quando o utilizador introduzir o nome correcto. Enquanto introduzir o nome errado, vai ter que introduzir um novo nome.

Nota: A utilização de aspas (\") em [ \"$nome\" != \"Sistemas\" ] permite salvaguardar a situação em que o utilizador utiliza o Enter sem introduzir mais nada (nesta situação a condição de teste ficaria [ != \"Sistemas\"], que não é uma condição válida). Com a utilização de aspas o problema é resolvido, pois a condição de teste será [ \"\" != \"Sistemas ].

Considere a script:

#!/bin/bash

valor=1

while [ $valor -le 10 ] do

echo “Sistemas Operativos”

valor=$(($valor + 1))

Page 158: Linux - Tutoriais

done

Esta script escreve \"Sistemas Operativos\" dez vezes. Para isso utiliza a variável valor que vai sendo incrementada.

UNTIL - é semelhante ao ciclo while. A única diferença é que o teste da condição é feito no fim, isto é, o ciclo continua até que a condição seja verdade.

Estrutura do comando until:

until condição do

comando 1

comando n

done

Considere a script:

#!/bin/bash

until who | grep \"$1\" >/dev/null do

sleep 10

done

echo *** O utilizador $1 entrou no sistema ! ***

Esta script verifica se um determinado utilizador entrou no sistema, isto é, de 10 em 10 segundos verifica se o utilizador está no sistema. Quando o utilizador entrar no sistema a script termina.

CASE - permite verificar o conteúdo de uma variável em relação a vários padrões, executando depois os respectivos comandos.

Page 159: Linux - Tutoriais

Estrutura do comando case:

case variável in

padrão [| padrão …]) comandos;;

padrão [| padrão …]) comandos;;

esac

Considere a script:

#!/bin/bash

echo “Passou no exame? “

read resposta

case \"$resposta\" in

\"sim\") echo \"Parabéns!\" ;;

\"não\") echo \"Não estudou !!!\" ;;

\"s\" ) echo \"Parabéns!\" ;;

\"n\" ) echo \"Não estudou !!!\" ;;

* ) echo “Não conheço a resposta $resposta!” ;;

esac

A script compara o conteúdo de resposta com todos os padrões (quando se verifica um dos padrões o comando case termina a procura). O asterisco (*) pode ser utilizado para expandir strings. Neste exemplo, o asterisco faz concordância (matching) de todas as strings, permitindo assim executar uma acção por defeito (quando nenhum dos outros padrões se verificou).

Obtemos a mesma funcionalidade com a script:

#!/bin/bash

Page 160: Linux - Tutoriais

echo “Passou no exame? “

read resposta

case \"$resposta\" in

\"sim\" | \"s\" ) echo \"Parabéns!\" ;;

\"não\" | \"n\" ) echo \"Não estudou !!!\" ;;

* ) echo “Não conheço a resposta $resposta!” ;;

esac

Listas de Comandos

Para executar uma lista de comandos em que só é necessário executar o comando seguinte se o comando anterior foi bem sucedido, faz-se o seguinte:

comando1 && comando2 && comando3 && …

O comando2 só é executado se o comando1 teve sucesso; o comando3 só é executado se o comando2 teve sucesso, etc.

Para executar-mos uma série de comandos até que um tenha sucesso, faz-se o seguinte:

comando1 || comando2 || comando3 || …

Se o comando1 tem sucesso, já não é executado mais nenhum comando da lista. Se o comando1 falhou, então é executado o comando2; Se o comando2 tem sucesso então termina; Se o comando2 falhou então é executado o comando3, etc.

Nota: Para se utilizar um grupo de comandos em situações em que só um comando é permitido (como é o caso das listas de comandos), temos de agrupar esses comandos entre { }.

Page 161: Linux - Tutoriais

Listas de Comandos

Para executar uma lista de comandos em que só é necessário executar o comando seguinte se o comando anterior foi bem sucedido, faz-se o seguinte:

comando1 && comando2 && comando3 && …

O comando2 só é executado se o comando1 teve sucesso; o comando3 só é executado se o comando2 teve sucesso, etc.

Para executar-mos uma série de comandos até que um tenha sucesso, faz-se o seguinte:

comando1 || comando2 || comando3 || …

Se o comando1 tem sucesso, já não é executado mais nenhum comando da lista. Se o comando1 falhou, então é executado o comando2; Se o comando2 tem sucesso então termina; Se o comando2 falhou então é executado o comando3, etc.

Nota: Para se utilizar um grupo de comandos em situações em que só um comando é permitido (como é o caso das listas de comandos), temos de agrupar esses comandos entre { }.

Listas de Comandos

Para executar uma lista de comandos em que só é necessário executar o comando seguinte se o comando anterior foi bem sucedido, faz-se o seguinte:

comando1 && comando2 && comando3 && …

O comando2 só é executado se o comando1 teve sucesso; o comando3 só é executado se o comando2 teve sucesso, etc.

Page 162: Linux - Tutoriais

Para executar-mos uma série de comandos até que um tenha sucesso, faz-se o seguinte:

comando1 || comando2 || comando3 || …

Se o comando1 tem sucesso, já não é executado mais nenhum comando da lista. Se o comando1 falhou, então é executado o comando2; Se o comando2 tem sucesso então termina; Se o comando2 falhou então é executado o comando3, etc.

Nota: Para se utilizar um grupo de comandos em situações em que só um comando é permitido (como é o caso das listas de comandos), temos de agrupar esses comandos entre { }.

Funções

As funções têm a seguinte estrutura:

nome_da_função () {

comando1

comandon

}

Considere a script:

#!/bin/bash

escreve () {

echo \"A função está a ser executada \"

}

echo \"Início da script\"

Page 163: Linux - Tutoriais

escreve

echo \"Fim da script\"

Embora a definição da função esteja no princípio da script, a script só começa a executar os comandos que estão depois da definição da função. Quando se chama uma função, a shell executa-a e depois retorna para a linha seguinte à da função. É necessário ter em atenção que é necessário definir a função antes de utilizá-la, isto é, o código das funções deve ser colocado no princípio da script. Quando uma função é invocada, os parâmetros da script $*, $@, $#, $1, $2, etc. são substituídos pelos parâmetros da função. Quando a função termina a sua execução, os parâmetros são restaurados.

Para que a função retorne um valor numérico, é necessário utilizar o comando return. A única maneira de retornar strings é utilizar uma variável global, de modo a ser possível utilizá-la quando a função terminar a sua execução. Para declarar variáveis locais à função, utiliza-se a palavra local antes da variável.

Considere a script:

#!/bin/bash

texto=\"Variável global\"

escreve () {

local texto=\"Variável local\"

echo \"A função está a ser executada\"

echo $texto

}

echo \"Início da script\"

echo $texto

escreve

echo $texto

Page 164: Linux - Tutoriais

echo \"Fim da script\"

A script dá o seguinte resultado:

Início da script Variável global A função está a ser executada Variável local Variável global Fim da script

Quando não se utiliza o comando return na função, a função retorna o estado do último comando que foi executado.

Considere a script teste:

#!/bin/bash

pergunta() {

echo \"Os parâmetros da função são $*\"

while true

echo -n \"sim ou não\"

read resposta

case \"$resposta\" in

s | sim ) return 0;;

n | não ) return 1;;

* ) echo \"Responda sim ou não\"

esac

done

}

echo \"Os parâmetros da script são $*\"

if pergunta \"O nome é $1 ?\" then

echo \"Olá $1\"

else

Page 165: Linux - Tutoriais

echo \"Engano\"

fi

Esta script passa parâmetros para a função. A função retorna valores numéricos.

Exemplo de utilização da script anterior:

$ teste Orlando Sousa

Os parâmetros da script são Orlando Sousa

Os parâmetros da função são O nome é Orlando Sousa ?

sim ou não

não

Engano

Comandos:

BREAK - é utilizado para saír de um ciclo for, while ou until.

Exemplo:

#!/bin/bash

for ficheiro in so* do

if [ -d \"$ficheiro\" ]; then

break;

fi

done

echo O primeiro directório com iniciais so é $ficheiro

Page 166: Linux - Tutoriais

Esta script mostra o nome do primeiro directório com iniciais so.

CONTINUE - Avança para a próxima iteração do ciclo for, while ou until.

Exemplo:

#!/bin/bash

for valor in so* do

if [ -d \"$ficheiro\" ]; then

continue

fi

echo $ficheiro

done

Esta script apenas mostra os nomes de ficheiros que tenham como iniciais so (não mostra os directórios).

ECHO - mostra o conteúdo de uma string (seguido de newline). Para evitar o newline é necessário utilizar a opção -n.

EVAL - serve para avaliar argumentos.

A script:

#!/bin/bash

valor=5

x=valor

y=\'$\'$x

echo $y

Page 167: Linux - Tutoriais

dá como resultado $valor.

Mas a script:

#!/bin/bash

valor=5

x=valor

eval y=\'$\'$x

echo $y

dá como resultado 5, isto é, dá o valor do valor da variável.

EXPORT - faz que uma variável fique visível, isto é, cria uma variável ambiente.

Considere as seguintes scripts:

teste2:

#!/bin/bash

echo $valor

echo $resposta

teste1:

#!/bin/bash

valor=\"Variável que não utiliza export\"

export resposta=\"Variável que utiliza export\"

teste2

se executarmos a script teste1, dá:

Variável que utiliza export

Como a script teste1 chama a script teste2, apenas é visível a variável resposta na script teste2.

Page 168: Linux - Tutoriais

EXPR - avalia argumentos de uma expressão. É normalmente utilizado para cálculos aritméticos.

Exemplo:

valor = `expr $valor + 1`

Este exemplo coloca em valor o resultado de executar o comando expr $valor + 1.

Expressão --- Descrição

Expressão1 | expressão2 Expressão1, se é diferente de zero; senão expressão2

Expressão1 & expressão2 Zero, se uma ou ambas as expressões são zero

Expressão1 = expressão2 Igualdade

Expressão1 != expressão2 Diferentes

Expressão1 > expressão2

Expressão1 ³ expressão2

Expressão1 < expressão2

Expressão1 £ expressão1

Expressão1 + expressão2 Adição

Expressão1 - expressão2 Subtracção

Expressão1 * expressão2 Multiplicação

Expressão1 / expressão2 Divisão inteira

Expressão1 % expressão2 Resto da divisão

Nota: Em substituição do comando expr normalmente utiliza-se $((…)) , que é mais eficiente (também se pode utilizar $[…]).

Page 169: Linux - Tutoriais

PRINTF - é utilizado para formatar a saída.

A sintaxe para este comando é:

printf \"formato da string\" parâmetro1 parâmetro2 …

O formato da string é semelhante ao formato utilizado na linguagem C, com algumas restrições (Só suporta valores inteiros, pois a shell faz todas as suas operações sobre valores inteiros).

SET - permite configurar as variáveis da shell. É útil como meio de usar campos nos comandos que dão como resultado valores separados por espaço.

Considere a script:

#!/bin/bash

echo A data é $(date)

set $(date)

echo O mês da data é $2

Como o resultado de executar o comando date, dá uma string (ex: Mon Jan 17:22:57 MET 1999), apenas o segundo campo (que contém o mês) é apresentado no segundo echo.

SHIFT - o comando shift retira um parâmetro aos parâmetros da script (ex: $2 torna-se o $1, o $3 torna-se o $2, etc). O shift é utilizado para pesquisar os parâmetros.

#!/bin/bash

while [ \"$1\" != \"\"]; do

echo $1

shift

Page 170: Linux - Tutoriais

done

Esta script mostra todos os parâmetros introduzidos.

Comandos:

BREAK - é utilizado para saír de um ciclo for, while ou until.

Exemplo:

#!/bin/bash

for ficheiro in so* do

if [ -d \"$ficheiro\" ]; then

break;

fi

done

echo O primeiro directório com iniciais so é $ficheiro

Esta script mostra o nome do primeiro directório com iniciais so.

CONTINUE - Avança para a próxima iteração do ciclo for, while ou until.

Exemplo:

#!/bin/bash

for valor in so* do

if [ -d \"$ficheiro\" ]; then

Page 171: Linux - Tutoriais

continue

fi

echo $ficheiro

done

Esta script apenas mostra os nomes de ficheiros que tenham como iniciais so (não mostra os directórios).

ECHO - mostra o conteúdo de uma string (seguido de newline). Para evitar o newline é necessário utilizar a opção -n.

EVAL - serve para avaliar argumentos.

A script:

#!/bin/bash

valor=5

x=valor

y=\'$\'$x

echo $y

dá como resultado $valor.

Mas a script:

#!/bin/bash

valor=5

x=valor

eval y=\'$\'$x

echo $y

Page 172: Linux - Tutoriais

dá como resultado 5, isto é, dá o valor do valor da variável.

EXPORT - faz que uma variável fique visível, isto é, cria uma variável ambiente.

Considere as seguintes scripts:

teste2:

#!/bin/bash

echo $valor

echo $resposta

teste1:

#!/bin/bash

valor=\"Variável que não utiliza export\"

export resposta=\"Variável que utiliza export\"

teste2

se executarmos a script teste1, dá:

Variável que utiliza export

Como a script teste1 chama a script teste2, apenas é visível a variável resposta na script teste2.

EXPR - avalia argumentos de uma expressão. É normalmente utilizado para cálculos aritméticos.

Exemplo:

valor = `expr $valor + 1`

Este exemplo coloca em valor o resultado de executar o comando expr $valor + 1.

Page 173: Linux - Tutoriais

Expressão --- Descrição

Expressão1 | expressão2 Expressão1, se é diferente de zero; senão expressão2

Expressão1 & expressão2 Zero, se uma ou ambas as expressões são zero

Expressão1 = expressão2 Igualdade

Expressão1 != expressão2 Diferentes

Expressão1 > expressão2

Expressão1 ³ expressão2

Expressão1 < expressão2

Expressão1 £ expressão1

Expressão1 + expressão2 Adição

Expressão1 - expressão2 Subtracção

Expressão1 * expressão2 Multiplicação

Expressão1 / expressão2 Divisão inteira

Expressão1 % expressão2 Resto da divisão

Nota: Em substituição do comando expr normalmente utiliza-se $((…)) , que é mais eficiente (também se pode utilizar $[…]).

PRINTF - é utilizado para formatar a saída.

A sintaxe para este comando é:

printf \"formato da string\" parâmetro1 parâmetro2 …

O formato da string é semelhante ao formato utilizado na linguagem C, com algumas restrições (Só suporta valores inteiros, pois a shell faz todas as suas operações sobre valores inteiros).

Page 174: Linux - Tutoriais

SET - permite configurar as variáveis da shell. É útil como meio de usar campos nos comandos que dão como resultado valores separados por espaço.

Considere a script:

#!/bin/bash

echo A data é $(date)

set $(date)

echo O mês da data é $2

Como o resultado de executar o comando date, dá uma string (ex: Mon Jan 17:22:57 MET 1999), apenas o segundo campo (que contém o mês) é apresentado no segundo echo.

SHIFT - o comando shift retira um parâmetro aos parâmetros da script (ex: $2 torna-se o $1, o $3 torna-se o $2, etc). O shift é utilizado para pesquisar os parâmetros.

#!/bin/bash

while [ \"$1\" != \"\"]; do

echo $1

shift

done

Esta script mostra todos os parâmetros introduzidos.

Expansão de Parâmetros

Page 175: Linux - Tutoriais

A expansão de parâmetros é muito útil no manuseio de partes desses parâmetros.

Suponha que precisa de uma script que processe o ficheiro 1.tmp e o 2.tmp.

A script que estaria tentado a fazer possivelmente seria:

#!/bin/bash

for i in 1 2 do

processa $i.tmp

done

Esta script não funciona, pois o que a shell está a tentar fazer é substituir o valor da variável $i.tmp, que não existe. Para proteger a expansão da variável é necessário que o i entre { }.

A script correta é:

#!/bin/bash

for i in 1 2 do

processa ${i}.tmp

done

Em cada iteração o valor de i é substituído por ${i}.

Expansão de Parâmetros --- Descrição

${parâmetro:-valor} Se parâmetro é nulo então dá como resultado valor

${#parâmetro} Tamanho do parâmetro

${parâmetro%palavra} Do fim, remove a parte mais pequena que contenha palavra e retorna o resto.

Page 176: Linux - Tutoriais

${parâmetro%%palavra} Do fim, remove a parte mais longa que contenha palavra e retorna o resto.

${parâmetro#palavra} Do inicio, remove a parte mais pequena que contenha palavra e retorna o resto.

${parâmetro##palavra} Do inicio, remove a parte mais longa que contenha palavra e retorna o resto.

Exemplo:

#!/bin/bash

echo ${valor:-Vazio}

valor=Cheio

echo ${valor:-Vazio}

valor=/usr/bin/X11/startx

echo ${valor#*/}

echo ${valor##*/}

valor=/usr/local/etc/local/networks

echo ${valor%local*}

echo ${valor%%local*}

dá como resultado:

Vazio

Cheio

usr/bin/X11/startx

startx

/usr/local/etc

/usr/

Page 177: Linux - Tutoriais

A script seguinte muda todos os ficheiros com extensão .txt para .doc:

#!/bin/bash

for ficheiro in *.txt do

mv $ficheiro ${ficheiro%txt}doc

done

Montando um servidor de E-Mail com o qmail Uma Introdução O qmail é um poderoso servidor de e-mail, leve e muito rápido, que foi desenvolvido com o intuito de ser totalmente seguro. Desde sua última versão estável (1.03), o qmail nunca teve nenhum bug comprometedor conhecido. Isso nos faz pensar que ele é muito bom para o uso em produção, inclusive porque além de ele ser muito estável, é flexível o bastante para aguentar um tráfego de e-mails muito grande. O site do qmail é: http://www.qmail.org Vamos aprender aqui como montar um servidor de e-mail usando o qmail junto com o vpopmail. O qmail vai trabalhar com o manuseio dos e-mails, enquanto o vpopmail irá cuidar das contas dos usuários, senhas, informações, quotas, entre outros. Neste tutorial irei explicar também como utilizar o vpopmail para armazenar as informações de contas em um servidor de banco de dados, que no nosso caso será o MySQL. 1. Instalando e configurando o QMail Neste tutorial, instalaremos o qmail a partir do seu código-fonte. Existem pacotes já prontos em RPM,

Page 178: Linux - Tutoriais

DEB, etc, mas para um completo entendimento e compatibilidade entre todos os sistemas, usaremos mesmo o código-fonte. A versão que estamos usando é a 1.03, e pode ser obtida no endereço: http://www.qmail.org/qmail-1.03.tar.gz 1.1. Patches Precisaremos também aplicar alguns patches para o QMail antes de instalá-lo no sistema. Você pode instalar o QMail puro, mas eu recomendo estes patches para um aumento de desempenho e recursos. A seguir temos os patchs recomendados junto com suas descrições:

• big-concurrency (http://www.qmail.org/big-concurrency.patch): Este patch faz com que o qmail possa processar mais de 255 mensagens de uma vez no queue. Assim se a máquina for boa e com grande volume de mensagens simultâneas, o servidor poderá processá-las mais rapidamente.

• qmailqueue (http://www.qmail.org/qmailqueue-patch): Com este patch, o qmail antes de processar qualquer mensagem em seu queue, verifica a variável de ambiente QMAILQUEUE em busca do programa de queue. Com isso pode-se encaminhar as mensagens para um script (qmail-scanner por exemplo) que filtrará estas mensagens. Isso pode ser usado para repassar a mensagem para filtros de extensões, palavras e anti-virus.

• tarpit (http://www.palomine.net/qmail/tarpit.patch): O Tarpit é uma técnica anti-spam que adiciona um pequeno tempo de espera (sleep) quando o envio de e-mails passa de um certo limite. Por exemplo, se um spammer resolver mandar 1000 mensagens em uma

Page 179: Linux - Tutoriais

conexão só, o qmail com este patch verificará esta ação e a cada mensagem que o spammer mandar, você pode configurar quanto tempo ele terá que esperar. Então se configurado pra 50 mensagens, quando o spammer for mandar a mensagem 51, esperara por exemplo, 5 minutos. E depois pra mensagem 52, mais 5 minutos, e por aí vai. Tudo isso configurável.

Existem outros patches interessantes, que você pode querer usar em seu servidor de e-mail. Abaixo estão as descrições de alguns que na minha opinião são interessantes. Como estou descrevendo-os apenas para o leitor conhecer mais recursos, não os cobrirei neste tutorial. Cobrirei apenas o três patches anteriores.

• mfcheck (http://www.qmail.org/qmail-1.03-mfcheck.3.patch): Com este patch, o servidor verifica no DNS se o domínio do destinatário existe.

Agora vamos primeiro descompactar o qmail e instalar estes patches. Usaremos neste tutorial diretórios exemplo. Adapte como quiser.

mkdir /root/build cd /root/build tar zpvfx /root/download/qmail-1.03.tar.gz patch -p0 < /root/download/big-concurrency.patch patch -p0 < /root/download/qmailqueue.patch cd qmail-1.03 patch -p0 < /root/download/tarpit.patch Pronto. Agora o qmail já está descompactado e aplicamos os três patches como queríamos. Se você quiser aplicar algum outro patch, esta é a hora. Se não quiser, seguimos em frente. 1.2. Compilando e instalando o qmail

Page 180: Linux - Tutoriais

Hora de se preparar para compilar o qmail e instalá-lo. Por padrão, o qmail é instalado no diretório "/var/qmail". Você pode especificar em que diretório ele será instalado editando o arquivo "conf-qmail" dentro do diretório em que você descompactou o código-fonte do qmail. E em falar nisso, temos aqui alguns arquivos para configurar antes de compilar o programa. Aqui vai uma descrição deles:

• conf-users e conf-groups: Aqui estão os arquivos que indicam que usuários serão usados para rodar o qmail. É bom deixar o padrão mesmo, criaremos estes usuários e grupos logo a seguir.

• conf-qmail: Como dito anteriormente, o diretório onde o qmail irá ser instalado e estará funcional. Recomendo deixar este valor como "/var/qmail" mesmo, a não ser que você queira instalar em outro lugar (outra partição de disco por exemplo). Este tutorial irá usar o valor "/var/qmail", se por acaso você mudou esta configuração, substitua o "/var/qmail" pelo diretório que você configurou durante os passos deste tutorial. Uma outra boa idéia é mudar este valor para algo como /var/qmail-algumacoisa para indetificar esta instalação, e depois fazer um link simbólico como /var/qmail para manter a compatibilidade. Assim você pode compilar vários qmails diferentes, e apenas mudar o link simbólico para alterar a instalação do qmail que você fez.

• conf-spawn: Quantas mensagens poderão ser processadas de uma vez pelo qmail. Com o patch que aplicamos, o "big-concurrency", pode-se colocar o valor maior que 255. O próprio patch modificou este valor para 1000, e até que é um número bom. Mas como não queremos ter que recompilar o kernel para

Page 181: Linux - Tutoriais

suportar mais de 509 "file descriptors", colocaremos 500. Se seu servidor não tiver tantas mensagens assim, pode diminuir (deixar 240). Se tiver mensagem até demais (e o computador for bom também), pode aumentar.

• conf-split: Quantos subdiretórios o diretório de queue do qmail terá. 23 é um bom número, mas se quiser pode aumentar um pouquinho.

Depois de ajustados os arquivos ao seu gosto, é hora de criar os usuários do qmail. Como criar estes usuários está descrito no arquivo "INSTALL.ids", mas colocarei aqui também para fins didáticos:

mkdir /var/qmail groupadd nofiles useradd -g nofiles -d /var/qmail/alias alias useradd -g nofiles -d /var/qmail qmaild useradd -g nofiles -d /var/qmail qmaill useradd -g nofiles -d /var/qmail qmailp groupadd qmail useradd -g qmail -d /var/qmail qmailq useradd -g qmail -d /var/qmail qmailr useradd -g qmail -d /var/qmail qmails

Agora crie um link simbólico para refletir as configurações do qmail no diretório /etc/qmail (fica mais bonito). Para fazer isso execute o comando:

mkdir /etc/qmail ln -s /etc/qmail /var/qmail/control

Feito isso, agora iremos compilar o qmail:

make setup check

Lembre-se de que para compilar os programas no Linux, você deve ter os pacotes de desenvolvimento de

Page 182: Linux - Tutoriais

sua distribuição. Então você terá que ter eles instalados no sistema, ou a compilação nunca será feita. Em algumas distribuições mais novas (como por exemplo, o Red Hat 9.0), durante a compilação ocorre um erro com o "errno" indefinido, se isso estiver ocorrendo com você, pegue os patches para os programas usados neste tutorial no seguinte endereço: ftp://moni.csi.hu/pub/glibc-2.3.1/ E aplique os patches como os anteriores antes de compilar. Os arquivos que você precisará são os que tem "programa.errno.patch" como nome de arquivo. Depois de compilado e instalado no diretório /var/qmail, é hora de configurar. O qmail contém um script que faz uma configuração rápida. Certifique-se que sua máquina tenha um nome válido no DNS, e digite:

./config

Caso você não tenha um DNS ainda, você pode ir configurando o qmail para ser usado. Tenha em mãos o hostname e domínio de sua máquina e digite:

./config-fast nomedamaquina.dominio

Substitua o nomedamaquina e dominio pelo hostname da sua máquina. Lembre-se que se isso não for válido no DNS, você precisará ter acesso ao DNS e configurar este hostname para que o qmail funcione corretamente. 1.3. Instalando programas adicionais Agora é hora de instalar alguns programas adicionais que trabalharão junto ao qmail. Estes são: ucspi e daemontools.

Page 183: Linux - Tutoriais

• ucspi-tcp (http://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz): O ucspi-tcp é um programa feito pelo criador do qmail que substitui o inetd. Ele é usado para servir de ponte entre o cliente e o servidor.

• daemontools (http://cr.yp.to/daemontools/daemontools-0.76.tar.gz): O daemontools é um pacote com uma série de scripts para lidar com servidores (daemons). Ele é usado para o controle dos programas do qmail.

Vamos instalar os dois programas:

cd /root/build tar zpvfx /root/download/ucspi-tcp-0.88.tar.gz cd ucspi-tcp-0.88 make make setup check mkdir /package chmod 1755 /package cd /package tar zpvfx /root/download/daemontools-0.76.tar.gz cd admin/daemontools-0.76 package/install

Pronto. Os dois programas foram instalados com êxito. 1.4. Configurando a inicialização do qmail Agora vamos ter que criar uma série de scripts e procedimentos para a inicialização do qmail. Crie o arquivo /var/qmail/rc com o seguinte conteúdo:

#!/bin/sh # Using stdout for logging # Using control/defaultdelivery from qmail-local to

Page 184: Linux - Tutoriais

deliver messages by default exec env - PATH="/var/qmail/bin:$PATH" \ qmail-start "`cat /var/qmail/control/defaultdelivery`"

Depois digite os comandos:

chmod 755 /var/qmail/rc mkdir /var/log/qmail Agora precisaremos configurar qual o tipo de caixa de mensagem teremos no nosso servidor. Usaremos o Maildir, que é o formato preferido para se trabalhar com o qmail. O Maildir faz com que as mensagens sejam colocadas separadamente em diretórios, diferentemente do mbox, que é o formato padrão do UNIX. No mbox todas as mensagens ficam em um arquivo só, e quando este arquivo está muito grande, pode-se perder um pouco de desempenho. Para configurar o tipo de caixa de mensagem, é só colocar o tipo no arquivo "/var/qmail/control/defaultdelivery". Com o comando abaixo, iremos configurar com Maildir:

echo "./Maildir/" > /var/qmail/control/defaultdelivery Crie então o arquivo /var/qmail/bin/qmailctl com o seguinte conteúdo:

#!/bin/sh # description: the qmail MTA PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin export PATH QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild`

Page 185: Linux - Tutoriais

case "$1" in start) echo "Starting qmail" if svok /service/qmail-send ; then svc -u /service/qmail-send /service/qmail-send/log else echo "qmail-send supervise not running" fi if svok /service/qmail-smtpd ; then svc -u /service/qmail-smtpd /service/qmail-smtpd/log else echo "qmail-smtpd supervise not running" fi if [ -d /var/lock/subsys ]; then touch /var/lock/subsys/qmail fi ;; stop) echo "Stopping qmail..." echo " qmail-smtpd" svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo " qmail-send" svc -d /service/qmail-send /service/qmail-send/log if [ -f /var/lock/subsys/qmail ]; then rm /var/lock/subsys/qmail fi ;; stat) svstat /service/qmail-send svstat /service/qmail-send/log svstat /service/qmail-smtpd svstat /service/qmail-smtpd/log qmail-qstat ;;

Page 186: Linux - Tutoriais

doqueue|alrm|flush) echo "Flushing timeout table and sending ALRM signal to qmail-send." /var/qmail/bin/qmail-tcpok svc -a /service/qmail-send ;; queue) qmail-qstat qmail-qread ;; reload|hup) echo "Sending HUP signal to qmail-send." svc -h /service/qmail-send ;; pause) echo "Pausing qmail-send" svc -p /service/qmail-send echo "Pausing qmail-smtpd" svc -p /service/qmail-smtpd ;; cont) echo "Continuing qmail-send" svc -c /service/qmail-send echo "Continuing qmail-smtpd" svc -c /service/qmail-smtpd ;; restart) echo "Restarting qmail:" echo "* Stopping qmail-smtpd." svc -d /service/qmail-smtpd /service/qmail-smtpd/log echo "* Sending qmail-send SIGTERM and restarting." svc -t /service/qmail-send /service/qmail-send/log echo "* Restarting qmail-smtpd." svc -u /service/qmail-smtpd /service/qmail-smtpd/log ;;

Page 187: Linux - Tutoriais

cdb) tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp chmod 644 /etc/tcp.smtp.cdb echo "Reloaded /etc/tcp.smtp." ;; help) cat <<HELP stop -- stops mail service (smtp connections refused, nothing goes out) start -- starts mail service (smtp connection accepted, mail can go out) pause -- temporarily stops mail service (connections accepted, nothing leaves) cont -- continues paused mail service stat -- displays status of mail service cdb -- rebuild the tcpserver cdb file for smtp restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it doqueue -- schedules queued messages for immediate delivery reload -- sends qmail-send HUP, rereading locals and virtualdomains queue -- shows status of queue alrm -- same as doqueue flush -- same as doqueue hup -- same as reload HELP ;; *) echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}" exit 1 ;; esac

Page 188: Linux - Tutoriais

exit 0

Este script é o script de controle de inicialização do qmail. Com ele você poderá iniciar o qmail, parar, reiniciar, entre outros. Depois de criado esse arquivo com o conteúdo acima, utilize os comandos:

chmod 755 /var/qmail/bin/qmailctl ln -s /var/qmail/bin/qmailctl /usr/sbin Quando quiser colocar o qmail para ser rodado na inicialização do Linux, faça os ajustes necessários em sua distribuição para rodar o comando "/usr/sbin/qmailctl start". Agora iremos criar os scripts "supervise" do qmail:

mkdir -p /var/qmail/supervise/qmail-send/log mkdir -p /var/qmail/supervise/qmail-smtpd/log

Preencha agora os conteúdos dos arquivos: /var/qmail/supervise/qmail-send/run

#!/bin/sh exec /var/qmail/rc

/var/qmail/supervise/qmail-send/log/run

#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

/var/qmail/supervise/qmail-smtpd/run

#!/bin/sh QMAILDUID=`id -u qmaild` NOFILESGID=`id -g qmaild` MAXSMTPD=`cat /var/qmail/control/concurrencyincoming` LOCAL=`head -1 /var/qmail/control/me`

Page 189: Linux - Tutoriais

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in echo /var/qmail/supervise/qmail-smtpd/run exit 1 fi if [ ! -f /var/qmail/control/rcpthosts ]; then echo "No /var/qmail/control/rcpthosts!" echo "Refusing to start SMTP listener because it'll create an open relay" exit 1 fi exec /usr/local/bin/softlimit -m 50000000 \ /usr/local/bin/tcpserver -H -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \ -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1

/var/qmail/supervise/qmail-smtpd/log/run

#!/bin/sh exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd Execute os comandos:

echo 20 > /var/qmail/control/concurrencyincoming chmod 644 /var/qmail/control/concurrencyincoming chmod 755 /var/qmail/supervise/qmail-send/run chmod 755 /var/qmail/supervise/qmail-send/log/run chmod 755 /var/qmail/supervise/qmail-smtpd/run chmod 755 /var/qmail/supervise/qmail-smtpd/log/run mkdir -p /var/log/qmail/smtpd

Page 190: Linux - Tutoriais

chown qmaill /var/log/qmail /var/log/qmail/smtpd echo '127.:allow,RELAYCLIENT=""' >> /etc/tcp.smtp ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service

Logo após feito isso, o qmail será iniciado pelo sistema e já estará funcionando. 1.5. Configurações adicionais para o qmail 1.5.1. Relay Como configurações adicionais, veremos primeiro quem poderá usar seu servidor de e-mails para mandar e-mails pra fora. Isso se chama "relay", e é muito importante, pois impede que os spammers usem seu servidor de e-mail para mandar spams para e-mails por aí afora. Edite o arquivo /etc/tcp.smtp, nele temos a seguinte linha:

127.:allow,RELAYCLIENT=""

Essa linha diz que o IP 127.x.x.x pode utilizar o relay no seu servidor SMTP. Adicione aqui os IPs e/ou faixas de IPs que poderão utilizar o seu servidor SMTP para enviar e-mails. Como por exemplo:

192.168.1.:allow,RELAYCLIENT="" 200.165.123.223:allow,RELAYCLIENT=""

E por aí vai. Depois salve o arquivo e utilize o seguinte comando para recarregar essa configuração:

qmailctl cdb 1.5.2. Tarpit Quando fomos compilar o qmail, utilizamos o patch "tarpit", que serve para injetar uma quantidade de segundos entre certas mensagens (veja a descrição do patch para uma melhor explicação). Agora é a hora de

Page 191: Linux - Tutoriais

configurar esses valores. Existem dois arquivos aos quais teremos que criar para essa configuração:

• /var/qmail/control/tarpitcount: Quantidade de mensagens aceitas. Depois que o numero de mensagens exceder o valor configurado neste arquivo, o qmail irá esperar X segundos entre cada mensagem adicional. O X segundos está configurado no outro arquivo.

• /var/qmail/control/tarpitdelay: Quantidade de segundos que o qmail irá esperar entre as mensagens.

Então vamos usar como exemplo no nosso servidor 30 mensagens de limite, e 1 minutos entre cada mensagem adicional:

echo 30 > /var/qmail/control/tarpitcount echo 60 > /var/qmail/control/tarpitdelay

Mude os valores conforme suas necessidades e gostos. 1.5.3. Outros arquivos de configuração do qmail Vá no diretório /var/qmail/control (ou /etc/qmail) e verifique os arquivos deste diretório. Eles contém os arquivos de configuração criados pelo comando ./config (ou ./config-fast) que foi executado durante a instalação do qmail. Modifique estes arquivos se você precisar, colocando o hostname completo (isso é feito se o ./config deu certo). 2. Instalando o vpopmail Agora para cuidar das contas, iremos usar o vpopmail. O vpopmail pode ser encontrado na URL: http://www.inter7.com/vpopmail/vpopmail-5.2.1.tar.gz Baixe este arquivo e o descompacte:

cd /root/build

Page 192: Linux - Tutoriais

tar zpvfx /root/download/vpopmail-5.2.1.tar.gz

2.1. Configurando e compilando Antes de compilar, temos que saber o que configurar. Primeiro crie os usuários do vpopmail no sistema:

groupadd vchkpw useradd vpopmail -g vchkpw -d /mailhome

Repare que o /mailhome irá ser o diretório HOME do usuário vpopmail. Neste diretório estarão armazenados todos os e-mails dos usuários, então substitua esse diretório por um diretório que esteja numa partição grande. É sempre bom você criar uma partição (ou quem sabe colocar outro HD) grande para os e-mails e montar em um diretório. E foi isso que foi usado neste tutorial, uma partição montada no diretório /mailhome. No nosso tutorial iremos usar o servidor MySQL para armazenar os dados das contas. A configuração inicial do MySQL não é explicada neste tutorial. Primeiro crie um banco de dados para o vpopmail no seu servidor MySQL. Certifique-se que o servidor esteja rodando e execute o comando:

mysqladmin -u root -p create vpopmail

Depois logue-se como root no seu servidor MySQL e crie um usuário vpopmail com as permissões necessárias para o banco de dados vpopmail:

mysql -u root -p mysql mysql> GRANT ALL PRIVILEGES ON vpopmail.* TO vpopmail@localhost -> IDENTIFIED BY 'senhasecreta' WITH GRANT OPTION;

Page 193: Linux - Tutoriais

mysql> FLUSH PRIVILEGES;

Substitua "senhasecreta" pela senha do usuário vpopmail que você desejar. Veja também se você tem instalado os pacotes de desenvolvimento do MySQL, pois eles serão necessários na hora de compilar o vpopmail. Agora edite o arquivo vmysql.h e altere as seguintes linhas:

/* Edit to match your set up */ #define MYSQL_UPDATE_SERVER "localhost" #define MYSQL_UPDATE_USER "root" #define MYSQL_UPDATE_PASSWD "secret" #define MYSQL_READ_SERVER "localhost" #define MYSQL_READ_USER "root" #define MYSQL_READ_PASSWD "secret" /* End of setup section*/ Substitua o "root" e o "secret" para o usuário "vpopmail" e a senha que você escolheu. Depois disso o vpopmail já estará pronto para utilizar o MySQL como banco de informações sobre as contas de e-mail. O vpopmail inclui várias configurações na hora da compilação. Todas estas configurações são passadas ao código-fonte do programa através do script ./configure. Vou incluir aqui as descrições de algumas opções interessantes, você poderá escolher quais opções escolher, ou pode seguir o comando exato que utilizei neste tutorial (que é bom também).

• --enable-learn-passwords: Se a senha do usuário estiver vazia, da próxima vez que o usuário logar no sistema e autenticar, a senha será configurada automaticamente com o que ele tentou autenticar.

Page 194: Linux - Tutoriais

• --enable-auth-logging: Faz um log das tentativas de autenticação no servidor de banco de dados MySQL.

• --enable-mysql-logging: Faz um log detalhado das tentativas de autenticação no servidor MySQL.

• --enable-clear-passwd: Além das senhas criptografadas, coloca-se também elas em texto puro. É útil para quando o usuário esquece a senha e o administrador do sistema precisa dela. Mas não recomendado.

• --enable-default-domain: O domínio padrão do servidor.

• --enable-mysql: Utilizar o MySQL ou não. Neste tutorial o utilizamos.

• --enable-many-domains: Se sim, o vpopmail é otimizado para suportar vários dominios. Se não, é otimizado para poucos domínios com muitos e-mails.

• --enable-qmail-ext: Suporte às extensões de e-mail do qmail (recomendado).

• --enable-defaultquota: Qual o limite de espaço que cada usuário pode ter por padrão. Sem essa opção, fica sem limite. Você pode configurar isso para cada usuário separadamente depois, mas se quiser estabelecer um padrão, utilize o valor "XS" ou "XC" onde o X é substituido pela quantidade de bytes e numero de mensagens respectivamente. Por exemplo, o parâmetro "--enable-defaultquota=30000000S,2000C" significa que o limite padrão dos usuários será 30MB ou 2000 mensagens. Leia o README.quotas dentro do diretório do código-fonte do vpopmail para mais informações.

Page 195: Linux - Tutoriais

Então neste tutorial usaremos o comando:

./configure --enable-learn-passwords=y --enable-auth-logging=y \ --enable-clear-passwd=n --enable-valias=y \ --enable-mysql-logging=y --enable-mysql=y \ --enable-qmail-ext=y --enable-defaultquota=30000000S,2000C

Caso o configurador não ache as bibliotecas do MySQL, instale o pacote de desenvolvimento do MySQL (como dito acima) e aponte com o parâmetro "--enable-libdir". Por exemplo: "--enable-libdir=/usr/include/mysql". Agora é hora de compilar e instalar o vpopmail através dos comandos:

make make install-strip

Pronto! O vpopmail já está configurado e funcionando no diretório /mailhome (ou o que você escolheu). Agora é hora de criarmoso o seu primeiro domínio. Fazemos isso com o comando:

/mailhome/bin/vadddomain dominio.com.br

Digite a senha do postmaster, repita e o domínio está criado. Agora é só ir adicionando usuários neste domínio:

/mailhome/bin/vadduser [email protected] (Senha) /mailhome/bin/vadduser [email protected] (Senha) /mailhome/bin/vadduser [email protected] (Senha)

E por aí vai.

Page 196: Linux - Tutoriais

3. Instalando o Courier-IMAP Por enquanto nós configuramos o servidor de e-mail (SMTP) e suas contas. Já dá pra mandar e-mail e tudo mais. Mas e pra pegar os e-mails no servidor? Precisaremos de um servidor POP e/ou IMAP. Neste tutorial usaremos o Courier-IMAP, que é um servidor POP e IMAP especialmente feito para servidores qmail com o tipo de caixa de mensagem "Maildir". Caso você não tenha usado o formato "Maildir" na caixa de mensagem, utilize outro servidor como o próprio qmail-pop3d. O Courier-IMAP pode ser obtido na seguinte URL: http://prdownloads.sourceforge.net/courier/courier-imap-2.1.1.tar.bz2 Baixe este arquivo para o diretório /tmp. Você terá que virar um usuário comum, pois o Courier-IMAP não permite que você compile o programa com o root. Depois descompacte o programa e compile:

cd /tmp tar jpvfx courier-imap-2.1.1.tar.bz2 cd courier-imap-2.1.1 su root -c "cp /mailhome/lib/libvpopmail.a /usr/lib ; chmod 644 /usr/lib/libvpopmail.a" (Senha) ./configure --prefix=/usr --sysconfdir=/etc/courier-imap make su root -c "make install-strip; make install-configure"

Agora você terá que decidir quais os serviços que você rodará com o Courier-IMAP. Estão disponíveis: IMAP, POP3, IMAP sob SSL e POP3 sob SSL. No caso deste tutorial, usaremos o IMAP e o POP3. Primeiro logue-

Page 197: Linux - Tutoriais

se como root e copie o arquivo de inicialização para o diretório /etc/init.d:

cd /tmp/courier-imap-2.1.1 cp courier-imap.sysvinit /etc/init.d chmod 755 /etc/init.d/courier-imap Depois coloque este script na inicialização do Linux, de acordo com sua distribuição. O comando para iniciar é:

/etc/init.d/courier-imap start

Mas primeiro devemos configurar primeiro. Vá no diretório "/etc/courier-imap", e edite os arquivos "imapd" e "pop3d", mudando no final de cada arquivo:

IMAPDSTART=YES (e) POP3DSTART=YES Agora você já pode iniciar o courier-imap com o comando anterior, que os servidores de IMAP e POP3 estarão funcionando. 4. Instalando programas adicionais Certo, temos os serviços básicos para um servidor de e-mail rodar: um servidor SMTP, POP3, um banco de dados com as contas dos usuários. Temos agora que instalar novos programas e acoplá-los à nossa instalação para melhorar o nosso servidor de e-mail. Isso inclui um gerenciador de listas de discussão, filtro de e-mails, anti-virus, e por último uma interface de administração de contas do vpopmail. 4.1. Gerenciador de listas de discussão: ezmlm-idx O ezmlm-idx é uma versão extendida do ezmlm, que por sua vez é um gerenciador de listas de discussão criado pelo próprio criador do qmail para funcionar

Page 198: Linux - Tutoriais

em conjunto com o qmail. O ezmlm é um gerenciador muito bom, e muito usado. Outras alternativas ao ezmlm incluem o majordomo, mas no nosso tutorial usaremos o ezmlm-idx. O site oficial do ezmlm-idx é: http://www.ezmlm.org Você pode obter a versão 0.40 do ezmlm-idx e a versão 0.53 do ezmlm (você vai precisar dos dois), nas seguintes URLs: http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/ezmlm-idx-0.40.tar.gz http://gd.tuwien.ac.at/infosys/mail/qmail/ezmlm-patches/ezmlm-0.53.tar.gz Baixe e depois descompacte estes dois arquivos:

cd /root/build tar zpvfx /root/download/ezmlm-0.53.tar.gz tar zpvfx /root/download/ezmlm-idx-0.40.tar.gz cd ezmlm-0.53

Agora você vai precisar editar 3 arquivos, que são:

• conf-bin: Diretório onde vão ficar os binários do ezmlm. Utilize o /usr/bin

• conf-man: Diretório onde vão ficar as páginas de manual do ezmlm. Utilize o /usr/man

• conf-qmail: Caso você tenha instalado o qmail em algum lugar quie não seja o /var/qmail, modifique este arquivo, colocando nele o diretório onde você instalou o qmail. No nosso caso vai ficar como /var/qmail mesmo.

Depois de editado os arquivos, vamos aplicar o patch do ezmlm-idx antes de compilar e instalar. Para fazer isso execute os seguintes comandos:

Page 199: Linux - Tutoriais

cp -R /root/build/ezmlm-idx-0.40/* /root/build/ezmlm-0.53 (Sobrescreva todos os arquivos se precisar) patch < idx.patch echo `which crontab` > conf-cron (Isso vai colocar o executavel do crontab no arquivo conf-cron)

E antes de compilar, vamos habilitar o suporte ao MySQL já que na instalação deste tutorial estamos usando o MySQL como banco de dados para a gerencia de contas. Edite o arquivo "sub_mysql/conf-sqlcc" e o "sub_mysql/conf-sqlld". O conf-sqlcc aponta para o diretório onde estão os cabeçalhos de desenvolvimento do MySQL (mais uma vez, você precisará ter instalado o pacote de desenvolvimento do MySQL), que geralmente fica em /usr/include/mysql (ou /usr/include). Já o "conf-sqlld" aponta para o diretório onde estão as bibliotecas, que geralmente ficam em /usr/lib/mysql (ou /usr/lib). Tente essas opções caso uma ou outra não funcione. Depois compile o módulo do MySQL:

make mysql Pronto, vamos agora compilar o programa, as páginas de manual, o suporte à língua Portuguesa do Brasil:

make clean make make man make pt_BR

E assim o programa estará totalmente compilado. Como passo final, iremos configurar o servidor MySQL para o ezmlm-idx utilizar. Teremos primeiro

Page 200: Linux - Tutoriais

que criar o nosso banco de dados, o usuário ezmlm e dar as permissões:

mysqladmin -u root -p create ezmlm mysql -u root -p mysql mysql> GRANT ALL PRIVILEGES ON ezmlm.* TO ezmlm@localhost -> IDENTIFIED BY 'senhasecreta' WITH GRANT OPTION; mysql> FLUSH PRIVILEGES;

Depois na linha de comando digite:

./ezmlm-mktab -d list | mysql -uezmlm -psenhasecreta -f ezmlm Alguns erros podem ocorrer, dizendo que as tabelas não existem. Isto é normal, e este comando irá criar essas tabelas para você, e deixar o servidor MySQL pronto para o uso do ezmlm-idx. Depois disso é só instalar o ezmlm-idx no sistema através do comando:

make setup

E assim o ezmlm-idx estará totalmente instalado no seu sistema! :) 4.2. Anti-Virus Um bom servidor de e-mails sempre tem que ter um anti-virus. Nossa instalação irá suportar uma variedade de anti-virus para sistemas Linux disponíveis no mercado, tanto comerciais como livres. O Anti-virus será usado em conjunto com o qmail-scanner (Ver próxima seção). Como neste tutorial estamos usando uma solução livre, usaremos o ClamAV, que tem sua URL oficial sendo: http://clamav.elektrapro.com/

Page 201: Linux - Tutoriais

Baixe a versão mais nova. Neste tutorial, usaremos o seguinte arquivo: http://unc.dl.sourceforge.net/sourceforge/clamav/clamav-0.60.tar.gz Baixe este arquivo, descompacte e instale:

cd /root/build tar zpvfx /root/download/clamav-0.60.tar.gz cd clamav-0.60 groupadd clamav useradd clamav -g clamav -s /dev/null ./configure --prefix=/usr --sysconfdir=/etc make make install ldconfig

Agora edite o arquivo /etc/clamav.conf e vamos configurar. A seguir vai um arquivo de configuração exemplo, com as opções comentadas no próprio arquivo:

# Exemplo de configuração do ClamAV # # Arquivo de log para o clamd, muito útil para se avaliar depois o que o # clamav está fazendo. LogFile /var/log/clamav.log # Tamanho máximo do arquivo de log. Se voce estiver preocupado com seu # espaço em disco, uns 5MB está bom. Especifique o valor 0 para deixar # sem limite de tamanho máximo. LogFileMaxSize 5M

Page 202: Linux - Tutoriais

# Loga a hora para cada mensagem do log LogTime # Log mais detalhado LogVerbose # O arquivo PID contendo o identificador do processo para o servidor clamd. PidFile /var/run/clamav/clamd.pid # Diretório onde estão os arquivos .db (banco de dados de virus, entre outros) DataDirectory /usr/share/clamav # Diretório onde vai ficar o socket local de conexão com o clamd LocalSocket /var/lib/clamav/clamd # Profundidade máxima de diretórios para ser scanneado (segurança) MaxDirectoryRecursion 15 # Suporte adicional para scannear e-mails ScanMail # Scannear arquivos compactados ScanArchive # Tamanho máximo limite para scannear arquivos compactados. ArchiveMaxFileSize 30M # Limite máximo de recursividade de arquivos compactados dentro de

Page 203: Linux - Tutoriais

# arquivos compactados ArchiveMaxRecursion 5 # Número máximo de arquivos scanneados dentro de um arquivo compactado ArchiveMaxFiles 1000 # Habilitar o suporte ao Clamuko (Scanneamento em tempo real) ClamukoScanOnLine # Set access mask for Clamuko. ClamukoScanOnOpen ClamukoScanOnClose ClamukoScanOnExec # Qual o diretório que será scanneado os arquivos. Como estamos usando # num servidor de e-mail, coloque aonde os seus e-mails ficam. No nosso # caso fica em /mailhome ClamukoIncludePath /mailhome # Limite do tamanho do arquivo para ser scanneado com o Clamuko ClamukoMaxFileSize 5M # Habilitar suporte a arquivos compactados no Clamuko ClamukoScanArchive

Depois execute os comandos:

mkdir /var/run/clamav chown clamav.clamav /var/run/clamav -R freshclam

Page 204: Linux - Tutoriais

(O freshclam atualiza a base de dados do ClamAV)

Agora pra ficar mais eficiente, vamos incluir o freshclam no crontab, para que o programa seja rodado todo dia, verificando por novos bancos de dados com novos virus. Para incluir no crontab, adicione a seguinte linha ao arquivo /etc/crontab:

0 1 * * * root /usr/bin/freshclam

Agora todo dia à 1 da manhã ele vai chegar se existem atualizações no banco de dados de Virus. Caso exista, ele baixa as atualizações automaticamente para você. Em seguida crie o script /etc/init.d/clamav (ou o equivalente em sua distribuição) com o seguinte conteúdo:

#!/bin/sh # description: clamav antivirus case "$1" in start) echo -n "Iniciando o ClamAV... " /usr/sbin/clamd echo "feito." ;; stop) echo -n "Parando o ClamAV... " kill -TERM `cat /var/run/clamav/clamd.pid` echo "feito." ;; *) echo "Usage: $0 {start|stop}" exit 1 ;;

Page 205: Linux - Tutoriais

esac exit 0 Em seguinda coloque-o na inicialização do sistema (como o script do qmail). Não esqueça de tornar o script executável com o comando:

chmod 755 /etc/init.d/clamav Agora execute o clamav para ver se está tudo OK:

/etc/init.d/clamav start 4.3. Filtro de e-mails: qmail-scanner O qmail-scanner é um programa que atua como intermediador dos e-mails do servidor qmail. Com ele você pode especificar que mensagens podem passar ou não, a depender de certos critérios. Estes critérios podem ser por exemplo: barramento de extensões, scannear em programas externos (anti-virus por exemplo), assunto da mensagem, entre outros. Apesar de seu servidor de e-mail perder um pouco de desempenho por ter que scannear todas as mensagens, vale muito à pena ter essa medida de segurança adicional. A URl oficial do programa é: http://qmail-scanner.sourceforge.net/ Baixe a versão mais nova. Neste tutorial, usaremos o arquivo: http://unc.dl.sourceforge.net/sourceforge/qmail-scanner/qmail-scanner-1.20rc3.tgz O qmail-scanner vai fazer uso de um patch do qmail que aplicamos antes. É o qmailqueue-patch. Com ele, podemos especificar para o qmail redirecionar todo o fluxo de entrada de mensagens para o qmail-scanner ao invés do qmail-queue, assim o qmail-scanner pode

Page 206: Linux - Tutoriais

fazer o filtro dos e-mails e repassar para o verdadeiro qmail-queue, que faz a entrega dos e-mails nas caixas locais. O qmail-scanner vai precisar de alguns outros programinhas e códigos para satisfazer suas dependências. Estes são:

• Perl 5.005_03+ e módulos: Time::HiRes, DB_File, Sys::Syslog: http://www.cpan.org

• Maildrop 1.3.8+: http://download.sourceforge.net/courier/maildrop-1.6.0.tar.bz2

• TNEF Unpacker: http://unc.dl.sourceforge.net/sourceforge/tnef/tnef-1.2.1.tar.gz

Instale os módulos do Perl com o CPAN (O perl vem em praticamente todas as distribuições):

perl -MCPAN -e shell (Configure o CPAN de acordo com as instruções) install Time::HiRes install DB_File install Date::Parse Para quem não sabe, o CPAN é um repositório de códigos em perl. Com ele você pode instalar "módulo" Perl com a facilidade de um comando. Em termos de facilidade, é bem parecido com o famoso apt :) Os comandos acima instalam os 3 módulos do Perl requeridos pelo qmail-scanner. Além disso, ele instala também outros módulos associados à esses três e que não estejam no seu sistema. Agora vamos instalar o Maildrop:

Page 207: Linux - Tutoriais

cd /root/build tar jpvfx /root/download/maildrop-1.6.0.tar.bz2 cd maildrop-1.6.0 ./configure --prefix=/usr make make install-strip make install-man

Pronto! Maildrop instalado, agora é a vez do TNEF:

cd /root/build tar zpvfx /root/download/tnef-1.2.1.tar.gz cd tnef-1.2.1 ./configure --prefix=/usr make make install

Pronto! TNEF instalado. Agora vamos voltar ao qmail-scanner... Mas antes! O qmail-scanner rodará como root pelo perl, ou seja, ele precisará do perl com suid. Você precisará ter uma instalação do Perl-suid para o qmail-scanner funcionar. Procure pelo pacote do perl-suid em sua distribuição. (Por exemplo, no Debian você pode digitar apt-get install perl-suid).

cd /root/build tar zpvfx /root/download/qmail-scanner-1.20rc3.tgz cd qmail-scanner-1.20rc3 groupadd qscand useradd qscand -g qscand -s /dev/null ./configure --install O ./condigure irá vasculhar seu sistema pelos programas que ele precisa e por anti-virus disponíveis. Se você fez tudo certo, o resultado que aparecerá na tela será parecido com esse:

Building Qmail-Scanner 1.20rc3...

Page 208: Linux - Tutoriais

This script will search your system for the virus scanners it knows about, and will ensure that all external programs qmail-scanner-queue.pl uses are explicitly pathed for performance reasons. It will then generate qmail-scanner-queue.pl - it is up to you to install it correctly. Continue? ([Y]/N) Y /usr/bin/uudecode works as expected on system... Found tnef on your system! That means we'll be able to decode stupid M$ attachments :-) The following binaries and scanners were found on your system: mimeunpacker=/usr/bin/reformime uudecode=/usr/bin/uudecode unzip=/usr/bin/unzip tnef=/usr/bin/tnef Content/Virus Scanners installed on your System clamuko=/usr/bin/clamdscan (which means clamscan won't be used as clamdscan is better) Qmail-Scanner details. log-details=0 fix-mime=1 debug=1 notify=sender,admin redundant-scanning=no

Page 209: Linux - Tutoriais

virus-admin=root@hayama local-domains='hayama' silent-viruses='klez','bugbear','hybris','yaha','braid','nimda','tanatos','sobig','winevar','palyh','fizzer' scanners="clamuko_scanner" If that looks correct, I will now generate qmail-scanner-queue.pl for your system... Continue? ([Y]/N) Y Testing suid nature of /usr/bin/suidperl... Looks OK... Hit RETURN to create initial directory structure under /var/spool/qmailscan, and install qmail-scanner-queue.pl under /var/qmail/bin: (ENTER) perlscanner: generate new DB file from /var/spool/qmailscan/quarantine-attachments.txt perlscanner: total of 9 entries. Finished installation of initial directory structure for Qmail-Scanner under /var/spool/qmailscan and qmail-scanner-queue.pl under /var/qmail/bin. Finished. Please read README(.html) and then go over the script (/var/qmail/bin/qmail-scanner-queue.pl) to check paths/etc. "/var/qmail/bin/qmail-scanner-queue.pl -r" should return some well-known virus definitions to show that the internal perlscanner component is working. That's it! (...)

Pronto! O qmail-scanner foi instalado no sistema, e seus arquivos de banco de dados e configuração estão

Page 210: Linux - Tutoriais

disponíveis no diretório /var/spool/qmailscan. Agora aproveite para editar o arquivo "/var/spool/qmailscan/quarantine-attachments.txt" e configure o filtro de arquivos anexados. Por exemplo, adicione as seguintes linhas no final do arquivo (Nota: os espaços nas linhas não são espaços, são TABs):

.exe 0 Executable binary

.com 0 Non relocable MSDOS executable binary

.vbs 0 Visual Basic Script

.vba 0 Visual Basic Application

.shs 0 Shell automation code

.scr 0 Screen Saver

.bat 0 COMMAND.COM batch file

.btm 0 JP Software fast batch file

.reg 0 Windows Registry file

.msi 0 Executable binary

.msc 0 Executable binary

.chm 0 Compiled HTML help file

.inf 0 Windows INF file

.cpl 0 Control Panel library

.wsf 0 Windows Scripting File

.vbe 0 VisualBasic Encoded

.js 0 JavaScript

.jse 0 JavaScript Encoded

.css 0 Cascading Style Sheets

.wsh 0 Windows Scripting Host

.sct 0 Scriptlet File

.hta 0 HTML Application

.lnk 0 Windows Explorer links

.cmd 0 cmd.exe NT batch

.pif 0 Windows Program Information Files

.ade 0 Access Project Extension

.mdb 0 Access Application

.adp 0 Access Project

Page 211: Linux - Tutoriais

.mde 0 Access MDE Database

.bas 0 Visual Basic Class Module

.msp 0 Windows Installer Patch

.mst 0 Visual Test Source File

.pcd 0 Photo CD Image

.crt 0 Security Certificate

.hlp 0 Windows Help File

.url 0 Internet Shortcut (Uniform Resource Locator) .ins 0 Internet Communication Settings .isp 0 Internet Communication Settings .vb 0 Script Script File .wsc 0 Windows Script Componen .shb 0 Shell Scrap object .mp3 0 MPEG Layer 3 Sound .mp2 0 MPEG Layer 2 Sound

Todas as extensões aí listadas serão bloqueadas. Dá pra perceber como funciona, né? Toda vez que você modificar este arquivo, digite o comando:

/var/qmail/bin/qmail-scanner-queue.pl -g

Agora só falta uma última modificação: falar ao qmail para usar o qmail-scanner nos seus e-mails. Para isso usaremos o recurso do patch qmailqueue, aplicado na instalação do qmail. Para quem não lembra, este patch faz com que o qmail procure pela variável de ambiente QMAILQUEUE, e use o programa contido nessa variável para mandar os e-mails recebidos. Para configurar essa variável de ambiente, temos que editar o arquivo CDB do qmail, que no nosso caso ficou como sendo o /etc/tcp.smtp. Dei um exemplo na seção do qmail, então o mesmo exemplo será usado aqui abaixo, com as modificações para o qmail-scanner:

127.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-

Page 212: Linux - Tutoriais

queue.pl" 192.168.1.:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl" 200.165.123.223:allow,RELAYCLIENT="",QMAILQUEUE="/var/qmail/bin/qmail-scanner-queue.pl"

Assim todo e-mail será passado pro qmail-scanner. Digite o seguinte para recarregar este arquivo:

qmailctl cdb

Referências:

• Life With QMail: http://www.lifewithqmail.org

• Página do QMail: http://www.qmail.org

• Documentações de cada programa :)

Bom proveito! Recompilando o kernel do Linux A recompilação do kernel tem de ser extremamente observada... É nela que você poderá colocar suporte a muitos hardwares, habilitar recursos do kernel (como firwall e compartilhamento NAT), entre outras coisas. Muitas distribuições incluem kernels já compilados e prontos para usar, mas é sempre recomendado que você compile o seu kernel para otimizá-lo conforme suas necessidades, e para aprender também! Vou explicar aqui, passo-a-passo, como se dá o processo de recompilação do kernel. Lembrando que toda operação deverá ser feita com o root. Passo 1

# cd /usr/src # rm -rf linux # tar zpvfx /diretorio/linux-2.x.x.tar.gz

Page 213: Linux - Tutoriais

# ln -s linux-2.x.x linux # cd linux

O que fizemos aqui foi somente apagar o código do kernel velho, para instalar um novo. Isso você só faz se estiver compilando um kernel novo que pegou na internet. Os códigos-fontes do kernel em suas várias versões podem ser todos encontrados através do endereço ftp://ftp.kernel.org (é preferível que você utilize o mirror deste FTP localizado aqui no Brasil, que é ftp://ftp.br.kernel.org). Veja também que eu apaguei o kernel antigo (rm -rf linux), se você quiser pode apenas renomear o diretório para outro nome, assim nào perde o código velho. Pode acontecer de você pegar kernels compactados com .bz2, veja a seção de "Outros comandos" para obter uma ajuda mais ampla para descompactar isto. Alguns arquivos quando descompactados, já criam o diretório 'linux', então não é preciso você ter de fazer o link simbólico (comando 'ln -s linux-2.x.x linux'). Passo 2

# make menuconfig # make dep # make clean # make bzImage # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.x.x

No 'make menuconfig', você vai escolher as opções de suporte. Esta parte é com você, pois você é que vai escolher o que quer. Tem muitas e muitas opções que você poderá não saber... Você pode ler o help destas opções, ou simplesmente deixá-las como estão. Configuração do kernel é uma coisa que você se acostuma com o tempo, praticando :) O 'make

Page 214: Linux - Tutoriais

menuconfig' gera um menu gráfico no console, você pode substituir este comando por outros, que são: 'make config' (modo terminal, sem gráficos, vai perguntando opção por opção e não é recomendado) e 'make xconfig' (modo gráfico com janelas, só roda no X-Window). O 'make dep' cria as dependências que a compilação do kernel vai usar. O 'make clean' apaga arquivos que já estão compilados, para poder compilá-los de novo. O 'make bzImage' vai criar uma imagem do kernel compactada com o bzip2 (que é mais eficiente que o gzip). O recomendável é você usar o bzImage, mas você também pode usar o 'make zImage', que cria uma imagem compactada com gzip, ou pode usar o 'make zdisk', que faz a imagem e cria um disco de boot, ou pode usar 'make zlilo', que faz a imagem e reinstala o LILO). O 'cp /usr/src/linux/arch/i386/boot/zImage /boot/vmlinuz-2.x.x' copia a imagem para o diretório /boot, com o nome de vmlinuz-2.x.x. Substitua o .x.x pela versão do seu kernel. Esta informação será útil quando você for configurar o LILO para bootar com essa nova imagem. Veja a configuração do LILO ou do GRUB também. Passo 3

# make modules # make modules_install # lilo # reboot

O 'make modules' cria os módulos que você configurou no 'make menuconfig', e o 'make modules_install' instala estes módulos compilados no diretório /lib/modules. O 'lilo' reinstala o LILO, para obter mais

Page 215: Linux - Tutoriais

detalhes, veja sobre a configuração do LILO, e só utilize este comando se você estive rodando o lilo e não o GRUB (geralmente quando se está usando o GRUB, o arquivo "/etc/lilo.conf" não existe ou está vazio. E por último, o 'reboot', que reseta a máquina para que seu kernel novo funcione. Se você usa GRUB, não se esqueça de alterar o arquivo "/boot/grub/menu.lst" e adicione na opção 'kernel' o caminho da sua imagem do kernel recém-criada. No caso do GRUB, não é preciso executar nenhum comando, é só salvar o arquivo que as configurações estarão feitas. A recompilação do kernel é a única coisa no Linux que necessita reiniciar a máquina! Passo alternativo As instruções acima foram para a compilação de um upgrade do kernel. Se você quiser recompilar o kernel somente para adicionar e/ou retirar coisas, você vai ao diretório '/usr/src/linux' e executa o passo 2. Reparticionamento livre 1. Particionamento Esta é uma das mais difíceis tarefas, que impedem e confudem vários iniciantes do Linux! Sem dúvida, esta é a etapa mais difícil de qualquer instalação, todo mundo diz que o Linux é dificil de instalar justamente por causa disto. Mas pense bem, imagine que um computador venha pronto para instalar o Linux, será difícil? Não, será que nem o Windows, e do jeito que os tipos de instalação estão ficando cada vez mais fáceis... 2. Reparticionamento com o fdisk

Page 216: Linux - Tutoriais

Legal, mas vamos aprender a mecher então no fdisk do Linux, que é onde criaremos nossas partições :) Antes de mais nada, fique sabendo que você tem que ter o HD com espaco livre (não espaço livre numa partição, e sim espaço livre para criar uma partição). Tem gente que opta em formatar o HD, mas como não é todo mundo que gosta disso, tentem usar o FIPS, que deixará espaço livre para você criar outras partições, sem ter de formatar o HD. Funciona, eu já vi funcionar. Se você não tiver um sistema DOS/Windows, então você pode usar o programa GNU Parted para fazer o particionamento do disco sem ter que perder os dados dele. Também funciona porque eu já tentei aqui na minha própria máquina. Algumas distribuições atuais já incluem na sua instalação uma interface automática para reparticionar o disco com esse programa... Então se for o caso de você usar uma distribuição que tenha este recurso, não será necessário você ter que particionar seu disco como descrito aqui nesta seção. Aqui estão os endereços para os programas de reparticionamento:

• GNU Parted - http://www.gnu.org/software/parted/ • FIPS - ftp://ftp.debian.org/debian/tools/

Antes de tentar qualquer coisa desesperadamente, certifique-se de que sabe o que você vai fazer, e sempre pense duas vezes antes de fazer qualquer coisa. Se você tem dúvidas em relação a particionamento, e quer ter a certeza que não vai perder nenhum dado, o ideal seria você fazer um backup dos seus arquivos. Então vamos, mãos à obra. Você deve estar no simples prompt do Linux... Nas instalações você pode ser presenteado com uma shell, onde você poderá rodar o fdisk. Se você

Page 217: Linux - Tutoriais

tiver numa interface gráfica ou coisa assim, experimente apertar CTRL+ALT+F2, provavelmente você irá para o prompt. Primeiro entenda o seguinte: /dev/hda - IDE Primária Master /dev/hdb - IDE Primária Slave /dev/hdc - IDE Secundária Master /dev/hdd - IDE Secundária Slave Fazemos de conta que aqui eu não tenho o Linux instalado, e pretendo instalar ele no segundo HD da minha máquina. Tenho 2 HDs, um para o sistema Windows (/dev/hda) e outro para o Linux (/dev/hdb). O que eu vou particionar com o fdisk é apenas o segundo HD, que é o /dev/hdb, então eu executo o fdisk assim:

fdisk /dev/hdb

Você irá ser presentiado com um prompt. Neste prompt você poderá digitar algumas letras que vão corresponder a comandos... Como primeiro comando, vamos ver a mensagem de ajuda. Digite "m", e uma mensagem com informações de uso vai aparecer. Os seguintes outros comandos estão disponíveis:

Comando Ação

a Muda a partição ativa (bootável)

b Edita o disklabel do bsd

c Muda o sinal de compatibilidade do DOS

d Deleta uma partição

l Lista os tipos de partições conhecidas

m Mostra a mensagem de ajuda n Adiciona uma nova partição

Page 218: Linux - Tutoriais

p Mostra a tabela de partições atuais

q Sai sem salvar as mudanças t Muda o tipo de partição

u Muda as unidades de entrada/saída

v Verifica a tabela de partições

w Aplica as alterações e sai do programa

x Outras opções

Vamos começar a mexer com as opções do fdisk. Como vamos mexer com o o HD, temos que saber primeiro se ele está vazio... Para fazer isso você usa o comando "p" para ver a tabela de partições atual:

Command (m for help): p Disk /dev/hdb: 64 heads, 63 sectors, 526 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System Aqui no caso não apareceu nenhuma listagem de partição, então isto quer dizer que o HD está vazio e pronto para se criar partições! Mas se por exemplo, existisse uma partição já criada neste HD, como ficaria? Vejamos:

Command (m for help): p Disk /dev/hdb: 64 heads, 63 sectors, 526 cylinders Units = cylinders of 4032 * 512 bytes

Page 219: Linux - Tutoriais

Device Boot Begin Start End Blocks Id System /dev/hdb1 1 1 526 1060384+ b Win95 FAT32

Aí então apareceu uma partição FAT32, e como eu não quero essa coisa, vou deletá-la para deixar o HD sem partições! :) Repare que é a partição 1, porque vem o número 1 depois de /dev/hdb, ficando /dev/hdb1. Então iremos agora deletar a partição 1:

Command (m for help): d Partition number (1-4): 1

Pronto, a partição foi deletada. Como eu vou querer instalar o Linux sozinho, crio as partições Linux Native e Linux Swap. Eu tenho um HD de 1gb, e vou colocar 950MB para o Linux Native e 50MB para Swap:

Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-526): 1 Last cylinder or +size or +sizeM or +sizeK ([1]-526): +950M Command (m for help): p Disk /dev/hdb: 64 heads, 63 sectors, 526 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hdb1 1 1 483 973696+ 83

Page 220: Linux - Tutoriais

Linux native Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 First cylinder (484-526): 484 Last cylinder or +size or +sizeM or +sizeK ([484]-526): 526 Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): 82 Changed system type of partition 2 to 82 (Linux swap) Command (m for help): p Disk /dev/hdb: 64 heads, 63 sectors, 526 cylinders Units = cylinders of 4032 * 512 bytes Device Boot Begin Start End Blocks Id System /dev/hdb1 1 1 483 973696+ 83 Linux native /dev/hdb2 484 484 526 86688 82 Linux swap Command (m for help):

Viu como não é tão difícil? Como último comando acima, eu primeiro criei duas partições com tamanhos variados. Uma dessas partições vai ser a swap, então tenho que mudar o tipo (id) dela... Para isso executei o

Page 221: Linux - Tutoriais

"t" e coloquei o valor 82 para a partição 2 (/dev/hdb2). Como resultado deste processo todo... podemos ver a ultima mostragem do comando "p"... Perfeito! Agora só precisamos salvar a configuração, e só assim o fdisk irá fazer o particionamento de verdade. Para isso use o "w" e boa sorte :) Com isso seu HD estará preparado para abrigar uma distribuição Linux. Saindo um pouco do fdisk, vamos ver agora como funciona o GNU Parted e o FIPS. Estes dois programas serão úteis para você não perder os seus queridos dados, como seus vídeos de Anime e suas musiquinhas em mp3 :D 3. Reparticionamento com o GNU Parted O GNU Parted é um programa muito bom para reparticionar o seu HD sem perder os dados. Ele é um programa totalmente feito para o Linux, ou seja, você só poderá rodá-lo se tiver um Linux. Então você pergunta... Se eu quero particionar o meu HD para instalar o Linux, como vou fazer isso com esse programa? Sim, existe um jeito bem simples de você usar o GNU Parted sem ter instalado o Linux em sua máquina. Para fazer isso você precisará de um disquete, e alguns utilitários. Com isso iremos criar um bootdisk que vai conter o GNU Parted para você usar à vontade! Se você já tiver Linux, não precisa criar um bootdisk... :) Você precisará de dois arquivos para criar o bootdisk:

• Rawrite - ftp://ftp.debian.org/debian/tools/rawrite2.zip • Imagem do disco - ftp://ftp.gnu.org/gnu/parted/bootdisk/partboot.img

Page 222: Linux - Tutoriais

O Rawrite é um programa que cria bootdisks a partir de imagens. Então para criar a bootdisk, a imagem (segundo arquivo) é o necessário. Essa imagem contém um Linux bem compacto, com o GNU Parted contido nele. No DOS, descompacta o Rawrite em um diretório e coloca a imagem neste mesmo diretório e executa o comando:

rawrite partboot.img a: Ou você pode digitar rawrite apenas, e ele vai te pedir a imagem e depois aonde escrever a imagem. Então você coloca os dois parâmetros (partboot.img que é a origem, e a: que é o destino). Espere um pouco e o bootdisk está pronto para ser criado e utilizado. Para criar este bootdisk no Linux, você só precisará da imagem, então é só utilizar o comando:

dd if=partboot.img of=/dev/fd0 bs=1440k Para utilizar o bootdisk, reinicie a máquina, coloque o disquete no driver e espere o boot (o boot por disquete tem de estar habilitado na BIOS claro). Você irá cair no prompt do Linux, podendo usar o GNU Parted à vontade. Vou explicar agora como usar o GNU Parted direitinho. Primeiro de tudo, você tem de executar o parted em um HD. No exemplo anterior (do fdisk), estávamos usando o /dev/hdb, então aqui vai ser a mesma coisa:

parted /dev/hdb

Você será presenteado com um prompt. Digite print para obter a tabela de partições atual do seu HD. Vamos usar aqui um exemplo que bate com a maioria dos casos:

(parted) print Disk geometry for /dev/hdb: 0.000-2457.984 megabytes

Page 223: Linux - Tutoriais

Disk label type: msdos Minor Start End Type Filesystem Flags 1 0.031 2457.000 primary FAT boot Aqui eu tenho uma partição de 2.5GB. Os dados fornecidos pelo comando print estão todos em MB... O que você terá de fazer aqui é redimensionar esta partição, para deixar um espaço livre para Linux. Antes de redimensionar certifique-se de que sabe o que está fazendo, e de que o espaço livre tenha o tamanho da partição que você quer criar (é meio impossível você criar uma partição sem espaço em disco disponível né? :)). Vamos supor que eu quero criar uma partição de 1.5GB, faço assim:

(parted) resize 1 0.031 1000

O programa irá mecher com seu HD como se estivesse esbagaçando ele todinho, mas o que ele está fazendo é redimensionando a partição, mexendo nos dados e checkando tudo para que se houver algum crash, possa se recuperar alguma coisa depois. O comando "resize" já diz tudo, redimensiona a partição. O primeiro parâmetro, o "1" corresponde ao número da partição (Minor), que foi mostrado com o comando "print". O segundo e terceiro parâmetro são respectivamente o início e o fim em Megabytes da partição que vai ser redimensionada, no exemplo, a partição ia de 0 até 2500, então diminuímos ela para de 0 até 1000, deixando 1500 Megabytes livres para criar outras partições. Feito com sucesso essa modificação da tabela de partições do HD, saia com o comando "quit", e manuseie normalmente o seu HD com o programa fdisk (criação de partições Linux, definições como Linux Native e Swap, etc). Por que usar o fdisk? Questão de gosto :)

Page 224: Linux - Tutoriais

4. Reparticionamento com o FIPS Se você não pode usar o fdisk, e não quer usar o GNU Parted para reparticionar sem perder dados, o FIPS é uma boa alternativa para fazer isso. O FIPS é um programa para DOS, então é o oposto ao GNU Parted: só roda em DOS, e não em Linux. O FIPS foi e ainda é bem usado para fazer a tarefa de repartição do HD. Mostrarei a seguir os passos básicos para você redimensionar uma partição Windows, seguindo o mesmo escopo dos exemplos anteriores. Antes de mais nada, você terá que desfragmentar o seu disco todo. No Windows e no DOS isto é feito com o programa defrag, que move os arquivos para o começo do HD, organizando e deixando o final livre. O FIPS requer que o final do HD fique livre, assim ele pode dividir a partição sem mexer com nenhum dado. Outra coisa muito importante: crie um disco de boot do Windows e coloque dentro dele também o fips.exe. Então boote com este bootdisk que você criou e execute o fips:

a:\fips.exe

Depois disso, algumas informações irão ser mostradas, como por exemplo a tabela de partições e os informações sobre o setor de boot, como no exemplo a seguir:

Partition table: | | Start | | End | Start |Number of| Part.|bootable|Head Cyl. Sector|System|Head Cyl. Sector| Sector |Sectors | MB -----+--------+----------------+------+----------------+--------+---------+----

Page 225: Linux - Tutoriais

1 | yes | 1 0 1| 0Ch| 127 783 63| 63| 6330177|3090 2 | no | 0 0 0| 00h| 0 0 0| 0| 0| 0 3 | no | 0 0 0| 00h| 0 0 0| 0| 0| 0 4 | no | 0 0 0| 00h| 0 0 0| 0| 0| 0 Boot sector: Bytes per sector: 512 Sectors per cluster: 8 Reserved sectors: 32 Number of FATs: 2 Number of rootdirectory entries: 0 Number of sectors (short): 0 Media descriptor byte: F8h Sectors per FAT: 6176 Sectors per track: 63 Drive heads: 128 Hidden sectors: 63 Number of sectors (long): 6330177 Physical drive number: 80h Signature: 29h Checking boot sector ... OK Checking FAT ...

Na mensagem "Checking FAT...", o programa está checkando o seu sistema de arquivos DOS para ver se ele vai poder fazer o redimensionamento da partição. Se por exemplo você não tiver o último cilindro da partição livre (isso porque você não deve ter executado o defrag para colocar tudo no começo), então o

Page 226: Linux - Tutoriais

programa diz que não pode criar partição e sai. Se tudo ocorrer bem, você já poderá especificar qual o tamanho para ser redimensionado. Escolha o tamanho da sua nova partição movendo as dimensões dos cilindros com os cursores (setas do teclado). Depois de tudo ajeitado conforme as suas necessidades, aperte enter para continuar. O programa irá checkar novamente por cilindros livres e depois vai recalcular os dados da tabela de partições do HD, mostrando as novas configurações. Apertando C agora, ele vai fazer mais verificações e finalmente irá perguntar se você deseja continuar. Apertando Y você confirma, ele cria a nova partição, salva, e sai do programa. Esta nova partição criada é uma partição primária DOS, então você terá de ir ao fdisk do Linux (através de um bootdisk por exemplo), excluir essa nova partição criada e criar novas para o Linux, como descrito anteriormente. É o mesmo esquema de depois da redimensionamento da partição com o GNU Parted, e não deve apresentar muitas dificuldades. 5. Ufa! Finalmente tudo está criado e pronto para se instalar Linux. Só para finalizar o assunto de partições, vamos falar sobre os sistemas de arquivos suportados pelos redimensionadores (GNU Parted e FIPS). O FIPS apenas suporta redimensionamento de partições do tipo DOS (fat), sendo impossível dividir uma partição Linux (ext2). Já o GNU Parted suporta partições DOS (fat) e Linux (swap e ext2). No Linux também é possível usar o sistema de arquivos ReiserFS, e para redimensionar este tipo de partição, há um utilitário próprio chamado reiserfs resizer, que vem junto com o pacote ReiserFS. Se você tiver uma partição ReiserFS

Page 227: Linux - Tutoriais

o pacote pode ser obtido através do endereço: http://devlinux.com/projects/reiserfs. E qualquer dúvida sobre o partições, e o uso de destes programas, você deve recorrer à algumas documentações disponíveis:

• Partition mini-HOWTO: http://www.linuxdoc.org/HOWTO/mini/Partition.html • GNU Parted User Guide: http://www.gnu.org/software/parted/USER • Manpage do fdisk: man fdisk • Documentação do FIPS (vem incluso com o fips20.zip)

Gerando relatórios do Squid com o SARG O SARG (Squid Analysis Report Generator) é uma ferramenta muito boa desenvolvida por um brasileiro que permite à você ver para "onde" seus usuários estão indo na Internet através da análise do arquivo de log "access.log" do famoso proxy Squid. O poder da ferramenta é incrível, ele pode dizer para você quais usuários acessaram quais sites, em que horas, quantos bytes foram baixados, quantas conexões foram feitas, relatórios de sites mais acessados, usuários que mais acessam, relatório de sites negados, falha de autenticação, entre outros. A gerência que você pode obter com isso é muito boa, principalmente para as empresas que querem economizar o uso da Internet. Vamos aqui instalar e configurar o SARG para ele gerar relatórios diários de acesso do Squid. Para isso precisaremos de um Squid já configurado e rodando (o que não vou cobrir neste tutorial em si), que gere os logs de acesso no arquivo access.log. Se você

Page 228: Linux - Tutoriais

desconhece isso, vá ao arquivo de configuração do Squid e veja se existe a linha abaixo. Se não existir, adicione:

cache_access_log /var/log/squid/access.log

Geralmente o arquivo de configuração do Squid está em "/etc/squid/squid.conf". A linha acima especifica que o arquivo de log deverá estar em "/var/log/squid/access.log", lembre-se disso para posteriormente informarmos ao SARG. Se você teve que adicionar essa linha no Squid, reinicie-o (ou de um 'reload' no serviço) para que as mudanças sejam efetivadas. Agora vamos ao que interessa. Você precisará baixar o SARG através do endereço:

• SARG - http://web.onda.com.br/orso/

No caso deste tutorial, peguei o codigo-fonte da versão 1.2.2. Você poderá notar também que há links para pacotes pré-compilados, e caso você tenha uma distribuição suportada, você pode pegar os pacotes e instalar através do gerenciador de pacotes. Mas como peguei o código-fonte, vamos compilar o programa:

# tar zpfx sarg-1.2.2.tar.gz # cd sarg-1.2.2 # ./configure --enable-sysconfdir=/etc/sarg [...configurando a compilação...] # make [...compilando...] # make install

Page 229: Linux - Tutoriais

Fiz o procedimento como root porque quis, na verdade o root só é requerido no passo "make install", porque ele instala o programa "sarg" no /usr/bin e o diretório de configuração em "/etc/sarg". Isso tudo pode ser escolhido através do comando "./configure", e para você saber de suas opções, digite "./configure --help". Agora que o programa foi compilado e instalado, precisaremos configurar para ele rodar. Escolhemos na compilação o diretório /etc/sarg para armazenar os arquivos de configuração, então vamos agora trabalhar nele.

# pwd /etc/sarg # ls exclude_codes languages/ sarg.conf

Veja quais os arquivos padrões que ele cria. Como nossa instalação vai ser um pouco mais complexa, teremos de criar alguns arquivos mais, e organizar os já existentes:

# mv sarg.conf default.conf # touch exclude.hosts # touch exclude.strings # touch exclude.users # ls default.conf exclude.hosts exclude.users exclude_codes exclude.strings languages/

Uma breve explicação sobre os arquivos que criamos:

• exclude.hosts - Aqui cada linha terá um domínio/URL que não será mostrada no relatório. Útil para você colocar, por exemplos, endereços de download da Intranet que passam pelo Squid, mas não gastam banda de Internet nenhuma.

Page 230: Linux - Tutoriais

• exclude.strings - Se alguma linha do arquivo de log conter uma das strings deste arquivo (cada string por linha), esta linha do log será ignorada do relatório. Com isso você pode filtrar qualquer coisa do relatório. • exclude.users - Os usuários que estiverem neste arquivo (separados por linha) não serão incluídos no relatório.

Agora vamos ter que criar um arquivo de configuração para o SARG. Como eu disse anteriormente, este arquivo de configuração será para um relatório diário. Colocaremos essa configuração no arquivo "/etc/sarg/sarg-dia.conf". Abaixo segue um arquivo de configuração comentado, para posterior análise:

# Relatório Squid por: Dia # Língua Utilizada, coloquei em inglês aqui, mas será tudo em português # do Brasil, veja o porquê depois. language English # Arquivo de LOG do Squid, lembra? Na sua configuração do Squid tem # falando onde se encontra este arquivo. access_log /var/log/squid/access.log # Título da página HTML title "Relatório Diário do Proxy" # --- Visual --- # Aqui tem várias variáveis que você pode mudar para deixar o # visual do relatório (cores, fontes, etc) de acordo com o que

Page 231: Linux - Tutoriais

# você quiser. Aqui estou usando os valores padrões. font_face Arial header_color darkblue header_bgcolor blanchedalmond header_font_size -1 background_color white text_color black text_bgcolor beige title_color green #--- Fim do Visual --- # Diretório Temporário temporary_dir /tmp # Diretório de Saída para as página de relatório, ou seja, # onde o relatório vai ficar para consulta via um navegador. # "Geralmente" esse diretório tem que estar dentro do root do seu # servidor Web :D output_dir /var/www/html/squid-report/dia # Qual critério de ordem para a seção "TopUser?" USER/CONNECT/BYTES/TIME # Isso irá organizar o relatório na seção de TopUsers, colocando os usuários # que mais baixaram bytes primeiro. topuser_sort_field BYTES reverse # Qual critério de ordem para a seção "User"? SITE/CONNECT/BYTES/TIME # Isso irá organizar a seção de usuários da mesma forma que o item anterior. user_sort_field BYTES reverse

Page 232: Linux - Tutoriais

# Arquivo com usuários que não devem estar nos relatórios exclude_users /etc/sarg/exclude.users # Arquivo com hosts que não devem estar nos relatórios exclude_hosts /etc/sarg/exclude.hosts # Formato da data (e=dd/mm/yy, u=mm/dd/yy, w=yy/ww) date_format e # Limite de logs até os antigos serem removidos, quando houver mais # de N relatórios, o mais antigo é automaticamente removido. Aqui # estamos indicando para nunca apagar nada. lastlog 0 # Remover arquivos temporários após o uso? remove_temp_files yes # Gerar o index.html? (only = gera só o index.html principal) index yes # Sobrescrever o relatório se já existe? overwrite_report yes # O que fazer com registros sem usuário? (ignore/ip/everybody) records_without_userid ignore # Usar vírgula ao invés de ponto?

Page 233: Linux - Tutoriais

use_comma no # Qual a quantidade de sites mais visitados à listar? topsites_num 100 # Qual critério de ordem para o topsites? CONNECT/BYTES A/D # Aqui diz para ordenar os sites mais acessados por utilização de banda, # em forma decrescente. topsites_sort_order BYTES D # Arquivo de códigos HTTP para serem ignorados no relatório exclude_codes /etc/sarg/exclude_codes # Tempo de checkagem max_elapsed 28800000 # -- Tipo de Relatorio a ser gerado -- # + topsites - Mostra o site, conexão e bytes # + sites_users - Mostra que usuários estavam acessando um site # + users_sites - Mostra sites acessados pelo usuário # + date_time - Mostra quantidade de bytes usados por dia e hora # + denied - Mostra todos os sites negados com URL completa # + auth_failures - Mostra falhas de autentificação report_typie topsites users_sites sites_users date_time denied auth_failures site_user_time_date # Exibir URLs completas? (Não recomendado) long_url no

Page 234: Linux - Tutoriais

# Se alguma linha do access.log conter uma das strings, será ignorada exclude_string /etc/sarg/exclude.strings # Mostrar mensagem de sucesso na geração do relatório no fim? show_successful_message no # Campos para a seçao topusers topuser_fields NUM DATE_TIME USERID CONNECT BYTES %BYTES IN-CACHE-OUT USED_TIME MILISEC %TIME TOTAL AVERAGE # Quantidade de usuários para listar no relatório topsites topuser_num 0 O arquivo de configuração em si já explica as configurações para você alterar. Mas também há mais opções disponíveis no programa, você pode ver explicações sobre estas novas configurações no arquivo padrão de configuração, que deixamos como "/etc/sarg/default.conf". Sobre a língua utilizada, eu verifiquei um erro que aconteceu comigo, então fiz uma solução simples e rápida pra isso. O que acontece é que mesmo mudando a variável language, o programa fica gerando relatórios em Inglês. Se acontecer isso com você, faça o seguinte:

# cd /etc/sarg/languages # mv English English.old # ln -s Portuguese English

Page 235: Linux - Tutoriais

O que fiz aqui foi fazer um link simbólico do English para o Portuguese, para que o programa pegue o conteúdo do arquivo Portuguese e não do English original. Repare que eu também fiz um backup do arquivo English, e lembre-se sempre disso: faça sempre backups! Tente nunca apagar algo. Existe também outro erro em relação à isto, só que este é mais sério. O arquivo de tradução "Portuguese" está incompleto, e por isso ele não gera os links para os relatórios de falhas de autenticação e de sites mais acessados. Para consertar isso, edite o arquivo "/etc/sarg/languages/Portuguese" e adicione as seguintes linhas no final do arquivo:

"Negado" "Topsites"

Assim a tradução não irá faltar, e os links estarão bonitinhos no lugar :) Mas agora falta rodar o programa para gerar o nosso relatório! Vamos supor que hoje seja o dia 05/02/2003 (epa, essa é a data em que estou escrevendo isso :P) e você queira gerar o que até agora acessaram no seu proxy. Execute isto:

# /usr/sbin/sarg -f /etc/sarg/sarg-dia.conf -d 05/02/2003-05/02/2003

E espere... Dependendo da quantidade de acessos ao seu proxy, e o tamanho do arquivo de log, o processo poderá demorar. Quando terminar, acesse o diretório que você configurou o "output" no seu servidor Web para ver o relatório na íntegra. Mas e agora, teremos que ficar rodando este comando todo dia pra ficar gerando? Não! :P Para isso que serve o crontab, vamos configurá-lo para rodar este comando todo dia às 01:01 da manhã.

Page 236: Linux - Tutoriais

Nota: Várias distribuições já vem com um crontab diário configurado. Ou seja, todos os arquivos executáveis que estiverem dentro do diretório "/etc/cron.daily" serão executados em um certo horário (geralmente 4 da manhã de todo dia). Se sua distribuição tiver este diretório, crie o arquivo "/etc/cron.daily/sarg-dia". Caso ela não tenha, crie um arquivo chamado "/usr/local/bin/sarg-dia". Coloque o seguinte conteúdo em um desses arquivos:

#!/bin/bash HOJE=$(date --date "1 day ago" +%d/%m/%Y) /usr/sbin/sarg -f /etc/sarg/sarg-dia.conf -d $HOJE-$HOJE exit 0 Se o seu caso foi de criar o arquivo "/usr/local/bin/sarg-dia", então você terá que configurar também o crontab para rodar este programa às 01:01 da manhã como dissemos. Adicione a seguinte linha no arquivo "/etc/crontab":

01 1 * * * root /usr/local/bin/sarg-dia

E não se esqueça de dar permissão de executável para o script que criamos:

# chmod +x /usr/local/bin/sarg-dia (ou) # chmod +x /etc/cron.daily/sarg-dia

Pronto. Com isso o crontab irá rodar o nosso script todo dia de madrugada. Para quem não entendeu o script, ele primeiro pega a data de 1 dia antes e coloca no formato DIA/MES/ANO, como queríamos para

Page 237: Linux - Tutoriais

passar pro SARG, então ele chama e gera o relatório do dia anterior... Legal não? Para cada dia, o SARG gera um diretório diferente, especificado por data. Experimente gerar os relatórios e verificar no diretório de saída (output), vai aparecer algo como:

# ls 01Feb2003-01Feb2003 03Feb2003-03Feb2003 index.html 02Feb2003-02Feb2003 04Feb2003-04Feb2003 Pronto! Você já pode ser um usuário feliz deste excelente gerador de relatórios :) Se você entendeu direitinho este tutorial, verá que é fácil fazer também relatórios semanais e mensais através dos scripts e crontab. Mas aí vai de exercício pra você. Aviso: Os relatórios geram muitas páginas, e dependendo do relatório, pode gastar muito e muito espaço em disco, então tome cuidado. Por exemplo, aqui o dia 03 de Fevereiro deu 103MB de relatório. Mas ao compactar este diretório para .tar.bz2, consegui reduzir para 1.2MB :) Faça os relatórios, compacte-os, vá juntando e gravando em um CD, assim você poderá ter um histórico completo de quem acessou o que durante uma certa época. Boa sorte! Montando estatísticas com o Webalizer 1. Introdução O Webalizer é uma poderosa ferramenta escrita em C que analisa os logs do seu servidor de páginas Apache e gera páginas de estatísticas completa, incluindo os correspondetes gráficos. Por ser escrita em C, possui uma velocidade fantástica, analisando milhares de

Page 238: Linux - Tutoriais

linhas de log em segundos. Retirado do seu site: "Em uma máquina Pentium 200, mais de 10 mil linhas podem ser processadas em 1 segundo, e um arquivo de 40MB sendo alisado em 15 segundos (mais de 150.000 linhas)." Então dá para perceber que ele é bem rápido né? Além disso, ele suporta diferentes tipos de arquivos de log, incluindo o formato Comum do Apache, o Formato Combinado, e suporte aos formatos de log do wu-ftpd (xferlog) e do squid. Está disponíveis em diversas línguas, incluindo o Português do Brasil. Além de ser Software Livre, claro. Só vemos vantagens neste programa, e é para isso que criei este tutorial, para ajudar a quem precisar usá-lo para montar estatísticas de seu servidor. 2. Download e Instalação O Download do código-fonte do programa pode ser feito através do endereço: http://www.mrunix.net/webalizer/download.html (Código-fonte e alguns binários) http://www.megaloman.com/~hany/RPM/webalizer.html (Pacotes RPM) Ou se você preferir, e sua distribuição suportar, utilize um "apt-get install webalizer" para instalar o pacote. Se você pegou o código-fonte e não um pacote já pronto (eu recomendo para organização pegar um pacote RPM/DEB já pronto, ou utilizar o apt-get), então execute os seguintes comandos para compilar o código-fonte: ./configure make make install

Page 239: Linux - Tutoriais

Assim o programa será instalado no seu sistema. Por padrão, se você não especificar as opções através do ./configure, ele vai instalar os arquivos dentro do diretório /usr/local (os binários no /usr/local/bin, configuração em /usr/local/etc, entre outros), então eu recomendo você especificar as opções de diretório de instalação (--prefix) no ./configure. Para saber as opções disponíveis para compilação, utilize o comando "./configure --help". 3. Configuração Agora teremos que configurar o webalizer, criando um arquivo de configuração. Para cada estatística de site, é necessário um arquivo de configuração. Então primeiro crie um diretório chamado /etc/webalizer, onde você colocará todos os arquivos de configuração necessários. Colocarei aqui um exemplo de um arquivo de configuração comentado, para posterior análise, chamado de principal.conf:

# Arquivo exemplo de configuração do Webalizer # nome do usuario(xxx xxxxxx...),[email protected] # # Arquivo de Log do Apache, ou seja, onde fica o access_log do dominio LogFile /var/www/dominios/www.dominio.com.br/logs/access_log # Tipo de arquivo de log, no nosso caso estamos usando o formato combinado # do Apache LogType clf

Page 240: Linux - Tutoriais

# Diretório à ser gerado as estatísticas, ou seja, onde vai se encontrar # a página onde ficarão todas as estatísticas para a visualização através # de um navegador. OutputDir /var/www/dominios/stats.dominio.com.br/html/principal # Modo incremental? Isso significa que ao invés de estar gerando apenas # as estatísticas do log atual do Apache, incrementar novas informações # do log na página. Essa opção serve para aqueles que querem manter todas # as estatísticas e estar sempre resetando os logs para não deixar eles # absurdamente grandes. Bom para sites com muitos acessos. Incremental yes # Título da página ReportTitle Estatísticas de acesso para: # Nome do host HostName www.dominio.com.br # Tipos a ser considerados como páginas pelo analizer; os que não tiverem # esta extensão, não serão consideradas páginas visualizadas pelos # navegadores. PageType htm*

Page 241: Linux - Tutoriais

PageType cgi PageType php # Psit! Não faça output nenhum! Pois assim poderemos rodar o processo # no crontab sem ter que ficar recebendo avisos! Quiet yes ReallyQuiet yes # Quantidades de "Top Sites" a serem mostrados na página principal. Aqui # mostra a quantidade de informações para serem mostradas na página. TopSites 30 TopKSites 30 TopURLs 30 TopKURLs 30 TopReferrers 30 TopAgents 15 TopCountries 30 TopEntry 10 TopExit 10 TopSearch 20 TopUsers 20 # Gerar página com todas as entrys (contrario dos "Top"), ou seja, além # da página principal, o webalizer também gera uma página separada para # cada tipo de acesso, com *todas* as informações, e não apenas com as # "mais acessadas", ou coisas do tipo. AllSites yes AllURLs yes AllReferrers yes

Page 242: Linux - Tutoriais

AllAgents yes AllSearchStr yes AllUsers yes # Esconde imagens dos relatórios, ou seja, dispensa as imagens para que # elas não apareçam no relatório e não atrapalhem. Assim o relatório não # gera "a página mais acessada", sendo que aponta para uma imagem. HideURL *.gif HideURL *.GIF HideURL *.jpg HideURL *.JPG HideURL *.png HideURL *.PNG HideURL *.ra # Grupos para a identificação dos navegadores, para ser mostrado na # página de relatórios dos navegadores usados pelos visitantes. GroupAgent MSIE Microsoft Internet Explorer HideAgent MSIE GroupAgent Mozilla Netscape/Mozilla HideAgent Mozilla GroupAgent Lynx* Lynx HideAgent Lynx* # Tipos de mecanismos de busca, para saber que fora os mecanismos # de buscas que referenciaram a página. SearchEngine yahoo.com p= SearchEngine altavista.com q=

Page 243: Linux - Tutoriais

SearchEngine google.com q= SearchEngine eureka.com q= SearchEngine lycos.com query= SearchEngine hotbot.com MT= SearchEngine msn.com MT= SearchEngine infoseek.com qt= SearchEngine webcrawler searchText= SearchEngine excite search= SearchEngine netscape.com search= SearchEngine mamma.com query= SearchEngine alltheweb.com query= SearchEngine northernlight.com qr=

Há também as tags HTMLBody e HTMLEnd, que através delas, você pode criar "templates" para suas páginas de estatísticas. Este exemplo acima foi um exemplo bem prático, completo e ao mesmo tempo simples. Ele não faz o uso de todas as opções disponíveis no Webalizer, mas atende as necessidades básicas da maioria dos administradores de páginas. Se você quiser todas as opções, experimente ver o arquivo de exemplo que vem junto com o pacote do webalizer, no caso o arquivo webalizer.conf, localizado no diretório de configuração do webalizer. 4. Rodando o webalizer Agora vamos gerar os relatórios a partir de nossa configuração anterior. Lembrando que o arquivo de configuração que criamos anteriormente é /etc/webalizer/principal.conf: /usr/local/bin/webalizer -c /etc/webalizer/principal.conf (supondo que o executável foi instalado no /usr/local/bin, pois pode ser /usr/bin também) O parâmetro -c diz para usar um certo arquivo de configuração, e é o que fizemos. Você notará que o

Page 244: Linux - Tutoriais

programa é extremamente rápido, e é só assim que você vai acreditar o quão ele é rápido :) Então verifique no diretório /var/www/dominios/stats.dominio.com.br/html/principal que os arquivos de estatísticas estão lá, e que se você acessar com um navegador, verá todas as estatísticas do seu site, com bons gráficos e ótima qualidade de informação. 5. Programando a geração das estatísticas Convém lembrar que o webalizer só gera as estatísticas quando você mandar, ou seja, ele tem que ficar rodando de tempos em tempos para gerar estatísticas atualizadas dos logs do Apache. Geralmente se gera as estatísticas uma ou duas vezes por dia, e para esse tipo de necessidade, usaremos o nosso velho amigo crond. Vamos ter como exemplo rodar o webalizer duas vezes por dia, uma vez ao meio-dia e outra vez à meia-noite. Para fazer isso no exemplo deste tutorial, é só colocar a seguinte linha no /etc/crontab:

01 12,00 * * * root /usr/local/bin/webalizer -c /etc/webalizer/principal.conf

Assim, o comando /usr/local/bin/webalizer -c /etc/webalizer/principal.conf será executado pelo usuário root às 12:01 e 00:01. 6. Finalização E é isso! Para provedores, seria bom criar arquivos de log separados para cada domínio virtual, ou diretório, assim o webalizer poderia gerar estatísticas para cada um destes arquivos de log. Instalando o Webmin

Page 245: Linux - Tutoriais

O Webmin é um gerenciador de sistema baseado numa interface web. Com este utilitário você pode administrar suas máquinas pela rede através de um navegador comum. Ele é bem completo e tem módulos para configuração de várias e várias coisas. É uma mão e tanta para os administradores de sistema. Algumas das tarefas que você pode fazer com o Webmin atualmente:

• Mudar senhas, configurar o crontab, configurar scripts de inicialização, backup, configuração do pam, quotas, gerência de processos, pacotes, usuários e grupos. • Configura e administrar servidores majordomo, cvs, sendmail, qmail, postfix, fetchmail, jabber, samba, postgresql, proftpd, ssh, squid, wu-ftpd, apache, dhcp, dns bind, MySQL. • Configura rede, exportações NFS, NIS, PPP, túneis SSL. • Adminstração de impressoras, gerenciadores de boot, cd-roms, raid, partições, lvm, clustering. • Além de outras coisas como shell via web, gerenciador de arquivos, módulos perl, etc.

Então dá pra ver que o sistema é bem completo né? E ele é também amplamente usado. Vamos através deste tutorial saber como instalar e configurar de um modo bem prático e direto. Download e Instalação O download do Webmin pode ser feito a partir do endereço:

• Webmin - http://www.webmin.com.

Page 246: Linux - Tutoriais

A versão que utilizei neste tutorial foi a versão 1.060, em formato .tar.gz. Se você usa uma distribuição que suporte o formato .rpm, seria melhor você utilizar este tipo de formato já que é compatível com o resto do sistema. Mas aqui neste tutorial iremos a partir do código-fonte:

# tar zpfx webmin-1.060.tar.gz # mv webmin-1.060 /usr # cd /usr # ln -s webmin-1.060 webmin

Como você pôde ver nos comandos acima, eu descompactei num diretório qualquer o arquivo .tar.gz e depois movi o conteúdo para o diretório "/usr". Você escolhe este diretório, e eu escolhei o "/usr". Depois eu apenas fiz um link simbólico chamado "webmin" para o diretório "webmin-1.060", para que quando eu atualizar, eu possa manter a versão sem ter que mudar os diretórios (apenas mudo os links para a versão que eu quero que esteja funcionando). Agora vamos executar o script de instalação do Webmin. Abaixo irei mostrar passo a passo cada uma das perguntas que voc6e deverá responder, explicando elas. Os meus comentários vão estar entre parênteses. Vamos lá:

# cd /usr/webmin # ./setup.sh *********************************************************************** * Welcome to the Webmin setup script, version 1.060 * *********************************************************************** Webmin is a web-based interface that allows Unix-like operating systems and common Unix services to be easily administered. Installing Webmin in /usr/local/webmin-1.060 ...

Page 247: Linux - Tutoriais

*********************************************************************** Webmin uses separate directories for configuration files and log files. Unless you want to run multiple versions of Webmin at the same time you can just accept the defaults. (Aqui vai ser o diretório com todas as configurações do Webmin. Estas configurações vão estar sempre disponíveis para todas as versões. Config file directory [/etc/webmin]: (enter) (Aqui vai estar o arquivo de log do Webmin, ou seja, o que os usuários do programa estão fazendo :) Log file directory [/var/webmin]: (enter) *********************************************************************** Webmin is written entirely in Perl. Please enter the full path to the Perl 5 interpreter on your system. Como eu falei anteriormente, o Webmin é feito em Perl, então ele vai necessitar do Perl. Aqui você indica onde o Perl está. Geralmente ele está no /usr/bin/perl mesmo, então não precisamos mudar este valor. Full path to perl (default /usr/bin/perl): (enter) Testing Perl ... Perl seems to be installed ok *********************************************************************** Operating system name: Redhat Linux Operating system version: 7.3 *********************************************************************** Webmin uses its own password protected web server to provide access to the administration programs. The setup script needs to know : - What port to run the web server on. There must not be another

Page 248: Linux - Tutoriais

web server already using this port. - The login name required to access the web server. - The password required to access the web server. - If the webserver should use SSL (if your system supports it). - Whether to start webmin at boot time. Aqui dizemos em qual porta o Webmin vai funcionar. Para que assim você acesse http://maquina:porta e entre no Webmin. A porta 10000 é um valor saudável, então vamos usar esse valor mesmo. Web server port (default 10000): No Login Name você indica o nome do usuário administrador. Coloque um usuário que você queira, ou coloque admin ou root mesmo. Login name (default admin): Agora você digita a senha para o login anterior. E depois novamente para confirmar. Login password: Password again: A mensagem abaixo indica que o sistema não possui a biblioteca do Perl para usar SSL. Neste tutorial não vamos usar SSL, então isso não importa muito. Se você tem essa biblioteca, escolha se você deseja instalar o Webmin num servidor SSL (encriptado) ou não. Aqui não usaremos isso, apesar de ser bom :) The Perl SSLeay library is not installed. SSL not available. Iniciar o Webmin na hora do boot? Selecione não, vamos colocar uma linha de comando na inicialização para ficar menos complicado. Start Webmin at boot time (y/n): *********************************************************************** Creating web server config files.. ..done

Page 249: Linux - Tutoriais

Creating access control file.. ..done Inserting path to perl into scripts.. Creating start and stop scripts.. ..done Copying config files.. ..done Creating uninstall script /etc/webmin/uninstall.sh .. ..done Changing ownership and permissions .. ..done Running postinstall scripts .. ..done Attempting to start Webmin mini web server.. Starting Webmin server in /usr/local/webmin-1.060 ..done *********************************************************************** Webmin has been installed and started successfully. Use your web browser to go to http://seuhost.de.maquina:10000/ and login with the name and password you entered previously.

Pronto! O Webmin foi instalado com êxito. Agora você já pode usar o Webmin, colocando no seu navegador o endereço que o Webmin disse

Page 250: Linux - Tutoriais

(http://seuhost.de.maquina:10000/) e colocando o usuário e senha de administrador que você criou. Se você quiser por acaso desinstalar o Webmin, utilize o comando:

/etc/webmin/uninstall.sh Agora você poderá usufruir das facilidades que o Webmin traz para a administração do seu sistema. No futuro estarei colocando aqui algumas dicas sobre o uso do Webmin. Bom proveito ;) Instalando o ZipSlack O Zipslack é uma mini-distribuição gerada a partir do Slackware. Esta distribuição na verdade é um mini-slackware, com 100MB de tamanho. É ideal para quem quer testar o básico do Linux, pois não requer nenhum reparticionamento no seu HD, e tem suporte a tudo como se fosse um Linux normal (e não é?). Para fazer essa façanha, o Zipslack se instala na sua partição DOS e usa um sistema de arquivos especial, chamado UMSDOS. Todos os principais programas que você precisa estão inclusos nesta distribuição. Uma outra distribuição gerada a partir da idéia do Zipslack é o Bigslack. As instruções de instalação servem para estas duas distribuições, já que elas são quase a mesma coisa. A diferença entre estas duas distribuições é que o Bigslack é uma versão maior do Zipslack, ou seja, não tem apenas 100MB. Na verdade o Bigslack é a distribuição Slackware, para se instalar numa partição DOS (justamente como o Zipslack, usando sistema de arquivos UMSDOS). A instalação é bem simples e você provavelmente não vai encontrar nenhum problema com ela. Primeiramente você terá de obter os arquivos

Page 251: Linux - Tutoriais

compactados (em .zip) do Zipslack ou Bigslack. Estes arquivos contém exatamente todos os arquivos que estarão na sua distribuição. Você pode pegar nos seguintes endereços:

• Zipslack: http://public.ftp.planetmirror.com/pub/slackware/slackware-8.1/zipslack/zipslack.zip • Bigslack: (não mais disponível)

Os requerimentos mínimos para a instalação são bem poucos... Você precisará de no mínimo um 386 com 16MB de RAM. Caso você queira instalar numa máquina que tenha apenas 4MB de RAM, você pode pegar um patch que cria um arquivo swap (de memória) e ajuda com a memória RAM. O patch está disponível no endereço: http://public.ftp.planetmirror.com/pub/slackware/slackware/zipslack/fourmeg.zip. Todos estes arquivos citados para download estão no FTP ibiblio.org, você pode também (e é recomendado) usar mirrors para este FTP. A página de mirrors está localizado no seguinte endereço: http://www.slackware.com/getslack/, que inclusive contém alguns mirrors aqui no Brasil. Para instalar o Zipslack você precisará de no mínimo 100MB, e para o Bigslack, 850MB. Para instalar é só você descompactar estes arquivos .zip que você pegar na raiz do seu HD. Por exemplo, você descompacta no C: ou no D:, ou seja lá o que for. A descompactação irá criar um diretório linux/ dentro desta sua raiz com todos os arquivos da distribuição. É extremamente necessário que você coloque na raiz, para ficar C:\linux (por exemplo), senão não funciona direito.

Page 252: Linux - Tutoriais

O próximo passo para você começar a usar é bootar o seu sistema. A instalação já foi feita, então você só precisará agora carregar o kernel e usar à vontade! Para fazer isso você tem duas alternativas: 1. Bootar com o loadlin; 2. Bootar com um bootdisk. Bootando com o loadlin pode ser legal, mas você terá de ir para o DOS toda vez que quer entrar no Linux. Com o bootdisk, você coloca o disquete na inicialização e ele já boota. Vamos aprender aqui os dois métodos... Para usar o loadlin (bem prático), você terá de editar o arquivo linux.bat que vai ser descompactado no diretório linux/ dentro da raiz do seu HD (C:, D:, etc). Edite este arquivo, e veja as linhas "root = /dev/xxxx". Esta linha vai determinar ao loadlin aonde o seu Linux está instalado, então coloque a partição. Na maioria dos casos é /dev/hda1 (quando instalado no C:). As linhas que contiverem um "rem" no começo, são linhas comentadas e ignoradas pelo loadlin, então seguindo o exemplo, ficaria assim:

rem root=/dev/sda1 rem root=/dev/sda2 rem root=/dev/sdb1 root=/dev/hda1 rem root=/dev/hda2 rem root=/dev/hdb1 ...

Adapte o exemplo acima conforme suas necessidades. Salve o arquivo linux.bat e tudo está pronto! Simplesmente execute o linux.bat e você terá o seu Linux prontinho para usar! Só para complementar, o linux.bat é apenas um script que vai rodar o programa loadlin. Se você quiser rodar manualmente o programa, você deve apenas executar o comando:

Page 253: Linux - Tutoriais

loadlin vmlinuz root=/dev/hda1 rw

Com o bootdisk, o processo é um pouco diferente... Você terá de pegar a imagem do disquete e o programa rawrite, para escrever esta imagem em um disquete. Aqui estão os lugares para pegar:

• Imagem do disco - http://public.ftp.planetmirror.com/pub/slackware/slackware/zipslack/bootdisk.img • Rawrite - http://public.ftp.planetmirror.com/pub/slackware/slackware/bootdisks/RAWRITE.EXE

Logo após pegar estes dois arquivos, você só tem de escrever a imagem com o rawrite. O comando para isto é:

• No DOS - rawrite bootdisk.img a: • No Linux - dd if=bootdisk.img of=/dev/fd0

Inicie o computador e coloque o bootdisk para ele bootar. No prompt de boot você terá de executar o comando "mount root=/dev/hda1 rw, e com isso já poderá usar o seu sistema! Se você instalou o Zipslack e está insatisfeito porque não vem muita coisa nele (não vem nem o ambiente gráfico), você pode instalar estes ambientes através do comando "installpkg pacote.tgz". Este pacote.tgz é o formato dos pacotes do Slackware, então você pode pegá-los da distribuição oficial Slackware e instalar no seu Zipslack à vontade. Lembre-se que o Bigslack é diferente e já tem todos estes programinhas instalados. Um bom lugar para obter os pacotes e alguns exemplos de pacotes bons para pegar estão disponíveis no endereço:

Page 254: Linux - Tutoriais

• Pacotes - http://public.ftp.planetmirror.com/pub/slackware/slackware/slackware/ • Servidor Apache - http://public.ftp.planetmirror.com/pub/slackware/slackware/slackware/n/apache-1.3.26-i386-1.tgz • Servidor X - http://public.ftp.planetmirror.com/pub/slackware/slackware/slackware/x/ • KDE - http://public.ftp.planetmirror.com/pub/slackware/slackware/slackware/kde/ • GNOME - http://public.ftp.planetmirror.com/pub/slackware/slackware/slackware/gnome/

Se estiver instalando apenas para testar o Linux, aproveite muito! Mas recomendo você instalar uma distribuição nativamente mesmo, pois o UMSDOS é um pouco mais lento que o sistema de arquivos do Linux (ext2, ou ReiserFS). Não perca a oportunidade de instalar vários tipos de distribuições! ___________________________________________________________ Adobe create pdf De - Alexandre Zanca Bacich software Arco-Debian - Linux Email:[email protected]