Apostila Debian Intermediário Desktop Parana

Tamanho: px
Começar a partir da página:

Download "Apostila Debian Intermediário Desktop Parana"

Transcrição

1 Apostila Debian Intermediário Desktop Parana

2 Direitos autorais: Essa Apostila está licenciada sob uma Licença Creative Commons Atribuição Uso Não Comercial Compartilhamento pela mesma licença 2.0 Brazil. Pode ser copiada, distribuída e modificada. Para ver uma cópia desta licença, visite nc sa/2.0/br/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. 2

3 Documento Versão 1.9 Data de Revisão 29 de Janeiro de 2010, por Robson Alves Pavan Equipe Técnica Mantenedor: Robson Alves Pavan Revisor: Robson Alves Pavan Colaboradores: Robson Alves Pavan Felipe Camargo de Pauli André Lucas Falco Andre Luiz de Souza Paula Coordenação do projeto: Jonsue Trapp Martins Páginas 168 páginas

4 Índice APROFUNDANDO-SE NO APT...9 APT (ADVANCED PACKAGE TOOL)...9 ARQUIVOS DE CONFIGURAÇÃO APT.CONF...14 Grupos...15 Exemplos:...15 ARQUIVO DE CONFIGURAÇÃO PREFERENCES...16 DPKG...18 Utilizando o dpkg...18 Ações Opções Exemplos de ocorrências mais comuns no uso do dpkg...21 COMPILANDO PROGRAMAS A PARTIR DO CÓDIGO FONTE...25 GERENCIANDO DISCOS E PARTIÇÕES...27 O QUE SÃO PARTIÇÕES...27 OBTENDO INFORMAÇÕES SOBRE AS PARTIÇÕES...28 PARTICIONANDO DISCO COM CFDISK...30 Excluindo uma partição...32 Salvando as alterações...32 SISTEMA DE ARQUIVOS...32 CRIANDO SISTEMA DE ARQUIVOS...33 GERENCIADOR DE PARTIDA GRUB...34 TRABALHANDO COM DISCOS E PARTIÇÕES...34 INSTALAÇÃO DO GRUB...35 CUSTOMIZANDO O ARQUIVO MENU.LST...36 OUTROS PARÂMETROS DE CONFIGURAÇÃO DAS IMAGENS...41 LINHA DE COMANDO DO GRUB...42 RUNLEVEL...45 PROCESSO DE BOOT...45 CONHECENDO OS RUNLEVELS...45 IDENTIFICANDO O RUNLEVEL EM UTILIZAÇÃO...46 O ARQUIVO /ETC/INITTAB...46 ENTENDENDO O FUNCIONAMENTO DOS RUNLEVELS...48 INSERINDO/ REMOVENDO SCRIPTS DO RUNLEVEL...49 SISTEMA DE LOGS...51 PRINCIPAIS ARQUIVOS DE LOG...51 LENDO UM ARQUIVO DE LOG...52 CONFIGURANDO O SYSLOG...52 LOGGER...55 LOGCHECK...56 LOGROTATE...57 CRON...61 COMANDOS...64 ALIAS...64 BC...66 LAST...73 LASTLOG...75 NEWUSERS...77 STAT...77 CONVERT...80 CONVMV...81

5 ICONV...82 Identificando a codificação de caractere do arquivo e a do sistema...83 PASTE...84 CUT...85 DD...88 FIND...90 XARGS...95 FSCK...96 FUSER...98 LSOF PIDOF NICE RENICE NOHUP LSPCI LSUSB HWCLOCK NMBLOOKUP NSLOOKUP GERÊNCIA DE REDES DE COMPUTADORES CAMADA OSI PROJEÇÃO DA ARQUITETURA TCP/IP SOBRE O MODELO OSI EMPACOTAMENTO DE DADOS TCP/IP CAMADA DE APLICAÇÃO CAMADA DE TRANSPORTE TCP UDP Portas e soquetes CAMADA INTER-REDES IP ICMP ARP CAMADA DE ENLACE Ethernet PARÂMETROS NECESSÁRIOS IP Rede Gateway Nomes PRIMEIROS SOCORROS PING WGET IFCONFIG up down IFUP E IFDOWN ROUTE Sintaxe Exemplos

6 IFTOP Primeira coluna Segunda coluna Terceira coluna Quarta, quinta e sexta coluna TRACEROUTE ttl (Time To Live) ARP DIG Servidor-de-nome Tipo de pesquisa Objeto a ser pesquisado Exemplos de saídas MII-TOOL Negociação Alterar os modos disponíveis Mensagens de erro NETSTAT Primeira coluna (Protocolo utilizado) Segunda coluna (Fila de dados a serem recebidos) Terceira coluna (Fila de dados a serem enviados) Quarta coluna (Endereço local) Quinta coluna (Endereço remoto) Sexta coluna (Estado) Praticando GERENCIADOR WICD Estrutura do Wicd Funcionamento e configurações REFERÊNCIAS BIBLIOGRÁFICAS

7 Índice de Figuras Figura 1: Arquivo sources.list Figura 2: Tela principal do cfdisk...30 Figura 3: Cfdisk - criando uma nova partição...30 Figura 4: Cfdisk - escolhendo o tipo de partição (primária ou lógica)...31 Figura 5: Cfdisk - definindo o tamanho da partição...31 Figura 6: Cfdisk - Selecionando tipo de partição...32 Figura 7: Exemplo resultado de uso do comando convert...81 Figura 8: Representação de uma consulta a um servidor WINS Figura 9: Camada OSI Figura 10: Saída do comando IFTOP Figura 11: Janela do Wicd

8 APROFUNDANDO-SE NO APT No Debian temos basicamente duas formas de se instalar pacotes: (a) através das ferramentas de instalação; (b) ou manualmente compilando o pacote. O Debian é capaz de trabalhar com diversas ferramentas de instalação, dentre elas destacamos o APT e o DPKG. Quando falamos em instalação ou desinstalação em qualquer distribuição Linux, sempre esbarramos no termo pacote em vez de programa. Isso vem da ideia de empacotamento de programas, que é um agrupamento de dados que contém os arquivos e a estrutura indicativa de onde cada arquivo deve ser gravado no sistema para que o mesmo funcione corretamente, junto com um conjunto de instruções que são executadas antes (preinst) e após (postinst) a instalação e remoção dos mesmos. Cada distribuição Linux possui uma extensão representativa para seus pacotes. No Debian e seus derivados, a extensão utilizada é.deb. Outra extensão comumente encontrada é.rpm que é oriunda das distribuições derivadas do RedHat. Ainda é possível encontrar arquivos binários, como acontece quando instalamos alguns módulos proprietários de interfaces de rede. Estes possuem uma série de alternativas em seu corpo, permitindo que o módulo seja instalado independente da distribuição (desde que ela seja suportada). APT (ADVANCED PACKAGE TOOL) O APT é a principal ferramenta de manipulação de pacotes do Debian. Com ele é possível instalar, remover, reinstalar, configurar, atualizar, etc... É uma ferramenta completa que possui muitos recursos que são utilizados através dos vários comandos do APT. Os comandos mais utilizados são o apt-get e o apt-cache. O APT possui uma ferramenta com interface gráfica que permite a instalação e remoção de pacotes. Ele se chama Gerenciador de Pacotes Synaptic. Antes de nos aprofundarmos no estudo do APT devemos fazer algumas observações sobre alguns pontos com relação a seu uso. Com exceção dos recursos de pesquisa do APT, todos os demais só podem ser executado pelo superusuário (root). Quando tentamos utilizar esses recursos como usuários comuns, uma mensagem de erro parecida com E: Não foi possível abrir arquivo de trava /var/lib/dpkg/lock open (13 Permissão negada) é apresentada na tela. Não é possível executar mais de uma instância simultaneamente. Enquanto uma instância estiver sendo executada as tentativas de se iniciar uma outra resultaram em erro, como E: Não foi possível obter trava /var/lib/dpkg/lock open (11 Recurso temporariamente indisponível). É comum esse erro acontecer na seguinte situação: algum usuário deixa o synaptic aberto ou esta efetuando as atualizações de segurança e tentar instalar algum pacote através do APT. 9

9 Para o correto funcionamento do APT, os repositórios de onde serão baixados os pacotes devem estar corretamente configurados no arquivo sources.list que se encontra no diretório /etc/apt. A configuração do arquivo sources.list deve ser feita da seguinte forma: primeiramente deve ser passado o tipo de pacote que será instalado, onde o parâmetro deb o define que o repositório configurado nesta linha trará os pacotes que contêm os componentes que serão instalados, ou seja, os programas e toda estrutura necessária para seu funcionamento no sistema, e deb-src define os pacotes que contêm os códigos fontes dos pacotes tipo deb. Em seguida devemos definir qual protocolo será utili zado para transferências dos pacotes (http ou ftp), seguido do endereço (ip ou nome) do repositório e do compartilhamento desejado. Após o endereço, devemos definir a qual release os pacotes devem pertencer e as seções desejadas (pacotes livres, livres dependentes de proprietários ou integralmente proprietários). Figura 1: Arquivo sources.list Geralmente quando instalamos um pacote, para que funcione corretamente, ele depende de outros pacotes (que podem conter bibliotecas ou outros programas). Estes pacotes, os quais ele depende, chamamos de dependências. Um pacote pode ter várias dependências sendo que pacotes diferentes podem vir a ter dependências em comum e as próprias dependências podem vir a ter dependências, como numa grande teia de pacotes que unidos formam um sistema funcional. Sabendo que um pacote possui dependências ao tentarmos instalá-lo, para que ele funcione, precisamos instalar também todas as suas dependências e as dependências de suas dependências. Isso torna esse processo muitas vezes complexo e trabalhoso. O APT é considerado por muitos como a melhor ferramenta para gerenciamento de pacotes principalmente devido a sua capacidade, através do apt-get, de quando acionando para instalação de um pacote, sempre seguir uma determinada ordem que possibilita a instalação dos pacotes e de todas as dependências necessárias para que ele funcione. A ordem seguida por ele é esta: verificar se o pacote existe na lista local, resolver as dependências, solicita ao servidor todos os pacotes necessários, faz o download, descompacta, configura e instala os pacotes. 1. Verificação de existência do pacote: Verifica se o pacote indicado para instalação está disponível nos repositórios através da lista local de pacotes. 2. Resolver dependências: Caso o pacote exista, verifica quais são as suas dependências, 10

10 a disponibilidade delas e se alguma já está instalada no sistema. Quando encontra dependências já instaladas, verifica se estão com a versão correta. Em seguida, caso não haja nenhum conflito com os pacotes instalados e suas dependências sejam sanadas, será exibido um relatório com toda relação de pacotes a serem instalados, removidos e atualizados, além de, em alguns casos, mostrar uma relação de pacotes sugeridos ou recomendados para instalação junto a uma solicitação de confirmação para continuidade do processo de instalação. 3. Baixar: Ele acessa o repositório configurado no sources.list e faz o download do pacote e de suas dependências para o seu computador, no diretório /var/cache/apt/archives. 4. Descompactar: O pacote é descompactado para iniciar a instalação. 5. Configurar: Todas as configurações necessárias para que a instalação se dê de forma acertada são realizadas. Estas configurações muita vezes não interagem com o administrador. Caso seja necessário que este informe algo ao instalador, será perguntado. 6. Instalar: Todos os componentes do pacote são copiados para os diretórios devidos. Agora iremos ver algumas formas de uso do comando apt-get mostrando seus principais parâmetros: apt-get update Existe uma lista, que contém uma descrição de todos os pacotes disponíveis para o Debian, disponível dentro de cada repositório de pacotes. O apt-get consulta esta lista para saber o que pode ser instalado. Este comando faz uma comparação entre a lista que você têm armazenada e a lista que está no servidor de pacotes. Se a sua for mais velha, ele faz o download da mais recente. A atualização de um único pacote provoca o lançamento de um nova lista. Este comando sempre deve ser executado antes de se fazer a instalação de algum pacote e após efetuar alterações no arquivo sources.list. apt-get upgrade Esta é a opção responsável pela atualização de pacotes. Quando você executa este comando, uma lista de pacotes é copiada do repositório para a máquina local do usuário, onde é feita uma comparação entre as versões de softwares existentes no repositório e na máquina local. Caso existam versões mais recentes para os programas que o usuário possui em seu sistema, então, o APT automaticamente atualizará estes programas no computador do usuário. Não é preciso dizer qual pacote você quer atualizar. Independente de ser apenas um, ou serem vários, ele fará toda atualização necessária. apt-get clean - Após a instalação de um pacote, não precisamos necessariamente manter o arquivo.deb em nosso sistema (em /var/cache/apt/archives ). O processo de instalação não remove os pacotes baixados! Se você não remover os pacotes baixados, começará a acumulá-los no disco rígido. Com o passar do tempo, isso pode causar um problema de falta de espaço. 11

11 O apt-get clean faz a remoção de todos os pacotes do diretório de cache do APT. apt-get install PACOTE - Executamos este comando para realizar a instalação de pacotes no sistema. Se quisermos instalar mais de um programa, basta escrever todos os nomes separados por espaço na linha de execução do comando. Se um pacote precisa de outros para ser instalado, isto é, se ele tem pré-requisitos, eles também serão selecionados para instalação automaticamente. Quando você requisita a instalação de um pacote que não tem dependências, a instalação começa imediatamente. Caso existam dependências, elas são mostradas a você e o programa aguarda a sua confirmação ( s/n ) para continuar. Existem vários motivos para ele esperar por uma confirmação: a lista de dependências pode ser muito grande e você pode não querer instalar todos os pacotes; pode não haver espaço em disco suficiente para instalar o programa e/ou suas dependências; o pacote ser incompatível com outro já instalado e exigir que este seja removido; ou, ainda, o repositório não é uma fonte confiável para o Debian, que acontece quando não existe na máquina a chave pública do repositório de onde vem a atualização. Existe ainda, um caso em que há mais de uma versão disponível para o mesmo pacote. Se um pacote chamado nome possui uma versão e 2.0-0, por exemplo, a versão mais nova será instalada por padrão, entretanto, podemos querer instalar a versão mais antiga (1.0-0), tendo que executar o comando da seguinte forma: # apt get install nome=1.0 0 apt-get dist-upgrade - Possibilita a atualização completa da distribuição utilizada pelo usuário. É importante que o usuário tenha em mente que a execução deste comando num sistema que utilize meta-pacotes customizados, como é o caso do Debian Desktop Paraná usado na Celepar, ou versões de software instaladas manualmente (através de compilação do código fonte, por exemplo), poderão gerar problemas graves, impossibilitando inclusive o uso posterior do sistema. Para a devida utilização deste comando, é necessário alterar o arquivo de configuração do APT, o /etc/apt/sources.list, configurando o mesmo para utilizar os repositórios da nova distribuição que será instalada no sistema. apt-get remove PACOTE - Remove um ou mais pacotes. Esta operação faz a desinstalação de um pacote do sistema e não a remoção do.deb do diretório de cache do APT. Em alguns casos, os arquivos de configuração e/ou dados do pacote são mantidos. Isso pode ser bom ou ruim. Se você removeu um pacote por acidente, todo o seu trabalho de configuração dele ainda estará preservado. Preste atenção às mensagens mostradas durante a remoção de um pacote para saber o que está acontecendo. Observe também que, se algum pacote depende do pacote a ser removido, esse pacote também será removido. apt-get --purge remove PACOTE - Remove um ou mais pacotes e seus respectivos arquivos de configuração. 12

12 apt-get source PACOTE - Possibilita que o código fonte de um programa seja copiado para máquina local em vez do binário do programa e seus scripts de configuração, que compõem o pacote do programa propriamente dito. Para baixar arquivos contendo o código fonte de programas para sua máquina, é necessário configurar adequadamente o arquivo /etc/apt/sources.list. Para isso, veja o tópico Reconfigurando a lista de pacotes, na sequência. apt-get build-dep PACOTE - Este comando tenta satisfazer as dependências que um determinado pacote contendo código fonte de um programa possui, para ser compilado. Por exemplo: suponha que você deseja recompilar o código fonte do tuxracer (um jogo). Se você executar o comando apt-get build-dep tuxracer, o APT tentará instalar todos os pacotes que sejam necessários para compilação do pacote tuxracer. Em algumas situações, é necessário instalar pacotes além daqueles que são trazidos automaticamente pelo comando apt-get build-dep. Isto é algo natural e você deverá se acostumar a estas situações. apt-get check - É uma ferramenta de diagnóstico. Ele atualiza o cache de pacotes e verifica se há alguma dependência quebrada que necessita ser resolvida (utilizando-se apt-get -f install ) no sistema. apt-get install --reinstall PACOTE - Em algumas situações, precisaremos reinstalar um pacote já presente no sistema. Para isso, podemos utilizar este o comando que permite fazer isso. Tome o cuidado de fazer uma cópia dos seus arquivos de configuração para não ter surpresas desagradáveis. Além do apt-get vamos ver também o uso do apt-cache que é a ferramenta de pesquisa do APT. Através das ferramentas de pesquisa podemos procurar por pacotes assim como pesquisar informações mais detalhas sobre um determinado pacote. apt-cache search NOME - Para procurar por um pacote qualquer, executamos este comando. Ele faz uma pesquisa na lista de pacotes disponíveis, procurando pacotes que possuam a expressão fornecida no argumento NOME. A saída deste comando, apresenta todos os pacotes que apresentam a palavra fornecida como argumento em parte do nome ou na descrição do pacote. Existem formas mais complexas de busca que podem ser mais claras ou mais específicas, mas geralmente, a utilização do comando grep para filtrar a saída já é suficiente para grande maioria dos casos. apt-cache show PACOTE - Uma vez descoberto o nome correto do pacote Debian, você pode visualizar todas as informações sobre o pacote, bem como seu mantenedor, sua versão, sua descrição, dentre outras informações relevantes. apt-cache showsrc PACOTE Tem a mesma função que o comando apt-cache show, porém, atua mostrando informações sobre pacotes fontes. 13

13 ARQUIVOS DE CONFIGURAÇÃO APT.CONF O apt possui a possibilidade, como quase todas aplicações utilizadas no Debian, de ser alterado, personalizado, ou seja, configurado de acordo com o interesse do administrador por meio de arquivos de configuração. Sempre que uma ferramenta do grupo APT é iniciada, ela irá ler os arquivos de configuração para saber qual será o seu comportamento. Nas versões anteriores ao Debian Lenny, essas configurações eram realizadas no arquivo /etc/apt.conf. A partir da versão Lenny, distribuição esta que é a consistência do Desktop Paraná sob a versão 2.x, foi criado um diretório que aloca vários arquivos de configuração. O diretório é o /etc/apt/apt.conf.d, e dentro deles podemos encontrar vários arquivos. Estes arquivos seguem a mesma sintaxe do antigo apt.conf, com a diferença de existir um arquivo para cada configuração diferente. Para que o apt saiba qual arquivo tem maior prioridade em relação ao outro, o nome dos arquivos deve iniciar com um número de 00 a 99. T odas as opções que são passadas pelo usuário através da linha de comandos sobrescrevem as configurações contidas no arquivo apt.conf.!! Por motivos estritamente didáticos, iremos, a partir de agora, indicar cada arquivo desses que podem ser alocados dentro do diretório /etc/apt/apt.conf.d como apt.conf.!! O arquivo apt.conf é organizado sob a forma de árvore em divisões funcionais, como por exemplo: o grupo APT, o grupo Acquire, o grupo DPKG e a seção Dir (para diretórios de configuração). Sintaticamente, o arquivo pode ser configurado sob as seguintes formas: APT::Get::Assume Yes "true"; ou APT { Get { Assume Yes "true"; }; }; Nos exemplos acima, podemos perceber que tanto os caracteres ::, quanto { e };, são utilizados para definir qual o grupo funcional, seção e opções estamos tratando naquele espaço do arquivo de configuração. Em ambos exemplos que citamos (acima), estamos tratando da opção Assume-Yes, da seção Get, do grupo funcional APT, contudo, de formas sintaticamente diferentes, mas produzindo o mesmo resultado. Linhas que se iniciam com os caracteres //, ou um bloco de texto, que se inicia com /* e termina com */, são considerados comentários e são ignorados. 14

14 A seguir explicaremos a finalidade de cada grupo funcional, que pode ser configurado através do apt.conf : Grupos O grupo APT É utilizado para controlar as opções gerais para uso de todas as ferramentas do APT. O grupo Acquire É divisão funcional usada para configurar as rotinas de download de pacotes e manipuladores de URI's utilizados pelas ferramentas do APT. O grupo Dir Definição de layout de diretórios. Usado para a configuração dos diretórios que serão utilizados pelo APT. O grupo Dselect Configurações que afetam o uso da ferramenta dselect, quando ela é utilizada em conjunto com o APT. O grupo DPKG Configurações que afetam o uso do dpkg. As opções que fazem parte desta seção, alteram a forma normal como o dpkg atua, quando invocado pelo APT. O grupo Debug Utilizado para configurar opções para depuração no uso das ferramentas do APT. Cada um destes grupos funcionais possui uma gama própria de opções, que não discutiremos aqui, por ser muito vasta (cabe a vocês, caso Se você precisar saber qualquer detalhe sobre as opções que podem ser utilizadas neste arquivo de configuração, estude a documentação oficial do arquivo, através do comando: # man apt.conf Exemplos: Exemplo 01: Configurando um serviço de proxy para ser utilizado pelo APT. Esta configuração possibilita buscar pacotes de programas na Internet através de um servidor proxy existente na sua rede. Acquire 15

15 { http { Proxy ; }; }; Exemplo 02: Configurando a arquitetura e release (versão) padrão dos pacotes a serem utilizados pelo sistema. APT { Architecture "i386"; Default Release stable ; }; Exemplo 03: Configurando o diretório de cache do APT. Dir / { Cache "var/cache/apt/" { Archives "archives/"; srcpkgcache "srcpkgcache.bin"; pkgcache "pkgcache.bin"; }; }; Um ótimo arquivo de exemplos de configuração do apt.conf pode ser encontrado em /usr/share/doc/apt/examples/configure-index.gz. U se o comando # cat /etc/apt/apt.conf.d/* para ver todas as configurações do apt de uma só vez. ARQUIVO DE CONFIGURAÇÃO PREFERENCES O arquivo /etc/apt/preferences controla a prioridade de versão de pacotes. É possível manter fontes stable, testing e unstable ao mesmo tempo. Caso tenha inserido no arquivo /etc/apt/sources.list repositórios de versões diferentes (stable e testing por exemplo) é necessário criar o arquivo preferences para que possa na instalação selecionar qual versão terá prioridade e de qual versão você deseja instalar os pacotes. 16

16 M uito cuidado quando estiver trabalhando com versões diferentes, uma má instalação de pacote pode gerar quebras de pacotes e até mesmo a paralisação do sistema. Isso acontece muito facilmente quando se usa um sistema personalizado, como o Desktop Paraná. Segue um exemplo para o arquivo preferences : Package: * Pin: release a=stable Pin Priority: 900 Package: * Pin: release a=testing Pin Priority: 400 Neste exemplo para todos os repositórios stable, a prioridade será 900 e para testing 400, ou seja, vale a prioridade mais alta, então o stable será a opção default. Sempre que utilizarmos o comando apt-get com as opções install, update, upgrade, source e dist-upgrade, o pacote será do stable. Para instalar pacotes do testing devemos utilizar o comando: # apt get t testing install [pacote] O comando acima só funcionará SE, e somente SE, no sources.list, os repositórios estiverem com a release definida como testing e stable. Não é aconselhável se utilizar estes valores, porque caso haja uma alteração de release, um administrador descui dado pode acabar instalando pacotes de versões novas em versões antigas. Utilizamos esta nomenclatura nesta apostila para facilitar eventuais atualizações da mesma. O mesmo procedimento se aplica as opções update, upgrade, dist-upgrade ou source. Podemos definir que um pacote sempre venha da release testing. Para isso, dentro do arquivo /etc/apt/preferences, defina a prioridade específica de um pacote. Veja o exemplo abaixo: Package: amule Pin: release a=testing Pin Priority: 905 O pacote desejado vai ter prioridade maior que o de qualquer outro release, então o pacote desejado será da release testing. Resumindo: podemos, se tivermos conhecimento suficiente para resolver problemas de dependências desencontradas, conflitos, estrutura de diretórios e pacotes, e compilação de aplicativos, ter pacotes de várias releases em um único sistema. Algumas vezes, existirá a facilidade de se usar o apt para instalação destes pacotes, tendo o arquivo preferences como um forte aliado nesta tarefa. Podemos priorizar uma release em geral, e configurar exceções para pacotes específicos. 17

17 DPKG O dpkg é considerado a base do Sistema de Gerenciamento de Pacotes do Debian e das distribuições que dele derivam. O dpkg é capaz de instalar, remover e fornecer informações sobre os pacotes.deb. É muito usado por usuários avançados da Debian e desenvolvedores para fins de instalação, manutenção e construção de pacotes. Ele também é utilizado como Back end por ferramentas como apt-get e aptitude, devido aos fatos de ser muito bom na instalação de pacotes, porém falhar nas tarefas de ser capaz de buscar pacotes em lugares remotos ou resolver conflitos complexos nas dependências dos pacotes. Assim, estes outros comandos resolvem estes problemas e, na hora de realizar a instalação em si, chamam-no para o trabalho sujo. Hoje em dia utilizamos o dpkg principalmente como ferramenta de obtenção de informações sobre os pacotes instalados no sistema, na manipulação de pacotes (criação e extração) e na resolução de problemas com pacotes. Para instalação, utilizamos o apt, que, como já dito, chama o dpkg para realizar a instalação. Os passos seguidos por ele são: (a) desempacotar os arquivos debian; (b) executar o preinst; (c) alocação dos arquivos nos seus devidos lugares; (d) executar o postinst. O s arquivos de configuração e os scripts de instalação ficam dentro do diretório /var/lib/dpkg/info/nomedoaplicativo. Os scripts utilizam a linguagem shell script, na maioria das vezes. Dê uma onlhado nos arquivos que lá existem. O dpkg é composto por uma série de ferramentas que desempenham funções especificas em relação aos pacotes Debian. A seguir iremos fazer uma breve breve descrição do que as principais ferramentas fazem. dpkg - Desempenha a função em senso estrito do comando; dpkg-source - Empacota e desempacota os arquivos fontes de um.deb; dpkg-deb - Empacota e desempacota pacotes binários; dpkg-reconfigure - Permite que o usuário execute ajustes nos pacotes já instalados no sistema. Também é conhecido como reconfigurador de pacotes. É uma das ferramentas mais utilizadas do conjunto de aplicações do dpkg. Utilizando o dpkg O comando dpkg possui a seguinte sintaxe: Sintaxe: dpkg <ações> <opções> <pacotes> 18

18 Ações As principais ações são: -i end<pacote> Instala um pacote no sistema sem resolver dependências. --unpack end<pacote> Desempacota um arquivo.deb extraindo o conteúdo e montando uma estrutura de diretórios e arquivos de acordo com o esqueleto que foi usado na sua construção. Perceba que não será descompactado em qualquer lugar, mas sim no lugar pré-definido. Se o administrador verificar com o dpkg -l o status do arquivo verificará que o pacote possuirá a op ção U. Isto indica que o aplicativo foi somente descompactado, e não instalado da forma padrão. -X end<pacote> <diretório> Faz a mesma coisa que o comando anterior, porém, em vez de extrair os arquivos nos seus devidos lugares, ele permite que o usuário escolha um novo destino. A diferença crucial está no fato de o --unpack realizar a criação dos arquivos a partir do barra (/) e o -X iniciar a partir do diretório que você especificar, que será um barra falso. Você poderá executar o aplicativo digitando o endereço completo do executável, ou colocando o binário dentro do PATH do usuário que o irá executar. --configure pacote Irá realizar a configuração de todos os pacotes parcialmente instalados nos sistema (ou seja, que deram pau por algum motivo durante a instalação). Durante a instalação, algum erro pode vir a aparecer, fazendo com que o dpkg seja interrompido. Utilizando este comando, normalmente os problemas são resolvidos, já que normalmente utilizamos o apt para instalações (que sempre procura tomar cuidado com todos os aspectos da instalação para evitar quase todos os problemas do mundo). Normalmente, os problemas são originados por algo não relacionado aos scripts de instalação (como queda de luz, problema com permissões, tráfego da rede, mal configuração dos repositórios, etc). Caso o problema seja causado pelos próprios scripts, o administrador terá que editá-los (preinst e postinst). -r <pacote> Desinstala um pacote do sistema sem remover os arquivos de configuração deste, se existirem. -P <pacote> Faz a remoção completa de um pacote do sistema, incluindo arquivos de dados, de configuração, etc. -C Auditoria de pacotes mal instalados. Procura por pacotes que foram instalados somente parcialmente em seu sistema. O legal dele é que indica o que pode ser feito para que o problema seja sanado. --get-selections <padrão> Procura na lista de aplicações instalados no sistema pela expressão fornecida através do argumento padrão, ou, no caso deste não ser definido, todos os pacotes que já passaram pelo sistema. Os pacotes que estejam com o valor install indicam as aplicações instaladas, enquanto os que possuírem valor deinstall os desinstalados. 19

19 --print-architecture Imprime a arquitetura padrão utilizada pelos pacotes instalados no sistema. -l <pacotes> (ele) Lista todos os pacotes instalados no sistema com suas respectivas informações, podendo ter status diferentes: estar instalado corretamente com o apt, ter sido apenas desempacotado, ter tido sua instalação interrompida durante a instalação, etc. É muito utilizada pelos administradores. Opcionalmente, você poderá especificar o nome de um ou mais pacotes (separados por espaços) para verificar suas informações. -s <pacote> Lembre-se deste s como s de show. Exibe as informações sobre um determinado pacote, podendo este estar já instalado ou então ter sido instalado uma vez na vida. Estas informações são retiradas do arquivo /var/lib/dpkg/available. -I end<pacote> (i) Exibe uma série de informações acerca de um pacote. Sempre, como pode ser visto na sintaxe, devemos indicar o pacote com o endereço completo. Se o administrador tentar utilizar apenas o nome do pacote, o erro Arquivo ou diretório não encontrado será apresentado na tela. As informações apresentadas são parecidas com as do parâmetro -s, porém o pacote não precisa ter sido instalado nunca, e temos uma informação adicional: o tamanho do arquivo de controle e uma descrição de o quê o compõe e quanto ocupa de espaço (conffiles, control, md5sums, postinst, preinst, posrm e prerm). -S <arquivo> Permite descobrir qual é o pacote que possui algum arquivo. Ele é muito interessante, já que o administrador pode utilizar um comando em um computador que não existe em outro. Para saber o nome do pacote, basta ir até o computador que o possui e verificar, com esta opção, aquele pacote que o possui. Como já foi dito, ele pode ser usado para qualquer arquivo, não somente um binário (ex: sources.list). O resultado será mostrado da seguinte forma: pacote: linha que contém o arquivo (diretórios também é um arquivo) -L <pacote> Mostra todos os passos executados pelo dpkg na instalação de um pacote na fase de alocação dos arquivos dentro de seus respectivos diretórios. Veja que o arquivo de configuração fabiqueta.conf do pacote fabiqueta (pacote fictício) para ser alocado dentro do diretório /etc/fabiqueta, precisa criar o diretório fabiqueta. Então a ordem será: / /etc /etc/fabiqueta /etc/fabiqueta/fabiqueta.conf Desta forma, o administrador consegue saber exatamente onde está cada um dos diretórios e arquivos criados originalmente pelo pacote. 20

20 C aso um pacote venha a ser removido, este comando terá sua fonte atualizada e mostrará apenas aqueles arquivos e diretórios que ainda existem. Para você verificar o seu funcionamento, instale o pacote tuxpaint, utilize este parâmetro, remova com o dpkg -r e então verifique novamente a saída do comando com o parâmetro -L. Você observará que somente os arquivos de configuração permanecem no computador. -c end<pacote> A saída é exatamente a mesma que a do -L1, com a diferença que o -c verifica todos os diretórios e arquivos que serão criados na instalação do pacote, diferente do -L que verifica quais arquivos e diretórios existem realmente, ou seja, de aplicações instaladas. Ele é interessante para que o administrador verifique, caso tenha alguma dúvida, se a instalação irá criar algum diretório ou arquivo no lugar de um outro já existente. O u seja: -L para aplicações instaladas e -c para pacotes.deb de aplicações não necessariamente instaladas. Opções As opções do comando dpkg tanto podem ser especificadas através da linha de comandos, como através do arquivo de configuração do dpkg, o /etc/dpkg/dpkg.cfg. As principais opções são: -B Quando um pacote é desinstalado do sistema, pode ocorrer que outros pacotes ainda instalados dependam do que foi removido. Esta opção faz com que estes pacotes também sejam removidos do sistema automaticamente. --no-act Faz uma simulação de acordo com as ações envolvidas. Por exemplo, você pode simular a instalação ou remoção de um pacote para verificar se algum erro será gerado pelo sistema de gerenciamento de pacotes. Tenha certeza que você especificou esta opção antes da citação de qualquer ação na linha de comando, caso contrário, esta opção não terá efeito e a ação será desempenhada de fato. -R Faz com que o dpkg opere no modo recursivo. --log=arquivo Permite especificar um arquivo onde o dpkg vai realizar os registros das suas operações. Por padrão isto é feito em /var/log/dpkg.log. Exemplos de ocorrências mais comuns no uso do dpkg Vamos exemplificar agora tudo que foi visto. Verifique se seu apt está configurado corretamente. Vamos começar fazendo download de um pacote dos repositórios utilizando o dpkg. # apt get clean 1 Isso quando o pacote está instalado corretamente, da forma original, já que o -L verifica até pacotes que foram removidos sem a purificação de arquivos de configuração. 21

21 # apt get update # apt get install d sl C aso o aplicativo sl já esteja instalado, será necessário reinstalar a aplicação utilizando o parâmetro -d da mesma forma como mostrado acima. O pacote foi descarregado dentro do diretório /var/cache/apt/archives. Entre nele para que nossas atividades tornem-se mais fáceis. Para verificar se a aplicação está funcionando, digite sl e pressione <Enter>. Um erro aparecerá. Isso quer dizer que o pacote.deb foi descarregado no seu computador, porém não foi instalado (quem fez isso foi o parâmetro -d, que indica download only). Verifique o nome exato do pacote e instale-o. # ls l sl* rw r r 1 root root :47 sl_ _i386.deb # dpkg i sl_ _i386.deb Selecionando pacote previamente não selecionado sl. (Lendo banco de dados arquivos e diretórios atualmente instalados). Desempacotando sl (de sl_ _i386.deb)... Configurando sl ( )... Processando gatilhos para man db... # sl O trem tá funcionando. Então agora podemos realizar novos testes. Apesar do aplicativo estar funcionando, será que o sistema sabe que ele está lá? # dpkg get selections sl sl install Um aplicativo tão pequeno, de nada, sem utilidade nenhuma como este, provavelmente não tem quase nenhum arquivo criado no nosso computador, certo? Verifique: # dpkg L sl Parece que o criador do sl tava meio que desempregado e sem ocupação, no mínimo. Tem muita coisa, e, com o comando anterior, pudemos verificar o que foi criado pelo arquivo de controle do pacote sl. Conseguimos descobrir que até mesmo quem digitar errado o ls esquecendo o <Caps Lock> ligado vai ser zoado (veja que possui um binário dentro do /usr/bin chamado LS). Chega de sl, vamos removê-lo do sistema. Quando instalamos, o pacote.deb teve que ser apresentado ao dpkg, mas agora que ele já está no sistema, como podemos lembrar, existem listas que o registraram e agora só precisamos indicar o nome da aplicação, e não do pacote. # dpkg r sl 22

22 (Lendo banco de dados arquivos e diretórios atualmente instalados). Removendo sl... Processando gatilhos para man db... Removido! E agora vamos verificar novamente se o sistema está realmente alerta: # dpkg get selections sl sl purge Tá lá. Cadê o deinstall? Não tá lá, porque o deinstall só aparece quando temos um aplicativo desinstalado que possui seus arquivos de configuração ainda presentes na estrutura de diretórios do sistema. Você deve estar se perguntando, mas eu não usei o -P de purge. Realmente. Acontece que o purge aparece quando não existem os arquivos de configuração e a aplicação está desinstalada. No caso do sl, ele é um aplicativo muito simples, por isso, não possui arquivo de configuração. Ele sempre passa do status install para o status purge. Se nós tivéssemos instalado um pacote com arquivos de configuração, utilizando o -r para removê-los, os arquivos serão mantidos, enquanto com o -P os arquivos de configuração serão removidos. Como já vimos, foi muito fácil instalar o pacote sl. A instalação possui vários processos realizados, definidos pelos arquivos de controle, preinst e posinst. Se quisermos realizar a criação de todos os diretórios da estrutura que o aplicativo irá assumir, e criar todos os arquivos necessários para o seu pleno funcionamento, podemos simplesmente extraí-lo. Iremos realizar essas atividades de duas formas diferentes. A primeira será realizar a extração nos lugares definidos pelo desenvolvedor, e a segunda a extração será realizada a partir do diretórios especificado pelo administrador. Primeiro caso: # sl su: /usr/bin/sl: Arquivo ou diretório não encontrado # dpkg unpack sl_ _i386.deb Selecionando pacote previamente não selecionado sl. (Lendo banco de dados arquivos e diretórios atualmente instalados). Desempacotando sl (de sl_ _i386.deb)... Processando gatilhos para man db... # # sl Como esse pacote não exige que o administrador configure e execute procedimentos mais complexos, o simples fato de terem sido criados diretórios definidos pelo desenvolvedor já é o suficiente para que a aplicação funcione. Utilizando o dpkg -L você poderá verificar que todos os arquivos do pacote foram alocados nos seus respectivos lugares. Podemos inferir, então, que o -unpack é a etapa de criação de diretórios e alocação de arquivos já falada anteriormente. Mas e 23

23 se quiser instalar o pacote em um lugar diferente do especificado pelo desenvolvedor? # mkdir /Saci/Teste ; dpkg -x sl_ _i386.deb /Saci/Teste O comando acima criou o diretório /Saci/Teste e, logo após, foi desempacotado o conteúdo do sl... com toda sua estrutura a partir do diretório /Saci/Teste. Entre no diretório e verifique com o comando tree como tudo está. 24

24 COMPILANDO PROGRAMAS A PARTIR DO CÓDIGO FONTE Embora, atualmente, a maioria dos programas para o GNU/Debian estejam disponíveis para instalação por meio de pacotes, ainda assim, em alguns casos, é preciso compilar programas a partir de seu código fonte. Mas o que é compilar um programa? É a ação de criar um arquivo ins talador a partir do código fonte de uma aplicação adaptando-o ao sistema ao qual será instalado. Isso é necessário, porque algumas vezes uma aplicação possui versão criada para uma distribuição e não para outra. Podemos baixar o código fonte da aplicação e adaptá-la à nova versão. Adaptar é indicar ao executável instalador onde ficam alguns diretórios do sistema (como o /var/log para arquivos de logs e o /etc para arquivos de configuração, no Debian) que serão necessários durante a instalação do aplicativo. Também é possível, durante a compilação do programa, fazer configurações ativando módulos que por padrão não estão. Ou seja, compilar um pacote significa adaptá-lo a um sistema operacional para qual não foi criado e permitir configurações na instalação que visam otimizar o desempenho do aplicativo que é instalado. De modo geral, códigos fonte são distribuídos através de arquivos compactados. A grande maioria destes arquivos possui uma estrutura de diretórios, os arquivos fonte em si, um arquivo de configuração chamado Makefile, documentação e outros arquivos encapsulados em um arquivo no formato tar, com compressão de dados, usando gzip (.tar.gz ou.tgz ), ou bzip2 (.bz2 ou.tbz2 ). Q uando começarmos a usar o tar, para extrair arquivos compactados com o gzip utilizamos o parâmetro z, enquanto que para extrair arquivos compactados com o bz2 utilizaremos o parâmetro j. Uma forma de lembrar qual utilizar é BeiJando o GiZ. Para iniciar a compilação de um código fonte, a primeira coisa a se fazer é obter o código para ser compilado. Após o arquivo que contém o código fonte estar disponível localmente, você deverá extrair o conteúdo para um diretório adequado a compilação (ex.: /comp-louco). Os arquivos-fontes são, no padrão Debian, agrupados e compactados em arquivos tarball. Para realizar nossos testes iremos utilizar um arquivo fonte que possui o código do aplicativo TAL. Para extrair o seu conteúdo, use um dos comando abaixo: tar xvzf nome_do_arquivo.tar.gz ou tar xvjf nome_do_arquivo.tar.bz2 Após a extração do conteúdo do arquivo compactado, é necessário entrar no diretório que foi criado durante a extração dos arquivos utilizando o comando cd. O programa mais utilizado, para compilar códigos fonte no GNU/Linux é o gcc, um compilador C/C++ livre. De maneira geral, alguns pacotes GNU são necessários para compilar um programa de código livre. Os mais co- 25

25 muns na distribuição Debian, são os pacotes: make, autoconf, gcc, g++ e libc6-dev. A seguir listaremos os procedimentos gerais para configuração/compilação de códigos fontes no GNU/Debian, estes procedimentos podem variar um pouco dependendo do código que se está compilando mais informações sobre a compilação do código, você encontrara no arquivo README.txt descompactado junto com o código fonte. Executar o arquivo configure Este arquivo é um script shell que examina o siste- ma para verificar se diversas dependências necessárias para compilar o projeto serão satisfeitas. Ele deve ser executado digitando-se./configure dentro do diretório que contém o código-fonte do programa a ser compilado. Esse script, também pode conter parâmetros que podem ser passados na linha de execução para configuração de opções especificas, para consultar a lista de parâmetros disponíveis, tente executar o script./configure --help. Se o script configure não encontrar alguma das dependências necessárias para compilação do programa, um erro é gerado e a execução é finalizada automaticamente, gerando uma mensagem semelhante à abaixo: checking for SDL version >= no configure: error: *** SDL version not found! Nesse caso, nos falta a biblioteca de desenvolvimento (cabeçalhos) SDL versão ou mais recente. Para resolver este problema, é necessário instalar o pacote libsdl1.2-dev para resolver essa dependência. A maioria das bibliotecas necessárias para a compilação de programas no GNU/Debian têm o prefixo lib e o sufixo -dev, como por exemplo, libc6-dev, libsdl1.2-dev, etc. Após resolvidas todas as dependências. Executar o comado make O comando make utiliza as configurações que foram criadas pelo script configure para compilar múltiplos arquivos de código fonte de um projeto. Utiliza também um arquivo de descrição (chamado makefile ou Makefile ) que está presente no diretório onde o código fonte foi extraído. Seu conteúdo é composto de regras que definem as dependências entre arquivos fonte e os comandos necessários para a compilação. A partir deste arquivo, ele executa sequências de comandos que são interpretados pelo shell para realizar a compilação de maneira correta. Em seguida não havendo erros na execução do comando anterior executar o coman- do make install É o comando utilizado para compilar e em seguida executar o instalador do programa que acabamos de compilar. Alguns programas não possuem essa facilidade, nestes casos, o administrador terá também o trabalho manual de instalar o programa compilado corretamente, em geral, realizando atividades como copiar arquivos executáveis para diretórios como /usr, e os arquivos de configuração para /etc, etc. 26

26 GERENCIANDO DISCOS E PARTIÇÕES Neste capítulo, mostraremos como listar e obter informações a respeito das partições e discos existentes no sistema, além de aprendermos a criar, remover e formatar partições. O QUE SÃO PARTIÇÕES Partições são divisões feitas em um disco de armazenamento para delimitar um determinado espaço deste para instalação de um sistema de arquivos. Existem três tipos de partições: primárias, estendidas e lógicas. Os propósitos fundamentais da criação de partições são 3: (a) maior segurança através da divisão de dados de acordo com a natureza de seus dados (sistema, usuário, de inicialização); (b) divisão de acordo com o tamanho dos dados, afim de melhorar o desempenho através de sistemas de arquivos específicos; (c) ter mais de um sistema operacional no mesmo disco. Não existe nenhuma diferença top-down entre partições primária e lógica. A diferença real entre elas é o local onde são alocadas as informações acerca de uma partição. Isso foi explicado detalhadamente na apostila de Debian Básico, sendo interessante você tirar as teias de aranha dela e dar uma relembrada. Basicamente, o detalhamento (primeiro e último setor, número total de blocos, etc) de uma partição primária fica dentro do primeiro setor do disco rígido (MBR -Master Boot Record), enquanto as lógicas ficam fora da MBR. Podemos chamar este detalhamento, ou definição de uma partição, como cabeçalho da mesma. Podemos ter 4 cabeçalhos dentro da MBR. Estes cabeçalhos podem ser todos primários ou então de 0 a 3 primários e um estendido. A partição estendida só indica onde está, dentro do disco rígido e fora da MBR, o cabeçalho da primeira partição lógica. Ou seja, para que tenhamos pelo menos uma partição lógica, é necessário se ter uma partição estendida. Como esta trata apenas de um cabeçalho de ligação, dizemos que ele define uma partição não utilizável. Para saber quantas partições utilizáveis temos em um disco, precisamos: (a) quando existe partições lógicas, subtrair do número da última partição lógica o resultado de 4 menos o número de partições primárias; (b) quando não existe partições lógicas, verificar o número de partições primárias, que são todas utilizáveis. Ex: Se temos 2 partições primárias e a última partição lógica é a partição 12, então temos: = 10 partições utilizáveis Após criada e formatada, a partição passa a ser reconhecida pelo sistema operacional como um nó de dispositivo representado por um arquivo no diretório /dev. É como se uma partição fosse um dispositivo diferente, sendo que, na realidade, são apenas divisões lógicas do disco, estando todas dentro de apenas um dispositivo físico. Este arquivo receberá automaticamente um nome e através deste é possível identificarmos várias informações referentes ao hardware de armazenamento. 27

27 A identificação de discos rígidos no Linux é feita da seguinte forma: /dev/hda1 Indica o número da partição do HD. Letra que indica o dispositivo (a=primeiro, b=segundo...). Sigla que indica o tipo de dispositivo (hd=ide, sd=scsi ou sata). Diretório onde são armazenados dispositivos do sistema. T udo isso foi visto na apostila de Debian Básico, por isso, abordaremos de uma forma superficial o assunto, somente para que você possa recordar e tornar vivo tudo que já sabe. OBTENDO INFORMAÇÕES SOBRE AS PARTIÇÕES Sempre que for realizar qualquer atividade referente a partições, será muito interessante que o administrador saiba usar o comando abaixo, que trará as primeiras informações que possivelmente precisaremos para começar a agir e planejar suas tarefas: # fdisk l Disk /dev/sda: GB, bytes 255 heads, 63 sectors/track, cylinders Units = cylinders of * 512 = bytes Disk identifier: 0x9ebef679 Device Boot /dev/sda1 /dev/sda2 /dev/sda3 /dev/sda4 Start End Blocks Id System Linux Linux Linux swap / Solaris Linux Disk /dev/sdb: 4005 MB, bytes 16 heads, 32 sectors/track, cylinders Units = cylinders of 512 * 512 = bytes Disk identifier: 0xef6cfd35 Device Boot /dev/sdb1 28 Start End Blocks Id System b W95 FAT32

28 Deduza por si só! 1. Número de dispositivos físicos conectados: 2. Quantidade de partições em cada dispositivo: 3. Capacidade máxima de armazenamento do primeiro dispositivo: 4. Capacidade máxima de armazenamento do segundo dispositivo: 5. Quantidade de cilindros em cada dispositivo: 6. Quantidade de cabeças em cada dispositivo: 7. Arquivo que representa com certeza uma partição de área de troca: 8. A coluna Id identifica a partição ou o tipo de sistema de arquivos? 9. O sdb1 possui um sistema operacional instalado? 10. Qual é a causa de dump de backtrace e kernel panic num servidor proxy com squid no modo slabe do kernel? A questão 10 é apenas uma piada de mau gosto. É para você sentir que ainda falta chão, então continue estudando e crie uma boa base, para que depois você possa brincar com seu conhecimento durante a solução de problemas. Vale ressaltar que caso seu sistema possua discos utilizando técnicas de RAID via hardware, quando o comando for executado, os discos serão mostrados de acordo com as configurações RAID que estiverem em vigor no seu sistema. Por exemplo, numa configuração em RAID 1 (mirroring), apesar de existirem fisicamente dois discos na máquina, apenas um será mostrado. R AID (Redundant Array of Independent Disks) é um sistema de linearização de discos. É um sistema que tem dois objetivos que são atingidos de várias formas diferentes. Os objetivos são acelerar o armazenamento e carregamento de dados, e aumentar a segurança desse processo, com métodos de espalhamento de dados em discos diferentes. No link a seguir, existe uma animação que mostra o funcionamento de todos os tipos de RAID: Para sabermos quais outras opções temos para utilização do fdisk, basta digitarmos somente o comando: # fdisk /dev/sda ou # fdisk /dev/hda Serão listadas algumas informações sobre o disco e também será aberta a linha de comado do fdisk, onde digitando a opção m será exibida uma lista com as opções disponíveis para utilização na linha de comando do fdisk. 29

29 Não iremos ver nesta apostila o funcionamento de recursos do fdisk senão a verificação das informações com o parâmetro -l. Para realizar modificações nos sistemas de arquivos e manipulação de partições, usaremos o cfdisk. Podemos obter maiores informações sobre as opções do comando fdisk através do seu manual (man fdisk). PARTICIONANDO DISCO COM CFDISK Para iniciar o particionador como root digite cfdisk seguido do nome do dispositivo a ser particionado, por exemplo cfdisk /dev/hda. Lembre-se, /dev/hdx é utilizado para HD's IDE, já /dev/sdx é usado para discos SCSI, SATA e Pendrives. Para navegarmos nas opções do cfdisk, devemos utilizar as setas para cima e para baixo para navegar entre as partições e as setas para esquerda e para direita para selecionar as opções do menu inferior. Figura 2: Tela principal do cfdisk Para criar uma nova partição, deve-se selecionar o espaço livre do dispositivo e em seguida selecionar a opção Nova. Figura 3: Cfdisk - criando uma nova partição 30

30 Será, então, necessário definir se a partição será primária ou lógica. Utilizando as setas, selecione a opção desejada e pressione o <Enter> do teclado. Figura 4: Cfdisk - escolhendo o tipo de partição (primária ou lógica) A s partições estendidas não são definidas manualmente. Automaticamente, ao definir a primeira partição como Lógica, a estendida é criada e anula-se a possibilidade de se criar uma nova partição primária, mesmo que exista menos de 3 partições desta. O próximo passo é definir o tamanho desejado para a partição em criação. Sempre devemos definir o tamanho em megabytes. Figura 5: Cfdisk - definindo o tamanho da partição 31

31 Em seguida, devemos selecionar na listagem um dos tipos de partições que desejamos criar (partição linux, ntfs, fat, etc...). Para selecionar digite o número correspondente sobre o já existente e pressione a tecla <Enter>. Figura 6: Cfdisk - Selecionando tipo de partição Para concluir a criação da partição, vá até a opção <Gravar>, pressione <Enter>, digite yes por extenso (para evitar gravações de alterações por engano) e pressione <Enter> novamente. Para sair do cfdisk, use a opção Quit do menu inicial. Excluindo uma partição Para excluir uma partição, selecione-a e então vá em Excluir. Este procedimento excluirá a partição sem solicitar nenhuma confirmação antes de removê-lo. Após a exclusão, o espaço anteriormente ocupado pela partição passará a ser espaço livre podendo ser reutilizado. Salvando as alterações Devemos tomar muito cuidado sempre antes de selecionar e confirmar a opção gravar, pois assim confirmarmos esta operação todas as alterações feitas na tabela de partição serão gravadas não tendo mais como serem desfeitas. Sempre que fizermos qualquer alteração indesejada na tabela de partição basta sair da aplicação ( cfdisk ) sem gravar as alterações. SISTEMA DE ARQUIVOS Um sistema de arquivos é um conjunto de estruturas lógicas e de rotinas, que permitem ao sistema operacional controlar o acesso ao disco rígido. Existem diversos sistemas de arquivos diferentes, que vão desde sistemas simples como o FAT16, até sistemas como o NTFS, XFS e ReiserFS, que incorporam recursos muito mais avançados. 32

32 O sistema de arquivos é criado durante o processo de formatação da partição, após isso toda a estrutura necessária para leitura/gravação de arquivos e diretórios já estão prontas para serem utilizadas pelo sistema operacional. CRIANDO SISTEMA DE ARQUIVOS Podemos também criar uma partição sem definir o tipo dela, entretanto, para que uma partição fique funcional, temos obrigatoriamente que criar um sistema de arquivos em seu espaço. Para criar um sistema de arquivos nesse tipo de partição basta utilizar o utilitário mkfs especificando o tipo de sistema de arquivos que desejamos utilizar na partição. Abaixo um exemplo de uso deste utilitário: mkfs t xfs /dev/hda1 No exemplo acima, criamos um sistema de arquivos do tipo xfs na partição /dev/hda1. Essa é a maneira mais simples de se criar um sistema de arquivos numa partição criada sem um tipo definido. Também podemos usar as extensões do utilitário mkfs, para realizar a criação de sistemas de arquivos específicos. No exemplo abaixo faremos exatamente a mesma operação que a do exemplo anterior: mkfs.xfs /dev/hda1 33

33 GERENCIADOR DE PARTIDA GRUB O gerenciador de partida é o responsável por carregar o sistema operacional durante o processo de inicialização além de, nos casos onde houver mais de um sistema operacional, permitir que seja feita a escolha de qual sistema operacional deverá ser carregado. Este programa geralmente fica gravado ou numa no setor de boot de uma partição ativa ou na Master Boot Record (MBR) do disco. O GRUB (Grand Unified Boot Loader) é o gerenciador de partida padrão do Debian. Ele é um dos mais poderosos e funcionais gerenciadores de partida, é capaz de inicializar vários sistemas operacionais como Windows (9x, ME, NT, 2000, XP e Vista), Dos, Linux, GNU Hurd, *BSD, OS/2 etc. Podemos destacar também o suporte aos sistemas de arquivos EXT2, EXT3 e ReiserFS, FAT16 e FAT32 (Win 9x/ME), FFS (Fast File System usado no *BSD), minix (MINIX OS) etc. A o instalarmos uma máquina com dual boot, com os sistemas operacionais Linux e Windows, devemos sempre instalar primeiro o sistema operacional Windows. Pois o mesmo, durante sua instalação, grava suas informações de inicialização na MBR do disco sobrescrevendo todas as configurações nela existentes, consequentemente apagando o GRUB e suas configurações fazendo que o Linux, mesmo instalado, seja ignorado e iniciado diretamente o sistema operacional Windows. O GRUB utiliza o padrão Multiboot o que o torna capaz de carregar diversas imagens de inicialização (uma por vez) e módulos. Além de permitir buscar imagens do Kernel pela rede, por cabos seriais, suporta discos rígidos IDE, SATA e SCSI, informar a quantidade total de memória RAM ao sistema, tem interface voltada para linha de comandos ou menus de escolha, além de suportar sistemas sem discos e terminais remotos. Os principais arquivos utilizados pelo GRUB para inicialização do sistema encontram-se dentro dos diretórios /boot e /boot/grub. Dentro do diretório /boot encontramos os arquivos de kernel que são os responsáveis pelo carregamento do mesmo na memória. Dentro do diretório /boot/grub, encontramos os arquivos dos quais são carregados os parâmetros com as configurações para inicialização do sistema, dentre esses arquivos destacamos o menu.lst que é o arquivo que nos possibilita customizar as configurações do GRUB. TRABALHANDO COM DISCOS E PARTIÇÕES O GRUB trabalha com uma notação para apontar discos e partições, diferente da que estamos acostumados a ver em sistemas operacionais Linux. Para o GRUB independente do tipo de disco (IDE, SATA ou SCSI) ele sempre será representado pela sigla hd. O primeiro disco será representado pelo número 0 o segundo pelo número 1 e assim por diante. As partições são representadas da mesma forma que os discos a primeira partição criada será representada pelo 34

34 número 0 a segunda pelo número 1 e assim por diante. Abaixo segue tabela comparativa, através dela fica mais fácil visualizar as diferenças acima descritas: Disco IDE Dispositivo no Linux Disco SCSI ou SATA Dispositivo no GRUB Dispositivo no Linux Dispositivo no GRUB /dev/hda (hd0) /dev/sda (hd0) # Disco SCSI ID 0 /dev/hda1 (hd0,0) /dev/sda1 (hd0,0) # Disco SCSI ID 0, partição 1 /dev/hda2 (hd0,1) /dev/sda2 (hd0,1) # Disco SCSI ID 0, partição 2 /dev/hdb (hd1) /dev/sdb (hd1) # Disco SCSI ID 1 /dev/hdb1 (hd1,0) /dev/sdb1 (hd1,0) # Disco SCSI ID 1, partição 1 /dev/hdb2 (hd1,1) /dev/sdb2 (hd1,1) # Disco SCSI ID 1, partição 2 Disquete Dispositivo no Linux /dev/fd0 Dispositivo no GRUB (fd0) INSTALAÇÃO DO GRUB Após instalado o GRUB dificilmente precisaremos reinstalá-lo. As alterações ou adições de novos sistemas a serem carregados como opção para inicialização são feitas através de alterações no arquivo de configuração menu.lst, com o comando: # vim /boot/grub/menu.lst Normalmente, durante a instalação do GNU/Debian você será questionado se deseja ou não instalar o GRUB, se selecionada a opção de sua instalação automaticamente todos os sistemas operacionais instalados na máquina serão listados e configurados pelo GRUB para estarem disponíveis como opções de sistemas que podem ser inicializados. Algumas situações podem vir a apagar o GRUB da MBR do disco, por exemplo, como foi descrito anteriormente, uma máquina com dual-boot onde a instalação do sistema operacional Windows foi efetuada posterior a instalação do Linux. Nesses casos para podermos restaurar o GRUB e voltarmos a utilizar o sistema operacional Linux instalado, podemos, dentre as várias alternativas para restauração do grub, executar o comando abaixo por exemplo: # grub install /dev/hda Este comando grava o GRUB no MBR do primeiro disco rígido IDE do sistema e cria o diretório /boot/grub, onde estarão os arquivos necessários para o seu funcionamento. É interessante também, executar o comando: # update grub Este comando atualiza dinamicamente a lista de sistemas que podem ser carregados durante a inicialização da máquina, e os adiciona ao arquivo menu.lst automaticamente, conforme a instalação corrente. 35

35 N o entanto, para podermos executar os comando apresentados anteriormente para instalar o grub na MBR e para atualizar o arquivo menu.lst, precisamos primeiro iniciar a máquina a partir de um CD, pendrive, ou algum outro dispositivo que possua um sistema operacional que carregue um kernel que disponibilize um shell linux, montar a partição com o diretório /boot, montar as partições /proc e /dev, transformarmos a partição montada no nosso / e só então podemos utilizar aqueles comandos para restaurar o grub (instalá-lo na MBR e atualizá-lo)2. Na linha de comando usar os seguintes comandos: (para montar a partição com diretório /boot) # mount t ext3 /dev/sda2* /mnt (para reconhecer o HD é necessário montar o /dev e o /proc) # mount o bind /dev /mnt/dev # mount o bind /proc /mnt/proc (para que a partição montada vire o /) # chroot /mnt /bin/bash (para instalar o GRUB) # grub install (para atualizar o GRUB para que apareça a instalação do Windows) # update grub * Neste momento deve ser indicada a partição que contenha o diretório /boot CUSTOMIZANDO O ARQUIVO MENU.LST No arquivo menu.lst podemos fazer dois tipos de configurações: as configurações globais que afetam o funcionamento do GRUB de forma mais genérica e as configurações especificas que afetaram somente as imagens a serem inicializadas. Abaixo mostraremos um exemplo do arquivo menu.lst configurado onde serão inseridos comentários explicando cada um dos parâmetros configurados. # menu.lst See: grub(8), info grub, update grub(8) # grub install(8), grub floppy(8), # grub md5 crypt, /usr/share/doc/grub # and /usr/share/doc/grub doc/. ################################################################### ## default num # A opção default serve para que possamos escolher qual kernel (sistema) será iniciado. Para isso basta passar como parâmetro o número correspondente ao sistema a ser iniciado. A contagem para representação dos sistemas é feita através da ordem de aparição do parâmetro title neste arqui vo, deforma que a primeira ocorrência corresponderá ao número 0 a segunda ao número 1 e assim 2 Uma boa opção de cd bootavel que podemos utilizar para isso é o SYSTEMRESCUECD 36

36 por diante. #É possível também especificar 'saved' como argumento da opção default. Nesse caso será consi derado como opção padrão aquela que apresentar junto às suas configurações a opção 'savedde fault'. Default 0 ################################################################### ## timeout sec # A opção timeout permite a definição o tempo, em segundos, que o menu do GRUB ficará disponível para escolha do sistema a ser inicia do antes de iniciar automaticamente a opção definida como padrão. Timeout 5 ################################################################### ## Pretty colours # A opção color permite que façamos customizações das cores no menu do GRUB, através do co mando 'color a/b c/d'. Onde 'a' representa à cor das opções, o 'b' representa a cor do fundo, o 'c' re presenta as letras sob o cursor e o 'd' representa acor do cursor. As cores que podem ser aplicadas são: black (preto), blue (azul), green (verde), cyan (ciano), red (vermelho), magenta (púrpura), brown (marron) e ligth-gray (cinza claro). Ainda são é possível aplicar as cores das fontes ('a' e 'c') as cores: dark-gray (cinza-escuro), ligth-blue (azul-claro), ligth-green (verde-claro), ligth-cyan (cianoclaro), ligth-red (vermelho-claro), ligth-magenta (púrpura-clara), yellow (amarelo) e white (branco). color cyan/blue white/blue ################################################################### ## password [' md5'] passwd # A opção password permite a definição de uma senha que deverá ser informada para que seja possível a edição das opções de inicialização dos sistemas assim como a utilização da linha de comando do GRUB através do menu para escolha do sistema a ser iniciado. # É possível definirmos esta senha de duas formas sem criptografia ou com criptografia. A desvan tagem de utilizarmos a senha sem estar criptografada é que qualquer usuário com permissão de leitura no arquivo menu.lst poderá descobrir qual a senha setada. Para definirmos uma senha não criptografada basta inserimos a senha desejada logo após a opção password, como mostra o exemplo abaixo. #password senha #Para definirmos uma senha criptografada basta inserirmos após a opção password o parâmetro '-md5' seguido da senha já criptografada, como mostra o exemplo abaixo: # password md5 $1$gLhU0/$aW78kHK1QfV3P2b2znUoe/3 ################################################################### 3 Para criptografarmos uma senha para utilização no GRUB basta entrarmos na linha de comando do GRUB e digitarmos o comando md5crypt digitarmos a senha desejada e copiarmos o resultado criptografado apresentado para o arquivo de configuração (menu.lst). 37

37 ##fallback num # Com esta opção podemos definir um segunda opção do menu do GRUB para ser carregada caso a inicialização do kernel definido como default falhar. Para o correto funcionamento deste parâmetro o mesmo deve ser utilizado junto com o parâmetro 'hidenmenu'. fallback 1 ################################################################### ##hidenmenu=opção # Este parâmetro oculta a exibição do menu do GRUB de forma que é exibida apenas uma mensa gem com opção para visualização do menu de cordo com o tempo definido no parâmetro 'timeout' e esgotado o tempo é automaticamente iniciada a opção default. hidenmenu=true ################################################################### # Put static boot stanzas before and/or after AUTOMAGIC KERNEL LIST ## Abaixo encontraremos a seção de opções default, esta seção nunca deve ser descomentada. Os parâmetros passados nesta seção serão utilizados na configuração do GRUB quando for executado o comando 'update-grub' ou quando for instalada alguma atualização de segurança do GRUB. ## ## Start Default Options ## ## default kernel options ## default kernel options for automagic boot options ## If you want special options for specific kernels use kopt_x_y_z ## where x.y.z is kernel version. Minor versions can be omitted. ## e.g. kopt=root=/dev/hda1 ro ## kopt_2_6_8=root=/dev/hdc1 ro ## kopt_2_6_8_2_686=root=/dev/hdc2 ro # kopt=root=/dev/hda4 ro vga=791 quiet splash ## default grub root device ## e.g. groot=(hd0,0) # groot=(hd0,1) ## should update grub create alternative automagic boot options ## e.g. alternative=true ## alternative=false # alternative=true ## should update grub lock alternative automagic boot options ## e.g. lockalternative=true lockalternative=false ## lockalternative=false additional options to use with the default ## boot option, but not with the alternatives e.g ##defoptions=vga=791 resume=/dev/hda5 # defoptions= ## should update grub lock old automagic boot options ## e.g. lockold=false ## lockold=true # lockold=false 38

38 ## Xen hypervisor options to use with the default Xen boot option # xenhopt= ## Xen Linux kernel options to use with the default Xen boot option # xenkopt=console=tty0 ## altoption boot targets option ## multiple altoptions lines are allowed ## e.g. altoptions=(extra menu suffix) extra boot options ## altoptions=(single user) single # altoptions=(single user mode) single ## controls how many kernels should be put into the menu.lst ## only counts the first occurence of a kernel, not the ## alternative kernel options ## e.g. howmany=all ## howmany=7 # howmany=all ## should update grub create memtest86 boot option ## e.g. memtest86=true ## memtest86=false # memtest86=true ## should update grub adjust the value of the default booted system ## can be true or false # updatedefaultentry=false ## ## End Default Options ## # Logo após às opções padrão começam as configurações específicas dos sistemas operacionais que serão disponibilizados como opção para boot. Abaixo temos listado como opção de sistema para inicialização o Debian com kernel E logo abaixo temos esse mesmo sistema mas configurado para ser inicializado no modo singlemode (somente um usuário) que é o mesmo sistema operacional com o mesmo kernel com que é inicializado com parâmetros, de kernel, diferentes. # Os parâmetros abaixo representam: # - title: define a forma de identificação que o sistema operacional (kernel) assumirá no menu do GRUB durante a seleção do sistema a ser iniciado. Neste parâmetro podemos inserir como argumento qualquer texto que nos ajude a identificar o sistema operacional que será carregado. Ressaltamos que sempre deve ser evitado o uso de caracteres especiais. # - root: nesta opção indicamos em qual partição encontram-se os arquivos de inicialização (indicamos qual é a partição que contém o '/boot'). - kernel: nesta opção passamos qual o kernel deverá ser iniciado e logo após devemos indicar qual a partição que contém o diretório '/', após isso podemos passar alguns argumentos para o ker nel, que serão carregados durante sua inicialização. No exemplo abaixo estamos utilizando os argu mentos: 'ro' que faz com que seja carregado como somente leitura e 'vga=791' que define a resolu ção que será utilizada pelo shell nesse caso 1024x768 com cores. - initrd: nesta opção especificamos qual a imagem que será utilizada como Initial RAM no início do boot do sistema.4 - savedefault: salva uma informação de que no ultimo boot foi utilizado este bloco de configurações e a partir de então será considerada como opção padrão para inicialização no GRUB se na 4 Durante a inicialização a imagem do kernel é descompactada numa área de RAM disk (uma emulação de disco em memória RAM). 39

39 opção 'default' estiver configurada com o argumento 'saved'. title Debian GNU/Linux, kernel root (hd0,1) kernel /vmlinuz root=/dev/hda4 ro vga=791 initrd /initrd.img savedefault title Debian GNU/Linux, kernel (single user mode) root (hd0,1) kernel /vmlinuz root=/dev/hda4 ro vga=791 single initrd /initrd.img ### END DEBIAN AUTOMAGIC KERNELS LIST ################################################################### # As configurações abaixo funcionam apenas como um separador que separa as opções de carregamento do Debian das opções dos demais sistemas operacionais disponíveis. title root Other operating systems: ################################################################### # Abaixo (fora da seção DEBIAN AUTOMAGIC KERNELS LIST) encontramos as configurações dos sistemas operacionais não-linux. Essas configurações são escritas neste arquivo através do pacote os-prober que detecta todos os sistemas operacionais instalados e repassa essas informações ao gerenciador de boot (GRUB). Por serem detectadas automaticamente dificilmente temos a necessidade de edição dessas configurações. # Para configurarmos um sistema operacional windows no GRUB devemos utilizar os seguintes parâmetros de configuração: # - title: define a forma de identificação que o sistema operacional (kernel) assumirá no menu do GRUB durante a seleção do sistema a ser iniciado. # - root: para indicarmos em qual partição o Windows esta instalado. # - makeactive: para tornar a partição com o Windows ativa (o Windows só pode ser iniciado se sua partição for uma partição ativa). # - chainloder +1: faz com que seja feita a leitura do primeiro setor da partição carregando o gerenciador de boot do windows. title Microsoft Windows XP Professional root (hd0,0) savedefault makeactive chainloader +1 OUTROS PARÂMETROS DE CONFIGURAÇÃO DAS IMAGENS rootnoverify = Idêntico ao parâmetro anterior (root), mas não tenta montar a partição-alvo, o que é necessário para alguns sistemas como o DOS e o MS Windows. module = Faz com que algum módulo necessário para o boot seja carregado. Lembre-se 40

40 que estes não são módulos do kernel (módulos de som, rede, etc.) e sim módulos necessários ao boot de alguns sistemas, como por exemplo os utilizados pelo GNU Hurd. lock = Quando você desejar controlar se uma pessoa pode ou não iniciar um sistema que esteja listado nas opções do menu de boot, você pode utilizar esta opção que faz com que a senha especificada com o parâmetro password seja solicitada no momento em que o usuário tentar carregar a imagem em questão. pause = Emite uma mensagem na tela e espera uma tecla ser pressionada. hide e unhide = Esconde/mostra uma partição respectivamente. Estas duas opções, são necessárias quando houver mais de uma versão do DOS ou do Windows na máquina em partições diferentes, já que estes sistemas detectam automaticamente a partição. Vamos a um simples exemplo para ilustrar uma situação bem comum: Suponha que o Windows esteja instalado na primeira partição primária do primeiro disco rígido (hd0,0) e o DOS na segunda partição primária (hd0,1). Quando quisermos carregar estes sistemas, devemos ajustar o arquivo /boot/grub/menu.lst, adicionando as seguintes configurações: # Porção do arquivo /boot/grub/menu.lst title Windows hide (hd0,1) unhide (hd0,0) rootnoverify (hd0,0) chainloader +1 makeactive title Dos hide (hd0,0) unhide (hd0,1) rootnoverify (hd0,1) chainloader +1 makeactive map = Alguns sistemas não permitem ser iniciados quando não estão no primeiro disco (DOS, Windows 9x etc). Para resolver esta e outras situações deste tipo, o GRUB tem um comando que permite enganar tal sistema mapeando as unidades de disco do modo como lhe for mais conveniente. Imagine que você tenha o primeiro disco (hd0) com o GNU/Linux instalado e em um outro disco (hd1) com o Windows/DOS instalado. O Windows/DOS não permitem serem inicializados desta forma, e como solução, você poderia usar a seguinte entrada no arquivo de configurações /boot/grub/menu.lst do GRUB: title Windows 41

41 unhide (hd1,0) rootnoverify (hd1,0) chainloader +1 map (hd1) (hd0) makeactive Isso faz com que o disco (hd1), onde Windows/DOS está instalado, seja apresentado a este sistema como (hd0), um artifício que permitirá que estes sistemas sejam carregados normalmente. Através do menu do GRUB é possível alterar as configurações para inicialização do sistema que estiver selecionado pressionando a tecla <e>. Serão exibidos os parâmetros de configuração para inicialização daquele sistema, para alterar esses parâmetros basta selecioná-los e novamente novamente pressionar a tecla <e>, após feitas as alterações desejadas basta pressionar a tecla <enter> e para dar boot com as alterações efetuadas basta digitar a letra <b>. LINHA DE COMANDO DO GRUB O GRUB possui também o recurso de linha de comandos. Na linha de comando podemos utilizar maioria dos comandos usados no arquivo de configuração /boot/grub/menu.lst, além outros comandos que são exclusivos para uso na linha de comado. Temos duas formas de acessar o menu do GRUB: Com o sistema operacional carregado digitando, na linha de comando como root # grub Pressionando a tecla <c> enquanto aparece a tela do menu de seleção do GRUB. C aso o parâmetro password tenha sido especificado no arquivo /boot/grub/menu.lst, para que seja poder acessar o menu de comandos assim como as demais opções possíveis será necessário pressionar a tecla <p> e entrar com a senha válida. Abaixo iremos fazer uma breve descrição de alguns comandos que podemos utilizar na linha de comando do GRUB, onde só detalharemos os comandos mais relevantes. cat - Este comando permite verificar o conteúdo de um arquivo qualquer, o qual deve es- tar gravado em um dispositivo ligado a sua máquina. Embora seja um recurso útil, nenhuma permissão de acesso é verificada e qualquer pessoa que tenha acesso à linha de comandos do GRUB, poderá listar o conteúdo de arquivos importantes do seu sistema. Para contornar este problema, configure adequadamente o parâmetro password no arquivo /boot/grub/menu.lst. Não esqueça que ainda é possível utilizar um disquete com o GRUB para iniciar a máquina, o que permite usar a linha de comandos pelo disquete. 42

42 Para testar o comando cat siga os passos descritos a seguir: deixe o arquivo menu.lst somente com permissão de leitura e escrita para o dono (grupo e outros não devem ter nenhum tipo de permissão), com um usuário comum tente listar o conteúdo do arquivo menu.lst com o comando cat da linha de comando do sistema operacional (deverá ser exibida mensagem de permissão negada). Em seguida como root digite o comando grub para entrar na linha de comandos do GRUB, e seguida utilize, para listar o conteúdo do arquivo menu.lst, o comando cat passando, com a sintaxe do GRUB, qual a partição e o caminho onde se encontra o arquivo menu.lst e perceba que o conteúdo do arquivo será exibido. Veja abaixo um exemplo de execução dos comandos descritos nesse procedimento. # chmod 600 /boot/grub/menu.lst # su robsonp $ cat /boot/grub/menu.lst cat: /boot/grub/menu.lst: Permissão negada $ exit # grub grub> cat (hd0,0)/grub/menu.lst cmp - Este comando é utilizado para comparar dois arquivos. grub> cmp (hd0,0)/arquivo1 (hd0,0)/arquivo2 configfile - Carrega um arquivo de configuração do GRUB. Com este comando será aberto o menu do GRUB e decorrido o tempo configurado no arquivo menu.lst, caso nenhuma tecla seja pressionada, ocorrerá uma tentativa de inicialização da opção definida na opção default, será apresentada mensagem de erro de inconsistência na estrutura do sistema de arquivos e retornará ao menu do GRUB então basta digitar c para retornar a linha de comando. grub> configfile (hd0,0)/grub/menu.lst displayapm - Mostra informações sobre APM. displaymem - Mostra informações sobre a memória RAM. find - Permite encontrar um arquivo. A saída deste comando disponibiliza o nome com- pleto do caminho para o arquivo e a partição onde o mesmo está localizado. geometry - Mostra informações sobre a geometria reconhecida para seu dispositivo de armazenamento principal, e permite que você defina uma geometria personalizada, caso esta esteja sendo reconhecida de forma errada. help É um comando para ver a ajuda sobre a utilização de outros comandos. grub> help cmp 43

43 install - Instala o GRUB, embora não seja recomendado o uso deste comando direta- mente, já que é possível cometer erros facilmente e sobrescrever a tabela de partições de seu disco. setup - Este comando configura e instala o GRUB automaticamente. Para instalação do GRUB através deste comando precisamos, antes, indicar em qual partição estão os arquivos de inicialização (qual é a partição /boot) para depois podermos utilizar o comando setup para efetuarmos a instalação. grub> root = (hd0,0) grub> setup = (hd0) quit - Abandona a linha de comandos do GRUB. reboot - Reinicia o computador. boot - Efetua o carregamento através das opções definidas via linha de comando. Supo- nha um sistema operacional Linux instalado com o /boot (os seus arquivos de inicialização) na partição /dev/sda1 (hd0,0) e o diretório / na partição /dev/sda2 (hd0,1) utilizando o kernel Levando em conta essas configurações podemos passar os seguintes comandos na linha de comandos para efetuar o boot (a inicialização do sistema) pela linha de comando do GRUB. grub> root (hd0,0) grub> kernel /vmlinuz root=/dev/sda1 ro vga=6 grub> initrd /initrd.img grub> boot 44

44 RUNLEVEL PROCESSO DE BOOT Antes de aprendermos sobre runlevel vale a pena entendermos um pouco como funciona o processo de inicialização do computador. Ao ligarmos o computador, a BIOS executa uma série de operações antes de iniciar o boot do sistema operacional conforme sequência abaixo: 1. Computador é ligado pelo interruptor iniciando a energização dos circuitos elétricos; 2. BIOS executa várias operações; 3. BIOS lê o setor de boot (MBR); 4. Executa o programa encontrado (no Debian, por padrão, é o GRUB); 5. Carrega o kernel; 6. O kernel executa o init (PID=1. Isso mesmo, o init é uma aplicação); 7. O init lê o arquivo /etc/inittab; 8. O init executa os scripts de acordo com o inittab; 9. Sistema pronto para uso. Os runlevels são iniciados quando o kernel executa o init, que é o primeiro processo a ser executado e tem o PID igual a um. Uma característica específica deste processo é que ele não pode ser finalizado forçadamente. O init lê o arquivo /etc/inittab, onde estão definidos os primeiros parâmetros a serem configurados, como por exemplo, qual o runlevel, quais scripts devem ser executados por quais runlevels, quantos terminais virtuais nós teremos disponíveis em nossa máquina, etc. CONHECENDO OS RUNLEVELS Runlevels, ou níveis de execução, constituem uma maneira de controlar como a máquina será utilizada. Cada runlevel é configurado para que um determinado número de processos específicos estejam em execução. Convencionalmente temos 7 (sete) níveis de runlevels do 0 ao 6, onde, por padrão no Debian, o nível zero (0) é utilizado para realizar o desligamento (shutdown) normal da máquina; o nível 6 é usado para reinicializar (reboot) o sistema; o nível 1 (modo mono usuário) é o modo no qual o Kernel do Linux só carrega os recursos necessários para o funcionamento básico do SO e disponibiliza apenas acesso ao superusuário do sistema (root), de modo geral, para que este possa realizar a manutenção de algum ponto falho do sistema. Os runlevels 2 a 5 são utilizados para carga dos diferentes serviços providos pelo sistema, e possuem uma ca45

45 racterística comum entre si: atuarem no modo multiusuário. Através do comando init podemos alterar o nível de execução atual do sistema operacional. Para isso, devemos usar o comando init seguido de um número (de 0 a 6) representando o runlevel desejado. Abaixo um exemplo de uso do comando para alterar o nível de execução atual do sistema: # init 3 N os sistemas Debian, após a instalação do sistema operacional, os runlevels de 2 a 5 são todos iguais e apenas iniciam aplicações. Então, executando o comando acima, o script irá verificar que todos os serviços já estão carregados e não fará nada. IDENTIFICANDO O RUNLEVEL EM UTILIZAÇÃO Temos basicamente duas formas de se identificar o runlevel carregado. Uma delas é através do comando: # ps aux grep init A saída deste comando será algo como: root ? Ss 07:45 0:01 init [2] root pts/0 S+ 09:58 0:00 grep init Neste exemplo, o nível de execução atual do SO é o 2, representado pela indicação init [2] presente na primeira linha da saída do comando. Outra forma de se identificar o runlevel carregado é através do comando runlevel, como no exemplo abaixo: # runlevel A saída deste comando será algo como: N 2 O N 2 da saída do comando runlevel, indica que o nível de execução atual do sistema é o 2, se você mudar o nível para outro qualquer, o nível anterior será mostrado no lugar do N exibido na saída acima. Desta forma é possível verificar qual foi o último e o corrente. O ARQUIVO /ETC/INITTAB Durante o processo de inicialização, o init utiliza durante sua execução o arquivo /etc/inittab para configurar cada runlevel do sistema. Este é o principal arquivo de configuração do boot do sistema. Nele são especificadas diversas opções que definirão o perfil do sistema. A configuração deste arquivo, apesar de algumas variações, obedece basicamente o se46

46 guinte padrão: id:runlevel:ação:diretório id - identificador "exclusivo" para cada linha do arquivo. Deve estar limitado a 2 caracteres. runlevel - identifica em qual runlevel esta linha deve ser executada. Pode definir um ou mais de um runlevels. ação - identifica a ação a ser tomada. O campo ação pode ter um dos seguintes valores: respawn - O processo será reiniciado assim que for finalizado; wait - O processo será executado quando o sistema entrar no runlevel especificado e o sistema aguardará a finalização deste processo; once - O processo será executado quando o sistema entrar no runlevel especificado; boot - O processo será executado durante o boot do sistema; bootwait - O processo será executado durante o boot do sistema, que aguardará a sua finalização para continuar; off - Não faz nada; initdefault - especifica o runlevel que o sistema deverá entrar após o boot do sistema. Caso este parâmetro não seja informado, o init irá questionar qual o runlevel a ser utilizado. O campo processo é ignorado. sysinit - O processo será executado durante o boot do sistema, antes de qualquer referencia dos parâmetros boot ou bootwait. O campo runlevel é ignorado; powerwait - O processo será executado quando o init receber uma mensagem de falha na alimentação elétrica da máquina. O init aguardará a finalização deste processo; powerfail - Idêntico ao powerfail, com a diferença de que o init não aguardará a finalização deste processo; powerokwait - O processo será executado quando o init for informado de que a alimentação elétrica foi restabelecida; powerfailnow - O processo será executado quando o init for informado de que a alimentação elétrica da máquina (bateria, no-break) está quase vazia, e que a energia está falhando. ctrlaltdel - O processo será executado quando o init receber o sinal SIGINT, que significa que a sequencia de teclas <Ctrl>+<Alt>+<Del> foi pressionada; kbrequest - O processo será executado quando o init receber um sinal do dri47

47 ver do teclado informando que uma sequencia especial de teclas foi pressionada. A documentação para esta função ainda não está completa, para maiores informações veja o pacote kbd-x-xx. Diretório caminho completo do diretório onde se encontram os scripts a serem executados. Analisando as principais linhas de configuração do arquivo /etc/inittab. # /etc/inittab: init(8) configuration. # $Id: inittab,v /01/25 13:35:21 miquels Exp $ # A linha abaixo esta definindo o runlevel padrão. id:2:initdefault: # Primeira ação a ser executada durante o processo de boot, com inicialização dos scripts de carre gamento do kernel. si::sysinit:/etc/init.d/rcs # O que será carregado no modo mono-usuário ~~:S:wait:/sbin/sulogin # Runlevel 0 desligará a máquina. # Runlevel 1 modo mono-usuário (single-user). # Runlevels 2-5 Modo Multiusuário (multi-user). # Runlevel 6 reinicialização do sistema. # As linhas abaixo configuram cada runlevel para serem executados quando o sistema entrar no runlevel especifico. l0:0:wait:/etc/init.d/rc 0 l1:1:wait:/etc/init.d/rc 1 l2:2:wait:/etc/init.d/rc 2 l3:3:wait:/etc/init.d/rc 3 l4:4:wait:/etc/init.d/rc 4 l5:5:wait:/etc/init.d/rc 5 l6:6:wait:/etc/init.d/rc 6 # Inicializando os terminais (tty) 1:2345:respawn:/sbin/getty tty1 2:23:respawn:/sbin/getty tty2 3:23:respawn:/sbin/getty tty3 4:23:respawn:/sbin/getty tty4 5:23:respawn:/sbin/getty tty5 6:23:respawn:/sbin/getty tty6 ENTENDENDO O FUNCIONAMENTO DOS RUNLEVELS Ao carregamos um runlevel simplesmente executamos um conjunto de scripts localizados no /etc/ini.d/ com uma determinada sequencia de prioridade, através de links simbólicos existentes 48

48 nos diretórios /etc/rc?.d. Na distribuição GNU/Debian, os diretórios /etc/rc[0-6].d contém as ligações simbólicas para arquivos em /etc/init.d, que são acionados pelo init no nível de execução correspondente. Por exemplo, o arquivo S10sysklogd em /etc/rc2.d, é um link simbólico para /etc/init.d/sysklogd. O nome desses links simbólicos seguem um padrão através do qual é definido se o link simbólico iniciará ou interromperá a execução de um serviço em /etc/init.d, além indicar a prioridade para execução do script. Segue abaixo descrição sobre os padrões de nomenclatura dos links. Se um link é iniciado com a letra K (kill), quer dizer que o serviço será interrompido na- quele nível de execução. O que ele faz na verdade, é executar o script do serviço em questão em /etc/init.d seguido da opção stop. Se um link é iniciado com a letra S (start), quer dizer que o serviço será iniciado naquele nível de execução. Isto fará com que o script do serviço em questão em /etc/init.d seja invocado seguido da opção start. Por ordem, os links com a letra K são executado primeiro seguido pelos que iniciam pela letra S. A ordem com que são executados, depende também do valor numérico que acompanha o link, quanto menor o número antes será executado, por exemplo, os seguintes arquivos são executados em sequencia: S10sysklogd S12kerneld S20inetd S20linuxlogo S20logoutd S20lprng S89cron S99xdm Note, que os arquivos que iniciam com o mesmo número (S20*), são executados por ordem alfabética. INSERINDO/ REMOVENDO SCRIPTS DO RUNLEVEL A forma mais indicada para inserir ou remover scripts nos runlevels é utilizando a ferramenta update-rc.d. Para reconfigurarmos um script de inicialização ou um novo script incluso no diretório /etc/init.d que deve ser iniciado automaticamente basta usar: 49

49 # update rc.d nome start/stop NN runlevel. (...) Onde nome é o nome do script em /etc/init.d, a opção start para iniciar ou stop para parar o processo, NN faz referência à ordem de execução (prioridade) e o runlevel em que deseja incluir ou reconfigurar o scrip. O ponto faz parte da sintaxe do comando para separar as configurações realizadas através do update-rc.d, também havendo a necessidade de se colocar um ponto no final do comando. A Seguir alguns exemplos de uso: Vamos imaginar que criamos o script firewall.sh no /etc/init.d. Queremos que ele seja iniciado (argumento "start" passado) no runlevel de boot padrão (2) e fechado (argumento "stop") quando se desliga ou reinicia (runlevels 0 e 6) e queremos que ele seja um dos últimos processos a ser iniciado/parado. Para isso devemos utilizar o comando update-rc.d com a seguinte sintaxe: # update rc.d firewall.sh start stop stop Uma forma mais fácil de se utilizar o update-rc.d é com a utilização das configurações padrão, ou seja, iniciar nos runlevels 2, 3, 4 e 5 e finalizar nos 0, 1 e 6. Para isso basta usar o co mando: # update rc.d ssh defaults Também é possível utilizar a opção defaults do comando update-rc.d alterando sua prioridade de execução. Para isso basta após o parâmetro defaults informar também o numero referente a prioridade desejada. # update rc.d ssh defaults 37 Para removermos um serviço basta utilizarmos o comando update-rc.d com a sintaxe a seguir: # update rc.d f ssh remove Utilizando junto ao comando update-rc.d o parâmetro -n somente será mostrado na tela o resultado do comando, não sendo gravada nenhuma alteração nos runlevels. # update rc.d n ssh defaults 50

50 SISTEMA DE LOGS Arquivo de Log, é uma designação dada aos arquivos que são utilizados pelos programas do sistema para registrar suas atividades. Estes registros, em geral, são compostos por mensagens informativas, de alerta e de erro, geradas pelos programas durante sua execução. Estes arquivos possuem informações muito úteis para o administrador do sistema. Através deles é possível verificar o funcionamento do sistema, o comportamento dos programas, prevenir e corrigir erros e auditar o ambiente operacional. O Debian conta com uma estrutura central para armazenamento e funcionamento do sistema de logs, onde os arquivos de log são guardados comumente no diretório /var/log, e um serviço especial denominado syslog faz de forma unificada todo o registro de atividades do sistema (kernel e outros programas). A partir da versão lenny do DEBIAN os antigos daemons do syslog, syslogd - Linux system logging utilities e klogd - Kernel Log Daemon, foram substituídos por um único daemon o rsyslog. As vezes temos que administrar uma grande quantidade de computadores (geralmente servidores) ficando difícil o acompanhamento das logs em cada uma das máquinas. Para facilitar este controle podemos criar um servidor de logs, configurando uma máquina para receber os registros de log de todas as outras máquinas da rede, podendo inclusive ser configurado um banco de dados para armazenamento das logs (este procedimento de configuração de um servidor de log não será abordado nesta apostila). PRINCIPAIS ARQUIVOS DE LOG Dentro do diretório /var/log, podemos encontrar uma variedade de arquivos de log. Dentre eles, alguns merecem destaque: Nome do Arquivo Descrição É um arquivo de log geral do sistema. Guarda desde algumas messages mensagens do kernel até registros enviados pelos programas do usuário. Usado principalmente para registrar atividades do kernel e de syslog alguns serviços do sistema. É o mais importante arquivo de log de um ambiente Linux, juntamente com /var/log/messages. auth.log wtmp Usado para guardar informações sobre a autenticação de usuários no sistema. É um arquivo binário, que guarda a contabilidade de tempo de 51

51 acesso ao sistema por parte dos usuários. Para verificar o conteúdo deste arquivo, é necessário o uso do comando last. Xorg.[número].log dmesg Guarda informações relacionadas ao servidor X. Mensagens do Kernel no momento de inicialização do sistema. Pode ser lido, através do comando de nome homônimo. possui informações com maior nível de detalhes do que em debug /var/log/syslog e /var/log/messages. Interessante para verificação de problemas no sistema. LENDO UM ARQUIVO DE LOG O conteúdo dos arquivos de log sempre seguirão o seguinte padrão: Data Hora máquina Daemon Mensagem Sendo que o campo máquina é o nome do computador que registrou a mensagem (a máquina pode atuar como um servidor de logs registrando mensagens de diversos computadores em sua rede). O campo daemon, indica qual programa gravou a mensagem e o campo mensagem contem as informações referentes àquela log. CONFIGURANDO O SYSLOG As configurações do syslog são feitas através de seu arquivo de configuração /etc/rsyslog.conf. Neste arquivo podemos definir quais as facilidades e quais níveis gerarão registros de log além de definir o destino da log. Sua sintaxe para configuração é a seguinte: facilidade.nível destino Onde facilidade faz referência ao programa ou serviço que irá gerar a mensagem, nível faz referência importância da mensagem e destino ao local que será enviada a saída da log. Podendo esta saída ser um arquivo, uma tty, um pipe (se iniciado por um " "), um computador remoto (se iniciado por uma "@"), ou para determinados usuários do sistema (especificando os logins separados por vírgula) ou para todos os usuários que estão usando o SO ou através do comando wall (usando o caractere "*"). Segue abaixo uma relação das facilidades e níveis possíveis: Facilidades: auth - Mensagens de segurança/autorização (é recomendável usar authpriv ao invés deste). 52 authpriv - Mensagens de segurança/autorização (privativas). cron - Daemons de agendamento (cron e at).

52 daemon - Outros daemons do sistema que não possuem facilidades específicas. ftp - Daemon de FTP do sistema. kern - Mensagens do kernel. lpr - Sub-sistema de impressão. local0 a local7 - Reservados para uso local. mail - Sub-sistema de . news - Sub-sistema de notícias da USENET. security - Sinônimo para a facilidade auth (evite usá-la). syslog - Mensagens internas geradas pelo syslogd. user - Mensagens genéricas de nível do usuário. uucp - Sub-sistema de UUCP. O caractere * (asterisco) - Confere com todas as facilidades. A lguns sinalizadores de facilidades como o security, emitem um alerta sonoro no sistema e enviam uma mensagem para console, como forma de alerta ao administrador e usuários que estão utilizando o sistema. Níveis: emerg - O sistema está inutilizável. alert - Uma ação deve ser tomada imediatamente para resolver o problema. crit - Condições críticas. err - Condições de erro. warning - Condições de alerta. notice - Condição normal, mas significante. info - Mensagens informativas. debug - Mensagens de depuração. none - Nenhuma prioridade. O caractere * (asterisco) - Confere com todos os níveis. Além destes níveis, os seguintes sinônimos estão disponíveis: 53

53 error - Sinônimo para o nível err. panic - Sinônimo para o nível emerg. warn - Sinônimo para o nível warning. A o selecionarmos um determinado nível além do nível selecionando também serão registradas as mensagens de todos os níveis de maior prioridade. É possível configurar mais de uma facilidade para cada nível para isso basta separar as facilidades por, (vírgula) e após listar todas as facilidades utilizar o. (ponto) para separar as facilidades do nível desejado. É possível também configurar várias facilidades com níveis diferentes para um mesmo destino, para isso basta separá-las por ; (ponto e vírgula). Conforme mostram os exemplos abaixo. auth,authpriv.* /var/log/auth.log No exemplo acima temos duas facilidades (auth e authpriv separadas por vírgula) registrando suas mensagens de todos os níveis (representados pelo caracter coringa * ) no arquivo /var/log/auth.log. syslog.*;auth,authpriv.notice /var/log/syslog Neste outro exemplo, temos todos os níveis da facilidade syslog e a partir do nível notice das facilidades auth e authpriv sendo registradas no arquivo /var/log/syslog. *.* /dev/tty8 No exemplo acima temos todas as facilidades em todos os níveis sendo registradas na tty8. Neste caso se acessarmos a tty8 veremos que as logs estarão sendo exibidas em tempo real (assim que são geradas) mas não estarão sendo gravadas em nenhum arquivo para uma consulta posterior. S empre utilize a tecla <TAB> ao invés da barra de espaços para separar os parâmetros do arquivo /etc/rsyslog.conf. Existem ainda 4 caracteres que garantem funções especiais: "*", "=", "!" e "-". A seguir uma breve descrição da função que cada um deles desempenha: O caractere * - Todas as mensagens da facilidade especificada serão redirecionadas. O caractere = - Somente o nível especificado será registrado. O caractere! - Todos os níveis especificados e de maior importância NÃO serão re- gistrados. 54

54 O caractere - - Pode ser usado para desativar a sincronização de escrita imediata do arquivo de log. Tem a vantagem de obter maior desempenho, porém, como a gravação não é síncrona, caso o sistema seja desligado abruptamente, você perderá a informação das atividades que ainda não foram salvas no arquivo. Os caracteres especiais "=" e "!" podem ser combinados numa mesma regra. LOGGER Este comando permite enviar uma mensagem para os arquivos de log do sistema. A mensagem é enviada aos arquivos, através do daemon rsyslog, ou via soquete do sistema, é possível especificar dados como prioridade, nível, nome de identificação do processo, etc. Seu uso é muito útil em scripts ou em outros eventos do sistema. Para podermos utilizarmos o comando logger num scrip precisamos primeiro configurar no arquivo /etc/syslog.conf uma facilidade para receber as mensagens geradas pelo scrip. Como vimos anteriormente as facilidades local0 a local7, são reservadas para usuários, então basta configurarmos estas facilidades para gravarem suas mensagens num determinado arquivo, como mostramos abaixo. local3.* /var/log/robsonlog.log A configuração acima faz com que as mensagens da facilidade local3 sejam gravadas no arquivo robsonlog.log, agora para o nosso scrip registrar suas logs neste arquivo basta utilizarmos nele o comando logger. Segue abaixo código do script testelogger.sh que foi criado para testarmos o uso do comando logger. #!/bin/bash logger -t $0 -p local3.warning teste usando comando logger num scrip Neste comando do logger foram utilizados dois parâmetros: o -t que permite adicionar uma tag (marcação) à mensagem, nesse caso utilizamos a variável $0 que em shell script retorna o nome do arquivo com o script, o outro parâmetro foi o -p. que permite definir o recurso do syslog que desejo utilizar, qual o nível que representa e a mensagem desejada para envio. Com isso o syslog já se encarrega de escrever no arquivo de log colocando essas mensagens e a data da execução. A saída desse comando no arquivo de log é: Jan 28 09:29:40 debianvm testelogger.sh: teste usando comando logger num script A sintaxe para utilização do comando logger é? 55

55 logger [opções] [mensagem] Onde: mensagem É a mensagem que será enviada ao daemon rsyslog para ser gravada num dos respectivos arquivos de log presentes no sistema. opções -i Registra o PID (número identificador) do processo. -s Envia a mensagem para a saída padrão (STDOUT) e para o serviço rsyslog. -f [arquivo] Envia o conteúdo do arquivo especificado como mensagem ao rsyslog. -t [nome] Especifica o nome do processo responsável pelo log que será exibido antes do PID na mensagem do syslogd. -p [prioridade] Especifica a prioridade da mensagem. Deve-se utilizar a notação facilidade.nível. Verifique os tipos de prioridade/níveis existentes no Linux no arquivo de configuração /etc/syslog.conf. O valor padrão que é utilizado caso este parâmetro não seja especificado é user.notice. -u [soquete] Envia a mensagem para o soquete especificado ao invés do rsyslog. Útil para enviar mensagens através da rede para um servidor de log. LOGCHECK É um programa usado para enviar um periodicamente ao administrador do sistema (através do cron ou outro serviço com a mesma função) alertando sobre os eventos que ocorreram desde a última execução do programa. Esta ferramenta pode ser muito útil se personalizada adequadamente para alertar ao administrador de eventos estranhos. O Logcheck pode ser totalmente personalizado assim enviará mensagens baseadas em eventos encontrados nos logs e passíveis de atenção. As mensagens do logcheck são tratadas por arquivos em /etc/logcheck e organizadas em categorias antes de serem enviadas por , isto garante muita praticidade na interpretação dos eventos ocorridos no sistema. O tipo de mensagem que será incluída/ignorada nos logs enviados pela ferramenta, podem ser ajustadas pelo administrador do sistema através desses arquivos/diretórios presentes em /etc/logcheck. Nomes de arquivos/diretórios contendo a palavra "ignore" são usados para armazenar expressões regulares que NÃO serão enviadas pelo logcheck. A instalação padrão inclui perfis para eventos ignorados e violações de políticas para três di56

56 ferentes configurações (workstation, server e paranoid), sendo que "server" (servidor) é o nível padrão, paranoid (paranoico) é somente recomendado para máquinas de alta segurança executando poucos serviços quanto forem possíveis e workstation (estação de trabalho) para máquinas relativamente não críticas. Para mais informações, leia /usr/share/doc/logcheck/readme.debian. Detalhes sobre como escrever regras estão explicados em /usr/share/doc/logcheck-database/readme.logcheck-database.gz. LOGROTATE Usado para fazer a rotação dos arquivos de log do sistema. A rotação de log é processo que consiste em guardar o arquivo de log que está sendo utilizado atualmente pelo sistema e fazer com que os daemons passem a utilizar um novo arquivo para armazenar os novos registros das atividades do sistema. Este processo também é conhecido como arquivamento de log. As tarefas do logrotate são programadas via cron ou outro serviço de agendamento disponível no sistema. Opcionalmente, os arquivos de log antigos poderão ser compactados para diminuir a utilização de espaço em disco ou enviados por . A rotação dos arquivos de log proporciona maior agilidade quando precisamos encontrar algum detalhe útil, o que seria mais difícil e demorado usando um arquivo de log muito extenso. O arquivo principal de configuração do logrotate é o /etc/logrotate.conf, segue abaixo exemplo de configuração do arquivo. #### As configurações abaixo, afetam globalmente o funcionamento do logrotate: # Faz a rotação do arquivos de log semanalmente weekly # Mantém as últimas 4 cópias de logs anteriores rotate 4 # Erros de não existência dos logs são enviados por ao usuário root mail root # Cria novos arquivos de log (vazios) após rotacionar os antigos create # O parâmetro compress é utilizado para fazer a compressão dos arquivos antigos. O parâmetro delaycompress é usado para que o primeiro log seja mantido compress delaycompress # Executam os scripts em prerotate e postrotate a cada vez que os logs forem arquivados nosharedscripts 57

57 # Definimos um diretório que poderá conter definições individuais de rotação de log para cada ser viço do sistema. Contudo, alertamos que diversas configurações individuais podem deixar a inter pretação deste arquivo confusa include /etc/logrotate.d # Define opções específicas para a rotação mensal de /var/log/wtmp. As opções definidas individualmente como neste exemplo, sobrepõem as opções globais definidas anteriormente. As definições para /var/log/wtmp, implicam que caso o arquivo atinja 5MB (size 5M) ele será arquivado, será criado um novo arquivo com permissão 0664 e pertencerá ao usuário root e o grupo utmp (create 0664 root utmp)e será mantida somente uma cópia do log anterior (rotate 1). /var/log/wtmp { monthly create 0664 root utmp size 5M rotate 1 } # Define opções específicas para a rotação mensal de /var/log/btmp. Neste caso, o parâmetro missingok fará com que sejam gerados alertas informando ao administrador que o arquivo não existe. /var/log/btmp { missingok monthly create 0664 root utmp rotate 1 } # Define opções específicas para a rotação semanal de /var/log/lastlog. /var/log/lastlog { missingok weekly create 0664 root utmp rotate 1 } # Define opções específicas para a rotação diária de /var/log/messages. Neste caso, o será arquivo ao atingir o tamanho de 1Mb (size 1M), então o novo arquivo será criado com as mesmas permissões do arquivo anterior. O comando killall -1 syslogd será executado após a rotação (postro tate)para que o daemon syslogd funcione corretamente, mas somente uma vez durante a rotação de vários arquivos de logs (sharedscripts). Serão mantidas as 10 últimas cópias (rotate 10) do arquivo /var/log/messages compactadas (o parâmetro compress foi especificado globalmente neste arquivo de configuração). /var/log/messages { daily size 1M sharedscripts postrotate /sbin/killall 1 syslogd endscript 58

58 rotate 10 } # Define opções específicas para a rotação mensal dos arquivos em /var/log/mirror/*. A falta desses arquivos não precisa ser notificada ao administrador (missingok), mesmo assim o parâmetro "nomail" evitará isto de qualquer forma. Os logs rotacionados não serão compactados (nocompress) e serão mantidas as últimas 7 cópias (rotate 7) dos arquivos. /var/log/mirror/* { montly nomail missingok nocompress rotate 7 } # Fim do arquivo de configuração Abaixo as opções que você pode utilizar no logrotate.conf. compress - comprimir os logs. co-mpresscmd - comprimir os logs com especificação do comando a utilizar. O padrão é gzip. uncompresscmd - definir o comando para descomprimir os logs. O padrão é gunzip. compressext - especifica a extensão usada para o arquivo de log comprimido. compressoptions - para possibilitar incluir opções aos comandos de compressão. Por exemplo: gzip -5. O padrão é a compressão máxima (-9). copy - copia o log sem modificar o original. copytruncate - copia o log e move o original para outro lugar. create [mode owner group] - Este é o comando usado para a criação de um novo arquivo de log vazio após a rotação. Você pode alterar as permissões, o dono do arquivo e o grupo. daily - rotacionar diariamente. delaycompres - Atrasa a compressão do log para a próxima rotação. extension [ext] - Inclui uma extensão para o arquivo de log. Se a compressão usada for a padrão, a extensão será.gz. ifempty - Rotaciona os logs mesmo quando vazios. include [file or directory] - Indica outros arquivos de configuração ou diretórios que tenham arquivos de configuração para o logrotate. 59

59 mail - envia um com logs extintos. mailfirst - envia um com os logs rotacionados. maillast - envia um com os logs que serão rotacionados, os logs originais. missingok - não enviar mensagem de erro no caso de um arquivo de log não existir. monthly - rotaciona os logs mensalmente. nocompress/nocopy/nocopytruncate/nocreate/nodelaycompress/nomail- negativas aos comandos correspondentes. nomissingok/noolddir/nosharedscripts/notifempty - negativas aos comandos correspondentes. olddir [directory] - guardar as versões rotacionadas em outro diretório. postrotate/endscript - comandos a serem executados após a rotação do log. prerotate/endscript - comandos a serem executados antes da rotação do log, caso o log seja rotacionado. firstaction/endscript - comandos a serem executados imediatamente antes dos prerotates comandos. lastaction/endscript - comandos a serem executados depois daqueles invocados através do -postrotate. rotate - comando para rotacionar os logs. size - rotacionar os logs quando ultrapassarem o tamanho indicado. sharedscripts - postrotate e prerotate serão executados para cada log que tenha a mesma identificação. Este comando faz com que sejam executados apenas uma vez. start - inclui um número para a base dos logs rotacionados, por exemplo: start 0 log.0. tabooext [+] list - mudar a lista de extensões taboo. weekly - rotacionar semanalmente. 60

60 CRON O cron é um serviço, carregado durante o processo de boot, que possibilita a programação de execução de processos e comandos para serem realizadas periodicamente5. É um recurso fundamental para automatização da administração do sistema e em outros casos onde se faz necessário o agendamento de execução de uma determina atividade. Podemos utilizar o cron basicamente para duas finalidades: para permitir aos usuários o agendamento da realização das suas tarefas desejadas; e para o agendamento de tarefas do sistema diariamente, semanalmente ou mensalmente. No processo de instalação do sistema são criados, por padrão, alguns diretórios especiais que usados na configuração de tarefas a serem executas pelo cron. São estes diretórios: /etc/cron.d /etc/cron.daily /etc/cron.hourly /etc/cron.monthly /etc/cron.weekly Com exceção do diretório /etc/cron.d, podemos utilizar esses diretórios para incluir tarefas a serem executadas no intervalo de tempo conforme o nome de cada diretório (daily = diário, hourly = horaria, monthly = semanal e weekly = mensal). Para isto basta copiarmos o script desejado com permissão de execução dentro de um dos diretórios conforme periodicidade desejada para execução do script. Por exemplo, se colocarmos um script dentro do diretório /etc/cron.hourly esse script será executados de hora em hora. O s horários e datas de execução desse script dentro desses diretórios, apesar de comunmente não haver a necessidade, podem ser alterados no arquivo /etc/crontab. Uma outra forma de utilização do cron é através da edição do arquivo /etc/crontab. Através deste arquivo podemos agendar uma tarefa para ser executada especificando o exato momento que queremos para execução assim como qual usuário irá executá-la. C omumente este arquivo só é utilizado para agendamento de tarefas a serem executadas pelo root. Para agendar uma nova tarefa, basta editar o arquivo /etc/crontab com qualquer editor de texto (como o pico ou vi ) e definir as configurações desejadas para execução da tarefa. Para isso deve ser obedecido o seguinte formato em sua sintaxe: 5 O que possibilita a execução dos comandos nas datas e horários especificados é o daemon do cron, que é acionado de minuto em minuto para verificação da existência de novas atividades a serem executadas. 61

61 [minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando] Conforme mostramos no exemplo abaixo: * * root run parts report /etc/cron.montly \_Comando que será executado \_ UID que executará o comando \_ Dia da semana (0 7) \_ Mês (1 12) \_ Dia do Mês (1 31) \_ Hora (0 23) \_ Minuto (0 59) O preenchimento de cada campo é feito da seguinte maneira: Minutos: informe números de 0 a 59; Horas: informe números de 0 a 23; Dias do mês: informe números de 0 a 31; Mês: informe números de 1 a 12; Dias da semana: informe números de 0 a 7; UID (Usuário): é o usuário que vai executar o comando (não é necessário especificá-lo se o arquivo do próprio usuário for usado); Comando: a tarefa que deve ser executada. N os comandos a serem executados podem ser usados os parâmetros normais de utilização na linha de comando. A ordem dos valores indica o nome correspondente do campo. Por exemplo, no campo mês, 1 a 12 quer dizer de "Janeiro a Dezembro". No caso de dias da semana, 0 a 6 quer dizer de "Do mingo a Sábado". O número 7 também pode ser usado. Neste caso, assim como o número 0, o 7 equivale ao dia de "Domingo". O caractere * é utilizado para especificar constância na execução, por exemplo se no lugar de especificação do horário utilizarmos * a tarefa será executada de hora em hora. 62

62 Também pode informar intervalos no preenchimento, separando os números de início e fim através de (hífen), assim como utilizar vírgula para uma listagem de números. Por exemplo, se quisermos que uma determinada tarefa seja executada pelo root às 9 horas e 30 minutos dos dias 10, 12, 25, 26, 27, 28 e 29 de todos os meses independente de qual seja o dia da semana devemos configurar o arquivo /etc/crontab da seguinte forma: * * 10,12,25 29 * * root comando Comando Usuário Dia da Semana Mês Dias Hora Minuto Após criarmos um novo agendamento de tarefa a ser realizada não é necessário reiniciar o daemon do cron, porque ele verifica seus arquivos a cada minuto. N unca podemos esquecer de incluir uma linha em branco no final do arquivo, pois caso contrário o último comando listado no arquivo /etc/crontab não será executa- do. Através do comando crontab também podemos editar o arquivo individual do usuário para agendamento de tarefas. Para isso basta digitarmos o comando: crontab e Será aberta uma janela onde poderemos configurar as tarefas de acordo com a nossa necessidade. A Sintaxex a ser utilizada para essa configuração é a mesma utilizada para configurar o arquivo /etc/crontab (vista anteriormente) apenas não sendo necessário especificar o usuário, pois nesse caso caso a tarefa será executada pelo usuário dono do arquivo. Para visualizarmos as tarefas agendadas para o usuário basta utilizarmos o comando: contab l Para removermos o arquivo individual do crontab, removendo assim todas as tarefas agendadas, através do comando: crontab r Para removermos somente uma tarefa devemos fazer através da edição (contrab -e) do arquivo. 63

63 COMANDOS ALIAS Sintaxe: alias <apelido>='<comando_linux>' N ão deve existir espaços antes e depois do = e, caso o <comando_linux> tenha mais de uma palavra, ele deve vir entre aspas simples. Muitas vezes durante execução de determinadas tarefas através da linha de comando nos deparamos com comandos extensos em que temos que utilizar vários parâmetros, e dependendo do que estamos fazendo ainda temos que repetir este comando com todos estes parâmetros com uma certa frequência. Para facilitar esse tipo de situação podemos utilizar o comando alias. Este comando permite criarmos uma espécie de apelido para os comando e programas. Com ele podemos atribuir um apelido para um comando que receba diversos parâmetros e a partir de então fazermos a chamada do comando através do apelido criado. Por exemplo, eu sempre utilizo o comando ls com os parâmetros -lh para exibir o conteúdo dos diretórios em forma de lista com o tamanho dos arquivos exibidos num formato mais inteligível. Ao invés de sempre digitar o comando e os parâmetros posso criar um alias que facilite o uso do comando através do comando abaixo mostrado. alias ll='ls lh' Após executarmos este comando poderemos listar o conteúdos de um diretório em forma de lista e com o exibição do tamanho dos arquivos de forma inteligível com o agora comando ll.este comando criado através do alias poderá ser usado no bash que estiver em execução, caso este bash seja fechado ou um outro seja aberto, dentro do próprio bash, o comando (apelido) criado deixará de existir. Para removermos um alias criado devemos utilizar o comando unalias <nome do alias> como mostra o exemplo abaixo: unalias ll Para removermos todos os alias criado de uma só vez basta utilizarmos o comando com o parâmetro -a, como no exemplo abaixo: unalias a Para criarmos um alias de forma definitiva, que não precise ser refeito quando um novo bash for iniciado devemos configurá-lo através de um dos arquivos de configuração do bash. 64

64 Temos três tipos de alias definitivos possíveis do configuração: O alias que é configurado somente para o usuário corrente através do arquivo.bashrc que encontra-se no home de cada usuário6. Segue abaixo trecho do arquivo de configuração.bachrc individual dos usuários. # Alias definitions. # You may want to put all your additions into a separate file like # ~/.bash_aliases, instead of adding them here directly. # See /usr/share/doc/bash doc/examples in the bash doc package. #if [ f ~/.bash_aliases ]; then #. ~/.bash_aliases #fi # enable color support of ls and also add handy aliases if [ x /usr/bin/dircolors ]; then eval "`dircolors b`" alias ls='ls color=auto' alias dir='dir color=auto' alias vdir='vdir color=auto' alias grep='grep color=auto' alias fgrep='fgrep color=auto' alias egrep='egrep color=auto' fi # some more ls aliases alias ll='ls lh' alias la='ls A' alias l='ls CF' O alias que é configurado para todos os usuários do sistema através do arquivo /etc/bash.bashrc. Segue abaixo trecho do arquivo bash.bachrc de configuração para todos os usuários. # enable bash completion in interactive shells if [ f /etc/bash_completion ]; then. /etc/bash_completion fi #alias para todos os usuários alias aa='echo "funcionou"' alias instala='sudo apt get install' O alias que é configurado para o root através do arquivo.bashrc que encontra-se 6 Em alguns casos o arquivo.bashrc pode não existir no home de algum usuário, sendo então necessária sua criação. 65

65 dentro da pasta /root 7. Segue abaixo trecho do arquivo.bachrc do root. # enable color support of ls and also add handy aliases if [ x /usr/bin/dircolors ]; then eval "`dircolors b`" alias ls='ls color=auto' alias dir='dir color=auto' alias vdir='vdir color=auto' alias grep='grep color=auto' alias fgrep='fgrep color=auto' alias egrep='egrep color=auto' fi # some more ls aliases alias ll='ls l' alias la='ls A' alias l='ls CF' # Some more alias to avoid making mistakes: alias rm='rm i' alias cp='cp i' alias mv='mv i' P ara configurarmos um alias nos arquivos de configuração devemos utilizar a mesma sintaxe utilizada na linha de comando. BC O comando bc é utilizado para realizar cálculos. Pode ser utilizado por linha de comando ou através de sua interface interativa. O bc não é exatamente uma calculadora mas sim uma linguagem para cálculos, que lembra vagamente a linguagem C. Algumas de suas características são: permitir apresentar os resultados dos cálculos com até 99 dígitos decimais antes e depois do ponto decimal, não haver a necessidade de uma interface gráfica para sua utilização, sua sintaxe ser bem simples quase idêntica a sintaxe utilizada na função calculadora do google para cálculos simples, permite utilizar construções como 'if', 'for', 'while', permite interação com o usuário além de permitir o uso de "programas" escritos para o 'bc' como se usássemos um shell script. Para podermos acessar a interface iterativa do comando bc basta na linha de comando digitar o comando, será aberta a sua interface que utilizaremos para realização dos cálculos como mostra o exemplo a seguir: 7 Assim como ocorre com o arquivo.bashrc dos usuários, este arquivo pode ser criado caso o mesmo não exista para o root. 66

66 Abaixo seguem as principais operações básicas do bc: Adição (+), subtração (-), multiplicação (*) e divisão (/). % (resto da divisão) ^ (potenciação) sqrt(x) (raiz quadrada de x) last (último resultado) quit para sair $ bc bc 1.06 Copyright , 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 600* last last last / last^ sqrt(last) /3 0 quit Se repararmos o resultado da última operação (2/3=0) temos a impressão de que há algo errado, mas na verdade o que aconteceu é que simplesmente não foi carregada uma biblioteca de operações matemáticas que permite o calculo com números decimais. Para carregarmos esta biblioteca para utilização com o comando bc basta utilizarmos o parâmetro -l. $ bc l bc 1.06 Copyright , 1997, 1998, 2000 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 2/3 67

67 Podemos também definir o número de casas decimais que serão usadas com a opção scale. $ bc l bc Copyright , 1997, 1998, 2000, 2004, 2006 Free Software Foun dation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. scale=2 2/3.66 scale=4;2/ A o utilizarmos o comando bc com o parâmetro -l alguns comandos matemáticos também ficam disponíveis, são eles; - s(x): o seno de x (x em radianos) - c(x): o cosseno de x (x em radianos) a(x): o inverso da tangente de x (retorna radianos). Se y = tangente de x (tg x), a(y)=x l(x): o logaritmo natural de x. (ln x) e(x): a função exponencial ( e^x ) (exp x) É possível definirmos funções a partir das definições matemáticas, no entanto essas definições serão perdidas que a interface do bc for finalizada. Segue abaixo exemplo abaixo de definição de função. $ bc l bc Copyright , 1997, 1998, 2000, 2004, 2006 Free Software Foun dation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. define tan(x) {return s(x)/c(x)} tan(1) define ln(n) { return l(n); } define log(n) { return ln(n)/ln(10); } log(10)

68 Para evitarmos o transtorno de termos de sempre termos que refazer as definições toda vez que iniciamos a utilização do bc, podemos utilizar o recurso de carregar essas definições de um arquivo criado por nós. Para isso crie um arquivo com as definições que você queira implementar. $ vim defmat.bc #!/usr/bin/bc l #incira as definições desejadas define ln(n) { return l(n); } define log(n) { return ln(n)/ln(10); } define tan(x) { return sin(x)/cos(x); } Dê permissão de execução ao arquivo criado. $ chmod +x defmat.bc Em segida basta utilizar o comando bc indicando que o arquivo criado deve ser carregado. As funções definidas no arquivo já estarão carregadas e prontas para serem utilizadas. $ bc l defmat.bc bc Copyright , 1997, 1998, 2000, 2004, 2006 Free Software Foun dation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. log(10) Como podemos perceber o bc pode ser utilizado como uma calculadora programável capaz de trabalhar com a utilização de funções, definição de variáveis, laços de repetição, estruturas condicionais, etc. A baixo mostraremos um pouco dos conceitos básicos para utilização desse recurso de programação. Podemos definir variáveis e atribuir um determinado valor a elas através do comando: var = valor No exemplo acima que o conteúdo da variável 'var' como sendo 'valor' que representa um valor numérico qualquer. Por exemplo: var = 5 define o valor de var como sendo 5. Uma outra expressão que podemos utilizar é: var += valor: Onde da mesma forma que vimos anteriormente 'var' representa o nome da variável e 'valor' representa um valor numérico qualquer. Essa expressão equivale a: 69

69 var = var + valor Como mostramos no exemplo abaixo var = 10 var += 20 Efetuando as expressões mostradas acima o valor da variável var fica igual a 30. A lém da atribuição += para somar ainda podemos utilizar -= para subtrair, *= para multiplicar e /= para dividir. Temos também os operadores de comparação: == que define igualdade x == y!= que define diferença x!=y < que define menor que x<y <= que define menor ou igual x<=y > que define maior que x>y >= que define maior ou igual x>=y Temos também os operadores &&, e!. para entendermos estes vamos considerar que e1 e e2 são 2 expressões numéricas. e1 && e2 Neste caso será retornado o valor 1 se as 2 expressões forem diferentes de zero. Ou seja retornará verdadeiro caso ambas as expressões sejam verdadeiras. e1 e2 70

70 Neste caso retornará 1 se qualquer uma das 2 expressões forem diferentes de zero. Ou seja retornará verdadeiro caso qualquer uma das duas expressões seja verdadeira.!e1 Neste caso retornará 1 se o resultado da expressão for 0. Ou seja se a expressão for falsa retornará 1. Temos que tomar muito cuidado quando criamos as expressões, por exemplo na expressão x=2<7 ela não equivale a x=(2<7) mas sim a (x=3)<5. É possível ainda utilizar valores inseridos pelo usuário através do comando read(). Como mostra o exemplo a seguir: x = read() O comando acima faz com que o valor digitado pelo usuário seja armazenado na variável x. Como vimos anteriormente é possível definir funções para utilização no bc, para isso basta utilizarmos o comando define. Para isso devemos utilizar o comando define e entre { } (chaves) que servem para definir o inicio e final do bloco de código que será executado de uma só vez, dentro das chaves devemos colocar a combinação de operações que desejamos. Dentre os vários elemento que podemos utilizar num define destacamos: auto : que serve para definir uma variável local. print : que mostra mensagens especificada na tela. (equivalente ao printf em C) return : que retorna um valor. Esta opção deve ser usada no final da função, para retornar seu resultado final. Além de podermos utilizar as estruturas de condicionamento e repetição. If: é uma estrutura que efetua um teste lógico e de acordo com o resultado do teste executa uma determinada ação, sua sintaxe é: if (expressão) operação1 else operação2 Se o resultado de 'expressão' não for 0 (falso), será executada a operação1, senão (se o resultado for falso) será executa a operação2 (se presente). Segue abaixo um exemplo de utilização do if. if (d>=0) { return ( b + sqrt(d))/(2*a); } while: é uma estrutura de repetição que efetua um teste lógico e executa uma operação até 71

71 encontrar o valor 0 (falso) no teste lógico, sua sintaxe é: while (expressão) operação Nesta estrutura enquanto o resultado do teste lógico realizado na expressão der como resultado 0 (falso), será executa operação. Também pode-se sair do loop executando um comando 'break' dentro dele. Abaixo segue um exemplo: ultvalor = read() while (ultvalor!= 0) { ultvalor = read() dados += ultvalor contagem += 1 } No exemplo antes de iniciar o laço de repetição (loop) estamos criando e atribuindo a variável ultvalor um valor que será digitado pelo usuário. Em seguida, na estrutura while estamos testando se o valor digitado pelo usuário for diferente de zero, se este valor for diferente de zero será executado o bloco de código existente dentro das chaves e novamente irá efetuar o mesmo teste lógico até que o usuário digite o número 0 (zero), quando isso acontecer o loop será encerrado e as demais linhas de código da função serão executadas. for:é uma outra estrutura de repetição onde a variável de controle do loop é inicializad e incrementada junto aos teste lógico, sua sintaxe é: for (inicialização; condição; incremento) { operação } Nesta estrutura podemos definir, antes de entrar no loop o estado da variável de contro deo mesmo esse processo é o de inicialização, logo em seguida é feito o teste lógico que retornará um valor 1 (verdadeiro) ou 0 (falso) e enquanto o resultado deste teste lógico for 1 (verdadeiro) serão executadas as operações, no incremento podemos definir como vai ser modificado o valor da variável utilizada no teste do loop. Abaixo segue um exemplo: for (cont=1;cont<=10;cont++){ print cont dados +=cont } No exemplo acima temos a estrutura de repetição for onde a variável cont é iniciada com o valor 1 e é feito o teste lógico se a variável cont é menor ou igual a 10, enquanto o resultado deste teste for 1 (verdadeiro) será executado o bloco de código existente dentro das chaves, após a execução de tudo que houver dentro das chaves será executado o incremento cont++ que somará 1 ao valor da variável cont (cont = cont+1) e em seguida efetuará novamente o teste lógico e novamente executara o bloco de código existente entre as chaves até que a condição testada seja falsa (neste caso até que cont seja maior que 10). 72

72 Uma outra forma de se utilizar o comando bc é através da linha de comando concatenandoo à saída do comando echo. Como mostram os exemplos abaixo. $ echo "2*9 3" bc 15 $ echo "log(10)" bc l defmat.bc $ x=$(echo "3*5" bc) $ echo $x 15 Conhecemos um pouco sobre o comando bc vimos como usar os comandos básicos. Muito mais poderia ser visto com relação as possibilidades de funções para uso com o bc mas o aprofundamento nesta parte depende, do conhecimento em programação e da necessidade de cada um. Apesar de aparentemente ser um comando não muito interessante pode ser bem útil como uma calculadora programável e em shell scripts. LAST O comando last mostra um registro entrada e saída dos usuários, que são registrados no arquivo binário de log /var/log/wtmp. Sintaxe: last <opções> Quando utilizamos o comando last, por padrão é exibida a listagem, que vai do mais recente para o mais antigo, dos registros de entrada e saída de usuários com os seguintes campos: Nome do usuário Terminal onde ocorreu o evento O hostname (para conexões remotas) ou a console (para conexões locais). A data em que ocorreu o evento (login/logout), a hora de incio do evento (login) e a hora de finalização do evento (logout). Tempo (em Horas:Minutos) que o usuário esteve conectado ao sistema. C aso o usuário ainda esteja logado no sistema ao invés de trazer a hora de finaliza ção do evento (hora em que ocorreu o logout) e o tempo que o usuário permaneceu logado (duração do evento) será exibida a mensagem still logged in. 73

73 Podemos utilizar o comando last passando um argumento, que será pesquisado como uma expressão regulares durante a listagem, por exemplo, podemos passar o nome de um determinado usuário. # last robsonp robsonp pts/4 :0.0 Tue Sep 15 10:56 still logged in robsonp pts/3 :0.0 Mon Sep 14 18:45 still logged in robsonp pts/3 :0.0 Mon Sep 14 17:01 17:01 (00:00) robsonp pts/3 :0.0 Mon Sep 14 11:12 11:12 (00:00) robsonp pts/2 :0.0 Mon Sep 14 09:38 still logged in robsonp pts/1 :0.0 Mon Sep 14 09:06 still logged in robsonp pts/0 :0.0 Fri Sep 11 17:41 still logged in robsonp tty7 :0 Fri Sep 11 16:43 still logged in robsonp tty7 :0 Fri Sep 11 16:43 16:43 (00:00) robsonp pts/ Fri Sep 4 08:56 08:57 (00:00) robsonp pts/0 :0.0 Thu Sep 3 18:15 18:26 (00:10) robsonp pts/ Wed Sep 2 09:20 09:25 (00:04) robsonp pts/ Wed Sep 2 09:16 09:17 (00:01) robsonp tty1 Tue Sep 1 18:00 18:00 (00:00) wtmp begins Tue Sep 1 14:54: No exemplo acima temos todas as atividades de login e logout do usuário robsonp. Na primeira coluna informa o nome do usuário, a segunda informa o terminal acessado, a terceira mostra o hostname/ip das conexões remotas e a console das conexões locais, a quarta coluna apresenta o dia da semana, o mês, o dia, a hora de início e de término da conexão 8, e a última coluna trás o tempo total de duração da seção. Podemos ainda utilizar o comando last com os seguintes parâmetros: -n [num] mostra na listagem somente número de linhas passada com o parâmetro, a partir do início da listagem. -R faz com que não seja exibido, na listagem, o campo hostname. -a faz com que o campo hostname seja exibido na última coluna. -d consulta o DNS para resolver os IP remotos exibindo assim, quando possível, o nome DNS, no lugar do endereço IP. -i força para que seja mostrado o endereço IP ao invés do nome DNS nas conexões remotas. Segue abaixo alguns exemplos de utilização do comando last. # last a robsonp robsonp pts/4 robsonp pts/3 Tue Sep 15 10:56 still logged in Mon Sep 14 18:45 still logged in :0.0 :0.0 8 As conexões não encerradas apresentam a mensagem still logged in no lugar da hora de encerramento e do tempo de acesso. 74

74 robsonp robsonp robsonp robsonp robsonp robsonp robsonp robsonp robsonp robsonp robsonp pts/3 Mon Sep 14 17:01 17:01 (00:00) :0.0 pts/3 Mon Sep 14 11:12 11:12 (00:00) :0.0 pts/2 Mon Sep 14 09:38 still logged in :0.0 pts/1 Mon Sep 14 09:06 still logged in :0.0 pts/0 Fri Sep 11 17:41 still logged in :0.0 tty7 Fri Sep 11 16:43 still logged in :0 tty7 Fri Sep 11 16:43 16:43 (00:00) :0 pts/0 Fri Sep 4 08:56 08:57 (00:00) pts/0 Thu Sep 3 18:15 18:26 (00:10) :0.0 pts/0 Wed Sep 2 09:20 09:25 (00:04) pts/0 Wed Sep 2 09:16 09:17 (00:01) wtmp begins Tue Sep 1 14:54: No exemplo acima foi usado o parâmetro -a para que a coluna com os hostnames fosse apresentada como a última coluna da listagem, facilitando assim sua identificação. # last n 2 robsonp robsonp pts/4 Tue Sep 15 10:56 still logged in robsonp pts/3 Mon Sep 14 18:45 still logged in wtmp begins Tue Sep 1 14:54: :0.0 :0.0 No exemplo acima utilizamos a opção -n 2 para que só fossem exibidas as 2 (duas) primeiras linas da listagem. # last R robsonp robsonp pts/4 Tue Sep 15 10:56 still logged in robsonp pts/3 Mon Sep 14 18:45 still logged in robsonp pts/3 Mon Sep 14 17:01 17:01 (00:00) robsonp pts/3 Mon Sep 14 11:12 11:12 (00:00) robsonp pts/2 Mon Sep 14 09:38 still logged in robsonp pts/1 Mon Sep 14 09:06 still logged in robsonp pts/0 Fri Sep 11 17:41 still logged in robsonp tty7 Fri Sep 11 16:43 still logged in robsonp tty7 Fri Sep 11 16:43 16:43 (00:00) robsonp pts/0 Fri Sep 4 08:56 08:57 (00:00) robsonp pts/0 Thu Sep 3 18:15 18:26 (00:10) robsonp pts/0 Wed Sep 2 09:16 09:17 (00:01) wtmp begins Tue Sep 1 14:54: No exemplo acima utilizamos o parâmetro -R para que fosse excluída, na exibição da listagem, a coluna com os hostnames. Esta opção é muito utilizada nos casos onde só há conexões locais na máquina. LASTLOG Este comando mostra informações referentes ao ultimo login dos usuários cadastrados no 75

75 sistema. Essas informações veêm numa listagem que apresenta o nome usado no login, o terminal onde ocorreu a conexão e a hora da última conexão. Para obtenção dessas informações o comando lastlog pesquisa no arquivo /var/log/lastlog. Sintaxe: lastlog <opções> <argumentos do parâmetro>9 N os casos o usuário nunca chegou a efetuar login na máquina, é mostrada, na coluna de ultima conexão, a mensagem ** Nunca logou**. # lastlog Nome de Usuário Porta De Último robsonp pts/ Sex Set 4 08:56: faustomarinho **Nunca logou** rodrigosl **Nunca logou** fcamargo pts/3 ecelepar11940 Sex Set 11 11:09: jmmoura **Nunca logou** No exemplo acima temos a saída do comando lastalog sem ter sido passado nenhum parâmetro, o resultado é uma listagem dos usuários cadastrados para login na máquina em uso, com o terminal onde ocorreu o login, o hostsname a partir de onde foi feito o login e a data e hora do último login. Podemos passar como parâmetros para este comando as opções: -u <usuário> exibe informações referentes apenas ao usuário especificado. Também é possível passarmos como argumento para este parâmetro um número de UID ou um range de UID's a ser consultado. -t <dias> exibe informações referentes aos últimos logins dos usuários nos últimos x dia. Onde x representa o número passado junto ao parâmetro -t. -b <dias> exibe somente as informações referentes ao último login dos usuários cadastrados mais antigos que a quantidade de dias especificadas junto ao parâmetro -b. Segue abaixo um exemplo de utilização do comando lastlog. # lastlog u Nome de Usuário Porta De Último anapalmeira **Nunca logou** bpedrassani **Nunca logou** capaverde **Nunca logou** carmenb **Nunca logou** celia **Nunca logou** dsvieira **Nunca logou** 9 Os argumentos só precisam serem passados se o parâmetro utilizado requerer. 76

76 edeval **Nunca logou** No exemplo acima estão sendo listados as informações referentes aos usuários que possuem UID que vão de 1000 (mil) a 2000 (dois mil). Neste caso todos os usuários listados nunca efetuaram login na máquina em uso. NEWUSERS Com o comando newusers podemos criar vários usuários de uma única vez, através de uma relação de usuários existentes num arquivo. Ao utilizarmos este comando, o usuário é inserido no arquivo passwd, a senha é criptografada e inserida no arquivo shadown e o diretório pessoal do usuário (/home/<usuário>) é criado. Sintaxe: newusers <arquivo> O arquivo com os usuários a serem criados que será apontado para uso com o comando newusers deve ter a seguinte estrutura: user_name:senha:uid:gid:comentário:diretorio_pessoal:/bin/bash Segue abaixo um exemplo de arquivo Usuarios.txt configurado corretamente para inserção de vários usuários: joao:filho:1010:1010::/home/joao:/bin/bash maria:naosei:1011:1011::/home/maria:/bin/bash administrador:@dminstrador:1012:1012::/home/administrador:/bin/bash Para usarmos o comando newusers para inserção dos usuários constantes no arquivo acima descrito (Usuarios.txt) basta usarmos o comando abaixo: # newusers usuario.txt Executando este comando os usuários nele contidos serão criados, e inseridos nos grupos no arquivo referenciados, caso os grupos não existam os mesmo serão criados, e o diretório pessoal do usuário também será criado. STAT O comando stat é uma ferramenta extremamente útil para extrair informações de arquivo e sistemas de arquivos. Sintaxe: stat [opções] [arquivo] As opções do comando stat são: -L esta opção faz com que o link seja seguido para exibição das informações, ou seja, quando utilizamos esta opção na consulta de um link são exibidas as informações referentes ao 77

77 arquivo que o link referencia. -f esta opção faz com que sejam exibidas as informações referentes ao sistema de arquivos no qual pertence o arquivo consultado invés de trazer informações sobre o arquivo. -t esta opção faz com que as informações sejam exibidas de forma concisa. -c '<opções>' esta opção permite que seja passados parâmetros para definição do formato da saída deste comando, inserindo sempre uma nova linha ao término da exibição das informações. --printf ',opções>' esta opção é similar a opção anterior (-c), diferente apenas no fato de que esta opção permite a utilização de caracteres de escape e de que após a exibição das informações, por padrão, não é inserida uma nova linha. A seguir temos as principais opções que podem ser passadas como parâmetro com as opções -c e --printf, essas opções não são válidas para exibição de informações referentes a sistemas de arquivos. %a Exibe as permissões do arquivo no modo octal %A Exibe as permissões do arquivo no modo texto %b Exibe o número de blocos utilizados para alocação do arquivo %B Exibe, em bytes, o tamanho dos blocos listados pela opção %b %F Exibe informações sobre o tipo de arquivo %g Exibe o GID do arquivo %G Exibe o nome de do grupo do arquivo %h Exibe o número de hardlinks %i Exibe o número do Inode do arquivo %n Exibe o nome do arquivo especificado no comando %N 78 Exibe o nome do arquivo especificado no comando exibindo,para os links simbólicos, informações sobre o arquivo de referência %s Exibe o tamanho do arquivo em bytes %u Exibe o UID do dono da pasta %U Exibe o nome do dono do arquivo %x Exibe a data e hora do último acesso ao arquivo %y Exibe a data e hora da última alteração realizada no arquivo

78 A seguir temos as principais opções que podem ser passadas como parâmetro om as opções -fc e -f --printf na obtenção de informações sobre o sistema de arquivos. %b Exibe o total de blocos de dados no sistema de arquivos %f Exibe o total de blocos livres no sistema de arquivos %l %T Exibe o comprimento máximo para os nomes de arquivos e pastas suportado pelo sistema de arquivos Exibe o tipo do sistema de arquivos A seguir temos alguns exemplos de utilização do comando stat: ~# stat linksimbolico File: `linksimbolico' > `test' Size: 4 Blocks: 0 IO Block: 4096 link simbólico Device: 802h/2050d Inode: Links: 1 Access: (0777/lrwxrwxrwx) Uid: ( 0/ root) Gid: ( 0/ root) Access: :08: Modify: :41: Change: :41: ~# stat L linksimbolico File: `linksimbolico' Size: 28 Blocks: 8 IO Block: 4096 arquivo comum Device: 802h/2050d Inode: Links: 1 Access: (0644/ rw r r ) Uid: ( 0/ root) Gid: ( 0/ root) Access: :53: Modify: :53: Change: :53: Nos exemplos acima estamos, primeiro, utilizando o comando stat para exibir as informações referentes ao arquivo linksimbolico e, baseado nas informações retornadas, percebemos que se trata de um link simbólico. No segundo comando utilizamos a opção -L para que fossem exibidas as informações referentes ao arquivo que o link simbólico esta apontando. ~# stat f linksimbolico File: "linksimbolico" ID: Namelen: 255 Type: xfs Block size: 4096 Fundamental block size: 4096 Blocks: Total: Free: Available: Inodes: Total: Free: Neste outro exemplo, utilizamos a opção -f para que fossem exibidas as informações referentes ao sistema de arquivos que o arquivo linksimbolico pertence, ao invés de trazer as infor79

79 mações referentes ao arquivo. ~# stat c 'Arquivo=%n; Permissões=%a; Dono=%U; Grupo=%G' teste Arquivo=teste; Permissões=644; Dono=robsonp; Grupo=root No exemplo acima, utilizamos o comando stat com o parâmetro -c para personalizarmos a saída do comando sendo que o %n para mostrar o nome do arquivo, %a para mostrar as permissões no modo octal, %U para mostrar o dono do arquivo e %G mostrar o grupo do arquivo. ~# stat printf 'Arquivo=%n\nPermissões=%a\nDono=%U\nGrupo=%G\n' teste Arquivo=teste Permissões=644 Dono=robsonp Grupo=root No exemplo acima, utilizamos o comando stat de forma similar ao exemplo anterior só desta vez alterando o parâmetro -c por --printf e inserindo o caractere de escape \n para que as informações fossem exibidas uma em cada linha. Tanto neste exemplo quanto no anterior optei por escrever, antes de passar o parâmetro, um texto indicativo da informação apresentada. Esse texto indicativo é opcional. CONVERT Este comando faz parte do pacote imagemagick, ele possibilita a conversão de imagem entre os principais formatos de imagem (.png,.jpg,.gif,...). Além converter as imagem o convert possibilita a aplicação de uma grande quantidade de efeitos e até mesmo a criação de imagens. Sua sintaxe é: $ convert <arquivo origem> <opções> <arquivo destino> Abaixo mostraremos algumas das várias possibilidades que o comando nos traz. Imagine a seguinte situação, você tem uma pasta com várias imagens, por exemplo, no formato.jpg e você deseja criar um catálogo em PDF para apresentação dessas imagens de forma mais organizada. Com o comando convet conseguirmos criar este catálogo de forma simples e rápida, para isso basta, na pasta onde estão as figuras, digitarmos na linha de comando: $ convert *.jpg catalogo.pdf Uma outra possibilidade para este comando seria na versão de entre os principais formatos de imagens por exemplo, para convertermos um arquivo.jpg para.png basta: 80

80 $ convert arquivo.jpg novoarquivo.png Também é possível utilizarmos o comando convert para redimensionarmos uma imagem através da opção -resize. Para reduzirmos o tamanho de uma imagem na metade basta: $ convert arquivo.png resize 50% arquivoreduzido.png Figura 7: Exemplo resultado de uso do comando convert Para obtermos mais informações sobre as possibilidades de uso do comando convert podem ser encontradas no manual do comando. CONVMV Existem diferentes tipos de padrões de codificação de caracteres que podem ser aplicados aos arquivos. Sendo os dois mais utilizados o iso e UTF-8. Alguns sistemas operacionais mais antigos (windows xp e kurumin são alguns deles) utilizam o sistema de codificação, reconhecido pelos padrões internacionais como sendo do ocidente europeu, iso (este padrão também é usado no Brasil), mas um novo padrão começou a ser utilizado por várias distribuições e sistemas operacionais (debian, ubuntu e Windows Vista são exemplos) esse novo padrão é o UTF-8, que é considerado por muitos como a nova padronização internacional. E é justamente a co-existência desses dois padrões de codificação que acabam causando os problemas com caracteres especiais (palavras acentuadas no corpo e no nome dos arquivos). Um arquivo criado sobre codificação iso aparece com caracteres acentuados totalmente errados em um sistema configurado para entender a codificação UTF-8, e vice-versa. O comando convmv serve para resolvermos esse problema de codificação do nome dos arquivos. Pois com ele, podemos converter o nome dos arquivos do formato iso para UTF-8 ou vice e versa. Sua sintaxe é : $ convmv <opções> <arquivos ou diretórios> Para podermos converter o nome de um arquivo ou diretório devemos dizer qual a codificação atual, qual a codificação desejada e qual o arquivo ou diretório. Como mostra o exemplo abaixo: $ convmv f iso t utf 8 relat?orio.txt No exemplo acima a opção -f é o parâmetro utilizado para passar qual a codificação atual, e o parâmetro -t permite passarmos para qual codificação queremos alterar o arquivo. Quando 81

81 inserirmos o nome do arquivo substituímos o caractere estranho pelo caractere coringa?. Caso tivéssemos completado o nome do arquivo pressionando a tecla <tab> poderíamos também ter deixado o nome do arquivo com caractere que aparecer no terminal. O Comando acima descrito gerará a seguinte saída: Starting a dry run without changes... mv "./relat rio.txt" "./rela tório.txt" No changes to your files done. Use notest to finally rename the files. Essa saída nos mostra que a alteração pode ser feita sem erros. Após isso para gravar a alteração no arquivo basta repetirmos o comando utilizando a opção --noteste, como mostra exemplo abaixo. $ convmv f iso t utf 8 relat?rio.txt notest ICONV Como vimos anteriormente quando estudamos o comando convmv, existem vários padrões de codificação de caracteres o que pode causar problemas na exibição de caracteres especiais como acentuações, cedilha, etc... Com o comando iconv podemos converter a codificação de caractere de um arquivo para a mesma codificação utilizada no sistema, resolvendo assim o problema de exibição dos caracteres especiais. Sintaxe: iconv -f <codificação de origem> -t <codificação de saída> <arquivo> Quando utilizamos o comando iconv é exibido na tela o conteúdo do arquivo especificado no comando com a aplicação da codificação de caractere especificada no comando, mas não é feita nenhuma alteração no arquivo original. A seguir segue a visualização, através do terminal, de um arquivo com a codificação iso num sistema que utiliza a codificação UTF-8. $ cat texto Debian simultaneamente o nome de uma distribui o n o comercial livre (gratuita e de c digo fonte aberto) de GNU/Linux (amplamente utilizada) e de um grupo de volunt rios que o mant m volta do mun do. Uma vez que o Debian se baseia fortemente no projecto GNU, usualmente chamado Debian GNU/Linux. O Debian especialmente conhe cido pelo seu sistema de gest o de pacotes, chamado APT, que permi te: atualiza es relativamente f ceis a partir de vers es realmente antigas; instala es quase sem esfor o de novos pacotes e remo es limpas dos pacotes antigos. Atualmente o Debian Stable, se encontra na vers o 5.0, codinome "Lenny". O Debian Stable procura sempre man ter os pacotes mais est veis, assim, ele mant m o Gnome 2.22 e o KDE 3.5 por padr o. O grande fato dele conter pacotes mais antigos, ga rantindo a estabilidade, o grande foco para servidores. Agora vamos utilizar o comando iconv para visualização do arquivo na codificação correta. $ iconv f iso t UTF 8 texto 82

82 Debian é simultaneamente o nome de uma distribuição não comercial livre (gratuita e de código fonte aberto) de GNU/Linux (amplamente utilizada) e de um grupo de voluntários que o mantêm à volta do mun do. Uma vez que o Debian se baseia fortemente no projecto GNU, é usualmente chamado Debian GNU/Linux. O Debian é especialmente conhe cido pelo seu sistema de gestão de pacotes, chamado APT, que permi te: atualizações relativamente fáceis a partir de versões realmente antigas; instalações quase sem esforço de novos pacotes e remoções limpas dos pacotes antigos. Atualmente o Debian Stable, se encontra na versão 5.0, codinome "Lenny". O Debian Stable procura sempre man ter os pacotes mais estáveis, assim, ele mantém o Gnome 2.22 e o KDE 3.5 por padrão. O grande fato dele conter pacotes mais antigos, ga rantindo a estabilidade, é o grande foco para servidores. Acima temos a visualização apresentada anteriormente com a codificação de caractere como iso convertida para codificação UTF-8. No entanto essa alteração de codificação não foi gravada no arquivo, simplesmente foi exibida na tela. Para armazenarmos essa alteração de codificação precisamos utilizar o parâmetro -o <nome do arquivo> ou redirecionar para um novo arquivo. Como mostra os exemplos abaixo: $ iconv f iso t UTF 8 texto o texto_utf 8 ou $ iconv f iso t UTF 8 texto > texto_utf 8 Identificando a codificação de caractere do arquivo e a do sistema Para identificarmos qual a codificação de caractere de um arquivo podemos utilizar o comando file. # file texto.txt texto.txt: UTF 8 Unicode text, with very long lines No exemplo acima percebemos que o arquivo texto.txt utiliza a codificação de caractere UTF-8. # file texto texto: ISO 8859 text, with very long lines No exemplo acima percebemos que o arquivo texto utiliza a codificação de caractere ISO Para identificarmos qual a codificação de caracteres que esta sendo utilizada pelo nosso sistema operacional podemos utilizar o comando locale. O antigo charset padrão do Linux era o ISO (também conhecido como Latin1). Por isso, quando encontrarmos os parâmetros de configuração pt_br ou pt_br.iso são representações para a codificação de caractere ISO Se aparecer algo como pt_br.utf-8 representa que a codificação de caractere é UTF-8. # locale 83

83 LANG=pt_BR.UTF 8 LANGUAGE=pt_BR:pt:en LC_CTYPE="pt_BR.UTF 8" LC_NUMERIC="pt_BR.UTF 8" LC_TIME="pt_BR.UTF 8" LC_COLLATE="pt_BR.UTF 8" LC_MONETARY="pt_BR.UTF 8" LC_MESSAGES="pt_BR.UTF 8" LC_PAPER="pt_BR.UTF 8" LC_NAME="pt_BR.UTF 8" LC_ADDRESS="pt_BR.UTF 8" LC_TELEPHONE="pt_BR.UTF 8" LC_MEASUREMENT="pt_BR.UTF 8" LC_IDENTIFICATION="pt_BR.UTF 8" LC_ALL= No exemplo acima podemos perceber que a codificação de caracteres utilizada pelo sistema é o UTF-8. PASTE Este comando mescla o conteúdo de dois arquivos em colunas verticais, ou seja, mescla os arquivos deixando seus conteúdos lado a lado. Sintaxe: paste [arquivo 1] [arquivo 2] A seguir temos opções mais usadas do comando paste: -d '<caractere>' esta opção separa as colunas com o símbolo (caractere) especificado dentro das aspas. -s esta opção faz com que a concatenação seja feita em linhas ao invés de colunas, ou seja, o conteúdo dos arquivos serão exibidos em linhas ao invés de colunas. Temos a seguir alguns exemplos de utilização do comando paste: # paste a b 12 a 23 b 45 c 1 d 40 e 37 f No exemplo acima temos o arquivo a cujo conteúdo é: 12, 23, 45, 1, 40, 37 e um arquivo b cujo conteúdo é: a, b, c, d, e, f. Utilizamos o comando paste para exibir de forma concatenada o conteúdo dos arquivos. 84

84 # paste d '@' nomes pedro@yahoo.com.br marta@gmail.com vera@hotmail.com maria@celepar.pr.gov.br No exemplo acima temos um arquivo nomes que tem como conteúdo uma relação de nomes, e o arquivo que tem como conteúdo vários provedores de . Foi utilizado o comando paste com o parâmetro -d para inserir o como separador de colunas. # paste s a No exemplo acima usamos o mesmo arquivo a utilizado anteriormente, mas desta vez passamos o parâmetro -s para que o seu conteúdo fosse exibido em forma de linha e não de coluna. # cat a paste No exemplo acima temos uma outra possibilidade de uso do comando paste. Neste caso estamos utilizando o comando cat para visualizarmos o conteúdo do arquivo a e concatenamos a saída desse comando para uso com o comando paste. Foi feito uso do - (traço) possibilita definir o numero de colunas desejada para exibição do conteúdo do arquivo. Neste caso utilizamos 3 (três) - (traços) para que o conteúdo do arquivo a fosse exibido em 3 (três) colunas. CUT Este comando é muito útil e, em geral, seu uso ocorre de forma concatenada com outros comandos. O cut permite cortar trechos de colunas de um determinado arquivo ou de uma saída. Na utilização do do cut devemos sempre passar algum parâmetro determinado o que deverá ser exibido de cada coluna consultada, essa determinação pode ser feita, basicamente, pelo número de campos, pelo número de bytes ou pelo número de caracteres a serem exibidos. A sintaxe básica deste comando é: cut opções... [arquivo]... Antes de entendermos melhor a utilização do comando cut vamos conhecer as principais opções disponíveis para utilização como parâmetro do comando. -b BI-BF: para delimitarmos através pelo número de bytes, onde BI representa byte inicial e BF o byte final. -c CI-CF: para delimitarmos através pelo número de caracteres, onde Ci representa caractere inicial e CF caractere final. 85

85 -d <caractere> : para determinarmos qual caractere será considerado como delimitador de campo, onde devemos representar entre aspas duplas ou simples qual será o caractere delimitador. -f FI-FF: para determinarmos os campos desejados, onde FI representa campo (coluna) inicial e FF campo (coluna) final. A s expressões utilizadas com os parâmetros acima podem ser utilizadas, também com as seguintes variações (nas descrições a seguir consideraremos N para um número qualquer, utilizaremos como exemplo a opção -f mas estas variações podem ser utilizadas também para as opções: -b e -c ) -f 2-5,9-11,15 : neste exemplo estamos mandando exibir as colunas de 2 a 5 e de 9 a 11 e o 15 -f 5- : neste exemplo estamos mandando exibir todas as colunas a partir da quinta. -f -3 : neste exemplo estamos mandando exibir todas as colunas a partir da primeira até a terceira. E m nenhuma das expressões acima citadas é obrigatório o uso das aspas (sendo que também poderiam ter sido utilizadas aspas simples), mas por uma questão de melhor visualização do comando sugiro as mesmas sempre sejam utilizadas. Agora vamos ver alguns exemplos para melhor entendermos a utilização do comando cut. Vamos imaginar que por algum motivo estratégico foi solicitado que gerássemos uma lista de todos os usuários que possam logar numa determinada máquina cuja autenticação é local. Sabemos que as informações sobre os usuários cadastrados localmente no sistema estão no arquivo /etc/passwd e que nele tem várias informações não relevantes ao que necessitamos relatar. Para eliminarmos as informações não desejadas vamos utilizar o comando cut. Vamos analisar uma linha do passwd para entendermos melhor a sintaxe utilizado com o comando cut. Segue abaixo linha do arquivo /etc/passwd. parana:x:1000:1000:desktop Parana,,,:/home/parana:/bin/bash Através do exemplo acima podemos reparar que em cada linha do arquivo passwd sempre temos 7 campos separados por : (dois pontos), ou seja temos um padrão na separação (delimitação) dos campos. Visto isso esta na hora de usarmos o comando cut para separamos da exibição as colunas não desejadas. C omo citado anteriormente para usar o comando cut precisamos sempre passar algum parâmetro, para isso devemos ter em mente basicamente duas coisas: -1 Onde vamos cortar, ou seja, qual padrão será utilizado para cortar? (Neste momento definimos qual das opções será mais indicada para nossa necessidade, devemos cortar a partir de um determinado número de caracteres, devemos cortar por um determinado número de campos, etc...). 86

86 -2 Depois de cortar, o que vamos mostrar? (Após definido o padrão a ser utilizado basta indicar o que deve ser exibido). Para o nosso exemplo o mais indicado é utilizarmos a delimitação de campos uma vez que os temos bem definidos através dos : (dois pontos). A informação que precisamos esta na primeira coluna, ou seja, no primeiro campo do arquivo /etc/passwd, considerando isso, podemos utilizar o comando da seguinte forma: $ cut d : f 1 /etc/passwd No comando acima utilizamos o parâmetro -d para identificarmos o caractere que delimitaria os campos ( Corte em cima dos : (d = delimitador)), em seguida utilizamos o parâmetro -f para indicarmos o que deveria ser exibido, no caso somente a primeira coluna ( Mostre apenas o campo (f - field - campo) 1 (um) do arquivo passwd ). V ale observarmos que para que o comando cut funcione corretamente com os parâmetros acima utilizados todas as linhas do arquivo de origem dos dados devem ter o delimitador definido, no nosso caso todas as linhas devem ter : (dois pontos). Imagine agora uma outra situação onde você precisa listar o nome e a versão todos os pacotes que estão completamente instalados em seu sistema. Para ter o resultado esperado nós teremos que listar todos os pacotes instalados, filtrar aqueles que estão totalmente instalados e em seguida recortar as informações indesejáveis e exibir somente o nome e a versão dos pacotes instalados completamente. Para listarmos todos os pacotes instalados basta utilizarmos o comando: $ dpkg l grep ^ii Agora nos deparamos com um problema pois utilizando o comando cut conseguimos fazer exibir ou o nome do pacote ou a sua versão mas não ambas as informações como necessitamos. Para resolvermos esta situação basta utilizarmos o cut para armazenarmos estas informações em arquivos diferentes e depois unirmos seus conteúdos. $ dpkg l grep ^ii cut d' ' f3 > arq1 Com o comando acima nós gravamos o nome dos arquivos completamente instalados no arquivo arq1. Pois com o parâmetro -d' ' estamos definindo que o (espaço) é o delimitador de campo (coluna) e com o parâmetro -f3 estamos definindo que deve ser exibida a terceira coluna. $ dpkg l grep ^ii cut c 42 cut d' ' f1 > arq2 Com o comando acima gravamos as versões dos pacotes instalados no arquivo arq2. Note 87

87 que para isso usamos primeiro o parâmetro -c 42 para exibir todo o conteúdo a partir do 42 (quadragésimo segundo) caractere, pois o número de (espaços) que temos do final de cada nome de pacote até o inicio do número das versões não é homogêneo o impossibilita o uso das opções de campos. Em seguida utilizamos o comando cut com os parâmetros -d' ' para definir o delimitador como (espaço) e -f1 Para exibirmos somente a primeira coluna (a coluna da versões). Agora basta unirmos ambos os arquivos num só uma das opções que temos para fazer isso é utilizando comando paste, que estudaremos mais detalhadamente a seguir. Para conclusão do nosso exemplo basta utilizarmos o comando: $ paste d' ' arq1 arq2 > lista O resultado desse comando será um arquivo com o nome lista que contém a nossa relação com o nome dos pacotes e suas versões. Como mostra abaixo trecho do arquivo. xnest 2: xsane xsane common xserver xorg 1: xserver xorg core 2: xserver xorg input all 1: xserver xorg input evdev 1: DD A forma mais comum de utilização do comando dd é para copiar blocos de dados de um dispositivo de armazenamento, também podemos utilizar este programa para efetuar algumas conversões em arquivos. Quando utilizamos o comando dd para efetuarmos uma cópia de um dispositivo e armazenamento, todos os dados são copiados a nível de bloco, não interessando o tipo do sistema de arquivos utilizado no dispositivo. A sintaxe do comando é: dd if=<origem> of=<destino> <opções> Como mostra o exemplo acima após o comando dd temos o parâmetro if= onde especificamos a origem que pode ser um dispositivo (partição) ou um arquivo, em seguida temos o parâmero of= que assim como o parâmetro anterior pode receber a especificação de um dispositivo ou de um arquivo. Logo após passamos as opções do comando, sendo que a especificação das opções é facultativa. Este comando é muito útil em algumas situações práticas como por exemplo para limparmos os dados da MBR, fazermos cópias fiéis de uma partição ou até mesmo de um disco inteiro, etc. Dentre as opções disponíveis para serem passada com o comando dd destacamos as op88

88 ções: bs: através desta opção podemos definir o tamanho do bloco que será copiado, caso esta opção não seja passada com o comando, será adotado como tamanho de bloco o valor padrão e 4k. Quando definimos um tamanho de boco obrigatoriamente temos que passar também o parâmetro count. count: esta opção permite determinar a quantidade de blocos que serão copiados. Desta forma se quisermos copiar uma partição de 10GB, onde definimos que o tamanho do bloco é de 1GB, para copiarmos toda a partição deveríamos definir a quantidade de blocos a serem copiados como 10. conv: este parâmetro serve para efetuarmos a conversão de arquivos ou partições, junto com esta opção devemos passar um argumento que definirá que tipo de conversão será realizada. As principais opções são: ascii para converter de EBCDIC para ASCII ; ebcdic para converter de ASCII para EBCDIC ; lcase para alterar as letras de maiúsculas para minúsculas e ucase para alterar as letras de minúsculas para maiúsculas. Segue abaixo alguns exemplos de utilização do co,mando d. Para fazermos um backup da MBR podemos utilizar o comando abaixo listado. dd if=/dev/sda of=/home/parana/mbr.bkp bs=512 count=1 A linha de comando do exemplo acima esta fazendo uma cópia da MBR do disco sda no arquivo MBR.bkp. O parâmetro bs esta especificando o tamanho do bloco a ser copiado e o parâmetro count esta especificando o número de blocos a serem copiados. Para restaurarmos este backup basta efetuarmos este mesmo comando só que trocando o argumento passado para o of com o argumento passado para o if, como mostra o exemplo abaixo. dd if=/home/parana/mbr.bkp of=/dev/sda bs=512 count=1 No exemplo acima estamos especificando através do parâmetro if que a otrigem é o arquivo MBR.bkp, com o parâmetro of estamos especificando que o destino é o dispositivo sda, e com os parâmetros bs e count estamos especificando, respectivamente, o tamanho do bloco a e a quantidade e blocos a serem copiados. Uma outra possibilidade seria se quiséssemos na restauração manter as informações referentes à tabela de partição. Neste caso bastaria, no comando para restauração, especificar o tamanho de bloco como 446k, espaço da MBR utilizado para armazenar as informações de boot. Como mostra o exemplo abaixo. 89

89 dd if=/home/parana/mbr.bkp of=/dev/sda bs=446 count=1 T anto o gerenciador de boot quanto a tabela de particionamento do HD são salvos no primeiro setor do HD, a famosa trilha MBR, que contém apenas 512 bytes. Destes, 446 bytes são reservados para o setor de boot, enquanto os outros 66 bytes guardam a tabela de partição. (Site Guia do Hardware: fazendo-backup-recuperando-mbr-tabelaparticoes) Se quisermos limpar a MBR podemos utilizar o seguinte comando: dd if=/dev/zero of=/dev/sda bs=512 count=1 No exemplo acima estamos preenchendo com o valor zero os primeiros 512 bytes (a MBR) do disco. O parâmetro if=/dev/zero vai preencher o destino indicado, no nosso caso a MBR, com valores zero. Um outro uso, não muito comum, para o comando dd é com a utilização das opções de conversão. Imagine por exemplo que temos um arquivo onde o seu conteúdo esta todo em letras maiúsculas e por algum motivo precisamos que este conteúdo esteja em letras minúsculas, podemo utilizar o comando a seguir para fazer a conversão. dd if=arquivomaiuscula of=arquivominuscula conv=lcase Neste exemplo estamos especificando o arquivo a ser convertido no parâmetro if, e no parâmetro of estamos definindo o arquivo que será criado com seu conteúdo com letras minúsculas. A opção conv especifica que será realizada uma conversão e o parâmetro lcase especifica que a conversão a ser realizada é das letras maiúsculas existentes dentro do documento para minúsculas. Se você quiser aprofundar seu conhecimento na utilização do comando dd consulte seu manual. FIND Como foi visto no curso básico a principal utilização do comando find é para localização de arquivos dentro de um sistema de arquivos. Há diversos critérios que podemos usar para melhor lapidar a busca como por exemplo: nome, tipo, data de modificação, tamanho, proprietário, etc. Vimos também que é possível especificar o local da pesquisa, sendo que quando este não é informado, a pesquisa é feita no diretório atual (que estamos dentro) e seus subdiretórios. A sintaxe básica do comando find é: Sintaxe: find <a partir de que local> [parâmetro] <dados para os parâmetro> Sendo que conforme a sintaxe apresentada só podemos definir um local para pesquisa, po- 90

90 demos usar quantos parâmetros forem necessários para melhor refinar a pesquisa e podemos passar, de acordo com o parâmetro utilizado, uma representação de dados para pesquisa. Segue abaixo, para revisão, tabela com os parâmetros apresentados no módulo básico deste curso. Parâmetros Descrição -name <info> Procura um arquivo ou diretório que possua estritamente o mesmo nome com a mesma caixa dos caracteres (case sensitive). Exemplo: #find / -name Tião Macalé <ENTER> Se existir algum arquivo ou diretório com o nome tião macalé, não será mostrado no resultado. -iname Procura um arquivo ou diretório que possua estritamente o mesmo nome, mas permite que a caixa dos caracteres seja diferente (não case sensitive). Exemplo: #find / -iname Tião Macalé <ENTER> Se existir algum arquivo ou diretório com o nome tião macalé, ele será mostrado no resultado. -size Procura arquivos que possuam um determinado tamanho. Você pode definir o tamanho exato do arquivo (o problema é que, devido aos arredondamentos dos números reais, que são quebrados, é muito difícil você encontrar um arquivo pelo tamanho certo), ou definir se deverão ser mostrados arquivos maiores ou menores que o valor dado ao parâmetro. Exemplo: #find /boot -size +5M <ENTER> Você poderá procurar por KB (use o k minúsculo), MB (use o M) e o GB (use o G). -maxdepth Define o número máximo de níveis que o comando find deverá descer para fazer sua pesquisa. O diretório que foi definido com ponto inicial assumirá o valor de nível 1. Cada nível abaixo deverá ser incrementado pelo número um. Exemplo: O arquivo oi.txt está dentro de /curso/1/2/3/4/. $find /curso/1 -maxdepth 4 -name oi.txt <ENTER> Irá encontrar /curso/1/2/3/4/oi.txt $find /curso/ -maxdepth 4 -name oi.txt <ENTER> Não irá encontrar, porque ele parará no diretório /curso/1/2/3. -mindepth Define quantos níveis abaixo o comando find deverá descer a partir do local definido como ponto inicial da pesquisa. O número que você coloca ao lado do parâmetro é o número de níveis abaixo, contando um no diretório especificado, que o find deverá iniciar a pesquisa. Exemplo: agora temos o arquivo eita.txt dentro do diretórios /curso/1/2/. $find /curso/1 -mindepth 3 -name eita.txt <ENTER> Nada será encontrado. $find /curso/1 -mindepth 2 -name eita.txt <ENTER> Encontrará. /curso/1/2/eita.txt -type Permite que você pesquise arquivos que sejam somente do tipo que você venha a especificar, como diretórios, arquivos especiais de bloco, caracteres, links, socketes, etc. Você só poderá colocar uma letra por vez. b = arquivos especiais de bloco c = arquivos especiais de caractere d = diretórios l = link simbólico s = arquivo especial de soquete p = arquivo especial de pipe f = arquivos regulares (arquivos normais) Exemplo: No exemplo abaixo, pedimos ao find que procure todos os arquivos pipe do computador: # find / -type p 91

91 Parâmetros Descrição /var/lib/gdm/.gdmfifo /dev/xconsole /dev/initctl Podemos acrescentar como parâmetro do comando find as opções: -exec <comando> '{}' \; - este parâmetro possibilita a execução de um comando diretamente no resultado da pesquisa efetuada. Logo após o parâmetro -exec devemos passar o comando a ser executado, com seus parâmetros, logo em seguida, entre aspas simples, devemos abrir e fechar chaves (que representam o resultado da pesquisa que será utilizado com o comando) e por fim ; para especificar o fim do comando a ser executado, lembrando que antes do caractere especial ; deve ser utilizada a \ para denotar a utilização do caractere especial ; na linha de comando. Por exemplo, imagine que temos um servidor com que esta com a partição que contém as pastas compartilhas da rede quase cheia, e por isso, há a necessidade de limpar (excluir) alguns arquivos para liberar espaço. Detectamos que o compartilhamento de rede publico é o que apresenta situação mais critica, então com o comando find identificamos os arquivos que estão utilizando mais espaço e descobrimos que existem vários arquivos de mp3 que estão indevidamente gravados na rede. Nesse caso podemos utilizar o comando find para localizar e já remover todos os arquivos de mp3 existentes no compartilhamento através do comando: # find /comp/publico type f iname '*mp3' exec rm f '{}' \; No comando acima especificamos o local de pesquisa como a pasta onde temos o compartilhamento publico especificamos com o parâmetro -type que só deveriam ser pesquisados arquivos regulares, com o parâmetro -iname especificamos que deveriam ser pesquisados os arquivos que seu nome terminasse com o termo mp3 e através do parâmetro -exec pudemos passar o comando rm -f para excluir os arquivos encontrados como resultado da pesquisa. -and (a) este parâmetro possibilita a concatenação de parâmetros no refinamento da pesquisa, possibilitando a utilização de dois ou mais critérios como filtro. Por exemplo, se quisermos localizar todos os arquivos, no nosso /home, que comecem com a letra a e sejam maiores que 300KB. O comando ficaria: ~$ find type f iname 'a*' and type f size +300k O comando acima fará com que sejam pesquisados todos os arquivos que comecem com a letra a (através dos parâmetros: -type para definir que a pesquisa será realizada somente entre os arquivos regulares e -iname para especificar que são os arquivos em que seu nome comece com a letra a ) e que seu tamanho seja maior que 300KB (os parâmetros; -type para definir que 92

92 a pesquisa será realizada somente entre os arquivos regulares e -size para especificar somente os arquivos maiores que 300KB ). Q uando utilizamos o parâmetro -exec junto com o parâmetro -and, devemos utilizá-lo após o -and pois caso contrário o comando especificado para execução através do parâmetro -exec só será aplicado ao resultado da pesquisa de acordo com os primeiros critérios estabelecidos, não sendo consideradas as especificações de pesquisa definidas após o parâmetro -and. ~$ find type f iname 'a*' and type f size +100k exec rm f {} \; No exemplo acima estamos excluindo da pasta pessoal todos os arquivos que comecem com a letra a e tenham o tamanho maior que 100 KB. Se tivéssemos utilizado o comando da seguinte forma: ~$ find type f iname 'a*' exec rm f {} \; and type f size +100k Com esse comando teríamos apagado todos os arquivos que iniciassem com a letra a e a informação de que deveria ter o tamanho maior que 100KB seria ignorada. -or (o) este parâmetro permite que sejam utilizados para pesquisa mais de um critério para pesquisa simultaneamente. Por exemplo, se quisermos pesquisar todos os arquivos da minha pasta pessoal que comecem com as letras a e b. Para isso o comando ficaria: ~$ find type f iname 'a*' or type f iname 'b*' No exemplo acima o find pesquisou primeiro os arquivos que começavam com a letra a e depois os que começavam com a letra b. O find trabalha de forma independente com as expressões definidas antes e após o parâmetro or. Dessa forma quando utilizamos o parâmetro -exec junto com o parâmetro -or, devemos especificá-lo para cada uma das expressões em que queremos executar o comando. ~$ find iname 'a*' or iname 'b*' exec chmod 700 {} \; No exemplo acima só serão alteradas as permissões dos arquivos 10 que iniciarem com a letra b, os que iniciarem com aletra a não sofrerão nenhuma alteração. ~$ find iname 'a*' exec 700 {} \; or iname 'b*' exec chmod 700 {} \; 10 Neste caso como não foi especificado o tipo de arquivo através do parâmetro -type a alteração de permissão afetará todos os tipos de arquivos que comecem com a letra b, como por exemplo diretórios, links, etc... 93

93 No exemplo acima esta sendo aplicada a alteração de permissão a todos os arquivos da minha pasta pessoa que comecem com as letras 'a' e b. -atime <Número de dias> procura por arquivos que tenham seu ultimo acesso conforme o número de dias passados com o parâmetro. Também é possível definir para serem mostrados arquivos com o ultimo acesso superior (+) ou inferior (-) ao número de dias passado ao parâmetro. $find /home/robsonp/documentos/ atime +2 No exemplo acima serão listados todos os arquivos que tiveram seu último acesso a mais de 2 (dois) dias. -ctime <Número de dias> - procura por arquivos que tenham sido alterados o número de dias que foi passados com o parâmetro. Também é possível definir para serem mostrados todos os arquivos alterados o número de dias especificados com o parâmetro em relação à data atual. Inserindo antes do número de dias + para superio ou - para inferior ao número de dias passado ao parâmetro. $ find /home/robsonp/documentos ctime 1 No exemplo acima serão listados todos os arquivos que foram alterados a menso de 1 (um) dia. -printf <opções> - permite especificarmos os termos que serão exibidos no resultado da pesquisa. Como por exemplo, podemos usar para imprimir somente o nome do arquivo pesquisado e a sua data de alteração, como mostramos a seguir: ~$ find ctime 1 printf "%f %c\n" As opções mais usadas com o parâmetro -printf são: 94 %p mostra o nome do arquivo com o caminho %m mostra a permissão do arquivo no modo octal %M Mostra a permissão do arquivo como é mostrado com o comando ls %f mostra o nome do arquivo sem o caminho %g mostra o nome do grupo do arquivo %G mostra o gid %U mostra o uid %h mostra o nome dos diretórios em que o arquivo esta dentro %u mostra o nome do dono do arquivo

94 %c mostra a data de alteração do arquivo %a mostra tempo de acesso %AD imprime a data tipo mês/dia/ano (data de acesso) %AH imprime a hora %AT hh/mm/ss %A+ data e tempo separados pro "+" %Ax mostra a data de representação conforme a localidade (dd/mm/aaaa) %n Mostra o número de hardlinks existentes para um arquivo11 XARGS O comando xargs utiliza o resultado de um comando enviado à saída padrão e o utiliza como argumento na execução de um outro comando, uma ou quantas outras vezes forem necessárias. O comando xargs não funciona corretamente, podendo apresentar problemas, quando, na saída padrão, forem apresentados nomes de arquivos contendo (espaço em branco). Sintaxe: xargs [opções] [comando] A seguir temos alguns exemplos de utilização do comando xargs. ~# ls qw xargs rm f No exemplo acima estamos usando o comando xargs para excluir todos os arquivos existentes no diretório corrente que tenham os mesmos nomes de arquivos que foram retornados pelo comando ls no diretório qw. Caso na listagem apresentada na saída padrão contenha algum nome de arquivo não existente no diretório corrente será apresentada uma mensagem de erro avisando que o arquivo não pode ser removido por não existir. Vamos imaginar agora uma outra situação onde queremos remover todos os arquivos do diretório corrente, pertencentes a um determinado usuário. Poderíamos, para isso, usar um comando find, da seguinte maneira: $ find. type f user robsonp exec rm f {} \; Com isso, seriam apagados todos os arquivos do usuário robsonp, mas fazendo desta forma seriam removidos não só os arquivos do usuário robsonp contidos no diretório corrente, sem afe11 Se só existir uma referência para o conteúdo do arquivo será mostrado com este parâmetro o valor 1 (um), pois cada referência ao conteúdo de um arquivo é considerada pelo sistema como um hardlink. 95

95 tar as subpastas, mas também os de todos os outros subdiretórios existentes a partir do diretório correntes. Uma opção para solucionar este problema seria a utilização sa seguinte linha de comando: $ ls l grep " robsonp " cut c44 xargs rm Neste caso, o grep filtraria os arquivos listados com o comando ls -l que pertenciam ao usuário robsonp. Com o comando cut pegamos somente o nome dos arquivos, que foram passados ao comando xargs, que fez a ponte para remoção através do comando rm. Evitando assim que fossem removidos os arquivos do usuário robsonp existentes nos subdiretórios. E ste exemplo foi utilizado com o fim didático de apresentar a utilização do comando xargs, pois é possível realizar esta operação do exemplo somente com o comando find e seus parâmetros12, para isso utilizaríamos o comando find com os seguintes parâmetros: find. -maxdepht 1 -type f -user robsonp -exec rm -f {} \; FSCK Sintaxe: fsck <opções> <partição> O fsck checa a consistência e repara possíveis danos num sistema de arquivos. Muitas vezes, acaba sendo automaticamente executado nos sistemas de arquivos e nem nos damos conta do que esta acontecendo. Sempre que por algum motivo ocorra um desligamento incorreto (anormal) do computador, gerando a detecção de inconsistência no sistema de arquivos, fará com que na próxima vez em que o sistema for iniciado será executado o fsck e, na maioria dos casos, automaticamente corrigirá os problemas encontrados, tais como corrigir blocos defeituosos, etc... Mas nos casos com maiores danos é necessário que seja feita uma checagem manual. É possível que quando temos um problema de inconsistência num sistema de arquivos o sistema operacional não seja inicializado apresentando durante o processo de boot uma mensagem de erro do fsck. Nesse caso será necessário logar no sistema no modo single user ou através de um live cd para, através da linha de comando executar o fsck para correção dos erros. recomendado que a partição com o sistema de arquivos em que será efetuada a É restauração com o comando fsck esteja desmontada. O sucesso na recuperação dos arquivos através do fsck depende diretamente do sistema de arquivos e sua forma de funcionamento. Quando utilizamos o fsck temos como retorno um código que representa o resultado de sua 12 Não existe uma real necessidade da utilização do comando xargs, para execução de comandos junto ao comando find. 96

96 execução. Esses códigos são a soma das seguintes opções: 0 - nenhum erro. 1 - erros do sistema de arquivos corrigidos. 2 - o sistema deve ser reiniciado. 4 - erros do sistema de arquivos não corrigidos. 8 - erro operacional erro de uso ou de sintaxe erro de biblioteca compartilhada. Os principais parâmetros do fsck são: -t: esta opção é utilizada para especificar qual sistema de arquivos será checado. -a: esta opção faz com que os defeitos sejam reparados automaticamente. -A: utiliza as informações contidas no arquivo /etc/fstab e tenta verificar todos os sistemas de arquivos, nele configurados, de uma vez. -r: esta opção faz com que quando seja encontrada alguma falha, seja solicitada confirmação para sua recuperação. -V: quando utilizamos esta opção a saída do comando fsck é apresentada de forma mais detalhada. -N: faz com que seja exibido qual seria o resultado da execução do comando fsck sem que as alterações sejam efetuadas no sistema de arquivos. Simplesmente mostra uma prévia do seria feito. -M: esta opção faz com que o fsck não seja executado em partições montadas, retornando para elas o código de saída 0 (nenhum erro). -y: esta opção força para que todas as perguntas durante o processo de restauração recebam a resposta sim, sem a necessidade da interação do usuário. Segue a baixo um exemplo de utilização do fsck. # fsck -A -N fsck (12-Oct-2008) [/sbin/fsck.xfs (1) -- /] fsck.xfs /dev/sda2 [/sbin/fsck.ext3 (1) -- /boot] fsck.ext3 /dev/sda1 [/sbin/fsck.xfs (1) -- /home] fsck.xfs /dev/sda4 No exemplo acima o fsck não chegou restaurar as partições listadas. Ele simplesmente re97

97 tornou que os erros dos sistemas de arquivos seriam corrigidos com exito. No exemplo a seguir o fsck é executado somente para partição sda4. # fsck -t xfs /dev/sda4 -N fsck (12-Oct-2008) [/sbin/fsck.xfs (1) -- /home] fsck.xfs /dev/sda4 FUSER Este comando possibilita que sejam visualizados os processos que estão sendo executados em um determinado diretório ou arquivo. Além de visualizar o processo, ele permite também que sejam visualizadas e executadas outras ações como por exemplo visualizar o dono do processo ou até mesmo matar o processo em execução. A sintaxe do comando é: Sintaxe: fuser <opções> <Arquivo/Diretório> Quando utilizamos o comando fuser sem passarmos nenhuma opção, somente apontando para um diretório ou arquivo, temos como retorno o PID de todos os processos em execução. Na exibição padrão deste comando temos como retorno o PID de cada processo seguido por uma letra, que indica o tipo de acesso, sendo as mais comumente entradas13: c : diretório atual (a partir do qual o processo foi inicializado). e : arquivo sendo executado pelo processo. r : diretório raiz do sistema (ponto de inicialização do processo). A seguir, serão apresentadas as principais opções para utilização com o comando fuser. -u: quando utilizada esta opção é feita uma identificação do usuário dono de cada um dos processos listados. -k: quando utilizamos esta opção além de exibirmos os processos do arquivo ou diretórios especificado, é efetuada a operação de encerramento de cada um dos processos, ou seja, os processos são matados. -i: esta opção faz com que seja solicitada uma confirmação antes de matar os processos através da opção -k. -n: esta opção permite visualizar o processo que esta usando uma determinada porta TCP ou UDP -v: esta opção faz com que os processos sejam exibidos como uma lista com quatro colunas com a primeira trás o nome do usuário dono do processo, a segunda coluna trás o PID do processo, a terceira coluna trás as informações de acesso e a quarta coluna trás o comando que iniciou 13 Mais informações sobre as letras de identificação de acesso podem ser obtidas no manual do comando (man fuser). 98

98 o processo. Segue abaixo exemplo de retorno da utilização do comando fuser com o parâmero -v. # fuser v /bin/bash USER PID ACCESS COMMAND /bin/bash: robsonp e. soffice robsonp e. bash root e. bash robsonp e. bash root e. bash robsonp e. bash root e. bash É possível também utilizarmos o comando fuser para verificarmos o conteúdo em mais de um diretório simultaneamente. Como mostram os exemplos abaixo: # fuser /bin/bash /usr/bin/soffice /bin/bash: 4547e 4808e 4830e 6671e 6693e 7600e 7622e 7976e /usr/bin/soffice: 4547 No exemplo acima estão sendo listados todos processos vinculados aos arquivos bash e sofice. Se executarmos esse mesmo comando passando o parâmetro -u como opção junto com o cada PID apresentado virá também o nome do usuário dono do processo. # fuser u /bin/bash /usr/bin/soffice /bin/bash: 4547e(robsonp) 4808e(robsonp) 4830e(root) 6671e(robsonp) 6693e(root) 7600e(robsonp) 7622e(root) 7976e(rob sonp) /usr/bin/soffice: 4547(robsonp) Também podemos utilizar dos caracteres especiais para designarmos mais de um diretório ou arquivo para exibição dos processos. Como mostra exemplo abaixo: # fuser /home/* /home/robsonp: 3126c 3186c 3205c 3207c 3209c 3286c 3288c 3289c 3349c 3452c /home/teste: 3464c 3465c A seguir esse mesmo exemplo só que desta vez com a utilização do parâmetro -v para uma exibição mais completa. # fuser /home/* v USER PID ACCESS COMMAND /home/robsonp: robsonp c.. x session manag robsonp c.. gnome settings robsonp c.. metacity robsonp c.. gnome panel robsonp c.. nautilus 99

99 robsonp c.. gnome terminal robsonp c.. gnome pty helpe robsonp c.. bash robsonp c.. bash robsonp c.. bash /home/teste: teste c.. su teste c.. bash A seguir um exemplo onde usamos o comando fuser para verificar os processos que estão utilizando a porta TCP 631. # fuser n tcp 22 22/tcp: 2217 LSOF O comando lsof lista todos arquivos, de todos os tipos, que estão abertos por todos os processos em execução no sistema. Sintaxe: lsof <opções> <argumentos do parâmetro>14 Como vimos a utilização do comando lsof exibe uma lista de todos os arquivos abertos pelos processos em execução, essa listagem por padrão apresenta nove colunas com as seguintes informações: COMMAND nesta coluna serão listados os primeiros 9 (nove) caracteres do nome do comando associado ao processo em execução que esta utilizando o arquivo listado. PID como o próprio título já diz, esta coluna lista o PID dos processos. USER nesta coluna serão listados os nomes dos usuários que iniciaram os processos. FD nesta coluna é apresentado um código que descreve o tipo do arquivo. TYPE nesta coluna é listado o tipo de nó associado com o arquivo. DEVICE nesta coluna é mostrado um número de dispositivo separado por vírgula para nó de dispositivo de caractere, nó de dispositivo de bloco, arquivos regulares e diretórios. SIZE nesta coluna é listado o tamanho do arquivo em bytes. NODE nesta coluna é listado número do nó de um arquivo local, ou o número do inode de um arquivo em NFS, ou o tipo de protocolo de Internet NAME nesta coluna é apresentado o nome para identificação de cada arquivo. As principais opções que podem ser passadas como parâmetro do comando lsof são: 14 Os argumentos só precisam serem passados se o parâmetro utilizado requerer. 100

100 +D <diretório> faz com que lsof procure por todas as instâncias do diretório especificado no argumento homônimo que estão sendo utilizadas pelos processos do sistema. -N utilizado para verificar recursos (arquivos, diretórios, etc) que estão sendo utilizados em uma estrutura de rede baseada em NFS. -p <PID> permite especificar o PID de um determinado processo para listar todos os recursos (arquivos, diretórios, etc) utilizados por ele. -u <usuário/uid,...> verificar os recursos (arquivos, diretórios, etc) em uso por usuários. Pode-se especificar múltiplos usuários pelo nome de login no sistema ou UID, separados por vírgula. É preciso ser administrador do sistema para verificar os recursos de outros usuários. -U permite verificar todos os soquetes Unix que estão em uso no momento. -g <GID> mostra os arquivos abertos pelo grupo especificado como argumento. -i <argumento>15 mostra os arquivos abertos por processo referentes às conexões de rede. Segue abaixo alguns exemplos de uso do comando lsof : # lsof u robsonp head O comando acima lista todos os arquivos abertos por processos cujo dono é o usuário robsonp. # lsof i :22 O comando acima mostra todos os arquivos referentes a conexões feitas pela porta 22. PIDOF O comando pidof retorna o(s) PID(s) de um processo em execução. Sintaxe: pidof [opções] [processo] As opções do comando pidof são: -s esta opção faz com que seja exibido somente o primeiro PID encontrado. -x esta opção retorna o PID do shell que está executando o script. -o [PID] esta opção omite um determinado PID da listagem de saída do comando. Para exemplificar o uso do comando pidof imagine a seguinte situação: Um servidor esta com problema numa placa de rede, de forma que é necessária sua substituição. È efetua sua substituição e reconfiguração tudo certinho. Mas devido a isso o acesso à internet de todo mundo 15 Neste caso, o argumento é opcional. 101

101 parou de funcionar pelo SQUID. Esse problema já havia ocorrido outras vezes e só foi necessário reiniciar o SQUID e tudo volta a funcionar. No entanto ao tentar finalizar o serviço (com o comando /etc/init.d squid stop) temos um retorno de erro dizendo que não é possível finalizar o serviço. Nesse caso podemos utilizar o comando pidof para identificarmos o PID do processo squid e finalizá-lo com o comando kill. # kill 9 $(pidof gedit) Outros exemplos de utilização do comando pidof são: # pidof bash No exemplo acima estamos listando os PIDs iniciados pelo bash. # pidof s bash Agora repetimos o exemplo anterior mas desta vez passando o parâmetro -s para que só seja exibido o primeiro PID. NICE Como sabemos qualquer coisa que executamos, no sistema operacional Debian, gera um processo e através deste processo que é feito o controle de utilização de recursos do computador (utilização do processador), em outras palavras, é através dos processos que é feito o controle e a organização da fila de processamento. O simples fato de inicializarmos o sistema operacional já é suficiente para criação de vários processos e devido ao fato de sempre termos uma enorme quantidade de processos ativos são necessários meios que permitam controlá-los. Para isso, os processos contam com um conjunto de características, dentre as quais: Proprietário do processo; Estado do processo (em espera, em execução, etc); Prioridade de execução; Recursos de memória. Neste momento vamos nos focar em enter melhor o controle da prioridade de execução dos processos, para isso vamos entender como funciona o processamento das informações. Quando falamos que um sistema operacional é multitarefa, não quer dizer que o processador da máquina 102

102 esteja processando duas ou mais tarefas ao mesmo tempo 16. O que acontece é que o sistema operacional estipula um determinado período de tempo em que uma determina tarefa é processada e passado esse intervalo de tempo, essa tarefa é interrompida e volta para uma fila de proces samento e a tarefa da vez, na fila, é processada e assim por diante até a conclusão do processamento de todas as tarefas, esse ciclo acontece numa velocidade tão rápida que dá impressão de que todas as tarefas foram processadas simultaneamente. Nessa fila de tarefas a serem processadas nós encontramos os processos, e esses processos podem ter prioridade em relação aos outros em sua execução. Nesses casos dizemos um processo tem um nível de gentileza inferior aos demais. Todo processo em execução assume um determinado nível de prioridade, que por padrão é zero. Quando um processo é gentil, significa que ele "oferece a gentileza" de permitir que um processo com prioridade maior seja executado antes dele. Esses níveis de gentileza, também chamados de nice, são determinados através de números, onde quanto mais alto for o valor nice, mais gentil é o processo, ou seja, menor é sua prioridade de execução. O intervalo de números usados no nice é o intervalo de números inteiros entre -20 e 19. O comando nice permite nos permite executar uma determinado processo com sua prioridade de execução alterada, seja ela maior ou menor que sua prioridade padrão. Sintaxe: nice <opções> <comando> Quando utilizamos o comando nice passando como opção o parâmetro -n <valor>, onde o valor corresponde ao nível desejado, é adiciona o valor especificado à prioridade padrão de execução no sistema para o processo iniciado. Se utilizarmos o comando nice sem passarmos o parâmetro especificando o nível de prioridade de execução, será atribuída ao comando a prioridade execução 10 (dez). A penas o administrador do sistema, o usuário root, pode definir uma prioridade de execução negativa para um processo. Se utilizarmos somente o comando nice sem passarmos nenhum argumento, é exibida a prioridade de execução de processos padrão em uso atualmente no sistema operacional. $ nice 0 No exemplo acima a prioridade de execução de processos padrão em uso no sistema é 0 (zero). Imagine que temos, em nossa máquina, um determinado processo usando 95% do proces16 O processador só é capaz de processar uma informação por vez. 103

103 samento e que este processo ficará rodando por um longo período de tempo, e que nesse período, por algum motivo, você precise editar o arquivo arquivo.cfg. Ao tentar usar o editor vim para alterar o arquivo, você percebe que o editor está extremamente lento. Para evitar essa situação, é possível executar o editor de texto com o nível de prioridade de execução maior do que a do processo que esta ocupando 95% do processamento. Para isso basta utilizar o comando abaixo: # nice n 20 vim arquivo.cfg No exemplo acima o comando nice esta sendo usado para dar prioridade máxima para o processo gerado pelo comando vim na edição do arquivo arquivo.cfg. RENICE O comando renice tem a mesma função que o comando nice, alterar a prioridade de execução de um determinado processo. A diferença é que utilizamos o comando nice para alterar a prioridade de execução dos processos que estão sendo iniciados, enquanto o comando renice é utilizado para alterara a prioridade de execução de processos que já estão em execução. Sintaxe: renice <prioridade> <opções> As opções do comando renice são: -u esta opção permite que seja especificado um usuário de forma que sejam alteradas as prioridades de execução de todos os processos desse usuário. -g esta opção permite que seja especificado um um grupo de forma que sejam alteradas as prioridades de execução de todos os processos desse grupo. -p esta opção permite que seja especificado o PID do(s) processo(s) que serão alteradas as prioridade de execução17. # renice No exemplo acima esta sendo alterada a prioridade de execução do processo com PID 4546 para 0 (zero). # renice 5 u root p No exemplo acima estão sendo alteradas as prioridades de execução para -5 (menos cinco) de todos os processos do usuário root e dos processos com PID 4930 e NOHUP Algumas vezes precisamos executar um comando em background para que continuarmos 17 Não obrigatório o uso da opção -p para passar o PID de um processo para alteração de sua prioridade de execução do comando renice. 104

104 usando o terminal, em alguns casos pode ser que a execução desse comando demore e por algum motivo nós podemos precisar encerrar a seção. Nesse caso ao encerrarmos a seção o processo que estava em execução em segundo plano receberá um sinal para ser encerrado e não terminará sua execução. S empre que um usuário efetua logout, encerra uma seção, é enviado um sinal ( SIGHUP ) que termina ou reinicia um processo a todos os processos que este usuário iniciou, ou seja, que ele seja dono. Nos casos em que precisamos que um processo seja executado mesmo que sua a seção de origem seja encerrada, ou seja, mesmo que nós efetuemos logout, podemos utilizar o comando nohup á frente do comando que deverá ficar em execução. Pois o comando nohup faz com que sejam ignorados os sinais de interrupção de conexão durante a execução do comando especificado (torna esse comando imune ao sinal SIGHUP). Possibilitando que o comando continue em execução mesmo após o usuário se desconectar do sistema. Se a saída padrão para o comando é uma tty, esta saída e o erro padrão são redirecionados para o arquivo nohup.out que será criado no diretório onde o comando foi executado, se por algum motivo ele não conseguir criar ou escrever neste arquivo, ele redirecionará para um arquivo nohup.out que será criado no home do usuário corrente. C aso nenhum destes dois arquivos possam ser criados (ou alterados se já existem), o comando não é executado. Sintaxe: nohup [comando] Segue abaixo um exemplo de utilização do comando nohup: # nohup find / type f iname sources,list & [1] LSPCI Através do comando lspci podemos obter informações detalhadas sobre os barramentos PCI / AMR / CNR / AGP e os dispositivos que estão plugados nestes barramentos. Sintaxe: lspci <opções> Na maioria das vezes é identificado o nome correto do controlador de cada dispositivo conectado aos barramentos PCI / AMR / CNR / AGP do computador, no entanto, em alguns casos os dispositivos podem ser mostrados como Unknow Device, informando que o dispositivo não foi reconhecido. Nesses casos podemos usar o script update-pciids, que fará o download de um novo arquivo de definições para ser utilizado pelo comando lspci. 105

105 N os casos onde o acesso a Internet passa por um serviço de Proxy, é necessário ajustar a variável de ambiente http_proxy com as configurações do proxy (passar hostname ou IP, a porta e se necessário usuário e senha) 18 para que assim o script update-pciids consiga acessar a internet funcione corretamente. A utilização do comando lspci pode ser incrementada com as opções listadas a seguir: -v esta opção faz com que sejam exibidas informações mais detalhadas sobre cada componente presente no barramento PCI do computador. O grau de detalhamento apresentado por esta opção pode ser aumentado através da repetição duas (-vv) ou três (-vvv) vezes da letra v. -n esta opção exibe o código do fabricante e do dispositivo ao invés de exibir seus nomes. -nn esta opção exibe o código do fabricante e do dispositivo, além de seus nomes. -b esta opção faz com que sejam exibidas informações sobre o hardware e os números de IRQ utilizados por eles (interessante para descobrir conflitos). -t esta opção exibe as informações no formato de arvore. -d <cód. fabricante>:<cód. Dispositivo> esta opção exibe somente informações dos dispositivos de um determinado fabricante (argumento cód. fabricante ), ou ainda de forma mais restritiva, de um determinado dispositivo de um determinado fabricante (definindo os argumentos cód. fabricante e cód. Dispositivo ). A seguir temos alguns exemplos de utilização do comando lspci. # lspci 00:00.0 RAM memory: nvidia Corporation MCP61 Memory Controller(rev a1) 00:01.0 ISA bridge: nvidia Corporation MCP61 LPC Bridge (rev a2) 00:01.1 SMBus: nvidia Corporation MCP61 SMBus (rev a2) 00:01.2 RAM memory: nvidia Corporation MCP61 Memory Controller(rev a2) 00:02.0 USB Controller: nvidia Corporation MCP61 USB Controller(rev a3) 00:02.1 USB Controller: nvidia Corporation MCP61 USB Controller(rev a3) 00:04.0 PCI bridge: nvidia Corporation MCP61 PCI bridge (rev a1) 00:05.0 Audio device: nvidia Corporation MCP61 High Definition Audio 00:06.0 IDE interface: nvidia Corporation MCP61 IDE (rev a2) 00:07.0 Bridge: nvidia Corporation MCP61 Ethernet (rev a2) 00:08.0 IDE interface:nvidia Corporation MCP61 SATA Controller(rev a2) 00:09.0 PCI bridge:nvidia Corporation MCP61 PCI Express bridge(rev a2) 00:0b.0 PCI bridge:nvidia Corporation MCP61 PCI Express bridge(rev 18 Uma forma de efetuar essa configurações é através do comando export a linha de comando para isso ficaria parecida com a apresentada no exemplo a seguir: (export HTTP_PROXY='usuário:senha@poxy:porta'). 106

106 a2) 00:0c.0 PCI bridge:nvidia Corporation MCP61 PCI Express bridge(rev a2) No exemplo acima temos a utilização simples do comando lspci onde como saída tivemos as informações listadas acima. # lspci v 00:00.0 RAM memory: nvidia Corporation MCP61 Memory Controller (rev a1) Subsystem: ASUSTeK Computer Inc. Device 8234 Flags: bus master, 66MHz, fast devsel, latency 0 Capabilities: [44] HyperTransport: Slave or Primary Interfa ce Capabilities: [dc] HyperTransport: MSI Mapping Enable+ Fi xed 00:01.0 ISA bridge: nvidia Corporation MCP61 LPC Bridge (rev a2) Subsystem: ASUSTeK Computer Inc. Device 8234 Flags: bus master, 66MHz, fast devsel, latency 0 I/O ports at 0900 [size=256] 00:01.1 SMBus: nvidia Corporation MCP61 SMBus (rev a2) Subsystem: ASUSTeK Computer Inc. Device 8234 Flags: 66MHz, fast devsel, IRQ 10 I/O ports at 0e00 [size=64] I/O ports at 0600 [size=64] I/O ports at 0700 [size=64] Capabilities: [44] Power Management version 2 Kernel driver in use: nforce2_smbus Kernel modules: i2c nforce2 No exemplo acima temos a utilização do comando lspci com a utilização do parâmetro -v para uma visualização mais detalhada como visto acima. LSUSB O comando lsusb lista os dispositivos USB conectados ao computador, mostrando em que posição do USB o dispositivo se encontra, qual sua identificação (ID), marca e modelo. Sintaxe: lsusb <opções> Para uma visualização mais incrementada das informações retornadas por este comando podemos utilizar as seguintes opções: -v esta opção exibe as informações dos dispositivos USB conectados ao sistema de forma mais detalhada. -s [barramento]:[dispositivo] esta opção permite visualizar informação especifica sobre 107

107 o dispositivo conectado a um determinado barramento USB, ou sobre todos os dispositivos plugados a um determinado barramento (especificando somente o argumento barramento ). # lsusb Bus 002 Device 002: ID 15d9:0a37 Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub No exemplo acima estamos utilizando o comando lsusb sem passar a ele nenhum parâmetro, onde temos como retorno a saída acima que mostras que, nesse caso, não há nenhum dispositivo conectado às entradas USB. # lsusb v Bus 002 Device 002: ID 15d9:0a37 Device Descriptor: blength 18 bdescriptortype 1 bcdusb 1.10 bdeviceclass 0 (Defined at Interface level) bdevicesubclass 0 bdeviceprotocol 0 bmaxpacketsize0 8 idvendor 0x15d9 idproduct 0x0a37 bcddevice 1.00 imanufacturer 0 iproduct 1 USB Mouse iserial 0 bnumconfigurations 1 Configuration Descriptor: blength 9 bdescriptortype 2 wtotallength 34 bnuminterfaces 1 bconfigurationvalue 1 iconfiguration 0 bmattributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 100mA Interface Descriptor: blength 9 bdescriptortype 4 binterfacenumber 0 balternatesetting 0 bnumendpoints 1 binterfaceclass 3 Human Interface Device 108

108 binterfacesubclass 1 Boot Interface Subclass binterfaceprotocol 2 Mouse iinterface 0 HID Device Descriptor: blength 9 bdescriptortype 33 bcdhid 1.10 bcountrycode 0 Not supported bnumdescriptors 1 bdescriptortype 34 Report wdescriptorlength 52 Report Descriptors: ** UNAVAILABLE ** Endpoint Descriptor: blength 7 bdescriptortype 5 bendpointaddress 0x81 EP 1 IN bmattributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wmaxpacketsize 0x0004 1x 4 bytes binterval 10 Device Status: 0x0000 (Bus Powered) Acima segue um exemplo de saída mais detalhada do comando lsusb com o parâmetro -v. HWCLOCK Este comando permite acessar o relógio da BIOS, possibilitando sua consulta além de ajustes nos horários do sistema e da máquina. Sintaxe: hwclock <opções> Os parâmetros para utilização deste comando são: -r ou --show : para exibir a data e a hora do relógio da máquina (BIOS). -w ou --systohc : para copiar a hora do sistema para o relógio da máquina. -s ou --hctosys : para copiar a hora da máquina para a hora do sistema. --set --date=novadata : para modificar a data e a hora do relógio da máquina. Por exemplo, para alterarmos o relógio da máquina para a seguinte data e hora: 14/07/1981 às 11:30. Devemos utilizar o comando hwclock da seguinte maneira. # hwclock --set --date="07/14/ :30" # hwclock -r 109

109 Ter 14 Jul :30:04 BRT segundos No exemplo acima usamos primeiramente o comando hwclock para alterar a data e hora do relógio da máquina (BIOS) e em seguida confirmamos a alteração efetuada usando novamente o comando hwclock com o parâmetro -r para visualizarmos a data e hora do relógio da máquina. NMBLOOKUP Antes de aprendermos a utilização do comando nmblookup vamos conhecer um pouco sobre o NetBIOS sobre TCP/IP como serviço de resolução de nomes e sobre o serviço WINS. Podemos definir NetBIOS como uma interface de programa desenvolvida para permitir a comunicação entre máquinas numa determinada rede. Em redes microsoft, por exemplo, o compartilhamento de arquivos é baseado no sistema de troca de mensagens do NetBIOS, chamado de SMB (Server Message Block). O NetBIOS disponibiliza o que chamamos de nomes NetBIOS, que através da resolução desses nomes possibilita a comunicação entre máquinas numa rede sem a necessidade de uso de seu endereço IP. Essa resolução de nomes NetBIOS, significa o mapeamento bem-sucedido de um nome NetBIOS para um endereço IP. Esse nome NetBIOS é o nome atribuído a um determinado recurso da rede (a um computador, impressora, etc), ele representa um endereço de 16 bytes que é usado para sua identificação na rede. Ele pode ser um nome exclusivo, atribuído a um recurso especifico, ou um nome de grupo. Por exemplo, uma determinada máquina X numa rede, que utiliza o endereço IP , pode receber o nome NetBIOS ecelepar91122 que será utilizado para identificar esta máquina na rede, esse nome representa exclusivamente a máquina X que possui o endereço IP Essa mesma máquina pode fazer parte do grupo WORKGROUP, nesse caso, este grupo (nome NetBIOS) não representa unicamente a máquina X mas todas as máquinas que fazem parte deste grupo. U m nome NetBIOS possui 16 (dezesseis) posições de caracteres para sua formação. Sendo que pode-se ter no máximo 15 (quinze) caracteres e no mínimo 1 (um) caractere para a definição do nome. Nos casos onde não forem usados os 15 (quinze) ca racteres possíveis no nome NetBIOS, as posições não utilizadas serão automaticamente completadas com espaços em branco. O 16 (decimo sexto) caractere do nome NetBIOS é reservado para identificar a funcionalidade que está instalada no dispositivo de rede registrado. Numa rede é comum o compartilhamento de arquivos e impressoras, e geralmente utilizamos, para conectarmos à máquina que compartilha o recurso desejado (arquivo ou impressora) utilizamos o nome NetBIOS para isso. Mas antes de poder estabelecer uma conexão de compartilhamento de arquivos ou impressão, é necessária a criação de uma conexão TCP. E para se esta110

110 belecer uma conexão TCP, o nome NetBIOS deve ser resolvido para um endereço IP. Temos diferentes mecanismos para resolução de nomes NetBIOS, sendo que estes mecanismos variam de acordo com o tipo de nó de NetBIOS configurado. Segue abaixo uma lista de nós de NetBIOS: Tipo de nó Descrição Nó B (difusão) O nó B usa consultas de nomes NetBIOS através de difusão (broadcast) na resolução de nomes. O nó B tem dois grandes problemas: (1) As difusões perturbam todos os nós na rede. e (2) Os roteadores geralmente não encaminham difusões, portanto, apenas os nomes NetBIOS na rede local podem ser resolvidos. O nó P usa um servidor de nomes NetBIOS (NBNS), como, por exemplo, um servidor WINS para resolver os nomes NetBIOS. Ou seja, o nó P ao Nó P (ponto a ponto) invés de usar difusões faz uma consulta diretamente no servidor de nomes (servidor WINS). Nó M (composto) O nó M é uma combinação do nó B e do nó P. Por padrão, um nó M funciona como um nó B, resolvendo os nomes NetBIOS por difusão, e quando ele não consegue resolver o nome por difusão, ele efetua uma consulta ao servidor de nomes (servidor WINS usando o nó P. Nó H (híbrido) O nó H é uma combinação do nó P e do nó B. Por padrão, um nó H funciona como um nó P, efetuando uma consulta num servidor de nomes (servidor WINS), quando ele não consegue resolver o nome NetBIOS dessa forma, ele usa uma difusão para resolução do nome. (Este atualmente é o tipo de nó mais utilizado). Agora que sabemos o que é e quais as formas para resolução de nomes NetBIOs, vamos conhecer um pouco sobre o serviço WINS (Serviço de cadastramento na internet do Windows). Este serviço disponibiliza um banco de dados distribuído para registrar e consultar mapeamentos dinâmicos de nomes NetBIOS para computadores e grupos usados na rede. Os registros de WINS são efetuados automaticamente a cada vez que os clientes iniciam e ingressam na rede. E ssa atualização automática do banco de dados WINS, evita que alterações dinâmicas de endereço desatualizem o banco de dados A seguir temos uma ilustração que facilitará o entendimento da resolução de nomes NetoBIOS através de uma consulta num servidor WINS. 111

111 Figura 8: Representação de uma consulta a um servidor WINS. Neste exemplo, o Computador A registra seu nome de NetBIOS, ecelepar90112, no servidor WINS. Enquanto o Computador B primeiramente efetuou, passando o nome NetBIOS da máquina que deseja acessar, uma consulta ao Servidor WINS para localizar o endereço IP do Computador A, em seguida, o Servidor WINS retornou para o Computador B o endereço IP do Computador A para que então o Computador B pudesse se conectar ao Computador A. Agora que entendemos como funciona a resolução de nomes NetBIOS através de um servidor WINS, vamos aprender a utilizar o comando nmblookup que uma ferramenta muito útil para verificarmos o correto funcionamento dessa resolução de nomes, pois este comando, dentre suas funções, possibilita a consulta de um endereço IP através de seu hostname. Sintaxe: nmblookup <opções> <host / endereço IP> As opções do comando nmblookup são: -U esta opção é utilizada para passarmos o endereço IP do servidor WINS a ser consultado. -R esta opção é utilizada para passarmos o nome NetBIOS ou SAMBA da máquina que será pesquisada. -B esta opção é utilizada para passarmos qual o broadcast será utilizado para resolução do nome NetBIOS por difusão. -d <Nível> esta opção é utilizada para, dependendo do nível passado como argumento, aumentar o detalhamento das informações retornadas pelo comando nmblookup. O nível a ser passado como argumento dessa opção deve ser um valor inteiro compreendido entre 0 (zero) e 10 (dez), sendo que quanto maior o nível mais detalhada é a saída. Quando este parâmetro não é passado o comando nmblookup assume o nível 0 (zero) no retorno das informações pesquisadas. 112

112 -T esta opção é utilizada para que seja exibido o nome DNS da máquina antes do endereço IP. A seguir veremos alguns exemplos da utilização do comando nmblookup. # nmblookup U R ecelepar10159 T querying ecelepar10159 on ecelepar10159.celepar.parana, ecelepar10159<00> No exemplo acima estamos efetuando a consulta do nome NetBIOS ecelepar10159 no servidor WINS com endereço IP , mostrando também o nome DNS da máquina (ecelepar10159.celepar.parana). # nmblookup U R ecelepar12153 querying ecelepar12153 on ecelepar12153<00> No exemplo acima estamos efetuando a consulta do nome NetBIOS ecelepar12153 no servidor WINS com endereço IP # nmblookup R ecelepar10159 B querying ecelepar10159 on ecelepar10159<00> No exemplo acima estamos efetuando a consulta do nome NetBIOS ecelepar10159, mas desta vez por difusão através do broadcast # nmblookup U R ecelepar91199 d 2 added interface eth0 ip=fe80::21e:8cff:fec0:297d%eth0 bcast=fe80::ffff:ffff:ffff:ffff%eth0 netmask=ffff:ffff:ffff:ffff:: added interface vmnet1 ip=fe80::250:56ff:fec0:1%vmnet1 bcast=fe80::ffff:ffff:ffff:ffff%vmnet1 netmask=ffff:ffff:ffff:ffff:: added interface vmnet8 ip=fe80::250:56ff:fec0:8%vmnet8 bcast=fe80::ffff:ffff:ffff:ffff%vmnet8 netmask=ffff:ffff:ffff:ffff:: added interface vmnet1 ip= bcast= netmask= added interface vmnet8 ip= bcast= netmask= added interface eth0 ip= bcast= netmask= querying ecelepar91199 on Got a positive name query response from ( ) ecelepar91199<00> No exemplo acima estamos efetuando a consulta do nome NetBIOS ecelepar91199 no servidor WINS com endereço IP , com detalhamento da saída do comando nmblookup com nível de detalhamento

113 E m máquinas que possuem mais de uma interface de rede, o resultado do comando nmblookup mostrará o endereço IP da primeira interface de rede a registrar-se. Para verificar o endereço IP de uma interface de rede específica é necessário fazer a consulta por difusão, especificando o broadcast utilizado pela interface de rede desejada. NSLOOKUP Para entendermos a utilização deste comando precisamos ter noção de o que é, e para que serve um servidor DNS. De uma forma simplificada, podemos definir um servidor DNS (Domain Name System como o responsável por efetuar a resolução de nomes, ou seja, identificar máquinas através de nomes em vez de endereços de IP. Numa rede baseada no modelo OSI que utilize o protocolo TCP/IP, a conexão entre dois equipamentos acontece através do endereçamento IP19. Imagine então que quiséssemos acessar o site do google, por exemplo, se não tivéssemos configurado um servidor DNS, para acessar o site, ao invés de digitarmos o endereço teríamos que digitar um de seus endereços IPs. Para possibilitar essa navegação através de um nome amigável, o DNS atribui nomes a serviços de rede e computadores, organizado de acordo com uma hierarquia de domínios. O comando nslookup obtém informações de um servidor DNS, e as informações obtidas com o comando nslookup podem ser utilizadas para a resolução de problemas relacionados com o DNS. Sintaxe: nslookup [-opções] [nome ou -] [servidor] O comando nslookup pode ser utilizados de duas formas: interativa e não-interativa. A forma não-interativa consiste na utilização do comando para realização de uma única consulta a ser realizada conforme os parâmetros passados. A forma interativa ocorre quando utilizamos o comando nslookup sem passarmos nenhum parâmetro, nesse caso será aberta uma interface onde é possível realizar várias consultas com diferentes critérios de pesquisa, para sair dessa interface interativa basta digitarmos exit ou utilizarmos as teclas <Ctrl>+<d>. Segue abaixo alguns exemplos de utilização do comando nslookup. # nslookup ecelepar91199 Server: Address: #53 Non authoritative answer: Name: ecelepar91199.celepar.parana Address: No exemplo acima estamos usando o comando nslookup para consulta do endereço IP da 19 Esse conceito de que a conexão é feita através do endereço IP, é uma simplificação feita com o fim de contextualizar a necessidade do uso do endereço IP na conexão. 114

114 estação de trabalho ecelepar Nesse comando, como não foi especificado nenhum servidor DNS a ser consultado, a consulta foi realizada no servidor DNS configurado como primário no arquivo resolv.conf. S ó é possível consultarmos o endereço IP de uma máquina, passando somente o nome, sem especificar o domínio ao qual a máquina pertence, se o arquivo resolv.conf tiver a linha de configuração do domínio da internet setada (search celepar.parana). # nslookup ecelepar Server: Address: #53 Non authoritative answer: Name: ecelepar91199.celepar.parana Address: Neste outro exemplo, temos a mesma situação do exemplo anterior mudando somente o fato de que desta vez apontamos no comando que o servidor DNS que deveria ser consultado era o # nslookup > ecelepar91199 Server: Address: #53 Non authoritative answer: Name: ecelepar91199.celepar.parana Address: > Server: Address: #53 Non authoritative answer: canonical name = coxanautas.com.br. Name: coxanautas.com.br Address: > exit No exemplo acima, estamos utilizando o comando nslookup no modo interativo, dessa forma podemos efetuar quantas consultas forem necessárias. Neste caso estamos efetuando apenas duas consultas, a do hostname ecelepar91199 e a do endereço Como não especificamos um servidor para consulta foi utilizada a configuração do do arquivo resolv.conf e consultado p servidor primário nele especificado. Após efetuadas as consultas desejadas saímos da interface do comando nslookup digitando exit. 115

115 # nslookup > expresso.pr.gov.br Server: Address: #53 Non authoritative answer: Name: expresso.pr.gov.br Address: > exit No exemplo acima temos uma situação parecida com a descrita anteriormente só que desta vez especificamos em qual servidor DNS deveria ser realizada a consulta. 116

116 GERÊNCIA DE REDES DE COMPUTADORES Iremos agora depurar uma rede. Você possui uma rede problemática e precisa, urgentemente, fazê-la voltar a funcionar. Pode ser um host isolado, como pode ser uma rede completa. Antes de qualquer coisa, o administrador da rede deverá parar e pensar quais são as possíveis causas do problema e seguir um método para chegar a uma solução de forma mais rápida e eficaz. Existem vários comandos que permitem que um administrador depure uma rede problemática, sendo que cada um trabalha em uma ou mais camadas da pilha de protocolos TCP/IP, estruturado parcialmente de acordo com o modelo OSI. O TCP/IP foi desenhado segundo uma arquitetura de pilha, onde diversas camadas de software interagem somente com as camadas acima e abaixo. Há diversas semelhanças com o modelo conceitual OSI da ISO, mas o TCP/IP é anterior à formalização deste modelo e portanto possui algumas diferenças. Antes de estudarmos os comandos, precisamos entender superficialmente (já que não se trata de um curso de ciência, e sim técnico) o que é este modelo e como ele está estruturado na maioria das redes que conhecemos. Logicamente que, como um bom administrador, cabe a você aprofundar-se no assunto para ter um maior domínio e destreza dos comandos e depurações, mas o que será visto neste curso será o suficiente para serem resolvidos muitos problemas comuns. CAMADA OSI O modelo OSI/RM (Open Systems Interconnect Reference Model Modelo de Referência de Sistemas de Interconexão Aberta), ou simplesmente OSI, é um modelo que define as diretrizes (caminhos, indicações e modelos) a serem seguidas pelos protocolos que pretendem definir regras que façam com que sistemas operacionais consigam utilizar qualquer arquitetura de rede. Perceba que o modelo OSI em si não é nem um, nem um grupo de protocolos, mas sim o caminho que os desenvolvedores de protocolos deverão seguir para que haja uma total interoperabilidade entre sistemas e hardware. O projeto de criar o protocolo OSI foi abandonado e este modelo é usado atualmente para fins didáticos, é totalmente teórico e didático. O modelo OSI consiste em uma pilha de camadas, sendo que cada uma delas tem uma função específica. Para que uma informação possa ser transmitida, ela precisará passar pelas pilhas (camadas adjacentes do remetente e destinatário) seguindo uma direção e um sentido. Sempre deverá ser respeitada a ordem das camadas. Para uma informação ser enviada, ela deve começar da camada superior e ir para as camadas mais abaixo. Para receber uma informação, o sentido será o contrário. Se existirem cinco camadas num protocolo utilizado para estabelecer uma conexão entre dois computadores, as aplicações de ambos, para trocar dados, terão que propeli-los 117

117 de forma que as 10 camadas sejam transpostas. A camada mais ao topo do remetente preparará um segmento de dados que somente a mesma camada do destinatário entenderá. O mesmo acontece com a segunda camada, e todas as outras. A conversação dentro da pilha é feita, então, horizontalmente, enquanto o fluxo é vertical. Vejamos agora quais são as camadas: Figura 9: Camada OSI Com relação a figura a cima: Item 5 Camada de sessão: Disponibiliza serviços como pontos de controle periódicos a partir dos quais a comunicação pode ser restabelecida em caso de pane na rede. Item 2 Altere Possui recursos de confirmação de chegada dos dados Realiza o controle de acesso e transmissão no meio físico 118

118 PROJEÇÃO DA ARQUITETURA TCP/IP SOBRE O MODELO OSI O OSI é só um modelo de referência, e não necessariamente os protocolos utilizados pela maioria das redes estruturadas hoje coincidem com ele. O protocolo TCP/IP é uma pilha de protocolos mais enxuta e prática. Não é à toa que é o protocolo mais utilizado em todo o mundo. Vejamos uma projeção da pilha TCP/IP sobre as camadas do modelo OSI. Existem as aplicações de rede que repousam sobre a camada de aplicação, tanto no modelo OSI, quanto na arquitetura TCP/IP. Devido ao intuito deste curso, não iremos nos aprofundar nas camadas de apresentação e aplicação já que elas têm funções diferentes e abstratas de acordo com o protocolo utilizado. Basta sabermos que tarefas de encriptação de dados, assim como outras atividades adicionais que devem ser realizadas dependendo do aplicativo, que não estão abrangidos em nenhuma outra camada, são realizadas nelas. Podemos dizer que, no protocolo TCP/IP, a camada de aplicação abrange as três primeiras do modelo OSI. Depois disso, os dados precisam iniciar o processo de comunicação com outros computadores. O primeiro passo da comunicação propriamente dita acontece na camada de transporte. Os dados precisam ser identificados para que, posteriormente, o protocolo saiba quem solicitou o quê e possa devolvê-lo ao aplicativo certo. Isso é a multiplexação, que faz com que vários dados de aplicações diferentes passem a ser um fluxo uniforme e homogêneo de dados atravessando o meio físico. Somente na camada de transporte do destino é que esses dados lineares voltarão a ser divididos de acordo com a aplicação que os aguarda. Nesta camada também é definido se a conexão vai ser feita com controle de congestionamento, fluxo e confiabilidade de entrega (TCP), ou se, no lugar destas exigências, será priorizada a velocidade (UDP). Depois disso, temos a identificação de destino e origem e o trabalho de roteamento dos dados. No TCP/IP, esta camada recebe o nome de inter-redes, e é nela que a geratriz dos dados reside, o IP (camada de rede). É ele quem faz o endereçamento do destino e identificação do remetente do pacote. Continuando com o TCP/IP, é nesta mesma camada temos o ICMP que é um protocolo de auxílio ao IP. Este protocolo ajuda com mensagens de erro, controle de fluxo, etc. Esta camada possui os endereçamentos lógicos, mas para que os dados consigam fluir de forma correta, é preciso que o IP seja convertido no seu endereço MAC (camada de link). Depois disso, por fim, temos a camada de física, que nada mais é do que o meio utilizado para se propagar os sinais que representam os dados. Sempre que um dado vai ser enviado, ele vai descendo pela pilha de protocolos até chegar à camada de link (ou enlace) que gera o sinal a ser transmitido. Durante a estada nesta camada, após a fase de encapsulamento, os dados recebem o nome de quadros ou frames. Este frames são compostos por um cabeçalho que contém informações sobre o computador de destino e de origem, informações sobre o tamanho do quadro e um checksum (CRC), que verifica se está tudo certo (se todos os quadros chegaram). 119

119 EMPACOTAMENTO DE DADOS Os dados, no decorrer de sua jornada (pilhas abaixo ou acima), vão sendo empacotados e desempacotados a toda hora. Isso acontece por alguns motivos, sendo dois os principais: (a) linearizar os dados em um sinal binário simples para que eles possam ser transmitidos pelos meios físicos e depois retornar esses sinais nos mesmo dados iniciais; (b) e permitir que haja um isolamento das aplicações em relação à plataforma, permitindo que os dados sejam transmitidos independente do sistema operacional ou da arquitetura dos dispositivos em comunicação. O primeiro motivo é claro. O meio físico só entende código binário através da configuração da tensão de cada bit. Quando se tem um zero a tensão é x, quando se tem um 1 a tensão é y. O protocolo que trabalha na camada de enlace (ou link) é o responsável por criar a tabela de bits para que o meio, da camada física, transmita cada um deles de uma interface a outra numa or dem exata. A preocupação da camada física é essa: garantir que aquela tabela de tensões x e tensões y seja transmitida para seu destino exatamente na ordem da tabela criada pela camada de enlace (transerência bruta dos dados). Como somente com códigos binários o meio físico pode saber o destino das informações? É simples. Todas as interfaces que pertencem a mesma rede estão conectadas fisicamente (em contato através de fios, fibras ou ar, em caso de wireless) umas às outras. Toda vez que um dado deve ser transmitido, o remetente envia os dados para todas as interfaces locais, mas somente aquela que é o destino é que aceita o sinal. A interface de destino sabe que ela é a de destino, porque neste sinal temos os cabeçalhos com informações de identificação. Vejamos os três agrupamentos de dados que temos na pilha de protocolo TCP/IP: Cabeçalho Cabeçalho Cabeçalho Ethernet IP UDP 14 bytes 20 bytes 8 bytes Camada de Transporte Ethernet CRC 4 bytes SEGMENTO UDP Camada de Rede Camada de Enlace Dados de Aplicações 100 bytes PACOTE IP QUADRO (FRAME) ETHERNET Tabela 1: Empacotamento de dados Um aplicativo qualquer (como um navegador) que necessite se comunicar com uma interface remota, não precisa saber como a rede funciona. Para isso, ele irá se conectar a uma interface disponível na camada de aplicação da pilha TCP/IP. Um protocolo que permite que o navegador se encaixe na pilha TCP/IP é o http. Os dados que devem ser trafegados são enviados do aplicativo para o protocolo da camada de aplicação. A camada de aplicação envia estes dados para a camada de transporte, que começa o processo de quebra de informações em pedaços menores e inserção de cabeçalhos. Estes pedaços com cabeçalhos embutidos recebem a denominação de 120

120 segmentos, que são enviados para a camada de rede que faz processo igual a camada anterior, criando os pacotes. Os pacotes possuem nos seus cabeçalhos os IPa das interfaces de origem e IPs da interfaces de destino. Os pacotes são enviados para a camada de enlace, que também vai criar seu próprio agrupamento e dará a ele o nome de quadro (ou frame). Dentro desta camada existe o protocolo ARP, que são as regras que, entre várias atividades, convertem um endereço IP em endereço físico (MAC ADDRESS) e vice-versa. MAC ADDRESS é um endereço único que todas as interfaces de rede possuem. Existe um instituto regulamentador de normas técnicas que controla a emissão destes endereços para que ele nunca se repita em nenhum lugar do mundo. Uma empresa que fabrica estas interfaces precisa comprar uma faixa de endereços físicos para atribuir às suas peças20. Então apesar dos IPs poderem ser iguais em redes diferentes, os MAC ADDRESS nunca serão. Um computador mantém uma tabela dinâmica contendo os MAC ADDRESS de todas as interfaces de sua rede que se comunicaram recentemente. Se a conexão tiver que ser com uma interface de outra rede, o MAC ADDRESS endereçado será do roteador. Então o MAC ADDRESS é inserido dentro do cabeçalho e agora sim a interface de destino saberá que aquelas informações são destinadas a ela. Voltando a inundação de dados enviados à toda rede (conhecida como broadcast). Os frames são criados na camada de enlace. Eles são compostos do pacote IP (que para eles é uma caixa preta) e um cabeçalho contendo o MAC ADDRESS e marcas de onde cada frame começa e termina. Estes limites são criados pelo protocolo LLC (Logical Link Control Layer - Camada de controle de link lógico) residente da camada de enlace. Ele cria uma tabela com as tensões que a camada física deverá usar para definir os 1 e 0s, e indica o tempo certo que cada bit terá. Desta forma, todos os dados são enviados para toda rede, todas as interfaces locais recebem os frames e os convertem em pacotes IPs. É verificado no cabeçalho deste IP se o endereço do destinatário corresponde com o próprio endereço. Se sim, os dados são enviados para cima até chegar a aplicação. TCP/IP O TCP/IP foi criado e implementado, sendo o conjunto de protocolo mais utilizado hoje em redes de computadores. A internet utiliza-o, sendo assim, podemos perceber a dimensão de sua adoção. Este protocolo cria uma interface de programação uniforme que permite que diversos tipos de hardware, independentes de suas tecnologias, consigam transportar dados e que exista interoperabilidade entre sistemas híbridos. Vejamos como ele é constituído: Camadas Camada de aplicação Exemplos de protocolos FTP - WWW - SMTP - POP - IMAP - TELNET 20 Por isso, cuidado com as placas clonadas. Provavelmente elas clonaram algum endereço existente sem pagar por ele. Se duas placas tiverem o mesmo MAC ADDRESS haverá conflito e a comunicação será prejudicada. 121

121 Camada de transporte TCP - UDP Camada inter-redes IP - ICMP - ARP - RARP Camada de interface de rede ETHERNET, TOKEN-RING, sem-fio, ATM CAMADA DE APLICAÇÃO A camada de aplicação é fornecida pelo programa que deseja se encaixar à pilha. Existem vários protocolos utilizados nesta camada. O navegador de internet é uma aplicação, mas não podemos confundi-lo com a aplicação responsável pelo encaixe na pilha, que no caso é o http. Um programa utilizado pelo usuário final pode escolher um dos protocolos (serviço ou aplicativo) que fazem parte da camada de aplicação mais adequado às suas necessidades. Navegadores, como IE, Mozilla Firefox, Opera e Epiphany utilizam o protocolo http, https e FTP na camada de aplicação. Aplicativos como Nautilus, Filezilla FTP Transport e SmartFTP utilizam o protocolo FTP. Vejamos os principais protocolos da camada de aplicação: HTTP (hiper text transport protocol - protocolo de transporte de texto rico) permite que haja transferência de páginas pelas redes de computadores. O rico indica que as informações são transmitidas com informações a respeito da formatação e recursos adicionais, permitindo que o texto do outro lado chegue sem ser como simples texto puro. FTP (file transport protocol - protocolo de transporte de arquivo) é um conjunto de regras e instruções que permite que haja transferência rápida de arquivos entre computadores distintos. SMTP (simple mail transport protocol - protocolo de transporte simples de ) é um conjunto de regras e instruções que faz com que uma mensagem seja convertida em texto simples e possibilita que seja definido, através de um endereço de , que esta mensagem seja identificada e enviada para um destinatário específico. IMAC (internet message access protocol - protocolo de acesso a mensagem pela internet) um protocolo mais completo de envio e recebimento de mensagens que permite que o usuário tenha mais recursos disponíveis, como manter suas mensagens no servidor depois de recebê-las. TELNET é um protocolo simples que cria uma conexão entre computadores distintos e que possibilita a troca de informações através de linha de comando. Para configurar modens e impressoras sem display próprio, utiliza-se este recurso. SSH (security shell) cria uma conexão entre interfaces distintas e possibilita que remotamente um cliente acesse o shell (terminal) de um servidor. Os dados são criptografados, dando mais segurança à troca de informações. A camada de aplicação da pilha TCP/IP abrange três camadas do modelo OSI (aplicação, apresentação e sessão). Assim, podemos dizer que nesta camada os dados a serem transmitidos 122

122 são inicialmente diferentes, mas nela começam o processo de linearização, para que as informações a serem transmitidas se tornem uma série de informações uniformes e de padrão igual para que as próximas camadas se preocupem apenas com as suas atividades de transmissão pela rede. Antes da conversão, eles definem com quem a conexão será realizada, estruturam os dados num formato próprio do protocolo (compactando-os, criptografando-os, etc), e depois converte-os numa sequência de dados que deve ser transmitida pelo meio físico da rede. importante observar que a comunicação é feita entre as camadas iguais. A camada É de aplicação do cliente se comunica com a camada de aplicação do servidor, e assim por diante. Isto quer dizer, que os dados da camada de aplicação são como várias caixas pretas para as camadas abaixo. As camadas abaixo vão simplesmente adicionando cabeçalhos a estas caixas. Imagine uma empresa, a Pilintra's Corporation, sediada no Paraná, que deseja enviar encomendas para suas filias pelo Brasil. A transportadora do Paraná utilizada para esse fim pode ser comparada a uma rede local. Ela tem abrangência estadual, tendo que sempre repassar a tarefa para outra transportadora quando muda de estado. A nova transportadora será uma rede remota. A empresa Pilintra's Corporation pode ser equiparada a uma aplicação, como o Firefox, por exemplo. Quando a empresa precisa enviar uma encomenda, esta é levada até um balcão de coleta da transportadora para que ela inicie o processo de transporte. Neste balcão é feita a coleta da encomenda, registro do remetente e destinatário e necessidades do transporte. A encomenda pode ser compactada ou precisa ser colocada numa caixa com indicação frágil? Deve ser registrada, com seguro ou seja o que Deus quiser? Depois da coleta ser realizada, caso seja necessário compactação, discrição, ou qualquer exigência do cliente, os funcionários atrás do balcão iniciarão o processo de preparação para o transporte. CAMADA DE TRANSPORTE Dentro desta camada temos os protocolos TCP e UDP, que definem as regras de envio de segmentos de dados criados pela camada de aplicação. Os dados já são iguais, independente de terem sido criptografados, compactados, serem ricos, texto puro, ou seja, não importa a estrutura dos dados, agora tudo não passa de uma série de dados que devem ser transmitidos de uma interface à outra. Esta camada é responsável por identificar quais são os aplicativos responsáveis por cada informação trafegada. Este controle é feito através de portas ou soquetes. Se o protocolo ssh, da camada de aplicação, estiver enviando alguma informação de uma interface à outra, ele deverá criar sua estrutura, convertê-la em dados lineares e enviar o resultado para a camada de transporte que se encarregará de identificá-la através de uma porta. Porta é um espaço na memória que permitem que algum dado transmitido seja enviado à aplicação certa. Quando o segmento de dados é criado (TCP ou UDP) é adicionado ao cabeçalho o endereço da porta de destino, ou espaço na memória do computador remoto que os dados deverão ser armazenados. Desta forma, 123

123 uma aplicação sabe exatamente quais dados devem ser interpretados por ela. Vejamos um exemplo. A porta padrão do ssh é 22, ou seja, o espaço na memória que possui o endereço da porta 22 é associado ao aplicativo ssh. Sempre que alguma informação chegar pela rede e possuir a porta 22 como destino, os dados serão enviados a este espaço e, automaticamente, serão enviados para o aplicativo ssh que conseguirá converter aquela caixa preta em dados válidos e úteis. TCP O TCP (transport control protocol) é responsável, assim como o UDP, pela criação do segmento de informações a ser enviado à interface distinta e o controle de identificação dos dados que os segmentos representam. S egmento é a unidade de transmissão do TCP e UDP. Ele é constituído pelo cabeça lho TCP ou UDP e os dados vindos das camadas superiores, que não são tocados por eles. Nesta camada temos os segmentos, na camada de rede temos os pacotes e na de enlace os quadros. Ele tem como principais atividades: Confiabilidade: toda vez que um segmento chega à camada de transporte do destinatário, uma mensagem de resposta chamada ACK (acknowledgment confirmação) é enviada ao remetente para que este possa enviar o próximo segmento. Se após um determinado tempo, o ACK não chegar, o remetente envia novamente o segmento perdido. Todos os segmentos são identificados no primeiro byte de suas estruturas com números sequenciais. Isto permite que haja o controle de quais segmentos chegaram e quais foram perdidos. Controle de fluxo: caso o ACK seja recebido pelo remetente, nesta mensagem o destinatário registra a informação que permite que o remetente saiba como está o buffer de armazenamento da pilha TCP/IP, permitindo que o remetente envie o próximo segmento ou atrase um pouco a remessa. Isto faz com que os dados trafeguem pela rede somente se houver a quase certeza de que eles serão recebidos, diminuindo o tráfego de quadros no meio físico. Multiplexação: associa cada segmento a uma porta, permitindo, assim, que a interface de destino saiba qual processo deve receber determinado segmento. Este recurso permite que vários dados de aplicativos distintos trafeguem como se tivessem a mesma origem, independente do hardware abaixo e software acima estejam sendo utilizados. UDP O UDP (user datagram protocol - protocolo de datagramas de usuários) é basicamente a interface entre a camada de aplicação e o protocolo IP. Ele não tem controle nenhum, e a única coisa que faz é a multiplexação, associando os dados a algum aplicativo determinado. Por ser bas- 124

124 tante simples, ele é bem mais rápido que o protocolo TCP, porém não provê garantia nenhuma de que os segmentos irão chegar ao seu destino. Recursos como vídeos expressos da internet, como aqueles vistos no youtube, em grande parte utilizam este protocolo de conexão. Escolha essa, devido ao fato de o quê importar nesse tipo de tarefa é a velocidade, tendo as informações perdidas substituídas por pixels pretos, que diminuem a qualidade das imagens, mas melhora muito a velocidade de download. Portas e soquetes As portas e soquetes são espaços reservados na memória principal que ao receberem informações realizam alguma sincronia com um serviço (recebendo dados) ou com a camada de trasporte (enviando dados). Toda vez que um serviço precisa enviar algo a um computador remoto, ele envia uma requisição de conexão e espera para verificar se isso será possível. Digamos que um computador A precisará se conectar por ssh a um computador remoto B. O serviço ssh deve estar instalado nas duas máquinas e rodando (ser um processo). Os dois processos ficam vinculados à porta 22. O servidor (computador B) fica escutando a porta 22, ou seja, verificando se aquele espaço específico da memória recebe alguma informação. Quando o cliente (que chamaremos de computador A) precisa se conectar ao servidor, ele envia a requisição à sua porta 22. Esta requisição possui, também, o número de uma porta no cliente que estará disponível para se estabelecer uma conexão (por exemplo, a porta 55555). Esta requisição desce a pilha de protocolos TCP/IP, é transmitida pelo meio físico e então chega à porta 22 do computador B (o servidor). O processo ssh que estava escutando esta porta, converte os dados em informação inteligível a ele e, se verificar que é possível a realização da conexão, envia uma mensagem ao cliente informando que a conexão poderá ser realizada e estabelece um soquete, que nada mais é que o estabelecimento da porta 22 do servidor com a porta disponibilizada no cliente (no nosso casso ) como forma de comunicação entre os computadores. Agora o ssh do servidor continua escutando a porta 22 por novas conexões e por requisições quaisquer, e sabe que sempre que requisições vindas do computador A devem ser enviadas à porta do mesmo. Quando a conexão finalizar, o soquete (conexão específica) será desfeito e a porta do computador A voltará a estar disponível. P erceba bem que porta é um espaço da memória que pode ser utilizado por um serviço, enquanto soquete é um vínculo (conexão estabelecida) entre interfaces diferentes que utiliza portas para comunicar-se uma com a outra. Uma porta não depende de um soquete, já um soquete depende de portas. Numa transportadora, os protocolos TCP e UDP identificam os portões a serem utilizados na saída e entrega. Tudo que sair do portão 22 da transportadora local, deve ser entregue ao portão 22 da transportadora remota ou um outro especificado previamente. Cada porta representa uma 125

125 empresa contratante da transportadora. Do portão 22 saem as encomendas da Celepar, enquanto do portão 33 saem as encomendas da Copel. Usando o protocolo TCP, um funcionário da transportadora local liga para a remota perguntando se pode enviar os dados e quantos caminhões devem sair. Toda vez que um caminhão chega, a sede receptora liga informando que a encomenda chegou e quantos caminhões podem sair da transportadora sem causar tumulto na recepção. Isso irá acontecer em ambas mãos, tanto da local para a remoto, como da remoto para a local. Com o UDP, a transportadora manda toda a encomenda, independente da quantidade de caminhões necessários para isso, de uma só vez. Se houver fila ou se algum caminhão tombar na estrada, nem os motoristas nem a transportadora remota irão avisar a local. A carga será perdida e a empresa contratante (aplicação) é quem deverá arcar com a perda. CAMADA INTER-REDES Cinco computadores conectados a um hub formam uma rede com topologia de barramento. Esta topologia mantém em contato físico todos os computadores. O hub nada mais é do que um super T que conecta todos os computadores. Quando um deles quer enviar alguma informação para outro, todos os outros irão receber os pacotes, mas somente aquele que é o destinatário é quem irá desempacotá-lo por completo. Para saber qual é o endereço do destinatário, é necessário saber o seu IP. O IP é convertido em MAC pela camada mais abaixo e somente aquele destino que possua o endereço de MAC definido no pacote é quem irá aceitá-lo. Em vez de trabalharmos com o endereço de MAC, trabalhamos com o IP, que é tratado e inserido no pacote na camada Inter-Redes. A partir desta camada, a plataforma e hardware de comunicação podem ser qualquer que tenha suporte ao protocolo TCP/IP. Isso quer dizer que esta camada é responsável por criar uma barreira entre aplicações-plataforma e arquitetura dos aparelhos de comunicação. Assim, facilmente podemos ter comunicação entre um computador Windows e Linux, e também entre computadores conectados ao hub por um cabo ou por um dispositivo wireless. Outra função importantíssima desta camada é a de roteamento. No caso estabelecido anteriormente, tínhamos uma rede com cinco computadores. E se quisermos ligar esta rede a outra rede que contém mais cinco computadores? Somos induzidos a entender que estamos conectados a duas redes. E se quisermos conectar a nossa rede a essa outra e mais à internet? Seríamos induzidos a pensar que estamos conectados a três redes. Errado. A partir do momento que temos acesso à segunda rede e à internet, temos acesso a apenas uma rede, ou a uma inter-rede. Apesar da primeira ser diferente da segunda, e da internet ter milhões de redes que a compõe, dizemos que estamos conectados a apenas uma rede ampla. Isto se deve aos roteadores. Estes equipamentos, que podem ser ou computadores com mais de uma placa de rede, ou então equipamentos próprios e dedicados à roteamento, são os pontos de ligações entre uma rede e outra. Podemos conectar a nossa primeira rede um roteador, que fisicamente está conectado à primeira rede e à segunda. Toda vez que precisamos enviar uma informação para a segunda rede, ela será 126

126 enviada para esse roteador que enviará os dados para o computador da segunda rede. Se conectarmos a esse roteador um cabo da internet, que normalmente é provido por um provedor de internet, podemos acessar em ambas redes a internet. Os roteadores possuem tabelas de roteamento, para saberem o que fazer caso a conexão a um determinado computador seja solicitada. Normalmente os roteadores de provedores possuem bastante informações e conseguem definir um trajeto bastante reto até o destino, mesmo que o computador esteja em outro continente. Quem cuida de todo o roteamento de pacotes é a camada inter-redes da pilha TCP/IP. Ele verifica qual é o IP de destino e, através de regras específicas, indica qual é o caminho a ser tomado: uma interface conectada diretamente a ele ou um próximo roteador que estará conectado a uma nova rede. Resumindo, esta camada tem dois objetivos principais: Isolar aplicações e plataformas do hardware e softwares de rede; Criar uma rede única estendida a partir de várias outras, através dos roteadores. IP O IP é um dos protocolos da camada de rede que implementa o endereçamento de um host na rede que possua uma interface capaz de enviar e receber datagramas IP. Sob a versão 4, ele é composto de 32 bits, sendo 8 para cada octeto. Um octeto pode assumir um valor de 0 a 255, totalizando 256 possibilidades por octeto. Veja o exemplo abaixo: Para sabermos qual é a rede lógica a qual este IP pertence devemos confrontá-lo à mascara de rede. Existem as seguintes classes de rede: Classe Classe A Range Classe B Máscara Padrão Formato REDE. HOSTS. HOSTS. HOSTS REDE. REDE. HOSTS. HOSTS Classe C Privados REDE. REDE. REDE. HOSTS (localhost) x.x.x.0 (rede) Reservad x.x.x.255 (broadcast) os Se a máscara for a padrão ( ) a rede do host será a de classe A. ICMP Internet Control Message Protocol - Protocolo de Controle de Mensagem na Internet Como o próprio nome diz, ele é um protocolo que define várias mensagens de controle mui127

127 to úteis dentro do protocolo TCP/IP. Quando pingamos um computador, ou seja, quando enviamos uma pergunta a um host remoto para verificar se ele está disponível na rede, é o protocolo ICMP quem responde dizendo Opa, tô funcionandinho aqui!. Existem alguns tipos de pacotes deste protocolo de controle, vejamos os principais: Eco, que é a pergunta de disponibilidade da interface e a sua resposta; Verificação de tangibilidade de redes, hosts, protocolos e portas; Verificação de existência de redes e hosts; Aviso de erro na rota de destino; Impossibilidade de comunicação devido a atos administrativos (filtros como firewall); Solicitação de estampa de tempo e resposta a esta solicitação (para verificação do tempo levado pelo pacote para envio e recebimento); Tempo de espera de resposta excedido. ARP Address Resolution Protocol - Protocolo de Resolução de Endereços ARP é um sistema de indexação que possui um banco de dados, onde são armazenadas associações entre endereços de alto nível (IP) e endereços físicos (MAC Address). O nome do comando que manipula o ARP recebe o mesmo nome. A conexão entre os computadores é realizada através de uma multiplexação de dados, ou seja, informações que precisam ser enviadas de um computador a outro são divididos em vários pacotes e cada um deles recebe várias informações em cabeçalhos para que possam chegar a um destino e serem reorganizados e montados na sua forma original. Numa rede bem configurada, existem computadores com IPs diferentes e roteadores que ajudam os pacotes a chegarem em seus destinos. Mas IPs são endereços lógicos, que abstraem o endereço físico de cada uma das interfaces (nós) da rede. Os endereços físicos são únicos e definidos pelos fabricantes das interfaces. Como nenhum nó no mundo todo pode ter o mesmo endereço físico, o número de bytes utilizado para defini-los é bastante grande. O IP surge com a ideia de tornar mais fácil a configuração da rede, possibilitando a existência de um padrão que facilite a instalação e o gerenciamento de ambientes complexos (numa mesma rede teremos , , etc). Só que o IP é entendido pelo computador apenas nas camadas mais altas dos protocolos de comunicação, tendo que ser convertido em endereço físico nas camadas mais baixas. Esta conversão será feita com a ajuda do ARP (Address Resolution Protocol Protocolo de resolução de endereços). Este protocolo possui uma série de regras e instruções que indicam como os computadores devem descob- 128

128 rir o endereço físico de computadores da rede; como devem se comportar quando souberem que outro computador estão os procurando; e criam uma tabela (cache) com associações entre IPs e MAC Address para serem utilizados no futuro, otimizando o processo. A pesquisa de um endereço físico é feita da seguinte forma: o computador que deseja descobrir qual é o endereço físico de um determinado IP, irá fazer um broadcast com pacotes ARP. Estes pacotes ARP serão ignorados por todos, exceto por aquele computador que utiliza o IP pesquisado. Este irá, então, enviar um pacote ARP para o requisitante com algumas informações a seu respeito, entre elas o seu endereço físico. Então sempre teremos dois pacotes ARP, sendo um de pesquisa e o outro de resposta enviado pelo computador que está sendo procurado. Tanto o computador que procura, quanto o que foi encontrado, mantêm em cache a associação do IP com o MAC Address do outro, para que no caso de uma nova conexão, o processo seja realizado de uma forma mais rápida. O cache é apagado após algum tempo. Este processo é chamado de Aging. Quando a distância está fora da abrangência da transportadora contratada, ela repassa a encomenda para outra. Pode existir uma transportadora especializada em cada estado, e uma que transporta encomendas para distâncias maiores, como outro continente. A única exigência é que as transportadoras tenham contato. Imagine uma encomenda que vai ser enviada do RS para o PR. A Tchê transportes (RS) enviará a encomenda para a Barriga Verde Express (SC) que, por sua vez, finalmente entregará a encomenda para a Vina on Roads (PR). Caso precise enviar uma encomenda para a Jamaica, será necessário utilizar a transportadora Internetional, que só possui posto em São Paulo. Então a encomenda deverá ser enviada da mesma forma como no exemplo anterior, com o adendo de trajeto PR para SP, SP para Jamaica. Para a empresa que contratou o serviço de transporte, mandar para outra cidade ou outro país parece ter a mesma natureza de entrega, uma entrega direta ao seu destinatário, já que ela não sabe que haverá troca entre transportadoras. Isso quer dizer que ela é induzida a imaginar que a conexão RS e Jamaica é direta, mas, na verdade, por debaixo dos panos, a rede de transporte é heterogênea (várias redes, ou transportadoras, compondo uma única rede de transporte). Mas e como saber qual é o trajeto a ser seguido? Através da identificação do endereço do remetente e destinatário (fornecidos pela empresa - aplicação) e das tabelas de roteamento, indicando qual é o caminho a ser seguido para que uma encomenda chegue ao seu destino. Toda essa gerência e manipulação é realizada pela camada Inter-Redes. CAMADA DE ENLACE Esta camada é responsável em transportar os pacotes da camada inter-redes em quadros pelo meio físico. Um quadro é a unidade da camada de enlace. Todos os pacotes são divididos e, 129

129 então, são anexados a eles um novo cabeçalho. Este cabeçalho contém bits que indicam o início de um quadro e o fim. Normalmente existe um logarítmo (não sei o que é isso, mas acho que está errado) inserido no quadro que permite que a camada de enlace do destinatário saiba qual é o tamanho do quadro, mas isso depende da tecnologia utilizada pelos equipamentos e meios físicos. Ethernet Ethernet é o protocolo utilizado pela maioria das redes de computadores existentes na atualidade, mas já está sendo trocada pelas tecnologias utilizadas pelas redes wireless. Todas as interfaces estão em contato e todos os quadros são enviados para todos, cabendo a cada uma delas verificar se são as responsáveis por ele. Este protocolo tem como unidade de transporte o frame, ou quadro. Um quadro é composto por vários compartimentos que possuem naturezas distintas. São eles: Preâmbulo; End de Destino; End de Origem; Tipo; Dados; FCS. O preâmbulo é composto por 8 bytes. Quer saber quais são as informações contidas dentro deste compartimento? Não? Então não leia abaixo: Este compartimento indica que um quadro irá começar. Quando uma interface recebe essas informações, a camada de enlace dela interpretará esses dados como o início de um quadro. Depois da assinatura 11 inicia-se o segundo compartimento. Os 2 seguintes compartimentos são facilmente entendidos. O tipo é o protocolo utilizado pelo meio físico. No nosso caso, será o protocolo Ethernet. O compartimento Dados é reservado para as informações a serem transmitidas. E, por fim, o FCS (Frame Check Sequence Sequência para Checagem de Quadro) é um algoritmo que permite que a camada de enlace saiba se todos os bits do quadro foram recebidos. Isto é feito através de cálculos matemáticos. Vamos verificar tudo que foi visto até agora. Estamos no Paraná e o nome da nossa empresa é Pilintra's Corporation (aplicação). A filial do Rio de Janeiro liga para nós pedindo uma encomenda e indica que ela pode ser enviada ao portão 50000, da transportadora do rio, que foi alugado exclusivamente para recebimento da encomenda. Nós temos um portão exclusivo na transportadora local para enviar encomendas, que é o 10. Este portão está sob a supervisão de um fiscal, 130

130 que verifica se as encomendas foram enviadas e espera uma confirmação de recebimento vinda de qualquer um dos destinos. Fecha-se aí um soquete, que é a associação do portão com confirmação 10 da transportadora local (porta TCP) com o portão da transportadora remota. As transportadoras local e remota são as redes distintas que trabalham sobre as mesmas regras e metodologia de entrega, ou seja, mesmo protocolo (TCP/IP). Vamos até o tal balcão de recepção (camada de aplicação) e deixamos nossa encomenda indicando qual será o destino (a filial da Pilintra's Corporation no Rio no portão 50000). A encomenda vai para o portão 10 e, de lá, é acomodada dentro do caminhão. O motorista recebe o endereço de destino da encomenda, e percebe que está fora de sua abrangência. Ele possui uma tabela de empresas conveniadas que poderá entregar a encomenda (tabela de roteamento), e descobre que terá que enviar para uma transportadora de São Paulo. Para encaminhamento da encomenda, eles precisam de um posto de troca (gateway) entre as duas transportadoras (duas redes distintas), que fica bem na divisa dos estados. Através do caminhão (quadro) e das rodovias (meio físico), a encomenda chega até o posto, local onde é feito o encaminhamento da encomenda e do endereço de destino. O mesmo acontece entre SP e RJ. Quando a transportadora do RJ recebe a encomenda, descobre que a entrega está dentro de sua abrangência. Leva o caminhão até o portão e descarrega a encomenda. O fiscal do RJ liga para o fiscal do PR e fala: Chegou, velho! - E encaminha para o balcão de entrega com identificação do destinatário. O funcionário da Pilintra's Corporation vai até o balcão e pega a encomenda. A transmissão foi realizada com sucesso. PARÂMETROS NECESSÁRIOS Para que um host possa pertencer a uma rede, é necessário que ele possua um caminho físico que o ligue à rede e alguns parâmetros configurados que fazem com que ele identifique outras interfaces conectadas a esse meio físico e vice-versa. Todos os parâmetros devem possuir um valor, porém todos têm um valor padrão, tendo que, caso seja a vontade do administrador, valores diferentes serem definidos através de arquivos de configuração, scripts ou comandos. IP O IP é a identificação lógica de uma interface. É a sua identidade em uma rede. Podemos obtê-lo através de um sevidor DHCP ou então fixando-o um enderço no arquivo Arquivo de configuração: /etc/network/interfaces Independente da forma escolhida, o arquivo acima deve ser configurado, já que a ativação da procura de parâmetros através de um servidor DHCP é feita nele. Outra forma de se configurar este parâmetro é através do comando ifconfig, porém ele funcionará apenas enquanto o serviço networking não for reiniciado. 131

131 Rede A rede que o seu host faz parte pode ser definida através do comando interfaces, e é a forma mais indicada. Arquivo de configuração: /etc/network/interfaces C aso a rede não seja explicitada e o sistema de obtenção de parâmetros de rede não seja DHCP, o sistema irá confrontar a máscara padrão sobre o IP atribuído à interface para definir a rede. Digamos que o IP seja , a rede será Também é possível definir uma máscara utilizando o comando ifconfig, porém a alteração será temporária (será visto na página 138). Gateway Para se definir um gateway para que todas as vezes que o computador for ligado ele seja definido, é possível se inserir um script de inicialização dentro de um dos rc's alocados dentro /etc/init.d ou do diretório /etc/network/if-up.d ou então configurar no arquivo interfaces explicitando qual será o gateway. Arquivo de configuração: /etc/network/interfaces Também é possível inserir uma rota temporária utilizando o comando route (veremos na página 142). Nomes Computadores trabalham com bits (zeros e uns); a interface de programas criados para configuração da rede trabalham com números; e usuários e administradores, em suas atividades rotineiras, trabalham com nomes. Para se trabalhar com nomes, são necessários serviços que façam a conversão de um formato em outro. Antigamente, todos os computadores conectados à internet tinham um arquivo como o hosts, este abaixo: Arquivo de configuração: /etc/hosts Neste arquivo existiam todos os nomes utilizados pelas pessoas associados a um endereço IP. Toda vez que um nome era digitado automaticamente um gerenciador de nomes recebia o nome e transformava em um IP. A conversão de IP para bits era feita pelos protocolos de rede. Toda vez que alguém criava um novo local na rede, enviava o IP e dados adicionais desse local para um grupo de pessoas que ficavam responsáveis por criar um hosts completo e enviar para todos que estiverem cadastrados em uma lista de s. No começo funcionava bem, mas com o tempo uma fila de solicitação de inclusão de nomes começou a crescer muito, e as atualizações 132

132 deste arquivo muito frequente. Para evitar os problemas causados pelo inchaço da internet foi criado o DNS (Domain Name Server - Servidor de nomes de domínio). Este serviço substituiu o arquivo local de nomes, servindo como um servidor de conversão de nomes. Toda vez que um nome deve ser convertido em um IP, o DNS é consultado e ele retorna o endereço. Mesmo com os complexos serviços de conversão de nomes existentes hoje, o arquivo hosts permanece na maioria dos sistemas Unix-Like. Dentro deste arquivo é possível associar nomes a IPs sem a necessidade de se consultar um DNS. Dentro deles temos, por padrão, o nome localhost. Este nome significa Terminal Local, ou seja, o computador em que o usuário está. Ele é muito útil em várias tarefas, como testar a in terface de rede do seu computador. Para isso o usuário pode pingar para localhost em vez do seu próprio IP ($ ping localhost), ou então configurar o CUPS pelo navegador, digita na caixa de endereço Vejamos um exemplo do hosts: localhost safadim ecelepar11940.celeparsl ecelepar11940 Sintaxe: IP nome1 nome2 nome3 nome(n) Observações importantes Todas os campos DEVEM ser separados por espaços (pode ser um, vários ou TABs); Os nomes DEVEM começar com um caractere alfabético; Os nomes DEVEM finalizar com um caractere alfanumérico; São permitidos os caracteres alfanuméricos, ponto (.) e o hífen (-). Além destes nomes, é necessário configurar um servidor DNS para que os endereços da internet possam ser convertidos. O simples não poderá ser acessado se o resolv.conf não estiver configurado com um servidor DNS válido. Arquivo de configuração: /etc/resolv.conf Os DNS devem ser configurados da seguinte forma: nameserver Sintaxe: nameserver DNS1 DNS2 DNS3 DNS(n) 133

133 Pode ser usado um nome em vez de um endereço IP. PRIMEIROS SOCORROS Antes de qualquer coisa, pensemos o que é necessário fazer para tentar identificar os principais problemas em uma rede de computadores: O cabo da internet está conectado corretamente? (verificar se a luz da placa de rede está acesa e se o seu ponto está funcionando, colocando-o em um outro computador, e colocando o cabo do outro computador no que apresentou problema originalmente. Utilizar o comando mii-tool para verificar se o protocolo de comunicação da camada física foi negociada página 157); É possível pingar para endereços locais e externos? (pingar significa jogar um pacote para um computador e ver se ele manda-o de volta. Se ele mandar, é que está respondendo, estando acessível. Tentar vários tipos de hosts é interessante para saber se o problema é no roteamento de dados. Pode-se ter comunicação na rede, mas quando tentado sair da rede pelo roteador, algo pode acontecer de errado. Para verificar se as interfaces estão funcionando corretamente e se a conexão com o host pode ser estabelecida, utiliza-se o comando ping página 134); O serviço referente à rede está rodando corretamente? (reiniciar o serviço da rede é uma boa pedida para verificar se ele não estava apenas travado ou então para receber as primeiras informações de problemas. Para isso execute o comando /etc/init.d/networking restart, logicamente que como superusuário); A interface utilizada para se conectar à rede está configurada apropriadamente? (deve-se verificar se a interface está ativa - ifconfig e route - e se os principais arquivos de configuração de uma rede estão configurados corretamente - /etc/network/interfaces - /etc/resolv.conf /etc/hosts - /etc/network); Outros serviços conseguem se conectar à rede? (o navegador pode estar com problema, mas o ssh consegue se conectar? É possível acessar um local da rede por ftp? As vezes o problema é uma configuração de uma aplicação, e não de configuração do sistema); Este é um bom exemplo de como se comportar diante de um problema de rede. Agora que já abordamos vários conceitos necessários para um bom administrador de redes, vamos verificar o funcionamento de alguns comandos que devem fazer parte do seu canivete suíço. PING O ping é o comando mais simples e útil que você pode imaginar. Ele simplesmente pergunta a uma interface remota se ela está acessível. É quase igual a quando você está num hospital e aperta o botão da enfermeira sem necessidade nenhuma, só para ver ela entrando desesperada 134

134 no seu quarto e ter a segurança de que ela está acessível e atenta às suas requisições (com a grande vantagem que as repostas ao comando ping não desacreditam e param de responder na quinta chamada). O comando ping utiliza o protocolo ICMP como colaborador principal. Como já vimos, o ICMP está na camada de rede, junto ao protocolo IP, e auxilia-o em várias atividades. Como este protocolo está na camada 3 do protocolo TCP/IP, o ping não realiza troca de dados de aplicativos, e sim envia um pacote de teste que possui um cabeçalho com o IP, atributos ICMP e marcas de tempo para fazer seus cálculos posteriormente. Todo o resto do pacote é um monte de informações binárias que servem só para preencher a estrutura do frame. O cabeçalho do IP possui 20 bytes, contendo informações sobre os IPs da origem e destino das solicitações. A parte específica do ICMP possui 8 bytes. O padrão é de um pacote com cabeçalho de 8 bytes mais 56 bytes adicionais, com informações adicionais e bits aleatórios. Se houver resposta, ele verifica o tempo de resposta e mostra ao usuário. Os campos mostrados pelo comando ping são os seguintes: PING <host> (IP_do_HOST) tam1(tam2) bytes of data. Tam3 bytes from <host> (IP_do_HOST): icmp_seq=n ttl=n time=n.nnn ms Os n s são as principais informações que o comando ping nos trazem. Eles ficam dentro do cabeçalho ICMP e são chamados de TTL (Time To Live - Tempo de Vida) e TIME (tempo). Toda vez que um pacote é enviado, ele pode ser considerado perdido e aparece uma mensagem de erro. Existem vários motivos para que um pacote se perca, sendo um deles ser excedido o número máximo de hops, ou seja, o número máximo de roteadores para chegar ao seu destino. O número padrão é de no máximo 61 hopes para chegar ao destino. Já no caso de haver uma resposta, será verificado através do cabeçalho ICMP o tempo de saída e de chegada, e calculado o tempo que o pacote levou para ir e voltar do destinatário. Esta informação é mostrada em TIME. A unidade utilizada pelo ping é o ms e é o acrônimo de milissegundo 1,0 x 10-3 s ou 0,001 s. icmp_seq traz uma informação muito valiosa para o administrador: o número de sequência do pacote que está sendo enviado. Se 10 pacotes forem enviados e apenas o 1, 4 e 10 chegarem, isso quer dizer que muitos problemas estão acontecendo no caminho, ocasionados provavelmente por algum dos roteadores. Se isto acontecer, é interessante usar o comando traceroute para verificar onde estão os problemas. A s informações de hora e data de saída e chegada dos pacotes ficam num campo (quadro) chamado timeval, que fica fora dos cabeçalhos. Assim, se o usuário definir 135

135 um pacote menor que o quadro do timeval, que é de 8 bytes, a informação TIME não aparecerá. Vejamos alguns exemplos da utilização do ping: 1.Verificando se um host remoto está acessível pelo IP: ~$ ping PING ( ) 56(84) bytes of data. 64 bytes from : icmp_seq=1 ttl=61 time=0.453 ms O comando ping é ininterrupto. Para finalizar a sua execução, pressione o conjunto de teclas <CTRL><C>. 2.Verificando se um host remoto está acessível pelo nome: ~$ ping PING ( ) 56(84) bytes of data. 64 bytes from : icmp_seq=2 ttl=57 time=127 ms 3.Verificando quais hosts estão disponíveis em uma rede (use o broadcast da rede): ~$ ping b WARNING: ping broadcast address PING ( ) 56(84) bytes of data. 64 bytes from : icmp_seq=1 ttl=255 time=0.217 ms 64 bytes from : icmp_seq=1 ttl=64 time=0.459 ms (DUP!) 64 bytes from : icmp_seq=1 ttl=64 time=0.505 ms (DUP!) Caso um computador não esteja acessível, as seguintes mensagens poderão ser mostradas na tela: Mensagem 136 Significado Network unreacheable Rede de destino intangível, ou seja, o pacote atingiu o máximo de pulos de roteadores e não conseguiu encontrar a rede desejada. Host unreacheable Igual ao anterior, mas em vez de rede, não foi possível atingir um host. Protocol unreacheable O protocolo utilizado pelo cliente está desativado no host remoto. Port unreacheable A porta pela qual o cliente tenta se comunicar com o host remoto não possui nenhum serviço associado. Destination unknown network A rede a qual o cliente está tentando se conectar não é reconhecida. Isso quer dizer que não existe na tabela de roteamento uma saída que o leve à rede desejada. Destination unknown network Igual à mensagem anterior, porém o que não se conhece e não se existe caminho indicado é um host.

136 WGET Para realizar downloads de arquivos da internet não é necessário se ter uma interface gráfica, apenas o endereço do quê se quer baixar. O wget faz download de arquivos, pacotes e páginas completas de uma forma não interativa. Objetividade é o lema do wget. Coloque o endereço exato do que vai ser feito download, dê um <Enter> e espere a barra chegar a 100%, isto é o que o wget tem a lhe dizer. Outra vantagem da utilização do wget é que ele não é interativo, já que não requer que o usuário que iniciou o processo fique cuidando do descarregamento, podendo até mesmo se fazer logoff do sistema sem danos ao download. Logicamente que ele deve ser rodado em segundo plano através do parâmetro -b, ou com o e comercial (&) ou manipulando-o com o comando bg. O wget também recomeça quantas vezes forem necessárias o download caso ocorra algum problema (desde que o servidor tenha este recurso). Tudo isto automaticamente. Prático e completo, este é o WGET!! Revejamos suas características: 1.Objetividade (coloque um <Enter> e pronto); 2.Rapidez (processo 100% dedicado ao download); 3.Autonomia (não é necessário se ter um usuário logado); 4.Gerenciamento de download (permite que se reinicie o download quantas vezes for desejado). Você poderá trabalhar com os seguintes protocolos: http, https e ftp. Isso quer dizer que os endereços devem começar com algum desses termos para que o wget saiba quais serão as regras utilizadas durante a transferência. -b (de background) -q (de quiet) so de download) Inicia o wget direto em background. Não mostra a saída padrão do wget (mensagens e barra de progres- -i <arquivo> Busca dentro de um arquivo de texto puro endereços para fazer download. Estes endereços deverão estar cada um em uma linha própria. -r (recursivo) Faz o download não só de uma página, mas de todas as páginas que estiverem dentro do mesmo domínio do site especificado. $ wget :05:54 Resolvendo A conectar :80... conectado! HTTP requisição enviada, aguardando resposta OK Tamanho: nao especificado [text/html] A gravar em: 'index.html.7' [ <=> 137

137 ] K/s em 0,07s :05:54 (457 KB/s) 'index.html.7' gravado [33246] C aso seja necessário passar por um proxy para chegar à internet, é necessário configurá-lo no arquivo /etc/profile. IFCONFIG Este comando já foi visto no módulo básico deste curso, porém de forma superficial. Ele mostra ao administrador as informações acerca de uma (ou todas) interface de rede. É possível, também, mudar alguns parâmetros da rede através dele, mas estas alterações serão válidas somente enquanto o computador permanecer ligado ou enquanto algum daemon de rede não atualizar os parâmetros de acordo com os seus respectivos arquivos de configuração. Ou seja, as configurações sempre são temporárias. O comando pode ser usado sem nenhuma informação adicional. Feito isso, o resultado será todas as interfaces de rede ativas no sistema. Se o administrador desejar verificar todas as interfaces, inclusive as ocultas, deverá executar o comando com o parâmetro -a (de ALL - TODOS em inglês). $ sudo ifconfig eth0 Link encap:ethernet Endereço de HW 00:22:15:9e:c1:10 inet end.: Bcast: Masc: endereço inet6: fe80::222:15ff:fe9e:c110/64 Escopo:Link UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1 RX packets: errors:0 dropped:0 overruns:0 frame:0 TX packets: errors:0 dropped:0 overruns:0 carrier:0 colisões:0 txqueuelen:1000 RX bytes: (2.7 GiB) TX bytes: (151.2 MiB) IRQ:216 Endereço de E/S:0xc000 Existem vários campos mostrados pelo ifconfig. Vejamos quais são eles: Link encap Encapsulamento da comunicação Mostra qual é o tipo de encapsulamento de dados adotado pela camada de enlace. Endereço de Endereço de HW - Endereço de Hardware HW Mostra qual é o endereço físico da interface (o MAC address). 138

138 inet end Bcast Masc Interface Net Endereço - Endereço da interface de rede Mostra qual é o IP atribuído à interface. Broadcast Mostra qual é o endereço que a interface usará quando quiser enviar mensagens de broadcast. Máscara Mostra qual é a máscara da rede a qual a interface pertence. BROADCAST Informa que a interface suporta broadcast. MULTICAST Informa que a interface suporta multicast. MTU Maxime Transfer Unit - Unidade máxima de transferência Informa qual é o tamanho máximo de dados trafegados em cada quadro (frame) no meio físico utilizado pela interface (quadros são os agrupamentos criados na camada de enlace do protocolo TCP/IP). RX Packages Received - Pacotes recebidos livres de erros Mostra a quantidade de pacotes recebidos da rede através da interface indicada. Errors: Pacotes enviados a esta interface que não chegaram. Dropped: Pacotes negados por esta interface. Overruns: Pacotes não recebidos por terem chegado antes do kernel ter indicado que eles poderiam ser enviados. frame: Pacotes que tiveram problema no momento de sua montagem, devido a falta de algum quadro. TX Packages Transmitted - Pacotes transmitidos livres de erros Mostra a quantidade de pacotes enviados para a rede através da interface indicada. Errors: Pacotes transmitidos por esta interface que não chegaram ao destino. Dropped: Pacotes transmitidos negados pela interface de destino. Overruns: Pacotes transmitidos não recebidos por terem chegado antes do kernel do destinatário ter indicado que eles poderiam ser enviados. Carrier: Número de vezes que a via de transmissão (o transportador) foi desabilitada, como um cabo de rede que foi retirado ou então um switch que foi desligado. colisões Número de pacotes colididos na rede. Sempre que um computador quer enviar algum dado pelo meio físico, ele escuta este e verifica se o caminho está livre. Se estiver, ele manda seu quadro. Pode ser que dois computadores escutem a rede, verifiquem a disponibilidade de transmissão e enviem ao mesmo tempo um quadro. Isto fará com que os quadros colidam e ambos tenham que enviar novamente. IRQ Interrupt Request - Requisição de Interrupção Mostra qual é o endereço IRQ 21 utilizado pela interface. É possível verificar este endereço, e até alterá-lo, através do arquivo /proc/interrups. Endereço de E/S Endereço de Entrada e Saída O IRQ é a identificação, aqui temos o endereço físico na memória principal referente ao espaço específico de pedido de interrupção. 21 IRQ é um sinal que indica a necessidade de determinado dispositivo de utilizar o processador. Cada endereço IRQ é um endereço fixo na memória. Quando um dispositivo precisa enviar dados para serem processados, ele envia um sinal ao espaço fixo associado a ele, fazendo com que o processador saiba que deverá receber dados dele e processálos. Como os IRQ têm prioridades altas, o processador deve interromper tudo para processar os dados. 139

139 O lenny traz o suporte a IPv6 nativamente. Podemos verificar o endereço atribuído à interface após inet6. Ainda não existem muitos serviços rodando com este protocolo, mas provavelmente ele irá substituir o IPv4. Se você quiser estudá-lo, existem várias fontes na internet a respeito. Existem alguns flags que trabalham com o ifconfig e o permitem realizar configurações temporárias no seu computador. A pesar de serem configurações temporárias, é possível definir o ifconfig para ser rodado no boot do computador. up Faz com que a interface de rede torne-se acessível à camada inter-rede. Sem isto, o protocolo TCP/IP não sabe de sua existência. Sempre devemos indicar qual interface deve ser ativada em relação à camada inter-rede (e automaticamente ao sistema) e depois indicar o flag up. # ifconfig eth0 up Se desejado, o administrador poderá definir os parâmetros de rede da interface. Vamos criar um alias de interface para que você possa testar: # ifconfig eth0: netmask up Agora, executando o comando ifconfig será possível ver que a interface foi ativada: eth0:0 Link encap:ethernet Endereço de HW 00:22:15:9e:c1:10 inet end.: Bcast: Masc: UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1 IRQ:216 Endereço de E/S:0xc000 O UP e o RUNNING indicam que a interface está ativada e já em atividade. O UP indica que a interface está disponível, com identificação IP e conectada à camada inter-rede, e o RUNNING indica que a placa está aceitando pacotes da rede e enviará dados, caso solicitado. down Fará o inverso que o flag up faz. Desativa a interface, ou seja, torna a interface inacessível pela camada inter-rede. Fazendo isso, todas as entradas na tabela de roteamento que referencia- 140

140 rem esta interface serão apagadas. P A ara enxergar todas as interfaces que não estão ativas, é necessário utilizar o parâmetro -a. utomaticamente, após derrubar uma interface, qualquer entrada dela na tabela de roteamento será apagada. IFUP E IFDOWN Tem diferença destes comandos com o ifconfig? Sim! Estes comandos usam o ifconfig e os scripts que ficam dentro de diretórios próprios deles. IFUP: Executa o IFCONFIG <Interface> UP e todos os scripts que ficam dentro do diretório /etc/network/if-up.d. IFDOWN: Executa o IFCONFIG <Interface> DOWN e todos os scripts que ficam dentro do diretório /etc/network/if-down.d. Toda vez que o ifup é executado ou uma interface a qual deseja-se ativar deve ser especificada, ou então o parâmetro -a (de auto) deve ser definido. O parâmetro -a irá ativar TODAS as interfaces que estiverem setadas com AUTO. O mesmo pode ser feito com o idown, com a diferença que todas as interfaces serão derrubadas, independente de estarem ou não setadas como auto. Veja os exemplos de utilização. Dentro do arquivo /etc/network/interfaces, irei definir a seguinte interface de rede: iface eth0:louco inet static address netmask Repare que não estou colocando a linha auto eth0:louco. Agora irei reiniciar o serviço de rede: # invoke rc.d networking restart Executando o ifconfig posso verificar que o alias está ativo: # ifconfig eth0:louco Link encap:ethernet Endereço de HW 00:22:15:9e:c1:10 inet end.: Bcast: Masc: UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1 IRQ:216 Endereço de E/S:0xc000 Podemos perceber que a interface está funcionando. Agora iremos executar o comando 141

141 para desativar TODAS as interfaces ativas: # ifdown a Todas as interfaces vão ser desativadas. Agora iremos entrar no arquivo /etc/network/interfaces e iremos inserir o alias eth0:louco na mão. As seguintes linhas serão inseridas: auto eth0:louco iface eth0:louco inet static address netmask P ara criar o alias é necessário se utilizar uma interface existente. No meu caso usei a interface eth0 e criei um alias chamando-a de eth0:louco, podendo ser qualquer nome após os dois pontos. Outro detalhe que deve ser observado é quanto a diretiva do eth0. Ele não pode estar setado como allow-hotplug. Se estiver, troque por auto eth0. Verifique com ifconfig se existem alguma interface ativa. Verá que não existe nenhuma. Agora execute o comando abaixo: # ifup a Todas as interfaces estarão ativas, inclusive o alias eth0:louco (sempre verifique com o ifconfig). Agora volte ao arquivo /etc/network/interfaces e comente a linha do alias que contém auto eth0:louco. Agora execute os dois comandos abaixo: # ifdown a # ifup a # ifconfig Você verá que somente a placa eth0 está ativa, isso porque o alias está sem a opção auto. Para ativá-la será necessário especificar a interface utilizando # ifup eth0:louco. ROUTE O comando route manipula ou simplesmente mostra as informações contidas na tabela de roteamento do kernel de seu computador. A tabela de roteamento indica os caminhos possíveis que cada pacote a ser enviado deverá seguir para chegar à interface remota. É um mapa que possui regras de navegação pela rede. É o GPS dos pacotes. Cada interface tem sua própria tabela de roteamento. Se existirem duas interfaces em um mesmo computador, ambos podem estar conectados a redes diferentes e servirem de roteadores de pacotes entre elas. Vejamos a cara de uma tabela de roteamento: $ route n Tabela de Roteamento IP do Kernel 142

142 Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface UGH eth U eth U eth UG eth0 No caso acima, temos 4 regras e elas são atendidas pela prioridade. Quanto mais acima mais prioritária. 1.A primeira linha define que todos os pacotes que tenham como destino o computador específico deverão ser enviados ao roteador através da interface eth0; 2.A segunda linha define que todos os pacotes que tenham como destino a rede com máscara devem ser enviados por broadcast para todas as interfaces que tenham conexão física direta com a interface eth0; 3.A terceira linha define que todos os pacotes que são enviados para a rede com máscara devem ser enviados por broadcast para todas as interfaces que tenham conexão física direta com a interface eth1; 4.Caso nenhuma das regras anteriores forem atendidas, aí a regra padrão, indicada por no destino (como se fosse um coringa que indica Qualquer endereço ), é atendida. Na quarta linha, qualquer pacote destinado a endereços que não se encaixem nas regras anteriores devem ser enviados ao roteador Em opções podemos verificar algumas letras. O U indica que a regra está UP, ou seja, ATIVA; o G indica que o destino é um roteador e não um broadcast às escuras; e o H indica que o destino é um HOST, ou seja, a regra se aplicará a um computador específico, e não a uma rede inteira (indicação existente para diferenciar da opção mais comum, que é como destino a rede). Vale frisar que sempre que as regras são atendidas na seguinte ordem: 1º Cache de roteamento; 2º Tabela de roteamento do kernel, tendo as primeira linhas prioridade em relação às anteriores. E esta ordem não é editável. Quem as define é o próprio gerenciador de roteamento. Vejamos outros campos que aparecem na saída deste comando: Colunas Métrica Descrição Mostra o número de saltos necessário para chegar ao destino. Antigamente, o roteamento de pacotes era feito na unha. Hoje em dia temos roteadores que fazem este trabalho. Então sempre que um host não estiver na rede local, ele é enviado para um roteador que saberá o que fazer. Como o destino será um roteador conectado à interface de destino, não haverá nenhum salto. Sendo assim, hoje em dia é muito difícil se encontrar algum valor de métrica diferente 143

143 de zero. Ref Também obsoleto, este campo mostra o número de interfaces que referenciam um destino. Isto era interessante para saber se um destino que estivesse a alguns hopes de distância possuía alguma interface (caminho alternativo) apontando para ele. Uso Ao utilizar o parâmetro -C com o route, é possível visualizar o CACHE de roteamento. Todos os caminhos realizados são armazenados lá até o reiniciamento do computador. Se um mesmo destino for definido por algum serviço de rede, o gerenciador de roteamento verificará que a entrada já existe no cache, permitindo que ele seja encontrado da forma mais eficaz. Neste campo verificamos quantas vezes cada uma das entradas do cache são utilizadas. Iface (Interface) Indica a qual interface a regra se aplica. Agora vamos verificar como configurar a tabela de roteamento. Cabe observar que o trabalho de roteamento é feito por softwares específicos dos roteadores, por isso, iremos configurar apenas duas opções: pacotes destinados a computadores da rede local e computadores de redes remotas. Sintaxe Você sempre precisará digitar o nome do comando 1 route e depois dizer qual é a operação desejada 2a add (adicionar uma nova rota) 2b del (remover uma rota existente) OU Então deve-se definir se o destino vai ser 3a -host (um computador específico) Ex: -host b -net (uma rede definida) Ex: -net netmask (define a rede /24) Ex: -net netmask (define a mesma rede) S 3c empre que o alvo -net for usado, devemos utilizar o complemento netmask. Se for utilizado o alvo -host esta informação não deve ser passada. default (qualquer computador do mundo que não especificado em outras regras - pode ser substituído por -net ) Após isso, tem-se que configurar para quem deverá ser enviado o pacote caso o campo 144

144 Destino seja atendido. 4a gw (gateway - roteador) Ex: gw (define que os pacotes devem ser enviados para o roteador ) 4b NADA (não define roteador) Agora, se assim desejar, podem ser inseridos parâmetros e a interface a qual terá a regra definida. 5 dev (device - interface que adotará a regra) Ex: dev eth0 (define a regra para a interface eth0) E sta opção é obrigatória para definir uma regra para a rede local. Isso é assim porque se existirem mais de uma interface de rede, será necessário indicar qual delas está conectada fisicamente à rede. Principais parâmetros: Parâmetro Descrição -C (cache) Mostra o cache de roteamentos já realizados desde que o computador foi ligado. -n Não mostra nomes dos destinos ou roteadores. Dependendo do seu DNS, esta opção torna mais rápida a consulta. Exemplos Então vamos para nossos exemplos. Vamos começar com uma tabela completamente zerada: # route n Tabela de Roteamento IP do Kernel Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface Nada. Agora iremos criar uma regra dizendo que sempre que um pacote que for destinado a rede local seja enviado por broadcast para todos os computadores conectados a menos de um salto de distância. Usaremos os seguintes números vistos anteriormente: 1 = por ser configuração de rota de pacotes; 2a = por ser evento de adição de rota; 3b = por ter como destino uma rede (a rede local); 4b = porque não iremos definir um roteador; 145

145 5 = porque é obrigatório na configuração de pacotes destinados à rede local. # route add net netmask dev eth0 # route n Tabela de Roteamento IP do Kernel Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface U eth0 Agora já conseguiremos pingar, por exemplo, para qualquer computador da rede. Para pingar uma página da internet, precisaremos de um roteador que nos conecte a ela. No meu caso, o roteador que me conecta ao mundo é o Vejamos como configurar um roteador para qualquer computador de uma rede externa. 1 = por ser configuração de rota de pacotes; 2a = por ser evento de adição de rota; 3c = por se tratar de uma rede específica configurada no /etc/networks; 4a = porque um roteador será definido para tentar encontrar a rede desejada; 5 = regras serão aplicadas à primeira interface ativada pelo sistema. # route add default gw # route n Tabela de Roteamento IP do Kernel Destino Roteador MáscaraGen. Opções Métrica Ref Uso Iface U eth UG eth0 E se tivéssemos uma segunda interface de rede e quiséssemos configurar um roteador e a rede local a qual ela está conectada? Repetiríamos os dois processos anteriores, só mudando as interfaces e os endereços. A rede local hipotética seria # route add net netmask dev eth1 # route add default gw dev eth1 O seu computador estaria ligado, se fosse como mostrado acima, em duas redes distintas. Se ele tiver um software específico de roteamento pode vir a se tornar um roteador. IFTOP É parecido com o comando que visualiza os processos carregados na memória, só que este verifica o tráfego de rede de uma interface específica. Ele fica escutando e delatando tudo que sua interface está fazendo. É possível definir qual interface deseja-se escutar, mas não é neces- 146

146 sário. Caso não seja especificada a interface, a primeira encontrada é a que será verificada. O iftop não vem instalado por padrão. O pacote para instalação é o iftop. A saída do comando terá a seguinte cara: Figura 10: Saída do comando IFTOP O iftop é meio espaçoso, e percebe-se isso pelo fato dele utilizar toda a tela. Não é possível utilizar o terminal enquanto ele estiver rodando, já que ele roda em modo foreground22. No topo da tela temos as taxas de transferência, que variam de 0kbps (quilo bytes por segundo) a 977kbps. As interações que estiverem com maior taxa de tráfego ficarão mais acima na lista. A tela será atualizada a cada 2 segundos com novas informações de conexões e taxas de transferências. Abaixo da escala de taxas de transferência temos seis colunas com campos diferentes. Vejamos cada uma deles: Primeira coluna Endereço da primeira interface do par da conexão. P ode ser mostrado como nome, IP e pode ser habilitada a opção de mostrar a qual porta UDP ou serviço o pacote pertence (isto é feito através do parâmetro -p ). 22 Primeiro plano. 147

147 Segunda coluna Indicação do sentido da comunicação entre o par de interfaces. Se o sentido for da interface da esquerda para a interface da direta, a indicação será =>. O contrário será <=. Sempre teremos as duas vias da comunicação. Na primeira linha de cada interface temos a taxa de transferência dela para o destino, e na linha seguinte a taxa de transferência do destino para a origem. Terceira coluna Endereço da outra interface que está ou recebendo ou enviando algum pacote. Fecha o par da linha. Quarta, quinta e sexta coluna Taxa de transferência do pacote que passou pela interface. São três colunas pois existe a taxa de transferência entre as duas interfaces mostradas nas colunas 1 e 3 em função de três intervalos diferentes: 2, 10 e 40 segundos. Na parte inferior da tela existe um resumo das atividades de rede da interface que está sendo analisada. Existem disponíveis para consulta as seguintes informações: TX Informa a quantidade de dados que foram enviados pela interface que está sendo analisada. cumm Total de dados enviados desde o início da execução do IFTOP. RX peak Pico: Maior taxa de transferência de dados enviados nos últimos 40 segundos. rates Taxas: Mostra a taxa de transferência total dos pacotes enviados da interface nos últimos 2, 10 e 40 segundos. Informa a quantidade de dados que foram enviados pela interface que está sendo analisada. cumm Total de dados recebidos desde o início da execução do IFTOP. peak Pico: Maior taxa de transferência de dados recebidos nos últimos 40 segundos. rates Taxas: Mostra a taxa de transferência total dos pacotes recebidos da interface nos últimos 2, 10 e 40 segundos. TOTAL Mostra o total de cada coluna mostrada anteriormente. cumm Total de dados transmitidos (recebidos e enviados) pela interface. peak Pico: Soma das maiores taxas de transferência dos dados enviados e recebidos. rates Taxa: Mostra a taxa de transferência total dos pacotes recebidos e enviados da interface nos últimos 2, 10 e 40 segundos. Alguns parâmetros interessantes que podem ser usados durante a execução do comando: 148

148 Parâmetro Descrição H (maiús.) H de Help - Ajuda: irá informar-lhe quais são os principais parâmetros do iftop. P (maiús.) P de Paralisar: paralisa a tela no momento de sua ativação. Para desparalisar, deve-se clicar novamente sobre as teclas <SHIFT><P>. o (minús.) o de Ordem: este parâmetro congela a ordem das interfaces, mas não para a atualização do monitoramento. O que está na primeira linha continuará na primeira linha e com atualizações normais das taxas de velocidade de transmissão; a segunda linha ficará sempre na segunda linha e assim por diante. p (minús.) p de Porta: paralisa SeD (maíus.) Habilita a opção de visualização de portas ou serviços que são responsáveis pelos pacotes. S de Source (origem): habilita a visualização da porta que está sendo utilizada pela interface de origem. D de Destino: habilita a visualização da porta que está sendo utilizada pela interface de destino. t t de Tipo: altera o tipo de visualização. Existem quatro. Para alternar basta pressionar seguidamente a mesma tecla. 1º: mostra a taxa de transferência do par de interface em duas vias; 2º: mostra a taxa de transferência do par de interface em uma linha; 3º: mostra a taxa de transferência somente da origem ao destino; 4º: mostra a taxa de transferência somente do destino à origem. jek Vão uma tela para cima e para baixo, respectivamente. Interessante de ser usado quando a tela está congelada (através do parâmetro o ). l l de Locate - Localize: localiza alguma interface específica. Para procurar algum endereço, por exemplo, pressione a tecla <l> para que apareça Screen filter> no topo da tela. Escreva o nome da interface e pressione sobre <ENTER>. Para voltar a visualização normal pressione novamente <l>, apague o que tiver após Screen filter> e pressione <ENTER> novamente. Não afeta os subtotais que aparecem na parte inferior da tela. Agora que você já está hacker no iftop, vamos praticar. Iremos executar o iftop já com a opção de nomes suprimidos ativada. # iftop n Perceba que existem muitas linhas que são de broadcast. Toda vez que um computador qualquer da sua rede faz um broadcast por qualquer motivo, você recebe o pacote e verifica se ele lhe pertence. Estas entradas aparecem no iftop. Tirando estas entradas, temos apenas conexões com outros computadores, sendo você o cliente ou servidor. Abra um novo terminal e execute o comando: $ ping <o seu gateway> s

149 S e você não souber qual é o gateway do computador em que está, então complicou. Releia o comando route. Caso esteja com preguiça, copie o comando a seguir sem entender nada route -n grep 'UG[ \t]' awk '{print $2}'. Agora volte para o terminal que o iftop está e tente encontrar a linha que tenha o seu IP e o gateway digitado como par. Para facilitar digite <l>, digite o ip do gateway e pressione <Enter> => Kb 5.75Kb 1.44Kb <= 8.22Kb 5.75Kb 1.44Kb Veja que o filtro fez com que somente as linhas que contém o que foi usado como critério de filtro de tela aparece. Por estarmos pingando, um pacote é enviado e deve ser respondido, sendo que a transmissão se dá em ambos os lados de forma igual. O computador está enviando dados para o computador enquanto este está enviado para aquele também, e podemos ver os dados na linha de baixo. Do meu computador para o gateway, nos últimos 2 segundos a taxa de transferência foi de 8.22kb, no últimos 10 segundos foi de 5.78kb e nos últimos 40 segundos a taxa média foi de 1.44kb. Do destino para a minha interface foi a mesma coisa. Este comando é muito interessante para saber quem está conectado à sua máquina e quanto da sua interface ele está exigindo. Num servidor apache utilizamos muito este comando para sabermos quem está conectado à ele e se a banda está dando conta de atender a todas as requisições. TRACEROUTE Irá mostrar o caminho na rede percorrido pelos pacotes até chegar ao computador de destino. Este caminho é traçado através dos hopes transpostos pelos pacotes. Se forem necessários 2 roteadores até chegar ao servidor, serão mostrados 3 pontos (2 roteadores mais o servidor). Todas as interfaces destes nós são identificados pelo IP $ traceroute traceroute to ( ), 30 hops max, 40 byte packets ( ) ms ms ms $ traceroute traceroute to ( ), 30 hops max, 40 byte packets ( ) ms ms ms ( ) ms ms ms 3 br in f99.google.com ( ) ms ms ms No curso Debian Básico, o comando route indica qual é o roteador utilizado para acessar redes externas. Neste curso iremos estudá-lo mais aprofundadamente, mas por enquanto vejamos um exemplo simples de seu resultado: 150

150 $ sudo route n Tabela de Roteamento IP do Kernel Destino Roteador MáscaraGen. Opções Métrica Ref Uso Ifa ce U eth UG eth0 Veja acima que existem duas regras configuradas no computador utilizado para demonstrar o traceroute: (a) se o computador que se deseja conectar estiver na rede com máscara (do IP a ), então não será necessário intermédio de roteador, podendo a requisição ser mandado diretamente ao IP servidor; (b) qualquer outro computador deverá ter a conexão estabelecida através do roteador Beleza! Agora veja que, com o comando traceroute, o IP estava na rede , , por isso o caminho percorrido pelos pacotes é reto, direto, havendo apenas um passo. Já o IP do google é , que está fora da rede do computador usado para o teste. Por isso, primeiro devese passar pelo roteador ( ) e aí os pacotes vão passando por outros roteadores até chegar ao computador requisitado ( , cujo nome é br-in-f99.google.com). traceroute to ( ), 30 hops max, 40 byte packets ( ) ms ms ms Para entender o que está sendo mostrado acima, vamos utilizar um equipamento especial para gravar o que o traceroute fala enquanto executa o comando. Trançando rota da interface deste computador ao computador de destino, que é , sendo que irei passar por no máximo 30 roteadores23. Se até lá ninguém souber desse computador, desisto. Meu meio de transporte terá 40 by tes (incluindo me). Vamos lá! Opa, este computador requisitado está nesta rede mesmo, já vou listá lo aqui e chega de trabalho. 1 hope para chegar ao computador de destino. Em 3 testes, levei na primeira, segunda e terceira vez, ms, ms e ms respectivamente para ir e voltar. ttl (Time To Live) Os hopes (ou saltos) são os nós de rede transpostos pelos pacotes. Eles servem para definir um limite de saltos que o pacote poderá dar até chegar ao seu destino. Normalmente não se precisa de mais de 5 saltos para se chegar ao destino. Se isso acontecer, o roteamento deste pa23 Mas se o máximo é de 30 hopes, o certo não seria 29 roteadores mais o servidor? Mas para o roteador tanto faz, afinal, pode ser que o servidor seja um roteador. 151

151 cote está errado, podendo até estar em looping (ser jogado de um roteador para o outro infinitamente). Para calcular a quantidade de saltos, os pacotes enviados pelo traceroute possuem em seus cabeçalhos um parâmetro ttl com o valor inicial indicado na linha inicial do comando. traceroute to ( ), 30 hops max, 40 byte packets O número máximo de hops é 30. Para verificar se o número de saltos foi excedido, a cada nó de rede que o pacote passa, o valor ttl é diminuído em um. Se o computador alvo estiver na mesma rede do requisitante, ao chegar ao destino, este irá diminuir o valor do ttl em um e enviará dois pacotes à origem. O primeiro enviado pelo protocolo ICMP dizendo que o alvo foi atingido (também é responsável por indicar que o alvo não foi atingido) e o segundo com as informações de ttl, data hora, etc. Se o pacote precisar passar por roteadores, cada um deles diminuirá o valor do ttl em um, até chegar na interface que receber o ttl com valor 1. Ele irá enviar uma mensagem através do protocolo ICMP informando que o alvo está inalcançável. ARP O Address Resolution Protocol (protocolo de resolução de endereço), mais conhecido apenas pelo seu acrônimo ARP, é o conjunto de instruções residente à camada de enlace da pilha TCP/IP que faz a resolução de IPs e endereços físicos (MACs), mantendo uma tabela com as associações utilizadas. Como já vimos, o que trafega no meio físico da rede são os quadros, ou frames. Estas unidades de dados são pacotes, criados pelo protocolo IP, fragmentados e com cabeçalhos contendo o endereço físico de suas origens e destinos. Só que os computadores não têm como saber qual é o endereço físico dos destinos sem ser através de um questionamento a toda rede. Eles fazem a pergunta através de um broadcast. Quem responde por este IP? - pergunta a origem. Sei lá - responde o computador A - Muito menos eu - responde o computador B. Ô, seus loucos, sou eu o responsável por essa treta aí! - apresenta-se o computador C - e meu endereço físico é este aqui: 01:22:15:8e:f1:16. O computador A, irritado, resolve se impôr e evitar futuros incômodos: Ó, velho. Vê se agora para de perguntar quem é o C porque tenho muita coisa para fazer para ficar dando atenção desnecessária à você! Desde então criou-se o ARP. Ele é uma tabela contendo todos os endereços físicos que res- pondem por IPs utilizados recentemente, justamente para que após a primeira pergunta, a origem não tenha que se preocupar novamente em pesquisar o endereço físico de seu destino e para que a rede seja descongestionada de broadcast desnecessários. 152

152 O comando que manipula a tabela ARP recebe o mesmo nome do protocolo: arp. Com ele é possível adicionar ou remover entradas à tabela, ou simplesmente visualizá-la. Ao digitar apenas arp e pressionarmos <Enter>, a tabela com as associações é mostrada. # arp Address HWtype HWaddress Flags Mask ce ether 00:0f:23:c0:5d:ff C ether 00:00:5e:00:01:16 C ether 00:50:da:1f:95:4d C ether 00:11:d8:f7:57:62 C Ifa eth0 eth0 eth0 eth0 A primeira coluna contém os endereços IPs de interfaces às quais o seu computador se conectou recentemente. A segunda tem o protocolo utilizado na camada física (quase sempre será ether, de ethernet). A terceira mostra qual é o endereço físico da interface. A quarta coluna possui algumas flags (caracteres denotativas) que informam: C - Completa (que a associação está completa); M - Permanente (que a associação é permanente). A ssociação permanente quer dizer até a reinicialização do computador ou até a reini cialização das interfaces de rede através do ifdown e ifup (executa os scripts do ifup.d). Para apagar uma entrada da lista, usa-se o parâmetro -d. Veja abaixo: # arp n Address HWtype HWaddress ce ether 00:1c:25:4a:f3:0a Flags Mask Ifa C br0 # arp d # arp n Address HWtype HWaddress Flags Mask ce (incompleto) Ifa br0 V eja que a flag C sumiu. Isso porque o kernel não sabe mais qual endereço responde por Para adicionar ou alterar uma entrada, precisaremos apenas utilizar o parâmetro -s junto do IP e do endereço físico. A sintaxe é a seguinte: arp -s <IP> <MAC(com dois pontos separando os octetos)> # arp s :1c:25:4a:f3:0a 153

153 # arp n Address HWtype ether HWaddress Flags Mask Iface 00:1c:25:4a:f3:0a CM br0 Existem alguns parâmetros importantes a serem vistos. Vejamos quais: Parâmetro Descrição -n (numérico) Mostra os IPs em vez de nomes. -H Permite especificar outros protocolos da camada de enlace. O padrão é o ether de ethernet. Outras opções são: -i (interface) Permite que o administrador especifique a qual interface irá criar a associação. Se um computador possuir duas interfaces eth (eth0 e eth1), e for associado a eth0 um MAC f de um IP a, quando a eth1 quiser saber qual endereço físico responde ao IP a, ele terá que fazer um broadcast para a rede e o computador responsável deverá enviar novamente seu MAC f. DIG O comando dig é o acrônimo da frase que sintetiza sua função, que em inglês é Domain Information Groper (pesquisa às escuras de informações de um domínio). Exatamente! A função do dig é procurar meio que às escuras, ou seja, sem certeza de que receberá resposta, em uma lista pública (algo como uma lista telefônica) informações a respeito de um nome ou endereço de host, domínio ou então as configurações da própria lista pública. Esta lista nada mais é do que um DNS (um servidor do sistema de domínios de nomes). Sempre desejaremos saber o que um servidor de nomes sabe a respeito de algum dos objetos citados acima (host, domínio, servidor), utilizamos este comando que imergirá rede (local ou internet) adentro e trará uma resposta. O dig precisa, então, destes campos mais o tipo de pesquisa a ser realizada para lhe entregar um resultado útil. Iremos abordar o assunto DNS no módulo avançado deste curso, por isso, bastar-nos-á, por enquanto, saber que o dig irá permitir que consigamos as seguintes informações: Um IP a partir de um nome; Um nome a partir de um IP. A sintaxe deste comando é a seguinte: tipo-de-pesquisa objeto-a-ser-pesquisado Servidor-de-nome Pode ou não ser especificado o nome ou endereço do servidor a ser indagado sobre um objeto. A especificação pode ser feita através de um número IP versão 4 (denotado por octetos separados por pontos) ou então um número IP versão 6 (denotado por números hexadecimais separa154

154 dos por vírgulas). Caso o servidor não seja especificado, o aplicativo dig irá realizar a pesquisa no servidor definido no arquivo /etc/resolv.conf. Tipo de pesquisa Indica o que se pretende indagar ao servidor, qual é o nome a partir de um endereço ou qual é o endereço a partir de um nome? O padrão é se ter um endereço (Address) a partir de um nome, que, no caso, é definido utilizando-se a letra A ou omitindo esta informação. Para o inverso, utilizamos o parâmetro -x. Objeto a ser pesquisado Nome, endereço IPv4, IPv6, ou servidor. Neste curso basta que você saiba que terá que indicar o que será resolvido: ou um IP passado para se retornar um nome ou um nome passado para se retornar um endereço. Exemplos de saídas No nosso exemplo, iremos indagar ao nosso DNS padrão qual é o endereço da máquina que responde pelo endereço O comando para realizar a consulta é fácil, porém a saída pode parecer um pouco complicada. Veja abaixo uma explicação acerca de cada uma das partes (as partes estão identificadas com números e a explicação está após a saída): # dig ; <<>> DiG P3 <<>> ( 1 ) ;; global options: printcmd ;; Got answer: ;; >>HEADER<< opcode: QUERY, status: NOERROR, id: ;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 6, ADDITIONAL: 6 ;; QUESTION SECTION: ( 2 ) ; IN A ;; ANSWER SECTION: ( 3 ) IN CNAME IN CNAME IN A IN A IN A IN A ;; AUTHORITY SECTION: ( 4 ) l.google.com IN NS a.l.google.com. l.google.com IN NS g.l.google.com. l.google.com IN NS e.l.google.com. 155

155 l.google.com IN NS b.l.google.com. l.google.com IN NS d.l.google.com. l.google.com IN NS f.l.google.com. ;; ADDITIONAL SECTION: ( 5 ) g.l.google.com IN A d.l.google.com IN A b.l.google.com IN A e.l.google.com IN A a.l.google.com IN A f.l.google.com IN A ;; Query time: 2 msec ( 6 ) ;; SERVER: #53( ) ;; WHEN: Mon Sep 21 10:20: ;; MSG SIZE rcvd: Na primeira parte temos apenas alguns informações básicas sobre o comando e o tipo de pesquisa. O número P3 indica a versão do DIG. Em global options é indicado a forma como a saída se dará. O padrão é a impressão na tela. Existe a possibilidade de se alterar esta saída, mas devido a desnecessidade desta alteração, cabe a você consultar o menu do comando caso deseje alterar esta opção; 2. QUESTION SECTION: indica qual foi a indagação realizada. No nosso exemplo, estamos indagando qual é o endereço IP do nome O IN indica que o endereço pertence a Internet; 3. ANSWER SECTION: indica quais foram os resultados de endereços que respondem pelo nome. Perceba que vários endereços apareceram. Isso quer dizer que, para um mesmo nome, vários servidores respondem para evitar que haja um congestionamento em apenas um. Eles são redundantes, o que quer dizer que quando um é atualizado, todos são. Caso um deles venha a sair do ar, existem outros que continuarão realizando o trabalho de servir serviços do google. O CNAME é um apelido (vem de Change Name) e indica que o endereço que está à esquerda é um apelido do que está à direita. Podemos concluir que existem 4 endereços que respondem pelo nome pesquisado, mas isso não acontece diretamente. Quando digitamos é verificado que ele é um apelido de e abaixo vemos que é um apelido de que, daí sim, é o nome oficial do google, cujo servidores são listados (todo os que começam com 64); 4. AUTHORITY SECTION: Neste campo temos os domínios responsáveis pelo nome principal ( Existem vários DNS por quais a pesquisa pode ser realizada. Perceba que nós temos as flags IN e NS. O IN indica que a consulta foi feita 156

156 na Internet, e o NS indica qual é o no nome do servidor (Name Server) que é responsável pela conversão do nome da esquerda em um endereço; 5. ADDITIONAL SECTION: Campo adicional que apenas tem função de informar ao administrador qual é o endereço dos servidores com autoridade sobre a resolução do nome principal; 6. QUERY TIME: Tempo de pesquisa informado em milissegundos (10-3 s); SERVER: Servidor e porta utilizada para o início da pesquisa; WHEN: Data e hora da consulta. MSG SIZE: tamanho da mensagem recebida. MII-TOOL A maioria das redes utiliza o protocolo Ethernet para transferência de dados pelo meio físico. As redes Ethernet permitem que possam ser enviados ou recebidos as seguintes quantidades de informação a cada segundo: Velocidade da porta Descrição 10baseT-HD 10 megabit half duplex 10baseT-FD 10 megabit full duplex 100baseTx-HD 100 megabit half duplex 100baseTx-FD 100 megabit full duplex Tabela retirada do site Vamos converter as unidades para nos situarmos no nosso mundo: 1 megabit (Mb) é igual a 1 MILHÃO de 1 BIT (b) = 1 MILHÃO DE BITS ( bits) 1 BYTE (B) é igual a 8 BITS (b), então 1 Mb = 125kB (quilobytes) Caso 1: 100 megabit = 100 vezes 1 Mb = 100 vezes 125kB = 12,5MB Caso 2: 10 gigabit = 10 vezes 100 vezes 1Mb = vezes 125kB = 125MB No caso 1, temos que uma placa 100base Tx pode enviar ou receber 12,5MB a cada segundo. Um DVD completo de 4GB levaria 5 minutos e 20 segundos para ser enviado ou recebido pela rede. No caso 2, temos que uma placa 10gigabit que pode enviar ou receber 125MB a cada segundo. O mesmo DVD do exemplo acima seria enviado ou recebido pela rede em 32 segundos. Ainda existe a possibilidade de se ter uma transmissão e uma recepção de um quadro ao mesmo tempo durante um ciclo. No caso 1, teríamos então 200Mb por ciclo (100Mb para envio, e 100Mb para recebimento). O half (metade) e full (completo) duplex indicam se existe esta trans- 157

157 missão e recepção simultâneas de quadros. Uma placa de 100base Tx-HD (o HD é de Half Duplex) envia ou recebe dados numa ordem de 100Mb por segundo. Isto resulta em no máximo 100Mb por segundo trafegados. Já as placas 100 base Tx-FD transmitem e recebem quadros simultaneamente numa ordem de 100Mb por segundo cada uma das tarefas. Isto resulta em uma taxa de transmissão máxima entre as interfaces de 200Mb por segundo. Negociação Toda vez que uma interface cria um link (uma ligação) entre ela e outra interface 24, desde que tenha este recurso disponível (as placas mais modernas possuem), executa o processo de negociação para estabelecer o melhor modo de transmissão possível. Esta negociação é automática e realizada pelos protocolos da camada de enlace. As interfaces definem a opção mais rápida de comunicação. Imagine um computador tendo como melhor opção publicada o modo 10base Tx-FD tentando comunicar-se com um computador com interface que possui como melhor opção publicada o modo 100base Tx-FD. Será verificado que a melhor opção, dentre as possibilidades, é a primeira, e será realizada a comunicação entre as duas interfaces com o ele. Isto só será possível se o meio permitir, existindo cabos próprios para HD (cabo de par trançado, que separa o meio de envio e de recebimento). Se existirem no caminho entre os computadores cabos coaxiais ou então hubs, automaticamente não será possível ser realizada a conexão por FULL DUPLEX, já que estas arquiteturas propiciam um meio de transmissão único. Nestes meios, se quadros distintos forem enviados ao mesmo tempo, eles irão colidir um no outro e haverá perda de dados. Neste caso, mesmo com interfaces 100base TxFD, 1000baseTxFD ou até mesmo 10gigabit, a conexão será feita através do melhor modo HD (um ciclo para enviar e outro para receber). Para visualizar tais informações, o usuário só precisa executar como superusuário ou com auxílio do sudo o comando mii-tool: $ sudo mii tool eth0: negotiated 100baseTx FD, link ok eth1: no link No exemplo acima, podemos verificar que existem duas interfaces de rede conectadas ao meu sistema: eth0 e eth1. A primeira interface negociou com o switch a qual ela está conectada o modo 100baseTx-FD. Ou seja, ele transmitirá, sempre que possível, com a velocidade de 100 megabits por segundo e poderá transmitir e receber quadros simultaneamente (FD - Full Duplex), ou seja, terá uma taxa de transmissão máxima entre as interfaces de 200Mbps (o ps quer dizer per second - por segundo). Se o administrador desejar, ele pode alterar este valor utilizando o mii-tool. 24 pode ser um outro computador através de uma topologia de barramento ou anel, ou então a um hub, switch ou roteador através de uma topologia estrela 158

158 O bserve que no exemplo acima, apesar da taxa máxima de transmissão ser de 200Mbps, não é possível se fazer download ou upload utilizando esta taxa. Só será possível enviar a 100Mbps e ao mesmo tempo receber a 100Mbps. É como se tivéssemos em uma rodovia pós feriado. A mão que volta da praia fica congestionada e a que vai completamente vazia. E por que se pode conectar dois computadores, um com interface 10FD, o outro com 100FD utilizando a opção 10FD e não com 100FD? Por que normalmente as interfaces que têm tecnologia mais avançada abrangem as tecnologias mais simples também. Utilizando o parâmetro -v podemos verificar mais informações a respeito das interfaces, entre elas quais são as modos (tecnologias) disponíveis: # mii tool v eth0: negotiated 100baseTx FD, link ok //O negociado com o meio product info: vendor 00:00:00, model 0 rev 0 basic mode: autonegotiation enabled //Autonegociação habi litada basic status: autonegotiation complete, link ok //Negociação completa capabilities: 100baseTx FD 100baseTx HD 10baseT FD 10baseT HD advertising: 100baseTx FD 100baseTx HD 10baseT FD 10baseT HD link partner: 100baseTx FD 100baseTx HD 10baseT FD 10baseT HD E o quê que são estes capabilities, advertising e link partner? Isso aí é fácil. Em capabilities são apresentados todos os modos que a placa tem condição de trabalhar. O advertising mostra quais são os modos que a sua placa dirá às outras interfaces que ela trabalha. Se o administrador tiver interesse, ele pode forçar um tipo de conexão indicando apenas um modo disponível. E para finalizar, o link partner indica quais são os modos que a interface a qual a sua está conectada trabalha. Se a sua interface tiver o modo 1000base Tx-FD, mas estiver conectada em um switch que só tem suporte ao modo 10base Tx-HD, a conexão será estabelecida com este último modo. Para verificar isto, basta utilizar, então, este comando com o parâmetro -v e verificar os modos do link parter (parceiro de comunicação). Alterar os modos disponíveis Toda vez que existe uma conexão física entre duas interfaces, os protocolos da camada de enlace irão negociar qual é o melhor modo de transmissão. Para isso, é preciso que cada uma das interfaces digam quais são os modos os quais possuem suporte. Este dizer é um evento chamado publicar. O que é publicado não necessariamente é o que a interface realmente tem suporte. O administrador pode definir apenas alguns dos modos que a interface possui. Veja como definir modos específicos. # mii tool advertise 10baseT HD,10baseTFD 159

159 restarting autonegotiation... # Agora somente os três modos serão publicados. Os outros modos não serão utilizados. Para separar os modos é necessário separá-los com uma vírgula. Não se preocupe com a ordem. S e o administrador quiser ou verificar as informações de negociação de uma interface do seus sistema específica, basta indicar qual é a interface a ser alterada: # mii-tool eth0 --advertise 10baseT-HD,100baseTx-HD Mensagens de erro Abaixo temos algumas mensagens de erro que podem ser apresentadas pelo mii-tool: SIOCGMIIPHY on eth? failed: Invalid argument O administrador ou executa o comando mii-tool sozinho (aparecendo todas as interfaces disponíveis) ou define uma interface de rede. Se a interface definida estiver desativada (desassociada da camada inter-rede), então o comando retornará o erro mostrado. Isso nos mostra que só podemos verificar as informações de autonegociação em interfaces ativas. SIOCGMIIPHY on eth? failed: Operation not permitted O comando foi executado por um usuário normal. Somente o superusuário pode executar o miit-tool. SIOCGMIIPHY on eth? failed: No such device Se o comando for executado informando-se a interface, mas esta não existir, este comando será mostrado. SIOCGMIIPHY on eth? failed: Operation not supported Indica que ou a sua interface ou a interface a qual ela está tentando se conectar não respondem aos pacotes que permitem que o mii-tool verifique estas informações. NETSTAT Este é um comando muito versátil de consulta de informações de rede. Não se consegue alterar nada, porém pode-se visualizar muita coisa importante para um bom gerenciamento de um computador. Ele tem uma função padrão, que é verificar as conexões feitas nas portas UDP e TCP, porém permite que o administrador consiga realizar vários outros tipos de consultas. Veja o que pode ser visualizado com ele: 160 As conexões feitas pelas portas UDP e TCP; Tabela de roteamento;

160 Estatísticas de tráfego das interfaces; Conexões mascaradas (criadas por NAT); # netstat Conexões Internet Ativas (servidores e estabelecidas) Proto Recv Q Send Q Endereço Local Endereço Remoto Estado Acima temos um exemplo das saídas do netstat caso seja evocado na sua forma padrão. Ele irá mostrar todas as conexões de estabelecidas nas portas TCP, UDP e soquetes, nesta ordem. A saída mostrada acima é referente à conexões TCP e UDP. Se você estiver fazendo um ssh em outro computador, aparecerá que a porta 22 (se o ssh estiver utilizando a porta padrão) está sendo usado por este serviço. Cada uma das colunas traz uma informação diferente das conexões estabelecidas pelo seu computador. Primeira coluna (Protocolo utilizado) Informa qual é o protocolo utilizado para fazer a identificação do serviço da camada de aplicação. Os protocolos são UDP, TCP e UNIX. O protocolo UNIX não faz parte da pilha TCP/IP. Ele é um protocolo próprio do kernel linux e tem função de disponibilizar um meio de comunicação entre processos do sistema, ou seja, indica que a conexão é local e feita por soquetes. que quem está tratando de identificar a quais processos os segmentos tcp6deindica dados pertencem é o protocolo TCP, porém, na camada inter-redes, o res ponsável por realmente criar o pacote com informações de roteamento é o IPv6. Segunda coluna (Fila de dados a serem recebidos) Um quadro de dados chega à camada de enlace, que o joga para a camada inter-redes, que junto vários quadros e e cria um pacote que é jogado para a camada de transporte, local este que o protocolo pertinente irá indicar qual serviço deve buscar as informações. Se for um protocolo TCP ou UDP, o serviço conectado à porta que recebeu dados deve ir buscá-los. Caso não faça isso, aparecerá nesta coluna o total de bytes que estão esperando pelo pai. Terceira coluna (Fila de dados a serem enviados) Sempre que dados estão esperando para serem enviados na camada de transporte (esperando, por exemplo, que o buffer de dados do destinatário seja liberado - controle de fluxo do TCP), será mostrado o total de bytes na fila. 161

161 T anto nesta quanto na segunda coluna, o ideal é que o número de bytes tenda sempre a zero. Se isto não acontecer, pode estar havendo algum problema na mídia de comunicação, na interface de destino, ou nos aplicativos instalados no seu computador, fazendo com que as informações a serem transmitidas fiquem sempre paradas. Quarta coluna (Endereço local) O netstat, nesta primeira parte (TCP e UDP) sempre mostrará a conexão feita por um par de interfaces. Estas conexões, logicamente, são feitas entre o sistema em que o administrador está e uma interface remota. Nesta coluna é mostrado o endereço da interface local. Quinta coluna (Endereço remoto) Nesta coluna é mostrado o endereço do computador remoto do par da conexão. Se desejado, pressionando o parâmetro -p junto ao comando, é possível verificar quais são as portas ou serviços que estão sendo utilizadas na conexão. O s nomes de serviços são resolvidos pelo arquivo /etc/services, que atribui um nome às portas bem conhecidas. Se apenas um número aparecer, esta porta não está especificada no arquivo citado. Para forçar a saída de número em vez de nomes, usa-se o parâmetro -n junto ao comando. Sexta coluna (Estado) Mostra o estado da conexão. Se existir uma conexão, será mostrado o valor ESTABELECIDA. Utilizando o parâmetro -a junto ao comando, todas as portas abertas serão mostradas. As que estão com conexões estabelecidas, aparecem como dito antes. Se a porta estiver somente escutando a rede, ou seja, livre e pronta a receber conexões, o valor desta coluna será OUÇA. Existe a possibilidade de se ter mais dois valores nesta coluna: ESPERANDO SINCRONIA e ESPERANDO PARA ENVIAR. Em ambos os casos a fila de dados será diferente de zero, já que no primeiro caso a porta do computador em que o administrador estiver estará esperando que os aplicativos busquem informações, enquanto no segundo caso, a porta contém dados a espera para enviar dados a alguma interface remota, que provavelmente está indisponível ou com buffer de dados recheado e transbordando. Praticando Conecte-se ao seu próprio computador por ssh (utilize um usuário comum): $ ssh localhost 162

162 S e a conexão não se der, você já possui conhecimento suficiente para fazê-lo funcionar. Verifique se sua interface esta ativada, se a porta do ssh está aberta e se o ar quivo de configuração sshd_config está configurado de forma a permitir que o seu usuário se conecte. Agora execute o comando netstat como superusuário e use um filtro para trazer apenas as linhas que contiverem o serviço ssh. Abaixo utilizei os parâmetros a para # netstat ap grep ssh tcp 0 0 *:ssh *:* OUÇA 23009/sshd tcp 0 0 localhost:53439 localhost:ssh ESTABELECIDA 24217/ssh tcp 0 0 localhost:ssh localhost:53439 ESTABELECIDA 24218/sshd:fcamar tcp6 0 0 [::]:ssh [::]:* OUÇA 23009/sshd Veja que o ssh, serviço da camada de aplicação, utiliza o protocolo TCP da camada de transporte para realizar a identificação de seus dados e atar o par de interfaces em uma conexão confiável. Das quatro linhas, a primeira e a última estão apenas em estado de escuta. A primeira, caso requisitada, utilizará o protocolo IPv4, enquanto a segunda irá realizar conexão com IPv6. As duas do miolo representam uma conexão entre dois pontos com confiabilidade. A linha abaixo: tcp 0 0 localhost:53439 localhost:ssh ESTABELECIDA 24217/ssh esta linha mostra que o computador cliente que se conecta ao computador servidor está utilizando uma porta aleatória, que no exemplo é Todos os dados enviados ao computador de destino vão para a porta padrão do ssh do servidor (22). tcp 0 0 localhost:ssh localhost:53439 ESTABELECIDA 24218/sshd: fcamar A outra linha indica o servidor, já que temos uma conexão do localhost no localhost. Normalmente quando você estiver se conectando a algum computador remoto, a situação será como na segunda linha, quando alguém se conectar ao seu computador, a situação será como na terceira linha. Nela, o computador local utilizará a porta padrão do ssh (22) para receber dados exibe o estado da porta TCP e UDP ativas As portas permitem distinguir a quais aplicativos cada pacote pertence. MTU (Maxime transfer unit - Unidade de transferência máxima) define qual é o tamanho máximo de um frame. GERENCIADOR WICD Acrônimo de Wired and Wireless Network Connection Daemon (gerenciador de conexões a 163

163 redes cabeadas e sem fio), este gerenciador vem tentar facilitar a vida do administrador unificando todas informações da rede e das interfaces de um sistema num único programa gráfico. É interessante para configurações rápidas ou visualizações de informações de uma forma mais amigável, porém não substitui os comandos de rede vistos anteriormente, já que um administrador de redes deverá frequentemente trabalhar em sistemas servidores, que quase nunca possuem suporte gráfico. Abaixo temos um screenshot do wicd: Figura 11: Janela do Wicd O Wicd tentará sempre conectar a todas as redes que estiverem disponíveis e que o administrador indicar que ele deverá tentar. O Wicd, por si só, dará preferência para redes cabeadas, que são mais confiáveis e estáveis. Se não existir nenhuma rede deste tipo, mas tiver uma rede wirelesss, ele procurará aquela que tiver o melhor sinal e tentará se conectar. É obvio que o administrador pode configurar uma rede qualquer como padrão, mas este é o comportamento do wicd nos casos em que a rede padrão não esteja disponível. Estrutura do Wicd Wicd é composto de duas partes principais: o daemon (gerenciador residente na memória), que roda com privilégios de superusuário; e a interface do usuário, que roda com privilégios normais do usuário conectado à interface gráfica. Ambos rodam em processos diferentes e se comunicam através do D-Bus. D bus é uma interface utilizada como meio de comunicação entre aplicativos desktop. O D indica Desktop e o BUS indica um meio de transmissão. Um bom exemplo é o plugin do Rhytmbox que é instalado no Pidgin. Este plugin usa o Dbus para colocar em comunicação ambas aplicações, permitindo que a música que estiver tocando seja mos- 164

Vale frisar que o apt-get deve ser utilizado através de um usuário com privilégios de administrador.

Vale frisar que o apt-get deve ser utilizado através de um usuário com privilégios de administrador. :: Linux Como usar o apt-get Introdução O apt-get é um recurso desenvolvido originalmente para a distribuição Debian que permite a instalação e a atualização de pacotes (programas, bibliotecas de funções,

Leia mais

Lazarus pelo SVN Linux/Windows

Lazarus pelo SVN Linux/Windows Lazarus pelo SVN Linux/Windows Sei que não faltam artigos sobre como obter e compilar o Lazarus e o FPC pelo SVN, mas sei também que nunca é de mais divulgar um pouco mais e talvez escrever algo diferente.

Leia mais

Sistema Operacional Unidade 8.2 Instalação de aplicativos. QI ESCOLAS E FACULDADES Curso Técnico em Informática

Sistema Operacional Unidade 8.2 Instalação de aplicativos. QI ESCOLAS E FACULDADES Curso Técnico em Informática Sistema Operacional Unidade 8.2 Instalação de aplicativos Curso Técnico em Informática SUMÁRIO INTRODUÇÃO... 3 GERENCIAMENTO DE PACOTES DEBIAN... 3 #apt-get... 3 #apt-get update... 3 #apt-get upgrade...

Leia mais

Curso de Introdução ao Debian GNU/Linux

Curso de Introdução ao Debian GNU/Linux Curso de Introdução ao Debian GNU/Linux Definições: O que é Linux? O que é a distribuição? Porque GNU/Linux? A distribuição Debian: Possui um vasto conjunto de ferramentas e aplicativos Mais de 10.000

Leia mais

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia

BACHARELADO EM SISTEMAS DE INFORMAÇÃO EaD UAB/UFSCar Sistemas de Informação - prof. Dr. Hélio Crestana Guardia O Sistema Operacional que você usa é multitasking? Por multitasking, entende-se a capacidade do SO de ter mais de um processos em execução ao mesmo tempo. É claro que, num dado instante, o número de processos

Leia mais

Lista de exercícios - P2

Lista de exercícios - P2 Lista de exercícios - P2 1 - Sabemos que o arquivo /etc/inittab possui algumas linhas que definem eventos capturados pelo sistema de inicialização. Pensando em um servidor de produção, estável e que não

Leia mais

MANUAL DA SECRETARIA

MANUAL DA SECRETARIA MANUAL DA SECRETARIA Conteúdo Tela de acesso... 2 Liberação de acesso ao sistema... 3 Funcionários... 3 Secretaria... 5 Tutores... 7 Autores... 8 Configuração dos cursos da Instituição de Ensino... 9 Novo

Leia mais

Atualizações de Software Guia do Usuário

Atualizações de Software Guia do Usuário Atualizações de Software Guia do Usuário Copyright 2009 Hewlett-Packard Development Company, L.P. Windows e Windows Vista são marcas registradas da Microsoft Corporation nos EUA. Aviso sobre o produto

Leia mais

Gerenciando Pacotes *.deb

Gerenciando Pacotes *.deb Gerenciando Pacotes *.deb Debian são programas colocados dentro de um arquivo identificados pela extensão.deb incluindo arquivos necessários para a instalação do programa, um sistemas de listagem/checagem

Leia mais

ADMINISTRAÇÃO DE SISTEMA OPERACIONAL DE REDE (AULA 9)

ADMINISTRAÇÃO DE SISTEMA OPERACIONAL DE REDE (AULA 9) Prof. Breno Leonardo Gomes de Menezes Araújo brenod123@gmail.com http://blog.brenoleonardo.com.br ADMINISTRAÇÃO DE SISTEMA OPERACIONAL DE REDE (AULA 9) Pacotes Quando o Linux surgiu, os procedimentos de

Leia mais

Introdução ao Sistema Operacional Linux. Responsáveis: Professora Dra. Renata Spolon Lobato Graduando Gabriel Henrique Martinez Saraiva.

Introdução ao Sistema Operacional Linux. Responsáveis: Professora Dra. Renata Spolon Lobato Graduando Gabriel Henrique Martinez Saraiva. Introdução ao Sistema Operacional Linux Responsáveis: Professora Dra. Renata Spolon Lobato Graduando Gabriel Henrique Martinez Saraiva Aula 7 Instalação de Programas Instalação de Programas O que é instalar

Leia mais

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA. Manual do Moodle- Sala virtual

UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA. Manual do Moodle- Sala virtual UNIVERSIDADE FEDERAL DO AMAPÁ PRÓ REITORIA DE ADMINISTRAÇÃO E PLANEJAMENTO DEPARTAMENTO DE INFORMÁTICA Manual do Moodle- Sala virtual UNIFAP MACAPÁ-AP 2012 S U M Á R I O 1 Tela de Login...3 2 Tela Meus

Leia mais

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO?

Figura 1: tela inicial do BlueControl COMO COLOCAR A SALA DE INFORMÁTICA EM FUNCIONAMENTO? Índice BlueControl... 3 1 - Efetuando o logon no Windows... 4 2 - Efetuando o login no BlueControl... 5 3 - A grade de horários... 9 3.1 - Trabalhando com o calendário... 9 3.2 - Cancelando uma atividade

Leia mais

Primeiros passos das Planilhas de Obra v2.6

Primeiros passos das Planilhas de Obra v2.6 Primeiros passos das Planilhas de Obra v2.6 Instalação, configuração e primeiros passos para uso das planilhas de obra Elaborado pela Equipe Planilhas de Obra.com Conteúdo 1. Preparar inicialização das

Leia mais

Manual comandos Básicos para instalar e desinstalar Firebird em Sistema operacional Linux

Manual comandos Básicos para instalar e desinstalar Firebird em Sistema operacional Linux Manual comandos Básicos para instalar e desinstalar Firebird em Sistema operacional Linux Primeiramente certifique se que o Administrador de rede tem o Samba configurado no Linux,e se já não existe um

Leia mais

Atualização, backup e recuperação de software

Atualização, backup e recuperação de software Atualização, backup e recuperação de software Guia do usuário Copyright 2007 Hewlett-Packard Development Company, L.P. Windows é uma marca registrada nos Estados Unidos da Microsoft Corporation. As informações

Leia mais

Atualização, Backup e Recuperação de Software. Número de Peça: 405533-201

Atualização, Backup e Recuperação de Software. Número de Peça: 405533-201 Atualização, Backup e Recuperação de Software Número de Peça: 405533-201 Janeiro de 2006 Sumário 1 Atualizações de Software Recebimento Automático de Atualizações de Software HP...................................

Leia mais

Unidade 3: Personalizando o Excel *

Unidade 3: Personalizando o Excel * Unidade 3: Personalizando o Excel * material do 2010* 3.0 Introdução Visto que você está fazendo este curso, você provavelmente passa ou espera passar muito tempo trabalhando com o Excel. Assim, você precisa

Leia mais

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word 2010. Sumário

CADERNOS DE INFORMÁTICA Nº 1. Fundamentos de Informática I - Word 2010. Sumário CADERNO DE INFORMÁTICA FACITA Faculdade de Itápolis Aplicativos Editores de Texto WORD 2007/2010 Sumário Editor de texto... 3 Iniciando Microsoft Word... 4 Fichários:... 4 Atalhos... 5 Área de Trabalho:

Leia mais

AULA 5. Bruno L. Albrecht Felipe A. Chies Lucas F. Zawacki. PET Computação UFRGS

AULA 5. Bruno L. Albrecht Felipe A. Chies Lucas F. Zawacki. PET Computação UFRGS M i n i - C u r s o d e I n t r o d u ç ã o a o G N U / L i n u x AULA 5 Bruno L. Albrecht Felipe A. Chies Lucas F. Zawacki PET Computação UFRGS Setembro 2009 L i n h a d e C o m a n d o I I I Processos

Leia mais

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery

Sistemas Operacionais. Curso Técnico Integrado Profa: Michelle Nery Sistemas Operacionais Curso Técnico Integrado Profa: Michelle Nery Conteúdo Programático CONTAS DE E GRUPOS DE O Microsoft Management Console - MMC Permissões de Segurança de um Console Contas de Usuários

Leia mais

Resolução de Problemas de Rede. Disciplina: Suporte Remoto Prof. Etelvira Leite

Resolução de Problemas de Rede. Disciplina: Suporte Remoto Prof. Etelvira Leite Resolução de Problemas de Rede Disciplina: Suporte Remoto Prof. Etelvira Leite Ferramentas para manter o desempenho do sistema Desfragmentador de disco: Consolida arquivos e pastas fragmentados Aumenta

Leia mais

MINISTÉRIO DA EDUCAÇÃO

MINISTÉRIO DA EDUCAÇÃO MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE SANTA CATARINA CAMPUS SÃO JOSÉ REDES DE COMPUTADORES Laboratório 2 Wireshark

Leia mais

Manual do Desktop Sharing. Brad Hards Tradução: Marcus Gama

Manual do Desktop Sharing. Brad Hards Tradução: Marcus Gama Brad Hards Tradução: Marcus Gama 2 Conteúdo 1 Introdução 5 2 O protocolo do Buffer de Quadro Remoto (Buffer de Quadro Remoto) 6 3 Usando o Desktop Sharing 7 3.1 Gerenciando convites do Desktop Sharing........................

Leia mais

Desenvolvido por: Rafael Botelho botelhotech@gmail.com http://rafaelbotelho.com

Desenvolvido por: Rafael Botelho botelhotech@gmail.com http://rafaelbotelho.com Desenvolvido por: Rafael Botelho botelhotech@gmail.com http://rafaelbotelho.com Guia de Instalação do BRlix Como tenho visto no fórum do BRlix que muitas pessoas estão encontrando dificuldades na instalação

Leia mais

Manual de Instalação. Instalação via apt-get. SIGA-ADM versão 12.06

Manual de Instalação. Instalação via apt-get. SIGA-ADM versão 12.06 Manual de Instalação Instalação via apt-get SIGA-ADM versão 12.06 Introdução Projeto SIGA-EPCT Manual de Instalação via apt-get O SIGA-ADM é um subsistema do SIGA-EPT (Sistema Integrado de Gestão Acadêmica

Leia mais

LGTi Tecnologia. Manual - Outlook Web App. Soluções Inteligentes. Siner Engenharia

LGTi Tecnologia. Manual - Outlook Web App. Soluções Inteligentes. Siner Engenharia LGTi Tecnologia Soluções Inteligentes Manual - Outlook Web App Siner Engenharia Sumário Acessando o Outlook Web App (Webmail)... 3 Email no Outlook Web App... 5 Criar uma nova mensagem... 6 Trabalhando

Leia mais

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova;

Permitir a troca de mensagens de texto entre os dois alunos; Permitir que um aluno enviasse para o outro uma cópia de prova; Software Básico 2008.2 Trabalho Prático 1: programação de E/S, uso de sinais Prática de programação voltada a eventos Trabalho individual ou em dupla Data de entrega: 01/10/2008 1 O Objetivo Utilizando

Leia mais

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede

Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede Professor: Macêdo Firmino Disciplina: Sistemas Operacionais de Rede O servidor de arquivos fornece um ponto centralizado na rede para armazenamento e compartilhamento de arquivos entre os usuários. Quando

Leia mais

Prof. Rossano Pablo Pinto Dezembro/2012 Versão 0.2 (em construção) Prof. Rossano Pablo Pinto - http://rossano.pro.br 1

Prof. Rossano Pablo Pinto Dezembro/2012 Versão 0.2 (em construção) Prof. Rossano Pablo Pinto - http://rossano.pro.br 1 Visão geral sobre o processo de instalação e manutenção de instalações de software. Notas de aula. (aka lecture notes on Package Management Systems and software installation :)) Prof. Rossano Pablo Pinto

Leia mais

Manual do Teclado de Satisfação Online WebOpinião

Manual do Teclado de Satisfação Online WebOpinião Manual do Teclado de Satisfação Online WebOpinião Versão 1.2.3 27 de novembro de 2015 Departamento de Engenharia de Produto (DENP) SEAT Sistemas Eletrônicos de Atendimento 1. Introdução O Teclado de Satisfação

Leia mais

Manual do Usuário do Produto EmiteNF-e. Manual do Usuário

Manual do Usuário do Produto EmiteNF-e. Manual do Usuário Manual do Usuário Produto: EmiteNF-e Versão: 1.2 Índice 1. Introdução... 2 2. Acesso ao EmiteNF-e... 2 3. Configurações Gerais... 4 3.1 Gerenciamento de Usuários... 4 3.2 Verificação de Disponibilidade

Leia mais

Manual do Usuário. Protocolo

Manual do Usuário. Protocolo Manual do Usuário Protocolo Índice de capítulos Parte I - Processos............................... 01 1 - Buscar................................ 01 2 - Listar................................ 02 3 - Abertura..............................

Leia mais

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza

Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados. Prof. Hugo Souza Tópicos Avançados em Banco de Dados Gerenciamento de Transações em Banco de Dados Prof. Hugo Souza Até agora vimos como é formada a infraestrutura física e lógica das bases de dados com os principais componentes

Leia mais

Questões Tópico 102. sexta-feira, 21 de junho de 13

Questões Tópico 102. sexta-feira, 21 de junho de 13 Qual comando pode ser usado para listar as partições do dispositivo /dev/sda? a) cat /dev/sda b) ls -l /dev/sda c) fdisk -p /dev/sda d) fdisk -l /dev/sda 1 Qual comando pode ser usado para listar as partições

Leia mais

Usando o Conference Manager do Microsoft Outlook

Usando o Conference Manager do Microsoft Outlook Usando o Conference Manager do Microsoft Outlook Maio de 2012 Conteúdo Capítulo 1: Usando o Conference Manager do Microsoft Outlook... 5 Introdução ao Conference Manager do Microsoft Outlook... 5 Instalando

Leia mais

Administração de Sistemas Livres

Administração de Sistemas Livres Administração de Sistemas Livres Introdução a Comandos GNU/Linux Prof. Lais Farias Alves Comandos GNU/Linux O Linux (na verdade, GNU/Linux), assim como qualquer sistema operacional moderno, é perfeitamente

Leia mais

1. Explicando Roteamento um exemplo prático. Através da análise de uns exemplos simples será possível compreender como o roteamento funciona.

1. Explicando Roteamento um exemplo prático. Através da análise de uns exemplos simples será possível compreender como o roteamento funciona. Aula 14 Redes de Computadores 24/10/07 Universidade do Contestado UnC/Mafra Sistemas de Informação Prof. Carlos Guerber ROTEAMENTO EM UMA REDE DE COMPUTADORES A máscara de sub-rede é utilizada para determinar

Leia mais

O Sistema foi inteiramente desenvolvido em PHP+Javascript com banco de dados em MySQL.

O Sistema foi inteiramente desenvolvido em PHP+Javascript com banco de dados em MySQL. Nome do Software: Gerenciador de Projetos Versão do Software: Gerenciador de Projetos 1.0.0 1. Visão Geral Este Manual de Utilização do Programa Gerenciador de Projetos via Web, tem por finalidade facilitar

Leia mais

Início Rápido para o Templo

Início Rápido para o Templo Início Rápido para o Templo O FamilySearch.org facilita realizar as ordenanças do templo por seus antepassados. Todo o processo tem apenas alguns passos simples: 1. Descobrir antepassados que precisam

Leia mais

Curso de Introdução ao. Debian GNU/Linux

Curso de Introdução ao. Debian GNU/Linux Curso de Introdução ao Debian GNU/Linux Apresentação Marcos Azevedo Idade: 23 anos Administrador da Rede Senac Goiás Usuário Linux desde 1993 Desenvolvedor: Java, C/C++/C#, Assembly,.NET e Perl. Hobby

Leia mais

Carrera Pessoal 2015. Guia de uso

Carrera Pessoal 2015. Guia de uso Carrera Pessoal 2015 Guia de uso Bem vindo ao Carrera Pessoal 2015, o gerenciador financeiro ideal. Utilizando o Carrera Pessoal você poderá administrar com facilidade as suas finanças e/ou da sua família.

Leia mais

O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais.

O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais. MICROSOFT WINDOWS O Windows também é um programa de computador, mas ele faz parte de um grupo de programas especiais: os Sistemas Operacionais. Apresentaremos a seguir o Windows 7 (uma das versões do Windows)

Leia mais

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 2-1. PRINCÍPIOS DE SOFTWARE DE ENTRADA E SAÍDA (E/S) As metas gerais do software de entrada e saída é organizar o software como uma série de camadas, com as mais baixas preocupadas em esconder as

Leia mais

Como Instalar Programas no GNU/Linux. Elexsandro Rangel dos Santos elexsandro.rangel@yahoo.com.br

Como Instalar Programas no GNU/Linux. Elexsandro Rangel dos Santos elexsandro.rangel@yahoo.com.br Como Instalar Programas no GNU/Linux Elexsandro Rangel dos Santos elexsandro.rangel@yahoo.com.br Sumário O que é um pacote? Principais formatos de pacotes no GNU/Linux Sistema de Gerenciamento de Pacotes

Leia mais

SquidCacheAux para BrazilFW

SquidCacheAux para BrazilFW SquidCacheAux para BrazilFW ÍNDICE Índice Pág. 1 O que é o SquidCacheAux Pág. 2 SquidCacheAux e a inicialização do sistema Pág. 2 SquidCacheAux e a finalização do sistema Pág. 2 Tela principal do SquidCacheaux

Leia mais

Virtual Box. Guia. Instalação E Utilização. Criado por Wancleber Vieira wancleber.vieira@ibest.com.br

Virtual Box. Guia. Instalação E Utilização. Criado por Wancleber Vieira wancleber.vieira@ibest.com.br Virtual Box Guia De Instalação E Utilização 1 Sumário Instalação do Linux Ubuntu através de um gerenciador de Máquinas Virtuais 1.1 Introdução, 3 1.2 Instalação do Virtual Box, 3 1.3 Configuração do Virtual

Leia mais

Bem-vindo ao curso delta Gerenciamento de peso para a versão 9.1. Este curso aborda a nova solução de peso introduzida nessa versão.

Bem-vindo ao curso delta Gerenciamento de peso para a versão 9.1. Este curso aborda a nova solução de peso introduzida nessa versão. Bem-vindo ao curso delta Gerenciamento de peso para a versão 9.1. Este curso aborda a nova solução de peso introduzida nessa versão. Você deve ter bons conhecimentos de estoque, UM e administração de posições

Leia mais

Manual de Instalação. Instalação via apt-get

Manual de Instalação. Instalação via apt-get Manual de Instalação Instalação via apt-get Índice de capítulos 1 - Pré-requisitos para instalação............................ 01 2 - Instalando o SIGA-ADM................................. 01 2.1 - Preparando

Leia mais

SISTEMAS OPERACIONAIS LIVRES (LINUX) Professor Carlos Muniz

SISTEMAS OPERACIONAIS LIVRES (LINUX) Professor Carlos Muniz SISTEMAS OPERACIONAIS LIVRES (LINUX) Agendador de Tarefas Ocron é um ótimo agendador de tarefas, com ele você pode agendar para um determinado momento um programa qualquer a ser executado. Sua aplicação

Leia mais

Conectar diferentes pesquisas na internet por um menu

Conectar diferentes pesquisas na internet por um menu Conectar diferentes pesquisas na internet por um menu Pré requisitos: Elaboração de questionário Formulário multimídia Publicação na internet Uso de senhas na Web Visualização condicionada ao perfil A

Leia mais

Manual das planilhas de Obras v2.5

Manual das planilhas de Obras v2.5 Manual das planilhas de Obras v2.5 Detalhamento dos principais tópicos para uso das planilhas de obra Elaborado pela Equipe Planilhas de Obra.com Conteúdo 1. Gerando previsão de custos da obra (Módulo

Leia mais

Portal do Projeto Tempo de Ser

Portal do Projeto Tempo de Ser Sumário Portal do Projeto Tempo de Ser O que é um Wiki?...2 Documentos...2 Localizando documentos...3 Links...3 Criando um Documento...4 Criando um link...4 Editando um Documento...5 Sintaxe Básica...5

Leia mais

Manual de Utilização do PDV Klavix

Manual de Utilização do PDV Klavix Manual de Utilização do PDV Klavix Página 1/20 Instalando a partir do CD Se você recebeu um CD de instalação, rode o programa Instalador que se encontra no raiz do seu CD. Ele vai criar a pasta c:\loureiro

Leia mais

BSI Letramento Digital Prof. André Di Thommazo. Organização pessoal

BSI Letramento Digital Prof. André Di Thommazo. Organização pessoal Organização pessoal Os cursos de graduação exigem que os alunos cursem diversas disciplinas ao mesmo tempo e em alguns semestres a carga horária é grande. Em geral o aluno de ensino a distância tem outras

Leia mais

Manual Rápido de Registro e Configuração do DJPDV

Manual Rápido de Registro e Configuração do DJPDV Página 1 Manual Rápido de Registro e Configuração do DJPDV Juliana Rodrigues Prado Tamizou www.djsystem.com.br (15) 3324-3333 Rua Coronel Aureliano de Camargo,973 Centro - Tatuí SP - 18270-170 Revisado

Leia mais

O QUE É A CENTRAL DE JOGOS?

O QUE É A CENTRAL DE JOGOS? O QUE É A CENTRAL? A Central de Jogos consiste de duas partes: Um site na Internet e um programa de computador (Central) que deve ser instalado em sua máquina. No site www.centraldejogos.com.br, você pode

Leia mais

Manual do Instar Mail v2.0

Manual do Instar Mail v2.0 Manual do Instar Mail v2.0 Sumário Conteúdo Menu Principal... 2 Menu Cliente... 3 Pagina Categorias do Instar-Mail... 4 Importação... 4 Campanhas... 8 Cadastramento de campanhas do Instar-Mail... 9 Ações

Leia mais

Resolução da lista de exercícios de casos de uso

Resolução da lista de exercícios de casos de uso Resolução da lista de exercícios de casos de uso 1. Explique quando são criados e utilizados os diagramas de casos de uso no processo de desenvolvimento incremental e iterativo. Na fase de concepção se

Leia mais

Manual do Usuário DISCADOR GSM. MAN0065 - Versão: 1.4. Copyright 2011 Digivoice Eletrônica

Manual do Usuário DISCADOR GSM. MAN0065 - Versão: 1.4. Copyright 2011 Digivoice Eletrônica Manual do Usuário DISCADOR GSM MAN0065 - Versão: 1.4 Conteúdo Bem Vindo 4. Introdução 5. Requisitos Mínimos 6. Instalação 21. Funcionalidades 21. 28. 33. Tela Principal Configuracoes Avançadas Relatórios

Leia mais

Manual do Skanlite. Kåre Särs Anne-Marie Mahfouf Tradução: Marcus Gama

Manual do Skanlite. Kåre Särs Anne-Marie Mahfouf Tradução: Marcus Gama Kåre Särs Anne-Marie Mahfouf Tradução: Marcus Gama 2 Conteúdo 1 Introdução 5 2 Usar o Skanlite 6 2.1 Seleção do Scanner.................................... 6 3 Janela Principal do Skanlite 8 3.1 Digitalizando........................................

Leia mais

Lync Acessando o Lync Web App

Lync Acessando o Lync Web App Lync Acessando o Lync Web App Saiba como ingressar em uma reunião, quais são os recursos disponíveis, as configurações e conheça o layout do Lync Web App. Sumário Lync Web App... 1 Ingressar em uma Reunião

Leia mais

SISTEMA MEDLINK E-TISS PASSO-A-PASSO (USE JUNTO COM A VÍDEO AULA)

SISTEMA MEDLINK E-TISS PASSO-A-PASSO (USE JUNTO COM A VÍDEO AULA) 1 / 16 SISTEMA MEDLINK E-TISS PASSO-A-PASSO (USE JUNTO COM A VÍDEO AULA) Este guia passo-a-passo tem o objetivo de facilitar o entendimento: - da ordem de execução dos processos. - dos conceitos do sistema.

Leia mais

Gerenciamento de Pacotes

Gerenciamento de Pacotes Conteúdo Programático! Sistema de Gerenciamento de Pacotes! Pacotes Debian! Dependências! dpkg! apt! Instalar/remover/Listar! Procurar! Configurar/reconfigurar pacote! Configuração da ferramenta! Instalar/Remover/atualizar!

Leia mais

Turno/Horário Noturno PROFESSOR : Salomão Dantas Soares AULA Apostila nº

Turno/Horário Noturno PROFESSOR : Salomão Dantas Soares AULA Apostila nº UNIDADE 1I: SISTEMA COMPITACIONAL Elementos hardware e periféricos Um sistema computacional consiste num conjunto de dispositivos eletrônicos (hardware) capazes de processar informações de acordo com um

Leia mais

Bem-vindo ao tópico Múltiplas filiais.

Bem-vindo ao tópico Múltiplas filiais. Bem-vindo ao tópico Múltiplas filiais. 1 Ao final deste tópico, você estará apto a: Explicar as opções disponibilizadas com o recurso Múltiplas filiais. Definir as configurações necessárias para trabalhar

Leia mais

BR DOT COM SISPON: MANUAL DO USUÁRIO

BR DOT COM SISPON: MANUAL DO USUÁRIO BR DOT COM SISPON: MANUAL DO USUÁRIO BAURU 2015 2 BR DOT COM SISPON: MANUAL DO USUÁRIO Manual do usuário apresentado para auxiliar no uso do sistema SisPon. BAURU 2015 3 SUMÁRIO 1 Instalação... 5 1.1 Sispon...

Leia mais

Exemplo: Na figura 1, abaixo, temos: Clique aqui para continuar, que é a primeira atividade que você precisa realizar para iniciar seus estudos.

Exemplo: Na figura 1, abaixo, temos: Clique aqui para continuar, que é a primeira atividade que você precisa realizar para iniciar seus estudos. Visão Geral VISÃO GERAL Esse material abordará o acesso ao AVA (Ambiente Virtual de Aprendizagem) da Proativa do Pará, com intenção de ilustrar os aspectos na visão do Aprendiz. Essa abordagem dedica-se

Leia mais

Fale.com. Manual do Usuário

Fale.com. Manual do Usuário Fale.com Manual do Usuário Serviço Fale.com Índice 1. Introdução 3 2. Instalando o Fale.com 3 a. Configurando o áudio para atendimento pela Internet 9 3. Configurando o Fale.com 14 4. Utilizando o Fale.com

Leia mais

Tutorial 7 Fóruns no Moodle

Tutorial 7 Fóruns no Moodle Tutorial 7 Fóruns no Moodle O Fórum é uma atividade do Moodle que permite uma comunicação assíncrona entre os participantes de uma comunidade virtual. A comunicação assíncrona estabelecida em fóruns acontece

Leia mais

INSTALANDO UM SERVIDOR WINDOWS SERVER 2012 R2 SERVER CORE

INSTALANDO UM SERVIDOR WINDOWS SERVER 2012 R2 SERVER CORE INSTALANDO UM SERVIDOR WINDOWS SERVER 2012 R2 SERVER CORE A Microsoft disponibilizou em seu site, o link para download da versão Preview do Windows Server 2012 R2. A licença do produto irá expirar somente

Leia mais

Conhecendo o Decoder

Conhecendo o Decoder Conhecendo o Decoder O Decoder da sua ion TV, ou receptor, também é chamado de STB, sigla em inglês para Set Top Box, que é o aparelho responsável por receber o sinal de TV, decodificá-lo e enviá-lo para

Leia mais

Pró-Reitoria de Administração - PRAd Assessoria de Informática - AI SISTEMA DE PUBLICAÇÃO DE LICITAÇÕES. Manual de Procedimentos

Pró-Reitoria de Administração - PRAd Assessoria de Informática - AI SISTEMA DE PUBLICAÇÃO DE LICITAÇÕES. Manual de Procedimentos Pró-Reitoria de Administração - PRAd Assessoria de Informática - AI SISTEMA DE PUBLICAÇÃO DE LICITAÇÕES Manual de Procedimentos 2004 SUMÁRIO 1. INTRODUÇÃO...3 2. OBJETIVOS...3 3. ÂMBITO DE APLICAÇÃO...3

Leia mais

SUMÁRIO. 1. Instalação... 1. 2. Operações... 3. 2.1 Comunicação... 4. 2.1.1 Modo... 4. 2.1.2 Ethernet... 5. 2.1.3 Serial... 6

SUMÁRIO. 1. Instalação... 1. 2. Operações... 3. 2.1 Comunicação... 4. 2.1.1 Modo... 4. 2.1.2 Ethernet... 5. 2.1.3 Serial... 6 SUMÁRIO 1. Instalação... 1 2. Operações... 3 2.1 Comunicação... 4 2.1.1 Modo... 4 2.1.2 Ethernet... 5 2.1.3 Serial... 6 2.1.4 Configurações da placa de rede... 6 2.2 Edição base... 7 2.2.1 Produto... 7

Leia mais

Guia do Usuário. idocs Content Server v.2.0-1 -

Guia do Usuário. idocs Content Server v.2.0-1 - Guia do Usuário idocs Content Server v.2.0-1 - 2013 BBPaper_Ds - 2 - Sumário Introdução... 4 Inicializando a aplicação... 6 Ambiente... 7 Alterando o ambiente... 8 Senhas... 10 Alterando senhas... 10 Elementos

Leia mais

REDES DE COMPUTADORES

REDES DE COMPUTADORES REDES DE COMPUTADORES Prof. Esp. Fabiano Taguchi http://fabianotaguchi.wordpress.com fabianotaguchi@gmail.com ENLACE X REDE A camada de enlace efetua de forma eficiente e com controle de erros o envio

Leia mais

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger

Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger Gerenciamento de Entrada e Saída Hélio Crestana Guardia e Hermes Senger O controle da entrada e saída (E/S ou I/O, input/output) de dados dos dispositivos é uma das funções principais de um sistema operacional.

Leia mais

Manual de Instalação SNEP 1.3.12 Asterisk 1.4.44

Manual de Instalação SNEP 1.3.12 Asterisk 1.4.44 Manual de Instalação SNEP 1.3.12 Asterisk 1.4.44 2015 Autoria: Flávio Henrique Somensi Colaboradores: Jean Carlos Coelho, Kauê Santos, Urik Barbosa da Silva, Eduardo Sotero por OpenS Tecnologia LTDA. Rua

Leia mais

Manual do KGeography. Anne-Marie Mahfouf Kushal Das Tradução: Luiz Fernando Ranghetti

Manual do KGeography. Anne-Marie Mahfouf Kushal Das Tradução: Luiz Fernando Ranghetti Anne-Marie Mahfouf Kushal Das Tradução: Luiz Fernando Ranghetti 2 Conteúdo 1 Introdução 5 2 Início rápido do KGeography 6 3 Usando o KGeography 12 3.1 Mais recursos do KGeography..............................

Leia mais

Informática básica Telecentro/Infocentro Acessa-SP

Informática básica Telecentro/Infocentro Acessa-SP Informática básica Telecentro/Infocentro Acessa-SP Aula de hoje: Verificando data e hora, desligando o computador, janelas, copiar colar, excluindo um arquivo. Prof: Lucas Aureo Guidastre Verificando data

Leia mais

Redes Ponto a Ponto. Os drivers das placas de rede devem estar instalados.

Redes Ponto a Ponto. Os drivers das placas de rede devem estar instalados. Redes Ponto a Ponto É fácil configurar uma rede ponto-a-ponto em qualquer versão do Windows. Antes entretanto é preciso tomar algumas providências em relação ao hardware: Todos os computadores devem estar

Leia mais

MANUAL DO SOFTWARE. EPmfd II. Standard. Rev. Nro. Notas. Data da cópia 03/10/2008 Copiado por EGS EPSON PAULISTA LTDA. SEIKO EPSON CORPORATION

MANUAL DO SOFTWARE. EPmfd II. Standard. Rev. Nro. Notas. Data da cópia 03/10/2008 Copiado por EGS EPSON PAULISTA LTDA. SEIKO EPSON CORPORATION MANUAL DO SOFTWARE EPmfd II Rev. Nro. Notas Standard F Data da cópia 03/10/2008 Copiado por EGS EPSON PAULISTA LTDA. SEIKO EPSON CORPORATION 1 Produto: EPmfd II Rev. F Data: 03/10/2008 Pg. 2/42 Índice

Leia mais

Escrito por Júlio Oliveira Ter, 30 de Junho de 2009 20:06 - Última atualização Seg, 17 de Agosto de 2009 17:25

Escrito por Júlio Oliveira Ter, 30 de Junho de 2009 20:06 - Última atualização Seg, 17 de Agosto de 2009 17:25 SendEmail - O que é No Linux temos algumas opções para enviar e-mails. Uma das mais conhecidas é o SendMail (isso mesmo, sem o E de SendEmail). O problema do SendMail é que ele é um servidor completo de

Leia mais

Problemas básicos nos. Serviços Gladius MP

Problemas básicos nos. Serviços Gladius MP Problemas básicos nos Serviços Gladius MP I. Quando um funcionário não consegue marcar ponto a) Problemas de Nível Operacional b) Um ponto de ajuda c) Identificando em que fase o problema está d) Problemas

Leia mais

Manual de Instalação SIM/SINASC

Manual de Instalação SIM/SINASC Manual de Instalação SIM/SINASC Agosto/2009 Versão 2.2 Índice CAPÍTULO 01 INTRODUÇÃO... 4 CAPÍTULO 02 - PERFIL DO HARDWARE... 5 CAPÍTULO 03 INSTALADOR SIM SINASC 2.2... 6 CAPÍTULO 04 - MODO DE INSTALAÇÃO...

Leia mais

Gravando Dados e Cópias de CD s com o Nero 6.0 Disciplina Operação de Sistemas Aplicativos I

Gravando Dados e Cópias de CD s com o Nero 6.0 Disciplina Operação de Sistemas Aplicativos I CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA Escola Técnica Estadual de Avaré ETE-AVARÉ CURSO DE TÉCNICO EM INFORMÁTICA NÚCLEO DE APOIO Gravando Dados e Cópias de CD s com o Nero 6.0 Disciplina

Leia mais

Equipamentos de rede. Repetidores. Repetidores. Prof. Leandro Pykosz Leandro@sulbbs.com.br

Equipamentos de rede. Repetidores. Repetidores. Prof. Leandro Pykosz Leandro@sulbbs.com.br 1 Equipamentos de rede Prof. Leandro Pykosz Leandro@sulbbs.com.br Repetidores É o dispositivo responsável por ampliar o tamanho máximo do cabeamento de rede; Como o nome sugere, ele repete as informações

Leia mais

DarkStat para BrazilFW

DarkStat para BrazilFW DarkStat para BrazilFW ÍNDICE Índice Página 1 O que é o DarkStat Página 2 DarkStat e a inicialização do sistema Página 2 DarkStat e a finalização do sistema Página 2 Tela Principal do DarkStat Página 3

Leia mais

AGHOS - GESTÃO E REGULAÇÃO ASSISTENCIAL E FINANCEIRA DE SAÚDE MÓDULO DE REGULAÇÃO AMBULATORIAL DE CONSULTAS ESPECIALIZADAS

AGHOS - GESTÃO E REGULAÇÃO ASSISTENCIAL E FINANCEIRA DE SAÚDE MÓDULO DE REGULAÇÃO AMBULATORIAL DE CONSULTAS ESPECIALIZADAS Manual de Regulação Ambulatorial de Consultas Especializadas SISTEMA AGHOS Versão 01.2011 ÍNDICE INTRODUÇÃO...3 1. O SISTEMA...4 1.1 Acesso ao Sistema AGHOS:...4 1.2 Teclas de funções do Sistema:...5 1.3

Leia mais

Guia de Usuário do Servidor do Avigilon Control Center. Versão 5.6

Guia de Usuário do Servidor do Avigilon Control Center. Versão 5.6 Guia de Usuário do Servidor do Avigilon Control Center Versão 5.6 2006-2015 Avigilon Corporation. Todos os direitos reservados. A menos que seja expressamente concedida por escrito, nenhuma licença será

Leia mais

MANUAL DE UTILIZAÇÃO. Produtos: Saúde Pró Faturamento Saúde Pró Upload. Versão: 20130408-01

MANUAL DE UTILIZAÇÃO. Produtos: Saúde Pró Faturamento Saúde Pró Upload. Versão: 20130408-01 Produtos: Saúde Pró Upload Versão: 20130408-01 Sumário 1 APRESENTAÇÃO... 3 2 LOGIN... 4 3 VALIDADOR TISS... 7 4 CONFIGURAÇÃO DO SISTEMA... 10 4.1 DADOS CADASTRAIS MATRIZ E FILIAL... 11 4.2 CADASTRO DE

Leia mais

LABORATÓRIO UNIDADES 1 REVISÃO LINUX E COMANDOS BÁSICOS ABRINDO A MÁQUINA VIRTUAL UBUNTU SERVER 14.04.1 PELO VIRTUALBOX

LABORATÓRIO UNIDADES 1 REVISÃO LINUX E COMANDOS BÁSICOS ABRINDO A MÁQUINA VIRTUAL UBUNTU SERVER 14.04.1 PELO VIRTUALBOX LABORATÓRIO UNIDADES 1 REVISÃO LINUX E COMANDOS BÁSICOS ABRINDO A MÁQUINA VIRTUAL UBUNTU SERVER 14.04.1 PELO VIRTUALBOX Procure no MENU INICIAR PROGRAMAS o ícone do VirtualBox e execute-o. Em seguida clique

Leia mais

Modelos de Caso de Administração

Modelos de Caso de Administração Modelos de Caso de Administração Instruções Ajude a equipe Premier+ a concluir seus Casos de Administração de forma rápida e eficiente! Este documento lista as informações necessárias para concluir as

Leia mais

Terminal de Consulta de Preço. Linha Vader. Modelo TT300 e TT1000i

Terminal de Consulta de Preço. Linha Vader. Modelo TT300 e TT1000i Terminal de Consulta de Preço Linha Vader Modelo TT300 e TT1000i Índice 1. Conhecendo o Terminal de Consulta 03 1.1 Configurando o endereço IP no terminal 04 2. Conhecendo o Software TTSocket 06 3. Instalando

Leia mais

Usando o do-file editor Automatizando o Stata

Usando o do-file editor Automatizando o Stata Usando o do-file editor Automatizando o Stata 1 O QUE É O EDITOR DE DO-FILE O Stata vem com um editor de texto integrado, o do-file editor (editor de do-files, em português), que pode ser usado para executar

Leia mais

Figura 1: Interface 3G Identech

Figura 1: Interface 3G Identech Sumário 1 INTRODUÇÃO...3 2 INSTALAÇÃO NO WINDOWS XP...5 3 INSTALAÇÃO NO WINDOWS VISTA...12 4 INSTALAÇÃO NO WINDOWS 7...18 5 CADASTRANDO OPERADORA...25 6 CONECTANDO NA INTERNET...27 7 SERVIÇO DE SMS...29

Leia mais

Operador de Computador. Informática Básica

Operador de Computador. Informática Básica Operador de Computador Informática Básica Instalação de Software e Periféricos Podemos ter diversos tipos de software que nos auxiliam no desenvolvimento das nossas tarefas diárias, seja ela em casa, no

Leia mais