|
Dicas
unix |
|
PROGRAMA: 1. Histórico 2. Principais características 3. Comandos
iniciais 7. O editor
"vi" 9. Conclusões *************************************************** 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.
O UNIX é constituído basicamente dos seguintes componentes:
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.
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 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. Na figura abaixo, o sistema de arquivos padrão dos sistemas 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.
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. 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.
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. 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.
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. 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:
Exemplos:
Formato: date Descrição
Exemplo: date
Função: Concatenar ou mostrar o conteúdo de arquivos e digitar arquivos simples. Formato: cat [arquivo] Descrição
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: Exemplos:
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: Exemplos:
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:
Função: Enviar e receber correspondência para/de usuários. Formato: 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 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:
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.
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.
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.
Veremos agora
algumas regras e convenções para a construção
de nomes de arquivos do UNIX.
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 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 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':
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': 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). 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 Permissões Exemplos:
Retire do arquivo teste, as permissões de gravação
e leitura para os do grupo e outros:
mv (MOVE) Função: Mover e renomear arquivos. Formato: mv
[Arquivo1] [Arquivo2] 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 Se Arquivo1
é uma lista de arquivos, então o segundo argumento deverá
ser obrigatoriamente um diretório. Exemplos:
Renomeie o arquivo 'teste1' para 'teste2':
Função: Copiar arquivos. Formato: cp
[Arquivo1] [Arquivo2] 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 Exemplos:
Faça uma cópia do arquivo 'nuk.abm' para o arquivo 'nk.2':
Função: Remover arquivos. Formato: rm [-fir] arquivo... Descrição
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; Exemplos:
Remova o arquivo 'ufpa': Tabela resumo das permissões requeridas por comando Comando Diretório
Fonte Arquivo fonte Diretório Destino
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. 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. 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; 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 &
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;
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.
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 Opções:
-e - mostra todos os processos com excessão dos processos do kernel Exemplos:
Liste os processos que você iniciou:
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: 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
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. Esses defaults
podem ser modificados usando redireção que será mostrada
mais adiante.
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 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 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 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. cat /usr/uts/meudir/meusdados
\ 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
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? 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? 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 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: 7. O editor "vi"
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;
No "vi", os movimentos do cursor obedecem as seguintes teclas: <seta p/
esquerda> ou h - um caractere a esquerda 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
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
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
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. 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.
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.
Para desfazer erros proventura cometidos, o "vi" dispõe dos seguintes comandos: :u - desfaz
um comando 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
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 Exemplos:
Imprima uma lista de todos os arquivos na sub-árvore atual:
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 Exemplos:
Determine que usuário está acessando a console: 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 Exemplos:
Corte a primeira coluna do arquivo 'telnos' e coloque-a em 'saida1': 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. Exemplos:
Junte as colunas continas no 'arq1' com a contida no 'arq2': 9. Conclusões
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.
|