Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Introdução à Programação de Script-Shell e Manipulação de Arquivos no Linux, Manuais, Projetos, Pesquisas de Competências em Linux

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

2020

Compartilhado em 30/11/2020

luciano-silva-pereira
luciano-silva-pereira 🇧🇷

4 documentos

1 / 86

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Introdução ao LINUX
e
Programação em Script-Shell
Programa de Educação Tutorial
Telecomunicações
PET
TELE )))
Universidade Federal Fluminense
Niterói-RJ
2004
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56

Pré-visualização parcial do texto

Baixe Introdução à Programação de Script-Shell e Manipulação de Arquivos no Linux e outras Manuais, Projetos, Pesquisas em PDF para Competências em Linux, somente na Docsity!

Introdução ao LINUX

e

Programação em Script-Shell

Programa de Educação Tutorial Telecomunicações

PETTELE )))

Universidade Federal Fluminense

Niterói-RJ

2004

Prefácio

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

Sumário

  • 1 Conceitos Gerais Prefácio i
    • 1.1 Introdução ao Hardware
      • 1.1.1 Resolução de problemas X Mapeamento de domínios
      • 1.1.2 Funções lógicas e aritméticas básicas
      • 1.1.3 Implementação de funções matemáticas por circuitos
      • 1.1.4 Computador X Máquina de níveis
    • 1.2 Introdução ao software
      • 1.2.1 Computador X Sistema Operacional
      • 1.2.2 Interface de comunicação com o Sistema Operacional (SO)
      • 1.2.3 Interpretador de comandos (shell ) de um SO
    • 1.3 Família UNIX
      • 1.3.1 Sistemas UNIX
      • 1.3.2 Interfaces do UNIX
  • 2 Introdução ao Linux
    • 2.1 Aspectos básicos do Linux
      • 2.1.1 Startup e shutdown
      • 2.1.2 Abertura de seção no Linux
      • 2.1.3 Usuário, superusuário (root), grupos, acesso, proteção
      • 2.1.4 Sessão, login, password, logout
      • 2.1.5 Consoles virtuais
    • 2.2 Sistema de arquivos
      • 2.2.1 Sistema hierárquico, árvore de diretórios, montagem de ramicações
      • 2.2.2 Tipos básicos de arquivos: plain les, directory
      • 2.2.3 Permissões para acesso a arquivos
      • 2.2.4 Diretórios
    • 2.3 Processos
      • 2.3.1 Processos e subprocessos
      • 2.3.2 Controle de processos
  • 3 Comandos
    • 3.1 Comandos de ajuda
    • 3.2 Comandos e utilitários básicos
      • 3.2.1 Comandos de manipulação de arquivos
      • 3.2.2 Redirecionamento de entrada e saída
    • 3.3 Expressões Regulares e Metacaracteres Sumário Sumário
  • 4 Introdução ao script-shell para LINUX
    • 4.1 Aspectos básicos
      • 4.1.1 Script e Script Shell
    • 4.2 Execução do programa
      • 4.2.1 Erros na execução
      • 4.2.2 Quoting
    • 4.3 Comentários
    • 4.4 Impressão na tela
    • 4.5 Passagem de parâmetros e argumentos
      • 4.5.1 Leitura de parâmetros
    • 4.6 Funções
      • 4.6.1 Execução de script por outro script
    • 4.7 Depuração
  • 5 Manipulação de variáveis
    • 5.1 Palavras Reservadas
    • 5.2 Criação de uma variável
    • 5.3 Deleção de uma variável
    • 5.4 Visualização de variáveis
    • 5.5 Proteção de uma variável
    • 5.6 Substituição de variáveis
    • 5.7 Variáveis em vetores
    • 5.8 Variáveis do sistema
  • 6 Testes e Comparações em Script-Shell
    • 6.1 Código de retorno
    • 6.2 Avaliação das expressões
    • 6.3 Operadores booleanos
    • 6.4 Testes Numéricos
      • 6.4.1 O Comando let
    • 6.5 Testes de Strings
    • 6.6 Testes de arquivos
  • 7 Controle de uxo
    • 7.1 Decisão simples
    • 7.2 Decisão múltipla
      • 7.2.1 O comando case
    • 7.3 Controle de loop
      • 7.3.1 While
      • 7.3.2 Until
      • 7.3.3 For
  • A O Projeto GNU e o Linux
    • A.1 Software Livre

Capítulo 1

Conceitos Gerais

1.1 Introdução ao Hardware

1.1.1 Resolução de problemas X Mapeamento de domínios

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:

  1. Mapeamento do problema real em um problema matemático;
  2. Equacionamento do problema matemático;
  3. Mapeamento do equacionamento em um algoritmo;
  4. Adequação do algoritmo a uma linguagem de programação.

1.1.2 Funções lógicas e aritméticas básicas

É 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

A B AND OR XOR NAND NOR XNOR NOT A

Tabela 1.1: Tabela de Funções Lógicas

1.1.3 Implementação de funções matemáticas por circuitos

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.

1.1.4 Computador X Máquina de níveis

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.

  • Nível 0 - É o hardware da máquina. Consiste nas portas lógicas formando os circuitos.
  • Nível 1 - É o nível onde estão os microprogramas. É o verdadeiro nível de linguagem de máquina. Esses microprogramas interpretam as instruções do nível 2, para o nível 0 executar. (^1) Entende-se por transformação de uma linguagem em outra como tradução ou interpretação.

