Curso de extensão em Administração de redes com GNU/Linux

60 

Loading.... (view fulltext now)

Loading....

Loading....

Loading....

Loading....

Texto

(1)

Curso de extensão em Administração de redes com GNU/Linux

Italo Valcy - italo@dcc.ufba.br

Gestores da Rede Acadêmica de Computação Departamento de Ciência da Computação

(2)

Notas de autoria: Parte do conteúdo desta apresentação foi baseado nos slides de Amadeu Júnior (amadeu@gmail.com) em seu curso "Curso Iniciante em GNU/Linux" datado de Abril/2006 como extensão universitária da UFBA.

Temos, ainda, uma série de referęncias no final deste documento que indicam locais de consulta utilizados na confecção deste material.

Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da:

Creative Commons License:

(3)

Assuntos abordados

O mundo GNU/Linux

Introdução ao Shell do GNU/Linux

(4)
(5)

O Mundo GNU/Linux

Iniciado em 1984 (Free Software Fundation)

GNU é um acrônimo recursivo para GNU Não é Unix GPL (Licença Pública GNU): Inversão da lógica de propriedade - “Copyleft”

Linux foi criado em 1991, por Linus Torvalds

O Linux é somente o núcleo do sistema, que integrado às camadas de mais alto nível passam a integrar o

sistema GNU/Linux

(6)

O Mundo GNU/Linux

GPL - GNU Public License

As quatro liberdades defendidas pela FSF para os usuários de software:

A liberdade de executar o programa para qualquer propósito.

Estudar como o programa funciona e adaptá-lo às suas necessidades. O acesso ao código-fonte é pré-requisito para essa liberdade.

Redistribuir cópias de modo que você possa ajudar a seu próximo

Aperfeiçoar o programa e liberar seus aperfeiçoamentos, de modo que toda a comunidade se beneficie. O acesso ao código-fonte também é um pré-requisito neste caso.

(7)

O Mundo GNU/Linux

Distribuições GNU/Linux

Dado o modelo descentralizado de desenvolvimento do kernel e dos aplicativos, surge um diferenciamento na forma como se distribui o S.O. com as ferramentas GNU. Assim surge o conceito de distribuição.

Peculiaridades:

Metodologia de instalação de aplicativos

Disponibilização dos aplicativos por categorias Seleção dos aplicativos mais utilizados

Organização da estrutura de diretórios Organização da inicialização do sistema

(8)

O Mundo GNU/Linux

Distribuições GNU/Linux

Geralmente cada distribuição tem uma especialidade

(9)

O Mundo GNU/Linux

Qual escolha tem sido tomada na Rede DCC?

Em um ambiente de rede de computadores, a diversidade descontrolada de tantas variáveis sobre a organização do sistema operacional dificulta a tarefa de administração. Nesse sentido, deve ser preferível uma distribuição que forneça devido suporte ao usuário.

Ao mesmo tempo, a escolha não deve ser meramente técnica, uma vez que a ideologia de manutenção de pacotes, a longo prazo, se torna importante.

Desde 2001, os administradores os administradores da rede DCC, vêm adotando Debian GNU/Linux, uma comunidade de voluntários.

(10)

O Mundo GNU/Linux

Por que Debian GNU/Linux?

O esforço dos voluntários não deve ser erroneamente confundido com descomprometimento e desorganização.

O processo de desenvolvimento do Debian levemente hierarquizado, mas garante através de seu contrato social que:

O Debian permanecerá 100% livre

Nós iremos retribuir à comunidade de software livre Nós não esconderemos problemas

Nossas prioridades são nossos usuários e o software livre

Suportamos programas que não atendam nossos padrões de software livre de maneira peculiar e isolada.

(11)

O Mundo GNU/Linux

Arquitetura básica do GNU/Linux

(12)

O Mundo GNU/Linux

Arquitetura básica do GNU/Linux

Kernel → Linux

Software parte do S.O que implementa as principais funcionalidades do sistema.

(13)
(14)

Introdução ao Shell do GNU/Linux

