Comandos Unix

 Unix é um sistema operacional portável, multitarefa e multiutilizador originalmente criado por Ken Thompson, Dennis Ritchie, Douglas McIlroy e Peter Weiner, que trabalhavam nos Laboratórios Bell (Bell Labs) da AT&T. A marca UNIX é uma propriedade do The Open Group, uma companhia formada por várias empresas de informática.

Para saber mais sobre o sistema Unix, basta entrar em sue site oficial em unix.org

O Kernel do Unix

O Kernel do Unix é um programa especial, uma parte privilegiada do sistema operacional, que roda diretamente sobre o hardware. A Organização Kernel Linux (Linux Kernel Organization) é uma Corporação de Benefício Público do Estado da Califórnia dos Estados Unidos da América, criada em 2002 para distribuir o Kernel do Linux e outros softwares de código aberto para o público, sem custos. É reconhecida pela IRS (Receita Federal Americana) como uma fundação privada operacional 501(c)3.

A Organização Kernel Linux é gerida pela Fundação Linux que oferece total apoio técnico, financeiro e pessoal para a execução e manutenção da infra-estrutura do kernel.org.

O Kernel do Unix (e de virtualmente qualquer outro sistema operacional) possui um papel de que convém ter noções, a fim de se poder compreender melhor o funcionamento do sistema, realizar diagnósticos e procedimentos administrativos como adição de componentes de hardware. Algum conhecimento do papel do kernel é importante também para se ter uma noção mais clara do uso de arquivos especiais e do diretório /proc.

O Kernel ordinariamente reside no filesystem como um outro arquivo qualquer. No Linux, ele é em geral o arquivo /vmlinuz ou /boot/vmlinuz, ou ainda /boot/vmlinuz-2.0.36. Ele é um programa, ainda que um pouco diferente dos programas de aplicação como o /bin/ls. O kernel é carregado e posto em execução no boot da máquina, e a sua execução somente se encerra com o shutdown.

De forma simplificada, o seu papel é num primeiro momento reconhecer o hardware e inicializar os respectivos drivers. Em seguida ele entra num estado administrativo onde funciona como intermediário entre as aplicações e o hardware.

É desta forma que a adição de hardware novo a uma máquina pode requerer a substituição ou ao menos a reconfiguração do kernel. Os kernels mais recentes do Linux oferecem vários mecanismos de configuração que os tornam flexíveis, a ponto de ser rara a necessidade de substituição do kernel. Os dois mecanismos fundamentais de se configurar a operação do kernel são a passagem de parâmetros no momento do boot (realizada pelo LILO ou outro meio) e a carga de módulos, feita manualmente ou por mecanismos automáticos como o kerneld.

O diálogo entre as aplicações e o kernel realiza-se fundamentalmente através dos system calls, que são serviços que o kernel oferece, como por exemplo read(2). Os device special files são a maneiras de se referir ao kernel e aos dispositivos físicos ou lógicos com que se pretende operar. O importante não é o nome, mas sim os números de dispositivo, ou mais precisamente o major e o minor device numbers. Device special files são criados através do comando mknod, ou através de interfaces mais amigáveis, como o comando MAKEDEV.

Os sistemas Unix-like mais recentes oferecem um outro mecanismo de comunicação com o kernel, que é o filesystem /proc. As entradas desse filesystem são pseudo-arquivos cujo conteúdo reflete o estado atual de inúmeras estruturas de dados internas do kernel. Assim, um programa de aplicação passa a poder comunicar-se com o kernel através dos mecanismos ordinários de leitura e escrita de arquivos. Em muitos casos a comunicação entre as aplicações e o kernel é intermediada por bibliotecas, principalmente a libc. Elas oferecem serviços de mais alto nível que os system calls do kernel, tornando mais simples o trabalho de programação.

Tipos de Kernel

Kernel Monolítico

Kernel Monolítico – Monolítico vem da palavra monólito, formado de uma só pedra, que forma um só bloco. O kernel monolítico é aquele que contém todos os módulos e subsistemas em um único executável binário. O kernel monolítico tem como característica, permitir que as funções essenciais sejam executadas através do kernel space (espaço do kernel).

