Você está na página 1de 22

Introduo Utilizao de Sistemas Unix

Dulce Domingos Setembro/2010


Este documento baseado nos seguintes: Hugo Miranda, Introduo Utilizao de Sistemas Unix, verso 1.1. Departamento de Informtica. Fevereiro de 2003. Henrique Joo L. Domingos, Teresa Chambel, O Shell do Sistema Unix - utilizao, filtros e programao, folhas de apoio s aulas prticas de Sistemas de Explorao I, DI-FCUL, 1991. Brian W. Kernighan, Rob Pike, The Unix Programming Environment, Prentice Hall Inc, 1978.

ndice
1. Introduo...................................................................................................................................2 2. Ambiente dos laboratrios .........................................................................................................2 2.1. Alterao da password........................................................................................................3 3. Ficheiros e directorias ................................................................................................................3 3.1. Convenes de designao dos ficheiros............................................................................3 3.2. Estrutura..............................................................................................................................4 3.3. Operaes sobre ficheiros e directorias ..............................................................................5 3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.4.1 3.4.2 Cpia de ficheiros: comando cp ..............................................................................5 Alterao do nome de ficheiros: comando mv .........................................................5 Remoo de ficheiros: comando rm.........................................................................5 Visualizao do contedo de ficheiros: comandos cat, more e less ...........5 Listar o contedo de directorias: comando ls.........................................................6 Alterar a directoria corrente: comando cd ...............................................................7 Determinar a directoria corrente: comando pwd......................................................7 Criar directorias: comando mkdir ..........................................................................7 Remover directorias: comando rmdir....................................................................8 Introduo ao conceito de permisses em unix........................................................8 O comando chmod ..................................................................................................8

3.4. Alterar permisses: comando chmod.................................................................................8

3.5. Ocupao de espao em disco: comando quota...............................................................9 4. Interpretador de comandos: a Shell ..........................................................................................10 4.1. Estrutura da linha de comandos ........................................................................................10 4.2. Ficheiros de configurao da bash..................................................................................11 4.3. Metacaracteres ..................................................................................................................12 4.4. Sequncias de controlo .....................................................................................................13 4.5. Variveis shell...................................................................................................................13 1

4.6. Redireco de entradas e sadas........................................................................................15 4.6.1 4.7.1 4.7.2 Utilizao de pipes: caracter | .............................................................................17 Completar texto na linha de comandos caracter TAB.........................................17 Comando history...............................................................................................17 4.7. Facilidades da shell ...........................................................................................................17

5. Processos ..................................................................................................................................18 5.1. Visualizar processos: comando ps ...................................................................................18 5.2. Execuo de comandos em background ...........................................................................18 5.3. Matar um processo: comando kill ................................................................................18 5.4. Controlo de Jobs ...............................................................................................................19 6. Outros comandos......................................................................................................................20 6.1. Manual do unix: comando man ........................................................................................20 6.2. Filtros ................................................................................................................................21 6.2.1 Filtros grep, egrep, fgrep .........................................................................21

1. Introduo
O Unix um sistema operativo criado no incio da dcada de 70 nos Bell Lab's nos Estados Unidos. um sistema multi-utilizador desenvolvido na linguagem de programao C. Actualmente existem diversas verses (por exemplo, BSD Unix, System V, HPUX, Solaris). O Linux uma verso do Unix para pequenos computadores desenvolvida por Linus Torvalds. Para alm das possibilidades que oferece, o Linux tem-se expandido mundialmente por ser de distribuio gratuita. Actualmente, o Linux mantido por um conjunto de programadores que de forma gratuita o vo actualizando. Presentemente existem diversas verses disponveis. A opo por uma prende-se normalmente com razes culturais embora algumas apresentem vantagens sobre as restantes. Um dos grandes distribuidores de software para Linux a FSF (Free Software Foundation) com o seu projecto GNU. So deles as mais populares verses de compiladores (gcc), debuggers (gdb), editores de texto (gnu emacs) e utilitrios de compresso (gzip). Na prtica, qualquer pessoa pode contribuir para o desenvolvimento do Linux produzindo e distribuindo software. Grandes outras marcas tm disponibilizado software de forma gratuita para este sistema operativo.

2. Ambiente dos laboratrios


Cada computador do laboratrio tem instalado o sistema operativo Linux. O Linux disponibiliza sesses independentes em simultneo. Por sesso entende-se um ambiente de trabalho completamente independente dos restantes onde o utilizador tem que se registar e sair. As sesses podem ser comutadas entre si pela utilizao de Alt+Fn onde n o nmero da sesso pretendida. O ambiente grfico X Windows ocupa normalmente a sesso 7. Para obter uma sesso sem este ambiente grfico (designada sesso em modo de texto), basta seleccionar qualquer uma das restantes. Por exemplo, a sesso 1 obtida por Ctrl+Alt+F1. Os ficheiros dos grupos da disciplina de Sistemas Operativos so guardados na mquina nemo.

Os computadores dos laboratrios tm instalado um sistema de ficheiros distribudo denominado NFS (Network File System) que lhes permite aceder aos ficheiros guardados na mquina onde foram criadas as reas da disciplina. Na eventualidade de esta mquina no se encontrar disponvel, todos os ficheiros ficaro inacessveis. A entrada numa sesso em Linux feita pela digitao de um par (login, password). O login atribudo pela administrao do sistema e permanente (do tipo iXXXXX). A password inicialmente atribuda pela administrao mas dever ser alterada logo que possvel e com regularidade. A sada de uma sesso ser feita pelo comando logout, exit ou ainda, nalgumas configuraes por ctrl^D. Aps a terminao da sesso surgir novamente o dilogo de abertura de sesso. Ateno: frequente, ao longo de um dia de trabalho, os utilizadores abrirem vrias sesses na mesma mquina. Se for esse o caso, assegure-se do encerramento de todas elas percorrendo-as (Alt+F1 a Alt+F7) antes de abandonar a mquina. Os ficheiros dos grupos das disciplinas esto na directoria areas_de_grupo.

