Dicas unix


CYBER NINE ( de IMPERADOR HACK3R)

PROGRAMA:

1. Histórico

2. Principais características

3. Comandos iniciais
login / logout
passwd
ls
date
cat
wc
who
man
mail

4. Manipulação de arquivos
Arquivos ordinários
Diretórios
Arquivos especiais
Nomes
Caminhos ou vias
Comandos para manipulação de diretórios
Proteção
Movimento e mudança de nome
Cópia
Eliminação
5. Processos
Características
Processos do sistema
Controle e monitoração

6. Shells
Características
Redireção
Canalização e filtros
Metacaracteres e coringas

7. O editor "vi"
Características
Movimento do cursor
Criação, saída e gravação
Inserção e deleção
Pesquisa e troca de "strings"
Cópia e transferência de linhas
Desfazendo erros
Customização de ambiente

8. Utilitários e ferramentas
find
grep
cut
paste

9. Conclusões

***************************************************
1. Histórico


O sistema UNIX fornece essencialmente os mesmos serviços que são oferecidos por outros sistemas operacionais: ele permite rodar programas, fornece uma interface conveniente e consistente a uma grande variedade de dispositivos periféricos (impressoras, fitas, discos, terminais, etc.) que são conectados à maioria dos computadores, e fornece um sistema de arquivos para o gerenciamento de informações. A exclusividade do UNIX é em grande parte devida à maneira como foi feito. Podemos entender melhor a crescente popularidade deste sistema adotando uma perspectiva histórica.

Parte da popularidade do sistema UNIX é atribuída a sua portabilidade, flexibilidade e elegância. Ironicamente, o UNIX emergiu do sótão de uma das mais sólidas corporações do mundo: a Bell Laboratories, o braço subsidiário de pesquisas da AT&T. A maioria dos sistemas operacionais foi desenvolvido por fabricantes de computadores para venderem computadores. Considerando que a AT&T não estava no negócio de vendas de computadores, o UNIX não foi originalmente concebido como um produto comercial. Ele somente se tornou um empreendimento comercial em resposta à grande demanda que se desenvolveu.

No final dos anos 60, a Bell Labs estava envolvida com um sistema operacional chamado Multics. O Multics é um sistema interativo de múltiplos usuários que utiliza uma CPU de computador GE. A Bell Labs retirou-se do projeto Multics em 1969, mas o Multics teve importante influência no UNIX. Na verdade, o nome UNIX teve uma relação com a palavra Multics. Uma das diferenças determinantes entre o UNIX e o Multics é a complexidade - o sistema operacional UNIX é relativamente simples enquanto que o Multics é extremamente complexo.

Mais ou menos no mesmo momento em que a Bell se retirou do projeto Multics, Ken Thompson, o "vovô do UNIX", começou a "consertar" um microcomputador rejeitado, da Digital Equipment Corporation, o PDP-7. Ostensivamente, Thompson desejava criar um sistema operacional que pudesse apoiar os esforços coordenados de um time de programadores num ambiente de pesquisa de programação. Este objetivo foi alcançado com sucesso. Também com o objetivo de apaziguar a gerência, Thompson propôs que os próximos desenvolvimentos do UNIX fossem apoiados pela Bell para fornecer uma ferramenta de preparação de documento à organização de patentes da companhia. Uma versão primitiva do UNIX que utilizava um PDP-11/20 foi entregue à organização de patentes da Bell Laboratories em 1971.

Bem no início, duas disciplinas aparentemente incompatíveis, programação e preparação de documentos, foram as pedras fundamentais do UNIX. Na prática, o UNIX demonstrou que ferramentas de gerenciamento de texto são centrais para muitas disciplinas, inclusive programação. As pessoas têm criticado o UNIX por ele ser apenas um processador de palavras. Enquanto há aplicações que necessitam de sistema operacionais que não o UNIX, o enfoque em manipulação de textos serviu para torná-lo um sistema operacional extremamente versátil. O texto é um meio de comunicação aceito universalmente, uma característica chave para um sistema operacional interativo de propósito geral.

Os esforços originais de Ken Thompson culminaram na criação de um sistema operacional, um PDP-7 montador, e vários programas utilitários em linguagem de montagem. Em 1973, Dennis Ritchie reescreveu o UNIX na linguagem de programação C. C é uma linguagem de programação de alto nível, de propósito geral, que foi desenvolvida por Ritchie. Ela provou ser adaptável a muitos tipos diferentes de arquitetura de computador. Se o UNIX não tivesse sido reescrito em uma linguagem de baixo nível, ele teria sido acorrentado à máquina (o obsoleto PDP-7) na qual foi desenvolvido. Uma vez que os programas em linguagem de montagem originais também haviam sido escritos na linguagem C, repentinamente foi possível transportar todo o UNIX de um ambiente para o outro com o mínimo de dificuldade.

Sistemas operacionais têm sido tradicionalmente ligados a um computador ou a uma família de computadores porque eles foram escritos em linguagem de montagem. Apesar do UNIX não ter sido originalmente destinado a ser um sistema operacional portátil, uma vez ter sido codificado em C, tudo estava em ordem para transportá-lo para outros sistemas. O primeiro transporte para um tipo diferente de computador foi conseguido por Ritchie e Stephen Johnson em 1976, quando eles transportaram o UNIX para o Interdata 8/32. Desde então, o UNIX já foi transportado para uma dúzia ou mais de arquiteturas, variando de microprocessadores de um chip, tais como o Zilog Z-80 e Z-8000, o Motorola MC 6800 e o Intel 8086, a grandes máquinas como o IBM 370 e o Amdahl 470 .

Enquanto Thompson ganhava a aceitação de seus colegas e da gerência durante o início dos anos 70, o UNIX começou a ser utilizado internamente através da Bell System. E enquanto a fama do sistema operacional se espalhava, gerava interesse em várias instituições acadêmicas de prestígio. Em 1975, a Western Electric começou a licenciar o UNIX. A taxa era nominal para instutuições acadêmicas, encorajando muitas delas a utilizar e posteriormente desenvolver o UNIX. Porque o UNIX era considerado tão favorável pelas comunidades acadêmicas de pesquisa de alta tecnologia, ele foi inicialmente visto com ceticismo pela comunidade comercial. Recentemente, esta comunidade entendeu a facilidade com que o UNIX pode ser adotado para uma grande variedade de aplicações. Começando no fim dos anos 70, uma indústria de UNIX apareceu para fornecer hardware, software e serviços relacionados.

O UNIX foi pioneiro em várias idéias importantes. Uma das mais importantes inovações é a canalização, que, por sua vez, levou à idéia de que funções complicadas podem ser programadas como um conjunto de programas funcionando juntos.

Uma outra idéia que se difundiu no UNIX é a noção de ferramenta de software. Esta idéia não é exclusiva do UNIX mas certamente se desenvolveu mais nele do que em outros sistemas. Para simplificar tarefas de programação envolvendo o reconhecimento de uma linguagem de comando, o UNIX possui o yacc e o lex. Estes dois programas permitem a um programador implementar um interpretador de linguagem de comando, descrevendo a linguagem de comando numa forma tabular em vez de escrever um interpretador exclusivo para a linguagem. Dois outros exemplos de ferramentas sofisticadas são o Make e o Source Code Control System (SCCS) - Sistema de Controle de Código Fonte. Make é utilizado para especificar as interdependências em um sistema de software para que o sistema possa ser mantido automaticamente. O SCCS é utilizado para seguir os passos de um sistema de software, através de todo o seu tempo de vida madura, para que versões antigas possam ser recuperadas e novas versões possam ser documentadas.

