ICO-2011-1-sobral

De MediaWiki do Campus São José
Revisão de 08h06min de 13 de julho de 2011 por Msobral (discussão | contribs) (→‎Conceitos finais)
(dif) ← Edição anterior | Revisão atual (dif) | Versão posterior → (dif)
Ir para navegação Ir para pesquisar

Introdução à Computação - 2011-1

Informações gerais

Professor: Marcelo Maia Sobral
Email: msobral@gmail.com
Skype: mm-sobral
Lista de email (forum): ico-ifsc@googlegroups.com
Atendimento paralelo: 4a feira 10h - 11:30 h, 5a feira 8h - 9:30 h
Reavaliação (recuperação): no final do semestre
IMPORTANTE: o direito de recuperar uma avaliação em que se faltou somente existe mediante justificativa reconhecida pela coordenação. Assim, deve-se protocolar a justificativa no prazo de 48 horas, contando da data e horário da avaliação, e aguardar o parecer da coordenação. O não cumprimento desse procedimento implica a impossibilidade de fazer a recuperação, e assim a reprovação na disciplina;

Softwares

Será usado como plataforma de estudo o sistema operacional Ubuntu Linux 10.04 LTS. Para obtê-lo há essas opções:

  1. Trazer um CD-R virgem para que eu faça a cópia aqui no IFSC
  2. Fazer o download por conta própria (aprox. 700 MB)
  3. Usar uma máquina virtual do VirtualBox já preparada por mim (menos recomendado, pois o Linux roda mais lento)
    • Trazer um DVD-R ou pendrive com ao menos 4 GB livres.
    • Instalar o VirtualBox em seu computador para executar a máquina virtual

ATENÇÃO: é muito importante que se providencie o quanto antes a instalação do Ubuntu em seu computador. Sem ele você não poderá fazer os exercícios sugeridos, o que atrapalhará seu aproveitamento na disciplina ! O bom andamento do estudo depende muito de não deixar acumular o conteúdo e os exercícios. Acostume a criar uma rotina de estudo, procurando resolver os problemas apresentados e procurando o professor (ou contatando-o por email) para tirar dúvidas.

Listas de exercícios

Referências adicionais

Edição da wiki

Aulas

16/03: Apresentação

Apresentação da disciplina: plano de ensino, avaliação, abordagem pedagógica.

Atividades

  1. Leia a Parte I - Evolução do Computador contida na História do Computador. Na próxima aula será feita uma mini-avaliação sobre esse conteúdo !
  2. Existem atualmente muitos tipos de de computadores, que vão desde celulares e PDAs até grandes computadores modulares. Faça uma pesquisa sobre tipos de computadores que podem ser encontrados hoje em dia. Busque informações sobre suas características, fotografias, que tipos de programas são neles usados, que pessoas os utilizam e como são suas interfaces com o usuário. O resultado de sua pesquisa deve ser colocado neste artigo na nossa wiki.

Computadores atuais

Cada contribuição ficará registrada na wiki, e será considerada para sua avaliação na disciplina.

Obs: para poder editar a wiki você precisa primeiro se cadastrar no Portal do Aluno.

23/03: Introdução a sistemas computacionais

  • Sistemas computacionais (resumo):
  • Estrutura de um computador
    • Hardware: componentes físicos (processador, video, memória, HD, ...)
    • Software: programas ... incluindo o sistema operacional

Atividade

Pesquise a estrutura (hardware e sistema operacional) dos seguintes computadores:

  • Computadores Dell Precision
  • iPad
  • Console Xbox
  • Console Wii
  • Console Playstation 3
  • Notebook Sony Vaio
  • iPhone
  • Roteador Cisco série 800
  • Amazon Kindle
  • Algum telefone celular
  • Tabblet Motorola Xoom
  • Laptop Intelbras

Videos ilustrativos

30/03: Introdução ao Linux

Uso básico da interface gráfica e de texto. Apostila Gerência de Redes (prof. Odilson), capítulos 3 a 5, e capítulos 6 e 7 do Guia Foca Linux Iniciante.

Objetivos:

  1. Conhecer o sistema operacional Linux
  2. Usar a interface gráfica
  3. Usar a interface de linha de comando (shell)
  4. Usar comandos básicos para manipulação de arquivos e diretórios
  5. Conhecer a estrutura de diretórios do Linux

Breve história dos computadores

Tema para investigar: Além da máquina de Von Neumann

Que tipos de computadores se especula existirão no futuro ?

  • Computadores quânticos ?
  • Computadores inteligentes ?
  • Computadores orgânicos (biocomputadores) ?
  • Nanocomputadores ?
  • Cérebros positrônicos (ver Isaac Asimov) ?
  • ... alguma especulação aqui

Sistemas Operacionais

  • Capítulo 1 de Sistemas Operacionais Modernos, 2a ed., de Andrew Tanenbaum. Ed. Pearson Prentice-Hall, 2003.
  • Capítulos 1, 2 e 3 de Sistemas Operacionais: Conceitos e Aplicações, de A. Silberschatz, P. Galvin e G. Gagne. Ed. Campus, 2001.
  • Capítulo 1 de Sistemas Operacionais, 3a ed. - Série Livros Didáticos número 11, de Rômulo S. de Oliveira, Alexandre S. Carissimi e Simão S. Toscani. Ed. do Instituto de Informática da UFRGS, 2003.

Componentes fundamentais de sistemas computacionais: resumo

O que são sistemas operacionais ?

Exemplos de sistemas operacionais (alguns já fora de linha):

Videos ilustrativos

Textos interessantes sobre história dos sistemas operacionais

Atividade: Instalando um sistema operacional

A primeira coisa que se faz necessária para usar um sistema operacional é instalá-lo em seu computador. Assim na aula de hoje será instalado o Ubuntu Linux 10.04.1 LTS. Questões que surgirem durante a instalação serão relatadas aqui na wiki, formando um guia rápido de instalação.

06/04: Instalando o Linux

Foi instalado o Ubuntu Linux em máquinas virtuais VirtualBox.

13/04: Introdução ao Linux (continuação)

  • Uso básico da interface gráfica e de texto.
    • Apostila Gerência de Redes (prof. Odilson), capítulos 3 a 5
    • Capítulos 6 e 7 do Guia Foca Linux Iniciante.