2.1. Alterao da password


Uma boa password deve respeitar algumas regras, das quais destacamos: Conter pelo menos 8 caracteres No formar uma palavra nem uma referncia facilmente associvel ao utilizador (por exemplo, nome prprio ou login) Incluir uma mistura de letras (preferencialmente maisculas e minsculas), algarismos e smbolos.

Os utilizadores podem alterar a password no sistema operativo Windows fazendo ctrl+alt+del ou no site https://admin.di.fc.ul.pt.

3. Ficheiros e directorias
Em Unix, o nome de um ficheiro ou de uma directoria pode ter at 256 caracteres. Podem ser utilizados quaisquer caracteres excepto a barra (/), embora seja conveniente restringir essa utilizao aos caracteres alfanumricos (letras e algarismos) e aos caracteres _ (underscore) e . (ponto).

3.1. Convenes de designao dos ficheiros


vulgar encontrar em Unix o nome dos ficheiros dividido em duas partes pelo caracter .. A segunda parte identifica a extenso do ficheiro. Alguns comandos do Unix so restritivos quanto s extenses que esperam nos ficheiros com que lidam. Os compiladores so disso um bom exemplo. Assim, qualquer programa escrito na linguagem C dever ter a extenso c para ser compilado, enquanto que, por exemplo, em java a extenso java. Notas: Ao contrrio do MS-DOS, o sistema operativo Unix no faz interpretao das extenses dos ficheiros. Um ficheiro , aos olhos do sistema operativo, executvel se o utilizador detiver permisses para tal e no se contiver uma dada extenso. Tipicamente, no UNIX um ficheiro executvel no possui extenso. Em algumas situaes usual o nome do ficheiro conter vrios caracteres .. A utilizao do caracter . no sofre de qualquer restrio, podendo ocorrer diversas vezes num mesmo ficheiro. O nmero de caracteres aps este tambm no limitado.

Alguns ficheiros especiais comeam com o .. o caso de um ficheiro associado a cada rea de trabalho em Unix (.bash_profile), cujo contedo executado sempre que efectuada uma entrada nessa rea. Este tipo de ficheiros tem a particularidade de no ser visvel na listagem de ficheiros de uma directoria (comando ls) excepto quando utilizada a opo -a.

3.2. Estrutura
As directorias constituem um tipo especial de ficheiros. A sua funo agrupar ficheiros e outras directorias. Estes dir-se-o contidos naquela. Uma subdirectoria um abuso de linguagem utilizado para designar uma directoria que se encontra dentro de uma outra. No que se segue, as caractersticas de uma directoria, enquanto ficheiro Unix, sero esquecidas, sendo alvo da nossa ateno apenas o conceito (lgico) de directoria que ser necessrio para o utilizador do sistema. Todos os ficheiros no Unix so guardados logicamente segundo uma estrutura hierrquica em rvore.

Notas: A rvore tem uma nica raiz, identificada por /'. Este o nome da raiz de qualquer sistema de ficheiros Unix. Todos os ficheiros e directorias so colocados abaixo da raiz. Existem duas directorias chamadas etc. Dois ficheiros (regulares ou directorias) podem ter o mesmo nome desde que no se encontrem dentro da mesma directoria.

Os ficheiros e as directorias podem ser identificados atravs de nomes absolutos ou atravs de nomes relativos. Os nomes absolutos so construdos atravs da concatenao dos nomes das vrias directorias desde a directoria raiz. O separador entre nomes tambm a barra (/). Por exemplo, a directoria so000 tem o seguinte nome absoluto:
/home/nemo/so/so000

enquanto que o nome absoluto da directoria local :


/usr/local

Os nomes relativos so utilizados para identificar ficheiros ou directorias a partir de uma determinada directoria: Para referir uma subdirectoria da directoria corrente utiliza-se o nome da subdirectoria; A directoria acima da directoria corrente identificada pelos caracteres .. A directoria corrente identificada pelo caracter . A directoria HOME do utilizador corrente identificada pelo caracter ~ A directoria HOME de um utilizador identificada por ~<nome do utilizador>

3.3. Operaes sobre ficheiros e directorias


3.3.1 Cpia de ficheiros: comando cp

cp [opes] fichOrigem1 [fichOrigem2 [...]] fichCopia

Notas: Se fichCopia j existir o seu contedo original ser eliminado; Se fichCopia for o nome de uma directoria o ficheiro ser copiado para dentro da directoria, mantendo o nome original Se forem utilizados meta-caracteres ou se for indicado mais que um ficheiro de origem, fichCopia dever ser uma directoria. Nesse caso, todos os ficheiros mantero o nome original e sero colocados dentro da directoria indicada. -i : pede confirmao antes de reescrever o ficheiro de destino -f : fora a cpia, sem pedir confirmao -R ou -r : copia directorias recursivamente

Opes mais utilizadas:

Para mais informaes: man cp 3.3.2 Alterao do nome de ficheiros: comando mv

mv nomeAntigo nomeNovo

Notas: Se nomeNovo for uma directoria, o ficheiro nomeAntigo apenas muda de directoria O ficheiro indicado em nomeAntigo tambm pode ser o nome de uma directoria. Nesse caso, todo o contedo da directoria (incluindo subdirectorias) movido para a nova localizao, dada por nomeNovo. Remoo de ficheiros: comando rm

3.3.3

rm [opes] ficheiros...

3.3.4

Visualizao do contedo de ficheiros: comandos cat, more e less

cat ficheiros

Notas: O comando cat escreve o contedo dos ficheiros para o cran, por omisso. Se este contedo ocupar mais do que uma pgina do cran ser necessrio, regra geral bastante

incmodo, utilizar as sequncias ctrl^S e ctrl^Q para parar/continuar o preenchimento do cran. Se no for dado nenhum ficheiro como parmetro, o cat, por omisso, escreve no cran o que for digitado no teclado at digitao de ctrl^D (indicao de fim de ficheiro).

