Introdução ao ambiente UNIX
IF66C – Sistemas Operacionais
Carlos N. Silla Jr., Ph.D. [email protected]
Avisos
Horário de permanência:
Segunda – 20:20 até 21:10 Quarta – 13:50 até 15:30
Local de atendimento:
Sessão de trabalho
O uso de UNIX se baseia na noção de sessão de trabalho. Cada
usuário é designado por um nome de login, ou simplesmente login, com uma senha secreta associada.
Uma sessão de trabalho típica consiste das seguintes etapas:
O usuário identifica-se, fornecendo seu nome de login e sua senha ao
sistema.
A sessão de trabalho inicia, com o lançamento do shell (modo texto) ou
do ambiente (modo gráfico).
Uso do sistema (lançamento de comandos e aplicações). Fim da sessão (operação de logout ou logoff).
O UNIX pode gerenciar diversas sessões simultâneas de usuários
distintos na mesma máquina. Cada um terá uma visão independente e transparente dos recursos disponíveis, sem conflitos ou interferências.
O UNIX pode gerenciar diversas sessões simultâneas de usuários
distintos na mesma máquina. Cada um terá uma visão independente e transparente dos recursos disponíveis, sem conflitos ou
Interfaces gráficas
No UNIX a interface gráfica é completamente separada
do núcleo do sistema operacional. Isso permite uma
grande versatilidade em relação aos ambientes gráficos
disponíveis.
A interface gráfica é construída em dois níveis:
O servidor gráfico X-Window, que oferece as funcionalidades
gráficas básicas, gerencia entidades básicas como regiões de tela e trata eventos relacionados à interface (como operações de mouse e teclado).
O ambiente de trabalho, composto por vários processos, que
Interfaces Gráficas
Algumas características importantes diferenciam a arquitetura
gráfica do UNIX daquela implantada em outros sistemas:
O ambiente gráfico é implementado fora do núcleo. Com isso
eventuais falhas na interface gráfica não comprometem a estabilidade do sistema.
A comunicação entre o servidor gráfico, o ambiente e as aplicações é
feita através de sockets TCP/IP, usando um protocolo especial chamado X-Protocol. Com isso é possível estabelecer conexões gráficas entre aplicações e servidores gráficos em máquinas separadas.
Os processos que implementam o ambiente de trabalham são
executados com o identificador do usuário (UID), com isso várias
sessões gráficas distintas podem ser suportadas na mesma máquina, em displays distintos.
Existem dezenas de possibilidades de ambientes gráficos distintos, à
Documentação On-line
O sistema UNIX implementa um sistema de documentação
on-line simples, mas bastante útil e eficiente, chamado páginas de manual (man pages). As páginas de manual estão estruturadas em sessões:
Sessão 1: Comandos do usuário.
Sessão 2: Chamadas ao sistema operacional (em linguagem C) Sessão 3: Bibliotecas e funções standard (idem)
Sessão 4: Descrição de dispositivos e formatos de arquivos de dados Sessão 5: Formato de arquivos de configuração
Sessão 6: Jogos Sessão 7: Diversos
Sessão 8: Comandos de administração do sistema
O acesso às páginas de manual é normalmente efetuado através do
Usuários e grupos
Cada usuário registrado possui um nome de login, uma senha
e um identificador numérico associado (UID).
Os usuários são organizados em grupos.
Um usuário sempre pertence a um grupo primário e pode
pertencer a outros grupos secundários.
Cada grupo é identificado por um nome e um identificador de
grupo (GID).
O comando id user permite visualizar as informações de
usuários e grupos.
O comando finger user oferece informações adicionais sobre
o usuário.
A informação de usuário e grupo é usada pelo sistema para
O usuário root e outros usuários especiais
O usuário com UID = 0 é chamado “root” e possui poderes
especiais no sistema:
Acesso a todos os arquivos e diretórios Reboot/shutdown do sistema
Lançamento e cancelamento de qualquer processo
Montagem de diretórios de rede e de dispositivos externos
Assim, torna-se óbvio que a senha de root é de grande
importância para a segurança do sistema.
Além do root, outros usuários são definidos para a
implantação de serviços específicos. Esse é o caso dos
usuários “bin”, “daemon”,“lp”,“mail”, “news”, “ftp” e
“nobody”, que não correspondem a seres humanos.
O shell básico
O shell é um programa que permite o uso do sistema
através de uma interface em linha de comandos.
Existem diversos estilos de shell, sendo os mais comuns
o
Bourne Shell
(sh) e o
C-Shell
(csh).
Apesar da interface em linha de comandos ser um
conceito considerado antiquado, o shell oferece
mecanismos para tornar a vida do usuário muito simples
e produtiva.
Além disso, é uma ferramenta de valor inestimável para
Características do sistema de arquivos UNIX
É estruturado na forma de uma árvore única, iniciando pelo
diretório ”/”, que é chamado de “raiz”.
Há suporte para arquivos, diretórios e links (atalhos).
Os arquivos podem ter qualquer nome, usando quaisquer
caracteres, com distinção entre maiúsculas e minúsculas. Os nomes são normalmente limitados a 255 caracteres.
O caractere separador de diretórios é o ”/” (barra).
Arquivos e diretórios cujos nomes começam com “.” (ponto) são
considerados “ocultos” e normalmente não aparecem nas listagens de diretórios.
As extensões são normalmente usadas apenas para facilitar a vida
do usuário, mas não são importantes para o sistema operacional, que não depende delas para identificar o conteúdo de um arquivo.
Os arquivos e diretórios possuem permissões de acesso
Principais diretórios
Os diretórios de um sistema de arquivos UNIX têm uma
estrutura pré-definida, com poucas variações. A seguir ilustramos os principais:
/home: raiz dos diretórios home dos usuários. /boot: arquivos de boot (núcleo do sistema, etc)
/var: arquivos variáveis, áreas de spool (impressão, e-mail, news), arquivos de log
/etc: arquivos de configuração dos serviços /usr: aplicações voltadas aos usuários
/tmp: arquivos temporários
/mnt: montagem de diretórios compartilhados temporários /bin: aplicações de base para o sistema
O diretório HOME
Cada usuário possui um diretório especial, chamado
“diretório home” (casa), onde são armazenados: arquivos e diretórios pessoais de trabalho
e-mails já lidos (folders pessoais) arquivos de configuração individuais configuração das aplicações usadas
O diretório home do usuário é o seu local de início de sessão
de trabalho (via shell ou gráfica). O usuário possui plenos poderes de acesso ao seu diretório home (e seus
sub-diretórios), e normalmente não pode criar arquivos fora dele.
O diretório home de cada usuário é normalmente inacessível
Comandos básicos
Os comandos a seguir implementam operações básicas
em arquivos:
ls
: listar o conteúdo do diretório corrente (ou de um
diretório dado).
rm
: remover arquivos.
mv
: movimentar arquivos.
cp
: copiar arquivos.
cat
: apresentar o conteúdo de arquivos.
more
: visualizar o conteúdo de arquivos (paginado).
Comandos básicos
Os comandos usados para navegação na árvore de diretórios
são similares aos usados em outros sistemas operacionais:
“pwd” : indica qual o diretório corrente do shell. “cd” : troca de diretório:
“cd “dir : muda para o diretório dir.
“cd ..” : muda para o diretório pai imediatamente superior.
“cd -“ : volta para o último diretório visitado.
“cd ~user” : vai para o diretório HOME do usuário indicado.
“cd” : volta ao diretório HOME.
Comandos avançados
Os comandos abaixo são muito úteis na manipulação de
arquivos:
“grep”
: permite procurar strings dentro de arquivos de
texto. Exemplos:
Procurar todas as linhas contendo 'tcsh' em /etc/passwd
grep tcsh /etc/passwd
Procurar todas as linhas que não contenham tcsh em
/etc/passwd
Comandos avançados
“find” : permite encontrar arquivos que satisfaçam certas características. Procurar todas as entradas “*txt” dentro do diretório /usr:
find /usr -name '*txt' –print
Procurar todas as entradas *ab* ou *cd* presentes em /opt:
find /opt -iname '*ab*' -or -iname '*cd*„
Procurar todas as entradas acessadas a mais de 3 dias em /etc:
find /etc -atime +3
Procurar todas as entradas modificadas a menos de 2 dias em /etc que tenham mais
de 5 Kbytes de tamanho:
find /etc -mtime -2 -and -size +5k
Procurar todos os diretórios dentro de /opt cujo grupo tenha acesso em escrita:
Comandos avançados
“touch”
: atualizar a data de um arquivo
“diff”
: comparar dois arquivos, mostrando as diferenças
entre eles.
Para maiores informações sobre as opções disponíveis
Compressão de arquivos
Tradicionalmente, a compressão de arquivos em UNIX é feita
em dois passos:
1. Aglutinação dos arquivos e diretórios em um único grande arquivo,
usando o comando tar.
2. Compressão do arquivo único, usando comandos
como compress, gzip ou bzip2.
O comando tar é bastante antigo, e significa Tape
ARchiving (tar também é “piche” em inglês, o que sugere o processo de aglutinação).
Ele era muito usado para copiar diretórios em fitas magnéticas. Com as opções adequadas, permite guardar diversos arquivos
Compressão de arquivos
Sua sintaxe básica é:
Para criar um arquivo ”.tar”:
“tar cvf arq.tar dir1 dir2 dir3 …”
Para abrir um arquivo ”.tar”:
“tar xvf arq.tar”
Compressão de arquivos
As principais opções do comando tar são:
“c” : criar um novo arquivo ”.tar” com o nome indicado “x” : extrair dados do arquivo ”.tar” indicado
“t” : listar o conteúdo do arquivo ”.tar”indicado
“v” : verbose, mostra detalhes na tela sobre o que está sendo
feito
“f” : indica que o próximo parâmetro é o nome do arquivo
”.tar” a ser usado. Caso não seja indicado, é usado o conteúdo da variável $TAPE, ou o arquivo /dev/rst0 (fita magnética).
“z” : para comprimir/expandir os arquivos tratados usando o
gzip (ver abaixo).
“Z” : para comprimir/expandir os arquivos tratados usando o
Compressão de arquivos
Após feita a aglutinação, pode-se
compactar
o arquivo
usando-se um dos comando abaixo:
“compress”
: compactador standard do UNIX, hoje em
dia pouco usado, mas presente em todas as plataformas.
Gera arquivos com extensão ”.Z”.
“gzip”
: GNU-Zip, um compactador extremamente
popular, é muito eficiente. Gera arquivos com extensão
”.gz”.
“bz2”
: De uso recente e ainda pouco difundido,
certamente será muito usado nos próximos anos, por ser
ainda mais eficiente que o gzip. Gera arquivos com
Compressão de arquivos
Um procedimento muito usado é o uso combinado dos
comandos tar e gzip, através das opções “z” e “Z” do comando tar.
Assim, para obter um arquivo comprimido “corrente.tar.gz”
com todo o conteúdo do diretório corrente, basta executar o seguinte comando:
tar czvf corrente.tar.gz .
(atenção ao ”.”, que indica o diretório corrente)
Os arquivos ”.tar.gz” também costumam ser nomeado como
”.tgz”, e definem o formato da maior parte dos arquivos UNIX encontrados na Internet.
Arquivos nesse formato também podem ser abertos pelas
Informações em arquivos
Vários comandos permitem obter maiores informações sobre
arquivos e sistemas de arquivos. Eis os principais:
“stat” : detalhes sobre um arquivo ou diretório (i-nodes).
stat /usr/bin/ls
“file” : identificar o conteúdo de um arquivo, analisando-o.
file /etc/* | more
“whereis” : indica onde estão os binários, fontes e páginas de
manual de um comando dado.
whereis ls
“which” : indica o caminho completo para o comando dado.
Informações em arquivos
“du”
: indica o espaço usado em disco pelos arquivos ou
diretórios dados.
du $HOME
“df”
: informações sobre os sistemas de arquivos
disponíveis na máquina e sua ocupação.
df
“tree”
: apresenta na tela uma estrutura de diretórios,
com ou sem os arquivos.
Permissões de acesso em arquivos
O UNIX possui um sistema de controle de acesso ao
sistema de arquivos seguindo o paradigma de Listas de
Controle de Acesso (ACL -
Access Control Lists
). A cada
arquivo ou diretório são associados:
Um
usuário
proprietário (
owner
). Normalmente é quem
criou o arquivo.
Um
grupo
proprietário. Normalmente é o grupo
primário de quem criou o arquivo, mas este pode
mudá-lo para outro grupo do qual ele também faça parte.
Permissões de acesso
definidas para o
usuário
,
Permissões de acesso em arquivos
As permissões definidas para os arquivos são:
Leitura, permitindo acesso ao conteúdo do arquivo. Escrita, permitindo modificar o conteúdo do arquivo.
Execução, permitindo executar o arquivo (caso seja um executável ou
script).
As permissões definidas para os diretórios são similares:
Leitura, permitindo acesso ao conteúdo do diretório (listar os arquivos
presentes).
Escrita, permitindo modificar o conteúdo do diretório (criar ou apagar
arquivos).
Execução, permitindo entrar no diretório, ou atravessá-lo.
Pode-se afirmar que um arquivo é protegido contra leituras ou
modificações por suas próprias permissões, e contra apagamentos ou renomeações pelas permissões do diretório onde ele se
Consultando permissões
As permissões de acesso a arquivos e diretórios podem
Permissões
As entradas de diretório em um sistema UNIX têm seu tipo
indicado pelo primeiro caractere da listagem de diretório longa. Os tipos de entradas mais freqüentes são:
- : arquivo normal d : diretório
l : link simbólico (atalho)
b : dispositivo (mapeado em /dev/) orientado a blocos (como os
discos rígidos)
c : dispositivo (mapeado em /dev/) orientado a caracteres (como
modems e portas seriais)
s : socket mapeado em arquivo (para comunicação entre processos) p : FIFO ou Named Pipe (outro meio de comunicação entre
Permissões
Os demais caracteres representam os direitos de acesso
do usuário (
user
), do grupo (
group
) e de terceiros (
others
),
em grupos de três caracteres:
r : permissão de leitura (
read
).
w : permissão de escrita (
write
).
x : permissão de execução (
eXecute
).
- : indica que o respectivo direito está negado.
Permissões - Exemplo
-rw-r--- 1 silla users 4956 mar 26 20:34 descricao.html
A linha de listagem acima indica que:
A entrada corresponde a um arquivo normal (o primeiro
caractere é -).
O proprietário do arquivo descricao.html é o usuário silla. O proprietário possui direito de leitura e escrita sobre o
arquivo, mas não de execução.
O arquivo também pertence ao grupo users.
O grupo possui apenas direito de leitura sobre o arquivo.
Outros usuários (terceiros) não possuem nenhum direito de
Exercícios (Entrega: 21/11/2012)
1. O comando ls permite obter listagens de diretórios sob
várias formas.
Consulte a página de manual do comando e execute-o de
forma a obter listagens da seguinte forma:
Listagem longa do diretório home, com detalhes. O que significa cada coluna da listagem ?
Listagem curta do diretório home, incluindo os arquivos escondidos.
Listagem longa de ”/var/spool/mail”, ordenada por tamanho dos arquivos
Listagem longa de ”/etc”, ordenada alfabeticamente
Listagem longa de ”/home”, ordenada por datas crescentes
Exercícios (Entrega: 21/11/2012)
2. Use o comando
find
para encontrar todos os links
simbólicos presentes em
/usr.
3. O arquivo ”/var/log/messages “contém todos os logins
recentes efetuados no sistema. Analise a estrutura do
arquivo (usando o comando
more
); a seguir, use o
comando
grep
para localizar os seus acessos.
4. Crie um arquivo .tar, com o conteúdo do seu diretório
$HOME. A seguir, compacte-o usando os