O que é shell?

Shell: é o "prompt" da linha de comando do Unix e Linux, ele recebe os comandos digitados pelo usuário e os executa.

O shell lê o comando que o usuário teclou e converte-o em uma forma mais simplificada e legível para o Unix, aumentando o desempenho.

Pode ser utilizado como linguagem de programação. Conhecimento de shell é essencial para os sysadmins unix-like.

(15)

Introdução ao Shell do GNU/Linux

Tarefas do shell

Exame da linha de comando recebida (comandos, atribuições)

Resolução de redirecionamentos (stdin, stdout, stderr) Substituição de variáveis ( parâmetros do tipo $[a-zA-Z0-9_]*)

Substituição de meta-caracteres (*, ? ou [ ]) Passa a linha de comando para o kernel

(16)

Introdução ao Shell do GNU/Linux

Principais Shells

Bourne Shell (sh): Shell padrão no Unix, presente na maioria das distribuições Unix-like.

Bourne-Again Shell (bash): Shell padrão no Linux, quase 100% compatível com o sh.

Korn Shell (ksh): Considerado um upgrade do sh. Tem atraído programadores de Shell no Unix.

C Shell (csh): Como o ksh, contempla diversos

aspectos não implementados no sh. Estrutura parecida com a linguagem C.

(17)

Introdução ao Shell do GNU/Linux

Usando o terminal

Interface de modo texto presente em todos os sistemas operacionais

Evoluiu junto à interface gráfica no GNU/Linux

Proporciona praticidade para fazer algumas tarefas (muitas)

(18)

Introdução ao Shell do GNU/Linux

Comandos do prompt

man: Contém informações do manual de cada comando,

com todos os parâmetros suportados e exemplos.

Sintaxe: man comando, por exemplo: man ls É possível especificar sessões para o manual

1 – Executáveis e comandos do shell 2 – Chamadas de sistema

5 – Formato de arquivos e conveções

Exemplo: man passwd é diferente de man 5 passwd

(19)

Introdução ao Shell do GNU/Linux

Comandos do prompt

cd: Utilizado para navegar entre diretórios.

Sintaxe: cd diretorio, por exemplo: cd /tmp/pasta Para acessar o diretório acima: cd ..

Para voltar ao home do usuário: cd Para qual o diretório atual: pwd

ls: Utilizado para listar o conteúdo de diretórios.

Sintaxe: ls [dir], por exemplo: ls ou ls /tmp/

Diferenciar cores dos arquivos: ls --color=auto [dir] Exibir detalhes dos arquivos: ls -l [dir]

Exibir arquivos ocultos: ls -a [dir]

(20)

Introdução ao Shell do GNU/Linux

Comandos do prompt

cp: Utilizado para copiar arquivos.

Sintaxe: cp origem destino, exemplo: cp arq.txt /tmp/ Copiar para o diretório atual:

cp /mnt/cdrom/video.avi ./

Copiar um diretório completo: cp -r diretorio destino

mv: Move arquivos de um lugar para o outro e renomeia

arquivos.

Sintaxe: mv origem destino,exemplo: mv arq.txt /tmp/

Renomear arquivos: mv arquivo1.txt arquivo2.txt Você pode usar o mv em diretórios

(21)

Introdução ao Shell do GNU/Linux

Comandos do prompt

pwd: Exibe o diretório atual.

mkdir: Utilizado para criar novos diretórios.

Sintaxe: mkdir diretorio..

exemplo: mkdir /tmp/testes

Criar pastas recursivamente: mkdir -p /tmp/p1/p2/p3

rmdir: Utilizado para remover pastas vazias.

Sintaxe: rmdir pasta_vazia, exemplo rmdir /tmp/testes

rm: Remover arquivos e diretórios, de acordo aos parâmetros

passados.

Sintaxe: rm arquivo1 ...

(22)

Introdução ao Shell do GNU/Linux

Comandos do prompt

Existem dois tipos especiais de nomes de diretórios

utilizados para a navegação na estrutura de diretórios do Linux:

Ponto (.), que significa o diretório corrente

Dois pontos (..), que significa um nível acima do

diretório atual.

Por exemplo, supondo “pwd = /home/joao”, o caminho ../italo/books é o mesmo que /home/italo/books

O diretório que fica um nível imediatamente acima do diretório corrente é chamado diretório-pai.

(23)

Introdução ao Shell do GNU/Linux

Comandos do prompt

locate: Permite localizar arquivos de forma instantânea. Não

procura o arquivo em todo o HD, invés disso usa um banco de dados.

Exemplo: locate arquivo.txt

Atualizar o bando de dados: updatedb Para buscar por executáveis: which

O locate busca por arquivos que contêm a string passada.

Por exemplo, para achar books e school:

(24)

Introdução ao Shell do GNU/Linux

Comandos do prompt

O comando find procura o arquivo desejado na árvore hirerárquica.

Sintaxe: find [caminho] [opcoes]

Pode demorar algum tempo para retornar o resultado da busca, que começa no diretório-raiz e passa por todos os subdiretórios.

As principais opções são:

-name nome: procura arquivos pelo seu nome. -type c: procura arquivos pelo seu tipo: l, d, f, s.

-user username: procura por arquivo que pertençam à username.

(25)

Introdução ao Shell do GNU/Linux

Comandos do prompt

Exemplos: buscar arquivo no /home que...

Tenham nome igual à “*.mp3”: find /home -name '*.mp3'

Pertençam ao usuário fulano: find /home -user fulano

Tenham permissão de execução para o dono: find /home -perm -u=x

Sejam links:

(26)

Introdução ao Shell do GNU/Linux

Comandos do prompt

O comando touch é utilizado para atualizar os horários de acesso e de modificação de um arquivo existente.

Caso este arquivo não exista, será criado na data e hora especificadas no comando.

Sintaxe: touch [opcoes] arquivo

Se não forem especificadas data e hora, o sistema utilizará a data atual.

Podemos criar arquivos ao editar um arquivo

inexistente, por intermédio de editores de texto do

Linux.

(27)

Introdução ao Shell do GNU/Linux

Comandos do prompt – Exercício 1

Acesse seu diretório de trabalho e crie o arquivo “exemplo1” vazio.

Crie um arquivo chamado “exemplo2” com algumas linhas de dados enviadas pelo teclado.

Faça com que o arquivo vazio tenha o mesmo conteúdo do segundo.

Edite o segundo e altere seu conteúdo.

(28)

Introdução ao Shell do GNU/Linux

Comandos do prompt – Exercício 2

Crie um diretório “exemplos” em um subdiretório “temp” do seu diretório “home”. Utilize apenas um comando para isso.

Mova os arquivos “exemplo1” e “exemplo2”, do exercício anterior, para o diretório “exemplos”, deixando uma cópia do segundo em seu diretório de origem.

(29)

Introdução ao Shell do GNU/Linux

Atributos de arquivos

O linux mantém as seguintes informações sobre os arquivos:

Nome: Nome do arquivo;

Localização: Local de armazenamento do arquivo no disco; Tamanho: Tamanho do arquivo em bytes;

Ligações: Nomes pelos quais o arquivo é conhecido; Propriedade: Usuário que é o dono (owner) do arquivo; Grupo: Grupo de usuários que acessa o arquivo

Tipo: Tipo do arquivo

Criação: Data e hora de criação do arquivo;

Modificação: Data e hora da última modificação do arquivo Acesso: Permissões de acesso ao arquivo

(30)

Introdução ao Shell do GNU/Linux

Atributos de arquivos Informações do comando ls -l: Tipo de arquivo - : significa arquivo d: significa diretório l: link simbólico s,b,c,p: arquivos especiais Permissões de acesso Número de links do arquivo Dono do arquivo Grupo de usuários Tamanho em bytes Data da última

modificação Nome do arquivo

­rw­r—­r­­  1  italo  users  9  Mar 8 18:48  arquivo1.txt drwxr­xr­x  2  italo  users  48 Mar 8 18:48  diretorio

