Unix

O Kernel do Linux foi, originalmente, escrito por Linus Torvalds do Departamento de Ciência da Computação da Universidades de Helsinki, Finlândia, com a ajuda de vários programadores voluntários através da Internet.

Linus Torvalds iniciou cortando (hacking) o kernel como um projeto particular, inspirado em seu interesse no Minix, um pequeno sistema UNIX desenvolvido por Andy Tannenbaum. Ele se limitou a criar, em suas próprias palavras, "um Minix melhor que o Minix" ("a better Minix than Minix"). E depois de algum tempo de trabalho em seu projeto, sozinho, ele enviou a seguinte mensagem para comp.os.minix:

Unix é um sistema operativo (ou sistema operacional) portátil (ou portável), multitarefa e multiutilizador (ou multiusuário) originalmente criado por Ken Thompson, que trabalhava nos Laboratórios Bell (Bell Labs) da AT&T. A marca UNIX é uma propriedade do The Open Group, um consórcio formado por empresas de informática.

História

O sistema UNIX foi criado no Laboratório Bell em 1970 por Ken Thompson e Dennis Ritchie, entre outros, para ajudar no controle dos projetos internos do próprio laboratório. Era um sistema básico e voltado principalmente para programadores e cientistas.

Durante o ano de 1975 quando estava trabalhando como professor assistente na Universidade da Califórnia, em Berkeley, Ken Thompson continuou a desenvolver o sistema UNIX desenhado no Bell Lab. Este desenvolvimento foi tomado pelos outros professores e alunos, que desenvolveram uma série de melhorias no sistema originalmente desenhado. Estas melhorias originaram um sistema operacional com algumas diferenças em relação ao sistema UNIX do Bell Lab. e passou a ser conhecido como o "UNIX de Berkeley". Algumas empresas começaram a comercializar esta versão do sistema operacional, sendo a mais conhecida a versão chamada SUN-OS da SUN Microsystems.

Em 1979, a AT&T resolveu lançar comercialmente o UNIX. Esta versão ficou sendo conhecida como "Versão 7". Após algum tempo, em 1982, alguns problemas da versão 7 foram corrigidos e foi lançada a versão chamada de "System III" (Sistema Três).

A partir deste ponto, houve uma evolução paralela de dois "tipos" de UNIX. Uma comercializada pela AT&T e outra proveniente da Universidade da Califórnia.

Até 1983, o uso do UNIX estava principalmente voltado para aplicações científicas, sendo o sistema mais utilizado no meio acadêmico. Neste ano, a AT&T resolveu agregar uma série de características e facilidades, visando assim, o usuário comercial. Este procedimento sempre encontrou barreiras, pois o usuário comercial achava que o UNIX era por demais científico e nada user friendly, sendo só usado por programadores e cientistas. A versão comercial ficou sendo conhecida como "System V" (Sistema Cinco).

A partir de 1989 foram formados pelas maiores empresas na área de computação dois grandes consórcios, visando uma unificação e padronização de todos os sistemas UNIX existente no mercado. Esta padronização é necessária para que se tenha uma portabilidade de todas as aplicações desenvolvidas para UNIX, dando assim uma força maior de penetração do UNIX no mercado comercial.

Até hoje existem diferenças de implementação em alguns comandos, apesar de a maioria dos sistemas UNIX comercializados possuírem ambas as versões. Existem diretórios específicos onde os comandos diferentes são guardados, bastando ajustar o sistema para que ele use os comandos necessários.

 

1972 - Ken Thompson e Dennis M. Ritchie com um PDP-11

 

Características

Sistema operacional multitarefa

Multitarefa significa executar uma ou mais tarefas ou processos simultaneamente. Na verdade, em um sistema monoprocessado, os processos são executados seqüencialmente de forma tão rápida que parecem estar sendo executados simultaneamente. O Unix escalona sua execução e reserva-lhes recursos computacionais (intervalo de tempo de processamento, espaço em memória RAM, espaço no disco rígido, etc.).

