\documentclass{article}
\usepackage[T1] {fontenc}
\usepackage[italian]{babel}

% Per i link nell'indice
\usepackage{hyperref}

\title{OpenLab Virtual 2021\\GNU/Linux Intro, Tips \& Tricks}
\author{Matteo Savatteri}

\begin{document}
\maketitle

\tableofcontents

\section{Introduzione}
\begin{itemize}
\item Benvenuto e ringraziamenti ad admin e pubblico
\item Chi sono?
\item Cos'è LCM?
\item Regole conferenza: come interagire
\item Outline e obbiettivi conferenza:
    \begin{itemize}
    \item Storia di \texttt{GNU/Linux}
    \item \texttt{GNU/Linux} per un fisico
    \item \texttt{GNU/Linux}: nozioni e strumenti importanti
    \item Testimonianze ospiti + domande 
    \end{itemize}
\end{itemize}

\section{Storia di \texttt{GNU/Linux}}
\begin{itemize}
\item \texttt{UNIX}
      \footnote{Video \emph{AT\&T Archives} introduzione a \texttt{UNIX} a
                \url{https://youtu.be/tc4ROCJYbm0}
      }
      (\emph{Uniplexed Information and Computing Service}, "\emph{eunuchs}"),
      '69, Ken Thompson, Dennis Ritchie, Brian Kernighan \& Co., Assembly:
    \begin{itemize}
    \item Filosofia di UNIX:
          \emph{
                "This is the Unix philosophy: Write programs that do one thing
                and do it well. Write programs to work together. Write programs
                to handle text streams, because that is a universal interface."
          }
          - Doug McIlroy
    \item AT\&T, Bell Labs
    \item '69-73, sviluppo del C, K.T. \& D.R. $\rightarrow$ Portabilità
    \item Distribuzione università (es. Berkeley, BSD) $\rightarrow$ Codice aperto
    \item '84 commercializzazione $\rightarrow$ Codice chiuso!
    \item Standard:
        \begin{itemize}
        \item '85 POSIX (Portable Operating System Interface for UNIX), IEEE
        \item '98 SUS (Single UNIX Specification), The Open Group
        \end{itemize}
    \end{itemize}
\item GNU (\emph{GNU's Not UNIX}), '84, Richard Stallman:
    \begin{itemize}
    \item Sistema operativo Libero (cosa significa?)
          \footnote{Per approfondire vai a https://www.fsf.org/it}
          clone di \texttt{UNIX}
    \item '90 Sviluppo di tutte le componenti del sistema
    \item Esempi software GNU: \texttt{gcc}, \texttt{glibc}, \texttt{bash},
          \texttt{coreutils}, \texttt{GNOME}, etc.
    \item '90 inizia sviluppo \texttt{GNU Hurd}
    \end{itemize}
\item Digressione su OS:
    \begin{itemize}
    \item OS = Insieme di programmi che consentono all'operatore
          di utilizzare un computer
    \item Kernel = Nucleo dell'OS deputato ad allocare le risorse
          della macchina e altri servizi agli altri programmi 
    \end{itemize}
\item \texttt{Linux}\footnote{Pronuncia del nome \texttt{Linux} a
              \url{https://mirrors.edge.kernel.org/pub/linux/kernel/SillySounds/}
             }
      , '91, Linus Torvalds:
          \begin{itemize}
          \item Progetto personale annunciato su
                \href{https://groups.google.com/g/comp.os.minix/c/dlNtH7RRrGA/m/SwRavCzVE7gJ}{com.os.minix}
          \item Kernel Libero (GNU GPLv2), Monolitico, Modulare, UNIX-like
          \item '92 \texttt{Linux} diventa kernel del sistema \texttt{GNU}
          \item Adozione in ambito commerciale
          \item Prima diffusione in supercomputer (
                \href{https://top500.org/statistics/list/}{Vedi TOP500 OS Family}
                )
          \item Poi leader in ambito server
                \footnote{Guarda ad esempio statistiche su web server a
                          \url{https://w3techs.com/technologies/overview/operating_system}
                         }
                (in particolare LAMP)
          \item 2000, Linux Foudation $\rightarrow$ LSB (\emph{Linux Standard Base})
                Standardizzazione OS che adottano kernel \texttt{Linux}
                (Da tempo \emph{standard de facto})
          \item Oggi diffuso in dispositivi mobili (\texttt{Android}), embedded
                (router board, wearables) e altre applicazioni (es. \emph{TESLA})
          \item Percentuale diffusione workstation, desktop, laptop e gaming
                (es. Valve Corporation, SteamOS) in crescita
          \end{itemize}
\item Concetto ed esempi di distribuzione \texttt{GNU/Linux} (Ubuntu, Mint, Fedora, Arch, Gentoo, Debian,
      CentOS, RHEL, SUSE, LFS, OpenWRT, Raspbian); cosa distingue varie distro? $\rightarrow$
      \emph{package manager}, \emph{init system}, configuarzione kernel \texttt{Linux}, etc.
\end{itemize}

\section{\texttt{GNU/Linux} per un Fisico}
Perhé un fisico dovrebbe conoscere ed utilizzare il sistema \texttt{GNU/Linux}?

\begin{itemize}
\item Cluster di computer e farm (es.
      \href{https://www.hpc.cineca.it/hardware/marconi}{MARCONI},
      \href{https://www.indaco.unimi.it/}{INDACO},
      \href{https://lcm.mi.infn.it/farm/}{LCM Farm}
      ) nel mondo sono quasi
      interamente costituite da reti di sistemi \texttt{GNU/Linux} (es. CentOS, RHEL, Debian)
\item Codice libero = adattabilità, trasparenza, riproducibilità, no interessi
\item Calcolo scientifico ha storia basata su sistemi UNIX-like da decadi
      $\rightarrow$ applicazioni vengono prevalentemente sviluppate su e per
      questa famiglia di sistemi
\item Tutte le persone dovrebbero usare un OS Libero, per ragioni etiche
\end{itemize}

\section{Nozioni e Strumenti}
\subsection{Setup}
\begin{itemize}
\item Vedete il terminale?
\item Il font è abbastanza grande?
\item Vedete il puntatore?
\item Non andare troppo veloce
\item Spiega che tasti premi, se non vengono printati
\item Non cancellare l'output del terminale
\end{itemize}

\subsection{Il concetto di \emph{Shell}}
\begin{itemize}
\item \emph{shell} è programma per computer che espone all'utente o ad
      altri programmi i servizi dell'OS
\item Si chiama così perché è strato più esterno dell'OS
\item Può essere GUI (es. \texttt{GNOME}, \texttt{KDE}) o \texttt{CLI}
      (es. \texttt{sh}, \texttt{ksh}, \texttt{bash}, \texttt{csh},
       \texttt{csh}, \texttt{COMMAND.COM})
\item Nel caso di shell CLI $\rightarrow$ \emph{interprete dei comandi}
\end{itemize}

\subsection{\emph{Interprete dei Comandi} vs \emph{Emulatore di Terminale}}
\begin{itemize}
\item \emph{emulatore di terminale} = GUI che emula una \emph{telescrivente}
      \footnote{Video interessante di \emph{telescrivente} connessa a sistema
                \texttt{GNU/Linux}:
                \url{https://www.youtube.com/watch?v=9TGQ4pnVWSQ}
               }
      \begin{itemize}
      \item Programma \emph{master} che riceve e interpreta le stringhe
            digitate dall'utente alla tastiera, le mostra in una finestra
            grafica e le passa al programma \emph{slave}
            (es. \emph{interprete dei comandi})
      \item Riceve stringhe dal pogramma \emph{slave} e le mostra all'utente
            grazie ad una finestra grafica
      \item Esempi: \texttt{xterm}, \texttt{urxvt}, \texttt{st}
      \item Quando non è un GUI si chiama \emph{console virtuale}
            (es. le \texttt{Linux tty})
      \end{itemize}
\item \emph{interprete dei comandi} = una shell di tipo CLI
      \begin{itemize}
      \item Programma \emph{slave} che riceve stringhe dal programma
            \emph{master}, le interpreta e chiede a OS di eseguire programmi
            corrispondenti
      \item Può passare stringhe al programma \emph{master} perché vengano
            mostrate a schermo
      \end{itemize}
\end{itemize}

\subsection{\texttt{bash}}
\begin{itemize}
\item Shell del progetto GNU
\item \texttt{bash} = \emph{Bourne Again SHell} (Stephen Bourne)
\item \`E interprete dei comandi e linguaggio di scripting
\item Se chiamata come \texttt{sh} o con la flag \texttt{--posix}
      comportamento conforme al POSIX (\texttt{sh})
\item Alcune feature:
      \begin{itemize}
      \item Redirezione in e out $\rightarrow$ \texttt{>}, \texttt{>>}, \texttt{<}
      \item Pipeline $\rightarrow$ \texttt{|}
      \item Liste di comandi $\rightarrow$ \texttt{;}, \texttt{\&}, \texttt{\&\&}, \texttt{||}
      \item \texttt{$\sim$} expansion
      \item Parametri $\rightarrow$ definizione, valutazione, variabili speciali (in particolare
            \texttt{PATH})
      \item Cicli e condizioni: \texttt{if}, \texttt{for}, \texttt{while}
      \item \texttt{history}
      \item \emph{Tab completion}
      \item Esempio di script: \texttt{hello.sh}
      \end{itemize}
\end{itemize}

\subsection{Programmi Applicativi di \texttt{UNIX}}
\subsubsection{Il Comando Più Importante dell'Universo}
Comando \texttt{man} è più importante universo! \texttt{man man man}!
Vedi anche \texttt{apropos} o \texttt{man -k}.

Regole per documentarsi:
\begin{itemize}
\item Cercare nelle \emph{man page}, info, \texttt{--help} e solo infine sul web
\item Cercare \emph{in lingua inglese} $\rightarrow$ \`E la lingua di internet
      e dell'informatica
\item Cercare sempre dalla documentazione ufficiale $\rightarrow$ Meglio diffidare
      di guide e blog, se possibile.
      (\emph{Chi l'ha scritto, è chi meglio ti può consigliare})
\item Vai a fondo finché il tempo a tua disposizione te lo permette
\end{itemize}
\subsubsection{File System}
\begin{itemize}
\item Digressione su VFS: radice, nodi, file regolari, file speciali (?)
\item \texttt{pwd}
\item \texttt{cd} $\rightarrow$ No argomento, \texttt{-}
\item \texttt{ls} $\rightarrow$ \texttt{-l}, \texttt{-a}, \texttt{-t}, \texttt{-r}
\item \texttt{find} $\rightarrow$ \texttt{--name}, \texttt{--iname}, combinazione
      con \texttt{xargs}
\end{itemize}

\section{Presentazioni ospiti}
\begin{itemize}
\item Ospiti: Zec, Sboz, Blue, Algebrato (?)
\item 5 min a testa
\item Domande
\end{itemize}

\section{Chiusura}
\begin{itemize}
\item Repo dell'\emph{OpenLab}, cosa trovate, licenza
\item Contatti LCM: sito, gruppo community, mail
\item Saluti
\end{itemize}

\end{document}