more ficheiros less ficheiros

Notas: Estes comandos apresentam o contedo dos ficheiros de tal forma que o cran preenchido pgina a pgina. A pgina seguinte visualizada premindo a barra de espaos. O avano linha a linha feito pela tecla <Enter>. O caracter q permite terminar a visualizao do ficheiro. Ambos os comandos dispem de uma facilidade de pesquisa. O padro a pesquisar definido premindo a tecla /' seguida do padro, concluindo com a tecla <Enter>. Ocorrncias seguintes do padro so obtidas utilizando n em vez da barra de espaos. Os comandos permitem a utilizao de padres de pesquisa muito ricos, inclusive com recurso a meta-caracteres e a expresses regulares complexas. Informao sobre a composio destes padres e sobre outros comandos pode ser obtida premindo h durante a utilizao do programa. O recuo nas pginas visveis obtido atravs do comando b. O comando less estende as opes de more. Listar o contedo de directorias: comando ls

3.3.5

ls [opes] ficheiros...

Opes mais comuns: Opo -l A opo -l apresenta um conjunto de informao adicional para cada ficheiro listado. Por exemplo:
[so000@nemo total 8 drwxr-xr-x -rw-r--r--rwxr--r-tmp]$ ls l 2 so000 so 48 Jul 12 17:23 aula1/ 1 so000 so 18 Jul 12 17:25 ex1.c 1 so000 so 13 Jul 12 17:30 myls

A informao apresentada pelo comando ls -l para cada ficheiro divide-se em 7 campos: Tipo do ficheiro A primeira posio da sequncia de caracteres inicial permite distinguir ficheiros normais de directorias. Se o primeiro caracter for (como no caso de aula1 neste exemplo) d, o ficheiro em causa uma directoria. Um - nesta posio indica tratarse de um ficheiro regular. Um l apresenta um link simblico, conceito que no ser abordado neste documento. Permisses Nos 9 caracteres seguintes a existncia de um - significa a ausncia de permisso e um outro caracter a existncia de permisso. As permisses em causa so: r (read)

Permisso de leitura do ficheiro w (write) Permisso de escrita/eliminao do ficheiro x (eXecute) Permisso de execuo do ficheiro Os primeiros trs caracteres descrevem as permisses para o dono do ficheiro, o segundo bloco de trs caracteres as permisses para o grupo e as trs ltimas para os restantes utilizadores. Estes conceitos so aprofundados na seco alterar permisses. Nmero de hard links Este conceito ultrapassa o mbito deste documento pelo que no ser explicado. Dono do ficheiro Utilizador que detm a propriedade do ficheiro (owner). este utilizador que desfruta das permisses apresentadas no primeiro bloco. No exemplo, todos os ficheiros so propriedade do utilizador so000. Grupo do ficheiro Grupo de utilizadores atribudo ao ficheiro. So os utilizadores que pertencem a este grupo que desfrutam das permisses indicadas no segundo bloco. No exemplo, todos os ficheiros esto atribudos ao grupo so. Data/hora da ltima alterao Em ficheiros alterados h mais de um ano, a hora substituda pelo ano da ltima alterao. Nome do ficheiro Tal como apresentado na execuo do comando ls. Opo -a A opo -a apresenta todos os ficheiros da directoria, inclusive os ficheiros iniciados por .. Dois ficheiros particulares nesta categoria so os ficheiros . e .. que representam respectivamente a prpria directoria e a directoria acima, na rvore de directorias. 3.3.6 Alterar a directoria corrente: comando cd

cd [directoria]

Notas: 3.3.7
pwd

Se o nome da directoria for omitido, a directoria corrente passa a ser a HOME do utilizador. Determinar a directoria corrente: comando pwd

3.3.8

Criar directorias: comando mkdir

mkdir directoria

3.3.9

Remover directorias: comando rmdir

rmdir directoria

Notas: Uma directoria s poder ser apagada se no contiver quaisquer ficheiros ou outras subdirectorias dentro de si (comparar com rm -r)

3.4. Alterar permisses: comando chmod


3.4.1 Introduo ao conceito de permisses em unix

Em unix, as permisses podem ser definidas para o utilizador dono do ficheiro, para os outros utilizadores que pertencem ao grupo que est atribudo ao ficheiro ou para os outros utilizadores. As permisses podem ser definidas com trs modos de acesso: read Qualquer utilizador com autorizao de leitura pode ver o contedo de um ficheiro, listando-o por exemplo atravs dos comandos cat e more ou utilizando um editor de texto. No caso de se tratar de uma directoria, o utilizador est autorizado a listar o seu contedo atravs de ls. Para obter informao mais detalhada acerca dos ficheiros nele contidos, tal como a que fornecida por certas opes de ls, necessitar porm do direito de execuo. A possibilidade de ler o contedo dos vrios ficheiros da directoria verificada atravs das permisses de cada um desses ficheiros em particular. write Um utilizador com o direito de escrita num dado ficheiro pode alterar o seu contedo, atravs, por exemplo, de um editor de texto. No caso de se tratar de uma directoria, o utilizador poder alterar o seu contedo, apagando ou criando ficheiros nessa directoria. execute Um utilizador com direito de execuo sobre um ficheiro poder utiliz-lo a nvel do interpretador de comandos como um vulgar comando de sistema, desde que as directorias acima deste possuam autorizao de leitura para esse utilizador. No caso de se tratar de uma directoria, o utilizador pode mudar para essa directoria (comando cd) e copiar os seus ficheiros para outras directorias, desde que possua em relao a estas a permisso de escrita. 3.4.2 O comando chmod

