Sistemas Operacionais (técnico)

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

CÓDIGO DA UNIDADE CURRICULAR -
CARGA HORÁRIA: 2 horas/semana = 40 horas.
PRÉ REQUISITOS: , , ,
UNIDADES CURRICULARES CLIENTES: Redes de Computadores , , ,

Competências

Habilidades

Bases Tecnológicas

Diários de Aula

Aula 9 - Ainda Permissões de acesso a arquivos e diretórios - Uso da umask e exercícios complementares

Objetivos

  • Uso da umask;
  • Exercícios adicionais.

Uso da umask

A umask é uma palavra binária que permite definir quais são as permissões que serão dadas na criação de um arquivo ou de um diretório. A regra geral para formação destas permissões é:

  • Para arquivo: 666 AND (NOT umask);
  • Para diretório: 777 AND (NOT umask);

Ou seja, suponha que vamos criar um arquivo. A umask pode ser verificada com o comando:

umask

Normalmente esta máscara é 022. Se você criar um arquivo ele terá as seguintes permissões:

666 AND (NOT 022) = 666 AND 755 = 644

Ou seja, direito de rw para usuário, r para grupo e outros.

Para diretórios seria:

777 AND (NOT 022) = 777 AND 755 = 755

Ou seja, direito de rwx para usuário, rx para grupo e outros.

Se você usar o comando:

umask -S

será possível visualizar estas permissõeses de forma simbólica.

Usando a umask

  1. Modifique a umask para que todos os arquivos criados para outros tenham direito de leitura e escrita (e execução para diretórios). Basta aplicar o comando umask e a máscara a ser aplicada;
  2. Crie um arquivo qualquer:
  3. touch teste.txt
  4. Crie um diretório qualquer qualquer:
  5. mkdir teste
  6. Confira os resultados:
  7. ls -l
  8. Volte a umask ao valor inicial

Exercícios adicionais

Usando uma máquina virtual, como na aula anterior, criar 4 usuários: joao, maria, jose e lara. Os usuários joao, maria e lara pertencem a um grupo projX, que também deve ser criado (se ainda não existir).

Algumas restrições de permissão

O usuário joao possui os seguintes diretórios: docs_outros, docs_pessoais e docs_projX. Ele colocou as seguintes restrições de acesso:

  1. Em docs_pessoais somente joao pode criar e ver arquivos e diretórios, todos os demais grupos e usuários não tem permissão alguma. Em docs_projX, somente joao e os integrantes do grupo projX podem criar arquivos e entrar no diretório;
  2. Em docs_outros qualquer um pode entrar e listar o diretório mas não pode criar ou renomear arquivos no mesmo;

Testando permissões

  1. Logue como joao e crie os arquivos alfa.txt e beta.txt no diretório docs_pessoais com direito de acesso a somente leitura para outros. Dê acesso a leitura e escrita para proprietário e grupo.
  2. Logue como maria e teste os direitos de acesso aos diretórios criados por joao.
  3. Logue como jose e tente entrar nos diretórios criados por joao. Qual deles permite este acesso?
  4. Faça lara criar um arquivo em docs_projX;


Aula 10 - Entradas e Saídas Padrão

Objetivos

  1. Conceituar e trabalhar entradas e saída padrão, saída de erros padrão e pipes;
  2. Trabalhar os comandos cut, find, wc, grep, head e tail.

Redirecionamento de entrada e saídas

Sempre existem 3 arquivos "abertos" por default para um determinado processo. São eles a entrada padrão (stdin, normalmente associada ao teclado), stdout (normalmente associada a tela) e a saída padrão de erros (stderr, normalmente associada a tela). Estes arquivos podem ser modificados resultando no que se chama de redirecionamento das entradas e saídas do processo.

Cada arquivo aberto, associado a um processo, possui um descritor identificado por um número que se constitui em um índice de uma tabela de arquivos abertos associados ao processo. Segue-se um resumo da forma de realizar redirecionamento.

Redireção de stdout (arquivo lista é sobrescrito):

ls > lista

Redireção de stdout fazendo um append ao arquivo de saída:

ls >> lista

Cria/sobreescreve um arquivo de tamanho zero, similar ao touch

> lixo

Resumo das redireções das saídas:

  • 1>filename # Redireciona stdout para o arquivo filename
  • 1>>filename # Redireciona e acrescenta a stdout para o arquivo filename
  • 2>filename # Redireciona stderr para o arquivo filename
  • 2>>filename # Redireciona e faz append da stderr para o arquivo filename
  • &>filename # Redireciona ambos stdout and stderr para o arquivo filename

