Introduzione agli strumenti di base per la programmazione...

34
Introduzione agli strumenti di base per la programmazione in Linux

Transcript of Introduzione agli strumenti di base per la programmazione...

Introduzione aglistrumenti di base per la

programmazione in Linux

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 29

Linux: Cenni

Breve introduzione a LinuxCosa è ?Dove si trova ?Come si usa ?Che me ne faccio ?

Breve introduzione agli strumenti di programmazione

Quali sono gli strumenti per compilare ?Quali sono gli strumenti per controllare ?Dove sono le librerie ?Dove sono tutte le altre “diavolerie” ?

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 30

Linux: Cenni

Come si fa cosa ?Come faccio a sapere dove sono le cose ?Come faccio a sapere cosa stà combinando ilmio programma ?Come creo un codice sorgente ?Come lo compilo ?Come lo lancio ?Come lo “debuggo” ?

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 31

Breve introduzione: Cosa e’ ?

Cosa è ?Linux is a free Unix−type operating system originally created by Linus Torvalds with the assistance of developers around the world. Developed under the GNU General Public License , the source code for Linux is freelyavailable to everyone

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 32

Breve introduzione: Cosa e’ ?

La prima versione del kernel risale al 1994E’ “POSIX compliant”

POSIX ??? Portable Operating System Interface è una “standardizzazione” di Unix ….

ANSI CIEEE POSIXFIPSX/Open……

Ogni standard definisce l’interfaccia (“flavour”)

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 33

Breve introduzione: Cosa e’ ?

GNU GPL ???E’ la licenza che permette il libero utilizzo del software a patto di fornirlo con la sorgente. Il software è libero ma non gratuito, l’utente ha la libertà di modificarlo

GNU ????Gnu is Not Unix !!!! Fondata nel 1984 per sviluppare un sistema operativo Unix-like completamente liberoNon è Linux. L’associazione, sotto l’egida della FreeSoftware Foundation (FSF), mantiene il kernel di Linux ed una serie di applicativi fondamentali, ma non distribuisce il sistema.

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 34

Breve introduzione: Dove si trova ?

Oramai anche nelle macchinette del caffè …Data la “complicazione” del sistema è stato tradizionalmente organizzato in “distribuzioni”. La prima a diffondersi è stata la “Slackware”. Ce ne sono di libere e proprietarie, ognuna con caratteristiche diverse ed orientate ad un mercato particolare.Le più diffuse:

DebianSlackwareRedHat (Fedora Core, Enterprise)SuseMandrakeScientifc LinuxGentoo

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 35

Breve introduzione: Dove si trova ?

Di solito si posso scaricare le immagini ISO dalla rete La facilità di installazione dipende dalla distribuzione così come il sopporto per l’hardware

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 36

Breve Intro.: Che me ne faccio ?

Pros:Posso avere un “server” a poco prezzo.Sviluppatori ovunqueDiffusione di applicativi e documentazione

Cons:Manutenzione ed installazione “da esperti”Continue releaseDifficoltà a tener dietro agli upgrade hardware se non c’e’ una politica di supporto dell’azienda… Causa assuefazione …

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 37

Breve Intro: Come si usa ?

Seguire le istruzioni della distribuzione !Immettere username e password...

Le interfacce sono diverse. Essenzialmente:X-windowsTerminale ANSI

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 38

Breve Intro: Come si usa ?X-windows

XFree86. Disponibile per varie piattaforme. Open sourceimplemetazione del protocollo

Vi serve un “windows manager” :TwmFwmEnlightenmentAfterStep……….

Sarebbe meglio avere un “desktop manager” (Windows insegna ….):

KDEGNOME….

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 39

Breve Intro: Come si usa ?Ci serve una “shell”E’ una “command line interpreter” che legge l’”user input” ed esegue il comando richiesto.

“user input” ??? Puo’ essere il terminale o un file: script

E’ la nostra interfaccia “di base” con il sistema operativo.Le shell più diffuse:

sh: Bourne shellcsh: C shellksh: Korn shelltcsh: Enanched C shellbash: Bourne Again shell

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 40

Breve Intro: Come si usa ?