chmod [opes] [ugoa...][[+-=][rwxXs-tugo...] ficheiros chmod [opes] modo-octal ficheiros

A combinao das letras ugoa define para que utilizadores as permisses sero alteradas: (u) utilizador dono do ficheiro, (g) outros utilizadores do grupo atribudo ao ficheiro, (o) outros utilizadores, (a) todos os utilizadores. O operador + adiciona a permisso, o operador - remove a permisso, o operador = faz com que o ficheiro fique apenas com as permisses que esto a ser definidas por esta invocao do comando. As letras rwxXstugo indicam o modo de acesso das novas permisses: (r) leitura, (w) escrita, (x) execuo. Para as outras letras consultar man chmod.

As permisses tambm podem ser definidas atravs de uma representao numrica na base 8 (modo-octal). A cada permisso corresponde um smbolo octal, do seguinte modo: user/read user/write user/execute group/read group/write other/read other/write other/execute 400 200 100 40 20 4 2 1

group/execute 10

Assim, por exemplo, a rwxr-xr- (todos os direitos para o dono, leitura e execuo para o seu grupo e leitura para os restantes) corresponder o nmero: 400+200+100+40+10+4=754 Notas: O dono de um ficheiro o nico utilizador que est autorizado (para alm do administrador do sistema) a alterar as suas permisses. O grupo de um ficheiro pode ser alterado pelo seu dono atravs do comando chgrp (change group). Atravs do comando ls l podemos visualizar as permisses associadas aos ficheiros. O formato modo-octal prefervel quando se pretende definir um novo conjunto de permisses para um ficheiro. O formato no modo-octal tipicamente utilizado quando se pretende adicionar o remover alguma permisso s permisses j existentes. A opo R pode ser utilizada de modo a aplicar o comando recursivamente a uma directoria.

Exemplos:
chmod 754 fich1

Especifica para fich1 as permisses rwxr-xr- (todos os direitos para o dono, leitura e execuo para o seu grupo e leitura para os restantes);
chmod +x fich1, chmod a+x fich1 e chmod ugo+x fich1

Todos estes exemplos concedem permisso de execuo ao ficheiro fich1 a todos os utilizadores;
chmod ug+rx,o-wx fich1 fich2

Concede permisses de leitura e execuo ao dono e ao grupo e retira permisses de escrita e execuo aos outros utilizadores sobre os ficheiros fich1 e fich2;

3.5. Ocupao de espao em disco: comando quota


A administrao do sistema pode impor limites ao espao ocupado por cada utilizador na sua rea. Na gria do Unix chama-se quota ao espao disponvel para cada utilizador. A quota de um

utilizador, bem como os recursos consumidos, pode ser vista pelo comando quota que produz o seguinte resultado para um utilizador bem comportado:
Disk quotas for user seg002 (uid 4157): Filesystem blocks quota limit grace files quota limit grace /dev/sda8 23485 25000 35000 1545 0 0

E o seguinte resultado para um utilizador que j est a exceder a sua quota apesar de ainda no ter ultrapassado o limite mximo:
Disk quotas for user seg001 (uid 4156): Filesystem blocks quota limit grace files quota limit grace /dev/sda8 25830* 25000 35000 none 1050 0 0

Nota: Quando utilizado um sistema de ficheiros distribudo, o comando quota utilizado o da mquina local e no o da mquina remota o que d uma noo incorrecta dos limites realmente impostos ou at a informao de que o utilizador no sofre de qualquer limitao. Para obter dados correctos ser necessrio que o utilizador entre na mquina (por exemplo, por ssh).

4. Interpretador de comandos: a Shell


Aps a entrada numa rea de trabalho, a sesso de trabalho est iniciada. Daqui em diante o sistema passar a comunicar com o utilizador atravs de um programa especial (denominado interpretador de comandos ou shell) cuja funo receber as directivas do utilizador (comandos) e lanar a sua execuo. Terminada a execuo de cada comando, a shell volta a indicar a sua disponibilidade apresentando o prompt no incio de cada nova linha. O Unix dispe de diferentes interpretadores de comandos (shells). Por exemplo bash (Bourne Again Shell), sh, csh (C-shell) e tcsh (TC-shell). As diferenas para os utilizadores principiantes so mnimas e praticamente irrelevantes pelo que no sero descritas neste documento. Sugere-se a consulta das pginas de manual adequadas para uma descrio mais profunda. As reas abertas para a disciplina de sistemas operativos esto configuradas para utilizarem a bash.

4.1. Estrutura da linha de comandos


O formato genrico dos comandos em Unix :
comando [opcoes] {ficheiros}

Perante a invocao de um comando, a shell efectua os seguintes passos: Interpreta os metacaracteres ver seco sobre metacaracteres; Verifica se a primeira palavra corresponde a um comando da prpria shell - neste caso o comando executado pela prpria shell (ver seco SHELL BUILTIN COMMANDS do manual da bash) Caso contrrio, o comando pesquisado sequencialmente na lista de directorias definidas pela varivel de ambiente PATH. Se o comando no for encontrado, o erro indicado pela shell atravs da mensagem command not found. Letras Por exemplo, ls -a.

As opes so:

10

Letras seguidas de valores Por exemplo, lpr -P lp1 Cada opo precedida do caracter -, e possvel juntar vrias opes numa cadeia. Por exemplo, para executar o comando ls (listagem de ficheiros) com as opes l e a poder ser digitado ls -la ou ls -l -a. Devido ao carcter ambguo com que os valores associados a opes so interpretados, conveniente que estes valores sejam sempre especificados em separado, por exemplo: -x -G valor em vez de -xG valor. Se cometido um erro na especificao das opes de um comando, o respectivo programa indica qual a sintaxe correcta. Notas: Por omisso, o Unix no procura comandos na directoria corrente. A execuo de um comando localizado na directoria corrente, quando esta no consta de PATH conseguida de trs formas: 1. Qualificando o nome com a directoria corrente atravs do caracter . (por exemplo ./comando); 2. Adicionando a directoria corrente a PATH. 3. Adicionando o ficheiro especial . a PATH. Nesse caso, qualquer que seja a directoria corrente, o sistema procurar sempre os comandos tambm nessa directoria. O Unix respeita a ordem das directorias indicadas em PATH na pesquisa dos comandos. De dois comandos com o mesmo nome ser invocado aquele cuja localizao se encontre primeiro em PATH. Este facto pode resultar numa quebra de segurana se de alguma forma for introduzido no PATH do utilizador uma directoria contendo programas alterados. Sem se aperceber, o utilizador poder estar a executar aces de terceiros em seu nome, concedendo-lhes permisses que eles no detinham.

O caracter ; tambm um caracter terminador de comandos. Exemplo:


[so000@nemo [so000@nemo bin/ dev/ boot/ etc/ [so000@nemo [so000@nemo bin/ dev/ boot/ etc/ [so000@nemo so000]$ cd / /]$ ls HOME/ lib/ opt/ root/ sys/ usr/ initrd/ mnt/ proc/ sbin/ tmp/ var/ /]$ cd so000]$ cd / ; ls HOME/ lib/ opt/ root/ sys/ usr/ initrd/ mnt/ proc/ sbin/ tmp/ var/ /]$

O caracter \ pode ser usado para se continuar um comando numa outra linha. Nesta linha a shell apresenta a prompt secundria. Exemplo:
[so000@nemo so000]$ cat /home/nemo/so/so000/trab1.entregues \ > /home/nemo/so/so000/trab2.entregues

4.2. Ficheiros de configurao da bash


Quando uma shell bash invocada, requerendo autenticao, so executados os comandos dos seguintes ficheiros:
/etc/profile

11

~/.bash_profile, se este ficheiro no existir a bash ~/.bash_login, e se este ficheiro no existir a bash ~/.profile.

executa os comandos do ficheiro executa os comandos do ficheiro

Quando a bash invocada sem requerer autenticao so executados os comandos do ficheiro ~/.bashrc. Quando a bash termina a sua execuo, invoca os comandos do ficheiro ~/.bash_logout. Estes ficheiros podem ser usados pelos utilizadores para personalizarem a sua shell.

4.3. Metacaracteres
A shell interpreta de forma especial vrios caracteres. Os caracteres seguintes so utilizados para especificar conjuntos de ficheiros: *: a shell procura todos os nomes de ficheiros que contenham qualquer conjunto de caracteres na posio de * ?: a shell procura todos os nomes de ficheiros que contenham um caracter na posio de ? [ccc]: a shell procura todos os nomes de ficheiros que contenham um caracter pertencente a [ccc] nesta posio.

Exemplos:
[so000@nemo exemplo]$ ls ex1.class ex2.class t1.class ex1.java ex2.java t1.java t1.java~ t2.class t2.java t2.java~ trabalho.java

//todos os ficheiros terminados com .java


[so000@nemo exemplo]$ ls *.java ex1.java ex2.java t1.java t2.java [so000@nemo exemplo]$ ls t?.java t1.java t2.java trabalho.java

//todos os ficheiros comeados por t, seguidos de um caracter e terminados em .java

//todos os ficheiros comeados por t e terminados por um caracter diferente de ~


[so000@nemo exemplo]$ ls t*[^~] t1.class t1.java t2.class t2.java trabalho.java

//todos os ficheiros comeados por t, seguidos de um character, um ., um conjunto de caracteres e terminados por um caracter diferente de ~
[so000@nemo exemplo]$ ls t?.*[^~] t1.class t1.java t2.class t2.java

// todos os ficheiros comeados por t, seguidos pelo caracter 1 ou pelo caracter 2, um . e um conjunto de caracteres.
[so000@nemo exemplo]$ ls t[12].* t1.class t1.java t1.java~ t2.class t2.java t2.java~

Os caracteres seguintes indicam shell para no interpretar de forma especial determinados caracteres ou conjuntos de caracteres: caracter \: indica shell para no interpretar de forma especial o caracter seguinte.
t1.class t1.java t1.java~

[so000@nemo exemplo]$ echo * ex1.class ex1.java ex2.class ex2.java t2.class t2.java t2.java~ trabalho.java [so000@nemo exemplo]$ echo \* *

12

pelicas: indica shell para no interpretar o conjunto de caracteres que esto entre pelicas.
t1.class t1.java t1.java~

[so000@nemo exemplo]$ echo *.* ex1.class ex1.java ex2.class ex2.java t2.class t2.java t2.java~ trabalho.java [so000@nemo exemplo]$ echo '*.*' *.*

aspas: indica shell para no interpretar o conjunto de caracteres que esto entre aspas, excepto os caracteres $, ` e \.

[so000@nemo exemplo]$ echo '******a minha PATH: $PATH' ******a minha PATH: $PATH [so000@nemo exemplo]$ echo "******a minha PATH: $PATH" ******a minha PATH: /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:usr/ lib/jdk1.4.2_06/bin

4.4. Sequncias de controlo


O Unix, semelhana de muitos outros sistemas utiliza um conjunto de chaves ou controlos especiais que permitem ao utilizador assinalar certas decises e situaes importantes durante o dilogo com o utilizador. As principais sequncias de controlo esto listadas de seguida: ctrl^U ctrl^C Cancelamento de uma linha de comando. A totalidade da linha eliminada, sendo de novo apresentado o prompt do interpretador de comandos. Terminar a execuo de um programa ou de qualquer comando em execuo. Pode no sortir efeito uma vez que alguns programas esto preparados para ignorar esta sequncia. Caso a execuo no termine tente ainda q seguido de <Enter>, ctrl^D e ctrl^Y.

ctrl^S/ ctrl^Q Suspender o scroll do cran e voltar a activ-lo. Em alternativa deve ser usado um dos filtros less ou more.

4.5. Variveis shell


As variveis shell guardam informao sobre o ambiente da shell. O valor de algumas variveis definido pela prpria shell. Por exemplo: HOSTNAME. Algumas variveis so utilizadas pela shell. A shell atribui um valor por omisso a algumas destas variveis. Exemplos:
HOME: PATH:

define a directoria HOME do utilizador corrente. Este valor utilizado, por exemplo, pelo comando cd. conjunto de directorias onde so pesquisados comandos (a ordem relevante). As directorias so separadas pelo caracter :. Exemplo de um valor possvel para esta varivel: /usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin: define o prompt da shell (por exemplo: [\u@\h \W]\$)

PS1:

Para mais informao sobre personalizao do prompt ver o manual da bash, seco PROMPTING
PS2:

define o prompt secundrio.

O utilizador pode definir novas variveis, tendo o cuidado de optar por nomes que no coincidam com variveis usadas pela shell. possvel modificar, apagar e visualizar o valor das variveis da shell.

13

A forma de realizar as operaes sobre as variveis varia ligeiramente com a shell adoptada. De seguida apresentam-se os comandos da bash que realizam as operaes sobre variveis. So definidos dois conceitos. VAR representa o nome da varivel enquanto que $VAR representa o contedo da varivel. Por conveno os nomes das variveis so sempre em maisculas. Operaes sobre variveis: A definio de uma varivel feita digitando o comando:
VAR=valor

Alteraes ao seu valor so feitas da mesma forma que as definies, uma vez que no pode haver duas variveis com o mesmo nome. Um caso particular de alterao a concatenao ao valor j existente. Para tal, utiliza-se o conceito de `contedo da varivel. Por exemplo, para adicionar a directoria /users/xpto/mybin ao fim da lista da varivel PATH executar-se-ia:
PATH=$PATH:/users/xpto/mybin

A remoo de uma varivel de ambiente feita pelo comando unset VAR. O valor de uma varivel pode ser visualizado com o comando:
echo $VAR

A lista de variveis definidas pode ser visualizada pelos comandos set ou env. Quando uma varivel de ambiente definida, o seu mbito restringe-se shell corrente e no a shells ou processos filhos que venham a ser criados no seu mbito. O comando export VAR propaga a definio da varivel a todos os processos filhos que venham a ser criados.

Exemplo:
[so000@nemo exemplo]$ X=ola [so000@nemo exemplo]$ echo $X ola [so000@nemo exemplo]$ X=hello [so000@nemo exemplo]$ echo $X hello [so000@nemo exemplo]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin: [so000@nemo exemplo]$ PATH=$PATH:/HOME/nemo/seg/so000/bin [so000@nemo exemplo]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/HOME/nemo/seg/so000/bin [so000@nemo exemplo]$ PATH=$PATH: [so000@nemo exemplo]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/HOME/nemo/seg/so000/bin: [so000@nemo exemplo]$ unset X [so000@nemo exemplo]$ echo $X [so000@nemo exemplo]$ X=hello [so000@nemo exemplo]$ bash [so000@nemo exemplo]$ echo $X [so000@nemo [so000@nemo [so000@nemo [so000@nemo hello exemplo]$ exemplo]$ exemplo]$ exemplo]$ exit export X
bash

echo $X

Notas: Quando adicionamos a directoria corrente varivel PATH o caracter . pode ser omitido. Exemplos:

14

PATH=:/bin:/usr/bin PATH=/bin::/usr PATH=/bin:/usr:

# idntico a PATH=.:/bin:/usr/bin # idntico a PATH=/bin:.:/usr/bin # idntico a PATH=/bin:/usr/bin:.

As variveis definidas nos ficheiros de configurao da shell devem ser exportadas.

4.6. Redireco de entradas e sadas


A shell assume por omisso que os seus ficheiros de entrada e sada so respectivamente o teclado e o cran.

Para cada processo em execuo existe uma tabela de ficheiros abertos. Nesta tabela so sempre inseridos automaticamente trs descritores: 0 1 2 < redirecciona a entrada > redirecciona a sada >> redirecciona a sada para acrescento 2> redirecciona a sada para mensagens de erro 2> redirecciona a sada para mensagens de erro para acrescento n> redirecciona o descrito n
so000]$ echo conteudo da root: >ls.root so000]$ ls / >>ls.root so000]$ cat ls.root root:

Standard input (teclado) Standard output (cran) Standard error (cran)

Estes descritores podem ser redireccionados:

Exemplos:
[so000@nemo [so000@nemo [so000@nemo conteudo da bin/ boot/ dev/

15

etc/ HOME/ initrd/ lib/ mnt/ opt/ proc/ root/ sbin/ sys/ tmp/ usr/ var/ [so000@nemo so000]$cat >nTrabalhos trab1: 50 trab2: 48 trab3: 48 <ctrl^d> [so000@nemo so000]$cat nTrabalhos trab1: 50 trab2: 48 trab3: 48 [so000@nemo exemplo]$ echo exemplo de redireccionamento > file1 [so000@nemo exemplo]$ ls file1 [so000@nemo exemplo]$ cat file1 file2 exemplo de redireccionamento cat: file2: No such file or directory [so000@nemo exemplo]$ cat file1 file2 2>erros exemplo de redireccionamento [so000@nemo exemplo]$ cat erros cat: file2: No such file or directory [so000@nemo exemplo]$

possivel associarem-se redireccionamentos:


[so000@nemo exemplo]$ cat file1 file2 >outfile 2>&1 [so000@nemo exemplo]$ cat outfile exemplo de redireccionamento de erros cat: file2: No such file or directory [so000@nemo exemplo]$ cat file1 file2 >outfile 2>outfile [so000@nemo exemplo]$ cat outfile cat: file2: No such file or directory [so000@nemo exemplo]$ cat file2 file1 >outfile 2>outfile [so000@nemo exemplo]$ cat outfile exemplo de redireccionamento de erros

A sequncia de caracteres << utilizada na construo de here documents. O formato o seguinte:


<<palavra

as linhas existentes entre <<palavra e a prxima ocorrncia de palavra so utilizadas como entradas (stdin) para um comando.
[so000@nemo exemplo]$ cat <<ola > exemplo > de

16

> here document > ola exemplo de here document [so000@nemo exemplo]$

4.6.1

Utilizao de pipes: caracter |

Um pipeline uma sequncia de comandos separados pelo caracter |. Deste modo o standard output (resultados) do primeiro comando redireccionado para o standard input (entradas) do segundo comando, e assim sucessivamente. Exemplo:
[so000@nemo exemplo]$ ls erros file1 outfile [so000@nemo exemplo]$ ls |wc -w 3

Notas: O resultado do comando ls redireccionado para o standard input do comando wc.

4.7. Facilidades da shell


4.7.1 Completar texto na linha de comandos caracter TAB Se o texto comea com $, a bash tenta completar com o nome de uma varivel; Se o texto comea com ~, a bash tenta completar com o nome de um utilizador; Seno tenta completar com um comando Exemplo
[so000@nemo so000]$ h <tab> a shell completa com o comando history: [so000@nemo so000]$ history

A bash tenta completar o texto da linha d comando da seguinte forma:

Seno tenta completar com um nome de um ficheiro/directoria. Exemplo


[so000@nemo so000]$ De <tab> a shell completa com a directoria Desktop: [so000@nemo so000]$ Desktop/

Informao adicional: man complete e man bash 4.7.2 Comando history

O comando history permite obter a lista dos comandos previamente invocados. Alguns exemplos de utilizao da informao disponibilizada pelo histrico: !! : refere o ltimo comando invocado !n : refere o n-simo comando do histrico !<texto> : refere o ltimo comando cujo incio <texto> Podem tambm ser utilizadas as setas para percorrer o histrico dos comandos

17

5. Processos
Cada utilizador de um sistema Unix tem associados vrios processos. Define-se como processo um programa em execuo. Sempre que a nvel da shell se invoca um comando, so criados um ou mais processos no sistema, para a sua execuo. Cada processo tem um identificador nico, o pid do processo.

5.1. Visualizar processos: comando ps


A execuo do comando ps sem opes adicionais apresenta informao sobre os processos associados ao utilizador e ao terminal correntes. A informao apresentada inclui: o pid do processo, o terminal associado ao processo, o tempo de CPU utilizado e o nome do comando que esteve na origem do processo. Exemplo:
PID TTY 27255 pts/3 30690 pts/3 TIME CMD 00:00:00 bash 00:00:00 ps

Algumas opes do comando ps: -e: apresenta informao sobre todos os processos -f, -F: apresentam mais informao sobre os processos (ver man ps) -H: apresenta a hierarquia dos processos -L: apresenta informao sobre threads

5.2. Execuo de comandos em background


Normalmente a execuo de comandos sequencial: a shell cria um processo filho para executar o comando, e aguarda que o processo termine para poder prosseguir. No entanto, a shell permite que os comandos sejam lanados em background, atravs do operador &. Deste modo, a shell fica disponvel para tratar outros comandos. Exemplo:
[so000@nemo so000]$ emacs trab1.c & [1] 30823 [so000@nemo so000]$ ps PID TTY TIME CMD 27255 pts/3 00:00:00 bash 30823 pts/3 00:00:00 emacs 30824 pts/3 00:00:00 ps

Notas: O lanamento de comandos em background liberta imediatamente a shell para poder continuar a tratar comandos; A shell apresenta o pid do processo; Quando o processo terminar, a shell avisar o utilizador atravs da seguinte mensagem:
[id]+ Done comando

Quando um processo executado em background, normalmente tem-se stdin = /dev/null e stdout = /dev/tty

5.3. Matar um processo: comando kill


frequente acontecer que a execuo de um programa d origem a uma situao da qual parece no haver sada pelos meios mais pacficos. O comando kill envia um determinado sinal para um processo ou grupo de processos.

18

Exemplos de utilizao:
[so000@nemo so000]$ kill 30823 [so000@nemo so000]$ kill -9 30823 [1]+ Killed emacs trab1.c [so000@nemo so000]$ ps PID TTY TIME CMD 27255 pts/3 00:00:00 bash 30975 pts/3 00:00:00 ps

Notas: No primeiro caso o comando kill envia o sinal TERM (nmero 15) ao processo. Por omisso, quando o processo recebe este sinal morre. No entanto, o processo pode tratar este sinal, por exemplo, ignorando-o. No segundo caso o comando kill envia o sinal KILL (nmero 9) ao processo. Este sinal no pode ser tratado pelos processos. Quando um processo recebe este sinal morre. A sequncia de caracteres ctrl^c envia o sinal SIGINT (nmero 2) ao processo. Por omisso, quando os processos recebem este sinal, morrem. No entanto, este sinal tambm pode ser tratado pelos processos. Um utilizador s pode matar processos que tenham sido lanados por si prprio. O administrador do sistema pode realizar esta operao sobre qualquer processo em execuo.

Mais informaes sobre o comando kill: man kill. Mais informaes sobre sinais: man -s 7 signal.

5.4. Controlo de Jobs


A shell associa um job a cada comando ou a cada conjunto de comandos separados pelo caracter | e mantm uma lista dos jobs que esto em execuo. O controlo de jobs permite parar a execuo de processos e continuar a sua execuo posteriormente. Com este objectivo, a bash disponibiliza as seguintes funcionalidades: O comando jobs permite visualizar a lista dos jobs em execuo. A sequncia de caracteres ctrl^z permite parar um processo e coloc-lo em background. A sequncia de caracteres ctrl^y permite parar o processo quando este tentar ler dados a partir do terminal. O comando bg <nmero do job> permite continuar a execuo do processo em background. O comando fg <nmero do job> permite continuar a execuo do processo em foreground (fg 1 idntico a %1).

Exemplo:
[so000@nemo exemplo]$ vi trab1.c // dentro do vi fao ctrl^z [1]+ Stopped vi trab1.c [so000@nemo exemplo]$ sleep 120 & [2] 32385 [so000@nemo exemplo]$ jobs [1]+ Stopped vi trab1.c [2]- Running sleep 120 & [so000@nemo exemplo]$ sleep 130 ctrl^z [3]+ Stopped sleep 130

19

[so000@nemo exemplo]$ jobs [1]- Stopped [2] Running [3]+ Stopped [so000@nemo exemplo]$ bg 3 [3]+ sleep 130 & [so000@nemo exemplo]$ jobs [1]+ Stopped [2] Running [3]- Running [so000@nemo exemplo]$ %1 //volto a poder utilizar o vi

vi trab1.c sleep 120 & sleep 130

vi trab1.c sleep 120 & sleep 130 &

6. Outros comandos 6.1. Manual do unix: comando man


O comando man permite visualizar as pginas do manual do Unix. Modo de utilizao do comando:
man [opes] comando

Se houver informao respeitante a comando, man apresentar no cran o texto dessa informao dividido em trs seces (tal como no manual de Unix). A seco Name descreve sumariamente o comando. Na seco Synopsis apresentada a sintaxe de invocao. Finalmente a seco Description explica com maior detalhe o comando, descrevendo os seus argumentos, opes e ficheiros. Uma seco opcional de grande interesse See also que encaminha o utilizador para as pginas de manual de funes relacionadas. Para facilitar a leitura, toda a informao apresentada pgina a pgina. O avano nas pginas feito pela barra de espaos. A terminao de visualizao, pesquisa e opes de recuo na pgina esto dependentes do filtro de controlo de visualizao utilizado: more, less ou nenhum (ver notas sobre estes comandos). As pginas do manual esto organizadas em seces: Seco 1: comandos Seco 2: chamadas ao sistema operativo (funes escritas na linguagem de programao C) Seco 3: funes de biblioteca Seco 4: ficheiros especiais device files Seco 5: formatos comuns de ficheiros Seco 6: jogos Seco 7: miscelanea Seco 8: comandos de administrao Seco 9: funes da interface do ncleo do unix

Alguns comandos (por exemplo, printf) dispem de mais de uma pgina de manual, dispersas por vrias seces. Por omisso, man executa a pesquisa apenas at localizar a primeira ocorrncia para o comando. Este comportamento pode ser alterado recorrendo a duas opes: A opo -a pesquisa em todas as seces a pgina referente ao comando. Se existir mais que uma pgina, a seguinte ser apresentada quando a visualizao da anterior for terminada.

20

A opo -S aceita como argumento um conjunto de seces separadas pelo caracter dois pontos (:). Pode-se por isso fazer man -S 3 printf para visualizar a pgina referente ao comando printf da seco 3 em vez da referente ao comando na seco 1 que seria apresentada por omisso.

A utilizao normal do comando man pressupe que o utilizador conhece o nome do comando sobre o qual quer obter informao. Caso contrrio, o utilizador pode utilizar a seguinte opo: Opo k (idntica ao comando apropos) procura a palavra fornecida como argumento numa base de dados de comandos e suas descries. Desta forma, o comando man apresenta uma lista de comandos e suas descries (semelhante seco Name do comando man) em que a palavra indicada figura no nome do comando ou na sua descrio.

6.2. Filtros
Os filtros so comandos que lem alguns dados de entrada, realizam algumas operaes sobre esses dados e escrevem os respectivos resultados. Exemplos de filtros: 6.2.1
fgrep, grep, egrep: wc:

procuram as linhas que contm um determinado padro

conta o nmero de linhas, palavras e letras ordena linhas de texto apresenta o ltima parte do ficheiro remove linhas duplicadas de um ficheiro ordenado filtros programveis

sort: tail: uniq: cut:

remove seces de cada linha dos ficheiros

sed, awk:

Filtros grep, egrep, fgrep

grep [opo] padro [ficheiro...]

normalmente o padro tem de ser uma expresso regular bsica


egrep [opo] padro [ficheiro...]

o padro poder ser uma expresso regular estendida


fgrep [opo] palavra [ficheiro...]

considera apenas o valor literal de palavra Algumas expresses regulares usadas com grep: \c: literalmente o valor de c ^: no incio da linha $: no fim da linha .: qualquer caracter [...]: qualquer caracter contido em ... [^...]: qualquer caracter no contido em ... r*: zero ou mais ocorrncias de r

Algumas extenses de egrep:

21

r+: uma ou mais ocorrncias de r r?: zero ou uma ocorrncia de r r1|r2: r1 ou r2

Exemplos:
[so000@nemo exemplo]$ cat exemplo.grep Ficheiro para exemplicar a utilizao dos greps linha 1 linha 2 ^linha 3 esta a linha quatro e esta a linha cinco [so000@nemo exemplo]$ grep linha exemplo.grep linha 1 linha 2 ^linha 3 esta a linha quatro e esta a linha cinco [so000@nemo exemplo]$ grep ^linha exemplo.grep linha 1 linha 2

//no exemplo seguinte o caracter \ interpretado pela shell


[so000@nemo exemplo]$ grep \^linha exemplo.grep linha 1 linha 2 [so000@nemo exemplo]$ grep '\^linha' exemplo.grep ^linha 3 [so000@nemo exemplo]$ grep s exemplo.grep Ficheiro para exemplicar a utilizao dos greps esta a linha quatro e esta a linha cinco [so000@nemo exemplo]$ grep s$ exemplo.grep Ficheiro para exemplicar a utilizao dos greps [so000@nemo exemplo]$ grep 'linha [0-9]' exemplo.grep linha 1 linha 2 [so000@nemo exemplo]$ grep 'linha +[0-9]' exemplo.grep [so000@nemo exemplo]$ egrep 'linha +[0-9]' exemplo.grep linha 1 linha 2 ^linha 3 [so000@nemo exemplo]$ grep 'linha .' exemplo.grep linha 1 linha 2 ^linha 3 esta a linha quatro e esta a linha cinco [so000@nemo exemplo]$ egrep 'linha .+o$' exemplo.grep esta a linha quatro e esta a linha cinco [so000@nemo exemplo]$ egrep 'linha .o$' exemplo.grep [so000@nemo exemplo]$ egrep 'linha .+o$' exemplo.grep esta a linha quatro e esta a linha cinco [so000@nemo exemplo]$ egrep 'linha.+o$' exemplo.grep esta a linha quatro e esta a linha cinco

22

Você também pode gostar