\PassOptionsToPackage{coloremph,colormath,colorhighlight,
lightbackground}{texpower}

\documentclass[letterpaper,landscape,smallheadings,calcdimensions,
display]{powersem}

\usepackage{fixseminar}

\usepackage{url}
\usepackage[latin1]{inputenc}
\usepackage[bookmarksopen,colorlinks,urlcolor=red,
pdfpagemode=FullScreen]{hyperref}
\usepackage{texpower}

\usepackage{graphicx}
\usepackage{soul}

\def\tild{\char'176}

\slidesmag{5}
\slideframe{none}
\setcounter{tocdepth}{2}

\begin{document}


\begin{slide}
  \vspace{5cm}
  \title{Uso della shell: i comandi} 
  \author{Simone Piccardi: \\\url{piccardi@firenze.linux.it}} \maketitle
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large La filosofia progettuale}
  \end{center}
  \vspace{.5cm}
  La filosofia progettuale dei comandi Unix è la specializzazione. Fai
  una cosa sola alla volta e falla bene.  
  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{Ciascun comando deve eseguire, al meglio, un solo
        compito preciso}
    \item \step{La comunicazione è effettuata attraverso le pipe,
        l'output di un comando viene inviato sull'input del successivo}
    \item \step{I comandi sono come i mattoncini del lego, con opportune
        combinazioni si può costruire di tutto}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large Caratteristiche generali}
  \end{center}
  \vspace{.5cm} I comandi hanno alcune caratteristiche generiche che
  sono comuni e si ritrovano su quasi tutti.
  
  \pause
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{Se non specificato esplicitamente, si usa lo standard
        input (cioè la tastiera)}
    \item \step{Se non viene specificato esplicitamente, si usa lo
        standard output (cioè lo schermo).}
    \item \step{Gli errori sono inviati sullo standard error (cioè lo
        schermo)}
    \item \step{I comandi restituiscono un codice (visibile nella
        variabile \texttt{\$?}) che ne descrive lo stato di terminazione
        (successo o errore)}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large Le opzioni}
  \end{center}
  \vspace{.5cm} Tutti i comandi prendono delle opzioni, che permettono
  di modificarne il comportamento, queste sono specificate in una forma
  generale:
  
  \pause
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{forma breve semplice: una lettera singola preceduta da
        un ``\texttt{-}''   (ex. \texttt{-h})}
    \item \step{forma estesa semplice: una parola preceduta da un
        ``\texttt{--}'' (ex. \texttt{--help})}
    \item \step{forma breve con parametro: forma breve seguita da un
        valore (ex.  \texttt{-t 80})}
    \item \step{forma breve con parametro: forma estesa seguita da un
        valore (ex.  \texttt{--tabsize=80})}
    \end{itemize}
  }
\end{slide}


\begin{slide}
  \begin{center}
    \textbf{\Large Opzioni comuni}
  \end{center}
  \vspace{.5cm} Alcune opzioni sono sufficientemente generiche e si
  ritrovano in molti comandi (in particolare in tutti i camndi GNU):
  
  \pause
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{--verbose} (spesso \texttt{-v}) aumenta la
        descrittività dell'output}
    \item \step{\texttt{--help} (spesso \texttt{-h}) stampa un help per
        il comando}
    \item \step{\texttt{--version} stampa la versione del comando}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large Gestione di file e directory}
  \end{center}
  \vspace{.5cm} 
    
  Un primo gruppo di comandi è quello relativo alla gestione del
  filesystem, navigarlo, spostare e creare file e directory.

 \pause
  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{comandi di navigazione: \texttt{cd}, \texttt{pwd},
        \texttt{ls}}
    \item \step{comandi di gestione directory: \texttt{mkdir}, \texttt{rmdir}}
    \item \step{comandi di getsione file: \texttt{cp}, \texttt{mv},
        \texttt{ln}, \texttt{touch}}
    \end{itemize}
  }

\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{pwd} -- Print Work Directory}
  \end{center}
  \vspace{.5cm} 
  
  Ogni processo ha una directory di lavoro corrente, che è la directory
  rispetto alla quale sono risolti i pathname relativi. 
  
  Il comando \texttt{pwd} stampa il pathname della directory di lavoro
  corrente sullo standard output.
  
  \pause
  
  La bash ha una sua versione interna che implementa le opzioni
  \texttt{-P}, che non permette la presenza di link nel pathname, e
  \texttt{-L}, il default, che lo permette.

\end{slide}



\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{cd} -- Change Directory}
  \end{center}
  \vspace{.5cm} 
  
  Il comando \texttt{cd} permette di cambiare la directory di lavoro
  corrente. La sintassi è \texttt{cd pathname} dove \texttt{pathname}
  può essere indicato come pathname assoluto o relativo.
  
  \pause

  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{cd \tild/directory} si sposta usando come base
        la home del chiamante, usando \texttt{\tild user} la home
        dell'utente \texttt{user}.}
        \item \step{\texttt{cd -} torna alla directory precedente}
        \item \step{\texttt{cd} torna alla home}
    \end{itemize}
    
  }