Exercícios

  1. Listar o diretório corrente, de forma detalhada e em ordem crescente de modificação, redirecionando a saída para um arquivo ListaOrdenada:
  2. ls -l > ListaOrdenada
  3. Acrescentar ao final (append) do arquivo ListaOrdenada, a data atual:
  4. date >> ListaOrdenada
  5. Criar um arquivo chamado teste1, com a frase “Alo Mundo”, usando o comando echo e redirecionamento de saída:
  6. echo Alo Mundo > teste1
  7. Criar um arquivo vazio usando somente > arquivo:
  8. > ArquivoVazio

    Acho que esta é a forma mais rápida de criar um arquivo vazio!

  9. Aplicar um comando ls ao diretório /eetc (intecionalmente errado) redirecionando a saída para lixo1:
  10. ls /eetc > lixo1
  11. Conferir o conteúdo de lixo1:
  12. cat lixo1
  13. Repetir o comando ls ao diretório /eetc (intecionalmente errado) redirecionando a saída de erro para lixo2:
  14. ls /eetc 2> lixo2
  15. Conferir o conteúdo de lixo2:
  16. cat lixo2
  17. Ordenar o arquivo passwd:
  18. sort < /etc/passwd > PasswdOrdenado

Pipes

A filosofia do unix/linux é resolver pequenos problemas com comandos simples. É possível no entanto resolver problemas mais complexos encadeando saídas em entradas, usando pipes.

  1. Listar de forma controlada (rolando a tela) o diretório /etc:
  2. ls -l /etc | more
  3. Procurar arquivos com terminação .conf no diretório /etc, usando o comando find e redirecionar a saída de erro para /dev/null (equivalente a uma lixeira mas sem volta!):
  4. find /etc -name passwd 2> /dev/null
  5. Repetir o exercício anterior fazendo um pipe para o comando wc (com flag -l para contar o número de linhas) a fim de verificar o número de ocorrências dos arquivos procurados:
  6. find /etc -name passwd | wc -l
  7. Eliminar a saída de erros do comando anterior:
  8. find /etc -name passwd 2> /dev/null | wc -l
  9. Usar um pipe com cat e wc para determinar quantas linhas existe no arquivo /etc/passwd:
  10. cat /etc/passwd | wc -l
  11. Repetir o exercício anterior para verificar quantos caracteres contem o arquivo:
  12. cat /etc/passwd | wc
  13. Listar o campo 1 do arquivo passwd:
  14. cat /etc/passwd | cut -f 1 -d :
  15. Conferir com o comando man o uso do comando cut:
  16. man cut

Outros Exercícios

  1. O comando grep pode ser usado para verificar ocorrências de palavras em (padrões) em um arquivo. Por exemplo:
  2. grep aluno /etc/passwd
  3. Componha um comando usando cut, grep e wc para verificar quantos userid possuem a cadeia "un";
  4. Gere um arquivo contendo somente os campos userid e nome completo de usuários que constam do arquivo passwd;
  5. Pesquisar o comando head e gerar um arquivo chamado DezLinhas contendo as 10 primeiras linhas do arquivo /etc/passwd;
  6. Repetir o exercício anterior para as 5 primeiras linhas;
  7. Pesquisar o comando tail e gerar um arquivo chamado DezUltimas com com as 10 últimas linhas do arquivo /etc/passwd mas ordene estas linhas com o comando sort (use pipes).

Aula 11 - Gerenciamento de Processos

Objetivos

  1. Consolidar o conceito de processo;
  2. Usar o comando ps para verificar os processos do sistema;
  3. Encerrar, suspender e reativar processos suspensos.

Estados de Processos no Linux

Os estados possíveis de um processo no linux são:

  • R se executando (running) ou na fila de execução;
  • D dormindo na espera por algum evento;
  • S dormindo na espera por algum por algum evento ou sinal (interruptible sleep);
  • T (stopped) Parado (por um sinal ou sendo depurado);
  • Z processo Zombie (foi terminado mas ainda presente no sistema).

Uma forma de outros processos ou do próprio sistema operacional se comunicar com processos é transmitir sinais para o mesmo. Existem vários tipos de sinais. Um dos mais famosos é o SIGKILL que "mata" o processo. O sinal SIGSTOP para um processo e o sinal SIGCONT faz com que um processo parado continue a sua execução.

Para ver todos os processos do sistema pode-se fazer:

ps aux | more

