Introduzione al Calcolatore



La diffusione attuale dei computer è frutto di una costante evoluzione della tecnologia (da valvole termoioniche, a transistor, a circuiti integrati) che ne ha reso possibile l'utilizzo da parte di un pubblico sempre più ampio e non necessariamente specializzato: Mainframe, Minicomputer, Microcomputer, Home computer, Personal computer.

Malgrado le differenze, tutti i computer hanno in comune almeno le seguenti caratteristiche:

(... e gli utenti)

Programmi applicativi es. Word, Netscape

Il Sistema Operativo (S.O.)
es. WindowsXP, Linux

La parte Hardware (Hw)
es. processore, memoria





Architettura del calcolatore



  1. Video (Display)

  2. Scheda madre (Motherboard)

  3. CPU (Microprocessore)

  4. RAM (Memoria Primaria)

  5. Schede di espansione (grafica, rete, etc.)

  6. Alimentatore

  7. CD/DVD Drive

  8. HD (Memoria secondaria)

  9. Tastiera

  10. Mouse

Le componenti hardware interagiscono scambiandosi segnali elettrici. Come può un essere umano riuscire a controllarne il funzionamento in maniera agevole?
Grazie ai Sistemi Operativi!





Il Sistema Operativo



Un S.O. è un particolare programma che agisce da intermediario fra utente e hardware di un computer

  • Il S.O. è responsabile del controllo e gestione dell'hardware che costituisce un computer e quindi di tutte le operazioni di base

  • Il S.O. dovrebbe permettere di utilizzare le componenti hardware nel modo più efficiente e efficace possibile

  • Il suo scopo è di fornire un ambiente nel quale gli utenti siano in grado di eseguire applicazioni

  • Il S.O. gestisce l'accesso degli utenti al sistema e tutti i processi in esecuzione

  • I S.O. moderni devono rendere possibile e conveniente l'utilizzo di un computer anche a utenti non esperti, facilitando l'interazione attraverso le periferiche disponibili

Esempi di Sistemi Operativi sono:
MS DOS, Windows (95, 98, 2000, NT, XP, Vista), Mac OS, OS/2, UNIX, Linux

Ognuno di questi S.O. fornisce all'utente un modo diverso di lavorare, di interagire con le componenti hardware, di realizzare i propri lavori, hobby e progetti scientifici e artistici