(31)

Introdução ao Shell do GNU/Linux

Atributos de arquivos

Permissões ou modos de acesso:

Modo

r Listar o conteúdo Ler conteúdo w

x Executar

Operações sobre

diretório Operações sobre arquivos Criar e renomear diretórios e arquivos Alterar o conteúdo Acessar arquivos e subdiretórios

rwx rwx rwx

Permissões do grupo

(32)

Introdução ao Shell do GNU/Linux

Atributos de arquivos

Permissões ou modos de acesso:

Dono (owner): Proprietário do arquivo

Grupo (group): Grupo ao qual o dono pertence

Outros (others): Usuários que não fazem parte do grupo Comandos para manusear permissões:

Mudar o dono do arquivo:

# chown novodono[:novogrupo] arquivo

Mudar o grupo

# chgrp novogrupo arquivo

Mudar permissões do arquivo

(33)

Introdução ao Shell do GNU/Linux

Atributos de arquivos

Cada dígito binário corresponde a uma letra: r,w,x

0 = ausência de letra ou negação de permissão 1 = concessão de permissão

São três números de três dígitos binários (000=0 e

111=7). Um número para o dono, um para o grupo e um para outros.

Exemplo:

$ chmod 764 arquivo

Onde:

7 = Permite rwx para owner (u) 6 = Permite rw para group (g)

rwx rw-

r--111 = 7 100 = 4 110 = 6

(34)

Introdução ao Shell do GNU/Linux

Atributos de arquivos

Permissões especiais

s: Seleciona o usuário ou identificação de grupo durante

a execução. Também chamado de bit setuid. Quando marcado ao grupo torna efetiva a sua identificação, sendo chamado de bit setgid. Ao ser aplicado à diretórios, força que os arquivos criados dentro dele pertençam ao mesmo grupo do diretório, ao invés do grupo primário que o usuário pertence.

Como utilizar:

chmod u+s arquivo # setuid chmod g+s arquivo # setgid

(35)

Introdução ao Shell do GNU/Linux

Atributos de arquivos – Exercício 3

Utilizando os conceitos vistos sobre usuários, grupos, permissões de arquivos e pastas,além dos comandos básicos de shell, monte o seguinte ambiente de trabalho.

Vamos criar uma série de pastas para alocar arquivos com listas de filmes, sendo que precisamos ter:

Um diretório filmes de forma que todos os usuários do grupo

users tenham permissão de gravar, ninguém deve poder gravar na

pasta

Um subdiretório terror do grupo suporte de forma que se qualquer pessoa colocar novo arquivo será registrado como sendo do grupo

suporte e não do grupo users.

(36)

Introdução ao Shell do GNU/Linux

Atributos de arquivos – Exercício 4

Vamos criar uma estrutura de pastas para um subsistema

GNU/Linux (chroot) que será utilizado para conexões SFTP. Esse sistema deve possuir:

Um diretório para binários (bin), um para bibliotecas do sistema (lib), e outro para arquivos de configurações (etc), outros usuários devem ter permissão para execução e leitura somente no diretório de binários;

Um diretório home, onde os usuários do grupo users tenham permissão para ler, escrever e executar.

Diretórios home/professores e home/aluno, de forma que somente os usuários do grupo professores e do grupo alunos possam escrever em seus respectivos diretórios, mas um grupo não possa navegar nas pastas do outro grupo.

Um diretório tmp com total acesso, porém ninguém além do próprio dono do arquivo possa apagá-lo.

(37)

Introdução ao Shell do GNU/Linux

Atributos de arquivos – Exercício 4 (solução)

mkdir /tmp/chroot

cd /tmp/chroot mkdir bin lib etc

chmod o-rwx lib etc mkdir home

chgrp users home

chmod g+rwx,o-rwx home

mkdir home/professores home/alunos chgrp alunos home/alunos

chgrp professores home/professores

chmod g+rwx,o-rwx home/professores home/alunos chmod g+s home/professores home/alunos

mkdir tmp

