% Linux Guida dell'Utente                   -*- TeX -*-
  % commands.tex
  % Copyright (c) 1993, 1994 by Larry Greenfield
  %
  % Traduzione di Eugenia Franzoni, 1997
  %
  % Questo file e' liberamente distribuibile, ma si deve preservare questo
  % avviso di copyright su tutte le copie, e deve essere distribuito solo come
  % parte di "Linux Guida dell'Utente". L'uso di questo file e'
  % protetto dal copyright dell'intero documento, nel file "copyright.tex".
  
  
  % Titolo del capitolo
  \chapter{Piccoli programmi potenti}
  \label{commands-chapter}
  
  % I need a neato quote-type thing here.
  % by the way, if anyone can figure out a better way to format this so
  % that the command titles stand out better (and maybe have a short
  % description next to them) I'd appreciate it
  
  
  \section{La potenza di \unix}
  
  La potenza di UNIX \`e nascosta in piccoli comandi che non sembrano molto
  utili se usati da soli, ma che combinati con altri comandi
  (direttamente o indirettamente) rendono il sistema pi\`u potente e
  flessibile
  della maggior parte degli altri sistemi operativi. I comandi di cui
  vi parler\`o in questo
  capitolo sono {\tt sort}, {\tt grep}, {\tt more}, {\tt cat}, {\tt
  wc}, {\tt spell}, {\tt diff}, {\tt head} e {\tt tail}.
  Sfortunatamente quello che fanno non si capisce immediatamente dai
  loro nomi.
  
  Vediamo ogni programma separatamente e poi alcuni esempi di come usarli
  insieme.\footnote{Notare che il breve sommario dei comandi alla fine di
  questo capitolo non \`e completo. Consultate le pagine man dei comandi se
  volete sapere tutte le opzioni.}
  
  
  \section{Operazioni sui file}
  
  In aggiunta ai comandi come {\tt cd}, {\tt mv} e {\tt rm} che avete imparato
  nel capitolo~\ref{shell-chapter}, ci sono altri comandi che operano sui file
  ma non sui dati in essi contenuti. Questi sono, tra gli altri, {\tt
  touch}, {\tt chmod}, {\tt
  du} e {\tt df}. Tutti questi comandi non si preoccupano di cosa c'\`e {\em
  nel\/} file---cambiano solamente alcune delle cose che UNIX ricorda
  relativamente al file.
  
  Ecco alcuni degli elementi che vengono manipolati da questi comandi: 
  
  \begin{itemize}
  \item Il time stamp\glossary{time stamp}. Ogni file ha tre date
  ad esso associate:\footnote{I vecchi filesystem in Linux memorizzavano 
  soltanto una
  data,
  in quanto derivavano da Minix. Se avete uno di questi filesystem,
  alcune delle
  informazioni potrebbero non essere disponibili---le operazioni
  saranno in genere le stesse.}
  la data di creazione (quando \`e stato
  creato il file), la data di ultima modifica (quando il file ha sub\`{\i}to
  l'ultimo aggiornamento) e la data dell'ultimo accesso (quando il file \`e
  stato letto l'ultima volta).
  
  \item Il proprietario. Ogni file in UNIX \`e di propriet\`a di un utente del
  sistema.
  
  \item Il gruppo. Ogni file ha anche un gruppo di utenti a cui \`e associato: quello
  pi\`u comune per i file utente \`e chiamato {\tt users}, ed \`e
  generalmente condiviso da tutti gli account utente del sistema.
  
  \item I permessi\index{permessi}. Ogni file ha permessi (a volte chiamati
  ``privilegi'') associati ad esso, che comunicano a UNIX chi pu\`o
  accedere a
  quel file o modificarlo o, in caso di un programma, eseguirlo. Ognuno
  di questi permessi
  pu\`o essere impostato separatamente per il proprietario, il gruppo e tutti
  gli altri utenti.
  \end{itemize}
  
  
  \begin{quote}
    {\tt touch}\impttindex{touch} {\sl file1 file2 \ldots fileN}
  \end{quote}
  
  {\tt touch} aggiorna i time stamp dei file elencati nella linea di comando
  all'ora corrente. Se un file non esiste, {\tt touch} lo creer\`a vuoto. \`E
  anche possibile specificare la data che {\tt touch} deve impostare per i
  file---consultate la pagina man di {\tt touch}.
  
  
  \begin{quote}
  {\tt chmod}\impttindex{chmod} [-Rfv] {\sl modalit\`a} {\sl file1 file2 \ldots fileN}
  \end{quote}
  
  \bindex{file!permessi} Il comando usato per cambiare i permessi di un
  file \`e
  {\tt chmod}, abbreviazione di {\bf ch}ange {\bf mod}e. Prima di
  andare a spiegare come usare il comando, parliamo di quali permessi ci sono
  in \unix: ogni file ha un gruppo di permessi associati ad esso, che
  dicono a UNIX se il file pu\`o essere letto, modificato o eseguito
  come programma (nel prossimo paragrafo parler\`o di come l'utente
  li pu\`o impostare.
  Ogni programma eseguito da un utente ha gli
  stessi permessi dell'utente stesso; questo pu\`o essere un problema di
  sicurezza se
  non sapete cosa fa un particolare programma).
  
  UNIX riconosce tre tipi di persone: prima il proprietario del
  file (e la persona autorizzata ad usare {\tt chmod} su quel file).
  Secondo, il gruppo. Il gruppo
  di molti dei vostri file potrebbe essere ``users'', che indica gli
  utenti
  normali del sistema (per vedere il gruppo di un particolare file, usare
  {\tt ls -l {\sl file}}). Poi c'\`e chiunque altro non sia il
  proprietario e
  non sia membro del gruppo, appropriatamente chiamato ``others''
  (``altri'').
  
  Cos\`{\i} un file potrebbe avere i permessi di lettura e scrittura per il
  proprietario, di lettura per il gruppo e nessun permesso per gli
  altri. Oppure,
  per altre ragioni, un file potrebbe essere leggibile/scrivibile per
  il
  gruppo e gli altri, ma {\em non\/} per il proprietario!
  
  Proviamo ad usare {\tt chmod} per cambiare un po' di permessi. Prima, create
  un nuovo file usando {\tt cat}, {\tt emacs} o qualsiasi altro
  programma. Normalmente dovreste riuscire a leggere e scrivere questo
  file (i permessi dati agli altri utenti variano a seconda di come \`e
  impostato il sistema e il vostro account). Assicuratevi di poter leggere il
  file usando {\tt cat}. Adesso proviamo a togliere il vostro permesso di
  lettura usando {\tt chmod u-r {\sl nomefile}} (il parametro {\tt u-r}
  si legge ``user meno read'', cio\`e toglie all'utente -- user -- il
  permesso di lettura -- read); se adesso
  tentate di leggere
  il file, otterrete l'errore di {\tt Permission denied} (accesso negato)!
  Aggiungete il permesso di lettura con {\tt chmod u+r {\sl nomefile}}.
  \eindex{file!permessi}\index{file!privilegi|see{file, permessi}}
  \index{sicurezza|see{file, permessi}}
  
  I permessi delle directory\index{directory!permessi} usano la stessa
  struttura: lettura, scrittura ed esecuzione, ma agiscono un po'
  diversamente. Il permesso di lettura consente all'utente (o gruppo o altri)
  di leggere la directory---cio\`e di elencare i nomi dei file. Il
  permesso di scrittura
  consente all'utente (o gruppo o altri) di aggiungere o rimuovere file. Il
  permesso di esecuzione consente all'utente di accedere ai file della
  directory o di qualsiasi sottodirectory (se un utente non ha il permesso di
  esecuzione in una directory, non pu\`o farci neanche {\tt cd}!).
  
  Per usare {\tt chmod}, sostituite {\sl modalit\`a\/} con quello che volete
  modificare, {\bf u}ser (proprietario), {\bf g}roup (gruppo), {\bf o}ther
  (altri) o {\bf a}ll (tutti) e cosa farci (cio\`e usate il simbolo {\tt
  +} per
  aggiungere il permesso, il simbolo {\tt -} per toglierlo oppure il simbolo
  {\tt =} per specificare esattamente i permessi da assegnare). I possibili
  permessi da aggiungere sono {\bf r}ead (lettura), {\bf w}rite (scrittura) ed
  e{\bf x}ecute (esecuzione).
  
  L'opzione {\tt R} di {\tt chmod} cambia i permessi di una directory e di
  tutti i file e sottodirectory di quella directory (`R' sta per
  ricorsiva). L'opzione
  {\tt f} forza {\tt chmod} a provare a cambiare i permessi, anche se
  l'utente non \`e il proprietario del file (se {\tt chmod} ha l'opzione {\tt
  f}, non stamper\`a messaggi di errore quando fallisce nel tentativo di
  modificare i permessi di un file). L'opzione 
  {\tt v} rende {\tt chmod}
  prolisso---spiegher\`a tutto quello che sta facendo.
  
  
  \section{Statistiche del sistema}
  
  I comandi di questa sezione mostreranno statistiche sul sistema operativo o
  su una sua parte.
  
  \begin{quote}
    {\tt du}\impttindex{du} [-abs] [{\sl percorso1 percorso2 \ldots percorsoN}]
  \end{quote}
  
  {\tt du} sta per {\bf d}isk {\bf u}sage (utilizzo del disco), e
  controlla la quantit\`a di
  spazio disco che una data directory {\em e tutte le sue
  sottodirectory}\
  occupano nel disco. {\tt du} da solo rende una lista di quanto spazio
  usano le sottodirectory della directory corrente, e riporta alla fine quanto
  spazio sta usando la directory corrente (pi\`u tutte le sue
  sottodirectory gi\`a considerate). Se gli
  date alcuni parametri, 
  conter\`a lo spazio usato da questi
  file o directory al posto della directory corrente.
  
  L'opzione {\tt a} mostra il conteggio per i file 
  insieme alle directory.
  L'opzione {\tt b} mostra i totali in byte invece che in kilobyte
  (1024
  caratteri). Un byte \`e equivalente ad una lettera in un documento di testo.
  L'opzione {\tt s} mostra solo le directory elencate nella riga di
  comando e {\em
  non\/} le loro sottodirectory.
  
  \begin{quote}
    {\tt df}\impttindex{df}
  \end{quote}
  
  {\tt df} sta per ``disk filling'' (``riempimento del disco''):
  riassume la quantit\`a di spazio disco usato. 
  Per ogni filesystem (ricordatevi, si hanno diversi filesystem sia su
  diverse unit\`a disco sia su diverse partizioni) mostra lo spazio disco
  totale, lo spazio usato, lo spazio disponibile e la
  capacit\`a del filesystem usato.
  
  Una strana cosa che si pu\`o incontrare \`e che \`e possibile che la
  capacit\`a superi il
  100\%, oppure che lo spazio usato pi\`u quello disponibile non sia
  uguale
  allo spazio totale. Questo perch\'e UNIX riserva dello spazio su ogni
  filesystem
  per {\tt root}. In questo modo, se un utente accidentalmente
  riempie il disco, il sistema 
  avr\`a ancora una zona per continuare a funzionare.
  
  Per la maggior parte delle persone, {\tt df} non ha nessuna
  opzione utile.
  
  \begin{quote}
    {\tt uptime}\impttindex{uptime}
  \end{quote}
  
  Il programma {\tt uptime} fa esattamente quello che si potrebbe
  pensare: stampa il tempo trascorso da quando il sistema
  \`e in funzione---il tempo dall'ultimo avvio di \unix.
  
  {\tt uptime} d\`a anche l'ora corrente e il carico medio,\index{carico medio}
   che \`e 
  il numero medio di job eseguiti in un
  certo periodo di tempo. {\tt uptime} mostra il carico medio dell'ultimo
  minuto, di cinque minuti e di dieci minuti. Un carico medio vicino
  allo zero
  indica che il sistema \`e relativamente scarico, uno vicino all'unit\`a
  indica che il sistema \`e utilizzato pienamente ma non
  ancora
  sovraccarico. Alti carichi medi sono il risultato di parecchi programmi in
  esecuzione simultaneamente.
  
  Sorprendentemente, {\tt uptime} \`e uno dei pochi programmi UNIX che sono
  {\em senza\/} opzioni!
  
  \begin{quote}
    {\tt who}\impttindex{who}
  \end{quote}
  
  {\tt who} mostra gli utenti collegati al sistema e quando si sono loggati.
  Con i parametri {\tt am i} (come in: {\tt who am i}, ``chi sono
  io?''), mostra l'utente
  corrente.
  
  \begin{quote}
    {\tt w}\impttindex{w} [-f] [{\sl nome-utente}]
  \end{quote}
  
  Il programma {\tt w} mostra gli utenti 
  collegati al sistema e
  quello che stanno facendo (semplicemente combina le funzionalit\`a di
  {\tt uptime} e {\tt who}. L'intestazione di {\tt w} \`e esattamente la stessa
  di {\tt uptime}, e ogni linea mostra un utente, quando si \`e loggato (e per
  quanto tempo \`e disoccupato -- idle). {\tt JCPU} \`e il totale del tempo
  di
  CPU usato da quell'utente, mentre {\tt PCPU} \`e il tempo totale di CPU 
  usato da quello che sta facendo in quel momento.
  
  Con l'opzione {\tt f}, {\tt w} mostra il sistema remoto da cui
  sono collegati gli utenti, se c'\`e. I parametri opzionali restringono
  la visualizzazione
  di {\tt w} al solo utente nominato.
  
  
  \section{Cosa c'\`e nel file?}
  
  Ci sono due comandi importanti di UNIX che servono ad elencare file: 
  {\tt cat} e
  {\tt more}. Ho parlato di entrambi nel capitolo~\ref{shell2-chapter}.
  
  \begin{quote}
  {\tt cat}\impttindex{cat} [-nA] [{\sl file1 file2 \ldots fileN}]
  \end{quote}
  
  {\tt cat} non \`e un comando amichevole---non aspetta che voi leggiate il
  file, ed \`e spesso usato in congiunzione con le pipe; ha per\`o
  alcune utili opzioni da linea di comando: per esempio, {\tt n} numera
  tutte le linee nel file, e {\tt A} mostra i caratteri di controllo come
  caratteri normali invece di mostrare (forse) strane combinazioni
  sullo schermo
  (ricordatevi, per vedere queste strane e forse ``poco utili'' opzioni, usate
  il comando {\tt man}: {\tt man cat}). {\tt cat} accetta input dallo stdin se
  non viene specificato nessun file nella linea di comando.
  
  \begin{quote}
  {\tt more}\impttindex{more} [-l] [+{\sl numero-linea}] [{\sl file1 file2 \ldots fileN}]
  \end{quote}
  
  {\tt more} \`e molto pi\`u utile, ed \`e il comando che preferirete usare quando
  dovrete leggere un file di testo ASCII\@. L'unica opzione interessante \`e {\tt
  l}, che dice a {\tt more} che non siete interessati a trattare il
  carattere \key{Ctrl-L} come carattere di ``nuova pagina''. {\tt more}
  partir\`a da uno specifico numero di linea.
  
  Siccome {\tt more} \`e un comando interattivo, ho riassunto i principali
  comandi da dargli:
  
  \begin{description}
  \item [\key{Barra spaziatrice}] Mostra la prossima schermata di
  testo.
  \item [\key{d}] Fa scorrere
  lo schermo di 11 linee, o circa met\`a di uno
  schermo normale (25 linee).
  \item [\key{/}] Cerca un'espressione regolare. Siccome
  un'espressione regolare pu\`o essere abbastanza complicata, potete
  digitare una stringa di
  testo da ricercare. Per esempio, {\tt /rana} \ret\ ricerca la prossima
  parola ``rana'' nel file corrente. Una barra seguita da \ret\
  ripete la ricerca dell'ultima espressione.
  \item [\key{n}] Anche questo ricerca la successiva posizione
  dell'espressione.
  \item [\key{:}\key{n}] Se specificate pi\`u di un file nella linea di comando,
  vi sposter\`a nel prossimo file.
  \item [\key{:}\key{p}] Vi sposter\`a nel file precedente.
  \item [\key{q}] Esce da {\tt more}.
  \end{description}
  
  \begin{quote}
    {\tt head}\impttindex{head} [-{\sl linee}] [{\sl file1 file2 \ldots fileN}]
  \end{quote}
  
  {\tt head} mostra le prime dieci linee dei file elencati, o le prime dieci
  linee dello stdin se non \`e specificato nessun file nella linea di comando.
  Ogni opzione numerica viene interpretata come il numero di linee da
  stampare, cos\`i
  {\tt head -15 pippo} stampa le prime quindici linee del file {\tt pippo}.
  
  \begin{quote}
    {\tt tail}\impttindex{tail} [-{\sl linee}] [{\sl file1 file2 \ldots fileN}]
  \end{quote}
  
  Come {\tt head}, {\tt tail} mostra solo una frazione del file. Naturalmente,
  {\tt tail} mostra la fine del file, o le ultime dieci linee che arrivano
  dallo stdin. Anche {\tt tail} accetta opzioni che specificano il numero di
  linee.
  
  \begin{quote}
    {\tt file} [{\sl file1 file2 \ldots fileN}]
  \end{quote}
  
  Il comando {\tt file} prova ad identificare in quale formato \`e scritto un
  particolare file. 
  Dato che non tutti i file hanno estensioni o altri
  marcatori che li identificano, il comando {\tt file} esegue dei controlli
  rudimentali per cercare di indovinare cosa contengono.
  
  Fare attenzione, comunque, perch\'e \`e possibile che {\tt file} faccia 
  un'identificazione sbagliata.
  
  
  \section{Comandi di elaborazione}
  
  Questa sezione discute i comandi che alterano un file, ci
  eseguono una determinata
  operazione o mostrano statistiche su di esso.
  
  %\begin{quote}
  %  {\tt sort}\impttindex{sort} [
  %\end{quote}
  % should sort be discussed here, or is it complicated enough to merit
  % its own section in another chapter?
  
  \begin{quote}
    {\tt grep}\impttindex{grep} [-nvwx] [-{\sl numero\/}] {\sl
      espressione} [{\sl file1 file2 \ldots fileN\/}]
  \end{quote}
  
  Uno dei comandi pi\`u utili di UNIX \`e {\tt grep}, il {\bf
  g}eneralized {\bf
  r}egular {\bf e}xpression {\bf p}arser (analizzatore generalizzato di
  espressioni regolari). \`E un nome buffo per uno strumento che
  ricerca del testo in un file solamente. Il modo pi\`u semplice per usare {\tt grep}
  \`e questo:
  
  \begin{screen}\begin{verbatim}
  /home/larry$ cat animali
  Gli animali sono creature molto interessanti. Il mio animale preferito
  e' la tigre, un terrificante animale con grandi denti.
  Mi piace anche il leone---non e' di certo un erbivoro! 
  /home/larry$ grep igre animali
  e' la tigre, un terrificante animale con grandi denti.
  /home/larry$
  \end{verbatim}\end{screen}
  
  Uno svantaggio di questo comando \`e che, sebbene mostri tutte le linee
  contenenti una
  parola, non dice dove cercarla nel file---non d\`a nessun numero di
  riga: pu\`o essere utile
  secondo quello che state facendo. Per
  esempio, se state cercando gli errori nell'output di un programma, potete
  provare {\tt a.out | grep error}, dove {\tt a.out} \`e il nome del vostro
  programma.
  
  Se siete interessati alla posizione delle corrispondenze, usate l'opzione
  {\tt n} con {\tt grep} per dirgli di stampare i numeri di riga. Usate
  l'opzione {\tt v} se volete vedere tutte le linee che {\em non\/} contengono
  l'espressione specificata.
  
  Un'altra caratteristica di {\tt grep} \`e che verifica solo parti di
  una
  parola, come nel mio esempio precendente {\tt igre} verifica {\tt
  tigre}.
  Per comunicare a {\tt grep} di verificare solo parole intere, usate
  l'opzione {\tt w}; l'opzione {\tt x} comunica a {\tt grep} di controllare le
  corrispondenze di linee intere.
  
  Se non specificate nessun file, {\tt grep} esamina lo stdin.
  
  \begin{quote}
    {\tt wc}\impttindex{wc} [-clw] [{\sl file1 file2 \ldots fileN\/}]
  \end{quote}
  
  {\tt wc} sta per {\bf w}ord {\bf c}ount (conta parole). 
  Conta semplicemente il numero di parole, linee e caratteri nel/nei
  file. Se non viene
  specificato nessun file nella linea di comando, opera sullo stdin.
  
  I tre parametri, {\tt clw}, stanno rispettivamente per {\bf c}aratteri, {\bf
  l}inee e {\bf w}ord (parole), e comunicano a {\tt wc} quali dei tre
  conteggiare. Cos\`{\i}, {\tt wc -cw} conta il numero di caratteri e di parole, ma
  non il numero di linee. Per default, {\tt wc} conta tutto---parole,
  linee e caratteri.
  
  Un uso semplice di {\tt wc} \`e trovare quanti file sono presenti in una
  directory: {\tt ls | wc -w}. Se volete vedere quanti file finiscono
  {\tt .c}, provate {\tt ls *.c | wc -w}.
  
  
  \begin{quote}
    {\tt spell}\impttindex{spell} [{\sl file1 file2 \ldots fileN\/}]
  \end{quote}
  
  {\tt spell} \`e un comando UNIX di
  controllo ortografico molto semplice, generalmente
  per l'inglese americano.\footnote{Anche se ci sono versioni per
  parecchie altre
  lingue europee (n.d.t.\ anche per l'italiano), la copia nella vostra
  macchina Linux potrebbe essere per
  l'inglese americano e solamente per questo. Mi dispiace.} {\tt spell}
  \`e un
  filtro, come molti dei programmi di cui abbiamo parlato, che legge un file
  di testo ASCII e scrive tutte le parole che considera errate. {\tt spell}
  opera sui file elencati nella linea di comando, o, se non ne vengono
  dati, sullo stdin.
  
  Probabilmente nella vostra macchina \`e disponibile anche 
  un programma di ortografia pi\`u sofisticato, {\tt
  ispell}\ttindex{ispell}.
  {\tt ispell} offre la
  possibilit\`a di correggere l'ortografia ed ha una simpatica
  interfaccia a
  men\`u se viene specificato un file nella linea di comando, oppure
  funziona
  come filtro se non viene specificato nessun file.
  
  Anche se operare con {\tt ispell} dovrebbe essere abbastanza banale,
  consultate la pagina man se avete bisogno di maggiori informazioni.
  
  \begin{quote}
    {\tt cmp}\impttindex{cmp} {\sl file1} [{\sl file2\/}]
  \end{quote}
  
  {\tt cmp} ``{\bf c}o{\bf mp}ares'' (confronta) due file. Il primo
  deve essere
  specificato nella linea di comando, mentre il secondo pu\`o essere 
  specificato nella linea di comando o letto dallo standard input. {\tt cmp}
  \`e molto semplice, e dice solamente dove i due file cominciano a non
  essere identici.
  
  \begin{quote}
    {\tt diff}\impttindex{diff} {\sl file1 file2}
  \end{quote}
  
  Uno dei comandi standard di UNIX pi\`u complicati \`e chiamato
  {\tt diff}.
  La versione GNU\index{Progetto GNU} di {\tt diff} ha pi\`u di venti
  opzioni possibili da linea di comando!
  \`E una versione di {\tt cmp} molto pi\`u potente e mostra quali sono le
  differenze invece di comunicare semplicemente dove si trova la prima.
  
  Dato che parlare in modo approfondito di {\tt diff} esula dallo scopo
  di
  questo libro, ne mostrer\`o soltanto le operazioni di base. In
  breve, {\tt diff} 
  accetta due parametri (i file da confrontare) e mostra le
  differenze tra questi linea per linea. Per esempio:
  
  \begin{screen}\begin{verbatim}
  /home/larry$ cat animali
  Gli animali sono creature molto interessanti. Il mio animale preferito
  e' la tigre, un terrificante animale con grandi denti.
  Mi piace anche il leone---non e' di certo un erbivoro! 
  /home/larry$ cp animali pippo
  /home/larry$ diff animali pippo
  /home/larry$ cat cani
  Gli animali sono creature molto nteressanti. Il mio animale preferito
  
  e' la tigre, un terrificante animale con grandi denti.
  Mi piace anche   il leone---non e' di certo un erbivoro! 
  /home/larry$ diff animali cani
  1c1,2
  < Gli animali sono creature molto interessanti. Il mio animale preferito
  ---
  > Gli animali sono creature molto nteressanti. Il mio animale preferito
  > 
  3c4
  < Mi piace anche il leone---non e' di certo un erbivoro!
  ---
  > Mi piace anche   il leone---non e' di certo un erbivoro!
  /home/larry$
  \end{verbatim}\end{screen}
  
  Come potete vedere, {\tt diff} non stampa niente quando i due file sono
  identici; quando confronto due file diversi, ho
  un'intestazione di
  sezione, {\tt 1c1,2}, che indica che stava confrontando la linea 1
  del file
  di sinistra, {\tt animali}, con le linee 1--2 di {\tt cani} e quali
  differenze ha notato; quindi confronta la linea 3 di {\tt animali} con la
  linea 4 di {\tt cani}. Mentre pu\`o sembrare strano a prima vista confrontare
  diversi numeri di riga, \`e molto pi\`u efficiente di elencare ogni singola
  linea se c'\`e soltanto un ritorno a capo in pi\`u all'inizio di un file.
  
  \begin{command}
    {\tt gzip}\impttindex{gzip} [-v\#] [{\sl file1 file2 \ldots
  fileN}]\\
    {\tt gunzip}\impttindex{gunzip} [-v] [{\sl file1 file2 \ldots
      fileN}]\\
    {\tt zcat}\impttindex{zcat} [{\sl file1 file2 \ldots fileN}]
  \end{command}
   
  Questi tre programmi vengono usati per
  comprimere\glossary{compressione} e
  decomprimere\glossary{decompressione} dati. {\tt gzip}, o GNU zip, \`e
  il programma che legge i file originali e rende file pi\`u piccoli.
  {\tt gzip} cancella i file specificati dalla linea di comando e li
  sostituisce con file che hanno nome identico ma con un ``{\tt .gz}''
  finale.
  
  \begin{command}
    {\tt tr}\impttindex{tt} {\sl stringa1} {\sl stringa2}
  \end{command}
   
  Il comando di ``traduzione di caratteri'' opera sullo
  standard input---non accetta un nome di file come parametro; invece, i suoi
  due parametri sono stringhe arbitrarie. Sostituisce tutte le stringhe
  uguali a {\sl stringa1\/} nell'input con {\sl stringa2}. In aggiunta a
  dei comandi semplici come 
  {\tt tr pippo pluto}, {\tt tr} accetta anche comandi pi\`u complicati.
  Ad esempio, ecco un modo veloce di convertire i caratteri minuscoli
  in caratteri maiuscoli:
   
  \begin{screen}\begin{verbatim}
  /home/larry# tr [:lower:] [:upper:]
  questa e' una frase STRANA.
  QUESTA E' UNA FRASE STRANA.
  \end{verbatim}\end{screen}
   
  {\tt tr} \`e abbastanza complesso e di solito viene usato in piccoli
  programmi di shell.
  
  % Local Variables:
  % mode: latex
  % TeX-master: "guide"
  % TeX-master: "guide"
  % End:
