\chapter{Comunicare con gli altri}\label{network-chapter}
  
  % should we cover Mosaic?
  
  %\begin{quote}
  %``One basic notion underlying Usenet is that it is a cooperative.''
  %Having been on Usenet for going on ten years, I disagree with
  %this. The basic notion underlying Usenet is the flame.\\
  %\raggedleft Chuq Von Rospach
  %\end{quote}
  
  I sistemi operativi UNIX moderni sono molto bravi nel comunicare con altri
  computer, o nel formare delle reti. Due computer UNIX distinti possono
  scambiarsi informazioni in moltissimi modi diversi; questo capitolo parler\`a
  di come trarre utilit\`a da questa grande abilit\`a.
  
  Cercheremo di coprire la posta elettronica, le news di Usenet e svariati
  programmi di utilit\`a di UNIX per le comunicazioni.
  
  \section{Posta elettronica}
  
  Una delle caratteristiche pi\`u popolari di UNIX \`e la posta elettronica. Con
  essa si pu\`o evitare di litigare con la busta, la carta, la penna,
  il francobollo e la buca delle lettere, e al loro posto litigare con il
  computer. 
  
  \subsection{Spedire la posta}
  
  Tutto ci\`o che si deve fare \`e digitare {\tt mail {\sl nome utente}}\impttindex{mail}
  e scrivere il messaggio.
  
  Ad esempio, supponiamo che io voglia scrivere un messaggio ad un utente con
  nome {\tt sam}:
  
  \begin{screen}\begin{verbatim}
  /home/larry# mail sam
  Subject: La documentazione utente
  Sto solo provando il sistema di posta.
  EOT
  /home/larry#
  \end{verbatim}\end{screen}
  
  Il programma {\tt mail} \`e molto semplice. Come {\tt cat},
  accetta input dall'input standard, una linea alla volta, finch\'e riceve il
  carattere di fine testo da solo su una linea: \eof. Cos\`{\i}, per inviare il mio
  messaggio dovrei digitare \key{Invio} e poi \eof.
  
  {\tt mail} \`e il modo pi\`u semplice per spedire la posta, ed \`e piuttosto utile
  quando viene usato con le pipe e con la redirezione. Ad esempio, se volessi
  inviare il file {\tt report1} a ``Sam'', potrei fare ``{\tt mail~sam~<~report1}'',
  oppure addirittura ``{\tt sort~report1~|~mail~sam}''.
  
  Comunque, il lato negativo dell'uso di {\tt mail} per spedire la posta \`e che
  comporta l'uso di un editor veramente scarno: non si pu\`o modificare una
  linea una volta che si \`e premuto invio! Quindi, vi suggerisco di inviare la
  posta (quando non dovete usare le pipe o la redirezione) con la modalit\`a
  mail di Emacs\ttindex{emacs}, che viene spiegata nella Sezione~\ref{emacs-mail-mode}.
  
  \subsection{Leggere la posta}
  
  \begin{command}
    {\tt mail}\impttindex{mail} [{\sl user}]
  \end{command}
  
  Il programma {\tt mail} offre un modo abbastanza goffo di leggere la posta. Se
  scrivete {\tt mail} senza parametri, vedrete:
  
  \begin{screen}\begin{verbatim}
  /home/larry# mail
  No mail for larry
  /home/larry#
  \end{verbatim}\end{screen}
  
  Ora mi mander\`o della posta, in modo da poter
  giocherellare con il lettore:
  
  \begin{screen}\begin{verbatim}
  /home/larry# mail larry
  Subject: Rane!
  e rospi!
  EOT
  /home/larry# echo "pippo" | mail larry
  /home/larry# mail
  Mail version 5.5 6/1/90.  Type ? for help.
  "/usr/spool/mail/larry": 2 messages 2 new
  >N  1 larry                 Tue Aug 30 18:11  10/211   "Rane!"
   N  2 larry                 Tue Aug 30 18:12   9/191  
  & 
  \end{verbatim}\end{screen}
  
  Il prompt all'interno del programma di mail \`e una ``e commerciale'' 
  (``{\tt \&}''); permette di dare un paio di semplici comandi, e visualizzer\`a
  una breve schermata di aiuto se digitate {\tt ?} e \ret.
  
  I comandi base di {\tt mail} sono:
  
  \begin{description}
  \item[{\tt t} {\sl lista di messaggi}] Mostra (o {\bf t}ype) i messaggi sullo
  schermo.
  \item[{\tt d} {\sl lista di messaggi}] Cancella i messaggi.
  \item[{\tt s} {\sl lista di messaggi} {\sl file}] Salva i messaggi in
    {\sl file}.
  \item[{\tt r} {\sl lista di messaggi}] Risponde ai messaggi---cio\`e, comincia a
  comporre un nuovo messaggio a chiunque abbia spedito i messaggi nella lista.
  \item[{\tt q}] Esci salvando tutti i messaggi non cancellati in un file 
  con nome {\tt mbox} nella home directory.
  \end{description}
  
  Cos'\`e una {\sl lista di messaggi}? \`E una lista di numeri interi separati da
  spazi, o un intervallo, come {\tt 2-4} (che \`e la stessa cosa di 
  ``{\tt 2 3 4}''). 
  Si pu\`o anche immettere il nome di utente del mittente, in modo che il comando 
  {\tt t sam} stamperebbe a video tutta la posta arrivata da Sam. Se viene
  omessa la lista di messaggi, il comando viene applicato all'ultimo messaggio
  mostrato.
  
  Ci sono diversi problemi con la lettura dei messaggi con il programma
  {\tt mail}. Per prima cosa, se un messaggio \`e pi\`u lungo dello schermo, il
  programma non si ferma, ma lo fa scrollare fuori dallo schermo. Dovete
  salvarlo ed usare {\tt more}. Secondo, non ha una buona interfaccia per la
  posta vecchia---cio\`e se volete salvare la posta e leggerla in un secondo tempo.
  
  Emacs ha anche un programma accessorio per leggere la posta, {\tt rmail}, 
  che per\`o non viene spiegato in questo libro. In aggiunta a ci\`o, la maggior
  parte dei sistemi Linux ha diversi altri programmi di lettura della posta
  disponibili, come {\tt elm}\ttindex{elm} o
  {\tt pine}\ttindex{pine}.
  
  % what about the .forward file!!! ****
  
  \section{Troppe notizie}
  
  % nn?
  
  \section{Cercare persone}
  
  \subsection{Il comando {\tt finger}}
  
  Il comando {\tt finger} permette di acquisire informazioni sugli altri
  utenti del vostro sistema e di altri sistemi di tutto il mondo. Senza dubbio
  il comando {\tt finger} \`e stato chiamato cos\`{\i} grazie alla pubblicit\`a della
  AT\&T\index{AT\&T} che esortava le persone ad ``allungarsi e toccare
  qualcuno''. Dato che UNIX ha le sue radici nella AT\&T, probabilmente
  questo ha divertito l'autore.
  
  \begin{command}
    {\tt finger}\impttindex{finger} [-slpm] [{\sl utente}][{\sl @macchina}]
  \end{command}
  
  I parametri opzionali per {\tt finger} possono confondere leggermente; in
  realt\`a non \`e cos\`{\i} male: si possono chiedere informazioni su un utente locale 
  (``sam''), su un'altra macchina (``@lionsden''), su un utente remoto
  (``sam@lionsden''), e informazioni sulla macchina locale (niente).
  
  Un'altra caratteristica simpatica \`e che, se chiedete informazioni su un
  utente e non esiste un nome di account che sia precisamente quello che avete
  richiesto, prover\`a a far corrispondere il nome reale con quello che voi gli
  date. Ad esempio, se io digito {\tt finger Greenfield}, mi verr\`a detto che
  per Sam Greenfield esiste un account {\tt sam}.
  
  
  \begin{screen}\begin{verbatim}
  /home/larry# finger sam
  Login: sam                              Name: Sam Greenfield
  Directory: /home/sam                    Shell: /bin/tcsh
  Last login Sun Dec 25 14:47 (EST) on tty2
  No Plan.
  /home/larry# finger greenfie@gauss.rutgers.edu
  [gauss.rutgers.edu]
  Login name: greenfie                    In real life: Greenfie
  Directory: /gauss/u1/greenfie           Shell: /bin/tcsh
  On since Dec 25 15:19:41 on ttyp0 from tiptop-slip-6439
  13 minutes Idle Time
  No unread mail
  Project: You must be joking!
  No Plan.
  /home/larry# finger
  Login    Name                 Tty  Idle  Login Time   Office     Office Phone
  larry    Larry Greenfield      1   3:51  Dec 25 12:50
  larry    Larry Greenfield      p0        Dec 25 12:51
  /home/larry# 
  \end{verbatim}\end{screen}
  
  L'opzione {\tt -s} dice a {\tt finger} di mostrare sempre la forma breve
  (quello che ricevete normalmente quando fate finger su una macchina), e
  l'opzione {\tt -l} invece rende sempre la forma estesa, anche quando fate
  finger su una macchina. L'opzione {\tt -p} dice a {\tt finger} che non
  volete vedere i file {\tt .forward}, {\tt .plan}, o {\tt .project}, e 
  {\tt -m} gli dice che, se chiedete informazioni su un utente, volete le
  informazioni solo se c'\`e un nome di utente corrispondente---e non prover\`a a
  fare corrispondere la stringa che gli date con il nome reale.
  
  \subsection{Plan e progetti}
  
  Ora, cosa sono un {\tt .plan}\ttindex{.plan} e un
  {\tt .project}\ttindex{.project}? Sono file immagazzinati nella home directory
  di un utente che vengono mostrati quando viene fatto finger sull'utente
  stesso. Potete creare i vostri file {\tt .plan} e {\tt .project}---l'unica
  restrizione \`e che viene mostrata solo la prima linea di un file {\tt .project}.
  
  Inoltre, chiunque deve avere privilegi di esecuzione nella vostra home
  directory ({\tt chmod a+x \verb+~+/}) e di lettura sui file
  {\tt .plan} e {\tt .project} ({\tt chmod a+r \verb+~+/.plan
    \verb+~+/.project}).
  
  \section{Usare i sistemi da remoto}
  
  % telnet, rlogin
  
  \begin{command}
    {\tt telnet}\impttindex{telnet} {\sl sistema remoto}
  \end{command}
  
  Il modo principale di usare un sistema UNIX remoto \`e attraverso {\tt
    telnet}.  {\tt telnet} di solito \`e un programma piuttosto semplice da usare:
  
  \begin{screen}\begin{verbatim}
  /home/larry# telnet lionsden
  Trying 128.2.36.41...
  Connected to lionsden
  Escape character is '^]'.
  
  lionsden login: 
  \end{verbatim}\end{screen}
    
  Come potete vedere, dopo che si manda un comando di {\tt telnet},
  ci si presenta un prompt di login per il sistema remoto.
  Posso digitare qualsiasi nome di utente (sempre che io sappia la password!)
  ed usare il sistema remoto quasi come se ci fossi seduto davanti.
  
  Il modo normale di uscire da {\tt telnet} \`e fare {\tt logout} dal sistema
  remoto, ma si pu\`o anche digitare il carattere di Escape, che (come
  nell'esempio qui sopra) \`e di solito \key{Ctrl-]}. In questo modo mi si
  presenta un nuovo prompt: {\tt telnet>}. Posso ora digitare {\tt quit}
  e \ret e la connessione all'altro sistema verr\`a chiusa e si uscir\`a da {\tt
    telnet} (se cambiate idea, premete semplicemente invio e tornerete al
  sistema remoto).
  
  \xwarn Se state usando X, create un nuovo {\tt xterm} per l'altro sistema in
  cui state lavorando. Usate il comando ``{\tt xterm -title
    "lionsden" -e telnet lionsden \&}''\ttindex{xterm}: creer\`a una
  nuova finestra di {\tt xterm} che automaticamente aprir\`a una connessione
   {\tt telnet}
  (se fate spesso qualcosa del genere, vi conviene creare un alias o uno
  script di shell per farlo).
  
  \section{Scambiarsi file}
  
  % ftp
  
  \begin{command}
    {\tt ftp}\impttindex{ftp} {\sl sistema remoto}
  \end{command}
  
  Il modo normale di spedire file tra sistemi UNIX \`e usare {\tt ftp},
  che sta per {\bf file transfer protocol} (protocollo di trasmissione file).  
  Dopo aver avviato il comando {\tt ftp}, vi verr\`a chiesto di fare il login
  nel sistema remoto, pi\`u o meno come per {\tt telnet}. Fatto questo, avrete
  un prompt speciale: un prompt  {\tt ftp}.
  
  Il comando {\tt cd} funziona normalmente, ma sul sistema remoto: cambia la
  directory corrente sull'\emph{altro} sistema. Nello stesso modo, il comando
  {\tt ls} elencher\`a i file sul sistema remoto.
  
  I due comandi principali sono {\tt get} e {\tt put}.  {\tt
    get} trasferir\`a un file dal sistema remoto a quello locale, e {\tt
    put} prender\`a un file dal sistema locale e lo metter\`a in quello remoto.
    Entrambi i comandi agiscono sulla directory locale da cui si \`e avviato {\tt
    ftp} e nella directory corrente nel sistema remoto (che si pu\`o cambiare
  usando {\tt cd}).
  
  Un problema comune con  {\tt ftp} \`e la distinzione tra file di testo e file
  binari. {\tt ftp} \`e un protocollo piuttosto vecchio, e c'erano dei vantaggi
  ad assumere che i file trasferiti fossero file di testo. Alcune versione di 
  {\tt ftp} impostano il trasferimento di file di testo per default, il che
  significa che qualsiasi programma venga trasferito arriva corrotto. Per
  sicurezza, usate il comando {\tt binary} prima di usare {\tt get} o {\tt put}.
  
  Per uscire da {\tt ftp} usate il comando {\tt bye}.
  
  \section{Navigare in rete}
  
  La World Wide Web, o WWW, \`e il servizio pi\`u comunemente usato di Internet.
  Consiste di {\bf pagine}, ognuna associata ad un URL---{\bf uniform resource 
  locator} (\`e un tipo di indirizzo).  Gli URL sono la strana sequenza nella forma
  {\tt http://www.rutgers.edu/}. Le pagine vengono in genere scritte in HTML 
  ({\bf hypertext markup language}).
  \index{URL}\glossary{URL}\glossary{uniform resource locator}
  \glossary{HTML}\glossary{hypertext markup language}
  
  L'HTML permette a chi scrive un documento di collegare determinate parole o
  frasi (o immagini) ad altri documenti in punti qualsiasi del Web. Quando un
  utente legge un documento, pu\`o passare rapidamente ad un altro cliccando su
  una parola chiave, o su un pulsante, e caricarne un altro---forse
  lontano migliaia di chilometri.
  
  \begin{command}
    {\tt netscape} [{\sl url}]
  \end{command}
  
  \xwarn Il pi\`u popolare software di navigazione (browser) per Linux \`e
  {\tt netscape}\ttindex{netscape}, che \`e un browser commerciale venduto (o
  distribuito) dalla Netscape Communications Corporation.  {\tt netscape}
  gira solo sotto X.
  
  {\tt netscape} cerca di essere il pi\`u semplice possibile ed usa l'insieme di
  widget Motif
  per avere un'apparenza molto simile a Microsoft Windows. La strategia di
  base per usare  {\tt netscape} \`e che le parole sottolineate in blu sono
  collegamenti, come anche molte figure (si pu\`o determinare quali figure sono
  collegamenti
  cliccandoci sopra). Cliccando su queste parole con il pulsante sinistro del
  mouse, vi si presenter\`a una nuova pagina.
  
  Linux supporta molti altri browser, incluso il browser web originale,  
  {\tt lynx}.  {\tt lynx} \`e un browser testuale---non mostrer\`a
  nessuna delle immagini a cui \`e di solito associato il Web---ma funzioner\`a
  senza X.
  
  \begin{command}
    {\tt lynx}\impttindex{lynx} [{\sl url}]
  \end{command}
  
  \`E un po' pi\`u difficile imparare ad usare {\tt lynx}, ma in genere
  giocherellare con i tasti freccia vi aiuter\`a. Le frecce in alto e in basso
  vi fanno spostare tra i collegamenti in una data pagina, e la freccia a destra segue
  il collegamento corrente (che \`e evidenziato). La freccia a sinistra ricaricher\`a la
  pagina precedente. Per uscire da {\tt lynx}, premete
  \key{q}.  {\tt lynx} ha molti altri comandi---consultate la man page per
  saperne di pi\`u.
  
  
  % Local Variables: 
  % mode: latex
  % TeX-master: "guide"
  % End: 