Universidade Federal Fluminense 3 PETTELE)))

Capítulo 1. Conceitos Gerais 1.3. Família UNIX

1.2.3 Interpretador de comandos (shell ) de um SO

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

1.3.1 Sistemas 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:

  • Décadas de 40 e 50: Todos os computadores eram pessoais quanto a forma de utilização. O usuário reservava um horário para utilizá-lo.
  • Década de 60: Através dos sistemas Batch , o usuário enviava ao centro de processamento de dados um job em cartões perfurados para que esse fosse processado pelo computador. Aproximadamente uma

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.

  • Década de 70: A AT&T, controladora da Bell Labs, insatisfeita com o progresso do MULTICS cortou o projeto e alguns programadores da Bell que trabalharam no projeto, como Ken Thompson, implemen- taram a versão monousuário do MULTICS em linguagem de montagem em um minicomputador, o PDP-7. Brian Kernighan, outro programador da Bell, deu o nome do novo sistema de UNICS como deboche ao nome do sistema anterior. Mais tarde o nome foi mudado para o conhecido UNIX. Em seguinda, o UNIX foi escrito para máquinas do tipo PDP-11. E como era necessário rees- crever o sistema toda vez que ele fosse transportado para outra máquina, Thompson reescreveu o UNIX em uma linguagem de alto nível desenvolvida por ele, a Linguagem B. Para corrigir algumas imperfeições, Denni Ritchie, que também trabalhava na Bell Labs, desenvolveu a Lin- guagem C. Juntos, em 1973, eles reescreveram o UNIX em C. Dessa forma, foi garantida a portabilidade. Em 1974, Thompson e Ritchie publicaram um artigo sobre o novo sistema operacional UNIX, o que gerou um grande entusiasmo no meio acadêmico. Como a AT&T era um monopólio controlado atuante na área das telecomunicações, não foi permitida sua entrada no ramo da computação. Assim, a Bell Labs não colocou objeções para licenciar o UNIX para as universi- dades e empresas. Em 1977 existiam cerca de 500 computadores com UNIX no mundo todo. Pelo fato do UNIX ser fornecido com seu código fonte completo, muitas pessoas passaram a estudá-lo e organizar seminários para trocas de informações, visando a eliminação de Bugs e inclusão de melhoramentos. A primeira versão padrão do UNIX foi denominda Versão 6 pois estava descrita na sexta edição do Manual do Programador UNIX.
  • Década de 80: Com a divisão da AT&T em várias companhias independentes, imposta pelo gorverno americano em 1984, foi possível a criação de uma subsidiária dela no ramo da computação. Então foi lançado pela AT&T a primeira versão comercial do UNIX, o System III, seguida pelo System V , sendo que cada versão era maior e mais complicada que a antecessora. Auxiliada pela DARPA (Defense Advanced Research Projects Agency), a Universidade de Berke- ley passou a distribuir uma versão melhorada da Versão 6, chamada 1BSD (First Berkeley Soft- ware Distribution), seguida pela 2BSD, 3BSD e 4BSD. Esta última possuindo muitos melhora- mentos, sendo o principal, o uso de memória virtual e da paginação, permitindo que programas

Universidade Federal Fluminense 6 PETTELE)))

Capítulo 2

Introdução ao Linux

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

2.1.1 Startup e shutdown

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.

2.1.2 Abertura de seção no Linux

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.

2.1.3 Usuário, superusuário (root), grupos, acesso, proteção

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

2.2.2 Tipos básicos de arquivos: plain les, directory

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:

  • Arquivos comuns: Usados para armazenar dados. Os usuários podem acrescentar dados diretamente em arquivos comuns, como, por exemplo, através de um editor. Os programas executáveis também são guardados como arquivos comuns.
  • Arquivos de diretório: Um arquivo de diretório contém uma lista de arquivos. Cada inserção na lista consiste em duas partes: o nome do arquivo e um ponteiro para o arquivo real em disco. Por outro lado, os diretórios se comportam exatamente como arquivos comuns, exceto pelo fato de que alguns comandos usados para manipulação de arquivos comuns não funcionarem para arquivos de diretório.
  • Arquivos especiais: Estes arquivos são usados para fazer referência a dispositivos físicos como os terminais, as impressoras, os discos. Eles são lidos e gravados como arquivos comuns, mas tais associações causam a ativação do dispositivo físico ligado a ele.

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.

  • hard link : associa dois ou mais lenames como mesmo inode. Os hard links compartilham o mesmo bloco de dados embora funcionando como entradas de diretório independentes.
  • soft link : estes são pointers les que apontam para outro lename no lesystem.

2.2.3 Permissões para acesso a arquivos

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".

  • Proprietário (designado por u, de user ): quem criou o arquivo.
  • Grupo (designado por g, de group): o grupo é formado por um ou mais usuários que podem ter acesso ao arquivo.
  • Outros (designado por o, de others): refere-se a qualquer outro usuário do sistema.

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.

2.2.4 Diretórios

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.

  • Diretório corrente é o diretório em que o usuário se encontra naquele determinado momento.

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

2.3.1 Processos e subprocessos

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.

2.3.2 Controle de processos

Aqui serão apresentados alguns tópicos que permitirão ao usuário realizar algumas tarefas interessantes como:

  • executar mais de um processo ao mesmo tempo;
  • rodar um processo em baixa prioridade.

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)))