A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Introdução ao UNIX do ponto de vista do Utilizador

Apresentações semelhantes


Apresentação em tema: "Introdução ao UNIX do ponto de vista do Utilizador"— Transcrição da apresentação:

1 Introdução ao UNIX do ponto de vista do Utilizador

2 Famílias de Sistemas Operativos
Para computadores “normais”, actualmente, existem duas grandes famílias de Sistemas Operativos: MS Windows (Windows XP, Windows Server 2003) Sistemas Unix (Linux, Solaris, FreeBSD, MacOS X) Linux Windows XP

3 Sistema Linux Criado por Linus Torvalds Filosofia “Open-Source”
Todo o código fonte está disponível É completamente gratuito Todas as pessoas podem contribuir Extremamente poderoso, rápido e escalável Tipicamente utilizado em “máquinas servidor” Por exemplo, o “google” corre Linux Principais desvantagens... Não é tão “amigável” como o sistema operativo Windows Linux é um tipo de UNIX Actualmente, o mais popular. No entanto, existem muitos outros.

4 Breve História do UNIX Nos anos 70, Dennis Ritchie e Ken Thompson criam o sistema operativo UNIX Escrito na Linguagem C, criada de propósito para tal. Capacidade de multitarefa Capacidade de múltiplos utilizadores Facilmente portável para outras máquinas O UNIX for criado nos Bell-Labs, nos Estados Unidos Inicialmente distribuído como código fonte Tornou-se um sucesso enorme!

5 Breve História do UNIX (2)
Devido ao sucesso do UNIX, a Bell-Labs resolve torná-lo num produto comercial (início dos anos 80) Licença restritiva e bastante cara Não acessível à maior parte das empresas nem universidades Deixa de estar disponível o código fonte Na Universidade de Berkley, Bill Joy trabalha numa versão do UNIX chamada BSD (1977) Em 1980, a DARPA assina um contracto com Berkley para melhorar o sistema e adicionar suporte para rede Problema do BSD (1980): os utilizadores têm de comprar a licença do UNIX da AT&T Bell-labs! O sistema BSD (Berkley Software Distribution) ainda é muito utilizado actualmente. Versão gratuita: FreeBSD Mais tarde, Bill Joy cria a Sun Microsystems e os sistemas SunOS e Solaris

6 Breve História do UNIX (3)
Em 1985, Richard Stallman cria o Projecto GNU (GNU is Not Unix) Objectivo: um sistema UNIX livre para todos Princípios do Open Source Actualmente, os utilitários dos sistemas UNIX correspondem aos que foram desenvolvidos no projecto GNU Em 1987, Andrew Tanenbaum cria o sistema MINIX O código fonte do UNIX não estava disponível e as licenças eram extremamente caras Sistema operativo para ensinar na Universidade, gratuito Sistema operativo para PCs

7 Breve História do UNIX (4)
Em 1991, Linus Torvalds, um estudante universitário, está muito descontente com os sistemas operativos disponíveis para o seu PC O sistema MS-DOS é seriamente limitado (apenas permite executar uma aplicação de cada vez). O sistema Windows é bastante primitivo e caro. Os sistemas Unix para PC são caros Tanenbaum não quer alterar o MINIX para ser um sistema operativo “genérico”, com muitos utilitários e aplicações. A filosofia do MINUX é ser um SO de ensino. Resolve escrever o seu próprio sistema operativo! Assim nasce o LINUX Utilitários do projecto GNU

8 Linux – Actualmente Dos sistemas operativos mais utilizados no mundo inteiro Tipicamente em Sistemas SERVIDOR Completamente gratuito! Como o sistema é baseado no kernel “Linux” e nos utilitários “GNU”, é possível criar sistemas com diferentes utilitários e programas. Cada “empacotamento diferente” corresponde a uma “distribuição linux”. Existem MUITAS DISTRIBUIÇÕES por onde escolher!

9 Utilização de UNIX (Linux)

10 Sistema Multi-utilizador
O sistema UNIX é multi-utilizador Existem dois tipos de utilizadores: “Normais”, com poderes “normais” “Super-Utilizador”, que pode fazer “tudo” Aceder a todos os directórios, a todos os ficheiros, modificar configurações, etc. O super-utilizador dos sistemas unix chama-se “root”.

11 Entrar no sistema Os sistemas Unix podem funcionar em dois tipos de ecrã: Modo Gráfico Modo de Janelas O primeiro passo para utilizar estes sistemas é fazer o “login”. Isto é, introduzir o nome de utilizador e password.

12 A Shell Os comandos são introduzidos numa janela, chamada “shell”
Podem-se realizar todos os comandos normalmente disponíveis num sistema de janelas (copiar ficheiros, criá-los, apagá-los, etc.) Principal vantagem: FLEXIBILIDADE!