Objetivos:

  1. Conhecer o sistema operacional Linux
  2. Usar a interface de linha de comando (shell)
  3. Usar comandos básicos para manipulação de arquivos e diretórios
  4. Conhecer a estrutura de diretórios do Linux
  5. Usar comandos básicos para visualização e manipulação de processos

Foram vistos programas para manipulação de arquivos:

  • cat: mostra o conteúdo de um arquivo na tela, porém sem paginá-lo.
  • more: mostra de forma paginada o conteúdo de um arquivo na tela.
  • less: mostra de forma paginada o conteúdo de um arquivo na tela, com alguns recursos a mais (possibilita paginar pra cima ou pra baixo)
  • cp: copia um ou mais arquivos
  • mv: move um ou mais arquivos de um subdiretório para outro, ou renomeia um arquivo
  • rm: remove um ou mais arquivos
  • mkdir: cria um subdiretório
  • rmdir: remove um subdiretório

Exercício

  1. Usando somente caminhos relativos, navegue pela seguinte sequência de subdiretórios:
    /home/aluno
    /etc
    /etc/init.d
    /usr/share/doc
    /usr/share/doc/zip
    /usr/local
    /var/log
    /var/tmp
    /home/aluno
    
  2. Repita o exercício anterior, mas de forma que se use apenas um caminho relativo para ir de um diretório para outro.
  3. Usando a interface gráfica, organize os arquivos contidos aqui. Eles devem ser colocados nos subdiretórios Imagens, Videos e Documentos, de acordo com seus tipos.
  4. Refaça a questão anterior, porém usando a interface de linha de comando (o shell).

Obs: para extrair os arquivos do exercício faça assim:

aluno@DX~$ tar xjf sop.tar.bz2

... e veja que aparecerá um subdiretório sop com todos os arquivos do exercício lá dentro.

20/04: Processos e memória

Visão geral sobre Sistemas Operacionais:

  • O que são ?
  • Para que servem ?

Processos e multiprogramação: uma visão geral sobre programas, processos, ciclos de um processo, multiprogramação e escalonamento. Ver apostila do prof. Odilson, capítulo 3, e capítulo 5 do Guia Foca Linux Iniciante.

Gerência de memória: visão geral sobre o uso de memória no sistema operacional e pelos processos Uso do laboratório para ilustrar conceitos.

Vários utilitários (programas auxiliares) existem para obter informações do sistema operacional sobre processos e memória. Alguns trabalham em modo texto, como:

  • ps: lista os processos existentes
  • pstree: lista os processos existentes mas de forma hierárquica
  • top: lista os processos mais ativos, junto com informações globais sobre uso dos recursos no sistema operacional (memória, processador, memória virtual, quantidade de processos, carga de trabalho)
  • atop: o mesmo que top, mas com maior detalhamento do uso de recursos mantidos pelo sistema operacional
  • mpstat: mostra estatísticas de uso do processador
  • free: mostra o uso de memória
  • vmstat: mostra o uso de memória, discos e processador no último intervalo de tempo.

Existem também utilitários no modo gráfico. Por exemplo, no Ubuntu há o "Monitor do sistema":

Monitor1.png
Para executar o Monitor do Sistema




Monitor2.png Monitor3.png

Telas do monitor do Sistema

27/04: Processos e memória (continuação)

  • Continuou-se o estudo sobre uso de memória pelos processos, que foi iniciado em 20/04. Discutiu-se como o sistema operacional administra a memória usada para diferentes propósitos: pelos processos, para acelerar o uso do disco, e a memória virtual.

Atividade

No seu sistema Linux em casa faça a seguinte comparação:

  1. Anote a quantidade de memória em uso informada pelo sistema operacional. Você pode usar o comando free:
    $ free
                 total       used       free     shared    buffers     cached
    Mem:       3353368    2569736     783632          0      14652    1532452
    -/+ buffers/cache:    1022632    2330736
    Swap:      1998840     188324    1810516
    

    ... no exemplo acima, o total de memória em uso é de 1022632 kBytes (coluna used, na linha -/+ buffers/cache)
  2. Liste todos os processos, incluindo as quantidades de memória que cada um utiliza. Use o comando ps aux:
    $ ps aux
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.0   2784  1080 ?        Ss   Apr26   0:03 /sbin/init
    root         2  0.0  0.0      0     0 ?        S    Apr26   0:00 [kthreadd]
    root         3  0.0  0.0      0     0 ?        S    Apr26   0:00 [migration/0]
    

    ... nesse exemplo, a quantidade de memória que cada processo usa está reportada nas colunas VSZ (memória real + virtual) e RSS (somente memória real). Some cada coluna dessas, e compare com o valor informado pelo comando free. Existe diferença ? Caso sim, pesquise o porque de serem diferentes.

04/05: Sistemas de arquivos; redirecionamentos de entrada e saída padrão; pipes

Resolver a 1a lista de exercícios:

Visão geral sobre sistemas de arquivos: definição de arquivo e diretório, formas de armazenamento em media (discos, DVD, ...), segurança (controle de acesso).

Alguns utilitários de uso comum

Esses utilitários são programas úteis para operações do dia-a-dia com arquivos, e serão úteis para ilustrar os conceitos de entrada e saída padrão:

  • cut: divide as linhas dos arquivos em colunas, e mostra colunas específicas
  • grep: mostra linhas de arquivos que contenham determinada palavra ou padrão de caracteres
  • sort: ordena as linhas de um arquivo
  • paste: combina linhas de arquivos
  • wc: conta linhas, palavras e caracteres
  • tail: mostra as últimas linhas de um arquivo
  • head: mostra as primeiras linhas de um arquivo
  • du: mostra a utilização de disco de um determinado arquivo ou diretório

Entrada e saída padrão

Todo processo possui uma saída padrão, que corresponde a um arquivo ou dispositivo onde os dados de saída do processo (ex: mensagens de texto) serão mostrados. E assim como existe uma saída padrão, todo processo possui uma entrada padrão que corresponde ao arquivo ou dispositivo de onde por default são obtidos os dados de entrada.

