Baixe o app para aproveitar ainda mais
Prévia do material em texto
EE NN TT EE NN DD EE NN DD OO OO UNIXXX MARCIO CALASANS ENTENDENDO O UNIX Marc io Ca lasa ns 2 Índice 1 Objetivos .................................................................................................................................. 8 2 Introdução ao mundo Unix ....................................................................................................... 9 2.1 A História do Unix .............................................................................................................. 9 2.1.1 Afinal, o que é o Unix ? ................................................................................................... 9 2.1.2 Os Diversos Sabores do Unix ..........................................................................................10 2.1.3 A Cronologia do Unix .....................................................................................................11 2.1.4 A Árvore Genealógica do Unix .........................................................................................11 2.2 Arquitetura do sistema operacional ................................................................................. 12 2.2.1 Estrutura do sistema......................................................................................................12 2.2.1.1 O kernel ................................................................................................................13 2.2.1.2 Os gerenciadores de dispositivos e módulos ...............................................................13 2.2.1.3 O Shell ..................................................................................................................13 2.2.1.4 Os Programas.........................................................................................................14 2.2.2 Gerenciamento de memória............................................................................................14 2.2.3 Filesystems, Principais Diretórios e Mount Points ...............................................................14 3 Instalação............................................................................................................................... 16 3.1.1 Como funciona a instalação do Unix.................................................................................16 3.1.1.1 Fase 1 - Preparação para a instalação .......................................................................17 3.1.1.2 Fase 2 – Boot e carga do instalador ..........................................................................17 3.1.1.3 Fase 3 – Seleção das Opções de Instalação................................................................18 3.1.1.4 Fase 4 – Instalação.................................................................................................18 3.1.1.5 Fase 5 – Boot Inicial do Sistema ...............................................................................18 4 Unix básico ............................................................................................................................. 19 4.1 Shell................................................................................................................................. 19 4.1.1 Terminais e login...........................................................................................................19 4.1.1.1 Nota sobre senhas ..................................................................................................19 4.1.2 Conceitos sobre o shell...................................................................................................20 4.1.3 Introdução ao bash........................................................................................................21 4.1.3.1 Navegação no Histórico e Comandos de Edição...........................................................21 4.1.3.2 Arquivos Especiais ..................................................................................................22 4.2 Comandos no Unix ........................................................................................................... 22 4.3 Comandos de arquivos e diretórios .................................................................................. 23 4.3.1 Comandos de visualização de diretórios............................................................................23 4.3.1.1 ls..........................................................................................................................23 4.3.1.2 pwd ......................................................................................................................23 4.3.2 Comandos de manipulação de diretórios...........................................................................23 4.3.2.1 cd.........................................................................................................................23 4.3.2.2 mkdir ....................................................................................................................23 4.3.2.3 rmdir.....................................................................................................................23 4.3.3 Comandos de manipulação de arquivos dentro da estrutura de diretórios .............................24 4.3.3.1 cp.........................................................................................................................24 4.3.3.2 mv........................................................................................................................24 4.3.3.3 rm ........................................................................................................................24 4.3.3.4 touch ....................................................................................................................24 4.3.4 Comandos de manipulação de arquivos............................................................................24 4.3.4.1 cat ........................................................................................................................24 4.3.4.2 more.....................................................................................................................25 4.3.4.3 less.......................................................................................................................25 ENTENDENDO O UNIX Marc io Ca lasa ns 3 4.3.4.4 tail........................................................................................................................25 4.3.4.5 head .....................................................................................................................25 4.3.5 Comandos grep, cut, sort ...............................................................................................25 4.3.5.1 grep, egrep, fgrep...................................................................................................25 4.3.5.2 cut........................................................................................................................26 4.3.5.3 sort.......................................................................................................................26 4.4 Ambiente do shell e elaboração de scripts ....................................................................... 26 4.4.1 Programas, processos e file descriptors ............................................................................26 4.4.2 Redirecionamento de entrada e saída >,>>,<,<<.............................................................27 4.4.3 Pipes ...........................................................................................................................29 4.4.4 Metacaracteres e expressões regulares básicas .................................................................304.4.5 Variáveis ......................................................................................................................31 4.4.6 Uso de " ' ` no shell.............................................................Error! Bookmark not defined. 4.4.7 Alias ............................................................................................................................33 4.4.8 Obtendo ajuda ..............................................................................................................33 4.4.9 Criando e executando shell scripts ...................................................................................34 4.5 Sistema de arquivos (Filesystems) .................................................................................. 35 4.5.1 Introdução aos filesystems .............................................................................................35 4.5.1.1 Estrutura e organização...........................................................................................36 4.5.1.2 Principais tipos .......................................................................................................37 4.5.2 Nomes de arquivos e extensões ......................................................................................37 4.5.3 Arquivos especiais .........................................................................................................38 4.5.3.1 Diretórios ..............................................................................................................38 4.5.3.2 Links simbólicos (e links físicos) ...............................................................................38 4.5.3.3 Named pipes ..........................................................................................................40 4.5.3.4 Sockets .................................................................................................................40 4.5.3.5 Devices .................................................................................................................40 4.5.3.6 Doors ....................................................................................................................41 4.5.4 Sistema de permissões do Unix .......................................................................................41 4.5.5 Comandos chmod, chgrp, chown .....................................................................................42 4.5.5.1 chmod...................................................................................................................42 4.5.5.2 chown ...................................................................................................................44 4.5.5.3 chgrp ....................................................................................................................44 4.5.6 Umask .........................................................................................................................44 4.5.7 Permissões avançadas - SUID, SGID, sitcky bit .................................................................44 4.5.7.1 SUID.....................................................................................................................44 4.5.7.2 SGID.....................................................................................................................45 4.5.7.3 Sticky Bit ...............................................................................................................46 4.5.8 Comando chattr ............................................................................................................47 5 Administração de sistemas Unix ............................................................................................. 49 5.1 Gerenciamento de logs..................................................................................................... 49 5.1.1 O poder dos logs em procedimentos de troubleshooting .....................................................49 5.1.2 Os logs no Unix.............................................................................................................49 5.1.3 Syslog..........................................................................................................................50 5.1.4 Administração dos logs ..................................................................................................52 5.1.4.1 O utilitário logrotate................................................................................................53 5.2 Gerenciamento de usuários e grupos ............................................................................... 53 5.2.1 Base de dados ..............................................................................................................53 5.2.2 Gerenciamento através de comandos...............................................................................55 5.2.3 Gerenciamento manual de usuários e grupos ....................................................................56 5.2.4 Mudando de usuário dentro de uma sessão (su)................................................................57 5.2.5 Mudando de grupo dentro de uma sessão (newgrp) ...........................................................58 ENTENDENDO O UNIX Marc io Ca lasa ns 4 5.3 Processos......................................................................................................................... 58 5.3.1 System Calls.................................................................................................................58 5.3.2 Programas x Processos...................................................................................................59 5.3.3 Visualizando os processos...............................................................................................60 5.3.4 Estados de um processo.................................................................................................62 5.3.5 Sinais do Unix (SIGNALS)...............................................................................................63 5.3.6 Execução em foreground e background ............................................................................64 5.3.7 Daemons......................................................................................................................65 5.3.8 Filas de execução e prioridades ......................................................................................65 5.3.8.1 renice....................................................................................................................66 5.3.8.2 nice ......................................................................................................................66 5.4 Dispositivos (devices)...................................................................................................... 67 5.4.1 Criando dispositivos com mknod......................................................................................67 5.4.2 Restaurando dispositivos perdidos ...................................................................................67 5.5 Gerenciamento de filesystems ......................................................................................... 68 5.5.1 Particionamento de discos ..............................................................................................68 5.5.1.1 A área de swap.......................................................................................................69 5.5.1.2 Particionando um disco no Linux...............................................................................69 5.5.1.3 Particionando um disco no Solaris.............................................................................70 5.5.2 Criação de filesystems ...................................................................................................705.5.2.1 Criação de filesystems no Linux................................................................................70 5.5.2.2 Criação de filesystems no Solaris ..............................................................................70 5.5.3 Montagem de filesystems ...............................................................................................71 5.5.3.1 mount ...................................................................................................................71 5.5.3.2 umount .................................................................................................................71 5.5.3.3 A tabela de montagem de filesystems .......................................................................71 5.5.3.4 Utilizando NFS........................................................................................................73 5.5.3.5 NFS Server ............................................................................................................73 5.5.3.6 NFS Client..............................................................................................................74 5.5.4 Manutenção de filesystems .............................................................................................74 5.5.4.1 Manutenção manual ................................................................................................75 5.5.4.1.1 fsck - Linux .........................................................................................................75 5.5.4.1.2 fsck - Solaris .......................................................................................................75 5.5.4.2 Manutenção automática no boot (Linux) ....................................................................75 5.5.4.3 Manutenção automática no boot (Solaris) ..................................................................75 5.5.4.4 Gerenciando o espaço em disco ................................................................................76 5.5.4.4.1 du......................................................................................................................76 5.5.4.4.2 df ......................................................................................................................76 5.6 Inicialização e finalização ................................................................................................ 76 5.6.1 Boot managers e loaders................................................................................................76 5.6.1.1 Boot loaders no Linux..............................................................................................77 5.6.1.2 Boot loader no Solaris .............................................................................................77 5.6.2 Runlevels .....................................................................................................................77 5.6.2.1 Single-User Mode....................................................................................................78 5.6.3 A estrutura operacional do Unix ......................................................................................79 5.6.4 Os arquivos de inicialização do sistema ............................................................................80 5.6.4.1 /etc/rc.d/rc.sysinit (ou /etc/init.d) ............................................................................82 5.6.4.2 /etc/rc.d/rc ............................................................................................................82 5.6.4.3 Formas de inicialização de processos servidores: nohup X bg X inittab ..........................83 5.6.5 Desligamento do sistema................................................................................................83 5.7 Agendamento de tarefas .................................................................................................. 84 5.7.1 Comandos at e batch .....................................................................................................84 5.7.1.1 at .........................................................................................................................84 ENTENDENDO O UNIX Marc io Ca lasa ns 5 5.7.1.2 batch ....................................................................................................................85 5.7.1.3 atq........................................................................................................................85 5.7.1.4 atrm .....................................................................................................................85 5.7.2 A Cron .........................................................................................................................85 5.8 Arquivadores e Backups................................................................................................... 86 5.8.1 Compactadores .............................................................................................................86 5.8.1.1 compress / uncompress...........................................................................................87 5.8.1.2 gzip / gunzip ..........................................................................................................87 5.8.1.3 zcat ......................................................................................................................88 5.8.2 Manipulação avançada de arquivos e arquivadores ............................................................88 5.8.2.1 dd.........................................................................................................................88 5.8.2.2 cpio ......................................................................................................................90 5.8.2.3 tar ........................................................................................................................92 5.9 Data e hora ...................................................................................................................... 94 5.9.1 Ajuste manual...............................................................................................................94 5.9.1.1 date......................................................................................................................94 5.9.2 Ajuste automático (NTP) ................................................................................................95 5.10 Instalação de pacotes e aplicações............................................................................... 95 5.10.1.1 Pacotes binários .....................................................................................................96 5.10.1.2 Pacotes com código fonte ........................................................................................96 5.10.1.3 Outros...................................................................................................................96 5.10.2 Gerenciadores de pacotes...............................................................................................96 5.10.2.1 Pacotes TGZ (Tar Gzip)............................................................................................96 5.10.2.2 Pacotes RPM (Red Hat Package Manager) ..................................................................97 5.10.2.3 Pacotes PKG (Solaris Package) .................................................................................98 5.10.3 Instalação a partir do código fonte (básico) ......................................................................99 5.10.4 Produtos comerciais.....................................................................................................100 6 Redes IP em sistemas Unix...................................................................................................101 6.1 Introdução ..................................................................................................................... 101 6.1.1 Redes e o Unix............................................................................................................101 6.1.2 Terminais ...................................................................................................................101 6.1.3 O Protocolo UUCP ........................................................................................................102 6.1.4 A Internet e o TCP/IP...................................................................................................102 6.2 O Modelo OSI e o Modelo TCP/IP ................................................................................... 103 6.3 Camada 1 ....................................................................................................................... 104 6.3.1 Dispositivos de rede no Unix .........................................................................................104 6.3.2 Instalação de dispositivos de rede .................................................................................104 6.3.3 Interfaces lógicas ........................................................................................................105 6.3.3.1 ifconfig (Camada 1) ..............................................................................................105 6.4 Camada 2 ....................................................................................................................... 106 6.5 Camada 3 ....................................................................................................................... 107 6.5.1 Configurando os endereços IP .......................................................................................107 6.5.2 ARP ...........................................................................................................................107 6.5.3 RARP .........................................................................................................................108 6.5.4 IP Aliasing ..................................................................................................................109 6.5.5 IEEE 802.1q (VLAN Tagging).........................................................................................110 6.5.6 Arquivos interessantes: /etc/protocols ...........................................................................112 6.5.7 Roteamento................................................................................................................112 6.5.8 Roteamento estático....................................................................................................112 6.5.9 Roteamento dinâmico ..................................................................................................115 6.5.10 Ativando a funcionalidade de roteamento no Unix............................................................116 ENTENDENDO O UNIX Marc io Ca lasa ns 6 6.5.10.1 Linux...................................................................................................................116 6.5.10.2 Solaris.................................................................................................................116 6.5.11 Tornando as configurações de rede permanentes ............................................................116 6.5.11.1 Interfaces e endereçamento...................................................................................117 6.5.11.1.1 No Linux .........................................................................................................117 6.5.11.1.2 No Solaris .......................................................................................................118 6.5.11.2 Roteamento .........................................................................................................118 6.5.11.2.1 No Linux .........................................................................................................118 6.5.11.2.2 No Solaris .......................................................................................................119 6.6 Camada 4 ....................................................................................................................... 119 6.6.1 O que são sockets ?.....................................................................................................119 6.6.2 Portas TCP e UDP ........................................................................................................120 6.6.3 Os estados de um socket..............................................................................................121 6.6.4 Visualização dos recursos de camada 4 ..........................................................................122 6.6.5 Arquivos interessantes: /etc/services.............................................................................122 6.6.6 Gerenciador de serviços – O Super Servidor ...................................................................123 6.6.6.1 O inetd................................................................................................................123 6.6.6.2 O xinetd ..............................................................................................................124 6.7 Resolução de nomes....................................................................................................... 125 6.7.1 Base local de nomes ....................................................................................................125 6.7.2 DNS...........................................................................................................................126 6.7.2.1 Introdução...........................................................................................................126 6.7.2.2 A padronização dos nomes - Domínios.....................................................................126 6.7.2.3 As bases de dados distritbuidas ..............................................................................127 6.7.2.4 Funcionamento.....................................................................................................127 6.7.2.5 O servidor de nomes “bind”....................................................................................128 6.7.2.6 Configuração básica do bind...................................................................................129 6.7.2.6.1 Configuração do “named.conf”.............................................................................129 6.7.2.6.2 Configuração das zonas ......................................................................................130 6.7.3 NIS – Network Information System ...............................................................................131 6.7.4 Configuração do resolver..............................................................................................132 6.7.4.1 Alterando a ordem dos métodos de resolução de nomes............................................132 7 Aplicações avançadas na operação de plataformas Unix....................................................... 134 7.1 Troubleshooting em Sistemas Unix ............................................................................... 134 7.1.1 Processamento e Processos ..........................................................................................134 7.1.1.1 uptime ................................................................................................................134 7.1.1.2 ps .......................................................................................................................135 7.1.1.3 pstree .................................................................................................................136 7.1.1.4 Processose Processamento – top ...........................................................................137 7.1.1.5 w........................................................................................................................138 7.1.2 Memória.....................................................................................................................138 7.1.2.1 vmstat ................................................................................................................138 7.1.2.2 pmap ..................................................................................................................139 7.1.3 Discos........................................................................................................................140 7.1.3.1 df e du ................................................................................................................140 7.1.3.2 iostat ..................................................................................................................142 7.1.4 Logs e Mensagens .......................................................................................................143 7.2 Troubleshooting de Rede em Sistemas Unix................................................................... 143 7.2.1 Camadas 1, 2 e 3 ........................................................................................................143 7.2.1.1 ifconfig ................................................................................................................143 7.2.1.2 ping ....................................................................................................................143 7.2.1.3 arping .................................................................................................................144 7.2.1.4 netstat -i .............................................................................................................144 ENTENDENDO O UNIX Marc io Ca lasa ns 7 7.2.1.5 traceroute............................................................................................................144 7.2.1.6 route...................................................................................................................145 7.2.2 Camada 4...................................................................................................................145 7.2.2.1 telnet ..................................................................................................................145 7.2.2.2 netstat –na ..........................................................................................................145 7.2.2.3 tcpdump..............................................................................................................146 7.2.3 Camada 7...................................................................................................................147 7.2.3.1 lsof .....................................................................................................................147 7.2.3.2 strace / truss .......................................................................................................149 8 Referências Bibliograficas..................................................................................................... 150 9 Apêndice............................................................................................................................... 151 9.1 Campos do comando ‘ps’................................................................................................ 151 9.2 Unix Signals ................................................................................................................... 157 9.2.1 Signals - Unix Genérico ................................................................................................157 9.2.2 Signals - Solaris ..........................................................................................................158 9.2.3 Signals – Linux............................................................................................................159 9.2.4 Signals - BSD..............................................................................................................160 ENTENDENDO O UNIX Marc io Ca lasa ns 8 1 Objetivos O objetivo deste livro é de promover o entendimento efetivo do sistema operacional Unix (foco em Linux e Solaris), capacitando para uma operação e manutenção de servidores adequada e eficiente e permitindo extrair o melhor desempenho das plataformas e das atividades do dia a dia assim como serviços do tipo backup, DNS, roteamento, firewall e segurança. Os pré-requisitos mínimos para melhor compreensão e aproveitamento deste conteúdo são: § Conhecimentos intermediários sobre computadores § Conhecimentos intermediários sobre redes de computadores § Modelo OSI § Redes LAN e WAN § Conhecimentos intermediários sobre o protocolo TCP/IP ENTENDENDO O UNIX Marc io Ca lasa ns 9 2 Introdução ao mundo Unix Metas: Ao final deste capítulo, teremos estudado o que é um sistema Unix, sua estrutura organizacional e seu princípio de funcionamento, sabendo escolher e realizar a melhor forma de instalação para suas necessidades. 2.1 A História do Unix 2.1.1 Afinal, o que é o Unix ? Antes de iniciarmos a conversa sobre o Unix, voltemos mais um pouco no tempo e vamos falar um pouco sobre a computação no final dos anos 60, início dos anos 70. Nesta época, os computadores eram equipamentos muito grandes fisicamente e dispunham de poucos recursos (algo como 4k de memória ocupando diversos andares de um prédio!). Nesta época, no Bell Laboratories (adquirido pela AT&T, posteriormente pela Lucent e atualmente pertencente ao grupo Alcatel-Lucent), um sujeito chamado Ken Thompson desenvolveu a partir do assembly, uma linguagem de programação de alto-nível para o computador PDP-7 chamada B. Pouco tempo depois, já no computador PDP-11, a linguagem B foi base para que outro sujeito chamado Dennis Ritchie, desenvolvesse a conhecida linguagem C, com o intuito de criar uma linguagem de programação de alto-nível que fosse concisa, portável e com poder suficiente para viabilizar até escrever um sistema operacional, antes obrigatóriamente desenvolvidos em assembly. O sistema operacional Unix, cujo nome completo original é “Unix Time-Sharing System”, foi criado no início dos anos 70 por KenThompson e Dennis Ritchie no Bell Labs. O objetivo seria criar um sistema operacional capaz de ser portado para os diversos tipos de computadores existentes que, até o momento, eram completamente incompatíveis (isto significava que a cada nova versão de computadores, todos os programas existentes precisavam ser totalmente reescritos e recompilados para o novo hardware). A primeira versão do Unix foi inspirada no sistema operacional Multics e foi escrita em assembly para o PDP-7, entrentanto logo em seguida (1973), com a disponibilidade da linguagem C, recém desenvolvida por Dennis Ritchie (naturalmente para que ele pudesse escrever o Unix...), o sistema foi totalmente reescrito em C, tornando-se facilmente portável para outras plataformas. "...the number of UNIX installations has grown to 10, with more expected..." - Dennis Ritchie and Ken Thompson, June 1972 "... When BTL withdrew from the project, they needed to rewrite an operating system (OS) in order to play space war on another smaller machine (a DEC PDP-7 [Programmed Data Processor] with 4K memory for user programs). The result was a system which a punning colleague called UNICS (UNiplexed Information and Computing Service)—an 'emasculated Multics'; no one recalls whose idea the change to UNIX was" A idéia do desenvolvimento do Unix, similar ao paradigma dalinguagem C, era de se tornar um sistema operacional programável, portável, poderoso e aberto (daí surgiu o conceito dos “open systems”), para que outras pessoas também pudessem contribuir para seu desenvolvimento e aperfeiçoamento. Com o passar dos anos, o Unix passou a ser extensamente adotado por universidades, institudos de pesquisas, entidades governamentais até que os estudantes, se graduando e passando a assumir posições em empresas, queriam continuar a utilizar o Unix gerando um efeito onde todos os grandes fabricantes de computadores (e muitos dos pequenos), passaram a adotá-lo como sistema operacional para seus produtos de hardware, tornando o Unix um dos sistemas mais importantes, estáveis, robustos e confiáveis existentes no mundo. ENTENDENDO O UNIX Marc io Ca lasa ns 10 2.1.2 Os Diversos Sabores do Unix Uma vez sendo aberto, os fabricantes de computadores puderam passar a adotar o Unix como sistema operacional de suas plataformas de hardware, sendo que cada um passou a desenvolver facilidades diferentes para suas versões o que começou a criar um problema: apesar do sistema estar instalado em todos os lugares, eles estavam deixando de ser interoperáveis, dado as diversas implementações que começaram a surgir. Como consequencia disto, no início dos anos 80, haviam tantas versões incompatíveis que chegou-se a cogitar o fim do Unix, entretanto, o resultado das discussões acabou sendo posivito uma vez que, viabilizou a criação pela AT&T (proprietária da marca Unix), do X/Open (que derivou o The Open Group) que criou uma padronização para a base do sistema. Uma das questões levantadas foi a de qual seria a melhor versão para se tornar o padrão! Esta resposta veio com um pacto entre a AT&T e a Sun Microsystems que definiram que a linha derivada de Berkeley deveria ser o padrão, fixando-o como tal. Outros desenvolvedores, que não seguiam os padrões de Berkeley, sentiram-se prejudicados com a decisão e formaram um outro grupo chamado Open Software Foundation (OSF). Em resposta a esta iniciativa, a AT&T e a Sun formalizaram um grupo chamado de UNIX International, originando o que chama-se de “Unix Wars”, ou seja, a guerra dos sabores do Unix. Um dos aspectos mais interessantes da padronização do Unix, é a característica de que apenas algumas partes principais do sistema são padronizadas, deixando outras a critério de cada desenvolvedor explorar segundo a “linhagem” escolhida. Com isso, inúmeras versões do sistema operacional continuaram a co-existir e serem desenvolvidos até hoje. Estas versões são também chamadas, na comunidade Unix, de “sabores do Unix” (Unix flavors). Um importante evento precisa ser registrado entre os anos 80 e 90. Um sujeito radical chamado Richard Stallman, decidiu criar um pacote de software, compatível com o Unix, totalmente livre e aberto para que todos pudessem usar e melhorar como desejassem, criando o pacote GNU (GNU é uma sigla recursiva que significa GNU’s not Unix!). O pacote GNU reimplementa todos os comandos do Unix, com melhorias significativas e passou a ser bastante utilizado. Richard Stallman, criou também um novo tipo de licença de software chamado ‘copyleft’, que ao contrário do tradicional ‘copyright’, garante que tudo que for derivado de um sistema com licença copyleft, permanecerá copyleft, ou seja, aberto e livre, pois para Stallman, livre vem de liberdade e não de preço (um software com licença GNU não obrigatóriamente é gratuito, apesar do pacote de ferramentas Unix GNU sê-lo). Ainda nos anos 80, o projeto “Single Unix Specification” (SUS) foi criado com o objetivo de compilar e dar continuidade no trabalho originado pelo IEEE e pelo The Open Group e é mantido pelo Austin Group. No meio dos anos 90, com o avanço da computação pessoal, sendo usuário do Unix e sentindo enorme falta do sistema operacional para este segmento de computadores, um finlandês chamado Linus Torvalds iniciou o desenvolvimento de um kernel (núcleo do sistema operacional) inspirado no Unix, com o intuito de deixá-lo gratuito e aberto (note que freeware significa software gratuito enquanto open system significa sistema com o código aberto, não implicando que necessitem ser os dois ao mesmo tempo!) para todos que quisessem utilizá-lo e desenvolvê-lo, surgindo então o Linux. O Linux (o nome é marca registrada pertencente ao Linus Torvalds) adota o padrão POSIX (Portable Operating System Interface for uniX- normas definifas pelo IEEE) para diversas implementações internas e também respeita a diversos padrões do Single Unix Specification e do System V, podendo ser considerado um padrão próprio. Para completar o sistema operacional recém desenvolvido, Torvalds adotou o pacote GNU para serem os comandos de sua versão de Unix, completando assim o sistema operacional. As principais linhagens de Unix que podemos citar seriam: § BSD (Berkeley Software Distribution) § System V § The Single Unix Specification § Linux § BSDI (BSD Independent) A pergunta natural que fariamos é: Qual o melhor Unix, então ? A Resposta é simples: A que você preferir! Curiosamente, todos os Unix seguem um padrão base único, diferindo em questões de implementação. Iisto significa que quem conhece bem um sabor de Unix, facilmente se adapta nos demais. ENTENDENDO O UNIX Marc io Ca lasa ns 11 2.1.3 A Cronologia do Unix A figura a seguir, apresenta uma cronologia até 1995 dos princiais sabores de Unix existentes (não incluindo as linhagens do Linux e do BSDI, por não terem derivado do código original licenciado do Unix): 2.1.4 A Árvore Genealógica do Unix A figura abaixo, apresenta de forma resumida a genealogia dos principais Unices (este é o plural oficial de Unix!!!) existentes: ENTENDENDO O UNIX Marc io Ca lasa ns 12 2.2 Arquitetura do sistema operacional 2.2.1 Estrutura do sistema Para entendermos melhor a estrutura do sistema operacional Unix, vamos dividí-lo em 4 partes: o kernel, os gerenciadores de dispositivos, o shell e os programas tal como ilustrado a seguir: ENTENDENDO O UNIX Marc io Ca lasa ns 13 2.2.1.1 O kernel Todo sistema operacional tem um kernel (núcleo), que nada mais que um programa capaz de realizar o gerenciamento das funções de um computador. O kernel é o componente mais próximo do hardware do computador e é o responsável por garantir a execução segura dos programas e realizar a comunicação com o hardware. O kernel é o software que realiza as tarefas de inciar e finalizar a execução de programas, gerenciar o uso da memória, controlar os sistemas de armazenamento (filesystems), gerenciar o I/O com os dispositivos, entre outras funções. Nos Unices, o kernel é um arquivo que normalmente fica localizado em um diretório do dispositivo de boot do sistema. 2.2.1.2 Os gerenciadores de dispositivos e módulos Como em muitos outros sistemas operacionais, o kernel do Unix tem implementadas as funções de entrada e saída (I/O), entretanto como cada dispositivo de hardware é desenvolvido por um fabricante específico, algumas vezes respeitando padrões, outras não, é necessário uma camada de componentes de software chamadas gerenciadores de dispositivos (device drivers). Os gerenciadores de dispositivos são nada mais que programas complexos que conhecem todos os detalhes de comunicação com o hardware para qual foram desenvolvidos e do outro lado, conhecem como se comunicar com o kernel do sistema operacional. Os gerenciadores de dispositivo podem se acoplar ao kernel de duas formas: estaticamente ou dinamicamente. Da primeira forma, estática, é necessário “fundir” o programa do gerenciador de dispositivos ao kernel. E como se faz isso? Parece complexo, mas na verdade é simples: a resposta é “linkando” o programa compilado aokernel. Para entender melhor isso, vamos explicar rapidamente como um programa fonte se transforma em um programa executável: Primeiro o programador escreve o programa em um arquivo texto comum. Depois ele utiliza um compilador para transformar o código fonte em um arquivo contendo o código binário do programa. Este código binário já se encontra em linguagem de máquina, entretanto precisa ser unido a outros componentes de software (bibliotecas/libraries) que tem a programação de como interagir com o sistema operacional, entre outras coisas, para que possa se tornar executável. Este último processo se chama “link edição”, ou simplesmente “linkar” o binário. Neste processo, você junta seu programa (binário) às libs do sistema e o resultado é um arquivo executável. Como o kernel e os gerenciadores de dispositivos são programas como outros quaisquer, basta linka-los para obter um novo kernel que suporte o hardware desejado! No caso dos gerenciadores de dispositivos dinâmicos, o processo é um pouco diferente e mais prático, entretanto somente versões recentes dos sistemas operacionais suportam esta funcionalidade. O programa do gerenciador de dispositivo, neste caso, é compilado de forma especial como um módulo de bibliotecas de funções. O kernel por sua vez, é programado para aceitar carregar em tempo de execução (dinamicamente) estes componentes de programas “avulsos” (módulos) e se acoplá-los “linkando-os” dinamicamente, passando a suportar as funcionalidades implementadas. Fazendo uma analogia com a conhecida tecnologia da Microsoft, o sistema operacional Windows, os módulos são equivalentes às DLLs (Dynamic Linked Libraries) e aos VDX (Virtual Device Drivers). 2.2.1.3 O Shell Para entender o que é o shell, vamos imaginar um forno de micro-ondas. No painel, encontramos uma série de botões cada um com uma função específica, por exemplo: pipoca, pizza, pratos prontos, descongelamento, etc. Para que servem estes botões? Resposta óbvia: para que o usuário possa comandar o forno a executar determinada função. Em outras palavras: forncer uma interface para o usuário executar comandos e acionar o hardware para executar determinadas funções que cumprar a tarefa comandada! O shell nada mais é que o painel de botões do forno de micro-ondas, ou seja, a interface do Unix para que nós, humanos, possamos executar comandos no sistema operacional e realizar as tarefas que desejamos. Resumindo em grosso modo: É o local onde digitamos os comandos e vemos o resultado! Então por que o shell do Unix é algo tão místico? Porque ela é mais que um simples painel de botões! A shell é na verdade uma interface para uma poderosa linguagem de programação interpretada chamada shell script (linguagem compilada é aquela que escrevemos um programa fonte e usando um compilador/link-editor criamos um arquivo executável, enquanto ENTENDENDO O UNIX Marc io Ca lasa ns 14 a linguagem interpretada, o código fonte ou sequência de comandos é compilada/link-editada/executada diretamente pelo interpretador sem gerar o arquivo executável). Como quase tudo no Unix, o shell não podia ser diferente e pode ser encontrado disponível em diversos sabores. Os mais comuns hoje em dia são o bash (Bourne Again Shell), o ksh (Korn Shell) e o sh (Bourne Shell). Existem também outros menos comuns como o csh (C Shell), tcsh (TENEX C Shell), ash (Alquimist Shell), dash (Debian Alquimist Shell), zsh (Z Shell), além de outros sabores mais exóticos. 2.2.1.4 Os Programas No Unix, o kernel (já com os gerenciadores de dispositivos linkados e carregados) é o responsável pelo gerenciamento do hardware e da execução das coisas no computador. Todas as demais funcionalidades do sistema operacional, são implementadas em programas a parte, cada um destinado a um objetivo específico. A shell mesmo é um programa. Desta forma, todos os comandos do sistema, as aplicações que instalamos, enfim, tudo que executamos no Unix, são programas, que são instalados no disco (ou em outro dispositivo de armazenamento) e carregados em memória para execução. 2.2.2 Gerenciamento de memória Uma das mais notáveis características dos sistemas Unix está no gerenciamento de memória feita pelo sistema operacional. Apesar de que cada sabor implementa uma forma particular de gerenciar a memória, todas são notáveis em sua eficiência e alto-desempenho. Como sabemos (ou estamos aprendendo agora), nada em um computador pode ser executado se não estiver na memória. Isto porque em arquitetura de computadores, um processador somente tem acesso à memória, de forma que só consegue executar e endereçar o que está carregado lá. No início dos tempo, os computadores dispunham de muito pouca memória física instalada de forma que a execução de programas maiores se tornava impraticável. Para contornar este problema, foi criada em implementada no kernal do sistema operacional, uma técnica capaz de utilizar um espaço em disco ou um arquivo onde o sistema operacional pudesse copiar trechos da memória que não estivesse utilizando no momento, liberando espaço para carregar dados e instruções que precisassem ser processados em determinado momento. Esta operação foi denominada “swap” (do inglês: troca), onde trechos da memória são trocados dinamicamente conforme a necessidade de uso, e o local em disco onde estes trechos são gravados foi denominado swap space ou swap file (atualmente também chamado de memória virtual), conforme o caso. Com esse recurso disponível, os sistemas passaram a contar com uma quantidade de memória total muito maior, viabilizando aplicações maiores e mais complexas. Nota: Analogamente nos sistemas MS-Windows, a área de swap é um arquivo em disco chamado de memória virtual ou page file. Os Unices organizam a memória em blocos chamados de páginas (pages) que são alocados durante o boot do sistema operacional tanto na memória real do computador quanto nas áreas de swap alocadas (o Unix suporta alocação dinâmica de novas áreas de swap), enxergando-as como containers de páginas. Como o Unix sabe que somente o container “RAM” pode ser acessado pelo processador, ele gerencia as operações de swap de uma ou mais páginas em um processo chamado de paginação (paging - page-in, page-out). 2.2.3 Filesystems, Principais Diretórios e Mount Points Nos computadores, os arquivos são armazenados em filesystems, que são estruturas que também podem ser visualizadas como containers (não necessáriamente em disco!!!) com uma organização específica (organização dos bits armazenados) capaz de guardar e restaurar dados, provendo funcionalidades de acesso (protocolos) a estas informações de forma coerente, segura e organizada. Os filesystems podem ser considerados “bancos de dados” de arquivos e possuem um estrutura padronizada. ENTENDENDO O UNIX Marc io Ca lasa ns 15 Existem diversos tipos de filesystems disponíveis hoje no mundo, voltados para um ou mais sistemas operacionais, a exemplo: FAT, FAT32, VFAT, NTFS, ext, etx2, ext3, ext4, HFS, HPFS, JFS, ISO9660, UDF, ReiserFS, Reiser4, ZFS, SMB, NFS, VxFS Veritas, entre muitos outros. No Linux, os filesystems mais utilizados são o ext3, ext4 ou Reiser4, enquanto no Solaris, os filesystems mais utilizados são o ZFS e o VxFS (quando instalado o Veritas Volume Manager) Em servidores, os filesystems são normalmente criados em HDs que armazenam tanto o sistema operacional quanto os demais arquivos. O sistema operacional Unix, se instala no filesystem de boot do sistema e se aloca seus arquivos em diversos diretórios afim de organizar a estrutura do sistema por grupos de funcionalidades. A figura abaixo, apresenta a estrutura dos principais diretórios de um sistema Unix: Diretório Descrição / Diretório raíz de todo o sistema operacional /bin/ Comandos essenciais do sistema operacionalvoltados para os usuários /boot/ Boot loaders, kernel e arquivos relacionados com a carga do sistema operacional /dev/ Área de ligação entre o sistema operacional e os dispositivos de hardware /etc/ Configuração do sistema operacional /etc/opt/ Configurações relacionadas a aplicações instaladas no /opt /etc/X11/ Configurações relacionadas ao sistema X11 (X-Window System version 11) /home/ Local de armazenamento do "home" dos usuários /lib/ Bibliotecas essenciais do sistema operacional, requeridas pelos programas instalados no /bin e /sbin /media/ "Mount point" para medias removíveis tipo CD-ROMs, DVDs, Pen-Drives, etc /mnt/ Local para montagem de filesystems temporários /opt/ Local para instalação de aplicações e pacotes de software adicionais /proc/ Filesystem virtual utilizado para registros feitos pelo kernel e processos do sistema operacional /root/ Home do usuário root (superusuário) /sbin/ Comandos essenciais do sistema operacional voltados para o sistema /tmp/ Área para arquivos temporários (é totalmente limpa a cada reboot do sistema) /usr/ Local para binários disponíveis para o sistema/usuários quando em modo multi -usuário /usr/bin/ Comandos adicionais instalados no sistema operacional /usr/etc/ Configurações relacionadas a aplicações instaladas no /usr/bin ou /usr/sbin /usr/include/ Arquivos de inclusão para compilação de programas (includes) /usr/lib/ Bibliotecas requeridas pelos programas instalados no /usr/bin e /usr/sbin /usr/sbin/ Binários adicionais do sistema operacional (daemons, serviços de rede, etc) /usr/share/ Dados compartilhados entre os binários/fontes independentes da arquitetura do computador /usr/src/ Códigos fontes (kernel, libraries, headers) /usr/ucb/ Equivalente ao /usr/bin no Solaris /usr/X11R6/ Instalação do sistema X-Window (X11) /usr/local/ Local para binários específicos para o computador em questão /usr/local/bin/ Comandos e aplicações locais /usr/local/etc/ Configurações relacionadas a aplicações instaladas no /usr/local/bin ou /usr/local/sbin /usr/local/include/ Arquivos de inclusão para compilação de programas (includes) dentro do /usr/local/ /usr/local/lib/ Bibliotecas requeridas pelos programas instalados no /usr/local/bin e /usr/local/sbin /usr/local/man/ Páginas de documentação on-line sobre as aplicações e programas instalados no /usr/local /usr/local/sbin/ Binários adicionais voltados para o sistema, específicos do computador em questão (daemons, serviços de rede, etc) /usr/local/share/ Dados compartilhados entre os binários/fontes independentes da arquitetura do computador /usr/local/src/ Códigos fontes de programas e aplicações locais ENTENDENDO O UNIX Marc io Ca lasa ns 16 /var/ Área de arquivos de conteúdo variado, não permanentes ou constant emente modificados /var/lock/ Arquivos de lock do sistema e das aplicações /var/log/ Registros de utilização feitos pelos processos do sistema operacional e das aplicações /var/mail/ Caixas postais de e-mail dos usuários /var/run/ Informações sobre o sistema desde o último boot (usuários logados, daemons em execução, etc) /var/spool/ Filas de tarefas a serem processadas (ex: filas de impressão, mail, uucp, etc) /var/spool/mail/ Caixas postais de e-mail dos usuários (descontinuado) /var/tmp/ Área para arquivos temporários (é preservada entre os reboots do sistema) Legenda: Primeira Hierarquia Segunda Hierarquia Terceira Hierarquia Binários e bibliotecas essenciais do sistema operacional (dentro da 1a hierarquia) Um sistema Unix, quando instalado, normalmente cria diversas partições nos discos para armazenar sua estrutura de diretórios. Devemos observar que quanto menor o tamanho físico de uma partição, mais rápido será o procedimento de verificação e correções de erros do filesystem em casos de pane com reboot do sistema, de forma que o sistema estaria disponível mais rápido para manutenção. Somado a este fato e observando a organização da primeira hierarquia dos diretórios do Unix, podemos deduzir que faz bastante sentido utilizarmos partições e, muitas vezes, discos diferentes para cada conjunto de dados do sistema. Diferente dos sistemas Microsoft, que utilizam obrigatóriamente e somente as 26 letras do alfabeto para associação com os dispositivos de armazenamento (C:, D:, etc), impondo uma limitação natural ao sistema operacional, os sistemas Unix enxergam a estrutura de diretórios como uma única árvore. Como então, mapeamos uma nova unidade de armazenamento ou uma outra partição de disco no Unix? A resposta é: De forma simples e eficiente, ou seja, “encaixando-os” na árvore principal do sistema como se fosse diretórios! Traduzindo para os termos do Unix, este encaixe chama-se montagem do filesystem (mount) e o diretório onde montaremos o filesystem, chama-se “mount point”. Cada sabor de Unix utiliza uma proposta de particionamento da instalação do sistema, entretanto na sua grande maioria esta proposta é bastante similar. O administrador do sistema pode a seu critério, alterar este particionamento para alguma forma que melhor se adeque às suas necessidades, bastando prospectar corretamente os espaços alocados afim de evitar problemas de disco cheio durante a operação do sistema. Os principais mount points/partições geralmente utilizados pelos Unices são: § / § /usr § /var § /opt Outras partições/mount points também encontradas: § /boot § /home § /tmp 3 Instalação 3.1.1 Como funciona a instalação do Unix Cada sabor de Unix, ou melhor dizendo, cada versão de cada sabor de Unix, encontramos uma forma diferente de realizar sua instalação, entretanto uma coisa é certa: com a evolução dos sitemas operacionais, a cada dia que passa, as novas versões dos sistemas vem apresentando interfaces cada vez melhores e mais amistosas para realizar os procedimentos de instalação do sistema operacional. ENTENDENDO O UNIX Marc io Ca lasa ns 17 Em cada arquitetura de computadores, encontraremos alguns procedimentos iniciais distintos desenvolvidos pelos fabricantes. Vamos nos concentrar em servidores das famílias de arquitetura Intel e de arquitetura SPARC (Scalable Processor ARChitecture – marca registrada da Sun Microsystems). Para facilitar nosso entendimento, vamos dividir a instalação de um sistema Unix em 5 fases, de forma independente do sabor escolhido: § Fase 1: Preparação para a instalação § Fase 2: Boot e carga do instalador § Fase 3: Seleção das opções de instalação § Fase 4: Instalação § Fase 5: Boot inicial do sistema 3.1.1.1 Fase 1 - Preparação para a instalação Apesar da facilidade atualmente encontrada, instalar um sistema operacional, qualquer um que seja, em um servidor de produção requer um bom planejamento e preparo para que se obtenha o melhor desempenho possível e a maior garantia do menor índice de problemas posteriores. Algumas informações que devem ser coletadas antes de iniciar a instalação do sistema operacional: § Perfil do servidor (tipos de serviços que serão executados) § Características do hardware: CPU, memória, placas de rede (marcas e modelos), placas controladoras específicas, hardware não padrão, etc § Compatibilidade do hardware existente com o sabor e a versão do sistema operacional (no caso de plataforma Intel) § Planejamento da tabela de partição § Hostname § Endereços IP Nas plataformas Intel, com o Linux, é muito importante verificar a compatibilidade do hardware existente com a versão a ser instalada. No caso de hardware não padrão, é importante também obter os drivers para estes dispositivos. 3.1.1.2 Fase 2 – Boot e carga do instalador O primeiro boot de instalação consiste no computadorcarregar o boot loader do sistema operacional, que se encarregará de carregar o kernel de instalação na memória e o programa instalador do sistema operacional. Deste ponto em diante, o programa instalador interagirá com o usuário para prosseguir com a instalação. Existem várias formas de instalar um sistema Unix: via CD-ROM/DVD, a partir de um drive remoto, de um FTP server, por HTTP, até mesmo por bootp (boot protocol: um protocolo capaz de dar boot em um servidor pela placa de rede buscando todos os arquivos necessários remotamente, inclusive o boot loader). Vamos nos concentrar na forma mais convencional, que é a instalação via mídia de CD-ROM/DVD local. No caso das plataformas Intel, a BIOS do computador se encarregará de carregar o ‘boot loader’ de um dos dispositivos listados como ‘bootáveis’. Desta forma, basta ligar o computador, inserir a mídia de instalação e seguir as instruções que forem sendo apresentadas na tela. No caso das plataformas SPARC, ao ligar o computador, será carregado o programa da NVRAM (Non Volatile RAM) que é o modo monitor do equipamento. Caso estejamos realizando uma reinstalação, deve-se interromper o boot automático para entrar em modo monitor (teclando a sequência Stop-A). Em modo monitor, deve-se dar os comandos para boot a partir da mídia de instalação e aguardar a carga do programa instalador. ENTENDENDO O UNIX Marc io Ca lasa ns 18 3.1.1.3 Fase 3 – Seleção das Opções de Instalação Em todos os sabores do Unix, ao executarmos o programa de instalação, seremos questionados sobre as configurações básicas do sistema, que são principalmente, as informações que levantamos no planejamento da instalação. Em cada versão lançada os desenvolvedores lançam novidades e melhorias nos procedimentos de instalação, de forma que é praticamente impossível criar um manual genérico de instalação do Unix. Um passo muito importante na instalação é a escolha do tipo de instalação desejada (Linux) ou o grupo de software desejado (Solaris). Nesta opção, será escolhido qual pacote pré-definido de comandos, programas e aplicativos serão instalados, conforme o perfil do computador em questão. A escolha deve ser feita pelo administrador do sistema de acordo com seu planejamento do Data Center, procedimentos internos, normas de engenharia de sistemas da organização, etc. Convém ressaltar, que deve-se evitar o modelo ‘completo’ em servidores pois apesar de parecer mais fácil a instalação, e o cumprimento de dependências posteriores para outras aplicações, este modelo sobrecarrega o sistema com pacotes totalmente desnecessários que muitas vezes acabam representando ônus de processamento, riscos (muitas vezes graves) de segurança, entre outros problemas. A recomendação purista para a instalação de um servidor é a de escolher o modelo mínimo de instalação, e após a conclusão da mesma, instalar manualmente os pacotes estritamente necessários para o sevidor. Neste caso, é muito útil a elaboração de uma especificação padrão de instalação de servidores do Data Center definindo os procedimentos e pacotes a serem instalados em todas as máquinas, simplicando não apenas o processo de instalação do sistema operacional, mas também a operação e manutenção do parque. 3.1.1.4 Fase 4 – Instalação Uma vez tendo preenchido todas as informações solicitadas pelo programa instalador e selecionado os pacotes a serem instalados, a instalação propriamente dita ocorre de forma automática, bastando aguardar sua conclusão. 3.1.1.5 Fase 5 – Boot Inicial do Sistema Após a instalação, o programa instalador irá solitar a remoção da mídia do drive e o sistema irá realizar o primeiro boot do sistema. Algumas configurações iniciais automáticas poderão ser realizadas durante o processo. Ao final do mesmo, será apresentado um prompt de login no sistema. ENTENDENDO O UNIX Marc io Ca lasa ns 19 4 Unix básico Metas: Neste capítulo, trataremos as formas de acesso ao sistema, como utilizar o shell do sistema de forma profissional e efetiva, saber utilizar os comandos básicos e conhecer os princípios dos recursos base de segurança do Unix. 4.1 Shell 4.1.1 Terminais e login O acesso ao shell de um sistema Unix é realizado por meio de terminais. Estes terminais estão disponíveis na console do computador e também por acesso remoto, podendo este ser realizado por portas seriais ou pela rede através de telnet, rlogin, ssh ou similar, ou ainda por emulação de terminal X com display remoto. O Unix por conceito é um sistema projetado com segurança como premissa, portanto para que um usuário acesse o shell do sistema, é necessário que o mesmo tenha uma conta (login) cadastrado no sistema. Após a instalação do sistema, por padrão, a única conta disponível é a conta do usuário administrador, que a partir de agora chamaremos de superusuário ou pelo seu login ‘root’. Os terminais do Unix são gerenciados por programas em execução que os controlam e disponibilizam suas funções. Para que um terminal fique operacional, o sistema executa no dispositivo, por exemplo, na console, um programa chamado ‘getty’ que originalmente significava ‘get teletype’ e era o controlador dos dispositivos terminais de teletipo. Com a evolução, o ‘getty’ passou a suportar os mais diversos tipos de terminais existentes, sejam eles físicos (ex: console) ou virtuais (telnet, etc, por exemplo). O getty é responsável pelo controle do I/O do terminal aberto. Um vez de posse do controle do terminal, o Unix executa um programa chamado ‘login’ dentro do terminal aberto. Este programa apresenta ao usuário uma mensagem padrão do sistema (configurável no arquivo ‘/etc/motd’ – message of the day) e o prompt de login pedindo o username e a senha do usuário. Uma vez digitados, o processo ‘login’ busca na base dos usuários cadastrados (por default, no arquivo ‘/etc/passwd’ e /etc/shadow’) a entrada do usuário, verifica se a senha confere e caso positivo carrega a shell indicada no arquivo ‘/etc/passwd’ configurada para o usuário, transferindo o controle a partir de agora para a shell. A shell carregada inicia seu trabalho obtendo mais informações sobre o perfil do usuário, lendo os arquivos ‘/etc/group’, que contém os grupos do sistema que o usuário pertence, o arquivo ‘/etc/profile’ com o perfil global para todos os usuários do sistema, e finalmente carrega os dados do perfil pessoal do usuário configurados dentro de seu home (o arquivo aqui varia de acordo com a shell escolhida. Ex: ‘~home/.profile’, ‘~home/.bashrc’, etc) 4.1.1.1 Nota sobre senhas Uma boa senha é importante para a segunça do servidor. O conteúdo de uma boa senha deve seguir os seguintes princípios: § Deve conter uma mistura de números, letras maiúsculas, letras minúsculas e símbolos § Devem ser fáceis de digitar, se possível alternando cada caracter com uma mão (para evitar que um observador possa identificá-la facilmente) § Senhas padrão (do fabricante) devem ser imediatamente substituídas § Senhas devem ter no mínimo 8 caracteres ou caso a plataforma não suporte este tamanho, utilizar o máximo possível. § Deve conter caracteres de pelo menos 3 das 4 categorias abaixo: o Letras maiúsculas do alfabeto: A, B, C, ..., Z o Letras minúsculas do alfabeto: a, b, c, ..., Z o Números arábicos: 0, 1, 2, ..., 9 o Caracteres especiais não alfanuméricos: pontuação e outros § Não pode ter o nome do usuário ou parte de um nome qualquer ENTENDENDO O UNIX Marc io Ca lasa ns 20 § Não pode conter espaços em branco § Não deve conter mais de dois caracteres iguais consecutivos § Não deve conter palavras de dicionário ou nomes que tenham relação com as atividades da empresa, muito menos o nome da mesma! § Não deve conter o UID (User IDentification) do usuário § Não dever repetir 4 (quatro)caracteres da última senha § Não deve conter nome da esposa, parentes, filhos, amigos, etc. § Não deve conter o número da placa do carro, número de telefone, etc § Não deve conter nomes comuns que podem ser encontrados no dicionário (em qualquer língua) § Não deve conter uma série de letras ou números iguais § Não deve conter seqüências obvias do teclado § Não deve conter qualquer uma das opções acima de trás para frente Exemplos: § Escolher uma linha ou duas de uma frase, poema, música e utilizar as primeiras letras. § Juntar duas palavras simples com caracteres estranhos. § Inventar um acrônimo. § Substituir letras por números de grafia similar (ex: 1 por L ou I, A por 4, O por 0, etc). § Escolher uma palavra e transforma-la (ex: janela -> J4n3La). 4.1.2 Conceitos sobre o shell Como já explicamos anteriormente, o shell é um programa capaz de permitir que o usuário envie comandos para o sistema (por isso também é chamado por alguns de interpretador de comandos). Entre os usos que podemos fazer do shell estão: a interatividade com o sistema, a chamada às aplicações e a realização de programação para que o sistema execute tarefas. Como podemos ver, o shell é muito mais que um simples interpretador de comandos, alias, seu maior poder está justamente em ser dotado de uma poderosa e completa linguagem de programação chamada ‘shell script’, e tudo isso diretamente em seu terminal. A shell original do Unix era Bourne Shell (sh) ainda disponível em praticamente todos os sabores de Unix, entretanto, a Bourne Shell não evoluiu muito, por isso um grupo de pessoas de Berkeley desenvolveu uma shell alternativa que tivesse capacidades de histórico de funções, controle de sub-processos (jobs), além de recursos mais avançados de programação, surgindo o C Shell (csh). Por outro lado, o C Shell apresenta uma sintaxe de programação um tanto diferente e incompatível com a Bourne Shell (note que o C da C Shell significa que derivaram muitas coisas de sua sintaxe a partir da linguagem C, mas isso não significa que é a linguagem C dentro da shell!!!). Por este motivo, David Korn, do Bell Labs, desenvolveu uma nova shell a partir da Bourne Shell, chamada Korn Shell (ksh) que mantinha compatibilidade de sintaxe com a Bourne Shell e apresentava um conjunto de recursos superior a da C Shell, tornando-se rapidamente uma das shells mais utilizadas. Por outro lado, a Free Software Foundation, mantendo seus objetivos em produzir um sistema operacional clone do Unix (leia-se GNU/Linux), reescreveu o Bourne Shell a partir do zero, implementando as funcionalidades existentes na Korn Shell e outras mais, mantendo ainda compatibilidade com o padrão POSIX. Apesar de muito parecida com a Korn Shell, não se pode dizer que o Bash é um clone da Ksh. A partir de agora, vamos concentrar nosso estudos no shell Bash, mencionando um pouco sobre a Ksh. Veremos mais adiante onde a shell default do usuário é definida e como alterar esta configuração. Por enquanto vamos nos concentrar em verificar qual é a nossa shell atual e como executar o bash, caso esta não seja nossa shell padrão: Procedimento: Verificação da shell atual do usuário Terminal Sh-2.05b$ ps PID TTY TIME CMD 17390 pts/0 00:00:00 sh 17509 pts/0 00:00:00 ps ENTENDENDO O UNIX Marc io Ca lasa ns 21 Como podemos ver no exemplo acima, a shell que estamos usando é a Bourne Shell (sh). Para carregarmos a shell Bash. Basta chamarmos através do comando abaixo (a nova verficação está na sequência). Procedimento: Carga da shell Bash e verificação da shell atual do usuário Terminal Sh-2.05b$ /bin/bash [root@dagobah home]> ps PID TTY TIME CMD 17310 pts/0 00:00:00 bash 17511 pts/0 00:00:00 ps 4.1.3 Introdução ao bash O Bash (e Ksh) são shells avançadas que oferecem ao usuário funcionalidades avançadas como: § Redirecionamento da entrada e saída (I/O) § Suporte a metacaracteres § Variáveis de ambiente § Linguagem de programação shell script compatível com o Bourne Shell, extendida § Controle de jobs § Edição da linha de comando corrente § Histórico de comandos com recursos de busca reversa § Suporte a funções aritméticas em inteiros, § Suporte a arrays § Suporte a alias de comandos § outras Iniciando o aprendizado do uso do bash/ksh, apresentamos a seguir como utilizar algumas funcionalidades úteis. 4.1.3.1 Navegação no Histórico e Comandos de Edição O Unix possui dois conhecidos editores de texto que passaram a ser adotados como padrão das shells para navegação e edição de comandos. São eles o ‘vi’ e o ‘emacs’. Em ambas shells, o usuário poderá selecionar qual o editor de sua preferência para compatibilizar a interface dos comandos. A seleção do editor é feita através de uma ou às vezes duas variáveis de ambiente. Para escolher o editor desejado, basta atribuir o nome do mesmo à estas variáveis e exportá-las para o ambiente para que se tornem efetivas: Procedimento: Selecionar o editor desejado para a shell (emacs no exemplo abaixo) Terminal [root@dagobah home]$ EDITOR=emacs [root@dagobah home]$ VISUAL=emacs [root@dagobah home]$ export EDITOR VISUAL A seguir apresentamos uma tabela com os principais comandos de navegação e edição: Descrição vi emacs Movimenta para o comando anterior do histórico k CTRL-p Movimenta para o comando seguinte do histórico j CTRL-n Busca o comando anterior que contenha a string informada /string CTRL-r string Move o cursor um caracter para trás h CTRL-b ENTENDENDO O UNIX Marc io Ca lasa ns 22 Move o cursor um caracter para frente l CTRL-f Move o cursor uma palavra para trás b ESC-b Move o cursor uma palavra para frente w ESC-f Apaga o caracter anterior X DEL Apaga o caracter sobre o cursor x CTRL-d Apaga a palavra a frente do cursor dw ESC-d Apaga a palavra atrás do cursor db ESC-h 4.1.3.2 Arquivos Especiais Tanto a bash quanto a ksh, possuem alguns arquivos especiais onde estão os parâmetros de incialização das mesmas, lidas por elas quando invocadas. No caso da bash: § /etc/profile: Executado automaticamente no início do processo de login § ~/.bash_profile, ~/.bash_login ou ~/.profile: Executadas automaticamente no processo de login § ~/.bashrc: Lida e carregada no final do processo de login No caso da ksh: § /etc/profile: Executado automaticamente no início do processo de login § ~/. profile: Executadas automaticamente no processo de login § $ENV: Variável de ambiente setada pelos arquivos anteriores que especifica um arquivo a ser lido e carregado quando uma nova ksh é criada 4.2 Comandos no Unix Antes de iniciarmos a discussão sobre cada comando do Unix, vamos entender como é padronizado o funcionamento de um comando neste sistema operacional. Já vimos que todo comando é um programa, e quando está em execução é chamado de processo. Todo processo no Unix tem a seguinte estrutura: As entradas do processo podem ser de 3 tipos: Pela STDIN (Standard Input) que por default é o teclado do terminal, pelas variáveis de ambiente e pelos parâmetros passados pela linha de comando. Os parâmetros da linha de comando normalmente possuem uma sintaxe dos seguintes tipo: § programa –opção § programa –opção argumento § programa --opção-por-extenso ENTENDENDO O UNIX Marc io Ca lasa ns 23 § programa --opção-por-extenso argumento A saída do processo, por default, está direcionada para a STDOUT (Standard Output) que é o vídeo do terminal. Uma outra saída dos processos é a saída das mensagens de erros, chamada de STDERR (Standard Error) que normalmente
Compartilhar