\end{slide}


\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{ls} -- LiSt files}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{ls} mostra le proprietà di una lista di file. Senza
  argomenti opera sulla directory di lavoro corrente, altrimenti sul
  pathname indicato.
  
  \pause
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{% 
    \begin{itemize}
    \item \step{\texttt{ls -l} mostra le proprietà estese, non solo i
        nomi dei file}
    \item \step{\texttt{ls -a} mostra i file \textit{nascosti}, cioè
        quelli che iniziano per ``\texttt{.}''}
    \item \step{\texttt{ls -R} esegue una scansione ricorsiva di tutte
        le directory}
    \end{itemize}
  }    
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{mkdir} MaKe DIRectory}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{mkdir pathname} permette di creare una nuova
  directory \texttt{pathname}. 
  
  \pause
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]
  {%
    \begin{itemize}
    \item \step{\texttt{mkdir pathname} crea la directory specificata
        (che non deve esistere già).}
    \item \step{\texttt{mkdir -p} (\texttt{--parents}) crea le directory
        che eventualmente non esistono in \texttt{pathname}}
    \item \step{\texttt{mkdir -m 0777} (\texttt{--mode=0777}) crea la
        directory coi permessi specificati}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{rmdir} ReMove DIRectory}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{rmdir pathname} rimuove la directory
  \texttt{pathname} che deve essere vuota.
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]
  {% 
    \begin{itemize}
    \item \step{\texttt{mmdir -p} (\texttt{--parents}) rimuove
        ricorsivamente tutte le directory presenti in \texttt{pathname}}
    \item \step{\texttt{mmdir -v} (\texttt{--verbose})}
    \end{itemize}
  }
\end{slide}



\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{cp} -- CoPy file}
  \end{center}
  \vspace{.5cm} 
  
  Se usato come \texttt{cp src dst} copia un file su un altro file, se
  usato \texttt{cp src1 src2 ... dest} copia più file in una directory.
  \pause
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]
  {%
    \begin{itemize}
    \item \step{\texttt{cp -p} preserva gli attributi dei file (tempi,
    permessi, proprietari)} 
    \item \step{\texttt{cp -d} copia i link simbolici come tali} 
    \item \step{\texttt{cp -R} copia ricorsivamente i contenuti di una
        directory}
    \item \step{\texttt{cp -l} crea dei link invece di copiare}
    \end{itemize}
  }
\end{slide}


\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{mv} -- MoVe file}
  \end{center}
  \vspace{.5cm} 
  
  Se usato come \texttt{mv src dst} cambia nome di un file o lo sposta
  in una directory, se usato \texttt{mv src1 src2 ... dest} sposta più
  file in una directory.  
  
  \pause
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]
  {%
    \begin{itemize}
    \item \step{\texttt{-i} chiede conferma prima di sovrascrivere la
        destinazione}
    \item \step{\texttt{-f} non avvisa se sovrascrive la destinazione}
    \item \step{\texttt{-u} esegue lo spostamento solo se il file è piu
        recente della destinazione}
    \end{itemize}
  }
\end{slide}


\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{ln} -- LiNk file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{ln src dst} crea il file \texttt{dst} come link al
  file \texttt{src}. 

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
      \item \step{\texttt{-s} crea un link simbolico}
      \item \step{\texttt{-f} sovrascrive \texttt{dst} se esiste}
      \item \step{\texttt{-d} crea un link a una directory (non funziona
          su Linux)}
    \end{itemize}
  }
\end{slide}


\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{touch} -- TOUCH file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{touch filename} aggiorna i tempo di ultimo accesso e
  modifica di un file (creandolo vuoto, se non esiste).

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
      \item \step{\texttt{-a} cambia solo il tempo di ultimo accesso}
      \item \step{\texttt{-m} cambia solo il tempo di ultima modifica}
      \item \step{\texttt{-d} (\texttt{--date=string}) usa la data
      \texttt{string}}
      \item \step{\texttt{-r} (\texttt{--reference=file}) usa i tempi
      del file \texttt{file}}
    \end{itemize}
  }
\end{slide}