Da UNIX a Linux



  • UNIX fu sviluppato alla fine degli anni sessanta presso i laboratori Bell (Bell Labs) della AT&T introducendo una serie di principi tuttora ritenuti universalmente validi:

    • ogni funzionalità offerta deve fare una sola cosa e bene

    • indipendenza dall'hardware

    • favorire l'uso dell'output di un programma come input di un altro

    • S.O. visto anche come ambiente di supporto alla programmazione

  • Multiutente e multitasking: più utenti possono collegarsi al sistema e eseguire task/processi contemporaneamente (con un meccanismo detto timesharing)

  • UNIX è il primo S.O. a essere (ri)scritto (nel 1973) in un linguaggio ad alto livello, il C (mutuamente influenzato da UNIX) invece che in Assembly, disgregando la diffusa convinzione che solo con linguaggi di basso livello si potesse garantire un livello accettabile di efficienza

  • Diffuso rapidamente in ambito accademico grazie a licenze gratuite dei Bell Labs (fine anni '70)

  • Esistono numerosi dialetti, per tutte le macchine (da personal computer a mainframe), con stesse funzionalità di base e buona compatibilità

  • Nel 1992, lo studente ! finlandese Linus Thorvald ha sviluppato (il kernel di) Linux, una versione open source di UNIX per PC Intel 386, utilizzando strumenti della Free Software Foundation.

      Linux è oggi disponibile per tutte le piattaforme e i processori più diffusi... e adesso è anche facile da installare e da aggiornare!





UNIX in generale



  • Tutte le informazioni sono organizzate in file: documenti, sorgenti di programmi, applicazioni, immagini, ...

  • File System gerarchico: file (archivio) e directory (cartelle)

  • Due modalità di interazione con l'utente, con vantaggi complementari:

    • grafica, come sotto Windows (intuitiva, possibile anche per novizi, invita all'esplorazione...)

    • testuale, tramite shell interattiva (richiede maggiore conoscenza del sistema, più potente...)

  • Sia la shell che l'interfaccia grafica (basata su X-Windows) forniscono, in modo diverso, le stesse funzionalità:

    • accedere al sistema

    • spostarsi nel file system

    • creare / modificare / eliminare file

    • eseguire applicazioni





Il file system



  • Un file è un contenitore di informazioni: un documento, un programma, i dati di un esperimento, una fotografia..., ma anche un dispositivo di input/output, una zona di memoria interna,... (in UNIX anche operazioni come accesso a periferiche o comunicazioni tra processi avvengono tramite file speciali)

  • Una directory è un file che contiene altri file.

  • Ogni file ha un nome, che può contenere lettere, numeri, e i caratteri "." (punto) e "_" (sottolineatura o underscore) [meglio evitare gli spazi!!!]
    Spesso il nome di un file ha un
    suffisso o estensione, che ne indica il tipo (main.c indica un programma C, letter.txt indica un file di solo testo...)

  • UNIX è case-sensitive: una lettera minuscola e la corrispondente maiuscola sono diverse!!!
    Ad esempio, possiamo avere nella stessa directory i file
    piPPo e Pippo

  • I file sono organizzati in una struttura chiamata file system, rappresentabile come un albero (come analogia considerate un albero genealogico):

    • Una struttura con tre elementi: radice, nodi, archi (relazioni tra nodi)

    • La radice dell'albero è la directory /, detta root

    • I nodi sono file (i nodi interni sono directory)

    • Gli archi descrivono la struttura gerarchica (relazione padre-figlio)

Esempio di struttura di un file system UNIX





Directory importanti e Pathname



Alcune directory importanti:

  • Della root directory (indicata con /) abbiamo già parlato.

  • I file di ogni utente UNIX sono memorizzati in una directory del file system chiamata la home directory o home dell'utente (indicata con ~).

  • In ogni istante, ogni utente collegato al sistema si trova concettualmente posizionato in un ben preciso nodo del file system (detto directory corrente e indicato con .), da cui può spostarsi tramite opportuni comandi

  • La directory immediatamente sopra quella corrente è detta directory padre e indicata con ..

Nota: questa convenzione NON si generalizza aumentando il numero di .. per raggiungere la directory padre della directory padre e così via!

I percorsi (o path) sono rappresentati testualmente inserendo un simbolo / tra ogni padre e figlio (senza spazi). Per esempio:

/usr/       /usr/bin       /usr/bin/emacs

Un pathname specifica la precisa locazione di un file all'interno del file system.

  • pathname assoluto: dice come raggiungere un file partendo dalla radice del file system (quindi comincia sempre con /). Per esempio:
    /usr/bin/emacs

  • pathname relativo: dice come raggiungere un file partendo dalla directory corrente. Per esempio:
    ../../X11/man se la directory corrente è /usr/bin/emacs

  • Due file in directory diverse dello stesso albero possono avere lo stesso nome. Possiamo distinguerli usando il loro pathname assoluto, che li identifica in modo univoco nel file system:

      /usr/bin
      /bin/
      /usr/X11/bin/





La shell (conchiglia)



La shell è un interprete di comandi: legge ciascuna linea di comando, ne interpreta le diverse componenti e la esegue

  • Ogni sistema UNIX mette a disposizione vari tipi di shell. Le shell più diffuse sono: (sh, bash, csh, tcsh,dash): il file

    /etc/shells contiene contiene l'elenco delle shell installate dall'amministratore e disponibili a tutti gli utenti

  • Dall' interfaccia grafica la shell si lancia come una qualunque applicazione (cercate l'icona con la finestrina da terminale...)

  • La shell è un interprete di comandi che ripetutamente:

    • stampa un prompt

    • legge un comando scritto dall'utente e terminato con enter/return/invio

    • esegue il comando o segnala un errore se non è in grado di completarlo

  • I comandi possibili sono moltissimi, ma ne bastano pochi per cominciare...





Perché usare una shell testuale?



  • Potenza e semplicità: I comandi UNIX sono progettati per risolvere problemi specifici. Sono semplici (senza menu e opzioni nascoste) e proprio per questo potenti (es. grep parola filename)

  • Velocità e flessibilità: è più veloce scrivere pochi caratteri da tastiera piuttosto che cercare un programma opportuno e usare le operazioni che fornisce sulla base delle proprie specifiche esigenze

  • Accessibilità: permette di accedere efficientemente ad un sistema in remoto (es. ssh machine)





Sintassi dei comandi UNIX



La sintassi tipica dei comandi UNIX è la seguente:

comando  <opzioni>   <argomenti>

Opzioni:

  • Sono facoltative e influiscono sul funzionamento del comando

  • Consistono generalmente di un hyphen (il simbolo di trattino -) seguito da una sola lettera (es. ls -l). Possono avere un argomento (es. dvips -o p.ps p.dvi). Spesso più opzioni possono essere raggruppate insieme dopo un solo trattino (es. ls -al )

Argomenti:

  • Si possono avere più argomenti o anche nessuno

  • Alcuni argomenti sono opzionali. Se non specificati assumono valori di default





I comandi UNIX: Esempi



  • nessun argomento: il comando date mostra ora e data corrente
    date

  • un solo argomento: il comando cd cambia la directory corrente in quella specificata dal suo argomento
    cd ../emacs

  • un'opzione ed un argomento: il comando wc conta il numero di parole, caratteri, righe in un file di testo, in base all'opzione specificata

    wc -w elenco.txt

    conta le parole nel file elenco.txt

    wc -c elenco.txt

    conta i caratteri nel file elenco.txt

    wc -l elenco.txt

    conta le linee nel file elenco.txt

  • numero arbitrario di argomenti: il comando cat concatena e mostra sullo schermo il contenuto dei file passati come argomento
    cat orarioLIP.txt orarioLMM.txt orarioFP.txt orarioAM.txt

  • più opzioni ed un argomento di default: lista dettagliata (l,long) di tutti (a,all) i file, con dimensione (s,size). L'argomento di default è la directory corrente
    ls -als

Alcune informazioni utili

Per avere informazioni su di un comando e vederne tutte le opzioni possibili, provare l'opzione --help, oppure i comandi man o info (ad esempio, "ls --help", "man ls", "info ls")

La shell fa una completion automatica: se si scrive l'inizio di un comando o di un file e si batte TAB, la shell completa il nome per quanto possibile.





La directory corrente e comandi di navigazione



La linea di comando è concettualmente posizionata in una directory, la directory corrente (che all'inizio di ogni sessione è la home dell'utente collegato), nella quale vengono eseguiti i comandi.

Per fare riferimento a files o directory, oltre al path assoluto si può usare il path relativo, che parte dalla directory corrente.

Comando

Significato

dirs

stampa la directory corrente [working directory]

pwd

stampa il pathname assoluto della director corrente

cd

la home diventa la directory corrente

cd <nuovaDir>

<nuovaDir> diventa la directory corrente

ls

stampa il contenuto della directory corrente

ls <directory>

stampa il contenuto di <directory>

ls -l

stampa anche informazioni aggiuntive (diritti, dimensione...)

ls -a

stampa anche files/directory che iniziano per "."

Esempio: visitando una home

Comando

Significato

-> pwd

stampa il pathname assoluto della directory corrente

-> ls

lista la directory corrente

-> cd ..

la direcory padre diventa la directory corrente

-> ls -sh mydocs

lista la directory mydocs con opzioni size e human readable

-> cd

la home diventa la directory corrente





Creare, cancellare, copiare e spostare file



Per creare un file si possono usare moltissimi comandi: il più semplice è touch. In generale, tutti i comandi che modificano un file lo creano se esso non esiste già.

Comandi per creare e cancellare file e directory

Comando

Significato

touch <file>

cambia l'orario di accesso e di modifica di <file>; se non esiste, lo crea

mkdir <dir>

crea la directory <dir>

rmdir <dir>

cancella la directory <dir>, ma solo se è vuota.

rm <f1> ... <fn>

cancella i files <f1> ... <fn>

rm -r <dir>

cancella la directory <dir> con il suo contenuto

rm -i ...

cancella l'argomento chiedendo conferma

rm -f ...

cancella l'argomento senza chiedere conferma

Comandi per spostare e copiare file e directory

cp <source> <dest>

copia il file o directory <source> in <dest>

cp <f1> ... <fn> <dir>

copia <f1> ... <fn> nella directory <dir>

cp -r <dir1> <dir2>

copia <dir1> e tutto il suo contenuto in <dir2>

cp -i ...

copia chiedendo conferma prima di sovrascrivere

cp -f ...

copia senza chiedere conferma prima di sovrascrivere

mv <source> <dest>

copia <source> in <dest> e rimuove <source>

mv <f1> ... <fn> <dir>

sposta <f1> ... <fn> nella directory <dir>

mv -i ...

muove chiedendo conferma prima di sovrascrivere

mv -f ...

muove senza chiedere conferma prima di sovrascrivere





Emacs



Emacs è un editor di testo molto utilizzato sotto UNIX, che offre moltissime funzionalità: si tratta di un vero e proprio ambiente di sviluppo integrato, non grafico.

Per lanciare Emacs ed editare il file primofile, basta eseguire nella shell il comando

    -> emacs primofile &

La "e commerciale" (&) serve a lanciare Emacs in background, in modo da non bloccare l'esecuzione della shell.

Alcune cose da sapere (e sperimentare) su Emacs:

  • Emacs fa un backup del file chiamandolo primofile~.

  • Quando si modifica un file con Emacs, in realtà si modifica una copia del file tenuta da Emacs in un buffer (nell'esempio, un file chiamato #primofile#). Le modifiche vanno salvate per renderle permanenti.

  • Emacs permette di lavorare su più file alla volta. Non c'è bisogno di mandare in esecuzione più copie di Emacs. Il menu Buffer permette di passare da un file all'altro.

  • Se i caratteri della finestra di edit vi sembrano troppo piccoli per riuscire a lavorarci, lanciare Emacs col comando emacs -fn 10x20

  • Si può interagire con Emacs usando il mouse e i menu, oppure con opportune combinazioni di tasti. Un'introduzione all'uso di Emacs (con i tasti!!!) si trova nell'Emacs Tutorial, che si può invocare con C-h t oppure dal menu Help




Editing della linea di comando e comandi Emacs


Molte shell offrono funzioni di editing della linea di comando che sono "ereditate" dall'editor emacs.

Ecco alcune delle funzioni più utili:

Ctrl-e

va a fine riga

Ctrl-a

va a inizio riga

Ctrl-k

cancella il resto della linea (kill)

Ctrl-y

reinserisce la stringa cancellata (yank)

Ctrl-d

cancella il carattere sul cursore (delete)

Ctrl-x Ctrl-s

salva il file (save)

Ctrl-x Ctrl-c

esce da Emacs



I metacaratteri (wildcards)


Accade spesso di voler operare su più file contemporaneamente. Ad esempio, supponiamo di voler copiare tutti i file html di una directory nella sotto-directory html-src. Usando la wildcard  * (asterisco) si può scrivere semplicemente:

-> cp *.html html-src

I metacaratteri e il loro significato sono:

?

qualunque carattere

*

qualunque sequenza di caratteri

Se la shell trova un'espressione contenente metacaratteri in una linea di comando, la espande con tutti i nomi di file che "soddisfano" (match) l'espressione.

I seguenti esempi usano il comando echo, che rimanda sullo schermo ogni parametro.

  -> echo Ciao!
  Ciao!
  -> ls
  data-new data1 data2 inittab pippo pippo2
  -> echo data*
  data-new data1 data2
  -> echo data? 
  data1 data2
  ->

    Visualizzare i file di testo

    Comandi per visualizzare il contenuto di file di testo

    less <file>
    more <file>

    visualizzano pagina per pagina il contenuto di <file>, che deve essere un file di testo

    cat <f1> ... <fn>

    concatena i file <f1> ... <fn> e ne mostra il contenuto


    sort <f1> ... <fn>

    mostra le righe in <f1> ... <fn> ordinate lessicograficamente

    Per visualizzare correttamente file che non sono di testo occorre usare le corrispondenti applicazioni.

    Come default, i comandi visti sopra dirigono il contenuto dei file sullo standard output.



    Standard input, output e error


    Per convenzione ogni programma UNIX comunica seguendo un analogo schema di input/output, che comprende tre canali

    • riceve l'input dallo standard input (stdin)

    • manda l'ouput allo standard output (stdout)

    • segnala gli errori sullo standard error (stderr)

    Per default la shell associa stdin alla tastiera e stdout, stderr allo schermo del terminale utente.



    Ridirezione


    Il meccanismo della ridirezione permette di alterare il comportamento standard.

    La shell permette di ridirigere stdin, stdout e stderr, connettendoli a generici file. Si usano per questo i caratteri speciali

    >   >>   >&   <

    Ad esempio, l'output del comando echo viene mandato su stdout, che per default è lo schermo. Possiamo ridirigere l'output nel seguente modo:

    -> echo pippo Topolino
    pippo Topolino

    echo ristampa sullo schermo il resto della linea

    -> echo pippo Topolino > file.txt
    -> cat file.txt
    pippo Topolino
    ->

    L'output viene scritto nel file file.txt, cancellando il suo contenuto o creandolo se non esiste.

    -> echo e anche Minnie >> file.txt
    -> cat file.txt
    pippo Topolino
    e anche Minnie
    ->

    L'output viene appeso al file file.txt.

    -> ehco errore > file.txt
    csh: ehco: command not found
    ->

    Eventuali errori vengono scritti su stderr, che è ancora associato allo schermo.

    -> ehco errore >& file.txt
    -> cat file.txt
    csh: ehco: command not found
    ->

    Con >& si ridirige anche stderr.

    Il comando sort (senza parametri) legge dallo standard input e scrive sullo standard output. Possiamo ridirigere input e/o output così:

    -> sort < elenco.txt

    Stampa sullo schermo le linee di elenco.txt ordinate lessicograficamente.

    -> sort < elenco.txt > eleOrd.txt

    Scrive in eleOrd.txt le linee di elenco.txt, ordinate lessicograficamente.



    I processi


    Un processo è un programma in esecuzione. Concettualmente, la shell esegue ripetutamente i seguenti passi:

    • stampa il prompt e attende l'input dell'utente;

    • legge la linea di comando;

    • espande eventuali alias e wildcard;

    • se il comando è un comando interno lo esegue, altrimenti:

      • individua il comando da eseguire nel file system;

      • lancia un processo per eseguirlo mettendosi in attesa;

    • quando l'esecuzione del comando termina, riprende l'esecuzione.

    Poiché UNIX è un sistema multitasking, la shell permette di lanciare più processi in parallelo. Scrivendo

    -> <comando> &

    il comando <comando> viene eseguito in background, cioè la shell continua l'esecuzione subito dopo aver lanciato il processo, senza attenderne la terminazione.

    I seguenti comandi e tasti speciali sono utili per la gestione dei processi:

    jobs

    elenca i job della shell corrente, con il numero di job; quello marcato con + è il job corrente

    fg
    fg %
    <n>

    riporta in foreground il job corrente
    riporta in foreground il job numero <n>

    Ctrl-z

    combinazione di tasti che sospende il comando in esecuzione

    bg %<n>

    riattiva in background l'esecuzione del job <n> (di quello corrente se senza argomenti)

    Ctrl-c

    Combinazione di tasti che termina il comando in esecuzione

    ps
    ps -aux

    elenca i processi (e pid) della shell corrente
    elenca tutti i processi in esecuzione

    kill -s <n>   <p>
    kill -s <n>   %<j>
    kill -l

    invia il segnale <n> al processo con PID <p>
    invia il segnale
    <n> al job <j>
    elenca i segnali possibili (es.
    KILL)

    Ad esempio, per lanciare emacs in background, le seguenti sequenze sono equivalenti:

    -> emacs nome-file-da-editare &
    ->

    -> emacs nome-file-da-editare
    Ctrl-z

    -> bg
    ->



    Pipe e SSH


    Il metacarattere “|” pipe serve per comporre comandi “in cascata” in modp che l'output di ciascuno sia fornito in input al successivo. L'output dell'ultimo comando e' l'output della pipeline (di default sullo standard output).

    <comando1> | <comando2>



    L'output dell'esecuzione del primo comando viene passato come input del secondo comando.

    Ad esempio

    ls |more



    Effetto e' quello di visualizzare l'output di ls una pagina per volta



    SSH (Secure SH) e' un comando che consente se eseguito sul computer A (client) di aprire una shell remota verso un computer B (server) su cui e' in esecuzione un demone SSH.

    Esempio:

    ssh gori@olivia.cli.di.unipi.it



    Per uscire dalla shell remora e tornare alla shell locale digitare il comando exit



    Altri comandi utili


    Elenchiamo qui altri comandi Linux di grande utilità. Per una loro descrizione più approfondita si faccia riferimento alla dispensa CdC & Linux oppure alla documentazione online di Linux, provando i seguenti:

    <comando> --help
    man <comando>
    info <comando>.

    quota

    mostra lo spazio disco che si ha a disposizione e l'occupazione attuale


    Attenzione: con quota esaurita il login con GUI non funziona: usare Ctrl-Alt-F1 per login testuale e controllare la cache del browser.

    gzip/gunzip

    compressione/decompressione di file

    bzip2/bunzip2

    compressione/decompressione di file

    tar

    creazione di/estrazione da archivio, normalmente con compressione/decompressione

    zip/unzip
    rar/unrar

    creazione di/estrazione da archivio, normalmente con compressione/decompressione

    file <nome>

    mostra il tipo del file <nome>

    Ad esempio, per creare l'archivio compresso di un progetto si può usare tar:

    -> tar -zcvf arch.tgz projdir/




    Esercizi


    [01]  Partendo dalla vostra home directory esplorare il file system posizionandovi nella vostra directory padre. Elencare i files in essa contenuti.

    [02]  Posizionandovi nella vostra home directory, create una nuova sottodirectory chiamata Num_Utili e copiateci il file di testo Rubrica.txt che trovate nella home directory della prof. Gori (~gorir).
    Editare il file con
    emacs o gedit in modo da cancellare tutte le righe che non contengono informazioni utili (es. righe vuote, righe di asterischi,....).

    [03]  Creare nella propria propria home directory una nuova directory Num_Pers.
    Creare poi un nuovo file
    MiaRubrica.txt nella directory Num_Pers.
    Editare il file
    MiaRubrica.txt per inserire 5-6 nomi di amici con la città di provenienza e un recapito telefonico anche inventato (usare esattamente lo stesso formato dei dati utilizzato nel file Rubrica.txt).

    [04]  Creare un nuovo file GenRubrica.txt nella nuova directory Num_Gen figlia della propria home directory in modo che contenga tutti i dati presenti nelle due rubriche precedenti (Rubrica.txt, MiaRubrica.txt), senza editare manualmente il contenuto dei files.

    [05]  Creare un nuovo file OrdRubrica.txt nella home directory memorizzandoci i dati di GenRubrica.txt ordinati secondo l'ordine alfabetico, senza editare manualmente il contenuto dei files.

    [06]  Individuare il comando con il quale si sarebbe potuto ottenere direttamente il file OrdRubrica.txt (nella home directory) a partire dai file MiaRubrica.txt e Rubrica.txt.

    [07]  Spostare tutti i file con suffisso .txt delle directory Num_Pers e Num_Utili nella home directory e cancellare le directory Num_Pers e Num_Utili.

    [08]  Indicare un comando che indichi la size di tutti i file contenuti nella home directory.

    [09]  Eseguire la seguente sequenza di azioni:

    • Lanciare da shell l'editor emacs senza il comando &.

    • Indicare la combinazione di tasti che vi permette di sospendere l'esecuzione di emacs in modo da ottenere di nuovo l'uso della shell.

    • Indicare il comando che vi permette di riattivare in background l'esecuzione di emacs.

    • Qual è la differenza tra il comando bg e il comando fg? Se necessario per vedere la differenza ripetere la sequenza di azioni di sopra.

    [10]  Scaricare dalla home directory della Prof. Gori (~gorir) il file eseguibile provami. Lanciare l'esecuzione di tale eseguibile (file binario) dando il comando da shell ./provami. Che succede?
    Terminare l'esecuzione del programma
    provami sfruttando un'opportuna combinazione di tasti.

    [11]  Eseguire di nuovo il comando ./provami. Aprire un'altra shell e usare una sequenza di comandi per bloccare l'esecuzione del processo provami.
    Suggerimento: determinare il PID del processo e poi usare un'opportuna opzione del comando kill.

    [12]  Copiate il file Nome.tar nella vostra home directory

    • scompattate il file Nome.tar con il comando

    tar xvf Nome.tar

    il comando estrae un file di testo chiamato “Nome.txt”

    • Editate il file Nome.txt e completarlo con le informazioni richieste;

    • Stampate a video il contenuto del file “Nome.txt” risultante (Provate ad usare tutti e tre i comandi a vostra disposizione per questo: pg, more e less)

    • Create un nuovo archivio compresso che contenga il file “Nome.txt” con il comando

    tar cvf  Nome2.tar Nome.txt
    Controllate che la directory contenga il nuovo archivio e che tale archivio contenga correttamente il file con il comando
    tar tvf Nome2.tar