Note a coluna PID. Ela indica o número identificador do processo. Em STAT pode-se observar o estado do processo. Existe uma relação de paternidade entre processos e é possível verificar uma árvore de processos com pstree. O comando top é uma espécide ps em tempo real.

Roteiro

  1. Logar no sistema, na interface gráfica, como aluno;
  2. Abrir um console de trabalho: Aplicações -> Acessórios -> Console
  3. Verificar o terminal que você está:
  4. tty

    O comando tty mostra o nome do terminal que será associado a entrada padrão dos processos que sobre ele se executarem.

  5. Executar o comando yes:
  6. yes Testando

    Este comando, quando executado, se torna um processo cuja função é imprimir constantemente na saída padrão a cadeia de caracteres passada como parâmetro

  7. Para encerrar o processo que está ocupando o terminal faça:
  8. CTRL-c ou (CTRL-c)

    Observe que o processo foi "morto". O CTRL-c envia um sinal SIGKILL para o processo.

  9. Coloque novamente o processo em execução, mas agora em background:
  10. yes Testando > /dev/null &
  11. Trazer o processo novamente para o terminal (colocar em foreground):
  12. fg
  13. Suspenda o processo com:
  14. CTRL-Z ou (CTRL-SHIFT-z)

    Suspender o processo é parar o processo mas mantendo-o no sistema com todos os recursos menos a cpu.

  15. Coloque em execução mais algumas instâncias do processo yes:
  16. yes Testando > /dev/null & yes Testando > /dev/null &
  17. Neste momento existem 3 processos yes, sendo que dois em execução e um suspenso. Conferir os processos que você lançou com:
  18. ps u

    Este comando lista todos os processos atrelados aos diversos terminais e que pertencem ao usuário. Note que o próprio bash aparece. Um para cada terminal.

  19. Abra duas abas de console e para cada uma delas verifique o terminal que se encontra:
  20. tty
  21. Execute em cada uma delas (menos na primeira) um processo yes:
  22. yes Testando
  23. Volte para o primeiro terminal e liste todos os processos que estão atrelados aos terminais, usando a forma longa:
  24. ps l
  25. Faça também com comando topp para verificar os processos em execução:
  26. top
  27. Vamos "matar" um processo yes do terminal 2:
  28. kill -KILL <numero_pid>

    Cada processo tem um identificador: PID. O PID deve ser fornecido no comando kill. Note que o comando kill envia sinais para um processo.

  29. Vamos usar o comando kill para suspender e continuar a execução do processo yes no terminal 3.
  30. kill -STOP <numero_pid>
  31. Ver os processos:
  32. ps -l

    Observe o código STAT. Os processos em execução estão com R (running), os parados com T (stopped). Os processos dormindo com S (sleeping)

  33. Coloque o processo em execução novamente:
  34. kill -CONT <numero_pid>

Alguns exercícios adicionais

  1. Execute o firefox a partir da interface gráfica. Descubra o PID do processo firefox e depois "mate-o";
  2. O processo init é o pai de todos os processos. Qual é o PID deste processo? Tente matar o processo init.
  3. Faça um ps aux e descubra quais são os três processos que mais consomem CPU.
  4. Pesquise o uso do comando killall e envie para o professor, via e-mail.

Aula 12 - Gerenciamento de Processos (revisão) e comandos úteis de empacotamento e compressão

Objetivos

  1. Comandos adicionais de gerenciamento de processos;
  2. Utilitários para empacotamento (tar) e compressão de arquivos (gzip e bzip2);

Roteiro - Parte 1

  1. Abrir um terminal e verificar o nome do mesmo:
  2. tty
  3. Executar o comando yes em background:
  4. yes Alo > /dev/null &
  5. Matar o processo pelo nome do executável:
  6. killall yes
  7. Ver processos se executando em tempo real:
  8. top
  9. Abrir outra aba e colocar o processo yes em execução
  10. yes
  11. Voltar a aba original e conferir a saída do top
  12. Sair do top com q

  13. Localizar um determinado processo em execução:
  14. ps aux | grep bash
  15. Ver a árvore hierárquica de processos:
  16. pstree -p

    note a relação de paternidade dos bashes

  17. Executando múltiplos comandos em uma linha:
  18. id;date id && date

Arquivamento e Compressão de Arquivos

Existem vários comandos para comprimir/descomprimir arquivos bem como para criar um arquivo único:

  • comando tar: usado para empacotar arquivos e diretórios dentro de um único arquivo chamado de tarball. É um comando interessante para realizar backups pois preserva a estrutura de diretórios bem como os atributois de arquivos.
  • comandos gzip e bzip2 para a compressão de arquivos;