Sop-redir.png

Redirecionamento de saída padrão

Normalmente a saída padrão de um processo é a tela do terminal, mas ela pode ser redirecionada para um arquivo ou para outro dispositivo. Assim, as mensagens de texto que um processo gera podem ser guardadas em um arquivo para posterior utilização. No exemplo abaixo, a listagem dos processos foi guardada no arquivo processos.txt:

aluno@D1:~$ ps ax > processos.txt
aluno@D1:~$

O redirecionamento de saída padrão se faz com o símbolo > seguido do nome do arquivo. Note que nada aparece na tela, uma vez que a saída se tornou o arquivo processos.txt. Após executar o comando acima, veja o conteúdo de processos.txt:

aluno@D1:~$ less processos.txt
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:03 /sbin/init
    2 ?        S<     0:00 [kthreadd]
    3 ?        S<     0:00 [migration/0]
    4 ?        S<     0:00 [ksoftirqd/0]
    5 ?        S<     0:00 [watchdog/0]
    6 ?        S<     0:00 [migration/1]
    7 ?        S<     0:00 [ksoftirqd/1]
    8 ?        S<     0:00 [watchdog/1]
    9 ?        S<     0:00 [events/0]
   10 ?        S<     0:00 [events/1]
   11 ?        S<     0:00 [khelper]
   12 ?        S<     0:00 [kstop/0]
   13 ?        S<     0:00 [kstop/1]
   14 ?        S<     0:00 [kintegrityd/0]
   15 ?        S<     0:00 [kintegrityd/1]
   16 ?        S<     0:00 [kblockd/0]
   17 ?        S<     0:00 [kblockd/1]
   18 ?        S<     0:00 [kacpid]
   19 ?        S<     0:00 [kacpi_notify]
   20 ?        S<     0:00 [cqueue]
   21 ?        S<     0:00 [ata/0]
   22 ?        S<     0:00 [ata/1]
processos.txt

Como se pode ver, o texto que apareceria na tela foi guardado em processos.txt. Experimente executar novamente o comando ps ax > processos.txt e veja o resultado. O que aconteceu com o arquivo processos.txt ?

Quando se deseja redirecionar a saída de um processo para um arquivo, porém preservando o conteúdo original desse arquivo, deve-se executar o comando da seguinte forma:

aluno@D1:~$ ps ax >> processos.txt
aluno@D1:~$

... quer dizer, em vez de usar > usa-se >>.

Exercícios

  1. Concatene vários arquivos de texto, e usando redirecionamento de saída padrão grave o resultado em um novo arquivo. Dica: para concatenar use o utilitário cat.
  2. Execute o comando ps > ps.txt. Veja o conteúdo do arquivo resultante ps.txt. Execute novamente ps > ps.txt, e veja como ficou o arquivo ps.txt. O que você pode concluir quanto ao redirecionamento de saída para um arquivo já existente ?
  3. Repita o procedimento do ítem 2, porém executando primeiro ps > ps.txt e depois ps >> ps.txt. Qual foi a diferença ?
  4. O programa sleep impõe uma pausa de um certo número de segundos. Por exemplo, sleep 1 faz uma pausa de 1 segundo, e sleep 5 faz uma pausa de 5 segundos. Como você poderia usá-lo para gravar em um arquivo três listagens de processos no sistema com intervalos de 2 segundos ?

Redirecionamento de entrada padrão

Normalmente a entrada padrão corresponde ao teclado do terminal, mas pode ser redirecionada para outro arquivo ou dispositivo. No exemplo abaixo, usa-se o programa wc para contar as linhas, palavras e caracteres contidos no arquivo processos.txt:

aluno@D1:~$ ps ax > processos.txt
aluno@D1:~$ wc < processos.txt
 137  810 7807 processos.txt
aluno@D1:~$

No exemplo acima, gravou-se em processos.txt o resultado do comando ps ax' , e depois usou-se wc para contar linhas, palavras e caracteres desse arquivo. O efeito combinado é a contagem de quantos processos existem no sistema nesse momento (representado pelo número de linhas contidas em processos.txt).

Ao contrário do caso da saída padrão, não é tão comum se usar redirecionamento de entrada padrão. No entanto há um recurso adicional provido pelo sistema operacional que explora a combinação de ambas, e que possibilita combinar as funcionalidades de diferentes programas.

Pipes

Em sistemas operacionais Unix, é possível conectar a saída padrão de um processo à entrada padrão de outro processo, e a isto se chama pipe (que pode ser traduzido como duto ou tubo). Com isto, os dados de saída de um processo serão os dados de entrada de outro processo, o que pode ser explorado para realizar diferentes tarefas. Por exemplo, retomando a contagem de processos vista na seção anterior:

aluno@D1:~$ ps ax | wc
 137  810 7807
aluno@D1:~$

O símbolo de pipe é a barra vertical |. Ao se executarem os comandos acima unidos pelo pipe, a listagem de processos gerada pelo ps ax é automaticamente enviada para a entrada padrão do comando wc. O resultado é a contagem de processos existentes no sistema.

Podem-se ligar mais de dois processos usando pipes. Assim, cria-se um encadeamento de processos, em que a saída padrão de um processo alimenta a entrada padrão do próximo processo. Por exemplo, para se contarem os processos do usuário aluno:

aluno@D1:~$ ps aux | grep aluno | wc
     47     568    5195
aluno@D1:~$

Exercícios

  1. Conte quantos arquivos e diretórios existem dentro de um subdiretório qualquer.
  2. Liste um subdiretório de forma a mostrar somente os arquivos nele contidos.
  3. Conte quantos processos existem no sistema.
  4. Conte quantos processos do usuário aluno existem no sistema.
  5. Conte quantos processos que não são do usuário aluno existem no sistema.
  6. Mostre exatamente a 3a linha do arquivo /etc/hosts. Dica: veja os utilitários head e tail.

11/05: Localização de arquivos