Isto é possível através do uso de módulos. O que significa que um módulo, apesar de não estar no mesmo código do kernel, é executado no espaço de memória do kernel fazendo com que o kernel continue sendo único e centralizado. Geralmente, um kernel monolítico tem melhor desempenho do que outras arquiteturas de kernel, porém, a manutenção da sua programação é mais demorada, pois o kernel deve ser recompilado e substituído por completo, caso queira implementá-lo.

Exemplos: Linux, Unix, BSD, FreeBSD, FreeDOS, MS-DOS.

Microkernel

Microkernel – O microkernel (ou kernel modular) é um kernel que “conversa” com os subsistemas que estão no user space (espaço do usuário) através do uso de mensagens. Possui um núcleo cujas funcionalidades são executadas, em quase toda sua totalidade, fora do kernel space. Outras funcionalidades são oferecidas através de programas chamados “servidores”, que se localizam no user space. O microkernel, basicamente, provê os serviços essenciais, tais como como gerenciamento de memória, gerência de threads e comunicação entre os processos e tarefas. Serviços não essenciais residem no user space.

Os microkernels são modulares, cada subsistema do microkernel funciona como plugins e por isso, o microkernel é extremamente flexível. Um microkernel pode ter um executável binário menor do que um kernel monolítico, porque o microkernel permite a utilização de plugins que podem ser usados de acordo com as necessidades do projeto.

Exemplos: OpenSolaris, Hurd, QNX (Quick Unix), MINIX.

Kernel Híbrido

Kernel Híbrido – Tem características de microkernel e kernel monolítico. É um kernel que possui apenas as funções principais e serviços não essenciais, e comunica-se com os módulos que são chamados de “servidores”, como por exemplo, o serviço de impressão. Se um “servidor” der erro, o S.O. continua funcionando, pois são separados. Seu desempenho é relativamente menor, pois o kernel tem que comunicar-se com os serviços via mensagens, e isto exige um hardware mais robusto.

Exemplos: Windows NT, Windows XP, Windows Vista, Windows 7, Windows 8, Mac OS, L4.

Exokernel

Exokernel – O exokernel é bastante utilizado para virtualização de sistemas, pois cria uma camada de kernel expondo o hardware dando o controle aos outros sistemas que rodam na camada superior. O exokernel tem um conceito muito parecido com o microkernel, pois ao invés de ter subsistemas no user space (subsistemas executados como programas), tem sistemas operacionais funcionando na camada superior.

O exokernel é um software bastante difícil de projetar, pois deve se adaptar aos diferentes tipos de sistemas operacionais e deve permitir o acesso aos diferentes recursos de hardware de cada máquina.

História do Unix

Em 1965 formou-se um grupo de programadores, incluindo Ken Thompson, Dennis Ritchie, Douglas McIlroy e Peter Weiner, num esforço conjunto da AT&T (Laboratórios Bell), da General Electric (GE) e do MIT (Massachussets Institute of Technology) para o desenvolvimento de um sistema operacional chamado Multics.

O Multics deveria ser um sistema de tempo compartilhado para uma grande comunidade de usuários. Entretanto, os recursos computacionais disponíveis à época, particularmente os do computador utilizado, um GE 645, revelaram-se insuficientes para as pretensões do projeto. Em 1969, a Bell retirou-se do projeto. Duas razões principais foram citadas para explicar a sua saída.

A primeira razão foi que três instituições com objetivos diferentes dificilmente alcançariam uma solução satisfatória para cada uma delas (o MIT fazia pesquisa, AT&T monopolizava os serviços de telefonia americanos e a GE queria vender computadores).

A segunda razão é que os participantes sofriam da síndrome do segundo projeto e, por isso, queriam incluir no Multics tudo que tinha sido excluído dos sistemas experimentais até então desenvolvidos.

Em 1969, Ken Thompson, usando um ocioso computador PDP-7, começou a reescrever o Multics num conceito menos ambicioso, batizado de Unics, usando linguagem de montagem (assembly). Mais tarde, Brian Kernighan rebatizou o novo sistema com o nome Unix.