Neste ponto o UNIX parece estar emergindo como um sistema operacional padrão para uso geral em uma ampla gama de computadores. Não é possível que ele seja largamente utilizado em situações onde um computador é usado para um propósito especial utilizando-se de um sistema operacional especializado (ex: processamento de transações, sistemas de reservas, sistemas de tempo real).

Um aspecto do futuro do UNIX se relaciona com sua grande aceitação e uso na comunidade acadêmica computacional. O UNIX tornou-se um padrão com o qual novos desenvolvimentos de sistemas operacionais são avaliados.
2. Principais características


As principais características do sistema operacional UNIX são:

- arquitetura aberta;
- portabilidade através de diferentes tipos de hardware;
- sistema de arquivos independente dos dispositivos físicos;
- possibilidade de encadear diferentes programas a fim de executar grandes tarefas;
- projetado para múltiplos usuários executando múltiplas tarefas;
- pouco apropriado para aplicações de tempo real;
- má gerência no caso de vários usuários rodando as mesmas aplicações.


Estrutura do UNIX

O UNIX é constituído basicamente dos seguintes componentes:


Fig. 1 - Estrutura fundamental do UNIX


O KERNEL (Núcleo do Sistema Operacional)

Certas funções de sistemas operacionais são necessárias muitas vezes a cada segundo. Por exemplo, a parte do UNIX que se envolve na mudança de um programa para o outro (tempo compartilhado) é solicitada muitas vezes a cada segundo. No UNIX todas as funções que são necessárias de imediato são mantidas constantemente na memória. A parte de um sistema operacional que fica residente na memória é chamada de núcleo.

Muitas funções do sistema operacional são necessárias apenas ocasionalmente, tal como a capacidade de transportar alguma informação de um dispositivo de armazenamento de massa para outro. Estes tipos de funções são fornecidos por utilitários, programas padrão que são solicitados de acordo com a demanda dos usuários. No UNIX é fácil incrementar o estoque de utilitários simplesmente escrevendo um programa novo e útil.

Em muitos sistemas operacionais, o núcleo contém muitas características. O UNIX tenta dotar o núcleo de características relativamente novas para que a maioria das funções do sistema operacional possa ser fornecida por programa utilitários.
O kernel do UNIX é responsável pelo escalonamento de processos, alocação de espaço em disco, supervisão da transferência de dados entre a memória e os dipositivos periféricos e resolução das solicitações de serviço dos usuários. O kernel nunca faz nada diretamente para um usuário; todos os serviços são fornecidos por programas utilitários que interfaceam os usuários e o núcleo.
Como vimos na figura 1, o kernel é formado por dois componentes importantes:


O Controlador de Processos

Responsável pelo escalonamento dos processos, que nada mais são do que programas em execução num determinado ambiente. Para um dado programa pode haver zero, um ou vários processos ativos em um determinado momento. Essa idéia de que os programa têm vida é conveniente e útil, já que torna mais fácil pensarmos sobre os mesmos e controlá-los corretamente. Cada vez que um processo é criado, seu fluxo de dados "default" será:

Fig. 2 - Fluxo de dados "default" de um processo


O Sistema de Arquivos

O sistema de arquivos hierárquico é uma das características mais importantes do sistema UNIX. A função mais básica de qualquer sistema de arquivos é a de particionar o armazenamento em discos e fitas em unidades nomeadas que chamamos de arquivos. Em muitos sistemas há vários tipos de arquivos com métodos de acesso distintos para cada tipo.

No UNIX todos os arquivos são uma sequência simples de bytes. Às vezes, os arquivos são referidos como arquivos texto ou arquivos binários, mas a distinção é o conteúdo do arquivo (arquivo de texto contém somente valores ASCII) e não a estrutura ou o método de acesso ao mesmo.

Do ponto de vista do usuário do sistema, um diretório é um grupo de arquivos. Em alguns sistemas operacionais (outros que não o UNIX), todos os arquivos em um volume de armazenamento estão contidos em um diretório. Ainda outros sistemas de arquivos, particionam o disco em um número de diretórios e parcelam os arquivos em um dos diretórios. Ambos os métodos criam um sistema de arquivos plano. Tudo no mesmo nível. Sistemas de arquivos planos são utilizáveis, mas são confusos porque cada diretório contém muitos tipos de arquivo.

O UNIX possui um sistema de arquivos hierárquico. Os arquivos não estão armazenados em um nível mas em níveis múltiplos e o sistema de arquivos apóia a ilusão de "lugares" dentro do sistema. Em sistemas de arquivos planos, o diretório é a principal estrutura organizacional do sistema; o diretório contém todas as informações sobre arquivos, incluindo seus nomes, comprimentos, posições, datas de acesso, modos e tipos. Porque os diretórios em sistemas de arquivos planos contêm todas as informações importantes sobre os arquivos, eles são escondidos e protegidos pelo sistema operacional. Entretanto, no UNIX os diretórios são apenas arquivos que podem ser lidos por qualquer programa. Embora o diretório seja a estrutura visível do sistema de arquivos UNIX, eles não são o depósito de todas as informações sobre os arquivos. Os diretórios contêm apenas duas partes de informações para cada arquivo: o nome do arquivo e um número usado pelo núcleo para acessar as estruturas ocultas do sistema de arquivos.
A parte oculta do sistema de arquivos do UNIX é o inode. Inodes estão onde a ação realmente acontece no sistema de arquivos UNIX. Há um inode para cada arquivo. O inode contém informações sobre a posição, o comprimento, o modo de acesso, as datas relevantes (criação, último acesso, etc.), o proprietário e similares. O usuário casual do UNIX está bem protegido dos inodes, ou seja, não precisará manipulá-los.

Na figura abaixo, o sistema de arquivos padrão dos sistemas UNIX:


Fig. 3 - Sistema de arquivos padrão do UNIX

O núcleo do sistema UNIX contém cerca de 10.000 linhas de código C e cerca de 1.000 linhas de código de montagem. Um programa deste tamanho pode ser compreendido e mantido por um único indivíduo. Muitos sistemas UNIX são distribuídos com o código fonte do núcleo e de todos os utilitários. Isto permite aos programadores (de sistema) estudarem e trabalharem com o seu próprio sistema.


O Editor e o SHELL

Usuários típicos do UNIX gastam a maioria do seu tempo usando dois programas: o shell e o editor. Para usar a flexibilidade do UNIX é necessário ter-se um conhecimento do funcionamento de muitos outros programas, mas grande parte do seu tempo será provavelmente gasto usando estes dois programas.

O editor padrão do UNIX é um programa interativo, o "vi". O controle do editor é feito por comandos. Há comandos para imprimir linhas, para acrescentar e modificar texto de um arquivo. O editor será utilizado para uma larga variedade de funções, tais como: criar arquivos com mensagens para serem enviadas eletronicamente, alteração de tabelas do sistema, acesso e modificação ao "buffer" de comandos digitados pelo usuário.
O shell é um dos programas mais importantes do UNIX. Como o editor, o shell também é um programa interativo. Pode-se controlar o shell através de comandos que o mesmo interpreta (decodifica) e executa. Portanto o nome técnico do shell é interpretador de comandos.

A função de um interpretador de comandos é executar os comandos que forem inseridos. Por exemplo, se você quiser rodar o programa que mostra a data e a hora na tela, insira o comando "date" e o shell fará com que este programa seja executado pelo UNIX.