13 Para sair do sistema... Em modo gráfico utilizam-se os menus
Em modo consola utiliza-se o comando “logout”

14 Como obter ajuda? Todos os comandos estão documentados nas páginas de manual (man pages) Para consultar fazer: “man comando” (tipicamente em inglês) Para avançar de página carregar em ESPAÇO. Para sair, carregar em ‘q’ man ls

15 Comandos básicos – “ls”
O comando “ls” permite listar os ficheiros num directório ‘-l’: Listagem “longa” ‘-a’: Listagem completa, incluindo de ficheiros ocultos ‘-R’: Listagem recursiva (inclui os subdirectórios) ‘-d’: Listagem apenas do conteúdo do directório

16 Comandos básicos – “ls” (2)
As opções também podem ser combinadas... ls -la

17 Como ler o resultado do comando “ls”
Indica se é ficheiro ou directório (‘-’ ou ‘d’) Permissões do ficheiro Número de “ligações” ao ficheiro “Dono do ficheiro” Grupo de trabalho Tamanho do ficheiro (bytes) Data/hora de modificação Nome do ficheiro

18 “Wildcards” Quando se manipulam ficheiros, não é necessário fazer sempre exactamente o nome destes. Existem caracteres especiais que podem representar uma ou mais letras. *  representa uma ou mais letras ?  representa exactamente uma letra [Aa]  representa exactamente uma letra, das contidas entre [] Exemplos: ls *.txt  lista todos os ficheiros terminados em “.txt” ls imagem*  lista todos os ficheiros começados por “imagem” ls *paulo*  lista todos os ficheiros que contém “paulo” no nome ls [Ii]*  lista todos os ficheiros começados por ‘I’ ou ‘i’

19 Exemplos de wildcards

20 Árvore de directórios Unix
Em UNIX, todo o sistema de ficheiros é uma árvore / bin etc home usr var (...) carlos miguel sandra (...)

21 Árvore de directórios Unix (2)
Navegação na árvore de directórios A “raíz” da árvore representa-se por “/” Todos os directórios partem a partir da raíz, utilizando barras para a frente. Por exemplo, o directório do utilizador “joao” encontra-se em “/home/joao” Alguns ficheiros especiais: O directório corrente é representado pelo ficheiro “.” O directório acima do corrente é representado pelo ficheiro “..” Os ficheiros escondidos começam por ponto (ex: “.profile”)

22 Alguns directórios importantes

23 Navegação em directórios
Para mudar de directório utiliza-se o comando “cd” cd docs  Vai para o directório docs cd /home/joao  Vai para o directório /home/joao cd ..  Vai para o directório acima do corrente cd ../..  Sobe dois directórios cd ../casa  Sobe um directório e desce para o ‘casa’ cd ~  Vai para o directório do utilizador corrente cd  Vai para o directório do utilizador corrente cd ~/docs  Vai para o directório docs do utilizador corrente Para verificar qual o directório corrente, utiliza-se o comando “pwd”

24 Exemplo de navegação

25 Ver o conteúdo de ficheiros
Para ver o conteúdo de um ficheiro, utiliza-se o comando “cat”. O comando “less” também permite listar um ficheiro, mas fazendo uma pausa em cada ecrã. Para controlar a utilização do “less” utilizam-se os seguintes comandos: ‘q’  Termina a visualização ‘u’  Anda para o ecrã anterior ESPAÇO  Avança um ecrã ‘:123’  Vai para a linha 123 ‘/casa’  Procura a palavra ‘casa’ O comando “more” permite visualizar um ficheiro página a página, não permitindo no entanto navegar no mesmo

26 Ver o conteúdo de ficheiros (2)
Existem ainda dois comandos bastante úteis: “head -n” permite listar as n primeiras linhas de um ficheiro “tail -n” permite listar as n últimas linhas de um ficheiro “tail +n” permite listar o ficheiro a partir da linha n

27 Permissões dos Ficheiros e Directórios
Em UNIX, todos os ficheiros e directórios têm um conjunto de permissões: Permissões para o dono do ficheiro (user) Permissões para o grupo de trabalho (group) Permissões para os restantes utilizadores (others) Para cada conjunto de utilizadores, as permissões podem ser de: Leitura (read) Escrita (write) Execução (execute) No caso dos directórios, “leitura” significa listar os ficheiros desta; “escrita” significa criar ficheiros; “executar” significa entrar nela.

28 Visualização das permissões de ficheiros
tipo de ficheiro r w x r x x r w x - - - - - - - - - - user group others As permissões são... O ficheiro “exame.doc” apenas pode ser lido e escrito por “pmarques” O ficheiro “pauta.txt” pode ser lido e escrito por “pmarques” e pelos utilizadores do grupo “profs” O ficheiro “poema.txt” pode ser lido e escrito por “pmarques”, e apenas lido pelo grupo “profs” e pelos “outros”