O Unix é um sistema operacional de multitarefa preemptiva. Isso significa que, quando esgota-se um determinado intervalo de tempo (chamado quantum), o Unix suspende a execução do processo, salva o seu contexto (informações necessárias para a execução do processo), para que ele possa ser retomado posteriormente, e coloca em execução o próximo processo da fila de espera. O Unix também determina quando cada processo será executado, a duração de sua execução e a sua prioridade sobre os outros.

A multitarefa, além de fazer com que o conjunto de tarefas seja executado mais rapidamente, ainda permite que o usuário e o computador fiquem livres para realizarem outras tarefas com o tempo economizado.

Sistema operacional multiusuário

Uma característica importante do Unix é ser multiusuário. Bovet e Cesati [4] definem um sistema multiusuário como "aquele capaz de executar, concorrente e independentemente, várias aplicações pertencentes a dois ou mais usuários". O Unix possibilita que vários usuários usem um mesmo computador simultaneamente, geralmente por meio de terminais. Cada terminal é composto de um monitor, um teclado e, eventualmente, um mouse. Vários terminais podem ser conectados ao mesmo computador num sistema Unix. Há alguns anos eram usadas conexões seriais, mas atualmente é mais comum o uso de redes locais, principalmente para o uso de terminais gráficos (ou terminais X), usando o protocolo XDMCP.

O Unix gerencia os pedidos que os usuários fazem, evitando que um interfira com outros. Cada usuário possui direitos de propriedade e permissões sobre arquivos. Quaisquer arquivos modificados pelo usuário conservarão esses direitos. Programas executados por um usuário comum estarão limitados em termos de quais arquivos poderão acessar.

O sistema Unix possui dois tipos de usuários: o usuário root (também conhecido como superusuário), que possui a missão de administrar o sistema, podendo manipular todos os recursos do sistema operacional; e os usuários comuns, que possuem direitos limitados.

Para que o sistema opere adequadamente em modo multiusuário, existem alguns mecanismos: (i) um sistema de autenticação para identificação de cada usuário (o programa login, p.ex., autentica o usuário verificando uma base de dados, normalmente armazenada no arquivo /etc/passwd); (ii) sistema de arquivos com permissões e propriedades sobre arquivos (os direitos anteriormente citados); (iii) proteção de memória, impedindo que um processo de usuário acesse dado ou interfira com outro processo. Esse último mecanismo é implementado com a ajuda do hardware, que consiste na divisão do ambiente de processamento e memória em modo supervisor (ou modo kernel) e modo usuário.

Arquivos de dispositivo

Uma característica singular no Unix (e seus derivados) é a utilização intensiva do conceito de arquivo. Quase todos os dispositivos são tratados como arquivos e, como tais, seu acesso é obtido mediante a utilização das chamadas de sistema open, read, write e close.

Os dispositivos de entrada e saída são classificados como sendo de bloco (disco, p.ex.) ou de caractere (impressora, modem, etc.) e são associados a arquivos mantidos no diretório /dev (v. detalhamento mais adiante).

Estrutura

Um sistema Unix consiste, basicamente, de duas partes:

    kernel - o núcleo do sistema operacional, a parte que relaciona-se diretamente com o hardware, e que executa num espaço de memória privilegiado. Agenda processos gerencia a memória, controla o acesso a arquivos e a dispositivos de hardware (estes, por meio dos controladores de disposito - drivers - e interrupções). O acesso ao kernel é feito por chamadas de sistema, que são funções fornecidas pelo kernel; essas funções são disponibilizadas para as aplicações por bibliotecas de sistema C (libc).

    programas de sistema - são aplicações, que executam em espaços de memória não privilegiados, e que fazem a interface entre o usuário e o kernel. Consistem, principalmente, de:

    Conjunto de bibliotecas C (libc)
    Shell - um ambiente que permite que o usuário digite comandos.

    Programas utilitários diversos - são programas usados para manipular arquivos, controlar processos, etc.

    Ambiente gráfico (GUI) graphics user interface - eventualmente utiliza-se também um ambiente gráfico para facilitar a interação do usuário com o sistema.

