% JLdL 20May02.
%	Copyright (C) 2000-2002 by Jorge L. deLyra.
% Mail: <delyra@latt.if.usp.br>. Web: "http://latt.if.usp.br".
% Este documento pode ser copiado e/ou distribuído livremente.
% Ver os termos e condições nos arquivos do sub-diretório web/.
% This document may be copied and/or distributed freely. See the
% _ terms and conditions in the files in the web/ subdirectory.

\documentclass[12pt]{article}
\usepackage[brazil]{babel}\usepackage[latin1]{inputenc}\usepackage{html}

\newcommand{\linkf}[2]{\htmladdnormallinkfoot{#1}{#2}}
\newcommand{\link}[2]{\htmladdnormallink{#1}{#2}}
\newcommand{\lnk}[1]{\htmladdnormallink{#1}{#1}}

\title{ {\huge\bf FMA 215} \\ Aula 3: Um Passeio Pelo Sistema }

\author{Prof. Jorge L. deLyra}

\date{01 de Abril de 2002}

\begin{document}\maketitle

\section{Elementos Sintáticos destas Notas}

 Nestas notas {\tt <comando>} deve sempre ser substituído pelo nome de
 algum comando em particular (sem os sinais de {\tt <} e {\tt >}). A mesma
 convenção vale para {\tt <arquivo>}, {\tt <diretório>}, etc. A convenção
 {\tt <algum-tipo-de-coisa>} é usada para indicar que neste ponto deve-se
 substituir um exemplo do tipo de coisa indicado.

 Todos os comandos, arquivos e demais coisas que estariam sendo digitadas
 ao terminal são mostradas num {\tt tipo de letra de largura fixa}. Teclas
 que você deve digitar serão representadas pelo seu nome entre brackets
 quadrados como, por exemplo, {\tt [Ctrl]} e {\tt [Alt]}. Estas são partes
 de um conjunto de convenções usadas de forma geral em documentos sobre o
 sistema. Não há regras muito fixas, mas uma certa forma relativamente
 padronizada de se fazer as coisas.

 Dada a sua utilização constante, muitos substantivos do Inglês serão
 usados sem tradução ou aviso. Às vezes faremos o mesmo com verbos também,
 atribuindo a eles alguma conjugação arbitrária do Português (eu booto,
 você boota, eles bootam, etc). Aos que se ofenderem com isto, sugiro uma
 procura consistente por equivalentes destas palavras no Tupi que, segundo
 alguns, é a verdadeira língua original deste país {\tt |:-)}.

\section{Alguns Elementos Sintáticos Relevantes}\label{sintaxe}

 A sintaxe básica do sistema é relativamente simples, mas com o tempo vai
 se complicando e torna-se vasta. Aplicativos e sub-sistemas podem ter as
 suas próprias sintaxes. Há uma espécie de filosofia geral de como as
 coisas devem ser, mas não um conjunto muito rígido de regras, pois uma
 das idéias centrais da coisa toda é manter uma grande flexibilidade. Por
 enquanto, a pequena lista que segue basta para as coisas mais básicas que
 precisamos saber de imediato.

\begin{description}

 \item[Execução de comandos:] para executar um comando, digita-se o seu
 nome ao terminal, terminando com a tecla ``Enter'' ou ``Return'' do
 teclado. Não há diferença de procedimento para comandos intrínsecos da
 shell, demais comandos do sistema, programas e aplicativos. Faz-se sempre
 a mesma coisa para se iniciar um destes programas ou aplicativos, apesar
 de que o comportamento de cada um pode ser bem específico e muito
 diferente do comportamento dos outros.

 A diferença entre ``programas'', ``comandos'' e ``aplicativos'' é apenas
 convencional, todos são programas que o sistema roda. Em geral chamamos
 de comandos programas relativamente pequenos que fazem uma coisa definida
 e terminam. São chamados de aplicativos programas maiores, que podem
 entrar em um relacionamento interativo com o usuário, aceitando dele um
 conjunto de comandos próprios, internos àquele programa em particular.

 \item[\tt <comando>] roda o programa e coloca o resultado na tela, que é
 o comportamento mais comum dos programas. Muitos programas aceitam ou
 requerem argumentos, muitas vezes nomes de arquivos.

 \item[\tt <comando> > <arquivo>] redireciona o output do comando para
 dentro de um arquivo, criando o arquivo. É necessário colocar o nome de
 algum arquivo que ainda não exista no diretório onde se está.

 \item[\tt <comando> >> <arquivo>] redireciona o output do comando para
 dentro de um arquivo já existente, colocando-o ao final do arquivo,
 depois do conteúdo que já estiver lá.

 \item[Nomes de arquivos:] o nome completo de um arquivo consiste da
 sequência de diretórios, sendo cada um deles um sub-diretório do
 anterior, que é necessário percorrer, a partir da raiz do sistema de
 arquivos, para chegar até ele. Os diversos diretórios são separados por
 caracteres {\tt /} e, ao final, temos o nome do arquivo em si. Arquivos
 também têm nomes relativos, trata-se da mesma coisa mas começando de
 algum outro ponto do sistema de arquivos.

 \item[\tt /<diretório>/$\cdots$/<diretório>/<arquivo>] nome ou path
 absoluto de um arquivo, ou seja, começando na raiz do sistema de
 arquivos.

 \item[\tt <diretório>/$\cdots$/<diretório>/<arquivo>] nome ou path de um
 arquivo relativamente ao diretório onde você está, ou seja, começando num
 sub-diretório do diretório onde você está.

\end{description}

\section{Tarefas}

 Dê um passeio pelo sistema, incluindo pelo menos as tarefas contidas na
 lista abaixo. Para descobrir como realizar algumas delas, examine a lista
 de comandos que existe ao final desta apostila. Anote suas dúvidas,
 dificuldades e curiosidades para esclarecimento na aula seguinte. Para
 cada um dos comandos ou procedimentos, examine cuidadosamente o output e
 veja se dá para entender o que ele significa. Se não der, então você já
 tem algum material para a sua lista de dúvidas.

 Lembre-se de que, assim que entrar no sistema, você estará em um
 diretório particular que é a sua ``conta'' ou área de disco no sistema.
 Nós o chamamos de seu ``home'' ou de ``raiz da sua conta''. Em geral ele
 será o diretório {\tt /home/<seu-username>/}. Esta é a área do sistema
 onde você pode escrever, criar arquivos. A maior parte do resto do
 sistema está acessível para leitura por você, mas não para escrita, ou
 seja, você pode ler e copiar arquivos de lá, mas não pode apagar arquivos
 ou criar novos arquivos nestas áreas.

 Estas tarefas podem ser realizadas tanto dentro do sistema de janelas X11
 quanto em um terminal de caracteres. Se você já está habituado/a com os
 sistemas de janelas, use o X11, caso contrário use um console ou terminal
 de caracteres, para evitar confusão. Você pode ir para um terminal de
 console acionando simultaneamente as teclas {\tt [Ctrl]}, {\tt [Alt]} e
 {\tt [F1]}. Para voltar para o X11 digite {\tt [Ctrl]}, {\tt [Alt]} e
 {\tt [F7]}, mas não se esqueça de sair de sua sessão ou sessões antes de
 abandonar o terminal.

\begin{enumerate}

 \item Faça um login no sistema, usando seu ``username'' e sua
 ``password''. Lembre-se de nunca usar os keypads para digitar a sua
 senha.

 \item Mostre a data e a hora do sistema, usando o comando {\tt date}.

 \item Verifique quem mais está usando o sistema além de você, usando o
 comando {\tt w}.

 \item Verifique que processos você está rodando, usando o comando {\tt
 ps}.

 \item Verifique que filesystems estão disponíveis no sistema, usando o
 comando {\tt df}.

 \item Liste todas as variáveis definidas na sua shell, usando o comando
 {\tt set}.

 \item Liste todas as variáveis existentes no seu environment, usando o
 comando {\tt env}.

 \item Limpe a tela do seu terminal, usando o comando {\tt clear}.

 \item Liste os arquivos que existem em sua conta, usando o comando {\tt
 ls}.

 \item Crie um arquivo novo em sua conta, chamado {\tt trash}, usando o
 comando {\tt touch}.

 \item Liste os arquivos do seu diretório-home para verificar que o novo
 arquivo está lá.

 \item Crie um diretório novo, chamado {\tt tmp}, usando o comando {\tt
 mkdir}; este será um sub-diretório de seu diretório-home.

 \item Liste os arquivos do diretório para verificar que o novo diretório
 está lá.

 \item Movimente o arquivo {\tt trash} para dentro do diretório {\tt tmp},
 usando o comando {\tt mv}.

 \item Vá para dentro do sub-diretório {\tt tmp} de sua conta, usando o
 comando {\tt cd}.

 \item Ecoe a frase ``Hello world'' na tela do terminal, usando o comando
 {\tt echo}.

 \item Escreva esta mesma frase dentro do arquivo {\tt trash}. Dica: use
 redirecionamento de output, como explicado na seção~\ref{sintaxe} desta
 apostila.

 \item Mostre o conteúdo do arquivo {\tt trash} na tela, verificando que o
 texto está lá, usando o comando {\tt cat}.

 \item Mostre uma lista dos arquivos existentes no diretório-raiz do
 sistema de arquivos ({\tt /}).

 \item Acrescente esta lista ao final do arquivo {\tt trash}. Dica: use
 mais uma vez redirecionamento de output.

 \item Mostre o conteúdo do arquivo {\tt trash} na tela, verificando que a
 lista de fato está lá.

 \item Copie o arquivo {\tt trash} com o nome {\tt trash2}, usando o
 comando {\tt cp}.

 \item Liste os arquivos do diretório para verificar que o novo arquivo
 está lá.

 \item Mostre o tipo de arquivo de cada um dos dois arquivos, usando o
 comando {\tt file}.

 \item Remova o arquivo {\tt trash}, usando o comando {\tt rm}.

 \item Mude o nome do arquivo {\tt trash2} para {\tt trash}, usando o
 comando {\tt mv}.

 \item Crie um novo link para o arquivo {\tt trash}, chamado {\rm trash2},
 usando o comando {\tt ln}.

 \item Liste os arquivos do diretório para verificar que o novo arquivo
 está lá.

 \item Mostre o tipo de arquivo de cada um dos dois arquivos.

 \item Remova o diretório {\tt tmp} que você criou, bem como os arquivos
 dentro dele.

 \item Limpe a tela do seu terminal.

 \item Vá para a raiz do sistema de arquivos (o diretório {\tt /}).

 \item Dê uma boa olhada dentro de alguns dos sub-diretórios que existem
 lá; em particular, olhe os diretórios {\tt etc}, {\tt bin}, {\tt lib},
 {\tt dev}, {\tt var} e {\tt usr}.

 \item Determine qual é o tipo de arquivo mais comum em cada um dos
 sub-diretórios {\tt etc}, {\tt bin}, {\tt lib}, {\tt dev}, {\tt var} e
 {\tt usr}.

 \item Limpe a tela do seu terminal.

 \item Faça um logout do sistema, ou seja, termine a sua shell, usando os
 comandos {\tt exit} ou {\tt logout}.

\end{enumerate}

\section{Problemas e Dicas}

\begin{enumerate}

 \item Você saberia como determinar o número total de arquivos existentes
 neste sistema? E o número total de arquivos de cada tipo? Tente fazer
 isto, usando os comandos {\tt ls}, {\tt wc} e {\tt find}. Você vai ter de
 usar várias das opções existentes nestes comando como, por exemplo, as
 opções {\tt -l} e {\tt -R} do comando {\tt ls}. Dê uma boa lida nas
 páginas de manual de cada um destes comandos, executando {\tt man ls} e
 assim por diante. Você pode andar para cima e para baixo dentro do {\tt
 man} usando as teclas {\tt [PageDown]} e {\tt [PageUp]}. Para sair do
 {\tt man}, digite a letra {\tt q}.

\end{enumerate}

\section{Uma Lista de Comandos Relevantes}

 Os comandos são mostrados em ordem alfabética. Cada um é acompanhado por
 uma pequena explicação da sua função quando usado da forma mostrada. A
 lista e as explicações estão longe de esgotar todas as possibilidades,
 trata-se apenas de alguns exemplos muito particulares, mas que são muito
 básicos e importantes.

 Cada um destes comandos aceita, além dos argumentos mostrados, uma série
 de opções diferentes, que podem mudar o seu comportamento. Estas opções
 são, em geral, letras individuais precedidas de um sinal ``{\tt -}'',
 tais como {\tt -a}, {\tt -f}, {\tt -k}, {\tt -l}, {\tt -n}, {\tt -s},
 etc. Mais tarde veremos várias delas, pois há algumas que são de fato
 extremamente úteis.

 Observe que o comando {\tt man} pode ser usado para obter mais informação
 (em Inglês) sobre os outros comandos. Para sua conveniência de uso, esta
 lista está disponível em uma página separada, encontrando-se ao final da
 apostila.

\begin{description}\setlength{\itemsep}{0ex}

 \item[\tt cat <arquivo>]: mostra o conteúdo do arquivo.

 \item[\tt cd <diretório>]: muda para o diretório; sem argumentos, vai
 para o diretório-home do usuário.

 \item[\tt clear]: limpa a tela.

 \item[\tt cp <arquivo> <novo-arquivo>]: copia o arquivo, criando um novo
 arquivo.

 \item[\tt date]: mostra a data e a hora.

 \item[\tt df]: mostra os filesystems disponíveis, ou seja, que estão
 montados no sistema.

 \item[\tt echo <string>]: ecoa o string de caracteres na tela; é um
 comando built-in da shell.

 \item[\tt env]: mostra as variáveis de ambiente da sua sessão; é um
 comando built-in da shell.

 \item[\tt exit]: termina a sessão, ou seja, a shell; é um comando
 built-in da shell.

 \item[\tt file <arquivo>]: mostra o tipo do arquivo.

 \item[\tt history]: mostra a lista de comandos executados; é um comando
 built-in da shell.

 \item[\tt ln {[-s]} <arquivo> <novo-nome>]: sem opções, faz um novo
 ``hard link'' para o arquivo, ou seja, define um novo nome para ele na
 estrutura do filesystem; com a opção {\tt -s} faz um novo ``soft link''
 para o arquivo, ou seja, define um novo nome para ele, criando um novo
 arquivo que ``aponta'' para o antigo.

 \item[\tt ls {[-a] [-l]} {[<diretório ou arquivo>]}]: lista o arquivo ou
 os arquivos do diretório; sem argumentos, usa o diretório onde você está;
 com a opção {\tt -a} mostra todos os arquivos do diretório, incluindo os
 arquivos especiais e demais arquivos ``escondidos''; com a opção {\tt -l}
 mostra informações mais completas sobre o arquivo ou arquivos, incluindo
 o tipo de arquivo (em termos da estrutura do filesystem, não do tipo de
 conteúdo), controle de acesso, número de links, ownership, tamanho, data
 e nome do arquivo; as ações das chaves {\tt -a} e {\tt -l} podem ser
 combinadas; aqui está um exemplo:

\input{lista-verbatim01.tex}

 \item[\tt man <nome-de-comando>]: mostra a página do manual do comando;
 para sair, basta digitar a letra {\tt q} (de ``quit'').

 \item[\tt mkdir <diretório>]: se o nome dado como argumento não contém o
 caracter {\tt /}, cria um diretório que passa a ser um sub-diretório do
 diretório onde você está.

 \item[\tt mv <arquivo> <novo-nome ou diretório>]: muda o nome de um
 arquivo ou movimenta o arquivo para dentro do diretório.

 \item[\tt ps {[a][u][x]}]: mostra processos que estão rodando no sistema;
 sem opções, mostra apenas os processos do usuário que estão conectados a
 um terminal; a opção {\tt a} inclui os processos de outros usuários; a
 opção {\tt u} faz com que o comando mostre o usuário ao qual pertence
 cada processo; a opção {\tt x} inclui os processos que não estejam
 conectados a um terminal.

 \item[\tt rm <arquivo>]: remove o arquivo.

 \item[\tt rmdir <diretório>]: deleta um diretório, desde que ele esteja
 vazio, ou seja, que não existam arquivos dentro dele.

 \item[\tt set {[<variável>] [= (<valor>...<valor>)]}]: sem argumentos,
 mostra todas as variáveis definidas na sua shell; com argumentos, atribui
 os valores a cada uma das palavras (words) da variável; se só houver um
 valor pode-se omitir os parêntesis; é um comando built-in da shell {\tt
 tcsh}.

 \item[\tt touch <arquivo>]: cria um arquivo vazio.

 \item[\tt w]: mostra quem está logado no sistema.

\end{description}

\section{Arquivos de Configuração}

 Alguns dos comandos utilizados nesta apostila têm o seu comportamento
 afetado pelos arquivos de configuração da ``shell'' que você está usando,
 que se chama {\tt tcsh}. Estes arquivos são muito importantes para a
 configuração do seu ambiente de trabalho dentro do sistema, que chamamos
 de ``ambiente de usuário''. Eles serão examinados em maiores detalhes
 mais tarde. Por ora, apenas dê uma olhada neles. Tome muito cuidado para
 não danificá-los ou deletá-los, pois neste caso o seu ambiente de usuário
 deixará de funcionar e sua vida dentro do sistema ficará muito difícil, a
 não ser que você já seja um usuário muito experiente.

 Há dois arquivos de configuração principais da {\tt tcsh}, um chamado
 {\tt .login}, que é executado uma única vez quando você entra no sistema,
 outro chamado {\tt .cshrc} (ou {\tt .tcshrc}) que é executado cada vez
 que uma nova shell é iniciada. O que você vê como resultado da execução
 do comando {\tt env} está definido basicamente em {\tt .login}, enquanto
 o que mostram os comandos {\tt set} e {\tt alias} está definido de forma
 geral em {\tt .cshrc}.

 Se você der uma olhada nos arquivos {\tt .login} e {\tt .cshrc} da sua
 conta, você verá que de fato eles estão praticamente vazios. Na verdade
 tudo que contêm são chamadas para outros arquivos que mantemos no
 sistema, os quais definem um ambiente de usuários padronizado. É desta
 forma que implementamos no sistema um ambiente padrão para os usuários,
 que pode facilmente ser mantido de forma centralizada, sem negar aos
 usuários a possibilidade de se desligarem deste sistema centralizado e de
 passar a definir e manter suas próprias configurações de ambiente de
 usuários. Mais tarde veremos como se pode fazer isto.

\newpage

\ 

\newpage
\thispagestyle{empty}

\begin{center}\large\bf
 Uma Lista de Comandos Básicos
\end{center}

\begin{description}\setlength{\itemsep}{0ex}

 \item[\tt cat <arquivo>]: mostra o conteúdo do arquivo.

 \item[\tt cd <diretório>]: muda para o diretório; sem argumentos, vai
 para o diretório-home do usuário.

 \item[\tt clear]: limpa a tela.

 \item[\tt cp <arquivo> <novo-arquivo>]: copia o arquivo, criando um novo
 arquivo.

 \item[\tt date]: mostra a data e a hora.

 \item[\tt df]: mostra os filesystems disponíveis, ou seja, que estão
 montados no sistema.

 \item[\tt echo <string>]: ecoa o string de caracteres na tela; é um
 comando built-in da shell.

 \item[\tt env]: mostra as variáveis de ambiente da sua sessão; é um
 comando built-in da shell.

 \item[\tt exit]: termina a sessão, ou seja, a shell; é um comando
 built-in da shell.

 \item[\tt file <arquivo>]: mostra o tipo do arquivo.

 \item[\tt history]: mostra a lista de comandos executados; é um comando
 built-in da shell.

 \item[\tt ln {[-s]} <arquivo> <novo-nome>]: sem opções, faz um novo
 ``hard link'' para o arquivo, ou seja, define um novo nome para ele na
 estrutura do filesystem; com a opção {\tt -s} faz um novo ``soft link''
 para o arquivo, ou seja, define um novo nome para ele, criando um novo
 arquivo que ``aponta'' para o antigo.

 \item[\tt ls {[-a] [-l]} {[<diretório ou arquivo>]}]: lista o arquivo ou
 os arquivos do diretório; sem argumentos, usa o diretório onde você está;
 com a opção {\tt -a} mostra todos os arquivos do diretório, incluindo os
 arquivos especiais e demais arquivos ``escondidos''; com a opção {\tt -l}
 mostra informações mais completas sobre o arquivo ou arquivos, incluindo
 o tipo de arquivo (em termos da estrutura do filesystem, não do tipo de
 conteúdo), controle de acesso, número de links, ownership, tamanho, data
 e nome do arquivo; as ações das chaves {\tt -a} e {\tt -l} podem ser
 combinadas; aqui está um exemplo:

\input{lista-verbatim01.tex}

 \item[\tt man <nome-de-comando>]: mostra a página do manual do comando;
 para sair, basta digitar a letra {\tt q} (de ``quit'').

 \item[\tt mkdir <diretório>]: se o nome dado como argumento não contém o
 caracter {\tt /}, cria um diretório que passa a ser um sub-diretório do
 diretório onde você está.

 \item[\tt mv <arquivo> <novo-nome ou diretório>]: muda o nome de um
 arquivo ou movimenta o arquivo para dentro do diretório.

 \item[\tt ps {[a][u][x]}]: mostra processos que estão rodando no sistema;
 sem opções, mostra apenas os processos do usuário que estão conectados a
 um terminal; a opção {\tt a} inclui os processos de outros usuários; a
 opção {\tt u} faz com que o comando mostre o usuário ao qual pertence
 cada processo; a opção {\tt x} inclui os processos que não estejam
 conectados a um terminal.

 \item[\tt rm <arquivo>]: remove o arquivo.

 \item[\tt rmdir <diretório>]: deleta um diretório, desde que ele esteja
 vazio, ou seja, que não existam arquivos dentro dele.

 \item[\tt set {[<variável>] [= (<valor>...<valor>)]}]: sem argumentos,
 mostra todas as variáveis definidas na sua shell; com argumentos, atribui
 os valores a cada uma das palavras (words) da variável; se só houver um
 valor pode-se omitir os parêntesis; é um comando built-in da shell {\tt
 tcsh}.

 \item[\tt touch <arquivo>]: cria um arquivo vazio.

 \item[\tt w]: mostra quem está logado no sistema.

\end{description}

\thispagestyle{empty}

\end{document}

###

