|
|




























Sistemas Operacionais |
Programa da disciplina: |
Carga Horária: 80 h/a Bases Tecnológicas: Linguagem de Comando.Noções de Sistemas de Multiprogramas e Multiusuários. Organização Interna e Externa de Sistemas de arquivos e Diretórios. Programas de Sistema: Bibliotecas e utilitários. Chamadas ao Sistema. Processos Concorrentes. Gerenciamento de Memória. Tolerância à falhas. Proteção e segurança. Sistemas operacionais multiprocessadores. Competências: Diagnosticar e mapear, com base científica, problemas e pontos e melhoria nas organizações no que condiz a segurança de redes de computadores; Identificar as características específicas de Sistemas Operacionais a fim de utilizar o produto em função das necessidades do ambiente organizacional. Conhecer a metodologia de gerenciamento dos processos, memória, arquivos e periféricos utilizada pelo Sistema Operacional e identificar como se dá a comunicação entre os processos. Conhecer arquitetura dos Sistemas Operacionais. Habilidades: Entender o que é e qual a função de um Sistema Operacional na gestão do ambiente computacional. Analisar funções, organização e atividades de Sistemas Operacionais. Analisar soluções de utilização de Sistemas Operacionais. Interpretar as metodologias de gerenciamento de memória, processos, arquivos e periféricos adotadas pelo Sistema Operacional. Conteúdo: Histórico dos sistemas operacionais Estrutura interna Componentes básicos (tanto para Unix/Linux como para Windows) Escalonador de Processos (comentar o Unix/Linux) Gerenciamento de memória Tipos de processamento Sistemas de arquivos (Linux e Windows) Tratamento de periféricos Sistemas distribuídos. Bibliografia Básica: FLYNN, Ida M. McHOES, Ann McIver. Introdução aos sistemas operacionais. São Paulo: Pioneira Thomson Learning, 2002. MACHADO, Francis B. MAIA, Luiz Paulo. Arquitetura de sistemas operacionais. 3ed. Rio de Janeiro: LTC, 2002. TANENBAUM, A.S. Sistemas Operacionais Modernos. 2 ed. Rio de Janeiro: Prentice-Hall do Brasil, 2003 Bibliografia Complementar: MONTEIRO, Emiliano S. Utilizando Linux em português. São Paulo : Érica, 1999. MONTEIRO, Emiliano S. Segurança em ambientes corporativos. Florianópolis : Visual Books, 2003. PETERSON, G.L.; SILBERCHATZ, A. Sistemas Operacionais conceitos. 5 ed. São Paulo : Prentice Hall, 2000. TANENBAUM, A.S. Sistemas Operacionais, Projeto e Implementação. Porto Alegre : Bookman, 2000. Avaliação do Semestre: 1º Bimestre: Uma avaliação valendo 2 pontos e a prova bimestral 8 pontos. A prova poderá conter questões de múltipla escolha, objetivas ou descritivas. Prova de 2a. chamada serão descritivas (canetão). 2º Bimestre: Uma avaliação (ou um trabalho interdisciplinar) valendo 2 pontos e a prova bimestral 8 pontos. A prova poderá conter questões de múltipla escolha, objetivas ou descritivas. Prova de 2a. chamada serão descritivas (canetão). Quem perder "testes" terá um nova oportunidade dentro de uma semana as 18:00, provas "bimestrais" de 2a. chamada são marcadas pela coordenação. |
O Linux foi desenvolvido para ser compatível com o padrão IEEE 1003.1990 (POSIX). Este padrão define as funções que aplicações escritas em C usam para acessar serviços do sistema operacional, para diversas tarefas como: abrir um arquivo ou alocar um arquivo em memória. Em 8 de março de 1996, o Computer Systems Laboratory do National Institute of Standards and Technology (NIST) validou o Linux versão 1.2.13, da distribuição Open Linux Ltd. como compatível com POSIX. O processo de construção do Kernel envolve os seguintes passos: 1. Configuração do Kernel 2. Compilação do Kernel 3. Compilação dos módulos 4. Instalação dos kernel e outros arquivos necessários Opção de Kernel "link in support" ou Monolítico Nesta opção todos os drivers necessários para fazer o sistema funcionar são compilados junto com o Kernel. O tamanho final do Kernal aumenta conforme os drivers aumentam. O kernel que possui todo o suporte necessário para funcionar é chamado de Monolítico. Os patches são distribuídos comprimidos na forma de pacotes .gz ou .bz2. O usuário deverá usar gunzip ou bzip2 para descomprimir os patches. Os pacthes devem ser copiados para a pasta /usr/src, descomprimir o pacote e usar o comando patch para aplicar as mudanças. Isto altera o código fonte do Kernel que esta localizado em /usr/src/linux. Para atualizar o Kernel, o usuário deve ir para o diretório /usr/src/linux e usar o comando make, na seguinte seqüência: make config; make dep; make clean; make zImage (ou make bzImage). Use também make modules e make modules_install. Para que o novo Kernel possa ser usado ele deve ser copiado para a pasta /boot e editar o arquivo do LILO (/etc/lilo.conf), depois deve rodar o /sbin/lilo para atualizar o LILO. Opção de Kernel "Modules" ou Modular: Os drivers necessários são criados na forma de módulos. Um módulo é um bloco de código que o kernel carrega depois de estar rodando. Um típico uso de módulos é adicionar suporte a um dispositivo sem ter que reconstruir o kernel para cada dispositivo. Módulos não necessitam ser drivers, eles também podem ser usados para adicionar novas funcionalidades ao kernel. Esta forma também é chamada de kernel "monolítico". O termo "kernel" refere-se ao núcleo do sistema operacional. O kernel do Linux é atualizado continuamente para que sejam implementadas melhorias e corrigidos erros. As atualizações são distribuídas na forma de pacotes (patches) específicos. Os usuários devem aplicar essas atualizações de tempos em tempos. Novas versões do Kernel podem ser baixadas de www.kernel.org |
O que são redirecionamentos no Linux? Os comandos do Linux realizam operações de leitura e escrita no que é chamado de entrada padrão e saída padrão. A entrada padrão também associada ao teclado e a saída padrão ao monitor. São chamadas de standard input para o teclado, standard output para o monitor e as mensagens de erro são enviadas (geralmente) para a tela, standard error. Ou stdout, stdin e stderr. Exemplo de uso do redirecionamento: Queremos procurar em uma pasta, todos os arquivos que começar com "I" e o resultado de nossa busca deverá ir para o arquivo resultado.txt: #grep I* /usr/* > resultado.txt Alguns exemplos de redirecionamentos: 1. Envia o stdout para um arquivo: #comando > arquivo 2. Envia stderr para um arquivo: #comando 2> arquivo 3. Envia stdout e stderr para um arquivo: #comando > arquivo 2>&1 4. Lê stdin a partir de um arquivo: #comando < file 5. Envia stdout para o fim de um arquivo: #comando > arquivo 6. Envia stderr para o final do arquivo: #comando 2> arquivo 7. Envia stdout e stderr para o fim do arquivo: #comando > arquivo 2>&1 8. Lê stdin do teclado até o caracter c: #comando <<c 9. Pipe stdout para o comando2: #comando1 | comando2 10. Pipe stdout e stderr para o comando2: #comando1 2>&1 | comando2 |
O que é variável de ambiente? São nada mais que uma associação de nomes com cadeias de caracteres. Talvés a melhor forma seja a variável PATH, presente em vários sistemas operacionais, incluindo o DOS, Netware, OS/2, etc... Exemplo: PATH=/usr/local/bin:/bin:/usr/bin:.:/usr/X11R6/bin Para ver as variáveis de ambiente: #env Para definir variáveis de ambiente: export NomeDaVariável=NovoValor |
Programação shell O shell mais popular do Linux é o Bash Ele é um interpretador de comandos que podem ser agrupados em arquivos de texto também chamados de scripts, ou shell scripts. Visão geral da programação Bash Variáveis que armazenam diversos valores Capacidade de avaliar expressões Possui estruturas de controle (loop, if else, for, etc...) Capacidade de definir funções que podem ser chamadas de qualquer lugar dos scripts Todo programa começa com: #!/bin/bash comandos comandos comandos Para que o programa se torne executável digite: #chmod +x NomeDoPrograma Para executar o programa: #./NomeDoPrograma O "./" significa que você esta no diretório onde o programa esta localizado. Como retirar os caracteres de retorno de carro de arquivos ASCII DOS para ASCII Linux? O comando tr realiza esta tarefa com a opção -d. Assim converter arquivos DOS em arquivos linux pode ser realizado pelo seguinte comando: #tr -d '\105' < Arquivo.dos > Arquivo.linux O parâmetro '\105' denota nos códigos ASCII retorno de carro na notação octal. Como transformar o comando acima em um script executável? #!/bin/bash tr -d '\105' < $1 > $2 Para torná-lo executável: #chmod +x NomeDoScript Exemplo de shell script: #!/bin/bash echo "teste de shell script" Exemplo de prompt para o usuário: #!/bin/bash echo -n "digite um valor: " read value echo "voce digitou: $valor" Programação shell Exemplo, teste para ver se o arquivo existe antes de tentar abrir com o edito vi: #!/bin/bash if test -f "$1" then vi "$1" else echo "arquivo não existe" fi #!/bin/bash # isto é um comentário vendas=/public/empresa/info #declara uma variável echo "insira o nome do arquivo a copiar: " # prompt do usuário read nomedoarquivo # le variável cp $nomedoarquivo $vendas #!/bin/bash # uso de estruturas de controle # exibe menu echo "Escolha uma das opções P, D ou Q: " echo "P- Print" echo "D- Deleta" echo "Q- Quit, encerra" read resposta case $resposta in P|p) echo "digite o nome do arquivo para imprimir :" read nomedoarquivo lp $nomedoarquivo;; D|d) echo "digite o nome do arquivo para deletar:" read nomedoarquivo rm $filename;; *) echo "encerrando... ";;; esac #!/bin/bash echo "O último comando executado retornou $?" echo "O nome deste programa é $0" echo "O PID deste processo é $$" exit #!/bin/bash # pergunta-nome echo -n "Entre seu nome:" read NOME SOBRENOME echo "Prazer em encontrá-lo $NOME!" exit #!/bin/bash # sel-edit -- seleciona um arquivo # fonte (*.c *.h) e edita select FNAME in *.c *.h do vi $FNAME done exit #!/bin/bash # feriados -- mostra principais # feriados nacionais HOJE=`date +%d/%m` case $HOJE in 01/01) echo Confraternização universal ;; 24/06) echo São João ;; 07/09) echo Independência ;; 15/11) echo Procl. República ;; 25/12) echo Natal ;; *) echo Um dia como qualquer outro ;; esac exit #!/bin/bash Clear Free df gcc com c Exemplo de programa c: #include <stdio.h> main() { printf("teste\n"); } Para compilar: #gcc -o teste teste.c Para executar: #./teste gcc com c++ Exemplo de programa c++: #include <iostream.h> void main(void) { cout << " teste " << endl; } Para compilar: #gcc -o teste teste.c Para executar: #./teste |
O intalador de pacotes rpm Para instalar um pacote: rpm -i NomeDoPacote.i386.rpm Desinstalar pacotes: rpm -e NomeDoPacote.i386.rpm Informações sobre os pacotes: rpm -qip NomeDoPacote.i386.rpm Verificações de alterações em pacotes: rpm -V NomeDoPacote Força a instalação: Rpm -i -h -percent -replacefiles -force NomeDoPacote |
A essa altura do campeonato vocês já devem ter percebido que vamos usar o Linux em laboratório! |
Prof. Msc. Emiliano S. Monteiro 1o. Diretor COOTRADE |
Abaixo foto do Linux Russo... |
A tecla - tab É utilizada para completar comandos com arquivos ou pastas. Ao pressionarmos a tecla tab duas vezes ele completa o comando com o que for parecido, por exemplo: Para não ter que digitar: #ls /etc/X11/XF86Config Basta apenas digitar:#ls /etc/X11/XF* e o shell Bash irá completar o resto do nome do arquivo |
Histórico de comandos O shell Bash mantém um histórico de 500 a 1000 comandos digitados no prompt. Inclusive os que foram digitados em logins anteriores. Para ver os últimos 10 comandos: #history 10 Para repetir o comando número 3, por exemplo: #!3 No teclado, seta para cima, mostra os últimos comandos digitados |
Alias São caminhos alternativos para diretórios ou arquivos. São utilizados como abreviações de caminhos. Exemplo: Ao invéz de utilizarmos constantemente: cd /usr/src/linux/arch/i386/boot Podemos usar: alias boot=´cd /usr/src/linux/arch/i386/boot´ E utilizar apenas o comando boot Outro exemplo: alias dir=´ls -la´ |
Tipos de arquivos Quando o comando ls é usado aparece um letra no resultado, estas letras podem ser: l é um link simbólico d é um diretório - é um arquivo normal b é um dispositivo de bloco c é um dispositivo caractere |
Comando find Vamos supor que você deseje achar um arquivo que começa com o nome gnome #find / -name gnome* -print Gostaria de encontrar todos os arquivos que começem com a letra "z" (minúscula) na pasta /usr/bin. O comando é: #find /usr/bin -name "z*" |
Comando egrep Quero saber quem tem o primeiro nome root cadastrado nas contas do sistema: #egrep "root:" /etc/passwd Quantos usuários tem o primeiro nome "root" #egrep "root," /etc/passwd |
Comando chfn Para alterar informações ou cadastrar informações sobre uma deterninada conta de usuário use o comando chfn |
Comando cat Verifique as mensagens gerados durante o boot com o seguinte comando: #cat /var/log/boot.log Para ver outras mensagens geradas pelo Kernel: #cat /var/log/messages Se o root deseja ver quem dados sobre os últimos logins: #cat /var/log/secure |
Editor de texto vi Para entrar com comandos use a tecla “esc”, isto lhe permitirá digitar no rodapé da tela comandos para salva, sair, etc. :w! NomeDoArquivo Salva o arquivo :wq Salva e sai do arquivo atual :q Sai do vi :q! Sai do vi sem salvar as alterações :!comando Executa um comando do shell especificado |
Comando tar Para criar um backup: #tar -cfv /origem /destino Para copiar arquivos de /home/user1 para um disquete: #tar -cf /dev/fd0 /home/user1 Para criar um backup multivolume, comprimido, com verbose (listando arquivos), e uma lista dos arquivos copiados para o disquete será gerada em listagem.txt #tar -cvfzM /dev/fd0 /home/user1 | tee listagem.txt Para restaurar um arquivo: #tar -zxvf arquivo Para criar um backup do diretório de user1 no arquivo backup1.tar #tar -cvf /home/backup1.tar /home/user1 |
O arquivo /etc/fstab O arquivo /etc/fstab é um arquivo de configução, contendo informações sobre os pontos de montagem para serem usados pelos comandos mount e umount. Cada linha do arquivo fstab provê informações sobre o dispositivo. Exemplo de fstab Device Moint point File Sistem Options /dev/hda3 / ext3 defaults 1 1 /dev/hda1 /dosc vfat defaults 0 0 /dev/hda5 /dosd vfat defaults 0 0 /dev/hda4 /swap swap defaults 0 0 /dev/fd0 /mnt/floppy ext3 noauto 0 0 /dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0 none /proc proc defaults 0 0 Opções de /etc/fstab A primeira coluna mostra o nome do dispositivo, como uma partição de um hd. O segundo campo mostra o ponto de montagem dentro da árvore do sistema de arquivos. O terceiro campo indica o tipo de sistema de arquivos para cada dispositivo. O quarto campo pode ter várias opções: "noauto" - Não irá montar automaticamente no boot. "user" - Permite qualquer usuário montar (mas não acessar). "owner" - Apenas o root poderá montar. "noexec" - É útil para partições VFAT/NTFS pois por padrão ele considera todos os arquivos "como executáveis". "ro" - Será montado como somente leitura. "rw" - Será montado com suporte a leitura/gravação. uid=VALOR - Defina o ID do usuário que também terá acesso (além do root). gid=VALOR - Defina o ID do grupo que todos os usuários terão acesso. umask=VALOR - É um valor octeto e define como ficarão as permissões dos arquivos dessa partição ao ser copiado para uma partição Linux por exemplo, por padrão elas tem permissão total. Exemplo: 022 corresponde ao chmod 755. Os valores "0" mostrados no final do arquivo o programa fsck não realizar checagens no arquivo ao inicializar o Linux. |
Comando mount Para montar uma partição DOS(FAT) #mount -t vfat /dev/hda1 /dosc No caso anterior sub-entende-se que você tem uma partição DOS em hda1 e já criou a pasta dosc Para montar um disquete DOS #mount -t vfat /dev/fd0 /mnt/floppy Para desmontar o disquete: #umount /mnt/floppy Para desmontar o cdrom: #umount /mnt/cdrom Para ejetar a bandeja do cdrom: #eject |
top As colunas do comando top Na tabela, geralmente aparece: a primeira coluna (PID) é o número de identificação do processo; Segunda coluna (USER) o nome do proprietário da tarefa; terceira coluna (PRI) a prioridade da tarefa quarta coluna (NI) o valor da prioridade quinta coluna (SIZE) tamanho da tarefa mais espaço ocupado na pilha sexta coluna (RSS) a quantidade de memória física usada pelo processo sétima coluna (SHARE) memória compartilhada pelo processo oitava coluna (STAT) o estado do processo (pode ser, dormindo, executando, zumbis, etc) nona coluna (LIB) tamanho das páginas de bibliotecas em uso pelo processo décima coluna (%CPU) percentual de CPU usado (quando top fez última atualização) décima primeira coluna (%MEM) memória física usada pela tarefa décima segunda coluna (TIME) tempo decorrido desde que o processo foi ativado e última coluna (COMMAND) o nome do processo. |
Interface gráfica Para chamar a interface gráfica digite na linha de prompt: # startx Caso a interface gráfica tenha inicializado a seguinte combinação de teclas, pode ser útil: ctrl+alt+TeclaDeFunção - Leva você para o prompt, mas ainda fica rodando a GUI ctrl+alt+backspace - Realiza um shutdown no servidor gráfico e retorna você ao prompt ctrl+alt+TeclaNumerica - Realiza troca de modos de vídeo ctrl+alt+F7 - Retorna você do prompt para a GUI |
Os arquivos do X Toda a configuração da interface gráfica pode ser feita manualmente editando um arquivo. /usr/X11R6/lib/X11/XF86Config Toda a configuração de mouse, vídeo, tamanho de tela, etc. é feita neste arquivo. Para editar este arquivo manualmente, digite: # joe /usr/X11R6/lib/X11/XF86Config |
O serviço Samba Samba é um Servidor de Arquivos Windows para Unix. Esse servidor trabalha com o protocolo SMB (Server Message Block), que é popularmente conhecido como LanManager ou NetBIOS. O Samba é um serviço implemetado com diversos processos que ficam rodando em background (segundo plano), esperando solicitações Smbd e nmbd daemon que permite o fornecimento de serviços de compartilhamento de arquivos e impressão para máquinas clientes Windows 9x, NT e LanManager (outros tipos de máquinas que usem esse protocolo também podem acessar o servidor [OS/2, Mac]). Os clientes devem usar o protocolo SMB para requisitar o início de uma sessão com este daemon. O daemon do servidor de nomes do serviço Samba Para configurar manualmente: # joe /etc/smb.conf Para compartilhar uma pasta: # ... public accessible directory .. [public] comment = PublicSpace path = /net public = yes writable = yes printable = yes Para iniciar o servidor: #cds #./smb start Para parar o servidor: #./smb stop Para acionar a unidade compartilha, digite: # smbcliente \\\\workgroup\\discoTeste Impressão Os dispositivos de impressão são: /dev/lp0 e /dev/lp1 |
Para imprimir um arquivo: #lpr teste.txt O arquivo acima é copiado para o spooler de impressão que fica na pasta: /var/spool/lpd/lp e posteriormente o daemon lpd envia o job de impressão para a impressora conectada em /dev/lp0 Impressão Para verificar o status da fila de impressão: #lpq Para cancelar um job na fila: #lprm 1 Verificando o status da impressora com lpc: #/usr/sbin/lpc status Exemplo de impressão bruta sem formatação: #cat teste.txt > /dev/lp0 Controlando a impressão com lpc: Para mover um job39 para o topo da fila: #lpc topq 39 Para parar um job: #lpc stop hplj lpd esta rodando? #ps –aux | grep lpd O arquivo /etc/printcap Exemplo de arquivo: lp|Laser Jet:\ :lp=/dev/lp0:\ :sd=/var/spool/lpd/lp:\ :mx#0:\ :pl#64:pw#80 :if=/var/spóol/lpd/lp/hpjl-if.pl:\ :sh: A primeira linha mostra a identificação da impressora. A segunda linha mostra em qual dispositivo ela esta ligada. A terceira linha indica para onde vão os jobs de impressão (sd). A quarta linha não limita o tamanho do jobs de impressão A quinta linha informa a quantidade de linhas por páginas e tamanho da página em caracteres A setxa linha passa a impressão por um filtro de formatação A sétima linha significa que você irá suprimir cabeçalhos e irá imprimir páginas separadoras entre impressões. |
Linuxconf via rede Passos para ativar o linuxconf via rede: No servidor: 1. Usar o ntsysv para ativar os serviços: inetd, xinetd, httpd, linuxconf-setup, linuxconf-web e linuxconf-https 2. Usar o cds para ir até a página de serviços 3. Parar os serviços (stop), iniciar os serviços (start) 4. No linuxconf ? Rede ? Acesso ao Linuxconf via rede ? Marcar uma (x) na opção que habilita o acesso via rede e incluir o Num. IP da máquina cliente No cliente: Chamar um navegador e no campo URL escrever: http://NumeroIPDoServidor:98/ Outras ferramentas de configuração: O webmin pode ser acionado pela porta 10000 O swat pode ser acionado pela porta 901 |
Skype: prof_emiliano Email: prof.emiliano@gmail.com |