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

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

Sistemas Operativos Prof. Paulo Marques Universidade de Coimbra, Portugal 2006/2007 Introdução ao UNIX do ponto de vista do Utilizador.

Apresentações semelhantes


Apresentação em tema: "Sistemas Operativos Prof. Paulo Marques Universidade de Coimbra, Portugal 2006/2007 Introdução ao UNIX do ponto de vista do Utilizador."— Transcrição da apresentação:

1 Sistemas Operativos Prof. Paulo Marques Universidade de Coimbra, Portugal 2006/2007 Introdução ao UNIX do ponto de vista do Utilizador

2 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) Windows XP Linux

3 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 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 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 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 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 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 umadistribuição linux. Existem MUITAS DISTRIBUIÇÕES por onde escolher!

9 Sistemas Operativos Prof. Paulo Marques Universidade de Coimbra, Portugal 2006/2007 Utilização de UNIX (Linux)

10 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 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 12 A Shell Os comandos são introduzidos numa janela, chamadashell Podem-se realizar todos os comandos normalmente disponíveis num sistema de janelas (copiar ficheiros, criá-los, apagá-los, etc.) Principal vantagem: FLEXIBILIDADE!

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

14 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 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 16 Comandos básicos – ls (2) As opções também podem ser combinadas... ls -la

17 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 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 19 Exemplos de wildcards

20 20 Árvore de directórios Unix Em UNIX, todo o sistema de ficheiros é uma árvore / homebinetcusrvar(...) carlosmiguelsandra(...)

21 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 22 Alguns directórios importantes

23 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 24 Exemplo de navegação

25 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 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 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 28 Visualização das permissões de ficheiros 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 tipo de ficheiro rwxrxxrwx user groupothers

29 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 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 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 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 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 34 Redireccionamento de Entrada/Saída Também é possível redireccionar a entrada:< cat 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 35 Exemplo de redireccionamento

36 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 52 Exemplo de utilização do df e mount

53 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 54 Backup e Compressão (2) Backup e Compressão Descomprimir e Restaurar

55 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 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 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 58 Exemplo de utilização

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

60 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 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 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 63 Ficheiro /etc/passwd (2)

64 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 65 Ficheiro /etc/shadow (2)

66 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 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 Sistemas Operativos Prof. Paulo Marques Universidade de Coimbra, Portugal 2006/2007 Introdução à Programação em Shell

69 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 70 Aspecto de um programa em shell script Para executar um shell script, este tem de ser: legível executável Para executar o script, basta fazer./nome_do_script: $./hello.sh 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 $ chmod u+rx hello.sh

71 71 Execução do script

72 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 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 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 75 Tipos de Aspas: Plicas para atrás ` ` As plicas para trás são semelhantes a $() Permitem executar comandos Exemplos:

76 76 O último exemplo num shell script lista.sh

77 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 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 79 Exemplo

80 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 comando2... fi if comando then comando1 comando2... 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 81 Agenda revisitada

82 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 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 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 84 Verificar se o utilizador já está introduzido...

85 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 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 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 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 89 Agenda revisitada...

90 90 A execução...

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

92 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 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 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 95 Ciclos – for (Exemplo 1)

96 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 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 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 99 Ciclos – while (Exemplo 1)

100 100 Ciclos – while (Exemplo 2)

101 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 102 Ciclos infinitos Existem dois comandos especiais chamados true e false. Estes comandos são utilizados conjuntamente com os ciclos. Exemplo:

103 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 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 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 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 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 108 Exemplo usando PS1

109 109 Opções de PS1 e PS2 man bash

110 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 Ficheiro de inicialização comum a todos os utilizadores ~/.bashrc Ficheiro pessoal de inicialização da shell

111 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 "Sistemas Operativos Prof. Paulo Marques Universidade de Coimbra, Portugal 2006/2007 Introdução ao UNIX do ponto de vista do Utilizador."

Apresentações semelhantes


Anúncios Google