Unix
(
ingles:
[?ju:n?ks]
) e um
sistema operativo
portavel
,
multitarefa
e
multiutilizador
originalmente criado por
Ken Thompson
,
Dennis Ritchie
, entre outros, que trabalhavam nos
Laboratorios Bell
da
AT&T
.
[
3
]
A marca UNIX e uma propriedade do
The Open Group
, uma companhia formada por empresas de informatica.
[
4
]
Em 1965 formou-se um grupo de programadores, incluindo
Ken Thompson
,
Dennis Ritchie
,
Douglas McIlroy
e
Peter Weiner
, num esforco conjunto da
AT&T
(Laboratorios Bell)
, da
General Electric (GE)
e do
MIT
(Massachussets Institute of Technology)
para o desenvolvimento de um sistema operacional chamado
Multics
.
[
5
]
O Multics deveria ser um sistema de tempo compartilhado para uma grande comunidade de usuarios. Entretanto, os recursos computacionais disponiveis a epoca, particularmente os do computador utilizado, um
GE 645
, revelaram-se insuficientes para as pretensoes do projeto. No periodo entre 1968 e 1969 os
Laboratorios Bell
retiraram-se lentamente do projeto. Duas razoes principais foram citadas para explicar a sua saida. Primeira: tres instituicoes com objetivos dispares dificilmente alcancariam uma solucao satisfatoria para cada uma delas (o MIT fazia pesquisa, AT&T monopolizava os servicos de telefonia americanos e a GE queria vender computadores). A segunda razao e que os participantes sofriam da sindrome do segundo projeto e, por isso, queriam incluir no Multics tudo que tinha sido excluido dos sistemas experimentais ate entao desenvolvidos.
[
carece de fontes
]
Ainda em 1969, Ken Thompson, usando um ocioso computador
PDP-7
, comecou a reescrever o Multics num conceito menos ambicioso, batizado de Unics, usando linguagem de montagem
assembly
. Mais tarde,
Brian Kernighan
rebatizou o novo sistema de
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 limitacoes da
linguagem B
, desenvolvida por Thompson.
[
6
]
Finalmente, ao longo dos anos 1970 e 80 foram sendo desenvolvidas as primeiras distribuicoes de grande dimensao como os sistemas
BSD
(na
Universidade de Berkeley
na
California
) e os
System III
e
System V
(na AT&T).
Em 1977, a AT&T comecou a fornecer o Unix para instituicoes 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, entao ja desnudada de seu monopolio nas comunicacoes e liberada para atuacao no mercado de
software
, licenca para transportar e comercializar o Unix para o computador Interdata 8/32 para ambiente de automacao de escritorio. O Unix saia da linha das maquinas PDP, da Digital Equipament Corporation (DEC), demonstrando a relativa facilidade de migracao (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 vendavel 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 maquinas. Devido a disponibilidade dos fontes do Unix e a sua simplicidade, muitos fabricantes alteraram o sistema, gerando variantes personalizadas a partir do Unix basico 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, apos acrescentar varios melhoramentos ao System III, a AT&T apresentava o novo Unix comercial, agora chamado de System V. Hoje, o Unix System V e o padrao internacional de fato no mercado Unix, constando das licitacoes de compra de equipamentos de grandes clientes na America, Europa e Asia.
Atualmente, Unix (ou *nix) e o nome dado a uma grande familia de
Sistemas Operativos
que partilham muitos dos conceitos dos Sistemas Unix originais (GNU/Linux, embora compartilhe conceitos de sistemas da familia Unix, nao faz parte desta familia por nao compartilhar de codigo derivado de algum sistema da familia Unix e nao possuir o mesmo objetivo e filosofia no qual o Unix se originou e, em grande parte, mantem ate hoje), sendo todos eles desenvolvidos em torno de padroes como o
POSIX
(Portable Operating System Interface) e outros. Alguns dos
Sistemas Operativos
derivados do Unix sao:
BSD
(
FreeBSD
,
OpenBSD
e
NetBSD
),
Solaris
(anteriormente conhecido por
SunOS
),
IRIX
,
AIX
,
HP-UX
,
Tru64
,
SCO
, e ate o
Mac OS X
(baseado em um
nucleo Mach
BSD
chamado
Darwin
). Existem mais de quarenta sistemas operacionais *nix, rodando desde celulares a supercomputadores, de relogios de pulso a sistemas de grande porte.
Multitarefa
significa executar uma ou mais tarefas ou processos simultaneamente. Na verdade, em um sistema monoprocessado, os processos sao executados sequencialmente de forma tao rapida que
parecem
estar sendo executados simultaneamente. O Unix escalona sua execucao e reserva-lhes recursos computacionais (intervalo de tempo de processamento, espaco em memoria RAM, espaco no disco rigido, etc.).
O Unix e um sistema operacional de multitarefa preemptiva. Isso significa que, quando esgota-se um determinado intervalo de tempo (chamado
quantum
), o Unix suspende a execucao do processo, salva o seu contexto (informacoes necessarias para a execucao do processo), para que ele possa ser retomado posteriormente, e coloca em execucao o proximo processo da fila de espera. O Unix tambem determina quando cada processo sera executado, a duracao de sua execucao e a sua prioridade sobre os outros.
A multitarefa, alem de fazer com que o conjunto de tarefas seja executado mais rapidamente, ainda permite que o usuario e o computador fiquem livres para realizarem outras tarefas com o tempo economizado.
Uma caracteristica importante do Unix e ser
multiusuario
(multiutilizador). Bovet e Cesati [4] definem um sistema multiusuario como "aquele capaz de executar, concorrente e independentemente, varias aplicacoes pertencentes a dois ou mais usuarios". O Unix possibilita que varios usuarios usem um mesmo computador simultaneamente, geralmente por meio de terminais. Cada terminal e composto de um monitor, um teclado e, eventualmente, um
mouse
. Varios terminais podem ser conectados ao mesmo computador num sistema Unix. Ha alguns anos eram usadas conexoes seriais, mas atualmente e mais comum o uso de redes locais, principalmente para o uso de terminais graficos (ou
terminais X
), usando o protocolo
XDMCP
.
O Unix gerencia os pedidos que os usuarios fazem, evitando que um interfira com outros. Cada usuario possui direitos de propriedade e permissoes sobre arquivos. Quaisquer arquivos modificados pelo usuario conservarao esses direitos. Programas executados por um usuario comum estarao limitados em termos de quais arquivos poderao acessar.
O sistema Unix possui dois tipos de usuarios: o usuario
root
(tambem conhecido como superusuario), que possui a missao de administrar o sistema, podendo manipular todos os recursos do sistema operacional; e os usuarios comuns, que possuem direitos limitados.
Para que o sistema opere adequadamente em modo multiusuario, existem alguns mecanismos: (i) um sistema de autenticacao para identificacao de cada usuario (o programa
login
, p.ex., autentica o usuario verificando uma base de dados, normalmente armazenada no arquivo
/etc/passwd
); (ii) sistema de arquivos com permissoes e propriedades sobre arquivos (os direitos anteriormente citados); (iii) protecao de memoria, impedindo que um processo de usuario acesse dados ou interfira com outro processo. Esse ultimo mecanismo e implementado com a ajuda do hardware, que consiste na divisao do ambiente de processamento e memoria em modo supervisor (ou modo nucleo) e modo usuario.
Uma caracteristica singular no Unix (e seus derivados) e a utilizacao intensiva do conceito de arquivo. Quase todos os dispositivos sao tratados como arquivos e, como tais, seu acesso e obtido mediante a utilizacao das chamadas de sistema
open
,
read
,
write
e
close
.
Os dispositivos de entrada e saida sao classificados como sendo de bloco (disco, p.ex.) ou de caractere (impressora,
modem
, etc.) e sao associados a arquivos mantidos no diretorio
/dev
(v. detalhamento mais adiante).
Um sistema Unix consiste, basicamente, de duas partes:
- Nucleo
- o nucleo do sistema operacional, a parte que relaciona-se diretamente com o hardware, e que executa num espaco de memoria privilegiado. Agenda processos, gerencia a memoria, controla o acesso a arquivos e a dispositivos de hardware (estes, por meio dos controladores de dispositivo -
drivers
- e interrupcoes). O acesso ao nucleo e feito por
chamadas de sistema
, que sao funcoes fornecidas pelo nucleo; essas funcoes sao disponibilizadas para as aplicacoes por bibliotecas de sistema C (libc).
- Programas de sistema
- sao aplicacoes, que executam em espacos de memoria nao privilegiados, e que fazem a interface entre o usuario e o nucleo. Consistem, principalmente, de:
- Conjunto de biblioteca C
(libc)
- Shell
- um ambiente que permite que o usuario digite comandos.
- Programas utilitarios diversos
- sao programas usados para manipular arquivos, controlar processos etc.
- Ambiente grafico
(GUI)
graphics user interface
- eventualmente utiliza-se tambem um ambiente grafico para facilitar a interacao do usuario com o sistema.
Em um sistema Unix, o espaco de memoria utilizado pelo nucleo e denominado espaco do nucleo ou supervisor (em
ingles
:
kernel space
); a area de memoria para os outros programas e denominada espaco do usuario (
user space
). Essa separacao e um mecanismo de protecao que impede que programas comuns interfiram com o sistema operacional.
Um processo, na visao mais simples, e uma instancia de um programa em execucao. Um programa, para ser executado, deve ser carregado em memoria; a area de memoria utilizada e dividida em tres partes: codigo (
text
), dados inicializados (
data
) e pilha (
stack
).
Por ser um sistema multitarefa, o Unix utiliza uma estrutura chamada tabela de processos, que contem informacoes sobre cada processo, tais como: identificacao do processo (PID), dono, area de memoria 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 entao estao "dormindo" (
asleep
), esperando alguma condicao que permita sua execucao.
Um processo em execucao pode ser retirado do processador por duas razoes: (i) necessita acessar algum recurso, fazendo uma chamada de sistema - neste caso, apos sua retirada do processador, seu estado sera alterado para "dormindo", ate que o recurso seja liberado pelo nucleo; (ii) o nucleo pode interromper o processo (preempcao) - neste caso, o processo ira para a fila de processos (estado "pronto"), aguardando nova oportunidade para executar - ou porque a fatia de tempo esgotou-se, ou porque o nucleo necessita realizar alguma tarefa.
Existem quatro chamadas de sistema principais associadas a processos:
fork
,
exec
,
exit
e
wait
.
fork
e usada para criar um novo processo, que ira executar o mesmo codigo (programa) do programa chamador (processo-pai);
exec
ira determinar o codigo a ser executado pelo processo chamado (processo-filho);
exit
termina o processo;
wait
faz a sincronizacao entre a finalizacao do processo-filho e o processo-pai.
Sistema de arquivos e uma estrutura logica que possibilita o armazenamento e recuperacao de arquivos. No Unix, arquivos sao contidos em diretorios (ou pastas), os quais sao conectados em uma arvore que comeca no diretorio raiz (designado por
/
). Mesmo os arquivos que se encontram em dispositivos de armazenamento diferentes (discos rigidos, disquetes, CDs, DVDs, sistemas de arquivos em rede) precisam ser conectados a arvore para que seu conteudo possa ser acessado. Cada dispositivo de armazenamento possui a sua propria arvore de diretorios.
O processo de conectar a arvore de diretorios de um dispositivo de armazenamento a arvore de diretorios raiz e chamado de "montar dispositivo de armazenamento" (montagem) e e realizada por meio do comando
mount
. A montagem associa o dispositivo a um subdiretorio.
A arvore de diretorios do Unix e dividida em varias ramificacoes menores e pode variar de uma versao para outra. Os diretorios mais comuns sao os seguintes:
/
? Diretorio raiz - este e o diretorio principal do sistema. Dentro dele estao todos os diretorios do sistema do seu computador.
/bin
? Contem arquivos, programas do sistema, que sao usados com frequencia pelos usuarios.
/boot
? Contem arquivos necessarios para a inicializacao do sistema.
/dev
? Contem arquivos usados para acessar dispositivos (perifericos) existentes no computador.
/etc
? Arquivos de configuracao de seu computador local.
/home
? Diretorios contendo os arquivos dos usuarios.
/lib
? Bibliotecas compartilhadas pelos programas do sistema e modulos do nucleo.
/mnt
? Diretorio de montagem de dispositivos.
/mnt/cdrom
? Subdiretorio onde sao montados os CDs. Apos a montagem, o conteudo do CD se encontrara dentro deste diretorio.
/mnt/floppy
? Subdiretorio onde sao montados os disquetes. Apos a montagem, o conteudo do disquete se encontrara dentro deste diretorio.
/proc
? Sistema de arquivos do nucleo. Este diretorio nao existe no disco rigido, e colocado la pelo nucleo e usado por diversos programas.
/root
? Diretorio do usuario root.
/sbin
? Diretorio de programas usados pelo superusuario (root) para administracao e controle do funcionamento do sistema.
/tmp
? Diretorio para armazenamento de arquivos temporarios criados por programas.
/usr
? Contem maior parte de seus programas. Normalmente acessivel somente como leitura.
/var
? Contem maior parte dos arquivos que sao gravados com frequencia pelos programas do sistema.
Um sistema Unix e orientado a
arquivos
, quase tudo nele e arquivo. Seus comandos sao na verdade arquivos
executaveis
, que sao encontrados em lugares previsiveis em sua
arvore
de diretorios, e ate mesmo a
comunicacao
entre entidades e processos e feita por estruturas parecidas com arquivos. O acesso a arquivos e organizado atraves de propriedades e protecoes. Toda a
seguranca
do sistema depende, em grande parte, da combinacao entre as propriedades e protecoes definidas em seus arquivos e suas contas de usuarios.
O Unix permite a execucao de pacotes de softwares aplicativos para apoio as diversas atividades empresariais. Dentre estes pacotes destacam-se:
- geradores graficos
- planilhas eletronicas
- processadores de textos
- geradores de aplicacoes
- linguagens de 4° geracao
- banco de dados
O Unix possui recursos de apoio a comunicacao de dados, que proporcionam sua integracao com outros sistemas Unix, e ate com outros sistemas operacionais distintos. A integracao com sistemas heterogeneos permite as seguintes facilidades:
- compartilhamento de recursos e informacoes
- transferencia de informacoes
- comunicacao entre usuarios remotos
- submissao de programas para serem executados em computadores remotos
- utilizacao dos terminais de uma maquina Unix como terminais de outras maquinas remotas, mesmo com sistemas operacionais distintos.
Para ultima, o Unix oferece um ambiente integrado e amigavel, voltado para a gestao automatizada de escritorio, com servicos que atenderao as seguintes areas:
- arquivamento eletronico de informacoes
- processador de documentos
- agenda e calendario
- calculadora
- correio eletronico
Alem do
shell
, o Unix suporta
interface grafica para o usuario
. Nas primeiras versoes do Unix as interfaces do usuario eram baseadas apenas em caracteres (modo texto) e o sistema compunha-se apenas do nucleo, de bibliotecas de sistema, do
shell
e de alguns outros aplicativos. As versoes mais recentes do Unix, alem de manterem o
shell
e seus comandos, incluem o
X Window System
que, gracas ao gerenciador de exibicao e ao
gerenciador de janelas
, possui uma interface atraente e intuitiva que aumenta em muito a produtividade do usuario.
Desenvolvido no
MIT
(Massachussets Institute of Technology), o X Window System (tambem pode ser chamado de Xwindow) tornou-se o sistema grafico do Unix. O Xwindow funciona como gerenciador de exibicao e por si so, nao faz muita coisa. Para termos um ambiente grafico produtivo e completo, precisamos tambem de um gerenciador de janelas.
O gerenciador de janelas proporciona ao ambiente grafico a aparencia e as funcionalidades esperadas incluindo as bordas das janelas, botoes, truques de
mouse
, menus etc. Como no sistema Unix o gerenciador de exibicao (X Window System) e separado do gerenciador de janelas, dizemos que seu ambiente grafico e do tipo
cliente-servidor
. O Xwindow funciona como servidor e interage diretamente com o
mouse
, o teclado e o video. O gerenciador de janelas funciona como cliente e se aproveita dos recursos disponibilizados pelo Xwindow.
O fato de o Unix possuir o gerenciador de exibicao (Xwindow) separado do gerenciador de janelas tornou possivel o surgimento de dezenas de gerenciadores de janelas diferentes. Os gerenciadores de janelas mais comuns no mundo Unix sao o Motif,
Open Look
, e o
CDE
. Tambem existem outros gerenciadores de janelas que sao bastante utilizados no Unix, principalmente nos sistemas Unix-Like (versoes gratuitas e
clones
do Unix). Sao eles:
KDE
,
Gnome
,
FVWM
,
BlackBox
,
Enlightenment
,
WindowMaker
etc.
Esta e uma lista de
programas de computador
para o
sistema operacional
Unix e os sistemas compativeis, como o
Linux
. Os comandos do Unix tornam-se acessiveis ao usuario a partir do momento em que ele realiza o login no sistema. Se o usuario utiliza tais comandos, entao ele se encontra no modo shell, tambem chamado de modo texto (ou Unix tradicional). Quando estiver utilizando o modo grafico, o usuario tambem podera se utilizar de tais comandos desde que abra uma janela de terminal (Xterm).
A linha de comando do sistema operacional Unix permite a realizacao de inumeras tarefas atraves de seus comandos, de manipulacao de arquivos a verificacao do trafego em rede. Para exibir uma descricao detalhada de cada comando abra uma
console
ou xterm e digite
man
comando
, onde
comando
e o comando em questao.
mkdir
- Cria um diretorio vazio exemplo: mkdir docs.
rmdir
- Exclui um diretorio (se estiver vazio).
rm
-rf
- Exclui um diretorio e todo o seu conteudo.
cd
- Entra num diretorio (exemplo: cd docs) ou retorna para
HOME.
cd /
- Muda para o diretorio raiz.
cd ~
- vai direto para o diretorio home do usuario logado.
cd -
- volta ao ultimo diretorio acessado.
pwd
- Exibe o local do diretorio atual.
ls
- Lista o conteudo do diretorio.
ls -alh
- Mostra o conteudo detalhado do diretorio.
ls -a
- Exibe os arquivos "ocultos" do determinado diretorio.
ls -ltr
- Mostra os arquivos no formado longo(l) em ordem inversa(r) de data (t).
df
- Mostra a utilizacao dos sistemas de arquivos montados pelo usuario do computador.
du
-ms
- Mostra o tamanho do diretorio em Megabytes.
whereis
- Mostra onde se encontra determinado arquivo (binarios) exemplo: whereis samba.
cat
- Mostra o conteudo de um arquivo binario ou texto
tac
- Semelhante ao cat mas inverte a ordem
tail
- Mostra as ultimas linhas de um arquivo. Ex: tail -f <arquivo> Util 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 conteudo de um arquivo de texto com controle
vi
- Editor de ficheiros de texto
vim
- Versao melhorada do editor supracitado
rm
- Remocao de arquivos (tambem remove diretorios, mas com o parametro -r, que significa recursividade)
cp
- Copia diretorios 'cp -r' copia recursivamente
mv
- Move ou renomeia arquivos e diretorios
chmod
- Altera as permissoes de arquivos ou directorios
chown
- Altera o dono de arquivos ou directorios
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; tambem altera data e hora de modificacao para
agora
> arquivo.txt
- Mais rapido que o touch para criacao de arquivos
split
- Divide um arquivo
recode
- Recodifica um arquivo ex: recode iso-8859-15..utf8 file_to_change.txt
man
- Mostra o manual do comando.
adduser
- Adiciona usuarios. O
useradd
pode tambem ser usado.
addgroup
- Adiciona grupos. O groupadd pode tambem ser usado.
apropos
- Realiza pesquisa por palavra ou string
dmesg
- Exibe as mensagens da inicializacao(log)
du
- Exibe estado de ocupacao dos discos/particoes
find
- Comando de busca ex: find ~/ -cmin -3
userdel
- Remove usuarios
usermod
- Modifica informacoes de um determinado usuario.
groupmod
- Modifica informacoes de um determinado grupo.
chfn
- Altera informacao relativa a um utilizador (usuario).
who
- Informa quem esta logado no sistema. Em algumas versoes do
Linux
, o
comando w
pode ser usado, e retorna informacoes mais detalhadas, como o shell do usuario.
whoami
- Informa com qual usuario voce esta logado
passwd
- Modifica senha (password) de usuarios
umask
- Define padroes de criacao de arquivos e diretorios
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-usuario root (e exigida a senha)
su user
- Troca para o usuario especificado em 'user' (e exigida a senha)
chown
- Altera o proprietario de arquivos e pastas (dono)
ifconfig
- mostra as interfaces de redes ativas e as informacoes relacionadas a cada uma delas
route
- Mostra as informacoes referentes as rotas
mtr
- Mostra rota ate determinado IP
netstat
- Exibe as portas e protocolos abertos no sistema.
iptraf
- Analisador de trafego da rede com interface grafica baseada em dialogos
tcpdump
- Sniffer muito popular. Sniffer e uma ferramenta que "ouve" os pacotes que estao passando pela rede.
traceroute
Traca uma rota do host local ate o destino mostrando os roteadores intermediarios
nslookup
- Consultas a servicos
DNS
dig
- Consultas a servicos
DNS
Referencias
- LEAL, CALHAU (2003).
The design of the Unix operating system
. New Jersey: Venda da Bifana
- RUI, MARTINS (1999).
Sistemas operacionais modernos
. Rio de Janeiro: LTC
- Marques, Pero; Balalaiko, Paulo (2004).
The design and implementation of the FreeBSD operating system
. Boston: Addison-Wesley
- JOSE RODRIGUES, Daniel; CESATI, Marco (2005).
Understanding the Linux kernel
. [S.l.]: O'Reilly Media
Unix
|
---|
Sistemas operacionais baseados em
UNIX
|
---|
| |
|
---|
Arquivos
| |
---|
Processos e tarefas
| |
---|
Ambiente e usuarios
| |
---|
Processamento de texto
| |
---|
Shell
| |
---|
Redes e comunicacao
| |
---|
Busca
| |
---|
Documentacao
| |
---|
Miscelaneas
| |
---|
†
Comandos geralmente implementados no interpretador.
‡
Comando geralmente implementados, tanto como executaveis, como quanto no interpretador.
|
|
---|
Sistemas operacionais
| |
---|
Linguagens de programacao
| |
---|
Software
| |
---|
Outros
| |
---|
|