\begin{slide}
  \begin{center}
    \textbf{\Large Gestione del contenuto dei file}
  \end{center}
  \vspace{.5cm}
  
  Un secondo gruppo di comandi è quello relativo alla visualizzazione e
  al trattamento del contenuto dei file.

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{comandi di visualizzazione: \texttt{cat}, \texttt{od}}
    \item \step{selezione di parti: \texttt{tail}, \texttt{head}}
    \item \step{ordinamento: \texttt{sort}, \texttt{tac}, \texttt{uniq}}
    \item \step{conversione: \texttt{tr}, \texttt{nl}, \texttt{paste},
        \texttt{expand}}
    \item \step{ricerca e selezione: \texttt{grep}, \texttt{cut},
        \texttt{comm}}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{cat} -- ConcATenate file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{cat file1 file2 ...} invia in sequenza sullo
  standard output il contenuto dei file specificati. 

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} numera le linee}
    \item \step{\texttt{-E} mostra la fine riga con \texttt{\$}} 
    \item \step{\texttt{-v} visualizza i caratteri non stampabili}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{od} -- Octal Dump}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{od file} mostra sullo schermo il contenuto di un
  file in forma numerica (ottale, esadecimale, ecc.).

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-j} \texttt{--skip-bytes=BYTES} salta i primi
        \texttt{BYTES} byte}
    \item \step{\texttt{-N} \texttt{--read-bytes=BYTES} legge solo
        \texttt{BYTES} byte}
    \item \step{\texttt{-t} \texttt{-format=TYPE} seleziona un formato,
        sono possibili:
      \begin{itemize}
        \item \texttt{-b} (\texttt{-t oC}) byte ottali
        \item \texttt{-h} (\texttt{-t x2}) short esadecimali
        \item per gli altri vedi \texttt{man od}          
      \end{itemize}}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{tail} -- TAIL file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{tail file1 file2} mostra la parte finale di ciascun
  file (di default le ultime dieci righe).

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} (\texttt{--lines=NUMBER}) mostra
        \texttt{NUMBER} righe}
    \item \step{\texttt{-c} (\texttt{--bytes=SIZE}) mostra \texttt{SIZE}
        byte}
    \item \step{\texttt{-q} non stampa l'intestazione col nome del file}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{head} -- HEAD file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{tail file} mostra la parte iniziale di un file (di
  default le prime dieci righe).

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} (\texttt{--lines=NUMBER}) mostra
        \texttt{NUMBER} righe}
    \item \step{\texttt{-c} (\texttt{--bytes=SIZE}) mostra \texttt{SIZE}
        byte}
    \item \step{\texttt{-q} non stampa l'intestazione col nome del file}
    \end{itemize}
  }
\end{slide}


\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{sort} -- SORT file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{sort file} effettua un riordinamento delle righe di
  un file.

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-f} ignora la differenza fra maiuscole e minuscole}
    \item \step{\texttt{-d} considera solo spazi e caratteri alfanumerici}
    \item \step{\texttt{-r} inverte l'ordinamento}
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{tac} -- reverse ConcATenate}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{tac file} stampa le righe del file \texttt{file} in
  ordine inverso.

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-s} (\texttt{--separator=STRING}) usa la stringa
        \texttt{STRING} come separatore invece dell'a-capo}
    \item \step{\texttt{-b} inserisce il separatore all'inizio invece
        che alla fine della linea}
    \item \step{\texttt{-r} interpreta il separatore come espressione
        regolare}
     \end{itemize}
 }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{uniq} -- UNIQue file line}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{uniq file} .

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} }
    \item \step{\texttt{-c} }
    \item \step{\texttt{-q} }
    \end{itemize}
 }
\end{slide}


\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{tr} -- TRanslate file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{tr file} .

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} }
    \item \step{\texttt{-c} }
    \item \step{\texttt{-q} }
    \end{itemize}
  }
\end{slide}



\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{nl} -- Number Lines}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{nl file} .

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} }
    \item \step{\texttt{-c} }
    \item \step{\texttt{-q} }
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{paste} -- PASTE file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{tr file} .

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} }
    \item \step{\texttt{-c} }
    \item \step{\texttt{-q} }
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{expand} -- EXPAND file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{expand file} .

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} }
    \item \step{\texttt{-c} }
    \item \step{\texttt{-q} }
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{grep} -- Ricerca in un file}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{grep file} .

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} }
    \item \step{\texttt{-c} }
    \item \step{\texttt{-q} }
    \end{itemize}
  }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{cut} -- CUT sections}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{cut file} .

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} }
    \item \step{\texttt{-c} }
    \item \step{\texttt{-q} }
    \end{itemize}
 }
\end{slide}

\begin{slide}
  \begin{center}
    \textbf{\Large \texttt{comm} -- Compare files}
  \end{center}
  \vspace{.5cm}
  
  Il comando \texttt{tr file} .

  \pause  
  \liststepwise[\let\hidestepcontents=\hidedimmed\let\activatestep=\highlightenhanced]{%
    \begin{itemize}
    \item \step{\texttt{-n} }
    \item \step{\texttt{-c} }
    \item \step{\texttt{-q} }
    \end{itemize}
  }
\end{slide}




\end{document}

%%% mode: latex
% Local Variables: 
% fill-column: 72
% TeX-master: t
% End: 