Em um sistema Unix, o espaço de memória utilizado pelo kernel é denominado espaço do kernel ou supervisor (kernel space); a área de memória para os outros programas é denominada espaço do usuário (user space). Essa separação é um mecanismo de proteção que impede que programas comuns interfiram com o sistema operacional.

Processos

Um processo, na visão mais simples, é uma instância de um programa em execução. Um programa, para ser executado, deve ser carregado em memória; a área de memória utilizada é dividida em três partes: código (text), dados inicializados (data) e pilha (stack).

Por ser um sistema multitarefa, o Unix utiliza uma estrutura chamada tabela de processos, que contém informações sobre cada processo, tais como: identificação do processo (PID), dono, área de memória utilizada, estado (status). Apenas um processo pode ocupar o processador em cada instante - o processo encontra-se no estado "executando" (running). Os outros processos podem estar "prontos" (ready), aguardando na fila de processos, ou então estão "dormindo" (asleep), esperando alguma condição que permita sua execução.

Um processo em execução pode ser retirado do processador por duas razões: (i) necessita acessar algum recurso, fazendo uma chamada de sistema - neste caso, após sua retirada do processador, seu estado será alterado para "dormindo", até que o recurso seja liberado pelo kernel; (ii) o kernel pode interromper o processo (preempção) - neste caso, o processo irá para a fila de processos (estado "pronto"), aguardando nova oportunidade para executar - ou porque a fatia de tempo esgotou-se, ou porque o kernel necessita realizar alguma tarefa.

Existem quatro chamadas de sistema principais associadas a processos: fork, exec, exit e wait. fork é usada para criar um novo processo, que irá executar o mesmo código (programa) do programa chamador (processo-pai); exec irá determinar o código a ser executado pelo processo chamado (processo-filho); exit termina o processo; wait faz a sincronização entre a finalização do processo-filho e o processo-pai.

Sistema de arquivos

Sistema de arquivos é uma estrutura lógica que possibilita o armazenamento e recuperação de arquivos. No Unix, arquivos são contidos em diretórios (ou pastas), os quais são conectados em uma árvore que começa no diretório raiz (designado por /). Mesmo os arquivos que se encontram em dispositivos de armazenamento diferentes (discos rígidos, disquetes, CDs, DVDs, sistemas de arquivos em rede) precisam ser conectados à árvore para que seu conteúdo possa ser acessado. Cada dispositivo de armazenamento possui a sua própria árvore de diretórios.

O processo de conectar a árvore de diretórios de um dispositivo de armazenamento à árvore de diretórios raiz é chamado de "montar dispositivo de armazenamento" (montagem) e é realizada por meio do comando mount. A montagem associa o dispositivo a um subdiretório.

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 kernel.

    /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 kernel. Este diretório não existe, ele é colocado lá pelo kernel 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.

Particularidades

Um sistema Unix é orientado a arquivos, quase tudo nele é arquivo. Seus comandos são na verdade arquivos executáveis, que são encontrados em lugares previsíveis em sua árvore de diretórios, e até mesmo a comunicação entre entidades e processos é feita por estruturas parecidas com arquivos. O acesso a arquivos é organizado através de propriedades e proteções. Toda a segurança do sistema depende, em grande parte, da combinação entre as propriedades e proteções definidas em seus arquivos e suas contas de usuários.

Aplicações

O Unix permite a execução de pacotes de softwares aplicativos para apoio às diversas atividades empresariais. Dentre estes pacotes destacam-se:

  • geradores gráficos
  • planilhas eletrônicas
  • processadores de textos
  • geradores de aplicações
  • linguagens de 4° geração
  • banco de dados