29 Alteração das permissões de um ficheiro
Para alterar as permissões de um ficheiro utiliza-se o comando chmod. Dois modos de utilização: “amigável” e “máscara binária” No modo amigável: chmod u+rw t.txt  dá permissões ‘r/w’ ao dono do ficheiro chmod o-rwx t.txt  retira todas as permissões aos “outros” chmod a+rw t.txt  dá permissões ‘r/w’ a todos (ugo) chmod go-r t.txt  retira a permissão ‘r’ ao grupo e outros No modo amigável, as permissões dos grupos não especificados são mantidas.

30 Alteração das permissões de um ficheiro (2)
No modo máscara binária, as permissões de um ficheiro são especificadas directamente utilizando um número de três algarimos. Este número está na base octal (8) O primeiro dígito representa o dono do ficheiro (u) O segundo dígito representa o grupo (g) O terceiro dígito representa os outros (o) As permissões são especificadas para cada grupo, somando as permissões necessárias: 4 = Leitura (r) 2 = Escrita (w) 1 = Execução (x) Exemplos: chmod 600 t.txt  permissões ‘rw ’ chmod 744 t.txt  permissões ‘rwxr--r--’

31 Manipulação de ficheiros e directórios
Para criar um directório: mkdir nome mkdir docs  cria um directório chamado docs Para remover um directório: rmdir nome rmdir docs  remove um directório chamado docs Para copiar ficheiros : cp origem destino cp * ~/tmp  copia todos os ficheiros do directório actual para a directório tmp do utilizador cp /tmp/* .  copia todos os ficheiros em /tmp para o directório actual Mover ficheiros de um directório para outro: mv origem dest mv * /home/pmarques  move os ficheiros para /home/pmarques mv xpto docs  move xpto para docs xpto pode ser um ficheiro ou directório docs pode ser um ficheiro ou directório

32 Manipulação de ficheiros e directórios (2)
Para apagar ficheiro: rm fich rm xpto  apaga o ficheiro xpto rm *  apaga todos os ficheiros do directório actual rm *.tmp  apaga todos os ficheiros terminados em “.tmp” Para remover um directório e todo o seu conteúdo: rm -rf docs  Apaga directório docs e seu conteúdo Para editar um ficheiros... Os utilitários tradicionais são o vi e o emacs Em Linux: gedit e pico

33 Redireccionamento de Entrada/Saída
Muitas vezes é útil guardar o resultado da execução de um comando num ficheiro Para isso utiliza-se redireccionamento de entrada/saída ‘>’ redirecciona a saída de um comando para um ficheiro. Caso este já exista é apagado antes do resultado lá ser colocado. ‘>>’ redirecciona a saída de um comando para um ficheiro. Caso este já exista, o resultado é-lhe acrescentado.

34 Redireccionamento de Entrada/Saída
Também é possível redireccionar a entrada: < cat <teste.txt  Imprime o conteúdo de “teste.txt” cat <<. >texto.txt  Lê do teclado até encontrar uma linha com um ponto e escreve o resultado em “texto.txt” Em determinadas ocasiões é útil redireccionar a “saída de erro” para um ficheiro: 2> find / -name passwd 2> erros.txt Este comando encontra o ficheiro “passwd”. Todos os directórios que o utilizador não tenha permissão para ver são escritos em erros.txt Para redireccionar a “saída normal” e a “saída de erro” utiliza-se &>

35 Exemplo de redireccionamento

36 Contar palavras num ficheiro
Para contar o número de linhas, palavras e bytes de um ficheiro utiliza-se o comando “wc” A opção ‘-l’ permite contar apenas o número de linhas (útil!)

37 Encontrar palavras num ficheiro
Para mostrar as linhas de um ficheiro que contêm determinada palavra utiliza-se o comando “grep” grep palavra ficheiro  Encontra ‘palavra’ em ‘ficheiro’ grep palavra *  Encontra ‘palavra’ nos ficheiros do directório Sempre que é necessário passar uma frase como parâmetro utilizam-se aspas.

38 Expressões Regulares O programa egrep supporta EXPRESSÕES REGULARES
Uma expressão regular é algo semelhante a uma wildcard, mas mais poderosa. Numa expressão regular, cada carácter, em geral, vale por si próprio. No entanto, podem-se marcar os carácter com os seguintes classificadores: *  Carácter/expressão anterior 0 ou mais vezes +  Carácter/expressão anterior 1 ou mais vezes ?  Carácter/expressão anterior 0 ou uma vezes {N}  Carácter/expressão N vezes {N,}  Carácter/expressão anterior N ou mais vezes {N,M}  Carácter/expressão anterior entre N e M vezes O carácter ‘.’ significa qualquer carácter Os caracteres colocados entre [] funcionam como opção. Por exemplo [Aa] quer dizer o carácter ‘A’ ou o ‘a’. Podem-se utilizar intervalos, por exemplo: [a-zA-Z]. Colocando um ^ dentro de parênteses rectos, tal representa uma negação. Por exemplo: [^0-9] quer dizer nenhum carácter que seja um algarismo.

39 Expressões Regulares (2)
Uma expressão regular é algo semelhante a uma wildcard, mas mais poderosa... As expressões mais complexas podem ser agrupadas dentro de (), valendo como conjunto O carácter ‘|’ significa alternativa Exemplos: egrep ‘Paulo Marques’ doc.txt Encontra todas as linhas com o nome “Paulo Marques” egrep ‘[Pp]aulo [Mm]arques’ doc.txt Encontra todas as linhas com o nome “Paulo Marques”, estando “Paulo” e “Marques” capitalizado ou não egrep ’72[0-9]{5}’ doc.txt Encontra todos os números de telefone de Timor no ficheiro (começam por 72 e têm cinco dígitos) egrep ‘Carlos .* Miguel’ doc.txt Encontra todos os nomes começados em Carlos e terminados em Miguel egrep ‘(Carlos)|(Miguel)’ doc.txt Encontra todas as linhas que contém ou Carlos ou Miguel

40 Encontrar um ficheiro Para procurar um ficheiro utiliza-se o comando find find DIR -name FIC Encontra todos os ficheiros chamados FIC começando a procurar em DIR find DIR -name FIC -exec COMANDO \; Encontra todos os ficheiros chamados FIC começando a procurar em DIR. Por cada ficheiro encontrado executa o comando COMANDO. No comando, o nome do ficheiro é representar por {}. Exemplo: find . -name ‘*.txt’ -exec cat {} \; Encontra todos os ficheiros com a extensão ‘.txt’ do directório corrente e subdirectórios imprimindo o seu conteúdo para o ecrã.

41 Encontrar um ficheiro (2)
Existe um ficheiro especial chamado /dev/null para onde se pode enviar todo o output que não se necessita Exemplo: Encontrar todos os ficheiros chamados ‘passwd’, ignorando todos os ficheiros/directórios cujo utilizador não tenha permissões para ler. find / -name passwd 2>/dev/null

42 Ordenar as linhas de um ficheiro
O comando sort permite ordenar as linhas de um ficheiro Por omissão, faz uma comparação ‘letra a letra’ Para especificar uma comparação ‘numérica’ usa-se ‘-n’ Nota: os resultado da ordenação não é guardado! Como o faria?

43 Outras formas de ordenação
O comando sort é capaz de processar várias colunas, separadas por um carácter delimitador. Para indicar a coluna utiliza-se a opção -k Para indicar o delimitador utiliza-se a opção -t O delimitador, por omissão, são “um ou mais espaços em branco” Ordena por nomes (texto) Ordena por número de aluno (numérico)

44 Extrair colunas de ficheiros
É muito comum os ficheiros conterem pequenas bases-de-dados separadas por caracteres especiais. O comando “cut” permite extrair determinadas colunas de um ficheiro. -d’|’  indica que o carácter delimitador é o | -fN  indica que se quer extrair a coluna N Nomes (coluna 1) Número de aluno (coluna 2)

45 Comunicação Entre Processos – Pipes
Uma das razões pela qual o UNIX é tão poderoso é devido a ter muitos pequenos utilitários que podem ser combinados. Para encadear dois comandos em que o resultado da execução do primeiro é passado para a entrada do segundo utiliza-se um pipe (barra vertical |).

46 Pipes – Alguns Exemplos
cat notas_es.txt | grep 17 | sort Encontra todos os alunos que tiveram 17 e ordena-os por nome. grep ‘Carlos Manuel’ alunos.txt | cut -d’|’ -f2 Imprime o número de aluno de ‘Carlos Manuel’

47 Sequência de comandos Também é possível mandar executar uma sequência de comandos, sem que a saída de um comando entre no seguinte. Para isso, utiliza-se ‘;’ Exemplo: $ ls -l >listagem.txt $ sort -k5 -n listagem.txt >ordenada.txt $ head -5 ordenada.txt >maiores.txt $ tail -5 ordenada.txt >menores.txt $ ls -l | sort -k5 -n >ordenada.txt $ head -5 ordenada.txt >maiores.txt ; tail -5 ordenada.txt >menores.txt É o mesmo que...

48 Ligações simbólicos (links simbólicos)
É possível criar ficheiros especiais que representam “atalhos” para o ficheiro original. Todas as modificações feitas sobre o “atalho” afecta directamente o ficheiro original. Comando ln -s ficheiro_original nome_link Existem também “ligações físicas” ou “hard links”, que são criados sem a opção ‘-s’. No entanto, hoje em dia, não são muito utilizados.

49 Exemplo de ligações simbólicas
As alterações feitas sobre o link simbólico são visíveis no ficheiro original e vice-versa.

50 Verificar o espaço ocupado
Para ver o espaço que um conjunto de ficheiros está a ocupar utiliza-se o comando “du” (disk usage). ‘-h’  Formato ‘humano’ (KB, MB, GB)

51 Verificar sistemas de ficheiros montados e espaço livre
Para verificar que sistemas de ficheiros se encontram “montados” e em que locais da árvore de directórios utiliza-se o comando mount Este comando também permite adicionar novos sistemas de ficheiros à árvore de directórios disponíveis. No entanto, normalmente só o administrador o faz. Os ficheiros especiais /dev/hda, /dev/hdb, etc., representam os discos IDE do computador. Caso tenham um dígito à frente (exemplo: /dev/hda1) então representam uma partição. /dev/sda, /dev/sdb, etc., representam discos/dispositivos SCSI Para verificar o espaço livre nos vários discos/sistemas de ficheiros utiliza-se o comando “df -h”

52 Exemplo de utilização do “df” e “mount”

53 Backup e Compressão Muitas vezes é útil poder guardar todo o conteúdo de um directório num único ficheiro Por exemplo, para realizar cópias de salvaguarda Para colocar o conteúdo de um directório num ficheiro utiliza-se o comando “tar”. Por exemplo: tar -cvf documentos.tar docs/* Para restaurar o conteúdo de um desses ficheiros utilizam-se opções diferentes: tar -xvf documentos.tar Normalmente estes ficheiros são comprimidos para guardar espaço: gzip documentos.tar  comprime documentos.tar gzip -d documentos.tar.gz  descomprime documentos.tar.gz

54 Backup e Compressão (2) Backup e Compressão Descomprimir e Restaurar

55 Visualizar quais os processos em execução
Para ver quais os processos em execução utiliza-se o comando ps. “ps” mostra apenas os processos do utilizador corrente “ps aux” mostra uma listagem completa

56 Comandos em Background
Quando existem tarefas que demoram muito tempo, é possível colocá-las a executar, ficando o sistemas imediatamente disponível para realizar outras tarefas. Essas tarefas dizem-se em “background” Para colocar uma tarefa em background basta colocar um & após o comando. Exemplos: cat *.txt >textos.doc & Cria um ficheiro ‘textos.doc’ com todos os ficheiros ‘.txt’ do directório corrente find / –name ‘*.mp3’ -exec mv {} /tmp/mp3 \; & Encontra todos os ficheiros ‘.mp3’ no disco e coloca-os em /tmp/mp3

57 Comandos em Background (2)
É possível interromper a execução de uma aplicação que se encontra a executar. Para isso carrega-se em Ctrl-Z Para continuar a sua execução utiliza-se o comando fg Para continuar a sua execução em background utiliza-se o comando bg Para listar quais os comandos em background utiliza-se o comando jobs Para colocar um comando em background como sendo o “comando de topo” utiliza-se fg NUMERO_JOB

58 Exemplo de utilização

59 Calendário e Cálculos Calendário: cal [ano] Calculadora: bc -l

60 Outros comandos úteis clear  limpar o ecrã
whoami  saber qual é o utilizador actual ssh máquina  abrir uma ligação para outra máquina w  ver quais os utilizadores que estão na máquina last  ver os últimos utilizadores que se ligaram top  ver quais os processos a executar (gráfico) ps [aux]  ver quais os processos a executar su -  ganhar permissões de super-utilizador wall  enviar uma mensagem para todos os utilizadores uname -a  ver informações sobre a máquina free  ver qual a memória disponível da máquina uptime  ver qual a carga da máquina date  ver a hora actual sleep N  interrompe o processamento durante N segundos touch ficheiro  actualiza a data de um ficheiro (criando-o se nec.) diff fich1 fich2  ver as diferenças entre dois ficheiros passwd  alterar a password chfn  alterar a informação do utilizador kill -9 pid  matar o programa c/ o identificador pid

61 Algumas teclas úteis CTRL-Z  Coloca um processo em background
CTRL-C  Termina a execução CTRL-D  Fim de ficheiro (ou logout) CTRL-A  Vai para o início da linha CTRL-E  Vai para o final da linha CTRL-S  Bloqueia a apresentação de resultados CTRL-Q  Continua a apresentação de resultados SHIFT-PGUP  Anda um ecrã para cima SHIFT-PGDN  Anda um ecrã para baixo TAB  Completa um comando/nome ficheiro TAB TAB  Vê quais as opções possíveis para completar   Último comando introduzido   Próximo comando (dos introduzidos)

62 Ficheiro /etc/passwd O ficheiro /etc/passwd contém os utilizadores do sistema O seu formato é “separado por :”, contendo os seguintes campos: Login Password Encriptada (caso não esteja em /etc/shadow) UID (User ID) GID (Group ID) Nome do utilizador Directório de trabalho Shell a utilizar

63 Ficheiro /etc/passwd (2)

64 Ficheiro /etc/shadow Hoje em dia as passwords são guardadas encriptadas no ficheiro /etc/shadow Apenas o utilizador root o pode ler e manipular Contém a seguinte informação: Login Password Encriptada Dias desde 01/01/1970 desde que a password foi alterada Número de dias até que a password possa ser alterada Número de dias após os quais a password tem de ser alterada Dias de aviso até que a password expire Dias após a password expirar até que a conta seja desabilitada Dias desde 01/01/1970 desde que a conta foi desabilitada Campo reservado

65 Ficheiro /etc/shadow (2)

66 Grupos Os ficheiros /etc/group e /etc/group- funcionam de forma semelhante ao /etc/passwd e /etc/shadow, mas para grupos de trabalho

67 Processo de autenticação
Quando é adicionado um novo utilizador ao sistema, ou quando a sua password é alterada: A password é encriptada de forma irreversível. Tal garante que um agente malicioso que consiga ter acesso ao ficheiro não consegue recuperar a password para aceder a outros sistemas em nome do utilizador. Sempre que o utilizador entra no sistema e introduz a sua password: A password introduzida é encriptada usando o mesmo algoritmo A password encriptada é comparada com a que se encontra em /etc/shadow Caso ambas as passwords sejam idênticas, o utilizador está autenticado e pode ter acesso ao sistema.

68 Introdução à Programação em Shell

69 Programação em Shell Até agora, apenas aprendemos comandos isolados.
Muitas vezes é útil poder ter um ficheiro contendo diversos comandos que realizam funções mais complexas A estes ficheiros chamam-se “shell scripts” Na verdade, existe toda uma linguagem de programação que se pode utilizar nestes ficheiros. Suporte para: Variáveis Testes (if-else) Ciclos (for, while, until, etc.) etc. Existem MUITAS shells. Nós iremos utilizar a bash!

70 Aspecto de um programa em shell script
Primeira linha: indica a shell a utilizar Comentários começam com # Atribuição a uma variável Ciclo ‘for’ com um comando hello.sh Para executar um shell script, este tem de ser: legível executável Para executar o script, basta fazer “./nome_do_script”: $ ./hello.sh $ chmod u+rx hello.sh

71 Execução do script

72 Variáveis As variáveis não têm de ser declaradas, basta fazer uma atribuição directa. Atenção: Entre o nome da variável, o sinal de igual, e o valor, não podem existir espaços. nome="Paulo Marques" Para se utilizar a variável, basta colocar $nome_da_variável echo $nome É possível colocar numa variável o resultado da execução de um comando ficheiros=$(ls) É possível realizar cálculos quando se faz atribuição de variável e/ou sempre que se utiliza uma referência com $. segundos_num_ano=$((365 * 24 * 60 * 60)) pessoas=10 total=$((pessoas * 4))

73 Tipos de Aspas: Plicas ' ' Até agora, temos sempre utilizado plicas (' ') quando é necessário imprimir ou encontrar algo. $ echo 'Olá Mundo!' $ find / -name '*.txt' As plicas significam que caso existam variáveis ou strings contendo wildcards, estas não são expandidas $ valor=10 $ echo '$valor sera???'

74 Tipos de Aspas: Aspas Reais " "
Quando se utilizam aspas reais (" "): As variáveis são expandidas (calculadas) $ valor=10 $ echo "$valor sera???" $ echo "Existem $(ls -l | wc -l) ficheiros neste directório."

75 Tipos de Aspas: Plicas para atrás ` `
As “plicas para trás” são semelhantes a $() Permitem executar comandos Exemplos:

76 O último exemplo num shell script
lista.sh

77 Dois pormenores importantes
Nota: sempre que é necessário identificar um carácter especial tem de se utilizar \ Por exemplo, para escrever um cifrão tem de se colocar \$. preco=10 echo "Os cartões de telefone custam \$$preco" Em determinadas situações é necessário marcar o nome das variáveis utilizando ${variavel} em vez de $variavel. Exemplo: suponhamos que queremos alterar o nome de um ficheiro acrescentando-lhe “_proibido”: ficheiro="video.avi" mv $ficheiro $ficheiro_proibido ficheiro="video.avi" mv ${ficheiro} ${ficheiro}_proibido Incorrecto! Correcto!

78 Variáveis Especiais Num shell script, as seguintes variáveis estão pré-definidas: $#  Número de parâmetros que foram passados $*  Todos os parâmetros $1  Primeiro parâmetro $2  Segundo parâmetro $3  Terceiro parâmetro ... $9  Nono parâmetro ${n}  A partir do décimo parâmetro

79 Exemplo

80 Condições Mas, como garantir que o programa foi executado com três parâmetros??? Utiliza-se as construções: if comando then comando1 comando fi if comando then comando1 comando else comandoA comandoB ... if comando pode ser qualquer comando habitual. Os comandos retornam sempre um valor (código de retorno). O código de retorno é armazenado na variável especial #? É esse valor que é verificado na condição, em que 0 significa “bem sucedido. Normalmente, o comando utilizado chama-se “test”. Esse comando pode ser abreviado utilizando [] No caso de operações com números é habitual utilizar-se (())

81 Agenda revisitada

82 Operadores Quando se utiliza (()) numa condição, os operadores “normais”, com sintaxe do C, são suportados. Exemplos: if ((x>=10 && x<=20)) ... if ((x<10 || x>20)) ... if ((x != 15)) ... etc. Atenção, como vamos ver a seguir, o comando “test” não suporta estes operadores! É importante não confundir ((expresão)) com [ expressão ]

83 Testes utilizando Strings
Quando é necessário testar igualdade ou diferença de strings, utilizam-se [ ] directamente. [ expressão ] corresponde ao comando “test expressão” Atenção aos espaços  Colocar espaços depois de [ e de ] Ver a página do manual de “test” Exemplo: # lê do teclado para a variável utilizador read utilizador # Vê se é o "grande chefe" ou não if [ "$utilizador" == "root" ] then echo "Bem-vindo grande chefe!" else echo "Bem-vindo mero mortal..." fi

84 Verificar se o utilizador já está introduzido...

85 Ou de uma forma mais eficiente...
Se o grep encontrar uma linha, retorna 0, o que quer dizer que foi bem sucedido. Como não queremos que a linha apareça no ecrã, tanto o output como o erro é enviado para /dev/null. Atenção: “valor de retorno” é diferente do que os programas escrevem no ecrã!!!

86 O resultado... Operações com strings:
[ string1 == string2 ]  Se string1 e string2 são idênticas [ string1 != string2 ]  Se string1 e string2 são diferentes [ string1 ]  Se string1 não é NULL ("") [ -n string1 ]  Se string1 não é NULL ("") [ -z string1 ]  Se string1 é NULL

87 Testes com ficheiros [ -f file ]  Testa se file é um ficheiro normal
[ -d file ]  Testa se file é um directório [ -L file ]  Testa se file é um link simbólico [ -e file ]  Testa se file existe [ -s file ]  Testa se file não está vazio [ -r file ]  Testa se pode ler de file [ -w file ]  Testa se pode escrever em file [ -x file ]  Testa se pode executar file Exemplo: find / -name '*.txt' 2>erros.log if [ -s "erros.log" ] then echo "Ocorreram erros ao procurar os ficheiros:" cat erros.log fi

88 Múltiplas condições Infelizmente, o comando test não utiliza a notação “normal” para os operadores E e OU. E  -a (de AND) OU  -o (de OR) A negação de uma condição é feita com ! Exemplos: if [ "$utilizador" == "root" -o "$utilizador" == "admin" ] Se o utilizador for “root” OU o utilizador for o “admin”... if [ -e "$filename" -a -r "$filename" ] Se o ficheiro em $filename existe E é legível... if [ ! -e "$filename" ] Se o ficheiro em $filename não existe... É no entanto possível utilizar os operadores || e && em vários comandos test: if [ "$utilizador" == "root" ] || [ "$utilizador" == "admin" ] if [ -e "$filename" ] && [ -r "$filename" ]

89 Agenda revisitada...

90 A execução...

91 Várias condições – if/elif/else/fi
Por vezes é necessário testar diversas condições. Embora se possa colocar diversos if’s encadeados, tal é pouco prático. Para testar múltiplas condições mutuamente exclusivas utiliza-se if/elif/elif/elif/.../else/fi. Exemplo:

92 Várias condições – case
Para testar se uma variável corresponde a um valor, utiliza-se um case O case é terminado com esac Sempre que uma correspondência é encontrada, são executados todos os comandos até se encontrar ;; * no final serve de “condição não cumprida”. Exemplo:

93 Ciclos Existem 3 tipos de ciclos em shell programming: Ciclos FOR:
Executam um conjunto de comandos um determinado número de vezes. Ciclos WHILE Executam um conjunto de comandos enquanto uma condição é verdadeira. Ciclos UNTIL Executam um conjunto de comandos até que uma condição se torne verdadeira (i.e. enquanto a condição é falsa).

94 Ciclos – for for var in lista do comando1 comando2 comando3 ... done
lista corresponde a um conjunto de palavras separadas por espaços var toma sucessivamente os valores presentes em lista Dentro do corpo dos ciclos pode-se utilizar: break  para abortar a execução do ciclo continue  para continuar para a próxima iteração do ciclo

95 Ciclos – for (Exemplo 1)

96 Ciclos – for (Exemplo 2) Como se pode ver, é possível utilizar wildcards num ciclo for! *.sh retorna uma lista com todos os ficheiros que têm a terminação “.sh”

97 Ciclos – for (Exemplo 3) Caso não se coloque nenhum argumento num ciclo for, omitindo a palavra in, ele processa automaticamente os argumentos do programa.

98 Ciclos – while while comando do comando1 comando2 ... done
Executa o ciclo enquanto comando for executado com sucesso. Ou seja, retorne 0. Normalmente, em comando utiliza-se o programa test (ver apontamentos do if) Tal como nos ciclos for, pode-se utilizar break  para terminar o ciclo continue  para passar para a próxima iteração

99 Ciclos – while (Exemplo 1)

100 Ciclos – while (Exemplo 2)

101 Ciclos until Funcionam de forma semelhante aos while com a diferença que são executados até que se verifique uma condição.

102 Ciclos infinitos Existem dois comandos especiais chamados true e false. Estes comandos são utilizados conjuntamente com os ciclos. Exemplo:

103 Variáveis Até agora, apenas vimos variáveis locais
As variáveis locais desaparecem depois de uma shell terminar. Mas... existem outras! Variáveis de Ambiente São variáveis que os programas (e outros scripts) examinam quando estão a executar de forma a funcionarem correctamente. Algumas das variáveis que o utilizador define localmente são normalmente exportadas para o ambiente. Exemplos: PATH=/usr/bin:/bin; export PATH export PATH=/usr/bin:/bin Variáveis de Shell São variáveis que a própria shell utiliza para funcionar correctamente mas que o programador também pode utilizar. Exemplo: echo $PWD

104 Variáveis Para verificar quais as variáveis que estão definidas, utiliza-se o comando set Para eliminar uma variável, utiliza-se o comando unset Para verificar quais as variáveis que estão a ser exportadas utiliza-se o comando export

105 Variáveis de Ambiente Certos programas verificam algumas variáveis para executarem correctamente. Exemplo, o programa o programa date utiliza a variável TZ para saber em que local do mundo está, realizando os cálculos horários correctamente. TZ não influencia o programa date pois é “apenas” uma variável local. O programa date não a consegue “ver”! Após TZ ser “exportada” para o ambiente, torna-se visível para o programa date, influenciando o seu funcionamento. Torna-se uma variável de ambiente.

106 Variáveis da Shell Algumas variáveis são automaticamente configuradas pela shell e podem ser utilizadas na linha de comandos ou em scripts. Por exemplo, a variável PWD contém sempre o directório de trabalho actual!

107 Algumas variáveis importantes
PATH Conjunto de directórios que a shell procura para executar um certo programa HOME Directório de trabalho do utilizador PS1 e PS2 Prompt que aparece na shell quando esta está disponível para um novo comando (PS1) ou quando o utilizador necessita de introduzir uma segunda linha (PS2) TERM Terminal que o utilizador está a utilizar HOSTNAME Nome da máquina onde está a executar USERNAME e USER Utilizador corrente SHELL A shell que está a ser utilizada

108 Exemplo usando PS1

109 Opções de PS1 e PS2 man bash

110 Ficheiros Importantes
Na bash, são utilizados os seguintes ficheiros de configuração: “Shells Interactivas de Login” /etc/profile Ficheiro de inicialização comum a todos os utilizadores ~/.bash_profile, ~/.bash_login, ~/.profile Ficheiros “pessoais” de inicialização da shell. A bash procura estes ficheiros por ordem, executando o primeiro que existir (e for legível) ~/.bash_logout Ficheiro executado quando a shell termina (pessoal) “Shells Interactivas Não de Login” /etc/bash.bashrc ~/.bashrc Ficheiro “pessoal” de inicialização da shell

111 IMPORTANT NOTICE YOU ARE FREE TO USE THIS MATERIAL FOR YOUR PERSONAL LERNING OR REFERENCE, DISTRIBUTE IT AMONG COLLEGUES OR EVEN USE IT FOR TEACHING CLASSES. YOU MAY EVEN MODIFY IT, INCLUDING MORE INFORMATION OR CORRECTING STANDING ERRORS. THIS RIGHT IS GIVEN TO YOU AS LONG AS YOU KEEP THIS NOTICE AND GIVE PROPER CREDIT TO THE AUTHOR. YOU CANNOT REMOVE THE REFERENCES TO THE AUTHOR OR TO THE INFORMATICS ENGINEERING DEPARTMENT OF THE UNIVERSITY OF COIMBRA. (c) 2006 – Paulo Marques,


Carregar ppt "Introdução ao UNIX do ponto de vista do Utilizador"

Apresentações semelhantes


Anúncios Google