














































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Os conceitos básicos de programação de script-shell, abordando a criação e execução de programas, comandos utilizados na construção de scripts, manipulação de variáveis, estruturas de decisão e controle, além de exemplos de aplicação no sistema linux. Além disso, é abordado o uso de comandos para manipulação de diretórios e arquivos no sistema operacional linux.
Tipologia: Manuais, Projetos, Pesquisas
1 / 86
Esta página não é visível na pré-visualização
Não perca as partes importantes!















































































Programa de Educação Tutorial Telecomunicações
PETTELE )))
Universidade Federal Fluminense
Niterói-RJ
2004
O Programa de Educação Tutorial (PET) possui como objetivo maior realizar atividades de pesquisa, ensino e extensão de forma não dissociada, isto é, desenvolver projetos que integrem em si estes três aspectos. Neste contexto, o grupo PET-Tele desenvolve diversas apostilas, não como um m em si mesmas, mas como forma de realizar também outras atividades.
O desenvolvimento dessas apostilas é iniciado com um trabalho de pesquisa sobre o tema escolhido. Após este período inicial, produz-se material didático sobre o assunto, visando transmitir o conheci- mento adquirido para os alunos do curso de graduação e outros interessados. Eventualmente, quando ocorre alguma solicitação, os alunos do grupo fornecem cursos sobre os assuntos abordados na apostila.
Até o momento, as seguintes apostilas estão disponíveis no site do PET:
HTML Linguagem de programação para hipertextos, principalmente empregada na construção de páginas da Internet (webpages).
LaTeX Sistema de edição de texto largamente utilizado em meios acadêmicos e cientícos, bem como por algumas editoras nacionais e internacionais.
LINUX e Script-Shell Introdução ao sistema operacional GNU/Linux e programação em utilizando o shell.
MATLAB Ambiente de simulação matemática, utilizado em diversas áreas prossionais.
SPICE Ambiente de simulação de circuitos elétricos (analógicos e digitais), utilizado em projeto de circuitos discretos e integrados.
Nota desta Apostila
Esta apostila visa introduzir o usuário ao ambiente do sistema operacional Linux da família UNIX- Like, explicando seu sistema de arquivos, seus processos característicos e seus comandos. Além disso, tem por objetivo apresentar programação Script-Shell, ensinando a criar e executar programas, apre- sentando os comandos mais utilizados na construção de scripts, além de manipulação de variáveis, uso de estruturas básicas de decisão e controle e exemplos diversos. A apostila está dividida em 3 partes: O conteúdo da primeira parte abrange um breve histórico, alguns conceitos e características dos Sistemas Operacionais, hardware e software havendo maior destaque para o Sistema Operacional UNIX.
i
Como já foi visto em outras disciplinas, é possível descrever situações através de equações. Por exemplo, na Física, temos as leis da natureza mapeadas por equações, permitindo que antecipemos os resultados. Conhecendo a equação que descreve o problema, que pode estar em um domínio complicado, podemos transportá-la para outro domínio mais simples (que já pode ter uma solução conhecida), onde obtemos resultados que podem ser levados de volta ao domínio inicial. A resolução do problema pode ser denida em quatro etapas:
É possível a representação de todo um sistema numérico utilizando apenas "zeros"e "uns". Chamamos esse sistema de sistema binário e foi desenvolvida com ele uma lógica, a lógica BOOLEANA. Através dela, podemos implementar soluções num domínio de fácil manipulação, uma vez que podemos con- siderar, por exemplo, uma lâmpada acesa como nível lógico '1' e uma apagada como ' 0 '. Do mesmo modo, podemos trabalhar com tensão elétrica:
com tensão - '1'; sem tensão - '0'.
Tabela das funções lógicas:
Capítulo 1. Conceitos Gerais 1.1. Introdução ao Hardware
Tabela 1.1: Tabela de Funções Lógicas
Uma vez conhecida a Lógica Booleana podemos, através da combinação de OR's, AND's, etc, construir circuitos capazes de somar, multiplicar, subtrair, enm, realizar toda e qualquer operação matemática.
Um computador é uma máquina digital capaz de solucionar problemas através de instruções que lhe são fornecidas. Cada computador tem sua linguagem de máquina, que consiste em todas as instruções primitivas que a máquina pode executar. Na verdade, pode ser dito que uma máquina dene uma linguagem e uma linguagem dene uma máquina. Essas instruções mais básicas do computador geralmente se resumem a adicionar, vericar se um número é zero ou mover um dado. E estas são realizadas pelo circuito eletrônico. Seria complicado para um humano escrever um programa com base nestas simples instruções. Uma solução para esse problema é escrever o programa em uma linguagem (que chamaremos de L2) diferente da linguagem de máquina (L1). Então a execução de um programa escrito em L2 deverá acontecer em duas etapas. Primeiro L2 é transformada 1 em L1. Em seguida L1 é executada diretamente. Assim, poderíamos pensar na existência de uma máquina virtual cuja linguagem de máquina é L2. Estentendo esse exemplo, poderiam ser criadas outras linguagens L3, L4, L5, etc..., até atingir um nível de linguagem conveniente ao ser humano. Como cada linguagem utiliza sua anterior como base, podemos pensar no computador como sendo composto por várias camadas ou níveis, uma máquina multinível. Em grande parte dos computadores atuais há cerca de 7 níveis. A seguir há uma breve apresentação de cada um desses níveis. Veja Fig. 1.1.
Figura 1.1: Esquema de níveis de um computador.
Universidade Federal Fluminense 3 PETTELE)))
Capítulo 1. Conceitos Gerais 1.3. Família UNIX
No caso do SO UNIX, o interpretador de comandos é chamado Shell e exerce a função de um programa que conecta e interpreta os comandos digitados por um usuário. É a interface que o usuário utiliza para enviar comandos para o sistema. Dos vários programas Shell existentes, o Bourne Shell, o Korn Shell e o C Shell se destacam por serem os mais utilizados e conhecidos. Mas qualquer programador pode fazer o seu Shell. Estes shells tornaram-se conhecidos pois já vinham com o sistema, exceto o Korn que tinha que ser adquirido separadamente. O Bourne Shell vinha com o System V e o C Shell com o BSD. O Korn Shell é uma melhoria do Bourne Shell. Há também o Bash (Bourne Again Shell ). Mais informações sobre estes shells podem ser vistas no capítulo 4. Os comandos podem ser enviados de duas maneiras para o interpretador: de forma interativa e não-interativa.
Interativa: os comandos são digitados no prompt de comando e passados ao interpretador de co- mandos um a um. Neste modo, o computador depende do usuário para executar uma tarefa ou próximo comando.
Não-interativa: são usados arquivos de comandos criados pelo usuário (scripts) para o computador executar os comandos na ordem encontrada no arquivo. Neste modo, o computador executa os comandos do arquivo um por um e dependendo do término do comando, o script pode checar qual será o próximo comando a ser executado. O capítulo 4 descreve a construção de scripts.
1.3 Família UNIX
O UNIX é um sistema operacional multitarefa, ou seja, permite a utilização do processador entre várias tarefas simultaneamente, multiusuário, disponível para diversos hardwares. Ele possui a capacidade de criar opções especícas para cada usuário, as quais são ativadas quando o usuário se loga ao computador. As raízes do UNIX encontraram-se na necessidade, na década de 70, de um sistema multitarefa conável e aplicável ao ambiente dominante na época, um mainframe (um grande computador central) e uma série de terminais ligados a ele. No meio da programação, costuma-se dizer que o UNIX foi projetado por programadores para programadores já que possui certas características desejadas por eles como o de ser um sistema simples com grande exibilidade.
Histórico do UNIX
Abaixo temos um cronograma da criação do UNIX:
Universidade Federal Fluminense 5 PETTELE)))
Capítulo 1. Conceitos Gerais 1.3. Família UNIX
hora depois da submissão, o usuário podia buscar os resultados de seu programa. Porém, se houvesse algum erro no programa escrito, o usuário só saberia horas depois, perdendo seu tempo. Para resolver esse problema, foi criado um sistema de compartilhamento de tempo, o CTSS, no MIT, onde cada usuário tinha um terminal on-line à sua disposição. Após o CTSS, os Laboratórios Bell com o MIT e a General Eletric começaram um programa grandioso de criar um novo sistema operacional que suportasse centenas de usuários simultane- amente em regime de compartilhamento de tempo (timesharing). Tal sistema foi denominado MULTICS (MULTiplexed Information and Computing Service), que seria multi-usuário, mul- titarefa e teria um sistema de arquivos hierárquico.
Universidade Federal Fluminense 6 PETTELE)))
Diferentemente do que se é levado a pensar, o Linux é uma implementação independente do sistema operacional UNIX. O Linux propriamente dito é um kernel, não um sistema operacional completo. Sistemas completos construídos em torno do kernel do Linux usam o sistema GNU que oferece um shell, utilitários, bibliotecas, compiladores e ferramentas, bem como outros programas como os editores de texto. Por essa razão, Richard M. Stallman, do projeto GNU, pede aos usuários que se reram ao sistema completo como GNU/Linux. No apêndice, há mais informações sobre o projeto GNU. O desenvolvimento do Linux iniciou a partir de um projeto pessoal de um estudante da Univeridade de Helsinki, na Finlândia, chamado Linus Torvalds. Ele pretendia criar um sistema operacional mais sosticado do que o Minix, um UNIX relativamente simples cujo código fonte ele tinha disponível. O Linux obedece ao padrão estabelecido pelo governo norte americano, POSIX. O POSIX é o padrão da API (Application Programming Interface) UNIX, referências para desenvolvedores da família UNIX- like. Desde a apresentação do Linux em 5 de outubro de 1991, por Linus Torvalds, um grande número de pessoas envolvidas com programação começou a desenvolver o Linux. O nome Linux deriva da junção Linus + UNIX = Linux.
Portabilidade
Linux é hoje um dos kernels de sistema operacional mais portados, rodando em sistemas desde o iPaq (um computador portátil) até o IBM S/390 (um massivo e altamente custoso mainframe), embora este tipo de portabilidade não fosse um dos objetivos principais de Linus Torvalds. Seu esforço era tornar seu sistema portátil no sentido de ter habilidade de facilmente compilar aplicativos de uma variedade de fontes no seu sistema. Portanto, o Linux originalmente se tornou popular em parte devido ao esforço para que as fontes GPL ou outras favoritas de todos rodassem no Linux.
Distribuições
O sistema operacional completo (GNU/Linux) é considerado uma Distribuição Linux. É uma coleção de softwares livres (e às vezes não-livres) criados por indivíduos, grupos e organizações ao redor do mundo, e tendo o kernel como seu núcleo. Atualmente, companhias como a Red Hat, a SuSE,a MandrakeSoft ou a Conectiva, bem como projetos de comunidades com a Debian ou a Gentoo, compilam o software e fornecem um sistema completo, pronto para instalação e uso. Além disso, há projetos pessoais como o de Patrick Volkerding que fornece uma distribuição Linux, a Slackware e Carlos E. Morinoto que lançou a distribuição chamada Kurumin. Está última roda em CD, bastando as congurações do computador aceitarem o boot pelo drive do CD.
Capítulo 2. Introdução ao Linux 2.1. Aspectos básicos do Linux
Logo que Linus Torvalds passou a disponibilizar o Linux, ele apenas disponibilizava o Kernel com al- guns comandos básicos. O próprio usuário devia arrumar os outros programas, compilá-los e congurá- los. Para evitar esse trabalho, começou então a disponibilização de programas pré-compilados para o usuário apenas instalar. Foi assim que surgiu a MCC (Manchester Computer Centre), a primeira distribuição Linux, feita pela Universidade de Manchester. Algumas distribuições são maiores, outras menores, dependendo do número de aplicativos e sua nalidade. Algumas distribuições de tamanhos menores cabem em um disquete com 1,44 MB, outras precisam de vários CDs. Todas elas tem seu público e sua nalidade, as pequenas (que ocupam poucos disquetes) são usadas para recuperação de sistemas danicados ou em monitoramentos de redes de computadores. O que faz a diferença é como estão organizados e pré-congurados os aplicativos.
2.1 Aspectos básicos do Linux
Correspondem respectivamente aos procedimentos de ligar e desligar o computador. O primeiro diz respeito basicamente ao fornecimento de energia para o funcionamento dos circuitos eletrônicos da máquina e não requer do usuário grandes precauções. Por outro lado o processo de Shutdown requer cuidado, uma vez que o desligamento inadequado do computador pode causar danos ao sistema ope- racional destruindo as tabelas internas de que ele necessita para funcionar. Quando o computador "trava", portanto, desligá-lo deve ser a última escolha. Uma opção é iniciar outra sessão, vericar onde está o problema e encerrar a sessão travada com um comando apropriado.
Para usar o Linux é preciso em primeiro lugar, que o usuário digite seu nome e sua senha, que são lidos e vericados pelo programa login. No UNIX um arquivo de senha é usado para guardar informações possuindo uma linha para cada usuário, contendo sua identicação alfabética e numérica, sua senha criptografada, seu diretório home, além de outras informações. Quando o usuário se identica, o programa login criptografa a senha que acabou de ser lida do terminal e a compara com a senha do arquivo de senhas para dar permissão ao usuário. Esse arquivo com as informações dos usuários normalmente é encontrado no arquivo: /etc/passwd. As senhas criptografadas cam no arquivo /etc/shadow.
O princípio da segurança do sistema de arquivo UNIX está baseado em usuários, grupos e outros usuários.
Usuário : é a pessoa que criou o arquivo. O dono do arquivo.
Grupo : é uma categoria que reúne vários usuários. Cada usuário pode fazer parte de um ou mais grupos, que permitem acesso a arquivos que pertencem ao grupo correspondente. Por padrão, o grupo de usuários inicial é o mesmo de seu nome de usuário. A identicação do grupo é chamada de gid (group id ).
Outros : é a categoria de usuários que não se encaixam como donos ou grupos do arquivo.
Universidade Federal Fluminense 9 PETTELE)))
Capítulo 2. Introdução ao Linux 2.2. Sistema de arquivos
Os arquivos são onde os dados estão gravados. Um arquivo pode conter um texto, uma música, programa, etc. Todo sistema UNIX reconhece pelo menos três tipos de arquivos:
O Linux é case sensitive, ou seja, ele diferencia letras maiúsculas e minúsculas nos arquivos. O diretório, como qualquer outro arquivo, também é case sensitive. Em um mesmo diretório, não podem existir dois arquivos com o mesmo nome ou um arquivo com mesmo nome de um subdiretório. Os diretórios no Linux são especicados por uma "/". OBS: Estamos habituados a ver os nomes de arquivos como sendo: nome.ext, onde ext é a extensão do tipo de arquivo, por exemplo .txt, .html, .doc. Porém, no Linux os nomes não precisam seguir essa regra. Os nomes podem podem ser formados por várias extensões, como: lista.ord.txt, nomes.maius.classe, livros.meu.ord.txt. O Linux organiza seu lesystem através de inodes. Inodes são estruturas de dados em disco que descrevem e armazenam os atributos do arquivo, incluindo sua localização. Campos de um inode: user, group, tipo do arquivo, tempo de criação, acesso, modo (modicação), número de links, tamanho e endereço no disco. Existem mecanismos que permitem que vários lenames reram-se a um único arquivo no disco. Esses mecanismos são os links. Existem dois tipos de links: hard link (ou simbólico) ou soft link.
O sistema UNIX fornece um meio fácil de controlar o acesso que os usuários do sistema possam ter aos três tipos de arquivos. Isso é feito para permitir ou restringir o acesso a arquivos importantes do sistema e para garantir a privacidade de cada usuário que possua uma conta no sistema. O sistema diferencia três classes de usuários. Primeiro, todo arquivo possui um dono, um proprietário, designado no sistema por user. O proprietário tem controle total sobre a restrição ou permissão de acesso ao arquivo a qualquer hora. Além da posse individual do arquivo, é possível que um ou mais usuários do sistema possuam o arquivo coletivamente, em um tipo de propriedade de grupo. O usuário que não for proprietário do arquivo pode ter acesso a ele caso pertença ao grupo de usuários que tem permissão
Universidade Federal Fluminense 11 PETTELE)))
Capítulo 2. Introdução ao Linux 2.2. Sistema de arquivos
para isso. Porém esse usuário não pode restringir ou permitir o acesso ao arquivo. Os usuários que não são nem proprietários nem pertençam a um grupo que tenha acesso ao arquivo formam a última categoria, conhecida simplesmente como "outros".
O sistema Unix permite ainda três modos de acesso aos arquivos: leitura, escrita e execução. Os três modos de acesso são relativamente lógicos, porém o signicado desses três modos de acesso é diferente para arquivos de diretórios. O usuário com permissão de leitura pode ler o conteúdo do diretório, por exemplo com o comando "ls". O usuário com permissão de escrita pode usar alguns programas privilegiados para gravar em um diretório. A permissão de gravação é necessária para criar ou remover arquivos do diretório. Um usuário deve ter permissão de execução em um diretório para ter acesso aos arquivos ali alocados. Se um usuário tem permissão para leitura e escrita em um arquivo comum que está listado em um diretório mas não tem permissão de execução para aquele diretório, o sistema não o deixa ler nem gravar o conteúdo daquele arquivo comum. Assim temos:
Figura 2.1: Permissões de Arquivos
Um arquivo que tiver suas permissões como as do exemplo acima poderia ser lido, escrito ou executado pelo dono ou por qualquer outra pessoa. Já no exemplo abaixo, o dono poderá ler e escrever, os outros só poderão ler e ninguém poderá executá-lo.
User Group Others r w - r - - r - -
Para alterar essas permissões, utliza-se o comando chmod. Veja explicação do uso desse comando no próximo capítulo.
Chamamos de árvore de diretórios à organização dos arquivos de diretórios, fazendo uma alusão às suas ramicações, semelhantes aos galhos de uma árvore. Damos o nome de "raiz " ao diretório principal que contém todos os outros subdiretórios.
Universidade Federal Fluminense 12 PETTELE)))
Capítulo 2. Introdução ao Linux 2.3. Processos
/proc - Diretório virtual onde o kernel armazena suas informações.
/boot - Contém a imagem do kernel e tudo o que for necessário ao processo de boot, menos con- gurações.
2.3 Processos
Um processo é um simples programa que está rodando em seu espaço de endereçamento virtual próprio. É distinto de um 'job' ou comando, que, em sistemas UNIX, pode ser composto de muitos processos realizando uma única tarefa. Comandos simples como `ls' são executados como simples processos. Um comando composto, contendo pipes, irá executar um processo por segmento pipe. Para acompanhar o status de cada processo o sistema cria um PID (Process ID) para cada processo aberto. Existem elementos chamados guias de controle de execução que ajudam a controlar a execução do programa.
Fork : é a chamada de sistema cuja execução cria um processo (lho) idêntico àquele que o chamou.
Processo pai : processo que gera um novo processo.
Processo lho : Processo gerado pelo processo pai.
Pid (Process ID) : é um número que identica unicamente cada processo e é usado para referir-se a ele.
PPid (Parent Process ID) : é o Pid do processo pai.
Aqui serão apresentados alguns tópicos que permitirão ao usuário realizar algumas tarefas interessantes como:
Se você estiver usando um programa que irá demorar muito para terminar e você quer começar a trabalhar em outra tarefa você pode chamar seu programa para ser executado no que é conhecido como segundo plano (background ). Isso pode ser feito colocando no nal da linha de comando o símbolo `&'. Pode-se também, enquanto o programa está sendo executado, teclar CTRL + Z. Com isso o comando será suspenso e o sistema largará o prompt. Chamamos de foreground o ato de fazer com que um programa rode em primeiro plano. Neste modo os processos podem interagir com os usuários e exibem a execução no monitor. Quando o comando nice é colocado antes de uma linha de comando, o tempo dedicado pela CPU para execução daquela tarefa é reduzido, fazendo com que ele não atrase tanto outros processos mais importantes. Ou seja, a prioridade daquele processo é reduzida. Esse comando deve ser usado quando há outros processos mais importantes rodando no sistema.
Universidade Federal Fluminense 14 PETTELE)))
Capítulo 2. Introdução ao Linux 2.3. Processos
Outros comandos relacionados a processos:
jobs lista os jobs em background.
fg [job] leva o job para foreground.
bg [job] leva o job para background.
ps mostra os processos que estão sendo rodados no computador.
top mostra continuamente o status de cada processo que está rodando no computador.
kill [Pid] encerra o processo.
O exemplo abaixo ilustra o uso de alguns desses comandos. Existe o seguinte script rodando no sistema:
#!/bin/bash
#Aviso
sleep 10m echo Tá na Hora de Sair!! date
Este programa emite um aviso após 10 minutos de ter sido colocado para rodar, em seguida mostra a data e a hora. Não teria sentido deixar esse programa rodando travando o terminal enquanto você poderia estar fazendo outras coisas, então ele pode ser colocado em background para liberar o terminal. Após 10 minuntos a mensagem aparece. O programa se chama trava.sh.
$ ./trava.sh & [1] 2906 $ jobs [1]+ Running ./trava.sh & $ ps PID TTY TIME CMD 1916 ttyp1 00:00:00 bash 2906 ttyp1 00:00:00 trava.sh 2907 ttyp1 00:00:00 sleep 2909 ttyp1 00:00:00 ps $ $ fg 1 ./trava.sh aqui foi digitado: ctrl + z [1]+ Stopped ./trava.sh $ jobs [1]+ Stopped ./trava.sh $ jobs
Universidade Federal Fluminense 15 PETTELE)))