(38)

Introdução ao Shell do GNU/Linux

Arquivo padrão: entrada, saída e erros

Os programas utilitários ou comandos do Linux desempenham funções simples e bem definidas.

Os comandos obtêm dados como entrada, executam o processamento e fornecem resultados como saída.

Ao comando são atribuídos três arquivos-padrão:

Entrada padrão: do qual o programa recebe os dados de entrada

Saída padrão: recebe a saída do programa

Erro: recebe quaisquer mensagens de erros ocorridas na execução do comando.

O shell atribui, automaticamente, os três arquivos-padrão ao terminal do usuário.

(39)

Introdução ao Shell do GNU/Linux

Arquivo padrão: entrada, saída e erros

Quando o programa

solicita

entrada,

ela vem do teclado

do

terminal

e,

quando

produz

saída

ou

mensagens

de

erro,

elas

são

mostradas na tela

do terminal de

(40)

Introdução ao Shell do GNU/Linux

Arquivo padrão: entrada, saída e erros

Podemos redirecionar a entrada de um arquivo usando o operador <. Exemplo: ./consulta < clientes.txt

A saída padrão pode ser modificada, bastando utilizar o operador >. Exemplo: ls > saida-ls.txt

O arquivo de erros padrão é a tela do monitor. Para armazenar os erros em um arquivo para análise posterior, utilizamos o operador 2>.

Exemplos:

Saída-padrão sobrepõe o arquivo: comando > arquivo Saída-padrão anexa ao arquivo: comando >> arquivo Erro-padrão sobrepõe o arquivo: comando 2> arquivo Erro padrão anexa ao arquivo: comando 2>> arquivo Saída e erro padrão sobrepõe o arquivo:

comando > arquivo 2>&1

(41)

Introdução ao Shell do GNU/Linux

Arquivo padrão: entrada, saída e erros - Exercício

Executamos o comando ls -R /etc, como usuário

não-privilégiado, e precisamos adicionar sua saída ao arquivo

saida-ls.txt e os erros ao arquivo erros-ls.txt. Como

fazer isso em um único comando?

Execute dois terminais virtuais. Pressione Ctrl+Alt+F1 para acessar o primeiro e Ctrl+Alt+F2 para acessar o

segundo, esteja autenticado em ambos. Agora execute o seguinte comando no primeiro terminal:

ls /tmp > /dev/tty/2 Qual o resultado?

(42)

Introdução ao Shell do GNU/Linux

Pipe ou canalização

Os utilitários do Linux desempenham funções

específicas. Tarefas complexas são realizadas pela combinação de utilitários.

Um pipe é usado para executar uma sequência de

comandos, passando a saída padrão de um comando

diretamente a outro comando, que a usará como entrada padrão.

(43)

Introdução ao Shell do GNU/Linux

Pipe ou canalização

Canalização de vários comandos. Funciona como um só programa.

Comando1 Comando 2 Comando 3 Comando 4

Entrada padrão

Saída padrão

(44)

Introdução ao Shell do GNU/Linux

Pipe ou canalização

Exemplo: Colocar os clientes em ordem numérica e mostrar suas informações por meio do programa

consulta na tela do monitor: sort numeros.txt > temp ./consulta < temp

O mesmo resultado pode ser conseguido

utilizando um pipe:

(45)

Introdução ao Shell do GNU/Linux

Pipe ou canalização

O pipe permite que vários comandos sejam conectados, criando um fluxo de dados com o mesmo efeito da

execução de um programa que contém várias instruções.

Para preservar a saída de um comando no interior de uma canalização, utilizamos o comando tee como parte da canalização.

O comando tee copia as linhas do arquivo de entrada

padrão para um arquivo de saída padrão e também para um arquivo fornecido como parâmetro.

No exemplo anterior, para salvar os dados em um arquivo temp, faríamos:

(46)

Introdução ao Shell do GNU/Linux

Pipe ou canalização – Exercício 5

Como devemos fazer para exibir a saída do comando

ls -l /etc pausadamente na tela?