Dove sono i files ?In un filesystem organizzato gerarchicamente in direttori e files. L’albero gerarchico (“tree”) nasce da una radice (“root”). Il nome della root è un singolo carattere: /I direttori sono files che contengono altri direttori e files. Sono dei files che contengono le informazioni sul loro contenuto: “filenames”Filenames. Sono i nomi (files) in una directory. I nomi possono contenere tutti i caratteri tranne lo “slash”: /, ed il “blanck” (non è più così ma sarebbe meglio evitarlo:

/usr/local/bin/mio_eseguibile_.exe/home/corsovme/.filenascosto/home/corsovme/prova.exe.old_version

Il punto iniziale definisce rende invisibile il file

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 41

Breve intro: Come si usa ?Come è fatto l’albero del filesystem ?/ -

|- /bin -- Ci sono tutti gli eseguibili indispensabili|- /boot -- Files necessari al boot del sistema|- /home -- Le home directories

|- /usr -- Tutto quello che serve ad un utente |- /usr/local binari, librerie, include files etc. etc. etc.|- /usr/bin|- /usr/lib|- /usr/include

|- /include -- Include files di sistema|- /lib -- Librerie di sistema e moduli dei driver|- /etc -- Files di configurazione del sistema|-……….

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 42

Breve intro: Come si usa ?

Come mi muovo nel filesystem ?cd : change directoryls : list directory

Come posso sapere cosa c’è nei files ?cat : mostra tutto il contenuto di un file sullo standard outputmore, less: mostra il contenuto di un file sullo standard output in pagine del formato del terminaleeditandoli !!!

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 43

Breve intro: Come si usa ?

Editors:nano, pico : semplici editors alfanumericiemacs, xemacs: “more than editors: a way of life”vi: no comment !

ManualisticaTutta online, arriva con il sistema:

man : il manuale di unix, diviso in 8 capitoli “omnicomprensivo”info : il sistema di documentazione per ipertesti della GNU.

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 44

Breve intro: Come si usa ?

Cominciamo !!!!

Sulla vostra macchinaUsername: utentePassword: utente

Create dei direttori con i vostri cognomi:

mkdir my_last_name

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 45

Breve intro. Alla programmazione

Quali sono gli strumenti per compilare ?gcc. La suite di compilazione della GNU: GNU Compiler Collection

cpp: il precompilatoreas : l’assemblatoreld : il linker

…….

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 46

Breve intro. Alla programmazione

Quali sono gli strumenti per controllare ?gdb: Il debugger gnuddd: Front end grafico al gdb….. gprof: “profiler” della GNU

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 47

Breve intro. Alla programmazione

Dove sono le librerie ?Di solito in /lib, /usr/lib, /usr/local/libPossono essere ovunque. (parameteri -L –l)

…. E gli include ?Idem come sopra, nei corrispettivi direttori: include

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 48

Breve intro. Alla programmazioneCome si usa la shell ?

Una volta entrati nel computer, si presenta con un prompt, ovvero una stringa di caratteri ed attende un nostro comando. Un comando è di solito un serie di parole che descrivono:

Il comando che voglio eseguireLe opzioni con cui voglio eseguire il comandoIstruzioni per l’Input/Output (I/O)

caf@pcwizard : > ls –l /home/cafagna > lista_files.txt

Prompt Comando OpzioniComando Istruzioni I/O

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 49

Breve intro. Alla programmazioneCome si usa la shell ?

Un applicativo eseguibile si esegue chiamandolo per nome:

/home/cafagna/prove_corso/my_first/usr/local/bin/mozilla/home/billy/test.exe./prova_classi

Programma eseguibile ?In Unix ai files vengono attribuite delle modalità di accesso. Un programma puo’ essere:

Letto (read): rScritto (write): wEseguito (execute): x

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 50

Breve intro. Alla programmazioneCome si usa la shell ?

Ogni uno di questi attributi può essere stabilito per tre categorie di utenti:

Tutto il mondo (others): o (Prime tre cifre)Il gruppo di appartenenza (group): g (Seconde tre cifre)Chi lo possiede (user): u (Terze )

Per poter eseguire il programma è necessario che la mia utenza abbia il permesso di eseguirlo: x

pamela@pcwizard ~ $ ls -l set_pam_env_sh -rw-r--r-- 1 pamela users 1977 Apr 18 2007 set_pam_env_sh

Comando di shell

Nome del fileData creazioneSize ByteOwner & GroupProtezioni

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 51

Breve intro. Alla programmazioneCome si usa la shell ?

Posso cambiare le protezioni dei file usando il comando: chmod

chmod 755 nomefilechmod u+x,o=r,g=r nomefilechmod a=rwx nomefile

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 52

Breve intro. Alla programmazioneCome si usa la shell ?

Ma non avevamo detto che per eseguire un programma bisogna chiamarlo per nome ?Ma ls ? Non è in: /bin/ls ?La shell usa delle variabili di ambiente per adeguarsi alle mie esigenze. In particolare (come nell’MS-DOS) esiste la variabile: PATH. La shell cercherà l’eseguibile nelle cartelle specificate in PATH.

.:/usr/bin:/bin:/usr/local/bin:/home/bin

I direttori sono separati da :

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 53

Breve intro. Alla programmazioneCome si usa la shell ?

Come posso modificare o creare le variabili di environment ? La grammatica del comando dipende dalla shell che usiamo.Per la bash e tutte le shell derivate da Bourne si usa il comando: export

export PATH=/usr:/usr/local/bin

Per quelle derivate dalla csh si usa il comando: setenvsetenv PATH /usr:/usr/local/bin

Per vedere il contenuto di una variabile si usa il comando:printenvLe variabili devono essere precedute da ‘$’ per poter essere distinte da una normale stringa:

echo $PATH PATH

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 54

Breve intro. Alla programmazioneCome si usa la shell ?

Come fa la shell a sapere quali valori dare alle variabili di ambiente ?Legge ed esegue i comandi contenuti i dei files ben precisi. Questi files devono essere contenuti nella “home” directory dell’utente altrimenti eseguirà dei files comuni presenti in /etc

.bash_profile, viene eseguito ogni volta che fate login

.bash_login, viene eseguito se non c’è il .bash_profile

.profile, viene eseguito se non c’è il .bash_login

.bashrc, viene eseguito ogni volta che si entra in una nuova shell.bash_logout, viene eseguito ogni volta che si esce dalla shell

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 55

Breve intro. Alla programmazioneCome si usa la shell ?

Questi files contengono dei comandi si shell che vengono eseguiti in sequenza. E’ possibile creare sequenze di comandi di solito detti scriptGli script di bash vengono tradizionalmente nominati con l’estensione sh .Gli script possono essere eseguiti usando il comando: source ( o il sinonimo ‘.’ )Se resi eseguibili possono essere eseguiti come altri eseguibili, i.e. chiamandoli per nome

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 56

Breve intro. Alla programmazioneCome si usa la shell ?

Oltre che attraverso le variabili di ambiente, posso personalizzare la mia shell attraverso la definizione di alias , ovvero sostituire a comandi lunghi o complessi dei nomi più facili da ricordare:

alias dir=‘ls –l |grep ^d’

Di solito vengono definiti nelle .bashrcEsistono delle variabili speciali che contengono le parole presenti in una linea di comando:

0, la prima parolan, la n-esima+1 parola

Esistono delle “wildcards”. Le più comuni:*, una qualsiasi string di caratteri?, un qualsiasi singolo carattere

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 57

Breve intro. Alla programmazioneCome si usa la shell ?

Ma cosa vuol dire ‘>’, “>>”, ‘<‘, ‘|’ ?I primi tre sono simboli di ridirezione dello standard outpute lo standard inputL’ultimo di “pipeline” tra due programmiRidirezione dello standard output ed input ?

Come faccio se non voglio che il mio output vada a finire sul monitor ?Come faccio se voglio dare delle opzioni o altro non dalla tastiera ?

cat < file_da_copiare > file_copiatoE se non voglio sovrascrivere il file ?

cat < file_da_copiare >> file_copiato

Se un programma è in grado di leggere dallo standard input posso fargli leggere l’output di un altro programma ?

Li metto in “pipe”cat file_da_copiare | grep –c echo

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 58

Breve intro. Alla programmazioneCome si usano i tools di compilazione ?

Si chiamano per nome e si cerca di usare le opzioni corrette:

g++ [OPZIONI] nomefile_da_compilare

Le opzioni di solito prendono la forma: Shortform: -’lettera’

g++ –g –c my_first.cpp

Longform: --’stringa’g++ --help

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 59

Breve intro. Alla programmazioneCome si usano i tools di compilazione ?

Le opzioni che useremo maggiormente: -v :be verbose-c :solo compilazione-o filename : nome del files si output-Ldirname : nome del direttorio dove cercare la librerie

(notare la mancanza di spazi)-llibname : nome della libreria da usare per il link (notare

la mancanza di spazi). Le librerie devono chiamarsi: liblibname.a o liblibname.so: libMath.so, libMyAnalysis.so corrispondono a –lMath -lMyAnalysis

-Idirname : nome del direttorio dove cercare gli “include” files (notare la mancanza di spazi)

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 60

Breve intro. Alla programmazione

Due parole su make:Determina automaticamente cosa va compilato e come, sulla base di dipendenze e regole che sono contenute in un file ASCII.L’azione da effettuare è chiamata “target”

Un target deve essere seguito da ‘:’Per ogni target è possibile specificare altri target da cui dipende.L’azione da effettuare deve essere preceduta da un simbolo di tabulazione

Ci sono delle regole implicite.Proviamo con: info make

F.S. Cafagna, Linguaggi di programmazione avanzati: C++ , XXIII ciclo 61

Breve intro. Alternative

E per chi ama Windows ?????Tutti i tools sono disponibili anche per WinProvate cygwin: www.cygwin.com

Fate prima, avrete a disposizione una completa suite di tools unix

Xemacs: www.xemacs.orgDev-c++, IDE (Integrate DevelopmentEnviromnent) per C++ in Win: www.bloodshed.net