Um marco importante foi estabelecido em 1973, quando Dennis Ritchie e Ken Thompson reescreveram o Unix, usando a linguagem C, para um computador PDP-11. A linguagem C havia sido desenvolvida por Ritchie para substituir e superar as limitações da linguagem B, desenvolvida por Thompson. O seu uso é considerado uma das principais razões para a rápida difusão do Unix.

Ao longo dos anos 70 foram sendo desenvolvidas as primeiras distribuições de grande dimensão como os sistemas BSD (na Universidade de Berkeley na Califórnia) e os System III e System V (na AT&T).

Em 1977, a AT&T começou a fornecer o Unix para instituições comerciais. A abertura do mercado comercial para o Unix deve muito a Peter Weiner – cientista de Yale e fundador da Interactive System Corporation. Weiner conseguiu da AT&T, então já desnudada de seu monopólio nas comunicações e liberada para atuação no mercado de software, licença para transportar e comercializar o Unix para o computador Interdata 8/32 para ambiente de automação de escritório.

O Unix saía da linha das máquinas PDP, da Digital Equipament Corporation (DEC), demonstrando a relativa facilidade de migração (transporte) para outros computadores, e que, em parte, deveu-se ao uso da linguagem C. O sucesso da Interactive de Weiner com seu produto provou que o Unix era vendável e encorajou outros fabricantes a seguirem o mesmo curso. Iniciava-se a abertura do chamado mercado Unix.

Com a crescente oferta de microcomputadores, outras empresas transportaram o Unix para novas máquinas. Devido à disponibilidade das fontes do Unix e à sua simplicidade, muitos fabricantes alteraram o sistema, gerando variantes personalizadas a partir do Unix básico licenciado pela AT&T. De 1977 a 1981, a AT&T integrou muitas variantes no primeiro sistema Unix comercial chamado de System III. Em 1983, após acrescentar vários melhoramentos ao System III, a AT&T apresentava o novo Unix comercial, agora chamado de System V. Atualmente, o Unix System V é o padrão internacional de fato no mercado Unix, constando das licitações de compra de equipamentos de grandes clientes na América, Europa e Ásia.

O Unix System V, normalmente abreviado como SysV (e usualmente pronunciado – apesar de raramente escrito – como “System Five”), é uma das primeiras versões comerciais do sistema operacional Unix. Foi originalmente desenvolvido pela American Telephone & Telegraph (AT&T) e lançado pela primeira vez em 1983. Quatro versões maiores do System V foram lançadas, denominadas 1, 2, 3 e 4. O lançamento 4, ou SVR4, foi a versão comercial que obteve maior sucesso, sendo o resultados de um esforço, comercializado como Unificação de Sistema Unix, que solicitou a colaboração dos maiores vendedores de Unix. Ele foi a fonte de várias características comerciais do Unix.

Nos dias de hoje, o Unix (ou *nix) é o nome dado a uma grande família de Sistemas Operacionais que partilham muitos dos conceitos dos Sistemas Unix originais (GNU/Linux, embora compartilhe conceitos de sistemas da família Unix, não faz parte desta família por não compartilhar de código derivado de algum sistema da família Unix e não possuir o mesmo objetivo e filosofia no qual o Unix se originou e, em grande parte, mantém até hoje), sendo todos eles desenvolvidos em torno de padrões como o POSIX (Portable Operating System Interface) e outros. Alguns dos Sistemas Operativos derivados do Unix são: BSD (FreeBSD, OpenBSD e NetBSD), Solaris (anteriormente conhecido por SunOS), IRIX, AIX, HP-UX, Tru64, SCO, e até o Mac OS X (baseado em um núcleo Mach BSD chamado Darwin). Existem mais de quarenta sistemas operacionais *nix, rodando desde celulares a supercomputadores, de relógios de pulso a sistemas de grande porte.

Filosofia Unix

“Faça apenas uma coisa e faça bem.” – Filosofia Unix

A filosofia Unix é um conjunto de normas desse submundo cuja abordagens filosóficas para o desenvolvimento de software, servem para criar uma base na experiência de alguns dos principais desenvolvedores dos sistemas operacionais da família Unix.

“Escreva programas que façam apenas uma coisa mas que façam bem feito.
Escreva programas que trabalhem juntos.
Escreva programas que manipulem streams de texto, pois esta é uma interface universal.” – Doug McIlroy

