Sistemas Operacionais (técnico)
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
- 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;
- Crie um arquivo qualquer: touch teste.txt
- Crie um diretório qualquer qualquer: mkdir teste
- Confira os resultados: ls -l
- 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:
- 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;
- 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
- 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.
- Logue como maria e teste os direitos de acesso aos diretórios criados por joao.
- Logue como jose e tente entrar nos diretórios criados por joao. Qual deles permite este acesso?
- Faça lara criar um arquivo em docs_projX;
Aula 10 - Entradas e Saídas Padrão
Objetivos
- Conceituar e trabalhar entradas e saída padrão, saída de erros padrão e pipes;
- 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
- Listar o diretório corrente, de forma detalhada e em ordem crescente de modificação, redirecionando a saída para um arquivo ListaOrdenada: ls -l > ListaOrdenada
- Acrescentar ao final (append) do arquivo ListaOrdenada, a data atual: date >> ListaOrdenada
- Criar um arquivo chamado teste1, com a frase “Alo Mundo”, usando o comando echo e redirecionamento de saída: echo Alo Mundo > teste1
- Criar um arquivo vazio usando somente > arquivo: > ArquivoVazio
- Aplicar um comando ls ao diretório /eetc (intecionalmente errado) redirecionando a saída para lixo1: ls /eetc > lixo1
- Conferir o conteúdo de lixo1: cat lixo1
- Repetir o comando ls ao diretório /eetc (intecionalmente errado) redirecionando a saída de erro para lixo2: ls /eetc 2> lixo2
- Conferir o conteúdo de lixo2: cat lixo2
- Ordenar o arquivo passwd: sort < /etc/passwd > PasswdOrdenado
Acho que esta é a forma mais rápida de criar um arquivo vazio!
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.
- Listar de forma controlada (rolando a tela) o diretório /etc: ls -l /etc | more
- 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!): find /etc -name .conf 2> /dev/null
- 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: find /etc -name .conf | wc -l
- Eliminar a saída de erros do comando anterior: find /etc -name .conf 2> /dev/null | wc -l
- Usar um pipe com cat e wc para determinar quantas linhas existe no arquivo /etc/passwd: cat /etc/passwd | wc -l
- Repetir o exercício anterior para verificar quantos caracteres contem o arquivo: cat /etc/passwd | wc
- Listar o campo 1 do arquivo passwd: cat /etc/passwd | cut -f 1 -d :
- Conferir com o comando man o uso do comando cut: man cut
Outros Exercícios
- O comando grep pode ser usado para verificar ocorrências de palavras em (padrões) em um arquivo. Por exemplo: grep aluno /etc/passwd.
- Componha um comando usando cut, grep e wc para verificar quantos userid possuem a cadeia "un";
- Gere um arquivo contendo somente os campos userid e nome completo de usuários que constam do arquivo passwd;
- Pesquisar o comando head e gerar um arquivo chamado DezLinhas contendo as 10 primeiras linhas do arquivo /etc/passwd;
- Repetir o exercício anterior para as 5 primeiras linhas;
- 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
- Consolidar o conceito de processo;
- Usar o comando ps para verificar os processos do sistema;
- 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
- Logar no sistema, na interface gráfica, como aluno;
- Abrir um console de trabalho: Aplicações -> Acessórios -> Console
- Verificar o terminal que você está: tty
- Executar o comando yes: yes Testando
- Para encerrar o processo que está ocupando o terminal faça: CTRL-c ou (CTRL-c)
- Coloque novamente o processo em execução, mas agora em background:
yes Testando > /dev/null \&
\item Trazer o processo novamente para o terminal (colocar em
\textit{foreground}):
\textit{fg}
\item Suspenda o processo com:
CTRL-Z ou (CTRL-SHIFT-z)
\nota{Suspender o processo é parar o processo mas mantendo-o no sistema com
todos os recursos menos a cpu.}
\item Coloque em execução mais algumas instâncias do processo \textit{yes}:
\textit{yes Testando $>$ /dev/null $\&$}
\textit{yes Testando $>$ /dev/null $\&$}
\item Neste momento existem 3 processos \textit{yes}, sendo que dois em execução
e um suspenso. Conferir os processos que você lançou com:
\textit{ps u}
\nota{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}
\item Abra duas abas de console e para cada uma delas verifique o terminal que
se encontra:
\textit{tty}
\item Execute em cada uma delas (menos na primeira)um processo yes:
\textit{yes Testando}
\item Volte para o primeiro terminal e liste todos os processos que estão
atrelados aos terminais, usando a forma longa:
\textit{ps l}
- 2010-2 - Odilson Tadeu Valle
- 2010-2 - Eraldo Silveira e Silva
Referências Bibliográficas
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 - 2010-2 - Odilson Tadeu Valle
O comando tty mostra o nome do terminal que será associado a entrada padrão dos processos que sobre ele se executarem.
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}
Observe que o processo foi "morto". O CTRL-c envia um sinal SIGKILL para o processo.