Roteiro - Parte 2

  1. Criar um diretório
  2. mkdir teste
  3. Entrar para o diretório:
  4. cd teste
  5. Criar arquivos e diretórios dentro do diretório teste:
  6. touch alfa.txt mkdir beta touch beta/delta.txt
  7. Mudar o atributo do diretório beta:
  8. chmod 777 beta
  9. Conferir o atributo dos arquivos com
  10. ls -l
  11. Arquivar tudo em um só arquivo chamado arquivo.tar:
  12. tar -cf arquivo.tar alfa.txt beta

    O flag -c cria o arquivo (arquivo.tar) e o flag -f serve para fornece o nome do arquivo

  13. Remover os arquivos criados:
  14. rm alfa.txt rm -r beta
  15. Conferir a remoção:
  16. ls -l
  17. Restaurar arquivos:
  18. tar -xvf arquivo.tar

    O flag -x extrai arquivos e o flag -v verifica o andamento do procedimento

  19. Remover arquivo tar e conferir restauração:
  20. rm arquivo.tar ls -l
  21. Verifique os atributos dos arquivos restaurados usando ls -l. Eles foram preservados?
  22. Refazer o arquivamento dos arquivos e diretórios criados anteriormente mas agora acrescente o flag -p para preservar os atributos dos arquivos. Restaure os arquivos e confira se os atributos foram preservados.

Arquivar comprimindo

Na seção anterior, o comando tar empacotou arquivos em um arquivo único mas não compactou-os. Para comprimir um arquivo existem vários utilitários que usam algoritmos diferentes. Vamos ver o gzip e o bzip2.

  1. Copiar o arquivo passwd para o diretório corrente e compactá-lo com gzip:
  2. cp /etc/passwd ./ ls -lh #Isto serve para ver tamanho original do arquivo gzip passwd ls -lh

    O arquivo original é removido ficando apenas o comprimido! Note a terminação gz. Se usar o flag -c mantém o arquivo.

  3. Descomprimir o arquivo:
  4. gunzip passwd.gz
  5. Comprimir com bzip2:
  6. bzip2 passwd ls -lh #Isto serve para comparar o tamanho com o gerado pelo gzip. bunzip2 passwd.bz2 ls -lh
  7. Arquivar comprimindo:
  8. tar -cvjf arquivo.tar.bz2 alfa.txt passwd beta

    O flag -j comprime usando o comando bzip2 e o flag -z usa a compressão com gzip.

  9. Remover arquivos e conferir:
  10. rm alfa.txt rm -r beta ls -l
  11. Descomprimir arquivos:
  12. tar -xvjf arquivo.tar.gz
  13. Repetir a compressão usando o flag -z para comprimir com gzip;

Vendo espaço no sistema de arquivos

  1. Verificar o tamanho de arquivos:
  2. cd # vai para o diretório de entrada du -h # lista arquivos e seus tamanhos du -sh # tamanho total do diretório
  3. verificar espaços nos sistemas de arquivos:
  4. df -h

Trabalhos à apresentar

Cada apresentação tem 30 minutos e tem que ter uma pequena oficina.

O que é. Para que serve. Principais características. Equivalente do Windows. Tutorial de uso.

  1. Ferramentas de Escritório: OpenOffice Editor de Texto;
  2. Ferramentas de Escritório: OpenOffice Apresentação;
  3. Ferramentas de Escritório: OpenOffice Planilha Eletrônica;
  4. Área de Trabalho do Ubuntu: customização e Compiz;
  5. Ferramentas de Desenho: gnomepaint, dia e editor gráfico do OpenOffice;
  6. Browsers: Firefox e alternativas ao Firefox;
  7. Instalando aplicativos no Ubuntu: aptitude (apt-get) , Central de Programas do Ubuntu, Synaptic.
  8. Solução para leitura de pdf: acroread, okular e evince;
  9. Soluções de Áudio/Vídeo (Multimídia) Players: Totem, Amarok e Gravador de Som;
  10. Solução para execução de aplicações windows: wine;