Rob Pike ofereceu as seguintes “regras” em Notas para programação em C como máximas da programação de computadores, embora elas possam ser vistas como pontos da filosofia Unix:

Regra 1: Você não pode dizer qual trecho de um programa é lento. Os gargalos ocorrem em locais que surpreendem, portanto, não tente supor e determinar uma solução até que tenha determinado exatamente onde se encontra o gargalo.

Regra 2: Meça. Não otimize o programa até que você tenha medido o seu tempo de execução, e mesmo depois de medido o tempo, não otimize a menos que uma parte do código esteja gastando muito mais tempo em comparação com o restante do programa.

Regra 3: Algoritmos extravagantes são lentos quando {\displaystyle n} n é pequeno, e {\displaystyle n} n é normalmente pequeno. Algoritmos extravagantes têm grandes constantes. Até que você saiba que {\displaystyle n} n torna-se freqüentemente grande, não seja extravagante. (Mesmo se {\displaystyle n} n tornar-se grande, use a Regra 2 primeiro.)

Regra 4: Algoritmos extravagantes contém mais defeitos que algoritmos simples e são mais difíceis de implementar. Utilize algoritmos simples assim como estrutura de dados simples.

Regra 5: O dado domina. Se você escolher a estrutura de dados certa e organizar bem as coisas, os algoritmos surgirão naturalmente. O elemento central da programação é a estrutura de dados, não o algoritmo.

Regra 6: Não existe Regra 6.

As regras 1 e 2 de Pike, reforçam a famosa máxima de Tony Hoare: “A otimização prematura é a raiz de todo mal.” Ken Thompson reescreveu as regras 3 e 4 da seguinte forma: “Quando em dúvida, use força bruta.” As regras 3 e 4 são exemplos da filosofia de projeto KISS. A regra 5 foi colocada anteriormente por Fred Brooks no livro The Mythical Man-Month. A regra 5 é freqüentemente resumida como: “escreva um código burro que use uma estrutura de dados inteligente”, e é um exemplo da norma “Se a sua estrutura de dados é boa o bastante, o algoritmo para manipulá-la deverá ser trivial.”

Princípios Unix

  • O pequeno é belo.
  • Faça cada programa fazer uma coisa bem feita.
  • Faça um protótipo assim que possível.
  • Escolha “portabilidade” ao invés de eficiência.
  • Armazene dados em arquivos no formato texto.
  • Tire vantagem das funcionalidades do software.
  • Utilize scripts para incrementar a funcionalidade e portabilidade.
  • Evite construir interfaces do usuário que sejam engessadas.
  • Faça de cada programa um filtro.

Estrutura de diretórios

A árvore de diretórios do Unix é dividida em várias ramificações menores e pode variar de uma versão para outra. Os diretórios mais comuns são os seguintes:

  • / — Diretório raiz – este é o diretório principal do sistema. Dentro dele estão todos os diretórios do sistema.
  • /bin — Contém arquivos, programas do sistema, que são usados com freqüência pelos usuários.
  • /boot — Contém arquivos necessários para a inicialização do sistema.
  • /dev — Contém arquivos usados para acessar dispositivos (periféricos) existentes no computador.
  • /etc — Arquivos de configuração de seu computador local.
  • /home — Diretórios contendo os arquivos dos usuários.
  • /lib — Bibliotecas compartilhadas pelos programas do sistema e módulos do núcleo.
  • /mnt — Diretório de montagem de dispositivos.
  • /mnt/cdrom — Subdiretório onde são montados os CDs. Após a montagem, o conteúdo do CD se encontrará dentro deste diretório.
  • /mnt/floppy — Subdiretório onde são montados os disquetes. Após a montagem, o conteúdo do disquete se encontrará dentro deste diretório.
  • /proc — Sistema de arquivos do núcleo. Este diretório não existe, ele é colocado lá pelo núcleo e usado por diversos programas.
  • /root — Diretório do usuário root.
  • /sbin — Diretório de programas usados pelo superusuário (root) para administração e controle do funcionamento do sistema.
  • /tmp — Diretório para armazenamento de arquivos temporários criados por programas.
  • /usr — Contém maior parte de seus programas. Normalmente acessível somente como leitura.
  • /var — Contém maior parte dos arquivos que são gravados com freqüência pelos programas do sistema.