Dica: o comando less é capaz de ler um arquivo e exibi-lo pausadamente na tela.

Desejamos saber quantos arquivos em nosso sistema

terminam com a extensão .conf e também salvar o nome desses para que possamos fazer backup deles no futuro. Como podemos fazer isso usando apenas uma linha de comando?

Dica: o comando wc -l conta o número de linhas em um arquivo ou da entrada padrão.

(47)

Programação Shell Script

(primeiros passos)

(48)

Programação Shell Script

Quando usar o Shell?

Quais problemas podem ser resolvidos utilizando a programação em Shell?

Quais problemas não podem ser resolvidos utilizando a programação em Shell?

Qual a diferença entre um shell script e uma linha de programação como C, C++, Java?

(49)

Programação Shell Script

Escrevendo scripts

Um script é basicamente uma sequência de comandos. Os comandos podem ser separados por um ponto e

vírgula (;) ou por quebra de linha.

Um arquivo contendo um script traz, na primeira linha a seguinte string:

(50)

Programação Shell Script

Escrevendo scripts

Tanto espaços em branco quanto tabulações antes dos comandos são ignorados.

Comentários são iniciados com o caractere # e se estendem até o fim da linha, conforme exemplo:

#!/bin/bash

# isso eh um comentario

(51)

Programação Shell Script

Variáveis em Shell

Nome dado ao espaço de memória que armazena um valor.

O nome da variável é escolhido pelo programador. Não é necessário declaração prévia.

Tipos suportados: Inteiro

Decimal String Vetor

(52)

Programação Shell Script

Variáveis em Shell

Para criar uma variável, basta atribuir-lhe um valor:

#!/bin/bash

minha_variavel=”hello world” echo $minha_variavel

(53)

Programação Shell Script

Variáveis em Shell

X=14 # funciona

X=teste # funciona

X=varias palavras # não funciona :(

X=”varias palavras” # agora sim! :)

Y=”$X unidades” # $X será substituído pelo valor de X Y='$X unidades' # $X não será substituído

Como atribuir a saída de um comando a uma variável?

(54)

Programação Shell Script

Escopo das variáveis

O que é escopo? Onde é utilizada uma variável criada em um script?

Variáveis locais: somente no script

Variáveis de ambiente: em todo o ambiente Shell

X=1 # X é local

export X # X agora é variável de ambiente

exporte Y=”/srv/books” # variável de ambiente

(55)

Programação Shell Script

Parâmetros

O que é um parâmetro ou argumento?

cp -R origem destino invoke-rc.d ssh restart

Variável especial contém o argumento: $<n>

./meu_script.sh cpu 1 verde $0 → ./meu_script.sh

$1 → cpu $2 → 1

(56)

Programação Shell Script

Parâmetros

Outras variáveis de parâmetros:

$@: Contém todos os parâmetros passados a partir de

$1. Trata-os como uma lista.

$#: Contém o número de parâmetros passados

$$: Número PID do processo atual (do próprio script) $_: Último argumento do último comando executado $?: Código de retorno do último comando executado

(57)

Programação Shell Script

Exercício 6

Crie um script que recebe como parâmetro um diretório e lista a quantidade de arquivos dentro daquele diretório (incluindo subdiretórios, se for o caso). Exemplo:

./conta_arquivos.sh /etc

O diretório /etc contém 3214 arquivos.

./conta_arquivos.sh /boot

O diretório /boot contém 106 arquivos.

./conta_arquivos.sh documentos

(58)

Programação Shell Script

Exercício 7

Crie um script que recebe como parâmetro uma string, digamos expr, um diretório, digamos source, e outro diretório, target. O script deverá procurar por arquivos

que contenham o padrão expr no seu nome e estejam no diretório source. Todos os arquivos encontrados devem ser copiados para a pasta target, a qual deve ser criada se não existir.

(59)
(60)

Referências

http://homes.dcc.ufba.br/~amadeu/extensao-basico/img0.html http://aurelio.net/shell/canivete.html

Imagem

temas relacionados :