Em muitos sistemas operacionais o interpretador de comandos é uma parte da estrutura interna do sistema operacional. No UNIX, entretanto, o shell é somente um programa comum, semelhante ao programa da data ou a qualquer outro programa que rode no UNIX. A única característica especial do shell é o fato de ele ser central à maioria das interações com o UNIX.

Existem vários shells disponíveis para o UNIX, cada um com características particulares e apropriado para usuários com determinado perfil.
Em UNIX, quase todos os programas são ferramentas simples que podem ser combinadas com outros programas para produzirem ferramentas poderosas e, o shell, é a chave para coordenar e combinar programas no UNIX.
3. Comandos iniciais


A partir de agora vamos apresentar os comandos necessários para um primeiro contato com o UNIX. O formato da maioria dos comandos UNIX é extenso, com muitas opções, chaves ou switches. Desse modo, de cada comando só serão apresentadas as chaves e opções necessárias ao aprendizado básico que é a proposta do presente curso. Essa observação é válida para todos os comandos vistos neste material.

Outra característica bastante peculiar do UNIX é o fato do mesmo ser "case-sensitive", ou seja, ele considera diferentes comandos digitados em maiúsculo ou minúsculo. Portanto, a partir de agora digite sempre seus comandos com letras minúsculas, salvo consideração em contrário.


login / logout

A primeira coisa que você tem que fazer para usar o UNIX é acessá-lo. O propósito do acesso ao sistema - login - é duplo: deixar o UNIX verificar seu direito de utilizar o sistema e preparar o ambiente do usuário. Na maioria dos sistemas operacionais de um único usuário (quase todos os computadores pessoais) não há procedimento de login pois o acesso físico ao hardware confirma seu direito de utilizar o sistema.

Antes que seja possível uma operação de login, o administrador do sistema deverá criar uma conta para o usuário. Sem esse cadastramento o UNIX não permitirá o acesso aos seus recursos.

Uma vez ligado o terminal, pressione <enter> ou <ctrl-d> para receber o sinal de login, cuja mensagem pode variar ligeiramente dependendo da versão do UNIX. Digite agora a sua conta ou nome de usuário (verifique com o guru local) e sua senha, que não será ecoada na tela por questões de segurança. Assim, o UNIX verifica seu direito de acesso e a partir disso, é mostrado o "prompt" ($) e você está habilitado a utilizar o sistema.

Com o passar do tempo, o processo de login vai se tornando uma tarefa extremamente rotineira mas sempre preste atenção nas mensagens apresentadas. Você poderá ter correspondências, alguns avisos importantes do administrador e outros.

Para encerrar sua sessão de uso, digite <ctrl-d> ou exit ou logout. É um procedimento importante para que o acesso a sua conta não fique aberto.


passwd (PASSWORD)

Função: Mudar a senha de acesso ao sistema.

Formato: passwd

Descrição

O comando passwd é utilizado para modificar a password dos usuários. Com esse comando, você pode modificar apenas a sua senha. Digitando o comando passwd será solicitada sua senha atual e posteriormente sua nova senha, que deverá ser informada duas vezes para confirmação.

O administrador do sistema tem privilégios para alterar a senha de qualquer usuário.
Exemplo: Mude sua própria senha de acesso ao sistema:
passwd
ls (LIST)

Função: Listar o conteúdo dos diretórios

Formato: ls [-1Almt] [Arquivo...] [Diretório...]

Descrição

O comando ls é utilizado para listar os arquivos em diretórios e para listar informações sobre arquivos. As opções podem ser utilizadas para controlar as informações impressas de cada arquivo e para controlar a ordem da lista.

Opções:
-1 - mostra os nomes de arquivo em uma só coluna
-A - mostra também os arquivos que começam por . (escondidos)
-l - apresenta várias informações sobre o arquivo (longo)
-t - classifica de acordo com a data de modificação
Arquivo - lista de arquivos que se deseja verificar. Separador = espaço
Diretório - lista de diretórios que se deseja verificar.

Exemplos:
Liste os arquivos no diretório atual:
ls
Liste em 1 coluna todos os arquivos do diretório 'ufpa':
ls -1 /ufpa
Liste em formato longo os arquivos do diretório corrente:
ls -l
Liste os arquivos no diretório '/bin' de acordo com a data de modificação e formato longo:
ls -lt ou ls -l -t


date

Função: Apresentar e alterar a data do sistema

Formato: date

Descrição

O comando date é utilizado para alterar e/ou exibir a data e hora do sistema mas somente o administrador do sistema pode alterar essas informações.

Exemplo: date


cat (CONCATENATES OR DISPLAY FILES)

Função: Concatenar ou mostrar o conteúdo de arquivos e digitar arquivos simples.

Formato: cat [arquivo]

Descrição

O comando cat é usado para dois propósitos: apresentar o conteúdo de arquivos no terminal e para concatenar vários arquivos em um, usando o redirecionamento de saída. Quando utilizamos cat para concatenar arquivos, não é interessante que o arquivo de saída seja o mesmo que o(s) arquivo(s) de entrada, o resultado poderá ser diferente do esperado.
Exemplos:
Crie o arquivo teste1, digitando algo para o mesmo:
cat > teste1
Apresente na tela os arquivos teste1 e teste2:
cat teste1 teste2
Junte os arquivos teste1 e teste2 para teste3:
cat teste1 teste2 > teste3
Junte todos os arquivos teste? em teste4:
cat teste? > teste4
Junte teste3 e teste1 em teste5 (nesta ordem):
cat teste3 teste1 > teste5
Junte os arquivos teste1 e teste3 em teste5:
cat teste[31] > teste5


wc (WORD COUNT)

Função: Contar o número de linhas, palavras e caracteres contidos num arquivo.

Formato: wc [-lwc] [Arquivo...]

Descrição

O comando wc é usado para contar unidades de texto em arquivos de textos.

Opções:
-l - mostra o número de linhas contidas no arquivo
-w - mostra o número de palavras contidas no arquivo
-c - mostra o número de caracteres no arquivo
Arquivo - lista de arquivos que se deseja verificar. Separador = espaço

Exemplos:
Conte as linhas, palavras e caracteres em 'teste2':
wc teste2 ou wc -lwc teste2
Conte o número de linhas de 'teste2':
wc -l teste2
Conte o número de linhas e caracteres:
wc -lc teste2


who

Função: Mostrar os usuários que estão utilizando o sistema.

Formato: who [?] [-us] [am i]

Descrição

O comando who produz uma lista com todas as pessoas que estão acessando o sistema no momento. A lista contém nome, terminal, data e hora do acesso de cada usuário.

Opções:
? - mostra apenas o nome do usuário corrente
-u - mostra informações úteis sobre os usuários correntemente logados
-s - apresenta informações resumidas
am i - mostra as informações do usuário corrente

Exemplos:
Liste os usuários atuais:
who
Liste seu nome de acesso ao sistema:
who am i
Outros
who ?
who -u


man (MANUAL)

Função: Apresentar a descrição, sintaxe e exemplos de dado comando.

Formato: man [comando]

Descrição

O comando man é utilizado para localizar e imprimir citações do manual do UNIX. Ele é basicamente usado pelos usuários para reproduzir seções do manual, como uma rápida referência quando o mesmo não está disponível. Para navegar no texto use <barra de espaço> e <ctrl-b>. Para encerrar a consulta, <ctrl-c>. Alguns comandos não possuem manual de informações disponível.

Exemplos:
man ps
man date


mail

Função: Enviar e receber correspondência para/de usuários.

Formato:
mail [-rp] [-f arquivo]
mail [usuário]

Descrição