Esta é uma lista de programas de computador para o sistema operacional Unix e os sistemas compatíveis, como o Linux. Os comandos do Unix tornam-se acessíveis ao usuário a partir do momento em que ele realiza o login no sistema. Se o usuário utiliza tais comandos, então ele se encontra no modo shell, também chamado de modo texto (ou Unix tradicional). Quando estiver utilizando o modo gráfico, o usuário também poderá se utilizar de tais comandos desde que abra uma janela de terminal (Xterm).

A linha de comando do sistema operacional Unix permite a realização de inúmeras tarefas através de seus comandos, de manipulação de arquivos a verificação do tráfego em rede. Para exibir uma descrição detalhada de cada comando abra uma console ou xterm e digite man comando, onde comando é o comando em questão.

Comandos de manipulação de diretório

  • mkdir – Cria um diretório vazio exemplo: mkdir docs
  • rmdir – Exclui um diretorio (se estiver vazio)
  • rm -rf – Exclui um diretório e todo o seu conteúdo
  • cd – Entra num diretório (exemplo: cd docs) ou retorna para HOME
  • cd / – Muda para o diretório raiz
  • cd ~ – vai direto para o diretório home do usuário logado.
  • cd – – volta ao último diretório acessado
  • pwd – Exibe o local do diretório atual
  • ls – Lista o conteúdo do diretório
  • ls -alh – Mostra o conteúdo detalhado do diretório
  • ls -a – Exibe os arquivos “ocultos” do determinado diretório.
  • ls -ltr – Mostra os arquivos no formado longo(l) em ordem inversa(r) de data (t)
  • df – Mostra a utilização dos sistemas de arquivos montados
  • du -ms – Mostra o tamanho do diretório em Megabytes
  • whereis – Mostra onde se encontra determinado arquivo (binários) exemplo: whereis samba

Comandos para manipulação de arquivos

  • cat – Mostra o conteúdo de um arquivo binário ou texto
  • tac – Semelhante ao cat mas inverte a ordem
  • tail – Mostra as últimas linhas de um arquivo. Ex: tail -f <arquivo> Útil para visualizar arquivos de log continuamente.
  • head – Mostra as primeiras linhas de um arquivo. Ex: head -100 visualiza as 100 primeiras linhas do arquivo.
  • less – Mostra o conteúdo de um arquivo de texto com controle
  • vi – Editor de ficheiros de texto
  • vim – Versão melhorada do editor supracitado
  • rm – Remoção de arquivos (também remove diretórios, mas com o parâmetro -r, que significa recursividade)
  • cp – Copia diretórios ‘cp -r’ copia recursivamente
  • mv – Move ou renomeia arquivos e diretórios
  • chmod – Altera as permissões de arquivos ou directórios
  • chown – Altera o dono de arquivos ou directórios
  • cmd>txt – Cria um novo arquivo(txt) com o resultado do comando(cmd)
  • cmd>>txt – Adiciona o resultado do comando(cmd) ao fim do arquivo(txt)
  • touch foo.txt – Cria um arquivo foo.txt vazio; também altera data e hora de modificação para agora
  • > arquivo.txt – Mais rápido que o touch para criação de arquivos
  • split – Divide um arquivo
  • recode – Recodifica um arquivo ex: recode iso-8859-15..utf8 file_to_change.txt