O Unix possui recursos de apoio à comunicação de dados, que proporcionam sua integração com outros sistemas Unix, e até com outros sistemas operacionais distintos. A integração com sistemas heterogêneos permite as seguintes facilidades:

  • compartilhamento de recursos e informações
  • transferência de informações
  • comunicação entre usuários remotos
  • submissão de programas para serem executados em computadores remotos
  • utilização dos terminais de uma máquina Unix como terminais de outras máquinas remotas, mesmo com sistemas operacionais distintos.

Para última, o Unix oferece um ambiente integrado e amigável, voltado para a gestão automatizada de escritório, com serviços que atenderão às seguintes áreas:

  • arquivamento eletrônico de informações
  • processador de documentos
  • agenda e calendário
  • calculadora
  • correio eletrônico

Ambiente gráfico do Unix

X Window System

Além do shell, o Unix suporta interface gráfica para o usuário. Nas primeiras versões do Unix as interfaces do usuário eram baseadas apenas em caracteres (modo texto) e o sistema compunha-se apenas do kernel, de bibliotecas de sistema, do shell e de alguns outros aplicativos. As versões mais recentes do Unix, além de manterem o shell e seus comandos, incluem o X Window System que, graças ao gerenciador de exibição e ao gerenciador de janelas, possui uma interface atraente e intuitiva que aumenta em muito a produtividade do usuário.

Desenvolvido no MIT (Massachussets Institute of Technology), o X Window System (também pode ser chamado de Xwindow) tornou-se o sistema gráfico do Unix. O Xwindow funciona como gerenciador de exibição e por si só, não faz muita coisa. Para termos um ambiente gráfico produtivo e completo, precisamos também de um gerenciador de janelas.

O gerenciador de janelas proporciona ao ambiente gráfico a aparência e as funcionalidades esperadas incluindo as bordas das janelas, botões, truques de mouse, menus etc. Como no sistema Unix o gerenciador de exibição (X Window System) é separado do gerenciador de janelas, dizemos que seu ambiente gráfico é do tipo cliente-servidor. O Xwindow funciona como servidor e interage diretamente com o mouse, o teclado e o vídeo. O gerenciador de janelas funciona como cliente e se aproveita dos recursos disponibilizados pelo Xwindow.

O fato de o Unix possuir o gerenciador de exibição (Xwindow) separado do gerenciador de janelas tornou possível o surgimento de dezenas de gerenciadores de janelas diferentes. Os gerenciadores de janelas mais comuns no mundo Unix são o Motif, Open Look, e o CDE. Também existem outros gerenciadores de janelas que são bastante utilizados no Unix, principalmente nos sistemas Unix-Like (versões gratuitas e clones do Unix). São eles: KDE, Gnome, FVWM, BlackBox, Enlightenment, WindowMaker etc.

Comandos

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 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
ú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 -> cria um novo arquivo(txt) com o resultado do comando(cmd)
cmd -> adiciona o resultado do comando (cmd) ao fim do arquivo (txt)
touch -> 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 group add 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
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 -> 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
nmap -> lista as portas de sistemas remotos/locais atras de portas abertas.
Pode checar sistema operacional em execução no host remoto.
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

[Topo]

 


Associação SoftwareLivre

A Associação SoftwareLivre.org (ASL) é uma associação civil sem fins-lucrativos, com sede em Porto Alegre/RS que reúne empresários, profissionais liberais, estudantes e servidores públicos, estabelecendo relações com os mais diversos setores da sociedade como o poder público, universidades, empresas, grupos de usuários, hackers e ONGs. A ASL tem por principal objetivo tornar o software livre amplamente incluído na sociedade, propiciando espaço de discussão, apoio, fomento e organização de iniciativas nas mais diversas áreas relacionadas. - Site oficial da associação