Shell in Linux

Cos'è lo shell?

E’ un interprete di comandi e spesso viene chiamato anche terminale.

bash Scrive un prompt che attende che l’tente scriva un comando.

Sintassi comandi

Ogni comando verrà indicato così:

comando [opzioni] argomentiobbligatori

Ci deve essere almeno 1 argomento se {argomento}

cp [-r] [-i] [-a] [-u] {filesorgenti} filedestinazione

Ci possono essere 0,1 o piĂą argomenti opzionali se [opzione]

ps [opzioni] [pid...]

Gli argomenti vanno separati da carattere indicato se [carattere opzione...]

chmod mode [, mode...] filename

Opzioni tipicamente composte da

-carattere (vecchia versione)
--parola (nuova versione)

Ad esempio sono equivalenti per il comando cp

-i -r
--interactive --recursive

Le opzioni possono avere un argomento

-k1, -k 1, --key=1

Le opzioni senza argomento sono raggruppabili

-b -r -c e equivalente a -brc

Esistono anche le opzioni BSD-style, che sono senza dash

tar xfz nomefile.tgz

Verificare la versione della shell

Si utilizzano tre opzioni:

echo
echo $0
ps -p "$$" -ocmd -h

Filesystem

Il filesystem è un’area di memoria gerarchica strutturata di file e directory Le directory sono contenitori di file e altre directory, per il sistema sono dei file.

Esistono file regolari e non regolari:

  • regolari: contengono una sequenza di bit dell’area di memoria sulla quale c’è il filesystem e possono avere caratteri binari o ASCII
  • non regolari o speciali: link o file che vengono utilizzati per modellare unitĂ  di I/O a blocchi/caratteri

La struttura del filesystem in Linux parte con una directory radice (root).

cd / 

In una stessa directory e’ vietato creare

  • 2 file con lo stesso nome
  • 2 directory con lo stesso nome
  • Un file ed una directory con lo stesso nome

Path

Ogni file o directory è raggiungibile dalla directory principale / mediante un path assoluto.

Esempio

/home/utente1/dir1/dir11/dir112/file.pdf

Il carattere ~ equivale a dire /home/userX.

~/dir1/dir11/dir112/file.pdf

Per conoscere la current working directory (cwd) si deve usare il comando

pwd
  • [Path] può essere assoluto o relativo
  • cd senza path ritorna alla home
  • Nel path si possono usare .. (parent directory) . directory attuale

Cose mistiche

  • Usando il comando mkdir namedir vengono create le directory ~/Immagini, ~/Immagini/faces e se le directory giĂ  esistono, viene creata ~/Immagini1

Contenuto di una directory

In una directory ci sono file nascosti e tipicamente sono file di configurazione o usati a supporto di comandi e applicazioni.

Per visualizzare i file nascosti si usa il comando:

ls [-a | --all]

C

Funzioni

Sintassi

<return-type> fn-name (parameter-list)
	{
		declaration of variables
		executable statements
	}

; viene usato per terminare uno statement

x,y;
x = 0;
x = y + 1;

Un blocco può contenere 0 o più statement e i blocchi possono essere innestati.

#include <stdio.h>
 
/*
Direttiva pre-processore
stdio.h file header –contiene costanti e prototipi funzioni
<> indicano che il file header e’ un file standard del C in
/usr/include
“” indicano che il file header e’ dell’utente e si trova nella
directory corrente o in un path specificato
-I permette di specificare le directory in cui cercare
gli header file
*/
 
int main() {
	printf(“scrivi quello che vuoi!!!! \n”); // scrive su stdout
	return 0; //indica che il programma ha terminato con
		successo//
}

Per compilare ed eseguire i programmi (su Linux) si usa:

gcc -Wall prog.c

Stampa tutti i messaggi di warning

gcc -Wall prog-name.c -lm

-lm va specificato se si includono le librerie matematiche <math.h>, per esempio per usare funzione come

Il risultato è un file eseguibile a.out Per specificare il nome dell’output si usa

gcc -Wall prog-name.c -o executable-name.o

Precompilazione e compilazione

La precompilazione esegue tutte le direttive del compilatore ed elimina tutti i commenti. La compilazione controlla che la sintassi sia a posto. Per ogni chiamata a funzione, controlla che venga rispettato il corrispettivo header (che quindi deve esistere al momento della chiamata!). Crea effettivamente del codice macchina, ma solo per il contenuto delle funzioni. Ogni chiamata a funzione ha una destinazione simbolica

Per precompilare si usa

cpp nome-file.c > nome-file-precompilato.c

> serve per salvare l’output del primo file nel secondo.

Per compilarlo si usa

gcc -c nom-file-precompilato.c -o nome-file.o