Comandos para administração

  • man – Mostra o manual do comando.
  • adduser – Adiciona usuários. O useradd pode também ser usado.
  • addgroup – Adiciona grupos. O groupadd pode também ser usado.
  • apropos – Realiza pesquisa por palavra ou string
  • dmesg – Exibe as mensagens da inicialização(log)
  • du – Exibe estado de ocupação dos discos/partições
  • find – Comando de busca ex: find ~/ -cmin -3
  • userdel – Remove usuários
  • usermod – Modifica informações de um determinado usuário.
  • groupmod – Modifica informações de um determinado grupo.
  • chfn – Altera informação relativa a um utilizador (usuário).
  • who – Informa quem está logado no sistema. Em algumas versões do Linux, o comando w pode ser usado, e retorna informações mais detalhadas, como o shell do usuário.
  • whoami – Informa com qual usuário você está logado
  • passwd – Modifica senha (password) de usuários
  • umask – Define padrões de criação de arquivos e diretórios
  • ps – Mostra os processos correntes
  • ps aux (ou ps -ef) – Mostra todos os processos correntes no sistema
  • kill – Mata um processo
  • killall – Mata todos os processos com o nome informado
  • su – Troca para o super-usuário root (é exigida a senha)
  • su user – Troca para o usuário especificado em ‘user’ (é exigida a senha)
  • chown – Altera o proprietário de arquivos e pastas (dono)

Comandos para administração de rede

  • ifconfig – mostra as interfaces de redes ativas e as informações relacionadas a cada uma delas
  • route – Mostra as informações referentes as rotas
  • mtr – Mostra rota até determinado IP
  • netstat – Exibe as portas e protocolos abertos no sistema.
  • iptraf – Analisador de trafego da rede com interface gráfica baseada em diálogos
  • tcpdump – Sniffer muito popular. Sniffer é uma ferramenta que “ouve” os pacotes que estão passando pela rede.
  • traceroute Traça uma rota do host local até o destino mostrando os roteadores intermediários
  • nslookup – Consultas a serviços DNS
  • dig – Consultas a serviços DNS

Procedimentos de boot e o init

O boot do Unix consiste inicialmente na carga e execução do kernel. Em seguida, é disparado o processo init, que segue as instruções do arquivo /etc/inittab, que portanto é o ponto de partida para tudo o que se pretenda configurar a nível de disparo de processos ao longo do boot.

O inittab não é um script como o AUTOEXEC.BAT, mas uma lista de ações, algumas delas de valor permanente para todo o curso da operação do sistema. Cada linha válida representa um processo que o init deve disparar. O termo respawn significa que, além de disparar, o init deverá monitorar o processo e, se porventura ao longo da operação do sistema ele for encerrado, o init deverá redispará-lo.

Via de regra as linhas do inittab referem-se ou à chamada de scripts de configuração inicial do sistema, que são executados apenas uma vez, ou aos processos de controle de login no sistema, que são redisparados sempre que ocorre um logout. O inittab inclui ainda o conceito de runlevel, o que cria a flexibilidade de se poder inicializar a máquina em um de vários possíveis modos de operação. Na prática, costuma haver três modos principais, o single-user, utilizado para manutenção, um gráfico e um não gráfico.

