Professional Documents
Culture Documents
SISTEMAS OPERATIVOS I
Sandra Machado
Berta Batista
Aula Prtica 4
Pgina 2 de 15
O prximo passo o de carregar para memria o comando, passar-lhe todas as opes e nomes de ficheiros e esperar que o comando termine. Enquanto o comando processado pelo sistema operativo a shell fica bloqueada.
Aula Prtica 4
Pgina 3 de 15
O comportamento da shell quando encontra um metacaracter o seguinte: 1. 2. 3. 4. Retira a palavra com o metacaracter. Procura ficheiros no sistema de ficheiros que correspondem ao padro. Constri um lista com esses ficheiros. Introduz a lista no lugar da palavra que continha o metacaracter.
1.3.1 Asterisco ( * )
Este caracter especial de expanso pode ser usado em qualquer posio de um nome ou pathname e representa zero ou mais ocorrncias de qualquer caracater. Ex.: lis*ta poder equivaler a qualquer uma das seguintes: lista, lis6ta, lisrararta, etc., desde que existam.
])
Tambm podem ser usados em qualquer posio de um nome de um ficheiro ou pathname, mas apenas representa uma ocorrncia de um caracter que conste entre os parntesis rectos. Ex.: lista[123] poder equivaler a qualquer uma das seguintes: lista1, lista2, lista3, mas apenas a estas e desde que existam. Este conceito tambm pode ser utilizado para representar intervalos de letras ou nmeros, aqui pode-se usar um hfen para representar um intervalo. Por exemplo, todas as letras minsculas podem ser representadas por [a-z], como analogamente todos os nmeros, ou apenas parte de um intervalo de letras ou nmeros, por exemplo [5-15].
1.3.4 Chavetas ( {
})
Este modo semelhante ao anterior, contudo permite que sejam definidos no apenas um conjunto de possibilidades para um caracter mas um conjunto de possibilidades para vrios conjuntos de caracteres, em cada conjunto est separado dos restantes por virgulas. Ex.: lis{ta,tas,tar} poder equivaler a qualquer dos seguintes, caso existam : lista, listas, listar.
1.3.5 Til ( ~ )
Este caracter especial de expanso representa o pathname completo do "homedirectory" do utilizador.
Se por qualquer razo no se pretender que a shell interprete e substitua os metacaracteres com significado especial deve-se recorrer a caracteres de "disfarce. Assim:
Aula Prtica 4
Pgina 4 de 15
\ - retira o significado ao caracter seguinte " " - retira o significado a todos os caracteres entre as aspas ' ' - retira o significado a todos os caracteres entre as plicas preciso notar que se quisermos usar os caracteres de disfarce tambm temos de os disfarar: $ echo hi \\ there $ hi \ there $ echo "hi \ there" $ hi \ there
Muitos dos comandos que usam um ficheiro de entrada de informao usam, por omisso, o stdin (teclado). Como quase todos os comandos que produzem informao fazem-no, por omisso, para o stdout (ecr / terminal). O mesmo se passa com mensagens de erro, apesar de estas surgirem no terminal esto, por omisso, dirigidas para o stderr ( que, como o stdout, est direccionado para o ecr / terminal). possvel redireccionar qualquer um destes ficheiros recorrendo a caracteres especiais, ou seja, metacaracteres de redireco.
Aula Prtica 4
Pgina 5 de 15
1.4.4 Stderr
O tratamento do standard error difere em funo da shell utilizada: ! ! Ex.: Bash e Kourne shell:
2> ( 2>> para modo append). C shell: >& ( >>& para modo append).
Se se pretender usar a informao gerada por um comando (stdout) como entrada de informao (stdin) num outro comando, pode-se usar um ficheiro temporrio. O exemplo seguinte mostra uma forma de se obter a lista ordenada dos utilizadores ligados no sistema, recorrendo a um ficheiro temporrio. aspinto@polux:~> who ei8020036 pts/1 ei8020018 pts/0 ei8020079 pts/2 ei8010099 pts/3 ei8000019 pts/4 ei8020047 pts/5 ei8010031 pts/6 ei8010030 pts/7 ei8020064 pts/8 ei8020034 pts/9 aspinto pts/10 Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov Nov 4 15:46 (192.168.3.77) 4 15:46 (192.168.3.56) 4 16:03 (192.168.3.65) 4 15:47 (192.168.3.60) 4 15:47 (192.168.3.66) 4 15:48 (192.168.3.57) 4 15:50 (192.168.3.54) 4 15:52 (192.168.3.60) 4 15:55 (192.168.3.102) 4 16:00 (192.168.3.69) 4 16:04 (192.168.3.58)
aspinto@polux:~> who > lista.txt aspinto@polux:~> sort < lista.txt aspinto pts/10 Nov Nov Nov Nov 4 16:04 (192.168.3.58) 4 15:47 (192.168.3.66) 4 15:52 (192.168.3.60) 4 15:50 (192.168.3.54)
Metacaracteres; Ficheiros de Texto Pgina 6 de 15
ei8010099 pts/3 ei8020018 pts/0 ei8020034 pts/9 ei8020036 pts/1 ei8020047 pts/5 ei8020064 pts/8 ei8020079 pts/2 aspinto@polux:~>
4 15:47 (192.168.3.60) 4 15:46 (192.168.3.56) 4 16:00 (192.168.3.69) 4 15:46 (192.168.3.77) 4 15:48 (192.168.3.57) 4 15:55 (192.168.3.102) 4 16:03 (192.168.3.65)
Um pipe permite que esta operao seja feita sem recorrer a um ficheiro auxiliar, redireccionando automaticamente a sada de um comando para a entrada de outro. A representao de um pipe uma barra vertical (
|).
O resultado do exemplo seguinte o mesmo do anterior s que sem recorrer ao ficheiro temporrio. aspinto@polux:~> who | sort aspinto pts/10 Nov Nov Nov Nov Nov Nov Nov Nov Nov 4 16:04 (192.168.3.58) 4 15:47 (192.168.3.66) 4 15:52 (192.168.3.60) 4 15:50 (192.168.3.54) 4 15:47 (192.168.3.60) 4 15:46 (192.168.3.56) 4 16:00 (192.168.3.69) 4 15:46 (192.168.3.77) 4 15:48 (192.168.3.57)
ei8000019 pts/4 ei8010030 pts/7 ei8010031 pts/6 ei8010099 pts/3 ei8020018 pts/0 ei8020034 pts/9 ei8020036 pts/1 ei8020047 pts/5 aspinto@polux:~>
Podem-se encadear mais do que dois comandos com recursos a pipes, criando-se um pipeline. Quando no existem comandos que faam exactamente aquilo que se pretende, pode-se criar um pipeline, tratando a informao sequencialmente de modo a que o resultado final seja o pretendido. Contudo h quer ter em ateno que certos comando apenas podem surgir no incio de um pipeline, pela razo de que apenas geram informao e no necessitam de informao do utilizador (ex.: ls, who, date, pwd, banner, file, etc.). Tambm h comandos que apenas podem surgir no fim de um pipeline, aqueles que apenas recebem informao mas que no geram informao para o ecr (ex.: mail, write, lp, etc.).
Aula Prtica 4
Pgina 7 de 15
Aos comandos que tanto geram informao para o ecr, como solicitam informao ao utilizador, chamamse de filtros. Os filtros podem surgir em qualquer parte de um pipeline, porque recebem informao do utilizador, processam essa informao e geram uma sada de informao para o ecr.
ei8020064 pts/11 ei8020056 pts/12 ei8010115 pts/13 ei8020099 pts/14 ei8020008 pts/15 ei8010115 pts/16
aspinto@polux:~> cat listaWhoOrdenada aspinto pts/10 Nov Nov Nov Nov Nov Nov Nov Nov 4 16:04 (192.168.3.58) 4 15:47 (192.168.3.66) 4 15:52 (192.168.3.60) 4 15:50 (192.168.3.54) 4 15:47 (192.168.3.60) 4 16:15 (192.168.3.72) 4 16:28 (192.168.3.72) 4 16:24 (192.168.3.61)
ei8000019 pts/4 ei8010030 pts/7 ei8010031 pts/6 ei8010099 pts/3 ei8010115 pts/13 ei8010115 pts/16 ei8020008 pts/15
Aula Prtica 4
Pgina 8 de 15
ei8020018 pts/0 ei8020034 pts/9 ei8020036 pts/1 ei8020047 pts/5 ei8020056 pts/12 ei8020064 pts/11 ei8020079 pts/2 ei8020099 pts/14 ei8020100 pts/8 aspinto@polux:~>
4 15:46 (192.168.3.56) 4 16:00 (192.168.3.69) 4 15:46 (192.168.3.77) 4 15:48 (192.168.3.57) 4 16:09 (192.168.3.85) 4 16:14 (192.168.3.102) 4 16:03 (192.168.3.65) 4 16:18 (192.168.3.90) 4 16:13 (192.168.3.107)
1.6
Exemplos de aplicao
Verifique a equivalncia entre os pipes e os conjuntos de comandos seguintes: $ ls -c | tee f1 $ ls -c > f1 $ cat f1 $ $ $ $ ls -c > f1 cp f1 f2 cat f1 cat f1 > f3
$ ls -c | tee f1 f2 > f3
1.7
1) Modifique o seu path de modo a procurar apenas na directoria /usr/bin e na sua directoria corrente. Experimente utilizar comandos tais como: ls, date, who, etc. 2) Liste os nomes dos ficheiros da directoria /etc que terminam numa vogal. 3) Liste os nomes dos ficheiros da directoria /etc cuja penltima letra seja um i. 4) Liste os nomes dos ficheiros da directoria /etc cuja segunda letra seja um k ou o e a ltima letra esteja no intervalo de i at u. 5) Liste os nomes dos ficheiros da directoria /etc que comecem com ch tenham dois caracteres no meio, e terminem com a, d, p ou n. 6) Crie um ficheiro chamado data_hoje que contenha a data de hoje. 7) Acrescente a lista dos utilizadores presentes no sistema ao ficheiro criado anteriormente.
1.8
8) Descreva o funcionamento do interpretador de comandos do UNIX. 9) Escreva o nome de 3 programas de shell. 10) Explique o porqu da utilizao da varivel path.
Aula Prtica 4
Pgina 9 de 15
11) O que um metacaracter? 12) Como se evita que um metacaracter seja interpretado pela shell? 13) Diga a funo dos metacaracteres * ? [ ] .. 14) Diga 3 metacaracteres de redireccionamento e qual a sua funo. 15) Descreva para que serve um pipe. 16) Que atributos qualificam um comando UNIX como um filtro.
Aula Prtica 4
Pgina 10 de 15
wc (Word Count) o utilitrio Unix que permite a contagem de linhas, palavras e caracteres num ficheiro de texto. $ wc [ -cwl ] nome_dos_ficheiros
2.2
O comando tr (translate) na sua forma mais simples permite substituir os caracteres especificados na string_input pelos especificados na string_output. O comando tr e um filtro, l o standard input (teclado) e devolve a sada para o standard output (monitor). O standard input pode ser redireccionado para um ficheiro (<) ou fornecido por um pipe (|). O standard output tambm pode ser redireccionado (>), embora no Unix no seja permitido usar o mesmo ficheiro como entrada e sada de um comando, pode-se contornar esta limitao recorrendo a um ficheiro temporrio. Com a opo -d, os caracteres no so substitudos, mas removidos. A opo -s remove os caracteres que se repetem, torna-se muitas vezes til para remover os duplos espaos, triplos, etc., mantendo apenas um espao. $ tr [-cds] [string_input] [string_output]
2.3
O comando cut permite visualizar ficheiros como matrizes com linhas e colunas e permite extrair as colunas especificadas. O comando cut pode analisar o ficheiro de duas formas: os ficheiros podem ser constitudos por colunas separadas por determinado caracter (por defeito espao, mas configurvel atravs da opo -d). Para extrair colunas a este tipo de ficheiros tabulares usa-se -f seguido de uma lista de colunas a extrair (por exemplo -f1,4,3). A opo -s obriga o comando cut a suprimir linhas do ficheiro que no contenham o caracter delimitador. A opo -c permite cortar um conjunto de caracteres especificando, para isso, a sua posio na linha, por exemplo cut -c1, corta apenas o primeiro caracter de cada linha. $ cut flista [-dchar] [-s] [ficheiro] $ cut clista [ficheiro]
2.4
Colar ficheiros
Muitas vezes existe a necessidade de cortar vrias colunas a um ficheiro para depois as voltar a colar noutro com numa ordem diferente. O utilitrio Unix paste l um ou mais ficheiros e cola as colunas correspondentes pela ordem pretendida.
Aula Prtica 4
Pgina 11 de 15
Por defeito as colunas so separadas por espao, mas podem ser separadas por qualquer caracter especificado com a opo -d, esta opo permite a utilizao de uma lista de caracteres, sendo que eles so usados ciclicamente (1, 2, 3, 1, 2, ...). A opo -s permite juntar informao de vrios ficheiros numa linha e no em colunas. O comando paste no um filtro, necessrio indicar na linha de comandos os ficheiros a usar, porque o utilitrio no l o standard input. Se em alguma situao houver a necessidade de usar o paste como filtro, deve escrever-se um hfen (-) na linha de comandos em vez do nome dos ficheiros (who | cut -f1 -d" " | paste -s -). $ paste [-s] [-dlista] [ficheiros]
2.5
O comando Unix join permite juntar dois ficheiros de texto com pelo menos um campo em comum. A coluna comum chama-se referncia. Para juntar os dois ficheiros com o utilitrio join a referncia tem de estar ordenada por ordem alfabtica. Este utilitrio no um filtro, mas pode ser usado numa pipeline, substituindo o primeiro ficheiro por um hfen, como no comando paste. Quando usado sem opes o join junta os ficheiros pela primeira coluna, sempre que o campo referncia no fr o primeiro, deve usar-se a opo -j. Para exemplificar veja-se a seguinte linha de comandos: $ join -j1 4 -j2 3 exemplo1 exemplo2 Neste caso junta os ficheiros exemplo1 e exemplo2 pelo campo 4 do exemplo1 e pelo campo 3 do exemplo2. Por defeito os dois ficheiros so juntos pelo campo referncia, se alguma linha do ficheiro no contiver o respectivo campo, no exibido no resultado. Sempre que isto consista numa limitao para o utilizador, pode usar a opo -a, seguida de 1 (-a1) para o caso de querer na sada os campos que no juntou no primeiro ficheiro e analogamente para o ficheiro dois a opo -a2. O caracter delimitador tambm pode ser configurado usando o -t seguido de um caracter (-t*). Nem sempre necessrio apresentar todos os campos dos ficheiros a juntar, a opo -o permite escolher os campos a juntar, mas no mostra o campo referncia, a no ser que seja explicitamente especificado na linha. Por exemplo: $ join -o 1.3 1.4 2.2 2.3 2.5 exemplo1 exemplo2 Neste exemplo o resultado conter as colunas 3 e 4 do exemplo1 e as colunas 2,3,5 do exemplo2, o campo referncia o primeiro, visto que nada foi especificado. Outra opo que pode ser til quando se usa o comando join -e, seguida de uma string que ser exibida na sada sempre que existam campos em branco resultantes, por exemplo se na opo -o especificarmos uma coluna que no exista. A sintaxe geral do comando join : $ join [-a1 -a2] [-o lista] [-j1 no -j2 no] [-tchar] [-e string] file1 file2
Aula Prtica 4
Pgina 12 de 15
2.6
Existe um comando que permite numerar as linhas de um ficheiro. Esse comando um filtro, no sentido em que se no for especificado nenhum ficheiro l do stdin e escreve no stdout. Pode naturalmente ser usado em qualquer posio de um pipe. A opo v seguida de um nmero permite indicar a primeira linha de numerao (por defeito a primeira). A opo i seguida de um nmero permite indicar o incremento de numerao (por defeito 1). A opo s seguida de um ou mais caracteres permite indicar a string de separao dos numeros e texto em cada linha (por defeito um tab). A sintaxe completa do comando (ver como habitualmente man nl para mais informao): $ nl [-vnumber] [-inumber] [-wnumber] [-nstring] [-lnumber] [-ba] [-sstring] [file...]
2.7
Impresso de ficheiros
O UNIX dispe de um comando que prepara um ficheiro de texto para impresso. As suas opes permitem formatar o texto (incluindo colocao de headers, footers, etc), parti-lo em pginas de tamanho configurvel, definir que pginas devem ser impressas, etc. Embora no muito utilizado pelo utilizador comum (por razes bvias) pode ser de grande valia para administradores de sistema. A sua sintaxe : $ pr [+number] [-number] [-d] [-e[character]number] [-n[character]number] [-t] [-wnumber] [-onumber] [-lnumber][-h string] [file...]
2.8
1) Experimente as trs opes do comando wc do seguinte modo: a) Conte apenas as palavras do ficheiro passwd (-w); b) Conte apenas os caracteres do ficheiro passwd (-c); c) Conte apenas as linhas do ficheiro passwd (-l). 2) Crie uma sequncia de comandos que mostre apenas o nmero de utilizadores presentes no sistema. 3) Substitua todas as letras minsculas de um ficheiro de texto por maisculas. Verifique novamente o seu contedo. 4) Use a mesma linha de comandos da pergunta anterior, mas altere-a de modo a que as alteraes provocadas pelo comando tr fiquem guardadas no ficheiro. 5) Verifique as opes -d e -s do comando tr do seguinte modo: a) b) Apague todas as vogais do ficheiro usado acima. Crie um ficheiro chamado listagem com a listagem longa da sua HOME. Retire ao ficheiro todos os espaos que no sejam simples (duplos espaos, triplos, etc.)
Metacaracteres; Ficheiros de Texto Pgina 13 de 15
Aula Prtica 4
6) Crie um ficheiro nomes com todos os nomes dos ficheiros presentes no ficheiro listagem; 7) Crie uma sequncia de comandos que liste todos os ficheiros do directrio /usr/bin juntamente com o seu ultimo tempo de acesso. Guarde essa lista num ficheiro com o mesmo nome na sua HOME, num formato de 3 colunas (nome do ficheiro, dia e ms). 8) Construa uma lista com todos os utilizadores do sistema, a sua directoria e a sua shell, separe cada um dos itens com um espao e mostre o resultado num ecr de cada vez. 9) Conte o nmero de linhas de um ficheiro de texto que comecem por maisculas. 10) Crie um ficheiro, chamado nomes, com apenas o nome dos ficheiros retirado do ficheiro listagem. Crie um ficheiro, chamado permisses, com as permisses associadas a cada ficheiro listado. Crie um ficheiro chamado nomes+perm que contenha apenas duas colunas, a primeira com os nomes dos ficheiros e a segunda com as permisses. 11) Considere os ficheiros abaixo: turmas Pedro Nuno Patricia Ricardo Luis A B B F F horario 3 4 4 5 5 A B B F F Pedro Nuno Patricia Ricardo Luis
a) Escreva uma linha de comandos que junte as colunas 1,2 do ficheiro turmas com as colunas 1 e 2 do ficheiro horrio, separe as colunas com o caracter :; b) Os ficheiros acima podem ser juntos por outra coluna que no a primeira, qual? Que alterao seria preciso fazer nos ficheiros?
2.9
12) Indique o comando que conta as linhas de um ficheiro assim como as suas opes. 13) Crie uma sequncia de comandos que mostre o nmero de ficheiros e directrios da sua directoria HOME. 14) Qual a funcionalidade do comando tr? Explique para que servem as opes -d e -s do comando tr. 15) Crie uma linha de comandos que substitua todos os caracteres "\"para "*" e os "," para "-" no ficheiro /etc/group. 16) Explique como que pode utilizar um ficheiro como entrada e sada de um comando UNIX. 17) Crie uma sequncia de comandos que mostre quantos nveis abaixo da directoria root est localizado o seu directrio corrente. 18) Qual o comando que permite extrair colunas a um texto? Explique o interesse das opes -f e -d do comando referido na alnea anterior. 19) Explique como que pode extrair as colunas de 21 a 43 de um texto ASCII. 20) Qual a funcionalidade do comando paste ? Para que servem as opes -d e -s deste comando.
Aula Prtica 4
Pgina 14 de 15
21) Qual o nome de ficheiro que permite que o comando paste seja utilizado num pipe. 22) Como se utiliza o comando join e que caractersticas devem ter os campos que se querem juntar. 23) Crie uma linha de comando que permita juntar o campo 3 de um ficheiro com os campos 1 e 5 de outro ficheiro. 24) Qual o comando que permite mostrar um ficheiro com as suas linhas numeradas? Para que servem as opes -v e -i deste comando.
Aula Prtica 4
Pgina 15 de 15