Uma tarefa usual em um sistema operacional é localizar arquivos. Essa procura pode ser baseada no nome ou parte do nome de arquivo, na data de criação ou última modificação, no nome do usuário ou grupo dono, ou outros atributos do arquivo. Pode ser inclusive baseada numa combinação dessas informações. Por exemplo, pode ser necessário procurar todos os arquivos de música ou video, ou então todos os programas (arquivos executáveis) que pertençam ao superusuário (usuário root). Existem programas capazes de fazer tais buscas tanto no ambiente gráfico quanto no modo texto.

As buscas a serem realizadas são:

  1. Arquivos de música
  2. Arquivos de música ou video
  3. Arquivos de texto ou planilha do Openoffice que não tenham sido modificados a 7 dias ou mais
  4. Arquivos executáveis (programas)
  5. Arquivos executáveis pertencentes ao usuário root

Para iniciar, vamos usar programas gráficos para fazer buscas.

Usando o ambiente gráfico

O primeiro programa gráfico a ser usado é o nautilus, o gerenciador de arquivos disponível no Ubuntu Linux. Para usá-lo para fazer buscas selecione a opção de pesquisa:


Pesquisa1.png


No nautilus aparecerá uma caixa de texto onde se deve digitar o nome ou parte do nome dos arquivos a serem procurados.


Pesquisa2.png


Tente fazer as buscas usando esse programa. Há alguma que não pode ser feita ?

Buscas avançadas

Para fazer buscas que combinem outros critérios que não somente o nome do arquivo deve-se usar outro aplicativo, que está acessível pelo Mmenu Locais:

Pesquisa3.png

Esse aplicativo de busca mostra uma tela em que se adicionam ou removem critérios de busca:

Pesquisa4.png

Como resultado, podem-se localizar arquivos e diretórios que atendam diferentes opçõs de localização:

Pesquisa5.png

Modo texto

A procura de arquivos e diretórios pode ser automatizada com o comando find. Por exemplo, para localizar todos os arquivos ou diretórios chamados default, e que estejam abaixo de /etc:

aluno@D1:~$ find /etc -name default -print
/etc/default
/etc/calendar/default
/etc/X11/xinit/xinput.d/default
aluno@D1:~$

Uso do find :

find pathname [opões]

... sendo pathname o diretório abaixo de que se deseja fazer a busca. As opções servem para selecionar arquivos e diretórios durante a busca, e também para executar ações para cada um deles que for encontrado. Algumas opções mais comuns:

  • -name nome: seleciona arquivos ou diretórios cujos nomes sejam nome' . Essa opção aceita wildcards (* e ?)
  • -type tipo: seleciona apenas o tipo' indicado, que pode ser:
    • d: diretório
    • f: arquivo
    • l: link simbólico (ou atalho)
  • -perm modo: seleciona apenas arquivos ou diretórios que possuam as permissões indicadas em modo
  • -size tamanho: seleciona apenas arquivos com tamanho de acordo com o especificado (em bytes)
  • -mtime n: seleciona apenas arquivos ou diretórios modificados a n * 24 horas atrás
  • -atime n: seleciona apenas arquivos ou diretórios acessados a n * 24 horas atrás
  • -user usuario: seleciona apenas arquivos ou diretórios pertencentes a usuario
  • -exec comando \;: executa comando para cada arquivo ou diretório encontrado. Ex:
    • find /tmp -type f -mtime +7 -exec rm -f {} \; : remove todos os arquivos dentro de /tmp que estejam há 7 dias sem serem modificados. A sequência {} é substituída pelo nome do arquivo encontrado.

... e muitas outras (consulte o manual do find).

Atividade

Usando o modo gráfico E o modo texto, faças as seguintes pesquisas por arquivos:

  1. Encontre o arquivo lsusb, que se encontra em algum subdiretório dentro de /usr
  2. Encontre os arquivos dentro de /usr cujos tamanhos sejam maiores que 20 MB
  3. Encontre os subdiretórios lib, que estão dentro de /usr
  4. Localize todos os arquivos executáveis (i.e., os programas) que existem abaixo de /lib
  5. Localize todos os arquivos pertencentes ao usuário aluno e que estejam dentro de /tmp
  6. Localize o arquivo bits.h em toda a árvore de diretório (quer dizer, a partir da raiz, ou /).
  7. Localize todos os arquivos abaixo de /tmp que tenham sido criados (ou modificados) a um dia ou mais.
  8. Localize os arquivos dentro de /tmp que pertençam a seu usuário.
  9. Localize somente os diretórios dentro de /tmp que pertençam a seu usuário.
  10. Localize somente arquivos dentro de /tmp que tenham menos de 1 kB.
  11. Localize somente arquivos dentro de /tmp que tenham mais de 10 kB.
  12. Localize somente arquivos dentro de /tmp que tenham mais de 10 kB e sejam do seu usuário.
  13. Localize somente arquivos dentro de /tmp que tenham mais de 10 kB e não sejam do seu usuário.
  14. Localize os arquivos dentro de /etc que contenham o texto telnet.
  15. Localize os arquivos dentro de /etc que não contenham o texto root.
  16. Localize os arquivos dentro de /etc que contenham o texto telnet, porém não tenham o texto vt nas mesmas linhas que telnet.
  17. Conte quantos arquivos em /etc contêm o texto root.
  18. (Desafio) Em seu diretório home (pasta pessoal) existem alguns arquivos de video obtidos com sua câmera fotográfica, porém você não sabe exatamente onde estão. Além disso, esses videos são codificados na máquina fotográfica com o codec MJPG, que gera arquivos muito grandes. Se forem recodificados para XVID, os tamanhos desses videos serão reduzidos substancialmente (4 vezes ou mais). Sabendo que se pode recodificá-los no modo texto com o programa mencoder (usando-o assim: mencoder -o novo_video.avi -oac mp3lame -ovc xvid -xvidencopts bitrate=1200 arquivo_video), faça a busca e conversão desses videos para XVID.

18/05: Permissionamento Unix

  • Expor os conceitos associados as permissões de acesso a arquivos e diretórios
  • Explorar as permissões em nível do usuário proprietário

Roteiro desta aula:

25/05: Avaliação

Conceitos

Legenda para prova prática: número_da_questão seguido de:

  • T: correta
  • P: parcialmente correta
  • N: incorreta
