Corso di Metodi Computazionali della Fisica

Alessandro Vicini (Università di Milano)


Introduzione a Unix 1


Sistema operativo + File system

Help

Comandi base per la gestione dei files

Altri comandi di gestione dei files

Comandi utili

Operazioni con macchine remote



Sistema operativo + File system

Il sistema operativo:


Le singole operazioni/funzioni svolte dal sistema operativo sono dette processi


La memoria del computer si divide in:


I dati e programmi personali di un utente risiedono nelle memorie fisse sotto forma di files.


Il file system di un computer è il modo con cui i files sono strutturati,

con cui vengono letti, modificati, scritti e cancellati


Un file è una porzione di memoria caratterizzato da un nome e dalla sua dimensione

(è costituito infatti da un certo numero di bytes)


Il file system in Unix ha una struttura ad albero.

Il punto di partenza, la radice, root, è indicato da /

Ogni ramo, directory, ha un nome


p.es./home/vicini


I files possono essere considerati come le foglie dell'albero

Un file è univocamente identificato dalla sua posizione all'interno dell'albero

ovvero dal suo nome completo


p.es./home/vicini/prova.txt


Ogni directory può contenere, files, directories, e inoltre contiene

sempre i files "." (directory corrente) e ".." (directory superiore a quella corrente all'interno dell'albero)


Per muoversi lungo l'albero si utilizza il comando cd


L'implementazione dei file system rende trasparente la relazione tra i devices fisici (dischi, cdrom, etc.) e i files in essi contenuti


Il sistema accede al contenuto di un disco tramite mount point. Il mount point è una directory.

A partire dal mount point si accede a tutti i files residenti sul device.

La struttura del file system e l'utilizzo di spazio possono essere visualizzati con i comandi df e du.


Help


Ogni comando ha un breve help on-line che può essere visualizzato digitando nomecomando --help

Maggiori informazioni si possono ottenere consultando la pagina on-line del manuale digitando man nomecomando

Nel caso non conosciate il nome esatto di un comando, potete provare con man -k parolachiave


La struttura di un comando Unix è nomecomando [-opz1 ... -opzn] [file1 ... filen | dir1 ... dirn]


Root, utenti e gruppi


Ogni utente è identificato da un nome con cui può accedere a una macchina (loginname) attraverso una procedura di autenticazione tramite password. La loginname identifica la porzione di spazio su disco su cui l'utente può scrivere i propri files.

Ogni utente è caratterizzato da una serie di privilegi, ovvero di operazioni permesse.

L'utente root gode del privilegio di superuser ed è abilitato all'amministrazione della macchina.

Per una più efficiente gestione dei permessi, gli utenti sono organizzati in gruppi, tali per cui l'accesso a files e programmi può essere permesso a utenti diversi di uno stesso gruppo.


Con il comando whoami è possibile verificare la propria loginname


Con il comando whoall è possibile vedere quali utenti sono collegati sul cluster di LCM.

Con il comando whoall -mf è possibile vedere quali utenti sono collegati sulle macchine del cluster di LCM dotate del programma Mathematica (-m) incluse quelle senza utenti collegati e quelle non raggiungibili (-f).



Comandi base per la gestione dei files


Il nome della directory corrente può essere visualizzato con il comando pwd

è possibile creare/cancellare directories con i comandi mkdir e rmdir


è possibile creare un file utilizzando un editor di test come p.es. emacs, vi, pico


è possibile elencare i files presenti in una directory con il comando ls

Esistono diverse opzioni che permettono di visualizzare informazioni diverse relative ai files della directory prescelta


Unix è case sensitive cioè maiuscole e minuscole sono considerate lettere distinte.


è possibile selezionare uno specifico gruppo di files utilizzando delle wildcards .


è possibile copiare un file con il comando cp oldfile newfile,

dove oldfile e newfile possono essere dei nomi completi di files, con l'intero path, anche in directories distinte


è possibile rinominare un file con il comando mv oldname newname,

dove oldname e newname possono essere dei nomi completi di files, con l'intero path, anche in directories distinte


è possibile cancellare un file con il comando rm filename

per avere una richiesta di conferma prima della definitiva cancellazione rm -i filename

per superare le eventuali richieste di conferma e rimuovere inappellabilmente un file rm -f filename




Altri comandi di gestione dei files


Il significato dei caratteri di un file può essere vario

è possibile determinare il tipo di contenuto di un file con il comando file filename

Al contrario di Windows, il tipo di un file NON è determinato dalla sua estensione.

Ovviamente l'estensione risulta molto comoda per l'utente per identificare i diversi tipi di files e i loro contenuti.


Al momento di elencare tutte le proprietà di un file, compaiono i suoi permessi, ovvero la possibilità per l'utente proprietario del file, per il gruppo a cui l'utente appartiene e per gli utenti di gruppi diversi di leggere (r), scrivere (w), eseguire (x) il file.

La modifica di questi permessi si ottiene con il comando chmod [ugoa] +-= [rwx] filename

p.es. chmod u+rwx,go+r prova.txt


Esistono diversi tipi di files: quelli di testo (testi, immagini, ...) quelli eseguibili (programmi, script,...) quelli speciali (nomi di directories, link,...).

Mentre files di testo ed eseguibili sono "insiemi sensati di bytes" con diverse proprietà di esecuzione, il comando link permette di creare files speciali che stabiliscono collegamenti ad altri files fisici.

Il comando ln nomefile nomelink crea una copia di nomefile e inoltre ogni modifica su uno dei due files è immediatamente applicata anche all'altro.

Il comando ln -s nomefile nomelink crea un collegamento simbolico (un puntatore) a nomefile, per cui ogni volta che si agisce su nomelink, effettivamente si va a modificare nomefile.


Comandi utili

Per stampare un file si usa il comando lpr -Pnomestampante nomefile.

è buona cosa verificare: la lunghezza del documento, l'effettiva possibilità di stampare un documento (p.es. stampare un file.ps su una stampante non PostScript produce disastri), la possibilità di stampare fronte/retro lpr -K2 -Pnomestampante nomefile,
di stampare due pagine per facciata lpr -N2 -Pnomestampante nomefile.

Lo stato di una coda di stampa si verifica con il comando lpq -Pnomestampante


Per visualizzare, senza modificare, il contenuto di un file si possono utilizzare i comandi more e less. Essi permettono di scorrere il testo e di effettuare ricerche al suo interno. Digitando h compare un sommario dei vari tasti che permettono di muoversi nel testo (ruolo importante del tasto ESC). Le stringhe di testo che possono essere cercate sono classificate come regular expressions.


Le pagine di help prodotte dal comando man vengono visualizzate tramite less e quindi è possibile effettutare ricerche si stringhe secondo le stesse regole.


è possibile manipolare un file, in senso elementare, selezionando una parte di esso e mostrandola sullo schermo o inserendola in un altro file. A questo scopo servono i comandi head, tail e cat.

I programmi di Unix aprono per default 3 files: standard input, standard output e standard error.

Di solito il file di input è associato alla tastiera, mentre i due di output sono associati allo schermo. è però possibile in generale reindirizzare questi 3 files su altri files scelti dall'utente.

Il carattere > ridirige lo standard output: p.es. tail -n3 prova.txt > prova2.txt

Il carattere < ridirige lo standard input: p.es. mail stefano < testomail.txt

I caratteri >> appendono lo standard output


P.es. i comandi head -n5 filename e tail -n5 filename selezionano le prime(ultime) 5 righe di filename.

Il comando head -n5 filename > testafile seleziona le prime 5 righe di filename e le salva nel nuovo file testafile.

Il comando cat file1 file2 > file3 concatena file1 e file2 e li salva nel nuovo file3


Esiste anche la possibilità di ridirigere l'output di un primo programma nell'input di un secondo programma, utilizzando le cosiddette pipes, rappresentate dal carattere | (sbarra verticale).

P.es. il comando tail -n5 filename | lpr -Pstampante seleziona le ultime 5 righe di filename e le manda in stampa.


A un livello più dettagliato, è possibile esaminare un file o estrarre le righe contenenti un certo pattern.

I comandi wc -c filename, wc -l filename, wc -w filename restituiscono rispettivamente il numero di bytes, di linee e di parole presenti in filename.

Il comando grep regexp filenames restituisce le righe presenti nei files filenames contenti il pattern regexp


Per confrontare due files si utilizza il comando diff file1 file2.


Per raccogliere tutti in files inerenti a un certo argomento, problema, progetto, ..., in un unico "contenitore" che possa essere trattato a sua volta come file (e quindi copiato, spedito per posta elettronica, etc.) si usa il comando tar che permette di creare e di manipolare archivi di files.

P.es. tar -cvf nomefilearchivio.tar *.txt raccoglie in nomefilearchivio.tar tutti i files .txt della directory corrente.

Oppure, tar -cvf nomefilearchivio.tar subdir/ raccoglie in nomefilearchivio.tar la sottodirectory subdir e tutti i files in essa contenuti.

Diversamente tar -cvf nomefilearchivio.tar subdir/* raccoglie in nomefilearchivio.tar tutti i files contenuti nella sottodirectory subdir.

Per estrarre tutti i files da un archivio si usa il comando tar -xvf nomefilearchivio.tar.

Per estrarre da un archivio il file filename si usa il comando tar -xvf nomefilearchivio.tar filename.

Per elencare i files contenuti in un archivio, senza estrarli, si usa il comando tar -tf nomefilearchivio.tar .


Esistono diversi tipi di files che occupano molto spazio e che per ragioni pratiche conviene quindi comprimere. Due algortimi di compressione comunemente usati sono gzip e bzip2.

I corrispondenti comandi di decompressione sono gunzip e bunzip2.

è possibile comprimere direttamente un archivio creato dal comando tar, invocando gzip o bzip2, specificando l'opzione z o j rispettivamente.


Per rintracciare un file di cui si conosce il nome ma non la directory in cui è stato salvato

si può usare il comando find.

P.es. find . -name prova.txt -print cerca a partire dalla directory corrente il file prova.txt e, se ne trova uno ne scrive il path completo.

Un comando analogo è locate, che si basa su un database dei files della macchina. è più veloce ma richiede un aggiornamento di questo database.



Operazioni con macchine remote

La rete Internet identifica i suoi nodi con degli indirizzi IP.

è possibile accedere a una macchina remota con un protocollo di comunicazione in cui bisogna specificare il nome della macchina (ovvero il suo indirizzo IP) e il nome dell'utente, registrato sulla macchina remota, che vuole accedere al proprio account dopo una procedura di autenticazione (login).

Il comando che permette di collegarsi su una macchina remota è ssh nomeutente@nomemacchina.dominio


è possibile accedere (p.es. copiare) ai files presenti su di una macchina remota con il comando

scp nomefilelocale nomeutente@nomemacchina.dominio:directory/nomefileremoto


è possibile esportare una sessione grafica aggiungendo l'opzione -X

ssh -X nomeutente@nomemacchina.dominio

La raggiungibilità di una macchina remota può essere verificata con il comando ping nomemacchina.dominio

Sono identificati da un indirizzo IP i siti web, molte stampanti, ...