Quanto aos scripts de configuração (normalmente são os arquivos e/ou diretórios /etc/rc.*, dependendo da plataforma a mecânica de disparo deles pode ser bastante complexa. Note que cada runlevel pode disparar ou deixar de disparar alguns scripts, a fim de estabelecer o modo de operação desejado. Em quase todas as versões mais recentes do Linux essa mecânica segue o padrão dos diretórios /etc/rc.d/rcN.d, onde N é cada um dos runlevels. O conteúdo desses diretórios são links para cada um dos scripts de ativação ou desativação de serviços básicos (interfaces de rede, servidor de email, etc), com números embutidos nos nomes dos links, a fim de definir a ordem em que devem ser processados.

Configuração do TCP/IP

Numa rede TCP/IP, a cada máquina está associado um número IP, que é um inteiro de 32 bits, normalmente escrito na forma de octetos, como 192.168.0.100. A cada máquina está associado um nome, como por exemplo lua ou cacto. A atribuição tanto do número quanto do nome é feita durante o processo de boot, a partir da especificação deles feita através da edição manual de arquivos de configuração e/ou do uso de aplicativos de gerenciamento do sistema específicos de cada plataforma.

Na verdade, o número IP não está associado à máquina, mas a uma determinada interface dela. Via de regra, a interface envolvida é a ethernet. Tanto para exibir quanto para setar manualmente o número IP de uma interface usa-se o comando ifconfig. Por exemplo, o comando:

$ ifconfig -a

irá listar todas as interfaces com informações de cada uma. A interface ethernet costuma chamar-se le0 (Solaris) ou eth0 (Linux). Além do ethernet, é comum usar-se portas seriais para criar interfaces TCP/IP, principalmente para criar links com linhas telefônicas. As placas ethernet costuma oferecer dois ou mais tipos de conectores. Ela pode ou não descobrir automaticamente qual está em uso. Em caso negativo, você deverá informá-la, o que habitualmente é feito através de um software de configuração que acompanha a placa.

O passo seguinte é a configuração das rotas. Através delas a máquina sabe por onde enviar datagramas a fim de que eles cheguem em seus destinos. Equivale de certa forma à sinalização do tráfego urbano, com placas indicativas da direção a tomar para atingir cada destino (Ponte do Limão à esquerda, ou Avenida Bandeirantes em frente, etc).

Cada rota envolve um destino, uma máscara, um gateway e uma interface. Pode-se exibir todas elas através do comando netstat:

$ netstat -r

Destination Gateway Genmask Iface
192.168.1.0 * 255.255.255.0 eth0
127.0.0.0 * 255.0.0.0 lo
default 192.168.1.1 0.0.0.0 eth0

Suponha que você deseja atingir a máquina 192.168.1.7. A aplicação da tabela de rotas indica, através de uma operação bit-a-bit entre 192.168.1.7 e a máscara 255.255.255.0, que deve ser usada a primeira rota. Como não há gateway, a comunicação será feita diretamente através do ethernet.

Se o destino agora for 200.136.35.65, as duas primeiras rotas não nos servirão (experimente aplicar o e como no caso anterior). Portanto será usada a rota default, e como ela especifica um gateway, a comunicação terá que ser feita através dele. Assim, toda vez que se pretender enviar alguma informação para o 200.136.35.65, esta será enviada antes para o gateway 192.168.1.1, na esperança de que este consiga roteá-la para o seu destino.

Serviços TCP/IP

As pessoas normalmente confundem os protocolos da Internet, entretanto muito antes de surgir o protocolo web, a Internet já usava um sem-número de serviços construídos a partir dos protocolos de transporte TCP e UDP.

Um circuito TCP entre duas máquinas equivale a um pipe duplo entre dois processos, cada um rodando em uma das máquinas. O telnet é um típico serviço que se utiliza desse recurso, a fim de criar sessões remotas. Pode-se exibir todas os circuitos TCP ativos através do comando netstat:

$ netstat -t

O FTP, por sua vez, cria dois circuitos, utilizando um para envio de comandos e outro de dados. Através do uso de alguns comandos simples, permite transferir arquivos de ou para uma máquina remota. Os principais comandos do FTP são:

asc,bin: modo de transferência texto/binário
hash: faz o display de um “#”a cada 1kb transferido
get,put: transfere de/para a máquina remota o arquivo especificado
mget,mput: idem, múltiplos arquivos
prompt: liga/desliga o modo interativo

Ligando e Desligando a Máquina

Para ligar uma máquina Unix é muito simples, não requer maiores detalhes do que o acionamento de um botão liga/desliga no console da máquina e uma eventual intervenção humana logo em seguida, solicitando o boot efetivo do sistema a partir de um menu de opções.

O boot costuma gerar algumas mensagens que aparecem no console da máquina. Normalmente elas referem-se aos diferentes estágios do reconhecimento e inicialização do hardware. É interessante conhecê-las, mas em geral, podemos ignorar todas elas até que surja o prompt ou a janela de login.

O desligamento é um processo mais delicado. O Unix utiliza parte da memória principal como cache de disco, a fim de acelerar as operações de leitura e gravação de arquivos. Antes de se desligar a máquina, é necessário assegurar que os discos estejam sincronizados com o cache, o que é feito pelo comando sync, que deve ser precedido do encerramento de todos os processos, a fim de que não ocorra uma dessincronização em seguida. Todos esses passos são tomados pelo comando shutdown:

$ shutdown -y -g 1 -i 5 (Solaris)
$ shutdown -h now (Linux)

Em sistemas baseados em PC, o shutdown por vezes é acionável através do ctrl-alt-del.

Postar um comentário

Postagem Anterior Próxima Postagem

SHOPPING