Preparação para a avaliação

  1. Logar no sistema, na interface gráfica, como aluno;
  2. Abrir um console de trabalho: Aplicações ==> Acessórios ==> Console;
  3. Confira com pwd o diretório de trabalho;
  4. Crie um diretório e entre para o mesmo:
  5. mkdir aval2 cd aval2
  6. Coloque o seu nome através de um comando da forma:
  7. echo Joao da Silva
  8. Antes de cada exercício marque o número do mesmo. Por exemplo, para o exercício 1 faça:
  9. echo ex 1
  10. Não faça nada além do necessário para a execução do exercício.
  11. Aguarde a instrução para o início e ao finalizar NÃO desligue a máquina e deixe o terminal aberto para que o professor possa examinar.

Questões

  1. Com o comando echo e redirecionando a saída padrão CRIAR um arquivo chamado lista.txt com o seguinte conteúdo:
  2. maria:fase 1:tele:redes
  3. Ainda usando o comando echo ACRESCENTAR ao arquivo lista.txt o conteúdo:
  4. joao:fase 2:rac:ar condicionado
  5. Fazer um pipe com comandos cut, grep e wc no arquivo lista.txt para determinar o número de linhas do referido arquivo que contém alunos do curso de tele (campo 3 do arquivo);
  6. Executar o comando yes (sem parâmetros) em backgroud desviando a saída padrão para /dev/null;
  7. Trazer o processo novamente para o terminal (colocar em FOREGROUND);
  8. Abrir uma outra aba de terminal (não esqueça de colocar o echo ex) e enviar um sinal para PARAR o processo yes;
  9. Usando pipes, redirecionamento de saída e os comandos ps e grep gerar um arquivo contendo uma linha que mostra o processo yes e seu estado de PARADO (T);
  10. Enviar um sinal para CONTINUAR o processo anterior;
  11. Fazer um pipe com os comandos ps e wc para determinar o número total de processos que se executam no sistema;
  12. Matar o processo yes criado no outro terminal;

Finalizando

Deixe o terminal exatamente como está e a FOLHA da prova sobre a mesa. OBRIGADO!

Semestre 2013/2

Aula 01 (20/08/13): Apresentação da Disciplina.

Aula 02 (21/08/13): História da Computação e vídeos.

Aula 03 (27/08/13): Conhecendo o Computador Introdução ao Hardware

Aula 04 (28/08/13): Software Livre ; Material Auxiliar:(Apostila SL Shalata) (Cartilha SL); Atividade: (01)

Aula 05 (03/09/13): Exercícios 01, 02

Aula 07 (10/09/13): Correção dos exercícios. Introdução ao LINUX (Sistemas Operacionais, Carta Linus)

Aula 08 (11/09/13): Interface Gráfica do Ubuntu

Aula 09 (17/09/13): Criação de Máquina Virtual e Instalação do Ubuntu (Roteiro 01).

Aula 10 (18/09/13): Introdução Linux modo texto (Conceito de: Kernel e Shell, estrutura de diretórios, usuário e superusuário, diretório raiz, caminho absoluto e relativo; e comandos básicos: cd, .., ~), (Estrutura Diretórios Linux), notas de aula passadas no quadro. (Exercício Complementar),(Gabarito Exercício Complementar)

Aula 12 (25/09/13): Continuação Linux modo texto (Comandos básicos: ls, pwd, mkdir, touch, cp, cp -r, mv, man, --help, history, history -c). Notas de aula passadas no quadro. (Roteiro 02)

Aula 13 (01/10/13): Término do roteiro 02 e comandos: cat, more, rm, rm -r e rmdir.

Aula 14 (02/10/13): Exercícios (01, 02).

Aula 15 (08/10/13): Editor VI (Slides Editor VI), (Roteiro 03).

Aula 16 (09/10/13): Término do roteiro 03 e exercícios pendentes.

Aula 17 (15/10/13): Continuação Linux modo texto (cut, find, >, >>, *, ?, |, [],date, cal, w, ln).

Aula 18 (16/10/13): Inicialização do roteiro prático 04 (Roteiro 04). Exercícios Complementares: 1, 2, 3, 4, 5.

Aula 19 (22/10/13): Desenvolvimento do roteiro 04 e exercícios.

Aula 20 (23/10/13): Desenvolvimento do roteiro 04 e exercícios.

Aula 21 (29/10/13): Desenvolvimento do roteiro 04, exercícios, e revisão.

Aula 22 (30/10/13): Avaliação 1. Conteúdo: Linux Modo texto (todos os comandos vistose editor VI). Permitido: Consulta apenas ao caderno. Não será permitida a consulta as folhas de exercício e roteiros.

Professores da Unidade Curricular


Grade do Curso Técnico de Telecomunicações com ênfase em Telefonia
Grade do Curso Técnico de Telecomunicações com ênfase em Redes de Computadores