Aluno Teórica Prática
Bernardo C D
Giovanni C C (1-T, 2-P, 5-T, 6-T, 7-P)
Katia B B (1-P, 2-T, 4-P, 5-T, 6-T, 7-T)
Levi C D (1-P, 2-T, 7-P)
Mariana B C (1-T, 2-T, 5-T, 7-P)
Markus B D (1-P, 2-T, 7-P)
Maycon B D
Paulo Igor A C (1-T, 2-T, 5-T, 7-T)
Richard A C (1-T, 2-T, 3-T, 5-T, 7-P)
Roberto B C (1-T, 2-T, 3-T, 4-N, 5-T, 6-N)
Romário B D (1-P)
Theodor A D(1-N, 2-T, 3-N, 4-N, 5-P, 6-N, 7-P)
Valmir A D (1-T)

01 e 08/06: Editores de texto

Ver capítulo 9 da apostila do prof. Odilson.

Os editores a serem vistos servem pra criar e modificar arquivos de texto simples (contêm apenas texto e sem formatação). Esse tipo de arquivo é muito comum para arquivos de programa, manuais rápidos, e documentos escritos em linguagens de formatação de texto, como HTML e XML.

Alguns desses editores:

  • gedit: um editor de texto simples para o ambiente gráfico. Possui recurso para ressaltar palavras e sentenças, chamado syntax highlight, de acordo com o tipo de texto (se programa em linguagem C, C++, Python, PHP, shll script, ou um texto HTML, entre outros).
  • vi: um editor de programas com recursos avançados de edição. Mas usa uma interface textual com comandos que devem ser memorizados ... algo anacrônico, mas funciona. Como motivação para usá-lo, praticamente todo computador com Unix (não somente Linux) vem com esse editor previamente instalado.
  • nano: um outro editor mais simples, também para modo texto e com menos funcionalidades que o vi, porém um pouco mais amigável.

gedit

Para executar o gedit deve-se selecioná-lo no menu de aplicativos:

Gedit.png


Esse editor é bastante simples, porém útil para a edição de perquenos textos e programas. Algumas funções existentes são busca e substituição de palavras e impressão. Outras funcionalidades podem ser adicionadas por plugins.

Gedit2.png

Experimente editar diferentes tipos de arquivos de texto com o gedit:

nano

O editor nano serve para editar arquivos em modo texto. Sua tela apresenta uma área de trabalho, onde aparece o texto, com uma barra de ajuda embaixo. Nessa barra há os comandos que podem ser usados, que devem ser invocados com a combinação da tecla Ctrl e a letra indicada. Para terminá-lo basta teclar Ctrl X, fornecendo o nome do arquivo onde guardar o texto.

Nano.png


vi

O editor vi é bastante simples e muito utilizado por ser encontrado em todas as distribuições Linux. Poderíamos optar por um editor um pouco mais avançado, mas com o inconveniente de encontrarmos uma distribuição/instalação onde não dispuséssemos deste editor. O editor vi não tem como objetivo formatar textos: negritos, indentações, justificação, etc. Na prática o vi é muito usado para editar textos que não necessitam de formatação em nenhum momento, como por exemplo códigos fonte de programas em alguma linguagem de programação, e que não carreguem o texto com caracteres especiais. Assim, esse editor também é chamado de editor de programas.

Dicas do Maykon:

Modos de operação

O editor vi tem três modos de operação distintos: modo insert , modo escape (também chamado de modo comando), modo last line;

  • insert: usado para a digitação do texto. Neste modo o vi funciona como uma máquina de escrever, com a diferença de que você pode retroceder sobre o texto já digitado para corrigir eventuais erros. Cada caracter que for digitado aparecerá na tela exatamente como foi digitado.
  • escape: os caracteres comuns (letras, números e sinais de pontuação) têm um significado especial e quase todos os caracteres funcionam como comandos; portanto, existem muitos comandos. Alguns comandos servem para passar para o modo insert, outros para movimentar o cursor sobre as linhas do texto, alterar trechos do texto, buscar palavras, etc.
  • last line: os comandos são digitados em uma linha especial que aparece no final da tela quando se digita : (dois pontos) no modo escape. Parte dos comandos do modo escape possuem similares no modo last line, como por exemplo os comandos de edição, que veremos mais adiante. Os comandos no modo last line devem ser seguidos por ENTER, contrariamente ao que acontece no modo escape.

Criação e edição de arquivos

Outro guia rápido sobre vi

Para criarmos um arquivo simplesmente digitamos vi seguido do nome do arquivo. Por exemplo:

vi primeiro.arquivo

Após isto será aberto o editor com conteúdo vazio, no modo comando. Para podermos editar qualquer coisa devemos entrar no modo inserção, para isto basta teclarmos <i> (aparecerá -- INSERT -- na base da janela). Em seguida digitamos o texto propriamente dito, usando o teclado normalmente.