O envio e recepção de correspondência é uma característica bastante interessante e usada do UNIX. o comando mail permite troca de correspondências entre usuários ou grupos de usuários que pertençam a nossa instalação. Quando iniciamos uma sessão, se alguém nos tiver enviado alguma correspondência, o sistema apresentará a mensagem "You have mail". Digite mail e você poderá executar uma das ações abaixo com a sua correspondência.

d - eliminar correspondências
s - anexar correspondências a um arquivo
t - dirigir-se para o topo da lista de correspondências
? - mostrar as opções do mail
q - sair do mail

Para enviar uma mensagem digite mail seguido dos nomes dos usuários que você deseja que recebam sua correspondência. Depois disso informe o assunto, o texto e encerre a digitação com <ctrl-d>. Em seguida digite <enter> e a correspondência já terá sido enviada.

O mail não possui muitas facilidades para edição do texto a ser enviado. A partir do momento que você encerrou a digitação de uma linha com <enter>, não será mais permitido o acesso a ela. Portanto se você deseja enviar um texto mais polido e trabalhado crie um arquivo com o mesmo via um editor de textos.

Opções:
-r - mostra as mensagens mais antigas primeiro
-p - mostra todas as mensagens sem pausa
Exemplos:
Recebe a correspondência:
mail
Envia correspondência para os usuários 'joão' e 'jose':
mail joao jose
Envia correspondência ao 'reitor' que está contida no arquivo 'oficiodoc':
mail reitor < oficiodoc
4. Manipulação de arquivos


Um arquivo UNIX não possui formato predefinido. Não possui comprimento de linha ou marcador de fim de arquivo. Ele é considerado pelo sistema como sendo apenas um "string"de caracteres. Os componentes de um arquivo são: seu nome, conteúdo e outros dados identificadores. Em UNIX existem três tipos de arquivos:


Arquivos ordinários

Um arquivo ordinário, ou comum, é utilizado para armazenar informações. Um arquivo ordinário pode conter um programa a ser executado, o texto de um documento, os registros de uma companhia, ou qualquer outro tipo de informação que um computador possa processar.


Diretórios

São arquivos que contêm listas de arquivos. Programas em execução podem ler os arquivos de diretório, mas para garantir a integridade das informações, somente o sistema operacional pode atualizá-los. Os diretórios contém o nome e o inode, que é um ponteiro para onde se encontram outras informações do arquivo.


Arquivos especiais

Uma das características do UNIX é a associação de todo o hardware de E/S com arquivos especiais. O acesso ao próprio hardware de E/S imita o acesso aos arquivos em disco comuns. Cada dispositivo de E/S (impressora, teminal, disco, unidade fita, etc.) possui pelo menos um arquivo especial. Um programa pode acessar um arquivo especial para acessar o hardware de E/S. Embora pareça complicado é na verdade uma grande simplificação comparada à maioria dos outros sistemas de computador.

Os tipos de arquivo vistos acima são agrupados em diretórios e os diretórios são organizados em hierarquia. O topo da hierarquia é um diretório especial chamado de raiz. O diretório raiz contém uma variedade de arquivos relacionados ao sistema e inclui alguns diretórios como /bin, /usr, /dev, /etc e /lib.


Nomes

Veremos agora algumas regras e convenções para a construção de nomes de arquivos do UNIX.

- Procure usar nomes descritivos;
- Tamanho máximo de 255 caracteres alfanuméricos (recomendado = 10);
- Espaços em branco não permitidos;
- Não podem começar por + nem -;
- Nomes de comandos do sistema são palavras reservadas;
- Sensível à caixa, teste =/= TESTE =/= Teste;
- Arquivos começando com ponto ficam escondidos do formato default dos comandos ls e li;
- Não use os metacaracteres do shell - * ? < > / ; &. Apesar de aceitos são problemáticos no acesso aos arquivos.
- O caracter ponto (.) não estando na primeira posição, não possui siginificado especial, podendo ser utilizado repetidas vezes no mesmo nome de arquivo;
- Algumas convenções:
arquivo.c Código fonte em C
arquivo.h Arquivo para "include" do C
arquivo.f Código fonte em FORTRAN
arquivo.p Código fonte em PASCAL
arquivo.s Código fonte em ASSEMBLY
arquivo.o Código objeto


Caminhos ou vias

Um nome de via especifica um caminho através do sistema de arquivos, que nos leva ao arquivo desejado. Caminhos podem ser de dois tipos:

- Full ou completo - começa com /, ou seja, define o caminho a partir da raiz
- Relativo - começa a partir de determinado diretório, que deverá ser referenciado por um ponto (.), significando o diretório corrente e ponto ponto (..), significando o diretório pai do atual.

Veja abaixo algumas regras para utilização de diretórios:

1. Se o nome de via começa com uma barra, então a via começa no diretório raiz. Todas as outras começam no diretório atual.

2. Um caminho ou via é uma lista de nomes separados por barras ou um único nome. Os nomes iniciais na lista (se houver) são diretórios. O nome final na lista é o arquivo alvo, o qual pode ser um arquivo de qualquer tipo.

3. Podemos ascender hierarquicamente ao sistema de arquivos especificando o nome ".." em um nome de via. Todos os outros nomes em um caminho descem na hierarquia.

4. Nenhum espaço é permitido em um nome de via.

Comandos para manipulação de diretórios

pwd (PRINT WORKING DIRECTORY)

Função: Mostrar o diretório corrente.

Formato: pwd

Descrição

Imprime o nome de caminho completo (desde de a raiz) do diretório atual. É boa política sempre usar este comando, principalmente quando você for apagar arquivos, a fim de ter certeza do que está fazendo.

Exemplo: pwd

mkdir (MAKE DIRECTORY)

Função: Criar um diretório.

Formato: mkdir diretório

Descrição

Utilizamos mkdir para criar diretórios. Para tanto, devemos ter permissão de gravação no diretório de origem do diretório que será criado.

Exemplos: Crie o diretório '/u/mario/progs':
mkdir /u/mario/progs
Crie, a partir do diretório corrente, o diretório 'progs':
mkdir progs


cd (CHANGE DIRECTORY)

Função: Possibilita o caminhamento na árvore de diretórios do sistema.

Formato: cd [Diretório]

Descrição

Com cd, você pode mover-se de um diretório para o outro usando caminhos completos (full) ou relativos. cd sozinho volta sempre para o diretório "home", que é o diretório em que você é colocado logo após o login.

Exemplos: Caminhe para o diretório '/u/mario/progs':
cd /u/mario/progs
Mude para o diretório pai do diretório atual:
cd ..
Mude para o diretório "home":
cd

rmdir (REMOVE DIRECTORY)

Função: Remove um diretório

Formato: rmdir [Diretório]

Descrição

Usado para remover diretórios vazios. Por definiçao, um diretório vazio é aquele que contém somente duas entradas '.' e '..'. Para removermos um diretório precisamos ter permissão de gravação no diretório de origem (pai).

Exemplos: Remova o diretório 'progs' que está abaixo do atual:
rmdir progs
Remova o diretório '/u/mario/progs':
rmdir /u/mario/progs

Proteção

chmod [CHANGE MODE]

Função: Muda o modo de acesso a um arquivo

Formato: chmod modo arquivo

Descrição

A capacidade de regular o sistema de arquivos para um acesso flexível e protegido aos arquivos é uma das vantagens do sistema UNIX. O comando chmod, que será apresentado mais adiante, permite a mudança de modo dos arquivos mas apenas pelos proprietário do arquivo ou pelo superusuário (administrador do sistema).

