A maior parte destas tarefas deve ser realizada nas máquinas da sala Pró-Aluno. Como trata-se de lidar com uma rede, que raramente está disponível em casa, esta será a melhor forma de executar as tarefas. Também é possível realizá-las em outros sistemas a partir dos quais se tenha acesso ao servidor do projeto Sócrates, mas provavelmente será menos confortável e conveniente. Quase todas as tarefas podem ser realizadas nos terminais de caracteres do console, que é como as descrevemos abaixo, mas também é possível realizá-las de dentro do sistema X11, usando dois terminais xterm em duas janelas separadas.
Os dois terminais virtuais tty1 e tty2 associados às teclas [F1] e [F2] estão agora rodando duas sessões interativas em duas máquinas diferentes. Enquanto a sessão em tty1 está usando o CPU e a memória RAM da máquina local em frente à qual você está sentado/a, a sessão em tty2 está usando o CPU e a memória RAM de uma máquina remota, o servidor socrates. Na realidade, neste caso o processamento está sendo dividido entre as duas máquinas: a máquina local está rodando apenas um conjunto de programas que emula um terminal ASCII, enquanto qualquer comando ou aplicação que você rode dentro desta sessão será executado no servidor. Em cada um dos dois casos você está num diretório local da máquina em que está processando, os diretórios /temp e /tmp.
Em cada uma das duas sessões, execute a pipeline de comandos ps aux | less para verificar as diferenças no estado de processamento das duas máquinas. Execute também os comandos hostname, uname -a, uptime e w em cada uma das duas sessões.
dd if=/dev/zero of=<username>.zeros bs=1024 count=100
O programa dd copia blocos de dados de um dispositivo ou arquivo para outro, as opções bs e count determinam o tamanho e o número de blocos respectivamente. Isto irá criar um arquivo com o nome indicado, contendo 100 Kbytes de zeros binários. Verifique este fato usando o comando ls -l. Vá agora para a sessão do terminal tty1 e use o comando ls -l lá, para verificar que ainda não existe um arquivo com este nome no diretório /temp na máquina local.
Para fazer isto, execute em sua sessão local, no terminal tty1, o comando ftp socrates.if.usp.br. O programa irá estabelecer uma ligação de rede com o socrates e em seguida solicitar a você informação de login no sistema remoto. Observe que, como o seu username é o mesmo nos dois sistemas, não será de fato necessário digitar o seu username, basta digitar [Enter] que o programa usará por default o seu username local. Digite em seguida a sua password no sistema remoto (que também é a mesma, mas desta vez será necessário digitar). Caso você erre a password, aparecerá uma mensagem de que o login falhou, neste caso saia do ftp digitando [Ctrl]-D e inicie o processo de novo.
Antes de pegar o arquivo, execute o comando hash dentro da sessão FTP. Este comando fará com que o programa reporte o progresso da transferência colocando na tela um símbolo # para cada bloco de 1024 bytes de dados que forem transferidos. Em seguida, pegue o arquivo do sistema remoto usando o comando get <username>.zeros e observe o que acontece. Verifique a velocidade com que o programa reporta que fez a transferência. Baseando-se nisto, dá para você estimar qual é a velocidade da rede que interliga as duas máquinas? Em seguida, saia do programa ftp usando o comando exit e use o comando ls -l em sua sessão local para verificar que o arquivo foi, de fato, transferido para o diretório /temp da máquina local.
popXX:/temp> cat /dev/null >! <username>.chars popXX:/temp> set ic = 0 popXX:/temp> while ( $ic < 10240 ) while? @ ic = $ic + 1 while? echo -n 0000000000 >> <username>.chars while? end
Trata-se aqui de um pequeno exemplo de programação de linha de comando. O primeiro comando cria um arquivo vazio contendo o seu username no nome. O segundo comando inicializa um contador. O comando while executa o bloco de comandos que segue, até o comando end, enquanto a condição indicada for satisfeita. O caracter @ é o operador aritmético, ele indica que nesta linha a variável ic está sendo manipulada segundo a aritmética dos números inteiros. Verifique o resultado da operação usando o comando ls -l.
Entre agora no programa ftp da mesma forma como fez antes, uma vez dentro dele vá para o diretório /tmp do servidor, execute o comando hash e transfira este arquivo para o servidor usando o comando put <username>.chars. Em seguida use o comando ls dentro do programa ftp para verificar que o arquivo foi de fato transferido.
ftp fma.if.usp.br
e, quando aparecer o prompt para o username, digite anonymous ou simplesmente ftp. Em seguida, digite o seu endereço de e-mail no lugar da password. Pronto, você estará conectado/a ao servidor, use o comando cd para passear à vontade por lá e o comando get para pegar o que quiser. Há nestes servidores centenas de GB de free software disponível, na maior parte na forma de arquivos comprimidos.
Para verificar o fato de que estas máquinas são todas ``trusted hosts'' (sistema mutuamente conhecidos e autorizados) uns dos outros, examine em cada sistema, usando um paginador ou o seu editor preferido, os arquivos /etc/hosts.equiv e /etc/netgroup, que contêm um grupo de rede chamado rcmaccess que consiste de uma lista dos hosts autorizados. Estas são as autorizações globais destes sistemas, mas você também pode definir uma estrutura de autorizações específica para a sua conta. Para autorizar este tipo de conexão para a sua conta, crie na raiz dela um arquivo de nome .rhosts, ou modifique um que já esteja lá, colocando nele um conteúdo como o que segue, ou seja, diretamente uma lista de hosts que você deseja autorizar para acesso à sua conta.
# JLdL 02Jun02. # Base de dados de acesso transparente. # socrates.if.usp.br <username> pops.if.usp.br <username> poph.if.usp.br <username> pop01.if.usp.br <username> <...etc...> <...etc...> pop28.if.usp.br <username>
Observe que é importante incluir o seu username na segunda coluna, bem como o nome completo das máquinas. Também é uma boa idéia deixar este tipo de arquivo legível apenas por você mesmo.
rcp <file>.zeros socrates.if.usp.br:/tmp/<file>.zeros.2
Tente também uma alternativa contendo explicitamente o seu username no sistema socrates como parte do endereço:
rcp <file>.chars <username>@socrates:/tmp/<file>.chars.2
Finalmente, tente uma alternativa com dois arquivos e um diretório:
rcp <username>.zeros <username>.chars socrates.if.usp.br:
Neste caso, descubra onde foram parar os dois arquivos transferidos.
rsh socrates.if.usp.br who
Verifique a informação obtida executando o comando who diretamente no socrates, em seu terminal tty2. Tente fazer o mesmo com os comandos df, ls e uptime. No caso do ls, observe bem quais são os arquivos que aparecem. Se necessário, use ls -al.
Existe um segundo comando que serve para este tipo de função, o qual é mais específico dos sistema Linux ou Unix. Trata-se do comando rlogin, que permite que façamos um login em um sistema remoto. Entre sistemas que se conhecem e entre os quais há as relações apropriadas de autorização, de forma semelhante ao que acontece no caso dos comandos rcp e rsh, é possível fazer o login no sistema remoto sem a necessidade de se digitar o username e a password. Desta forma podemos passar de forma mais transparente de um sistema para o outro dentro de um ``cluster'' de sistemas que estejam integrados em rede. Experimente este comando, por exemplo executando-o em seu terminal tty1 da forma
rlogin socrates.if.usp.br
Verifique que você está de fato no socrates e em seguida saia de novo, usando o comando exit para terminar a shell que foi iniciada no login remoto.
A explicação do que acontece é uma propriedade peculiar do comando ssh (que também é válida para a rsh). Em geral o ssh deve ser chamado com dois argumentos, o nome do host no qual queremos executar o comando e o nome do comando a ser executado. Se dermos apenas um argumento, ele será entendido como o nome de um host no qual se deve fazer um login. Por outro lado, se chamarmos o comando ssh sem argumentos, mas dando a ele um nome diferente, ele tenta executar um login em um host cujo hostname seja o nome com o qual o comando foi chamado. Chamar um programa através de um link é uma forma de executá-lo com um nome diferente. Links para ssh são a forma universal segundo a qual permitimos o tráfego de usuários entre as máquinas de um cluster de sistemas que estão integrados em rede, formando um único sistema global do ponto de vista do usuário.
Sem este sistema você não teria um ``home'', ou teria um ``home'' diferente em cada um dos sistemas e, toda vez que fosse usar uma das máquinas, teria de transferir todos os seus arquivos para ela, usando disquetes, ou FTP a partir da última máquina em que tenha trabalhado anteriormente. Esperançosamente, você ainda se lembra de onde foi que trabalhou da última vez, não perdeu nem danificou os seus disquetes e, se aquela máquina está agora sendo usada por alguém para rodar o Windows, bem,...obviamente este esquema não seria uma idéia muito boa.
O sistema NFS não é uma forma de copiar arquivos entre duas máquinas e sim uma forma de compartilhar o mesmo arquivo entre duas ou mais máquinas. Para verificar isto, em seu terminal tty1 volte ao sistema local, executando o comando exit, caso ainda esteja numa sessão remota no socrates. Execute um cd sem argumentos, o que o levará para casa (para o seu ``home''). Faça o mesmo no terminal tty2, onde você ainda está numa sessão remota no servidor socrates. Voltando ao terminal tty1 crie com o comando touch um arquivo chamado trash.nfs na raiz de sua conta. Verifique o resultado com o comando ls. Em seguida vá ao terminal tty2 e use o comando ls para verificar que o arquivo que você acaba de criar está disponível no servidor. Não se trata de uma cópia, para verificar isto, ainda no terminal tty2 remova o arquivo com o comando rm trash.nfs. Em seguida volte ao terminal tty1 e verifique que o arquivo desapareceu de lá também.
Verifique também que o que está montado no diretório /usr no sistema local é um disco exportado pelo servidor socrates, que no momento está dublando como o servidor Linux local da sala, usando desta vez o nome pops dentro da rede fechada. É dentro deste diretório que fica a maior parte dos programas do sistema. Observe que, de todos os filesystems de sistema (/, /tmp, /var e /usr), este último é de longe o maior. Considere a economia de espaço em disco que estamos fazendo ao usar este mesmo sistema de arquivos contendo programas para todas as 28 máquinas da sala. Os discos de cada máquina têm cerca de 10 GB cada um, que estão sendo utilizados na maior parte pelo Windows e pelo diretório temporário local /temp. Sem este tipo de esquema, não teria sido possível instalar em todas as máquinas um sistema Linux tão completo quanto o que temos e ainda dispor das amplas áreas temporárias locais /temp nos terminais.
Para descobrir quais são os endereços numéricos dos sistemas, você pode usar o comando host <hostname>.<network-domain-name>, tanto no socrates quanto nas máquinas da sala Pró-Aluno. Entretanto, note que as máquinas da sala em si estão em uma rede fechada e não estão cadastradas no sistema DNS da Internet, de forma que não vai funcionar usar este comando para as máquinas da sala. Tente executar o comando para várias máquinas do Instituto, tais como socrates.if.usp.br, euclides.if.usp.br, latt.if.usp.br, gancho.if.usp.br, mestre.if.usp.br e servo.if.usp.br. Depois disto, tente algumas outras máquinas da USP como, por exemplo, spider.usp.br, linusp.usp.br e linorg.usp.br. Finalmente, tente algumas máquinas de fora do país como, por exemplo, ftp.debian.org e ftp.kernel.org.
Todos os usuários precisam estar cadastrados em algum lugar, que em geral é o servidor central (master server) do sistema NIS. Em nosso caso este sistema é (adivinhe só!) o servidor socrates. Para ver o cadastro de todos os usuários dos sistemas didáticos examine, em seu terminal tty2, o arquivo /etc/passwd, usando o seu paginador ou editor favorito. Como você vê, há nele várias colunas de dados separadas pelo caracter ``:'', que mapeiam o username do usuário em seu número de identificação no sistema, seu home, sua shell de login, etc. A única coisa que notoriamente está faltando é, curiosamente, a password! Em tempos passados ela costumava de fato ser mantida neste arquivo, em forma encriptada, mas hoje em dia a mantemos em outro, por questões de segurança: o arquivo /etc/shadow, que não é legível pelos usuários.
ypcat passwd | sort -n -t : +2 | less
Olhe as páginas de manual do comando sort para entender o papel de cada opção ou argumento.
finger <username>@socrates.if.usp.br
e, para obter alguma informação sobre quem está no sistema no momento, o comando finger @socrates. Tente também usar o finger com o username de alguns outros usuários do sistema.
talk <username>@<hostname>.<network-domain-name>
Se estiver de fato logado no sistema remoto, o usuário receberá uma mensagem o instruindo a responder com um comando do mesmo tipo. Entretanto, é possível que a sessão do usuário remoto não esteja permitindo conexões deste tipo. Cada usuário pode controlar se quer ou não receber este tipo de conexão com o comando mesg. Executando-se mesg y autoriza-se as conexões, com mesg n elas são desabilitadas. Sem argumentos, o comando mostra a situação corrente.
Se a conexão for realizada com sucesso, a tela de seu terminal se dividirá em duas, o que você escrever aparecerá numa delas e o que o seu interlocutor digitar aparecerá na outra. Caso os dois usuários estejam logados na mesma máquina, é suficiente colocar apenas o username, omitindo os nomes da máquina e do domínio. Este seria o caso, por exemplo, de dois alunos que estejam logados no socrates a partir de máquinas da sala Pró-Aluno e que usem o comando dentro do servidor.
Tente usar este comando para falar com algum colega que também esteja usando o Linux na sala Pró-Aluno. Faça o mesmo dentro do socrates, estabelecendo uma conversação com algum outro usuário que esteja logado no servidor. Existe também um comando ytalk, com a mesma função, que pode ser utilizado dentro do sistema X11, no qual ele abre uma janela própria. Tente usar este comando também.
Em nossos sistemas mantemos ativo um outro daemon, chamado rwhod, que permite a operação de mais dois comandos de distribuição de informação pela rede. Trata-se dos comandos rwho e ruptime, que são versões remotas dos comandos who e uptime. O primeiro dá informação sobre os usuários que estão usando os sistemas que estão rodando os daemons, o segundo dá informação sobre os próprios sistemas como, por exemplo, há quanto tempo estão funcionando desde o último boot e qual a carga em cada um.
Experimente usar os comandos who, uptime, rwho e ruptime tanto no sistema local (terminal tty1) quanto no servidor remoto (terminal tty2). Observe que estes comandos de rede atuam apenas sobre as máquinas ligadas à mesma rede física e configuradas na mesma rede lógica, de forma que os resultados dos comandos de rede serão muito diferentes no socrates e nas máquinas da sala Pró-Aluno. Estes comandos e daemons atuam por meio de ``broadcast'' e só são efetivos dentro de uma rede local configurada logicamente como um domínio de broadcast. Usando pipelines como os comandos grep, sort, etc, você poderá filtrar e manipular a informação obtida para os mais diversos fins. O comando ruptime tem também algumas opções úteis de ordenamento, dê uma olhada nas suas páginas de manual.