[Glossário] [Comandos mIRC] [Dicas mIRC] [Página inicial] [Tutorial ARJ e ZIP] [Hardware]
[Fórum de Informática] [Tutorial
Newsgroups] [Tutorial Display] [Web
Links]
Copyright © 1998-1999 by Abukawa |
Índice
Segurança do Sistema de Arquivos
A primeira versão do sistema operacional Unix foi desenvolvida em 1969 por Ken
Thompson, do grupo de pesquisas da Bell (braço subsidiário da AT&T). Várias
versões do Unix foram desenvolvidas a partir daí, até que em 1978 a Universidade de
Berkeley lançou uma versão do Unix para computadores VAX, além de incluir diversas
facilidades no S.O. Vários fabricantes passaram então a se interessar pelo produto (que
já possuía boa receptividade no meio acadêmico) desenvolvendo suas próprias versões.
O sistema operacional Unix permite que várias pessoas o utilizem simultaneamente
(multiusuário), arbitrando as várias solicitações para distribuir os recursos do
computador justa e eficazmente. Diversos programas podem "rodar" simultaneamente
(multiprogramação).
O sistema parcela o tempo do computador em uma série de partes e os aloca entre os
vários usuários. O objetivo desta técnica, denominada "tempo compartilhado",
é dar a cada usuário a ilusão de uso exclusivo da máquina. Cada tarefa a ser executada
pelo computador (programas, editoração, etc...) recebe uma fatia de tempo da CPU da
máquina. Portanto, quanto mais tarefas, menor o tempo de CPU que cada uma recebe.
Todos estes conceitos demonstram que o sistema Unix é um sistema operacional complexo e
que necessita da figura de um ou mais administradores denominados pelo sistema de
"super-usuários". Estes são identificados através da conta de acesso com
nível denominado root, e têm privilégios que os demais
usuários do sistema não possuem.
O sistema operacional Unix controla os recursos do computador, faz sua distribuição
entre os vários usuários concorrentes, executa o escalonamento de tarefas (processos),
controla os dispositivos periféricos conectados ao sistema, fornece funções de
gerenciamento do sistema, e de um modo geral oculta do usuário final a arquitetura
interna da máquina. Isso é realizado através de uma arquitetura que usa camadas de
software projetadas para diferentes finalidades.
O "shell" é um interpretador de comandos (interpreta os comandos inseridos
pelo teclado), ou seja, provê a interface entre o usuário e o sistema operacional
(equivale ao command.com do MS-DOS). Em muitos sistemas o
interpretador de comandos é uma parte da estrutura interna do S.O.. No Unix porém, o
"shell" é um programa como outro qualquer, além de ser uma linguagem de
programação sofisticada (scripts em shell), que será visto mais adiante. Existem
diversos tipos de "shell" como o /bin/sh
("Bourne Shell"), /bin/ksh ("Korn Shell") e
o /bin/csh ("C Shell").
OBS: No Unix espaços em branco, letras maiúsculas e minúsculas são extremamente
importantes.
Ex.: o comando "echo hello" é diferente de "echohello" e de
"ECHOhello" (os dois últimos errados).
O sistema de arquivos do Unix é um importante aspecto do sistema operacional. O
sistema de arquivos é o local em que são armazenados os arquivos do sistema e dos
usuários. Ele é organizado como uma estrutura de arquivo que se parece com uma árvore
invertida, estando a raiz no topo, e ramificando-se para baixo.
O diretório raiz pode conter arquivos, elos, ou outros diretórios, chamados
subdiretórios. Os subdiretórios algumas vezes são chamados nós ramos, enquanto que os
arquivos em diretórios algumas vezes são chamados nós folhas. Não há limite imposto
à quantidade de níveis, exceto aqueles impostos pelo hardware, embora haja certas
implicações de desempenho quando há uma quantidade excessiva de níveis.
Os arquivos do Unix são armazenados em meios auxiliares, como disco rígido ou
disquete. Cada arquivo do disco tem um inodo único, ou nodo de informação. Um inodo
contém informações usadas pelos processos, como informações de acesso que incluem
permissões a arquivo, tamanho do arquivo em caracteres, a informação de propriedade do
arquivo, e a sua localização (endereço como disco, cilindro, trilha e setor) da área
de dados do arquivo no sistema de arquivos do Unix.
Vários campos compõem um inodo, tais como: de Propriedade do Arquivo, de Tipo de
Arquivo, de Permissões do Arquivo, de Datas e Horas do Arquivo, de Ligações, de TOC, de
Tamanho de Arquivo.
Um diretório no sistema Unix é um tipo especial de arquivo que contém como dados
números de inodos e nomes dos arquivos contidos no diretório. Cada registro do
diretório tem 16bytes de tamanho; 2 bytes para o número do inodo e 14 bytes para o nome
do arquivo. (No sistema Unix os nomes de arquivos estão limitados a um máximo de 14bytes
e podem ter um mínimo de 1 byte).
Se o número do inodo de um diretório for 0, indicará que a entrada está vazia; não
existe arquivo em tal diretório. O núcleo do Unix manipula diretórios de forma muito
semelhante ao modo como manipula arquivos, usando inodos. Para garantir modificação e
construção correta de diretórios, os processos podem lê-lo, mas somente o núcleo pode
gravar em diretórios.
As permissões de acesso de diretórios são similares às permissões de acesso de
arquivos, elas têm os mesmos três níveis de acesso - dono, grupo e outros. O atributo
de leitura permite que o conteúdo do diretório seja lido; o atributo de gravação
permite que o conteúdo do diretório seja modificado (remover diretórios e arquivos,
criar novos subdiretórios e arquivos); e as permissões de execução simplesmente
permitem que os processos procurem um nome de arquivo ou subdiretório no diretorio. (Não
é possível executar um diretório).
Uma ligação de arquivos é criada através do comando ln
do Unix ou chamada de sistema link. Uma ligação é um modo de
criar novos nomes para arquivos do Unix. O resultado é um novo nome que, quando
referenciado, afeta o arquivo real ao qual está ligado. É possível ligar diretórios,
mas somente o superusuário pode fazer isso. É preciso tomar muito cuidado ao ligar
diretórios, pois é possível criar ligações que criem um laço infinito.
Se um arquivo tiver uma ligação para si, então qualquer alteração feita nele afetará
igualmente aos usuários de outras ligações. Da mesma forma, se qualquer usuário
modificar um nome de arquivo que seja uma ligação, o arquivo original será afetado, e o
mesmo acontece com todos os outros usuários do arquivo e suas outras ligações.
É possível remover uma ligação de um arquivo ou diretório usando o comando ou chamada
do sistema unlink. Os comandos e chamadas de sistema ln/link/unlink são documentados no Unix System V User Reference e
Unix System V Programmer's Reference. Lembre-se, é preciso muito cuidado ao ligar e
desligar arquivos.
O Network File System (NFS - Sistema de Arquivos em Rede) foi originalmente
implementado pela Sun Microsystems, Inc., e foi endossado pela IBM, Hewlett-Packard,
Apollo Computer, Apple Computer, e muitos outros fornecedores de sistemas Unix, exceto a
AT&T. Em resumo, a mais ampla implementação dos esquemas de compartilhamento de
arquivos em rede é o NFS.
O NFS é um serviço independente de sistema operacional, que permite que todo um sistema
de arquivo seja montado em redes. Assim, esses sistemas de arquivo podem ser tratados como
parte do sistema de arquivos local. Parte importante do projeto do NFS foi remover todas
as dependências do sistemas operacionais, juntamente com todas as dependências de
hardware. O NFS oferece também facilidades para recuperação em caso de queda, alto
desempenho, e acesso transparente - independentemente de rede ou sistema operacional.
Um exemplo disso é um produto disponível para Pc's baseados em DOS: PC-NFS. O PC-NFS
comunica-se com instalações NFS baseadas em Unix. Para o PC, todas as partes do sistema
de arquivos Unix aparecem como se fossem discos DOS locais. O PC-NFS ainda não oferece
facilidades de servidor, somente serviços de cliente NFS.
Em sistemas baseados em Unix, o NFS é integrado ao núcleo por razões de eficiência,
embora a integração não seja obrigatória. De importância para os desenvolvedores de
aplicações é por que e como o NFS pode afetar suas aplicações, e como implementar
esforços de programação para oferecer compatibilidade com o NFS.
A primeira parte da questão pode ser respondida considerando-se como uma aplicação é
projetada. As partes mais sujeitas a serem afetadas são, quase certamente, as funções
de I/O; mais provavelmente, I/O baseada em um sistema de arquivos. Se uma aplicação for
projetada para trabalhar com certas rotinas de I/O de arquivo é possível que essas
rotinas de I/O possam fazer com que a aplicação se comporte de maneira imprópria quando
executada usando um sistema de arquivos remoto.
O shell do Unix suporta o conceito de scripts. Os comandos do Unix podem ser colocados
em um arquivo, e executados entrando-se com o nome do arquivo no prompt do shell. Os
scripts do shell do Unix são análogos aos arquivos de execução em lote do DOS (BAT).
Para que um script do shell possa ser executado, não é necessário seguir nenhuma
convenção especial de nomes, como acontece no DOS; em vez disso, o arquivo com o script
deve receber permissões de execução. Há uma vaga convenção de nomes para os scripts
do Unix.
Para indicar que um comando é um script do shell do Unix, acrescenta-se a extensão.sh.
Isto não é obrigatório, e o shell do Unix não trata os arquivos que usam esta
convenção de nomes de forma diferente do que qualquer outro arquivo comum. É
simplesmente uma convenção que torna mais fácil para o usuário reconhecer que um
comando é, na realidade, um script do shell e não um executável binário. Observe,
ainda, que as convençòes de nomes do Unix não impõem padrões específicos para
indicar executáveis binários, como acontece no DOS.
Programadores e usuários recém-chegados ao Unix devem compreender que o shell do Unix é
tão versátil, e os recursos da programação em shell são tão poderosos, que
frequentemente acontece de novas aplicações poderem ser escritas em linguagem shell, e
não em C, mais difícil e mais pesada. Isto é particularmente verdadeiro para
ferramentas de programação personalizada. Em muitos sistemas Unix provavelmente serão
encontradas ferramentas personalizadas já disponíveis. De fato, é uma bênção e uma
maldição no ambiente Unix.
Talvez um dos recursos mais práticos do Unix seja o cron
(cronógrafo), que oferece a possibilidade de executar comandos Unix e scripts do shell em
tempos predeterminados. Um recurso como este seria extremamente útil no ambiente DOS.
O cron pode ser usado para executar funções simples como verificar periodicamente a
correspondência, enviar lembretes para um destinatário qualquer, despachar recados
quando do acontecimento de um evento qualquer, e muitas outras funções limitadas apenas
pela imaginação do usuário.
O cron é extensivamente usado pela arquitetura do Unix para ajudar no controle
automatizado do sistema como um todo, como na automação das cópias de segurança
(backup) do sistema. Também o Subsistema de Comunicação UUCP usa o cron extensivamente.
Para usar os serviços do Unix, o usuário precisa ter uma conta; isto é, uma ID
(identificação) criada pelo administrador (a pessoa geralmente encarregada de criar
contas de usuários). Uma ID de usuário é necessária porque o Unix é projetado para
suportar múltiplos usuários concorrentemente e, por conseguinte, precisa de uma forma
para diferenciar um usuário do outro. O DOS foi projetado para ser usado por um único
usuário de cada vez e não suporta um ambiente multiusuário, daí a falta de segurança
intrínseca.
Como padrão no sistema Unix, existem algumas contas pelas quais qualquer pessoa pode ter
acesso, cabendo ao administrador suspendê-las. Abaixo, segue uma tabela contendo os
logins (ID) e as respectivas senhas.
Login | Senha |
root | root |
sys | sys / system / bin |
bin | sys / bin |
mountfsys | mountfsys |
adm | adm |
uucp | uucp |
nuucp | anon |
anon | anon |
user | user |
games | games |
install | install |
demo | demo |
umountfsys | umountfsys |
sync | sync |
admin | admin |
guest | guest |
daemon | daemon |
As contas root, mountfsys, umountfsys, install, e algumas vezes sync são contas com
nível de root (super-usuário), significando que elas tem poder de sysop (administrador),
ou poder total. Outras contas são apenas contas de "nivel de usuario"
significando que elas apenas tem poder sobre arquivos ou processos que elas criaram.
Uma vez que o usuário tenha recebido sua ID - geralmente as iniciais de seu pré-nome,
nome e sobrenome - ele poderá entrar no Unix. Normalmente é necessário ter uma senha,
mas em alguns casos um usuário que esteja entrando pela primeira vez pode não tê-la.
Isto não é problema pois os usuários podem criar ou modificar suas senhas em qualquer
momento. Imaginaremos que a ID de nosso usuário seja tsm e que
sua senha seja go4it.
A primeira coisa que precisa ser feita é localizar o terminal a ser usado na sessão. O
Unix não requer uma console ativa enquanto o sistema está rodando, como acontece com
certos computadores de grande porte que constantemente exibem informações em uma console
especial do operador.
Na tela do monitor deve aparecer um prompt como o seguinte:
login:
O prompt login significa que o Unix está esperando que alguém digite sua ID no teclado.
Nossa resposta será "tsm", que aparece como segue:
login: tsm
Os caracteres "tsm" são seguidos pela tecla enter ou return, dependendo da
tecla usada para emitir um retorno do carro/avanço de linha (CRLF). Em PCs esta é
chamada tecla <ENTRA> (enter). Certos terminais têm uma ou outra tecla, algumas
vezes ambas. Após entrar a ID do usuário, o prompt seguinte pede a senha da conta, e
aparece como segue:
login: tsm
Password:
Neste ponto entramos com a senha "go4it", como segue:
login: tsm
Password: go4it
Quando a senha está sendo realmente digitada, os caracteres não são ecoados na tela por
motivos de segurança. No exemplo anterior ela aparece somente para dar mais clareza ao
exemplo; em situações reais ela não apareceria. Após entrar com a senha, ela é
validada contra um registro em um arquivo especial do sistema. Se houver sucesso na
validação então será permitido o acesso ao sistema; caso contrário, será exibida uma
mensagem de erro ("Login incorrect") e reaparecerá o pronto.
Quando o acesso é permitido, o usuário entra em contato com outro componente do Unix: o
shell. O shell é uma camada de software entre o usuário e o sistema operacional. Ele foi
projetado para interpretar os comandos digitados pelo usuário. É o sistema operacional
que realmente providencia a execução dos comandos de usuário; o shell é o mecanismo
usado para coletar as instruções.
Se a conexão for bem-sucedida, será exibido o caracter de prompt padrão do shell (o
caracter $), e a tela fica assim:
login: tsm
Password: *****
$
Em outros sistema podem aparecer outras coisas antes que o prompt apareça, como
boas-vindas, mensagem do dia, novidades, ou outras informações. No DOS há um arquivo
especial chamado AUTOEXEC.BAT que é automaticamente executado durante a partida do
sistema. No Unix, há um arquivo com função similar, mas a execução ocorre a cada vez
que o usuário abre uma sessão no sistema. No Unix System V, esse arquivo chama-se .profile.
A principal forma de se criar conexão com um computador remoto na rede é através do
programa telnet. Este programa permite ao usuário utilizar os
recursos de um computador distante até milhares de quilômetros.
telnet <hostname.subdomínio.domínio> Conecta o usuário
ao computador especificado. O usuário precisa estar cadastrado no computador remoto para
a conexão ser estabelecida.
Exemplo de uma sessão telnet para o computador ADSRJ01:
$ telnet ADSRJ01
Trying 192.9.250.1 ...
Connected to ADSRJ01.
Escape character is '^]'.
UNIX System V Release 3.2 (ADSRJ01.ads) (ttyp0)
login:
Para terminar a sessão com o computador remoto basta digitar exit.
O programa rlogin também realiza a conexão remota tal como o
programa telnet, porém com algumas facilidades, quando configurado o sistema do
computador remoto e do local. O arquivo /etc/hosts.equiv
contém uma lista dos computadores remotos que compartilham as contas dos usuários,
fazendo com que não seja necessário dar a password, quando o programa rlogin é invocado
com o mesmo usuário em um computador ligado a mesma rede de sistema remoto. Existem
também listas privadas dos computadores remotos no arquivo .rhosts
no diretório de entrada de cada usuário.
A linha de comando deste programa é a seguinte:
rlogin <nome ou endereço do computador remoto>
Exemplo de uma abertura de sessão da ADSRJ01 para ADSRJ02:
$ rlogin ADSRJ02
Last login: Tue Aug 22 10:52:51 on console
SunOS Release 4.1.3 (GEN_SYBASE) #1: Mon Jun 21 10:20:27 EST 1993
$
O objetivo do correio eletrônico é permitir que usuários se comuniquem uns com os
outros, utilizando a rede como um meio de transmissão da mesma forma como se envia uma
carta pelo correio. O programa mail é utilizado para ler
correspondência que nos é enviada, ou para enviar correspondência a outros usuários
dentro de uma determinada rede de computadores. Cada usuário do sistema possui a sua
"caixa de correio" (mailbox) que é um arquivo pessoal que armazena as mensagens
que chegaram e não foram lidas. Existe uma outra "caixa de correio" que fica no
diretório pessoal de cada usuário e que armazena as mensagens já lidas (geralmente o
arquivo mbox).
Quando um usuário entra no sistema, caso alguém lhe tenha enviado uma mensagem,
aparecerá na tela o seguinte aviso (ou similar):
"you have mail"
Para listar as mensagens recebidas digite:
$ mail
Você entrou no programa mail (cujo "prompt" inclusive é diferente (&)) e uma saída similar a esta será apresentada:
SCO System V Mail (version 3.2) Type ? for help.
"/usr/spool/mail/marcelo": 1 message 1 new
>N 1 produc Thu Aug 17 15:48 13/369 teste
&
Cada linha da tela anterior tem os seguintes campos:
> status de mensagem corrente
N mensagem nova
R mensagem lida
U mensagem não lida
número: indica a numeração da mensagem
remetente: identifica o endereço da pessoa que
enviou a mensagem
data: identifica a data de recebimento da mensagem
tamanho: identifica o número de linhas e
caracteres da mensagem (incluindo o cabeçalho)
assunto: identifica o assunto da mensagem
(opcional)
Para ler qualquer uma das mensagem basta digitar o número correspondente no
"prompt" do mail. Para apagar, basta digitar o comando "d":
Message 1:
From produc Thu Aug 17 15:48:26 1995
Received: by ADSRJ01.ads.COM (5.65/25-eef)
id AA14313; Thu, 17 Aug 95 15:48:26 +0300
Return-Path: <produc>
Message-Id: <[email protected]>
From: [email protected] (Master for Producao)
X-Mailer: SCO System V Mail (version 3.2)
To: marcelo
Subject: teste
Date: Thu, 17 Aug 95 15:48:25 BRA
Status: R
Estou testando o mail
& d
&
Para terminar o programa mail tecle Ctrl-D ou q (volta ao "prompt" do sistema). As mensagens que tiverem
sido lidas serão guardadas na "caixa de correio" do seu diretório. Para
verificar o conteúdo desta, digite:
$ mail -f lista as mensagens já lidas com seus
respectivos números correspondentes e entra no programa mail.
Dentro do programa mail, além de poder apagar mensagens (i.e., d
<número da mensagem>), pode-se copiar estas para arquivos comuns no
diretório pessoal, mantendo-as ou não na "caixa de correio".
$ copy <número mail> <nome arquivo>
copia a mensagem indicada pelo número, para o arquivo indicado (criado na hora) e a
mantém no mailbox.
$ save <número mail> <nome arquivo>
remove a mensagem para o arquivo indicado (remove da mailbox).
Ao enviar uma mensagem você, além de conhecer o e-mail da outra pessoa deve informar
o assunto da mesma de forma resumida (2 ou 3 palavras). Embora isto seja opcional é quase
um padrão no serviço de correio eletrônico. Para enviar uma mensagem para um usuário
qualquer digite:
$ mail [email protected]ínio.domínio
(Sistema Remoto)
$ mail username (Sistema Local)
Após isto, o que você deve informar é o assunto, teclar ENTER e começar a escrever a
mensagem. Concluindo a mensagem, é só teclar Ctrl-D em uma
linha em branco para enviá-la. Suponha que você está enviando uma mensagem para o
usuário marcelo:
$ mail marcelo
Subject: Teste
Marcelo,
Isto e somente um teste do mail!
Obrigado,
<Ctrl+D> Envia a mensagem e sai do programa mail.
EOT
$
Para interromper uma mensagem durante sua elaboração tecle duas vezes Ctrl+C.
O programa mail não permite, por exemplo retroceder linhas para correções. Portanto, se
você pretende escrever mensagem mais longas, onde não pode haver erros de editoração,
é possível escrevê-las utilizando o editor de textos (vi), salvar seu conteúdo num
arquivo e depois enviar este arquivo através do mail.
Ex.: Você digitou o arquivo "carta" no editor de textos vi. Para enviá-lo para
outra pessoa, por exemplo marcelo, digite:
$ mail marcelo < carta
Este comando redireciona a entrada do mail para o arquivo carta através do caracter
especial "<".
O sistema de arquivos do DOS armazena informações como o nome do arquivo, tamanho do
arquivo em bytes, data de criação e última alteração, hora de criação e última
alteração, bem como outros atributos (leitura, gravação; arquivo/diretório) de cada
entrada no diretório. O sistema de arquivos do Unix armazena os atributos da entrada,
quantidade de ligações, identificação do dono, identificação do grupo, tamanho do
arquivo em bytes, data e hora da criação e última alteração, e nome do
arquivo/diretório.
É evidente que a quantidade de informações sobre o arquivo que o Unix mantém é
consideravelmente maior do que no DOS. Isso acontece porque o sistema de arquivos do Unix
foi pensado para permitir acesso multiusuário concorrente. A saída do comando ls -l exibe informações detalhadas sobre as entradas no diretório.
O primeiro campo dessa saída é usado para determinar o tipo de entrada e suas
permissões de acesso. A seguir temos um exemplo desse campo:
drwxrwxrwx
0123456789
A segunda linha do exemplo anterior não é parte normal da saída, mas foi colocada
como ilustração para indicar a posição dos caracteres na linha acima. Se o primeiro
caracter, na posição 0, for um "d", isso significa
que a entrada é um diretório. Se for um "-",
significa que é um arquivo comum. Se esse caracter for um "b",
"c" ou "p",
significa que se trata de um arquivo especial usado pelo Unix para executar operações de
I/O.
O grupo seguinte de caracteres, nas posições de 1 a 3, indica as permissões do dono do
arquivo; os caracteres rwx são usados para indicar as
permissões de leitura (read), gravação (write) e execução (execution). Se aparecer um
"-" em qualquer dessas posições, isso indicará
ausência da respectiva permissão. A permissão de acesso x
indica que o arquivo é executável podendo ser um comando binário executável ou um
script do shell. Arquivos que não contêm essa permissão não podem ser executados,
independentemente de serem realmente programas binários executáveis ou scripts do shell.
O DOS, por outro lado, usa o próprio nome do arquivo (extensão EXE, COM ou BAT) como
mecanismo para determinar se o arquivo é executável e como será tratado.
As três posições, de 4 a 6, indicam as permissões de acesso no nível do grupo. Os
últimos três caracteres, nas posições de 7 a 9, indicam as permissões de acesso de
todos os outros usuários do sistema. Os três níveis de acesso aqui indicados são
chamados, respectivamente, nível de permissão de usuário, de grupo e de outros. Os
tipos de permissões de acesso para os três grupos são os mesmos. O sistema de arquivos
do DOS não tem nada correspondente a essa funcionalidade, pois já que foi projetado como
sistema monousuário, as permissões de acesso não receberam consideração.
A implementação da segurança de sistema de arquivos começa com a compreensão de
como é dada permissão aos usuários para acessar os arquivos.
O comando chmod é usado para mudar os valores de modo de
acesso associados a um arquivo. O valor de modo de acesso de um arquivo define, entre
outras coisas, as permissões de acesso dadas ao dono do arquivo, ao grupo e ao resto do
mundo (chamado outros). As permissões de acesso são de leitura, gravação e execução,
indicadas por r, w e x.
Os valores do modo de acesso aplicam-se a diretórios e subdiretórios, bem como a
arquivos, portanto a termo "arquivo" mencionado nesse tópico vale para os dois.
(Note que os valores do modo de acesso não se aplicam a superusuários!).
Basicamente, há três tipos de usuários que podem acessar um arquivo: o dono do arquivo,
os usuários pertencentes ao grupo ao qual o arquivo está associado, e todos os outros
usuários. Dentro de cada uma destas categorias de usuário, é possível definir como o
arquivo poderá ser acessado: para leitura, gravação ou execução. Quando o usuário
lista as informações detalhadas sobre um arquivo, usando a opção -l
do comando ls, a informação retornada inclui as permissões
de modo de acesso, representadas da seguinte forma:
rwxrwxrwx
Essa tríade de caracteres rwx vai da esquerda para a direita.
O primeiro grupo refere-se ao dono, o seguinte refere-se ao acesso do grupo, e o último
refere-se aos outros. Podem ser fornecidas outras informações como uma indicação de
que a entrada é um diretório ou um arquivo. O exemplo a seguir ilustra como os grupos
são associados aos modos de acesso:
dono grupo outros
rwx rwx rwx
Cada modo de acesso dentro de cada grupo tem um valor numérico associado a ele, como
indica a tabela abaixo:
Modo | Valor | Descrição |
- | 0 | Nenhuma permissão |
x | 1 | Permissão de execução |
w | 2 | Permissão de gravação |
wx | 3 | Permissão de gravação e execução |
r | 4 | Permissão de leitura |
rx | 5 | Permissão de leitura e execução |
rw | 6 | Permissão de leitura e gravação |
rwx | 7 | Permissão de leitura/gravação/execução |
Esses valores numéricos podem ser usados para ajustar as permissões de acesso que cada
grupo tem. O comando chmod usa valores numéricos para cada uma
das tríades; por exemplo, se as permissões de dono, grupo e outros fossem ler, gravar e
executar, o valor numérico a especificar com o comando chmod seria 777.
Se, em lugar de permitir acesso pleno ao grupo e outros, fosse necessário dar acesso
pleno apenas ao dono, sem qualquer outra permissão de acesso, o valor numérico seria 700.
Como pode ser visto, o número octal de três dígitos tem uma relação posicional
correspondente à tríade rwx. O primeiro número (à esquerda) corresponde ao campo do
dono, o segundo número (no meio) corresponde ao campo do grupo, e o terceiro número (à
direita) corresponde ao campo reservado para outros. Isso pode ser confuso para alguns
usuários do Unix, por isso há um modo diferente de realizar a mesma coisa, mas que é um
pouco mais fácil de entender.
O método alternativo de especificar o valor do modo no comando chmod
é usando caracteres alfabéticos. Os caracteres alfa r, w e x podem ser usados em
combinação com os caracteres u, g,
o e a. O caracter u refere-se ao usuário que possui o arquivo, o caracter g refere-se ao grupo, o caracter o
refere-se aos outros (todos os outros usuários), e a
(all=todos) aplica as mudanças aos três grupos (u,g e o).
Os caracteres + (mais), - (menos) e = (igual) são também usados no processo de
atribuição. O caracter + significa acrescentar o(s) valor(es)
de permissão(ões) à direita dele, o caracter - significa
remover o(s) valor(es) de permissão(ões) à direita dele, o caracter =
significa retirar (nenhuma permissão) todos os valores de permissão para os usuários
especificados à esquerda do caracter. A seguir temos alguns exemplos:
chmod a+rw nome_do_arquivo
chmod uo-x nome_do_arquivo
chmod a= nome_do_arquivo
O primeiro exemplo atribui permissões de leitura e gravação a todos os usuários que
acessam nome_do_arquivo. Na segunda linha são retiradas as permissões de execução para
o dono e outros, mas não para o grupo. A última linha remove todos os atributos (nenhuma
permissão é concedida) do dono, grupo e outros. A fim de manipular esse arquivo, o dono
deve antes usar o chmod para dar-lhe as permissões
apropriadas.
Quando um arquivo é criado, ele recebe certos valores de propriedade, como a uid do dono (normalmente o criador do arquivo), o valor de
propriedade do grupo (geralmente o grupo a que o dono pertence quando o arquivo é
criado), e outros valores de permissão de acesso derivados dos valores associados ao
valor umask do dono, no momento da criação.
Pode haver muitas situações em que se torna necessário mudar um ou outro desses
valores; o comando chgrp é usado para atribuir uma nova
propriedade do grupo. O grupo deve existir, caso contrário será retornada uma mensagem
de erro. O valor de propriedade de grupo não se aplica ao superusuário. A fim de mudar
as propriedades de grupo, o usuário deve ter autorização; deve ser membro do grupo ao
qual o arquivo dá permissões de modificação.
O novo grupo ao qual a propriedade está sendo associada pode ser qualquer grupo, desde
que já existia (geralmente mantido pelo administrador do sistema). Uma vez reatribuída a
propriedade de grupo, o acesso no nível do grupo fica restrito aos membros do novo grupo.
As permissões de acesso de grupo anteriormente ajustadas continuam valendo.
O comando chown é usado para trocar a propriedade de um
arquivo, passando-a de um usuário para outro. A fim de mudar o valor de propriedade de um
arquivo, o usuário deve ser autorizado, deve ser dono do arquivo ou ter privilégios de
superusuário. Para usuários autorizados não superusuário, uma vez mudada a propriedade
do arquivo, eles passam a sujeitar-se às permissões de acesso definidas para o arquivo.
Se um usuário acidentalmente mudar a propriedade para outro usuário, então deve pedir
ao novo dono para devolvê-la, o que também poderá ser feito por um superusuário
(geralmente é feito pelo administrador do sistema).
Este serviço é comumente conhecido como ftp ("file
transfer protocol"). Havendo permissão, é possível copiar ou enviar arquivos entre
equipamentos localizados em diferentes continentes por exemplo.
ftp <hostname.subdomínio.domínio> conecta o usuário ao
computador especificado (hostname) se ele tiver autorização para tal.
$ ftp ADSRJ01 (neste exemplo só utilizado o hostname)
O programa ftp sempre pede ao usuário sua identificação (username e senha) para
permitir o acesso à máquina requisitada. Uma vez dado este acesso é como se você
estivesse de fato trabalhando naquele computador (portanto é preciso que você esteja
cadastrado nele).
Os subcomandos mais utilizados dentro do programa ftp (cujo prompt é ftp> ) são:
Comando | Descrição |
? | lista os subcomandos disponíveis |
ascii | seleciona modo de transferência de arquivos do tipo ASCII |
binary | seleciona modo de transferência arquivos binários |
dir <diretório remoto> | lista o conteúdo do diretório remoto especificado |
get <arquivo remoto> |
copia o arquivo remoto específico para o arquivo local |
mget <arquivos remotos> | copia a série de arquivos remotos especificados para o diretório corrente no computador local |
mput <arquivos remotos> | copia os arquivos listados para o computador remoto (é preciso ter permissão de escrita no diretório remoto que vai abrigar este arquivos) |
open <hostname> | estabelece uma conexão ftp com o computador especificado |
put <arquivo local> <arquivo remoto> | copia o arquivo local para o arquivo remoto listado |
pwd | apresenta o diretório corrente no computador remoto |
quit ou bye | fecha a conexão entre os computadores e sai do programa ftp (volta ao "prompt do sistema") |
Crtl+c | interrompe a transferência de qualquer arquivo |
Ex.: Exemplo de uma sessão de ftp (marcelo para ADSRJ01):
$ ftp ADSRJ01
Connected to ADSRJ01.
220 ADSRJ01.ads FTP server (Version 5.60 #1) ready.
Name (ADSRJ01:marcelo):
331 Password required for marcelo.
Password:
230 User marcelo logged in.
ftp> pwd
257 "/w1/USERS/marcelo" is current directory.
ftp> dir
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls (0 bytes).
total 1876
-rw-r--r-- 1 marcelo desenv 822 Jul 06 15:13 .cshrc
-r--r--r-- 1 marcelo desenv 53 Sep 09 1994 .cueprofile
-rw-r--r-- 1 marcelo desenv 371 Jan 26 1995 .exrc
-r-------- 1 marcelo auth 0 Aug 01 16:01 .lastlogin
-rw-r--r-- 1 marcelo desenv 385 Sep 09 1994 .login
-rw-r--r-- 1 marcelo desenv 2166 Jul 19 12:18 .profile
drwxr-xr-x 2 marcelo other 64 Jul 07 12:36 DOS
drwxr-xr-x 2 marcelo other 128 Apr 04 23:36 amherj
drwxr-xr-x 2 marcelo other 128 Apr 04 23:37 backup
drwxr-xr-x 2 marcelo other 48 Apr 04 23:37 bin
-rw------- 1 marcelo desenv 190 Feb 03 1995 ccrj1
-rw------- 1 marcelo desenv 4751 Feb 24 09:50 cshrc
-rwxr-xr-x 1 marcelo desenv 6614 Jan 30 1995 envmer.doc
drwxr-xr-x 2 marcelo other 80 Apr 04 23:37 fax
226 Transfer complete.
1553 bytes received in 0.23 seconds (6.5 Kbytes/s)
ftp> cd fax
250 CWD command successful.
ftp> binary
200 Type set to I.
ftp> get sqlv10.sun
200 PORT command successful.
150 Opening ASCII mode data connection for sqlv10.sun (12079 bytes).
226 Transfer complete.
local: sqlv10.sun remote: sqlv10.sun
12079 bytes received in 0.06 seconds (2e+02 Kbytes/s)
ftp> quit
221 Goodbye.
$
Quando se realiza uma transferência de arquivos de um lugar para outro, está-se
aumentando o tráfego de informações na rede de comunicação (principalmente se o
arquivo for grande). Portanto, é recomendável que sessões de ftp, de modo geral, sejam
feitas fora do horário comercial, em horários de baixo tráfego na rede.
O vi é o editor de textos mais utilizado em máquinas Unix (outros são os editores ex
e ed). Este editor opera em, basicamente, dois modos, onde em cada um deles existem
comandos específicos.
Modo Texto: É o modo utilizado para inserir um texto, o que é
possível após a inserção de subcomandos específicos. Para voltar ao modo comando
basta pressionar a tecla ESC.
Modo Comando: É o modo em que o editor se encontra logo após
ser invocado. Para cancelar um subcomando específico deste modo basta pressionar a tecla
ESC.
O editor pode ser invocado através dos comandos:
vi <arquivo>
ou
vi
(neste último caso o nome do arquivo a ser editado deverá ser fornecido no momento em
que for salvo).
Subcomandos de inserção de texto:
i | insere texto antes do cursor |
r | insere texto no início da linha onde se encontra o cursor |
a | insere texto depois do cursor |
A | insere texto no fim da linha onde se encontra o cursor |
o | adiciona linha abaixo da linha corrente |
O | adiciona linha acima da linha corrente |
Ctrl + H | apaga último caracter |
Ctrl + W | apaga última palavra minúscula |
Esc | passa para o modo comando |
Subcomandos para Movimentação pelo Texto:
Ctrl+F | passa para a tela seguinte |
Ctrl+B | passa para a tela anterior |
H | move o cursor para a primeira linha da tela |
M | move o cursor para o meio da tela |
L | move o cursor para a última linha da tela |
k | move o cursor para linha acima |
j | move cursor para linha abaixo |
h | move cursor para caracter a esquerda |
l | move cursor para caracter a direita |
w | move cursor para início da próxima palavra (Ignora pontuação) |
W | move cursor para início da próxima palavra (Não ignora pontuação) |
b | move cursor para início da palavra anterior (Ignora pontuação) |
B | move cursor para início da palavra anterior (Não ignora pontuação) |
0(zero) | move cursor para início da linha corrente |
^ | move cursor para o primeiro caracter não branco da linha |
$ | move cursor para o fim da linha corrente |
nG | move para a linha n |
G | move para a última linha do arquivo |
Subcomandos para Localização de Texto:
/palavra | move para a próxima ocorrência da palavra procurada (para repetir a busca usar n) |
?palavra | move para a ocorrência anterior da palavra(para repetir a busca usar n) |
Ctrl+G | mostra o nome do arquivo corrente, o número da linha corrente e o número total de linhas. |
Subcomandos para Alteração de Texto:
rx | substitui o caracter sob o cursor pelo especificado x (é opcional indicar o caracter) |
Rtexto | substitui o texto corrente pelo texto indicado (opcional indicar o texto adicionado) |
cw | substitui a palavra corrente. Pode-se indicar a nova palavra inserida ou não |
cc | substitui a linha corrente. Pode-se inserir o novo conteúdo da linha automaticamente. |
C | substitui restante da linha corrente. Pode-se inserir o conteúdo restante da logo após o comando. |
u | desfaz a última modificação. |
U | desfaz todas as modificações feitas na linha (se o cursor não mudou de linha desde a última mudança). |
J | une a linha corrente a próxima. |
s:/velho/novo | substitui a primeira ocorrêndcia de "velho" por "novo". |
Subcomandos para Salvar o Texto:
:wq | salvar as mudanças feitas no arquivo e sai do editor. |
:w <nome-arq> | salva o arquivo corrente com o nome especificado. Continua edição. Não é necessário fornecer o nome do arquivo se este já tiver um. |
:w! <nome-arq> | salva (de modo forçado) o arquivo corrente no arquivo especificado (cujo conteúdo original é destruído!). |
:q | sai do editor. Se mudanças não foram salvas é apresentada mensagem de advertência. |
:q! | sai do editor sem salvar as mudanças realizadas. |
$ pwd
Mostra o diretório corrente.Sintaxe de Comando | Descrição |
at {hora} {data} {incremento} | Enfileira comandos para a execução em um momento posterior. Ex.: at 5 pm Friday next week < backup.sh |
ar {-opções} {nome} {arquivos} | Agrupa arquivos em um único arquivo de acervamento (semelhante ao comando tar). Ex.: ar -rv fontes *.c (compacta os arquivos *.c no arquivo fontes) |
banner {caracter(es)} | Converte caracteres normais em garrafais para a saída padrão. Ex.: banner BOM DIA |
cat {arquivo1} [arquivo2] ... | Mostra o conteúdo do(s) arquivo(s) especificado(s) na tela. Ex.: cat .profile |
cd {diretório} | Muda o diretório de trabalho para o diretório especificado. Ex.: cd /w1/WORKADS |
cd | Muda para o diretório home (inicial). |
chfn | Muda informações do finger (nome do usuário, trabalho, telefone, etc.) |
chgrp {grupo} {arquivo1} [arquivo2] ... | Muda os arquivos especificados para um determinado grupo. Ex.: chgrp produc .profile |
chmod {número|+-|rwx} {arquivo|diretório} | Muda a permissão de um arquivo ou diretório. (4-leitura, 2-gravação e
1-execução) Ex.: chmod 640 .profile |
chown {propritário} {arquivo1} [arquivo2] | Muda o proprietário dos arquivos especificados. Ex.: chown produc .login |
clear | Limpa a tela. |
compress {arquivo} | Comprime o arquivo especificado, gerando o arquivo de extensão .Z. Ex.: compress lf0303v1.cbl |
cp {diretório/arquivo} {destino} | Copia o arquivo especificado para outro diretório, podendo também especificar o nome
do arquivo destino. Se o nome do arquivo de destino já existir, ele será sobreposto. Ex.: cp /w1/WORKADS/teste /w2/USERS |
cut [-d"delimitador"] [-f{numero_do_campo}] | Extrai informações selecionadas de um arquivo de entrada. Ex.: cat /etc/passwd | cut -d":" -f1,5 |
date {mmddhhhhaa} | Altera (ou mostra) a data e hora corrente no formato mês (01 a 12), dia (01 a 31),
hora (ex: 1200) e ano (ex: 97). Ex.: date 1225123097 |
df | Informa o número de blocos livres em disco. |
dircmp {diretório1} {diretório2} | Compara diretórios entre si. |
du | Fornece um resumo da utilização do disco. |
echo {mensagem} | Mostra a mensagem na tela. Ex.: echo Estou aqui |
env {variável=valor} | Classifica variável de ambiente. |
exit | Sai do sistema. |
find {diretório} -name {arquivo} -print | Mostra a localização do arquivo procurando a partir do diretório especificado. Ex.: find /w1/USERS -name "marcelo" -print |
finger [-opções] | Obtem informações detalhadas dos usuários conectados. |
ftp {endereço FTP} | Abre uma sessão para transferência de arquivos. (Ver lista de comandos do ftp). Ex.: ftp -i ftp.xoom.com |
grep {-opções} {expressão} {arquivo} | Mostra as linhas em que ocorre a expressão dentro do arquivo especificado. Ex.: grep -i 'echo' .profile |
head {-número} {arquivo} | Exibe as linhas iniciais (especificadas pelo número dado) do arquivo na saída
padrão. Ex. head -20 .login |
id | Exibe informações sobre as ID's de usuário e grupo do usuário. |
kill {-nu_sinal} {PID} | Encerra processos ativos no sistema Unix, onde nu_sinal é o número do sinal e
PID é o número do processo a ser eliminado (veja o comando ps).
Apenas os processos iniciados pelo usuário podem ser por ele eliminados. O superusuário
tem autorização para eliminar qualquer processo. Ex.: kill -9 135 |
logname | Fornece o nome da conta do usuário. |
lp {arquivo1} {arquivo2} | Imprime os arquivos especificados. Ex.: lp .login |
ls [-ladr] | Lista o conteúdo do diretório corrente. As opções possíveis são descritas
abaixo: -l indica tamanho e permissões de cada arquivo -a lista arquivos ocultos (que iniciam por ".") -d listagem dos diretórios -r ordem reversa Ex.: ls -la |
Envia correspondência aos usuários ou as lê. No caso de envio, finaliza-se com Ctrl+D. | |
man {comando} | Mostra na tela a pagina do manual referente ao comando com descrição de todos
os parâmetros. Ex.: man ls |
mesg {opção} | Permite ou impede a recepção de mensagens. Ex.: mesg n |
mkdir {diretório} | Cria um novo diretório. Ex.: mkdir /usr/tsm/novodir |
more {arquivo} | Mostra o conteúdo do arquivo especificado (q - quit). Ex.: more .profile |
mv {arquivo} {destino} | Move um arquivo para outro diretório. Este comando pode ser usado para renomeação
de arquivo quando não for informado nenhum diretório como parâmetro. Exs.: |
nohup {comando} {argumento} | Executa um comando imune à desconexão e aos sinais de quit. |
pack {arquivo(s)} | Comprime arquivos, similar ao comando compress. Ex.: pack *.c |
passwd | Muda a senha do usuário. Depois de digitado o comando, o sistema pedirá a senha atual, a nova senha e a confirmação da nova senha. |
pcat {arquivo.z} | Exibe o conteúdo do arquivo coprimido com o comando pack na saída padrão. |
ping {endereço} | Permite ver a comunicação entre seu terminal e o endereço desejado. Ex.: ping www.xoom.com |
pr {arquivo} | Quebra o arquivo em páginas, onde a saída é formatada com um cabeçalho em cada página, com o nome do arquivo a data e a hora, e o número de página. |
ps -ef | Reporta a situção de processos ativos no sistema. Segue abaixo as informações
mostradas: UID identifica a ID do dono do processo. A ID corresponde ao nome de conexão do usuário, como especificado em seu registro no /etc/passwd. PID identifica o número de ID do processo. É preciso reconhecer esse número para tomar qualquer atitude com relação ao processo, como usar o comando kill . PPID identifica o pai do processo. STIME indica a hora em que o processo foi iniciado. TTY indica o terminal de controle associado ao processo. O caracter ? indica que o processo não tem um terminal de controle. TIME indica o tempo total de execução que o processo acumulou desde quando foi começado. COMMAND descreve o nome do processo, indicando qual comando que está sendo executado, bem como seus argumentos. |
pwd | Mostra o diretório corrente. O comando é um acrônimo de print working directory. |
rm [-r] {arquivo} | Remove o arquivo especificado (ou mais de um arquivo com o uso de curingas). O exemplo
a seguir remove todos os arquivos do diretório corrente. Ex.: rm * |
rmdir {diretório} | Remove o diretório especificado ( este diretório deve estar vazio). Ex.: rmdir /usr/scr/cmd/lixo |
rlogin {endereço} | Abre uma conexão com o host especificado. Ex.: rlogin ADSSP01.ibm.com.br |
sleep {segundos} | Suspende a execução por um determinado de tempo. |
sort {arquivo} | Ordena o arquivo e mostra na tela. OBS: a alteração não é gravada. |
su [-] {usuário} | Abre uma nova sessão com a conta do usuário mencionado. A opção "-" faz
herdar o ambiente do usuário desejado. Ex.: su - root |
tail [opção] {arquivo} | Mostra na tela as 10 últimas linhas do arquivo. Este valor pode ser ajustado com as
opções +número(a partir do início) -número(a partir do fim). Ex.: tail +15 .login |
talk {usuá[email protected]ínio} | Esse comando dá a permissão de conversar com outro usuário por meio do teclado. O outro usuário necessariamente deve estar logado no sistema Unix. Para sair use Ctrl+C. |
tar {cvf, xvf e tvf} {nome} {arquivo1} [arquivo2] ... | Compacta os arquivos especificados dentro de um arquivo de nome especificado. Ex.: tar cvf arquivos.tar .login .profile (cria arquivos.tar compactado) tar xvf /dev/rst0 * (extrai todos os arq. contidos em fita streamer) tar tvf /dev/rst0 * (verifica o conteúdo em fita streamer) |
tee | Este comando encaminha a entrada para o terminal e para o(s) arquivo(s) nomeado(s). Ex.: ls | tee listagem | sort |
telnet {endereço} | Abre uma conexão com o host especificado. Ex.: telnet ADSRJ01.ibm.com.br |
tty | Exibe o terminal que está sendo usado. |
uncompress {arquivo(s)} | Descomprime arquivos (*.Z). Ex.: uncompress *.Z |
unpack {arquivo(s)} | Descomprime arquivos (*.z). Ex.: unpack *.z |
w | Esse comando lista os usuários que estão logados no sistema UNIX. A lista mostra o login, a hora em que o usuário logou-se, o aplicativo em que encontra-se e a quanto tempo, entre outras informações. |
wall | Envia mensagem para todos os usuários logados. Para finalizar, Ctrl+D. |
wc {arquivo} | Informa a quantidade de caractéres, palavras e linhas do arquivo especificado. Ex.: wc .profile |
who | Determina a quantidade e identidade dos usuários que estão utilizando o sistema Unix no momento. Além do nome dos usuários, tambem informa a hora de abertura da sessão; o terminal (registro/dev); o PID do interpretador de comando do usuário; e outras informações, todas obtidas no arquivo /etc/utmp que é dinamicamente modificado à medida que cada usuário abre ou fecha uma sessão. |
write {usuário} [mensagem] | Entra em chat com um usuário do sistema, imediatamente enviando a mensagem se
especificada. Para sair do chat, use Ctrl + D. Ex.: write produc fim de implantação |
zcat arquivo.Z | Exibe na tela o conteúdo do arquivo comprimido pelo comando compress. |
file > file1 | Redireciona saída do comando especificado. |
file < file1 | Redireciona a entrada para o comando especificado |
file >> file1 | Redireciona saída do comando para o fim do file1. |
comando1 | comando2 | Utiliza a saída do comando1 como entrada do comando2. |
$variável | Fornece o conteúdo da variável de ambiente. |
\metacaracter | Anula a função do metacaracter. |
* | Equivale a qualquer caracter. |
comando & | Faz com que um processo seja executado em background. |
Texto original feito por Marcelo Palmieri Martins (Analista de Sistemas)