As três operações que podem ser desempenhadas num arquivo são leitura, gravação e execução. Existem três níveis de privilégio associados com cada arquivo, os privilégios de propriedade, os privilégios de grupo e os privilégios dos outros. Para cada nível de privilégio, cada uma das operações básicas pode ser permitida ou negada.

Podemos determinar os modos dos arquivos que possuímos usando a seguinte convenção para utilizar o chmod:

Quem Operadores
u usuário (proprietário) - remove a premissão
g grupo + acrescenta a permissão
o outros = designa permissão
a todos (ugo)

Permissões
r leitura
w gravação
x execução

Exemplos: Retire do arquivo teste, as permissões de gravação e leitura para os do grupo e outros:
chmod go-rw teste
Atribua a todos o direito de leitura e gravação sobre o arquivo teste1:
chmod a=rw teste1
Torne impossível para qualquer um criar arquivos no diretório atual:
chmod a-w
Torne o arquivo 'ufpa.br' executável:
chmod + x ufpa.br
Faça as permissões de grupo e outros para o arquivo 'teste5' o mesmo que permissões atuais do proprietário:
chmod go = u teste5


Movimento e mudança de nome

mv (MOVE)

Função: Mover e renomear arquivos.

Formato: mv [Arquivo1] [Arquivo2]
mv [Arquivo1...] [Diretório]

Descrição

O comando mv é utilizado para gerenciar arquivos. Em sua forma mais simples é usado para renomear arquivos, mas pode ser utilizado para mover arquivos de um diretório para outro.

Opções: Arquivo1 - nome atual do arquivo
Arquivo2 - nome novo do arquivo
Diretório - diretório que receberá os arquivos

Se Arquivo1 é uma lista de arquivos, então o segundo argumento deverá ser obrigatoriamente um diretório.
Se o Arquivo2 for o nome de um arquivo já existente, o Arquivo1 será gravado sobre o Arquivo2. Tenha cuidado!!.
Sempre ao final da execução deste comando a quantidade de arquivos permanece a mesma. Os arquivos movidos ou renomeados herdarão os mesmos atributos dos arquivos fonte.