Para salvarmos o texto devemos teclar <Esc> (modo comando), <:> (modo last line> e <w> (write). Assim teremos o nosso texto salvo.

Agora vamos a alguns comandos úteis:

  • Copiar algumas linhas do texto: colocamos o cursor no início do texto a ser copiado e, no modo de comando, teclamos <n>+<y>+<y>, onde n é número de linhas que desejamos copiar. Por exemplo se digitarmos <5>+<y>+<y> copiaremos 5 linhas para o buffer.
  • Excluir algumas linhas do texto: colocamos o cursor no início do texto a ser excuído e, no modo de comando, teclamos <n>+<d>+<d>, onde n é número de linhas que desejamos copiar. Por exemplo se digitarmos <3>+<y>+<y> apagaremos 3 linhas do texto mas que serão armazenadas no buffer.
  • Colar o conteúdo do buffer para alguma parte do texto: colocamos o cursor no ponto onde pretendemos inserir o texto e, no modo de comando, teclamos

    (paste) para inserirmos o texto abaixo da linha do cursor e

    para inserir o texto acima da linha do cursor.

  • Encontrar alguma palavra: no modo de comando, teclamos </> <palavra> <Enter>. O vi mostrará a primeira ocorrência da mesma. Para ir para a próxima ocorrência teclamos <n> (next), e para a ocorrência anterior teclamos <p> (previous)
  • Substituir uma palavra por outra: no modo de comando, teclamos <:s/><palavra></><outra><Enter>. Por exemplo se quisermos substituir velha por nova: <:s/><velha></><nova><Enter>, assim teremos a troca da primeira ocorrência de velha por nova. Para substituirmos todas as ocorrências acrescentamos <%> entre <:> e <s> do caso anterior. Exemplo: <:%s/><velha></><nova><Enter>
  • Inserir o conteúdo de um texto externo em nosso texto: no modo de comando, teclamos <:r>+<caminho/arquivo>+<Enter>.
  • Salvar com outro nome: no modo de comando, teclamos <:w>+<novo.nome>+<Enter>.


Uma lista de comandos resumida segue abaixo:

  • 0: vai para o início da linha
  • $: vai para o final da linha
  • gg: vai para a primeira linha
  • G: vai para a última linha
  • :n: vai para a linha n (n é um número)
  • w: vai para a próxima palavra
  • b: vai para a palavra anterior
  • x: apaga um caractere à direita do cursor
  • X: apaga um caractere à esquerda do cursor
  • dd: apaga-se uma linha inteira
  • D: apaga do cursor até o final da linha
  • dw: apaga até a próxima palavra
  • dfs: apaga até a próxima ocorrência do caractere s
  • a: entra-se em inserção uma posição à frente do cursor
  • i: entra-se em inserção uma posição antes do cursor
  • rc: substitui o caractere sob o cursor pelo caractere c
  • cwnova: substitui a palavra a partir do cursor pela palavra nova
  • :w: grava o arquivo
  • :w um_arquivo: grava o conteúdo no arquivo um_arquivo
  • :w! um_arquivo: grava o conteúdo no arquivo um_arquivo, sobrescrevendo-o caso exista
  • :r um_arquivo: lê um_arquivo e insere seu conteúdo a partir do cursor
  • :r!comando: executa comando no shell, e insere seu resultado a partir do cursor
  • :q: sai do vi (termina o editor)
  • :q!: sai do vi, descartando as modificações

Outros editores ?

Há muitos outros editores de texto ! Se tiver curiosidade, faça um pesquisa na Web sobre os editores de texto que existem para o Linux.


Atividade

Usando os três editores faça os seguintes exercícios:

  1. Crie e edite um arquivo contendo seus dados pessoais, de forma que possam ser usados em sua assinatura de email. Salve-o com nome signature.txt.
  2. Edite o arquivo Leiame.txt. Logo após suas duas primeiras linhas (título de seu conteúdo), adicione uma linha com seu nome, matrícula e turma. Salve o arquivo modificado.
  3. Em Leiame.txt acrescente a data de hoje após a última linha.
  4. Em Leiame.txt remova a 2a questão. Apague também a linha em branco logo a seguir. Em seguida renumere as próximas questões, para que fiquem na sequência correta.
  5. Em Leiame.txt localize a 3a ocorrência das palavras "diretorio" ou "diretorios", e remova-a. Localize então a ocorrência imediatamente anterior, e substitua por maiúsculas.
  6. Em Leiame.txt localize as ocorrências da palavra “diretorio”, e substitua por “subdiretorio”, com exceção de quando se referir ao diretório raiz. Salve o arquivo modificado.
  7. Em Leiame.txt, acrescente o resultado da listagem do diretório /home logo após a questão 5.
  8. Salve o arquivo resultante com o nome Leiame2.txt. O arquivo resultante deve ter mais ou menos este conteúdo.

15/06: Compactadores de arquivos

Uma primeira forma de compactar arquivos no Linux é usando o gerenciador de arquivos nautilus. Por exemplo, ra compactar um diretório deve-se selecioná-lo e em seguida chamar o pop-up menu (botão direito do mouse):


Compress1.png


Ao se escolher a opção Comprimir, uma janela irá surgir para que se defina o nome do arquivo compactado e o tipo de compactação a ser usada:


Compress2.png


O arquivo compactado aparecerá na listagem de arquivos do nautilus:


Compress3.png


Para descompactá-lo e visualizar seu conteúdo, basta clicar duas vezes nele:


Compress4.png


Exercício

Obtenha este arquivo, e descompacte-o em algum subdiretório. Em seguida recompacte-o usando os diferentes formatos de compactação.

Compactadores no modo texto

Vários compactadores de arquivos existem no Linux, e o nautilus simplifica sua seleção e uso. Esses compactadores podem ser usados também no modo texto ... aliás, eles originalmente foram criados para serem usados dessa forma ! O que o nautilus faz é facilitar seu uso por meio de uma interface gráfica.

Os principais compactadores são:

  • compress: compactador mais antigo e comum nos Unix em geral, porém em desuso. Gera arquivos compactados com extensão .Z. Precisa do pacote de software ncompress no Ubuntu. Exemplo de uso:
    msobral@dell-iron:~$ ls -l API-changes.txt 
    -rw-r--r-- 1 msobral professores 51759 2010-03-24 11:32 API-changes.txt
    msobral@dell-iron:~$ compress API-changes.txt
    msobral@dell-iron:~$ ls -l API* 
    -rw-r--r-- 1 msobral professores 22781 2010-03-24 11:32 API-changes.txt.Z
    msobral@dell-iron:~$ uncompress API-changes.txt.Z 
    msobral@dell-iron:~$ ls -l API*
    -rw-r--r-- 1 msobral professores 51759 2010-03-24 11:32 API-changes.txt
    msobral@dell-iron:~$
    
  • GNU zip: compactador bastante utilizado, com maior poder de compactação que compress. Gera arquivos compactados com extensão .gz. Já vem instalado no Ubuntu. Exemplo de uso:
    msobral@dell-iron:~$ gzip API-changes.txt
    msobral@dell-iron:~$ ls -l API* 
    -rw-r--r-- 1 msobral professores 17651 2010-03-24 11:32 API-changes.txt.gz
    msobral@dell-iron:~$ gunzip API-changes.txt.gz
    msobral@dell-iron:~$ ls -l API*
    -rw-r--r-- 1 msobral professores 51759 2010-03-24 11:32 API-changes.txt
    msobral@dell-iron:~$
    
  • bzip2: vem sendo bastante usado por ter um poder de compactação ainda maior, porém à custa de maior processamento (compactação fica mais lenta). Gera arquivos compactados com extensão .bz2. Também já vem instalado no Ubuntu.
    msobral@dell-iron:~$ bzip2 API-changes.txt
    msobral@dell-iron:~$ ls -l API* 
    -rw-r--r-- 1 msobral professores 15804 2010-03-24 11:32 API-changes.txt.bz2
    msobral@dell-iron:~$ bunzip2 API-changes.txt.gz
    msobral@dell-iron:~$ ls -l API*
    -rw-r--r-- 1 msobral professores 51759 2010-03-24 11:32 API-changes.txt
    msobral@dell-iron:~$
    
  • ... outros menos populares no mundo do Linux, tais como zip, rar e zoo.

Note que os compactadores compress, gzip, e bzip2 compactam um arquivo por vez. Assim, com eles não é possível juntar vários arquivos e diretórios dentro de um único arquivo compactado (o que se faz corriqueiramente com zip ou rar ...). Portanto, se for necessário compactar um diretório ou um conjunto de arquivos, o melhor é combinar um compactador com o programa tar.

tar

O programa tar é um utilitário do mundo Unix originalmente criado para backups em fita (daí seu nome: TApe aRchiver, se bem que tar é também um trocadilho que pode significar piche, pois ele de certa forma gruda um arquivo ao outro). O resultado da execução do tar é um arquivo contendo todos os arquivos e diretórios que foram selecionados para inclusão. Esse arquivo tar pode ser então compactado, obtendo-se algo parecido com o que faz zip ou rar.

Mas porque não usar então zip e rar ? Afinal, eles existem também no Linux ... No entanto, esses compactadores nasceram no mundo do antigo MS-DOS, e assim não são capazes de armazenar todos os atributos de arquivos que existem em sistemas Unix (informações tais como usuário e grupo dono do arquivo, permissões de acesso, tipo do arquivo, datas de último acesso e modificação). O tar, pelo contrário, consegue preservar esses atributos, e por isto se torna mais adequado para uso no Unix em geral.

Uso do tar:

  • Criação de arquivo tar:
    tar cf nome_arquivo.tar arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
    
  • Mostrar o conteúdo de arquivo tar:
    tar tvf nome_arquivo.tar
    
  • Extrair conteúdo de arquivo tar:
    tar xf nome_arquivo.tar
    

Os usos acima não compactam os arquivos incluídos dentro do arquivo tar. Para compactá-los deve-se adicionar uma opção de compactação:

  • Criação de arquivo tar compactado:
    • Com compress:
      tar cZf nome_arquivo.tar.Z arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
      
    • Com gzip:
      tar czf nome_arquivo.tar.gz arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
      
    • Com bzip2:
      tar cjf nome_arquivo.tar.bz2 arquivo_ou_diretorio1 [arquivo_ou_diretorio2 ...]
      
  • Mostrar o conteúdo de arquivo tar:
    • Com compress:
      tar tvZf nome_arquivo.tar.Z
      
    • Com gzip:
      tar tvzf nome_arquivo.tar.gz
      
    • Com bzip2:
      tar tvjf nome_arquivo.tar.bz2
      
  • Extrair conteúdo de arquivo tar:
    • Com compress:
      tar xZf nome_arquivo.tar.Z
      
    • Com gzip:
      tar xzf nome_arquivo.tar.gz
      
    • Com bzip2:
      tar xjf nome_arquivo.tar.bz2
      

Atividade

Faça os exercícios abaixo usando o nautilus e os compactadores no modo texto:

  1. Procure um arquivo de texto (extensão .txt, .html, ou .doc) com ao menos 100 kB e compacte-o com compress, gzip e bzip2. Compare os tamanhos dos arquivos resultantes.
  2. Usando o programa tar, compacte todo o diretório home do usuário aluno. Experimente criar o arquivo tar sem compactação, e depois compactado com cada um dos compactadores vistos. Você terá portanto como resultado quatro arquivos tar diferentes ...
  3. Descompacte os arquivos tar gerados na questão anterior. Para evitar sobreposição, descompacte cada um deles em um diretório separado.
  4. Resolva a prova que foi aplicada no semestre 2009.2.

29/06: Mais sobre redirecionamentos, pipes, usuários e grupos

Uso de redirecionamentos e pipes. Para entender a utilidade desses recursos, alguns comandos adicionais serão revistos:

  • cut: divide as linhas dos arquivos em colunas, e mostra colunas específicas
  • grep: mostra linhas de arquivos que contenham determinada palavra ou padrão de caracteres
  • sort: ordena as linhas de um arquivo
  • paste: combina linhas de arquivos
  • wc: conta linhas, palavras e caracteres
  • tail: mostra as últimas linhas de um arquivo
  • head: mostra as primeiras linhas de um arquivo
  • du: mostra a utilização de disco de um determinado arquivo ou diretório

Conceitos de usuários e grupos. Comandos relacionados:

  • whoami: mostra quem é o usuário dono do processo atual (que é o shell)
  • users: mostra os usuários logados no sistema
  • who: mostra os usuários logados no msistema, porém com mais informações sobre cada um deles
  • w: mostra o que os usuários logados estão fazendo agora
  • finger: mostra informações sobre um ou mais usuários
  • passwd: muda a senha de um usuário
  • last: mostra o histórico de usuários logados
  • chfn: muda diversas informações de um usuário (aquelas visíveis com finger)
  • groups: grupos a que um usuário pertence

As informações sobre os usuários estão guardadas no arquivo /etc/passwd. Mas podem estar armazenadas também na rede ... As informações sobre os grupos estão guardadas no arquivo /etc/group.

Atividade

  1. Mostre quais os usuários que existem, junto com seus nomes completos (essa informação está no arquivo /etc/passwd)
  2. Repita o item anterior, mas mostrando em ordem alfabética direta e reversa
  3. Repita o ítem anterior, mas mostrando apenas o último usuário em ordem alfabética, e depois o primeiro usuário
  4. Conte quantos usuários têm o nome completo iniciando com a letra 'A'
    # O caractere ^ na frente da palavra faz com o grep a procure somente no início da linha
    cut -d: -f5 /etc/passwd | grep ^A | wc -l
    
  5. Seja um arquivo com o conteúdo abaixo, que contém uma relação de pessoas com alguns dados pessoais (nome, idade, sexo, profissão, residência):
    Joaquim Silva 34 M comerciante Imaruim
    Vanessa Duarte 28 F engenheira Biguaçu
    Manuel Rosa 61 M médico Anitápolis
    Sergio Queiroz 22 M estudante São José
    Diana Marques 37 F advogada Palhoça
    
    1. Ordene-o alfabeticamente pelo nome
    2. Ordene-o numericamente pela idade
      # Imaginando que o arquivo acima se chame dados.txt
      sort -n -k 3 dados.txt
      
      • Desafio: Como se poderia resolver esse problema se os nomes das pessoas tivessem quantidades variáveis de componentes ? Ex:
        Joaquim Koch Silva 34 M comerciante Imaruim
        Vanessa Duarte 28 F engenheira Biguaçu
        Manuel João da Silva Rosa 61 M médico Anitápolis
        Sergio Felipe Queiroz 22 M estudante São José
        Diana Marques 37 F advogada Palhoça
        
        Dica: você poderia modificar as linhas desse arquivo de forma a delimitar claramente onde está a idade de cada pessoa. Se conseguir fazer algo parecido com o mostrado a seguir, o problema seria mais facilmente resolvido:
        Sergio Queiroz: 22 :M estudante São José
        Vanessa Duarte: 28 :F engenheira Biguaçu
        Joaquim Silva: 34 :M comerciante Imaruim
        Diana Marques: 37 :F advogada Palhoça
        Manuel Rosa: 61 :M médico Anitápolis
        
        Veja o programa sed.
        sed -r s/'[0-9]+'/':&:'/ dados.txt | sort -n -k 2 -t : | sed s/://g
        
    3. Mostre somente os dados das mulheres
    4. Conte quantos homens e quantas mulheres há nesse arquivo
      # Mulheres ...
      grep " F " dados.txt | wc -l 
      
      # Homens ...
      grep " M " dados.txt | wc -l
      

      ... ou ...
      # Mulheres ...
      grep -w F dados.txt | wc -l 
      
      # Homens ...
      grep -w M dados.txt | wc -l
      
    5. Mostre os dados da primeira pessoa, de acordo com a ordem alfabética
    6. Mostre os dados da última pessoa, de acordo com a ordem alfabética
  6. Imagine que seu diretório de trabalho está muito cheio, e você quer identificar que arquivos ou subdiretórios estão ocupando mais espaço. Combine os comandos du e sort para descobrir isto.
  7. Conte quantos processos pertencem ao usuário aluno, e quantos pertencem a root.
  8. Sejam dois arquivos como mostrado abaixo. Combine suas linhas e mostre o resultado em ordem alfabética.
    abacaxi
    laranja
    morango
    manga
    goiaba
    limão
    

    graviola
    kiwi
    maracujá
    coco
    pêssgo
    
  9. Sejam dois arquivos como mostrado abaixo. Combine suas linhas e mostre o resultado em ordem alfabética. Mostre também o resultado em ordem de quantidade.
    abacaxi
    laranja
    morango
    manga
    goiaba
    limão
    

    1 kg
    500 g
    100 g
    2 kg
    1 kg
    300 g
    

Avaliação

A avaliação final será composta de trabalhos a serem realizados fora de aula. Os trabalhos envolvem pesquisas sobre assuntos relacionados ao que foi visto em aula. Os temas seguem abaixo:

  1. Shells: quais shells existem para Unix e/ou Linux, e que diferenças há entre eles ? Para cada shell deve ser informado o grupo que o desenvolveu e o ano em que foi criado. No mínimo devem ser identificados 5 shells. Por fim, para cada shell deve-se mostrar como realizar a seguinte tarefa:
    para cada arquivo com extensão .txt ou .csv
       ordene alfabeticamente as linhas desse arquivo
    proximo
    
  2. Sistemas operacionais: usamos em aula o Ubuntu Linux, mas existem outros sistemas operacionais com diferentes graus de semelhança. Entre eles citam-se CentOS, OpenSuSE, Slackware, FreeBSD, OpenBSD. Escolha um deles e instale-o em uma máquina virtual (VirtualBox), deixando-o pronto para uso - incluindo interface gráfica. Escreva um guia de instalação, para que outro colega consiga reproduzir o seu trabalho.
  3. Ambiente integrado de programação (IDE): existem ferramentas para auxiliar no desenvolvimento de programas, chamadas de IDE (Integrated Developmenet Environment). Faça uma busca por ao menos 4 IDEs para linguagem C que rodem no Linux. Para cada IDE encontrado, detalhe:
    • Onde obtê-lo.
    • Como instalá-lo.
    • Que recursos ele possui (ex: edição, compilação, depuração (debug), gerenciamento de projeto, ajuda integrada, controle de versão, e outros que achar interessante).
    • Como compilar e executar um pequeno programa exemplo

Cada aluno deve previamente me informar sua opção.

12/07: Finalização

Trabalho final

Aluno Conceito
Bernardo C
Maycon D*
Romário D*
Theodor D*
Valmir D*
Paulo Igor C
Katia C
Levi D*
Markus D*
Roberto D*
Richard A
Giovani B
Mariana C

Ons: D* = não entregou

Recuperação

Legenda para prova prática: número_da_questão seguido de:

  • T: correta
  • P: parcialmente correta
  • N: incorreta
Aluno Recuperação (prática)
Bernardo D (1-P, 2-T)
Maycon D (não compareceu)
Romário D (1-T, 2-P, 6-P)
Theodor C (1-T, 2-P, 3-P, 5-T, 7-T)
Valmir D (1-P, 2-P)

Conceitos finais

Aluno Prova 1 - teórica Prova 1 - prática Trabalho Conceito final
Bernardo C D C D
Giovanni C C B C
Katia B B C B
Levi C D D D
Mariana B C C C
Markus B D B D
Maycon B D D D
Paulo Igor A C C B
Richard A C A B
Roberto B C D D
Romário B D D D
Theodor A C C C
Valmir A D B D