Exemplos: Renomeie o arquivo 'teste1' para 'teste2':
mv teste1 teste2
Transporte o arquivo 'teste1' para o diretório '/u/joao':
mv teste1 /u/joao
Transporte todos os arquivos no diretório '/u/ricardo' para o subdiretório /u/aurelio':
mv /u/ricardo/* /u/aurelio


cp (COPY)

Função: Copiar arquivos.

Formato: cp [Arquivo1] [Arquivo2]
cp [Arquivo1...] [Diretório]

Descrição

Possibilita a cópia de arquivos dentro de um mesmo diretório, cópias entre diretórios e até cópia completa de diretórios.

Opções: Arquivo1 - nome do arquivo fonte
Arquivo2 - nome do arquivo destino
Diretório - nome do diretório alvo

Exemplos: Faça uma cópia do arquivo 'nuk.abm' para o arquivo 'nk.2':
cp nuk.abm nk.2
Copie todos os arquivos do subdiretório 'textos' para o subdiretório 'newtext':
cp textos/* newtext
Copie todos os arquivos com o sufixo '.doc' no diretório atual para o subdiretório 'newtext':
cp *.doc newtext


rm (REMOVE)

Função: Remover arquivos.

Formato: rm [-fir] arquivo...

Descrição

O comando rm nos permite deletar arquivos ordinários. Para removermos um arquivo, devemos ter permissão de gravação no diretório que contém o arquivo desejado, mas não precisamos desta permissão ou da permissão de leitura para o arquivo em si. Se não tivermos essa permissão, rm imprimirá o modo do arquivo e aguardará até que possamos inserir "y" ou "n" para indicar se realmente desejamos remover o arquivo.

Opções: -f - a opção de força remove os arquivos sem se preocupar se temos ou não a permissão de gravação no arquivo. Nenhuma consulta ao usuário é feita;
-i - a opção interativa faz com que rm solicite confirmação para a remoção;
-r - a opção recursiva é utilizada para remover uma sub-árvore inteira do sistema de arquivos. No argumento arquivo você coloca o nome do diretório que terá todos os seus arquivos e subdiretórios apagados. Use essa opção com cuidado e junto com -i para obter maior segurança.

Exemplos: Remova o arquivo 'ufpa':
rm ufpa
Remova vários arquivos:
rm texto1 texto5 texto12
Remova todos os arquivos do diretório 'trab':
rm trab/*
Remova todos os arquivos do diretório 'trab', interativamente:
rm -i trab/*
Remova a sub-árvore liderada pelo diretório '/trab/teste':
rm -r /trab/teste
Remova todos os arquivos do diretório 'trab' sem perguntar pelos arquivos protegidos:
rm -f trab/*

Tabela resumo das permissões requeridas por comando

Comando Diretório Fonte Arquivo fonte Diretório Destino
cd x N/A N/A
ls, li r N/A N/A
mkdir x, w (pai) N/A N/A
rmdir x, w (pai) N/A N/A
cat,pg,more x r N/A
mv x, w Nenhum x, w
cp x r x, w
touch x N/A Nenhum
rm x, w Nenhum N/A
5. Processos


Características

Para o sistema operacional UNIX, um processo é um programa em execução. É uma tarefa submetida ao sistema para ser executada. Uma outra maneira de se definir um processo em UNIX é dizer que o mesmo é a execução de um programa dentro de um ambiente próprio. O UNIX suporta a ilusão de que os processos têm vida e, desse modo, poderemos manipulá-los como tal. As entidades arquivo e processo são os dois conceitos centrais do modelo do sistema UNIX.


Como pode ser visto na figura abaixo, programas como o shell ou editores interagem com o kernel invocando chamadas do sistema (system calls). Essas chamadas instruem o kernel a executar várias operações para os programas que as chamaram. O intercâmbio de dados entre o kernel e os programas é um exemplo.
Fig. 4 - A estrutura do sistema UNIX

As principais características de um processo são:

- Multi-tarefa - Muitos processos podem executar "simultaneamente". O termo mais apropriado seria concorrentemente. Muitas ocorrências do mesmo programa podem ser executadas ao mesmo tempo.

- Auto-contido - Cada processo é executado independentemente no seu próprio ambiente, mas podem comunicar-se com outros processos e com o resto do mundo via chamadas do sistema.

Os processos normalmente executam em modo usuário, entretanto, quando chamadas ao sistema são usadas, o processo é chaveado para modo supervisor (kernel).

O ambiente de um processo é um conjunto de informações que possibilitam ao UNIX o controle e a gerência sobre os processos em execução. O ambiente de um processo é constituído pelas seguintes informações:

- Programa;
- Dados;
- Arquivos abertos;
- Diretório corrente;
- Identificação do usuário;
- Identificação do processo;
- Identificação do processo pai;
- Outras variáveis do sistema.

O UNIX possui a facilidade de execução de processos em vanguarda (foreground) ou em retaguarda (background). Às vezes precisamos executar programas que levam muito tempo para terminar. Se o mesmo não exige entrada do terminal, então você pode rodá-lo sem a atenção do operador. Um usuário pode disparar vários processos em background enquanto executa outra tarefa em foreground já que o UNIX irá rodá-las concorrentemente. Para rodar um processo em background, coloque um símbolo de & no final do comando que irá disparar o processo. Por exemplo:

find / -print > arqs &
sort bigfile > out &
teste.script > saida &


Processos do sistema

Nesse ponto é importante ressaltar que o UNIX tem seus próprios processos, que possuem funções específicas para gerenciamento, controle, acompanhamento e contabilidade do sistema. Dentre eles podemos citar:

Daemons

Um daemon (demônio) é um processo que nunca encerra. Tipicamente é um job usado para invocar outros processos em resposta a algum evento. Como exemplos podemos citar tarefas que são realizadas por daemons do sistema:

- contabilidade de uso do sistema;
- monitoração das filas de impressão;
- gerência de acesso a rede;
- submissão de processos pendentes.


Inicialização

Quando da inicialização do sistema, o primeiro processo a ser disparado é o init. O init, por sua vez, desova (spawns) um processo chamado getty para cada terminal ativo no momento.

Quando um usuário inicia um login, digitando sua identificação o processo getty é substituído por um processo login. Se a identificação do usuário é aceita, o processo login é substituído por um processo sh (shell). Desse modo, após todos esses passos é que o UNIX está com o shell disponível para receber comandos do usuário.

No processo de log off, quando o usuário digita <ctrl-d> o processo sh é encerrado e o init desova um novo processo getty para o terminal em questão.


Controle e monitoração

Apresentaremos agora os comando básicos para permitir ao usuário o acompanhamento e controle da execução de seus processos.

ps (PROCESS STATUS)

Função: Imprimir a informação sobre o estado dos processos.

Formato: ps [-efklpu]

Descrição

O comando ps é utilizado para imprimir informações sobre os processos ativos. Ps faz para os processos o que ls faz para os arquivos. Dependendo das opções utilizadas, ps poderá apresentar as seguintes informações:

UID - identificação do usuário dono do processo
PID - número de identificação do processo
PPID - identificação do processo pai
PRI - prioridade do processo; números maiores representam prioridades menores
NI - valor do nice que é usado no cálculo da prioridade
TTY - terminal de controle do processo
CMD - o nome do comando

Opções: -e - mostra todos os processos com excessão dos processos do kernel
-f - gera uma listagem completa
-k - imprime informações sobre os processos do kernel
-l - gera uma listagem longa
-p - mostra apenas as informações sobre os números de processos especificados
-u - mostra apenas informações sobre os processos do usuário especificado

Exemplos: Liste os processos que você iniciou:
ps
Mostre todas as informações disponíveis sobre todos os processos:
ps -e -f -l
Liste os processos do joao e do ricardo:
ps -f -l -u joao,ricardo
Produza alguma informação sobre os processo 9727:
ps -p 9727


nohup (NO HANG UP)

Função: Dispara a execução de um comando que é imune a desligamentos.

Formato: nohup comando

Descrição

Normalmente, a qualquer comando que iniciamos em background será enviado um sinal de desligamento quando abandonamos o sistema. A maioria dos programas encerra quando recebe este sinal. O comando nohup é utilizado para disparar processos que ignorem esses sinais. Desse modo, qualquer processo que seja executado com nohup não "morrerá" quando abandonarmos o sistema. Nohup dirige a saída padrão para o arquivo 'nohup.out' e comandos executados com nohup não deverão depender de interação com o terminal.

Exemplos: Dispare a execução do "script" 'teste.script' em background imune a desligamentos:
nohup teste.script &


kill

Função: termina ou "mata" um processo.

Formato: kill [-9] processos

Descrição

O comando kill é utilizado para terminar processos em background, já que os foreground são encerrados com um <ctrl-d> ou <ctrl-c>. Para terminar um processo, precisamos saber seu número de identificação e sermos proprietários do mesmo ou superusuário.

Opções: -9 - usado para encerrar efetivamente um processo, já que alguns processos ignoram o sinal enviado pelo kill sem essa opção

Exemplos: Encerre os processos 3424 e 3567
kill 3424 3567
Encerre efetivamente o processo 3745
kill -9 3745
6. Shell


Características

Para facilitar o controle do computador foram desenvolvidas linguagens de comando. A maioria das linguagens de comando foi desenvolvida para que haja comandos fáceis para especificar ações comuns. A maioria dos computadores fornece um interpretador de comandos para desempenhar essa função. O interpretador de comandos do UNIX é chamado de shell. O shell fornece uma abundância de características que tornam possível especificar comandos muito poderosos. É possível usar o UNIX com apenas poucos conhecimentos sobre o shell. Entretanto, a sua utilização será tanto mais profissional e compensadora quanto você estudar e conhecer melhor o shell.

O shell habilita o usuário a interagir com os recursos do computador, como programas, arquivos e dispositivos.

Como interpretador de comandos, o shell gerencia a interação entre o usuário e o UNIX, recebendo as entradas do usuário, interpretando essa entrada e manipulando as saídas geradas pelo sistema operacional. O shell também pode ser usado como uma linguagem de programação, já que os usuários podem combinar sequências de comandos para criar novos programas chamados shell scripts.

A figura abaixo mostra que para cada processo submetido ao sistema, o shell abre automaticamente 3 arquivos. Esses arquivos serão a partir de agora referenciados como:

Entrada padrão - é o teclado por default.
Saída padrão - é o vídeo por default.
Saída padrão para erros - é o vídeo por default.

Esses defaults podem ser modificados usando redireção que será mostrada mais adiante.


Fig. 5 - Os arquivos padrão


Redireção

O conceito de redireção é usado para alterar os defaults de entrada, saída e saída de erros padrão apresentados anteriormente. Desse modo, podemos ter três tipos de redireção:

Redireção da entrada padrão, que é usada para indicar entrada de dados de algum lugar que não o teclado e é representada pelo símbolo <. Exemplos:

mail joao < carta.doc
wall < arq.msg

Redireção da saída padrão, que é usada para enviar os dados de saída para algum lugar que não o vídeo. É representada pelos símbolos > e >>. Exemplos:

ls > saida.ls
cat texto2 >> texto1

No primeiro exemplo, a saída do comando ls será enviado para o arquivo 'saída.ls'. Se 'saída.ls' já existir seus dados serão perdidos. No segundo exemplo, o 'texto2' será anexado ao 'texto1'. Caso 'texto1' não exista, será criado.

Redireção da saída de erros padrão, usada para enviar os erros que porventura ocorram durante a execução de um comando para algum lugar que não o vídeo. Os símbolos utilizados para representá-la são 2> e 2>>. Exemplos:

cat arq1 arq2 2> arqerro
cat arq1 arq2 2> /dev/null
psx 2>> erros

No segundo exemplo, os erros que porventura ocorram serão desprezados, já que '/dev/null' é um "bit bucket" para onde é enviado tudo o que se pode perder.

Em UNIX, quando uma linha de comando for muito extensa, use o caracter "\" para quebrar a linha numa linha de continuação. Exemplo:

cat /usr/uts/meudir/meusdados \
> /usr/uts/ seudir/seusdados

O sinal ">" foi impresso pelo shell e a barra invertida (\) deve ser seguida imediatamente por um <return>.

Para agrupar comandos, você pode utilizar o ";". O efeito será o mesmo que se você tivesse digitado os comandos separadamente. Não há nenhum relacionamento entre os comandos. Exemplo:

cat arq1 ou cat arq1; ls -l
ls -l


Canalização e filtros

Uma canalização é uma conexão da saída padrão de um comando com a entrada padrão de outro comando. O símbolo que representa a canalização é o "|" e pode ser usada várias vezes numa linha de comando. Exemplos:

Quantos arquivos têm o seu diretório?
ls | wc -w
Quais os processos que são controlados pelo terminal hft/0?
ps -e | grep hft/0
Quantos usuários estão correntemente logados?
who | wc -l

Filtros são programas que podem ler dados de uma entrada e gravá-los numa saída. A importância deles é que poderão ser usados como intermediários em canalizações. Exemplos de filtros do UNIX são: sort, wc, cat, cut, grep, tee além de outros. Exemplos:

Quantos processos são controlados pelo terminal pts/1?
ps -e | grep pts/1 | wc -l
ls | tee intermed | sort -r

O filtro tee tem a função de bifurcar uma entrada recebida, gravando-a em 'intermed' e também passando-a ao comando sort.

Metacaracteres e coringas

A maioria dos argumentos da linha de comando que são fornecidos aos programas são nomes de arquivos. É muito comum nomear arquivos de forma que arquivos relacionados tenham nomes relacionados. Por exemplo, todos os nomes de programas da linguagem C terminam com o sufixo ".c". Se quiséssemos executar alguma operação em todos os arquivos em linguagem C de um diretório, seria bastante monótono digitar todos os nomes como argumentos em uma linha de comando.

O UNIX permite que especifiquemos conjuntos de nomes de arquivos automaticamente. Quando inserimos os argumentos a um comando, o shell examina os argumentos para verificar se estamos utilizando a simbologia de geração de nomes de arquivo. Podemos controlar a geração de nomes de arquivos especificando um modelo para estes. O shell compara o seu modelo com todos os nomes de arquivos no atual diretório. Se qualquer um dos nomes de arquivos combinar com o modelo, então a lista em ordem alfabética dos nomes dos arquivos combinados é entregua ao programa. Se nenhum dos nomes de arquivo combinar com o modelo, nada será entregue ao programa.

Um modelo consiste em caracteres ordinários e metacaracteres. Os caracteres ordinários representam eles mesmos, enquanto os metacaracteres têm significados especiais. Um modelo que consiste inteiramente de caracteres ordinários não invoca a geração de nomes de arquivos.

Um aspecto importante nesse ponto é conhecer os metacaracteres do shell e não utilizá-los em nomes de arquivos.

A maioria dos documentos do UNIX usa a frase "regular expression" para se referir ao que aqui consideramos um modelo. O termo modelo é melhor pois sugere boa percepção intuitiva ao já confuso tópico de geração de nomes e metacaracteres.

Coringas ou wildcards são um subconjunto dos metacaracteres. Eles são usados para o "casamento" de nomes de arquivos. Acompanhe a tabela abaixo que mostra a função de cada metacaracter e/ou coringa:

Símbolo É coringa? Função

* sim Compara qualquer série de caracteres
? sim Compara qualquer caractere simples
[ sim Introduz um grupo de caracteres
] sim Termina um grupo de caracteres
- não Indica o limite dos caracteres
! sim Negação
> não Redireção de saída
< não Redireção de entrada
& não Processamento em background
$ não Macros

Para facilitar a apresentação, metacaracteres e coringas serão apresentados através de exemplos.

Listar todos os arquivos que começam com a letra c:
ls c*
Apagar os arquivos que começam com a letra c seguida de mais um caracter qualquer:
rm c?
Tenha muito cuidado com o comando abaixo:
rm *
Copiar todos os arquivos que começam com uf para o diretório /u/ricardo:
cp uf* /u/ricardo
Remover os arquivos co1, co2 e co3 deixando co4 e co5 intactos:
rm co[123]
Apagar os arquivos lot, cor, tom, boa:
rm [lctb]o[trma]
Listar os arquivos que começam com letras entre a e g:
ls [a-g]
Listar todos os arquivos que não terminam com b ou c:
ls *[!bc]

7. O editor "vi"


Características

O "vi" faz parte de uma família de editores de texto do AIX. Cada um deles tem suas próprias características e usos. Suas principais características são:

- é um editor de tela cheia, sendo um dos mais usados da família;
- cria e modifica textos apenas, não possuindo capacidade de formatação de textos;
- trabalha em cima de uma cópia do arquivo num buffer de memória;
- possui capacidade para pesquisa e substituição de textos;
- trabalha com dois modos de operação: modo de comando e modo de edição de texto;
- possibilidade de edição de mais de um texto por vez.


Movimento do cursor

No "vi", os movimentos do cursor obedecem as seguintes teclas:

<seta p/ esquerda> ou h - um caractere a esquerda
<seta p/ direita> ou l - um caractere a direita
<seta p/ baixo> ou j - uma linha p/ baixo
<seta p/ cima> ou k - uma linha p/ cima
<ctrl+f> - uma tela para frente
<ctrl+b> - uma tela para trás
<ctrl+d> - meia tela para baixo
<ctrl+u> - meia tela para cima

As teclas acima só funcionam se você estiver no modo de comando do "vi". Caso você não esteja no modo de comando, tecle <esc> para tal. Outros comandos que podem ser úteis para o movimento do cursor são:

:nn - leva o cursor diretamente para a linha nn
:$ - leva o cursor diretamente para o fim do arquivo
0 - leva o cursor para o início da linha
$ - leva o cursor para o final da linha
nn<espaço> - move o cursor para a n-ésima posição na linha corrente
nnw - move o cursor para a n-ésima palavra na linha corrente


Criação, saída e gravação

Para criar um arquivo chamado 'teste', digite:

vi teste

Tecle 'a' para iniciar a digitação. O comando 'a' (Add text) coloca o editor no modo texto e não aparecerá na tela quando digitado.

Depois de digitado o texto, você tem várias opções a seguir:

Digite <esc> e
:w - grava o texto e continua a edição
:q - sai do "vi"
:wq - grava e sai
:q! - força a saída mesmo sem ter gravado o texto


Inserção e deleção

Para um aprendizado inicial do editor "vi", os seguintes comandos são importantes:

i - permite a inserção de texto antes do cursor e chaveia para o modo texto
dd - deleta uma linha inteira
x - deleta um caracter na posição corrente do cursor
dw - deleta a palavra onde se encontra o cursor
o - abre uma linha em branco depois da linha atual do cursor
O - abre uma linha em branco antes da linha atual do cursor


Pesquisa e troca de "strings"

Para pesquisar uma cadeia de caracteres, passe para o modo comando <esc> e use os seguintes comandos:

/texto - pesquisa a palavra 'texto' a partir da posição atual do cursor para o final doo arquivo.
?texto - procura a palavra 'texto' a partir da posição atual do cursor para o início do arquivo
n - continua a busca da próxima ocorrência da cadeia solicitada no mesmo sentido de pesquisa
N - continua a busca da próxima ocorrência da cadeia solicitada no sentido contrário da pesquisa inicial

Para realizar busca e troca, observe o seguinte exemplo:

:g/mario/s//ricardo/g

Esse comando busca a cadeia 'mario' em todas as linhas e troca-a por 'ricardo' em todas as ocorrências (de 'mario') no texto. Para entender melhor faça outros exemplos.


Cópia e transferência de linhas

Existem muitas maneiras para realizar cópia e transferência de linhas no "vi". Para o usuário iniciante existe uma maneira simples e rápida de efetuar essas operações. Siga o seguinte roteiro:

Posicione o cursor na primeira linha que você deseja transferir. Digite ndd onde n é o número de linhas (inclusive a atual) que você deseja transferir. Feito isso, navegue com o cursor para o ponto onde você deseja receber as linhas e digite p. Dessa forma você terá feito a transferência. No caso de cópia, após apagar as linhas (com ndd), reinsira-as com p antes de navegar para o local que irá receber as linhas.


Desfazendo erros

Para desfazer erros proventura cometidos, o "vi" dispõe dos seguintes comandos:

:u - desfaz um comando
:. - refaz um comando refeito

Customização de ambiente

O "vi" dispõe de inúmeras características que podem ser adaptadas pelo usuário ao seu gosto ou necessidade. Apresentaremos apenas as seguintes:

set number / nonumber - liga / desliga a numeração das linhas
set showmode / noshowmode - liga / desliga o status de modo de operação
set all - mostra o status de tudo o que foi "setado"


8. Utilitários e ferramentas


O UNIX possui muitos utilitários para as mais variadas aplicações como: manipulação de textos, pesquisa de arquivos, backup, compactação de dados, etc... Neste capítulo apresentamos apenas uns poucos comandos que devem ser conhecidos por todo usuário UNIX noviço.

find

Função: Busca de arquivos

Formato: find diretório... condição...

Descrição

O comando find é um auxílio para localizarmos arquivos perdidos. Find examina a árvore do sistema de arquivos procurando por arquivos que atendam a condição estabelecida pelo usuário.

Opções: diretório - diretório a partir do qual será feita a pesquisa
-exec cmd
Especifica um comando a ser executado. O fim do comando é indicado com um ponto e vírgula escapado. Dentro do comando o argumento "{}" é substituído pelo nome de via atual
-name arquivo
Especifica um nome de arquivo utilizando os metacarcteres do shell de costume. Os metacaracteres devem ser escapados para que sejam passados para o comando find.
-newer arquivo
Determina que os arquivos examinados deverão ser mais novos que o arquivo nomeado
-ok cmd
O mesmo que exec, exceto que cmd é apresentado na tela com uma interrogação e, é dada chance ao usuário de responder com 'y' ou 'n'.
-print
Gera o nome da via onde encontrou o arquivo que satisfaz a condição.
-size n
Especifica o tamanho do arquivo em blocos.
-user usuário
Define o proprietário do arquivo.
-mtime +n / -n
Especifica se o arquivo foi modificado a mais de n dias atrás (+), ou menos (-) de n dias atrás.
-type f/d
Especifica se o arquivo deve ser ordinário (f) ou diretório (d).

Exemplos: Imprima uma lista de todos os arquivos na sub-árvore atual:
find . -print
O efeito da opção -print pode ser simulado através do comando echo:
find . -exec echo {}\;
Ache todos os arquivos de carlos que estão perdidos na subárvore /usr/george:
find /usr/george -user carlos -print
Encontre todos os arquivos no sistema de arquivos que possuam mais de 100 blocos de comprimento e gere uma listagem de formato longo para cada um:
find / -size +100 -exec ls -1 {}\;
Encontre todos os arquivos modificados a mais de 10 dias:
find / -mime +10 -print
Procure pelos arquivos ordinários que tem mais de 2 blocos:
find . -name 's*' -type f -size +2 -exec ls -l {} \;


grep

Função: Busca de texto em arquivos

Formato: grep [-clvn] expressão [Arquivo...]

Descrição

Realiza a busca de modelos no arquivo nomeado ou na entrada padrão, se nenhum arquivo for mencionado. Os modelos de texto são indicados pelo argumento da expressão. Sem opções, o grep imprime cada linha de entrada que contenha o modelo de texto especificado na expressão.

Opções: -c - produz uma contagem de linhas ao invés das próprias linhas
-l - lista os nomes dos arquivos que contêm os modelos pedidos
-v - imprime as linhas que não contêm os textos especificados
-n - imprime o número relativo das linhas de saída
-y - ignora caixa
-e - expressão a ser "casada"

Exemplos: Determine que usuário está acessando a console:
who | grep hft
Imprima todas as linhas que não contenham um hífen no arquivo 'xyz':
grep -v -e - xyz
Imprima e numere todas as linhas contendo a palavra 'next' no arquivo 'smit.log' ou no arquivo 'teste3':
grep -n next smit.log teste3
Imprima todas as ocorrências de 'ufpa' em um conjunto de arquivos:
grep ufpa arq*

cut

Função: Cortar colunas de um arquivo

Formato: cut [-fn dx cz] arquivo

Descrição

O comando cut é usado para cortar uma seção vertical de um arquivo.

Opções: -fn - indica a n-ésima coluna a ser extraída
-dx - especifica o delimitador x a ser considerado separador de colunas. Default = tab
-cz - especifica colunas de caracteres a serem extraídas.
arquivo - arquivo de entrada

Exemplos: Corte a primeira coluna do arquivo 'telnos' e coloque-a em 'saida1':
cut -f1 telnos > saida1
Corte a segunda coluna do arquivo 'teste10' cujos separadores são vírgulas:
cut -f2 -d, teste10
Corte uma coluna do arquivo 'teste10' composta pelos caracteres de 3 a 5 de cada linha:
cut -c3-5 teste10
Extraia o primeiro campo e do campo 3 ao 7 do arquivo 'agora':
cut -f1,3-7 agora
paste

Função: Concatenar entradas no modo coluna.

Formato: paste [-ds] arquivo...

Descrição

Combina arquivos ou entradas no formato coluna, permitindo atribuição de delimitador.

Opções: -d - define uma delimitador diferente de tab.
-s - concatena com disposição horizontal.

Exemplos: Junte as colunas continas no 'arq1' com a contida no 'arq2':
paste arq1 arq2
Repita o exemplo anterior usando o delimitador ,:
paste -d, arq1 arq2
Concatene 'arq1' e 'arq2' na forma horizontal:
paste -s arq1 arq2

9. Conclusões


O objetivo original dos desenvolvedores do UNIX foi o de criar um ambiente produtivo para dar continuidade à pesquisa da ciência da computação. Esse objetivo, e muito mais, foi alcançado. Thompson e Ritchie demonstraram que os indivíduos podem dar contribuições importantes a um campo difícil, e o sistema operacional UNIX demonstrou que idéias novas e melhores são eventualmente aceitas no mercado.

Em justiça a outros sistemas, observe-se que o UNIX é fraco em dois pontos principais. O UNIX é um anarquista de nascimento. Ele funciona muito bem se todos no sistema estiverem fazendo algo diferente, mas se complica nas aplicações onde todos estão fazendo a mesma coisa.

A segunda fraqueza está em sistema de tempo real, que são utilizados para controlar maquinarias, processos industriais, equipamentos de laboratório e similares. O computador tem que reagir rapidamente enquanto as máquinas trabalham, o processo avança ou enquanto os dados de laboratório chegam. Certamente é possível adaptar o UNIX para executar a maioria destas operações, mais existem outros sistemas operacionais que são melhores para aplicações de tempo real.

Este material foi montado a partir de um curso ministrado pela IBM na época da instalação de nossas 2 primeiras máquinas RISC e dos livros "Entendendo o Sistema UNIX" e "Tópicos Avançados do Sistema UNIX", ambos do Kaare Christian, editora Campus. Além disso, foram bastante úteis as notas de aulas e conhecimentos advindos da utilização do sistema.

É um primeiro esforço do Laboratório de Informática do Campus Básico no sentido de disseminar o UNIX na UFPA. Agradecimentos são devidos ao Ricardo Tavares, pelo suporte dado à customização e uso do UNIX e da rede INTERNET, da qual a UFPA faz parte desde abril/92 e, ao Aurélio Henrique Ramalho, analista de suporte do SECOM e do Laboratório, por suas sugestões e trabalhos desenvolvidos.

Copyright © Cyber Nine/Crack's S.A todos direitos reservados
Hosted by www.Geocities.ws

Hosted by www.Geocities.ws

1