Elementi introduttivi al sistema operativo UNIX (LINUX) Standard Unix: IEEE POSIX. Standard Unix: ANSI. Standard Unix & Implementazioni



Documenti analoghi
Capitolo 1,2 -- Stevens

Laboratorio di Sistemi Operativi II Semestre - Marzo/Giugno 2007

GDB. The GNU Debugger

NOZIONI BASE SHELL E SCRIPT LINUX

Introduzione a GCC: GNU Compiler Collection

Il web server Apache Lezione n. 3. Introduzione

NOZIONI BASE PER ESERCITAZIONI

Il software del PC. Il BIOS

Terza lezione: Directory e File system di Linux

Università degli Studi di Verona. Linux Ubuntue ilcompilatorec. Dicembre Sergio Marin Vargas. Dipartimento di Biotecnologie

COMPILAZIONE DI UN APPLICAZIONE. 1) Compilare il file (o i file se più d uno) che contengono il testo del programma. compilatore

Le Interfacce Grafiche

Tutorial sugli ambienti di sviluppo: Eclipse e NetBeans

Informatica. Il software (S.O.) e ancora sulle basi numeriche

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. "Generate debugging information"

Introduzione a Dev-C++

Laboratorio di Programmazione

PAD: istruzioni di laboratorio

Organizzazione di Sistemi Operativi e Reti

ISTRUZIONI XCODE. Autore: Luca Florio (luca.florio<at>polimi.it)

Breve guida a Linux Mint

PORTALE CLIENTI Manuale utente

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

GUIDA ALLA PROGRAMMAZIONE GRAFICA IN C

Esercizi su. Funzioni

IBM SPSS Statistics per Linux - Istruzioni di installazione (Licenza per sito)


Reti di Calcolatori PROTOCOLLO FTP. File. File Transfer Protocol Modello FTP Operazioni FTP Comandi del protocollo Esempi di Client FTP avanzati

Mac Application Manager 1.3 (SOLO PER TIGER)

Guida all utilizzo del compilatore lcc-win32 per creare una applicazione console

Reti di Calcolatori PROTOCOLLO FTP

Prima Esercitazione. Unix e GNU/Linux. GNU/Linux e linguaggio C. Stefano Monti smonti@deis.unibo.it

Corso ForTIC C2 LEZIONE n. 3

Come masterizzare dischi con Nero 11

Dipartimento di Sistemi e Informatica Università degli Studi di Firenze. Dev-C++ Ing. Michele Banci 27/03/2007 1

4 3 4 = 4 x x x 10 0 aaa

Il SOFTWARE DI BASE (o SOFTWARE DI SISTEMA)

APRIRE UN PROGRAMMA DI FOGLIO ELETTRONICO

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Alla scoperta della nuova interfaccia di Office 2010

Excel. A cura di Luigi Labonia. luigi.lab@libero.it

Corso di Laurea in Matematica. Seminario C/C++ Lorenzo Dusty Costa. Università degli Studi di Milano Dipartimento di Matematica

Comandi filtro: sed. Se non si specificano azioni, sed stampa sullo standard output le linee in input, lasciandole inalterate.

MODEM USB MDC525UP Guida Rapida LINUX

Programmare in Java. Olga Scotti

Usare Python in Linux

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

Eclipse - Nozioni Base

GLI SCRIPT DI SHELL. Lucidi a cura di B.De Carolis. UNIX shell script UdB- Dip Informatica

PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)

Il sistema operativo UNIX/Linux. Gli script di shell

Installazione LINUX 10.0

Biblioteca di Cervia NOZIONI BASE DI INFORMATICA

CONFIGURARE SAMBA 3 SU SUSE LINUX 9.1/9.2

Mini Guida per Apple XCode. Maurizio Martinelli

Corso ForTIC C2 LEZIONE n. 8. Cos'è la shell Le variabili d'ambiente L'uso della shell per la realizzazione di semplici script

1. PREREQUISITO: istallare nel supporto l applicazione MobileSheets della Zubersoft. Nella versione free o in quella completa.

Cos'é Code::Blocks? Come Creare un progetto Come eseguire un programma Risoluzione problemi istallazione Code::Blocks Che cos è il Debug e come si usa

RISOLUTORE AUTOMATICO PER SUDOKU

Workland CRM. Workland CRM Rel /11/2013. Attività --> FIX. Magazzino --> NEW. Nessuna --> FIX. Ordini --> FIX

LCMobile Restaurant. Guida su come usare il software per palmare LCMobile Restaurant.

Product Shipping Cost Guida d'installazione ed Utilizzo

ISTRUZIONI PER L INSTALLAZIONE DI MINGW

Utilizzo della Intranet, forum privati Soci e Staff

Procedura di installazione di Xubuntu 8.10 su un PC

Procedura per creare un archivio storico locale nelle 24 ore giornaliere

WG-TRANSLATE Manuale Utente WG TRANSLATE. Pagina 1 di 15

FtpZone Guida all uso

Guida all uso di Java Diagrammi ER

Il Sistema Operativo Linux

Questa guida è scritta per distribuzioni Debian/Ubuntu-like con l'attuale kernel : 2.6.xx. Per verificare l'attuale kernel linux, digitare

Veneto Lavoro via Ca' Marcello 67/b, Venezia-Mestre tel.: 041/ fax: 041/

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

Laboratorio di Informatica

GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.

Introduzione al MATLAB c Parte 2

MANUALE EDICOLA 04.05

Intel One Boot Flash Update Utility Guida dell utente

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Università degli Studi di Messina

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

Laboratorio di PROGRAMMAZIONE - a.a. 2010/2011

I Metacaratteri della Shell Unix

Innanzitutto andiamo sul sito ed eseguiamo il download del programma cliccando su Download Dropbox.

Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti

Introduzione a ROOT. 1. Informazioni generali

1.0 GUIDA PER L UTENTE

STAMPA DI UNA PAGINA SEMPLICE

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Editor vi. Editor vi

Manuale per la configurazione di AziendaSoft in rete

CdL in Medicina Veterinaria - STPA AA

Benvenuti/e.

Con accesso remoto s'intende la possibilità di accedere ad uno o più Personal Computer con un modem ed una linea telefonica.

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

POSTA ELETTRONICA Per ricevere ed inviare posta occorrono:

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Dott.ssa Michela Nelli. Dott.ssa Ilaria Giannelli. Dott. Francesco Pennasilico. Aggiornato al 03/06/2013

Il programmatore che c e in noi Lezione 12 Statements

Transcript:

Impossibile visualizzare l'immagine. Elementi introduttivi al sistema operativo UNIX (LINUX) Standard Unix & Implementazioni Capitolo 1,2 -- Stevens 1.2 Standard Unix: ANSI Standard Unix: IEEE POSIX American National Standards Institute: venditori + utenti Membro dell' International Organization for Standardization 1989: ANSI C per la standardizzazione del linguaggio C portabilità di programmi C ad una grande varietà di S.O. e non solo per UNIX Definisce non solo la semantica e la sintassi ma anche una libreria standard divisa in 15 aree (individuate dagli header, vedi fig. 2.1) Institute of Electrical and Electronic Engineers propose una famiglia di standard Portable Operating System Interface Lo standard 1003.1 relativo a interfacce di s.o.: definizione di servizi che un s.o. deve fornire per essere POSIX COMPLIANT Definisce una interfaccia non una implementazione Non è fatta distinzione tra system call e funzioni di libreria Non prevede la figura di superuser, ma certe operazioni richiedono appropriati privilegi 1.3 1.4

Standard Unix: XPG3 X/Open: gruppo di venditori di Computer Implementazioni: SVR4 System V Release 4 è stato prodotto dalla AT&T Hanno prodotto 7 volumi di una guida di portabilità X/Open Portability Guide, Issue 3 1989 SVR4 è conforme a POSIX e XPG3 Il II vol. definisce interfacce per un s.o. Unix-like, a partire da IEEE 1003.1, ma con variazioni (e.g. msg in varie lingue) 1.5 1.6 Implementazioni: 4.3+BSD Implementazioni: Linux Berkeley Software Distributions ( sono distribuite da UCB) Conforme allo standard POSIX Il primo kernel sviluppato da Linus Torvalds nel 1991 Conforme a POSIX, ma include anche la maggior parte di funzioni di SVR4 e 4.3BSD Benchè fosse inizialmente legato a codice sorgente AT&T e quindi alle sue licenze, è stata creata una versione (free) molto interessante per PC (intel based) FreeBSD Disponibile su Intel, Compaq (ex Digital), Alpha, Sparc, McIntosh e Amiga Free 1.7 1.8

Impossibile visualizzare l'immagine. Distribuzioni Linux Slackware Debian RedHat SuSe Mandrake Introduzione a Bash (Bourne Again Shell) Capitolo 1 -- Rosenblatt 1.9 Introduzione Introduzione Shell: Interfaccia con il sistema operativo Interfaccia testuale (command line - CLI ) L indipendenza della shell dal sistema operativo Unix ha portato ad una grande varietà si shell E un programma che interpreta comandi Viene eseguito quando facciamo login Termina al logout Bash e standard con Linux Altre shell: sh, tcsh, ksh sh (include reminiscenze di ALGOL) csh (usa una sintassi simile al C, prende comandi interattivi o programmi) tcsh (come la csh + permette di viaggiare su e giù per la lista dei comandi dati, spelling correction dei comandi ) bash 1.11 1.12

Bash: Introduzione Bash: introduzione Sviluppata, a partire dal 1988, nel progetto GNU progetto GNU: sviluppare una versione gratuita di UNIX GNU = Gnu's Not Unix (acronimo ricorsivo) open software, FSF login: rescigno passwd: Welcome to the system. bash> echo "la shell e' $SHELL, versione $BASH_VERSION" la shell e' /usr/local/bin/bash, versione 2.05.0(1)-release bash> logout Good bye. login: copyleft : software sotto copyleft e distribuito gratis con il codice sorgente e deve essere mantenuto tale non si puo' vendere software preso gratis Digitiamo il comando su una linea La shell intrerpreta la linea di comandi digitata Steve Bourne ha scritto una delle prime shell per UNIX (1979): sh Bash: Bourne Again Shell, in tributo a S. Bourne... esegue i comandi L output del comando viene visualizzato su video 1.13 1.14 Bash: introduzione Comandi, argomenti e opzioni bash> sort n num_telefoni > num_tel.ordinati bash> lp d lp1 h file1 file2 file3 Il compito della shell: linea comandi: parole (stringhe) separate da spazi o TAB 1. separare i token del comando: sort, -n, num_telefoni, >, num_tel.ordinati 2. Determinare il significato dei token 1. sort comando da eseguire 2. -n e num_telefoni argomenti 3. > operatore di ridirezione 4. num_tel.ordinati nome del file per la ridirezione 3. Preparare il sistema in modo tale che l output vada nel file num_tel.ordinati La prima parola e il comando Il resto sono gli argomenti Gli argomenti sono spesso nomi di file, ma non necessariamente: mail rescigno Una opzione e un argomento speciale che impartisce istruzioni al comando, cioe modifica il comportamento di default A volte un opzione ha un proprio argomento 4. Cercare ed eseguire il comando sort 1.15 1.16

File e directory Un file può contenere qualunque tipo di informazione ed esistono file di differenti tipi File regolari = contengono caratteri leggibili File eseguibili = sono invocati come comandi Directory = sono dei contenitori in cui sono presenti altri file od anche altre sottodirectory Filesytem gerarchico root / Nomi di file speciali: dot. dot dot.. File e directory / home bin etc tmp rescigno ls cd file.c Pathname: sequenza di zero o più nomi di file separati da / pathname assoluto: pathname che descrive la posizione di un file nel sistema a partire dalla root Es: /home/rescigno/file.c pathname relativo: pathname che descrive la posizione di un file nel sistema a partire dalla directory in cui siamo Es: rescigno/file.c 1.17 1.18 Directory current working directory (cwd) al login, cwd = home directory Conoscere la cwd: pwd Cambiare directory di lavoro: cd Tilde: ~: home directory ~user: home directory dell utente user Per avere l elenco dei file presenti nella cwd : ls Se si vuole conoscere l elenco dei file presenti in una specifica directory, si fa succedere ls dalla pathname della directory Directory file.c / home bin etc tmp rescigno pwd cd [/home/user/rescigno]> cd pippo [/home/user/rescigno/pippo]> cd [/home/user/rescigno]> cd /usr/lib [/usr/lib]> cd ~ [/home/user/rescigno]> cd ~giuper [/home/user/giuper]> cd [/home/user/rescigno]> _ [/]> ls home bin etc tmp [/]> ls /bin pwd cd [/]> cd bin [/bin]> ls pwd cd 1.19 1.20

Impossibile visualizzare l'immagine. Collegare la chiavetta usb Digitare il comando dmesg Montare chiavetta usb Le ultime 2 righe indicheranno il nome del device assegnato dal sistema alla chiavetta [1786.271385] sbd: sdb1 [1786-271391] sd 2:0:0:0: [sdb] Attached SCSI removable disk In questo esempio il device è sdb1 Creamo uns directory sottole quale vogliamo montare la chiave usb mkdir ~/usbkey Montiamo la chiave usb sudo mount /dev/sdb1 ~/usbkey Per smontare Inserire nuovo utente Si può procedere andando in Impostazioni, cliccando poi si Account utente; come utente amministratore sbloccare (in alto a destra) e cliccare su + in basso a sinistra. Potete così inserire nome e password del nuovo utente Si crei l utente linux (passwd: linux1210) Il sistema assegna automaticamente un gruppo proprio a ciascun utente, ma è possibile cambiare il gruppo di un utente usando il comando vigr che consente di accedere al file /etc/group contenete tante righe quanti sono gli utenti e per ciascuno di essi mostra il nome ma anche il group id user:x:1000: linux:x:1001: 1000 nella riga di user e 1001 nella riga di linux indicano i rispettivi gruppi sudo umount /dev/sdb1 1.21 1.22 Modificare il gruppo Per modificare il group di linux e farlo diventare uguale a quello di user si può trasformare 1001 in 1000, oppure aggiungere la parola user alla fine della riga di linux Uscire digitando esc e poi :wq Si consigli di ripetere l operazione con il comando vigr s che modifica il file /etc/gshadow che deve essere identico al file /etc/group (in questo caso aggiungere la parola user alla fine della linea di linux) UNIX / LINUX ed il linguaggio C Uscire digitando esc e poi :wq 1.23

Tipi di dati primitivi gcc: il compilatore C sotto Linux Nel file header <sys/types.h> (come anche in altri header) sono definiti alcuni tipi di dati system-dependent chiamati tipi di dati primitivi Sono definiti utilizzando typedef I loro nomi finiscono in genere con _t La tabella 2.8 mostra i principali tipi di dati primitivi che useremo Supponiamo di aver scritto un programma C: prova.c Per compilarlo scriviamo gcc prova.c Questo produrrà nella directory corrente un file eseguibile a.out Se si vuole dare un nome specifico all eseguibile si utilizza l opzione o Esercizio: gcc prova.c o prova in Linux dove sono definiti? /usr/include/sys Questo produrrà nella directory corrente un file eseguibile prova Per mandare in esecuzione un file eseguibile prova oppure./prova 1.25 1.26 gdb: il debugger C sotto Linux gdb: comandi di base Per illustrare l utilizzo ed il funzionamento del debugger è comodo utilizzare un programma di esempio, con alcuni errori, e mostrare i vari comandi del debugger tramite i quali si può riuscire a capire l errore. Consideriamo uguali.c un programma che, date due stringhe per argomento, controlla se queste sono uguali. lanciamo l eseguibile con due stringhe uguali, si ha: /> uguali ciao ciao /> DIVERSI subito ci accorgiamo che qualcosa non va e lanciamo il debugger con il nome dell eseguibile Perché il debugger possa funzionare, è necessario compilare con l opzione g: /> gdb uguali gcc g uguali.c o uguali A questo punto si entra nella shell del debugger che viene comandato inserendo direttamente i comandi questa opzione istruisce il compilatore ad inserire all interno dell eseguibile una serie di informazioni addizionali necessari al debugger per maneggiare l eseguibile uguali, che potrà essere debuggato. /> gdb uguali GNU gdb 4.17.0.11 with Linux support Copyright 1998 Free Software Foundation, Inc.... (gdb) 1.27 1.28

gdb: comandi di base Una volta lanciato il gdb mostra il suo prompt: (gdb) la (numerosa) lista dei comandi può essere ottenuta tramite il comando help (specificando successivamente un sotto argomento) run, seguito dagli argomenti che intendiamo passare; in questo modo però il programma viene eseguito senza interruzioni, non dandoci la possibilità di vedere ciò che accade (gdb) run ciao ciao DIVERSI breakpoint, break seguito dal numero di riga del programma o dal nome di una funzione, inserisce un breakpoint, ovvero un particolare punto del programma che, quando incontrato dal gdb, mette in pausa l esecuzione del programma consentendo di inserire nuovamente comandi dalla command line sulla funzione main. Un breakpoint è un modo di segnalare al debugger di fermare l'esecuzione quando il programma arriva in quel punto (gdb) break main Breakpoint 1 at 0x8048643: file uguali.c, line 19. 1.29 Possiamo ora lanciare l eseguibile. il debugger si blocca arrivato alla funzione main, mostrando i suoi argomenti, e la prossima riga di programma che sarà eseguita. (gdb) run ciao ciao Starting program: /home/lorenzo/articoli/uguali ciao ciao Breakpoint 1, main (argc=3, argv=0xbffff834) at uguali.c:19 19 if ( uguali( argv[0], argv[1] ) ) A questo punto il programma è fermo, ed il debugger è in attesa di un comando. I principali comandi n, next - per avanzare alla successiva linea di programma senza entrare in sotto-funzioni s, step - per avanzare alla successiva linea di programma entrando nelle sotto-funzioni p, print - per visualizzare o assegnare il contenuto di una variabile l, list - per visualizzare il codice sorgente del programma sotto esame finish - per completare l esecuzione del programma sino alla fine della funzione corrente c, continue - per continuare l esecuzione del programma fino al prossimo breakpoint quit - per uscire dal gdb. gdb: comandi di base 1.30 gdb: comandi di base gdb: comandi di base (gdb) s uguali (s1=0xbffff98b "/home/lorenzo/articoli/uguali", s2=0xbffff9a9 "ciao") at uguali.c:8 8 l1 = strlen( s1 ) ; l2 = strlen( s2 ) ; L errore a questo punto è evidente: s1 ed s2 sono diversi; s1 non corrisponde con quello che volevamo fosse; in effetti gli argomenti veri e propri passati ad un programma iniziano dall'indice 1 dell'array argv quindi abbiamo capito l'errore e quindi possiamo modificare il programma (magari da un altro terminale): if ( uguali( argv[1], argv[2] ) ) Ricompilando e facendo girare il programma vediamo che esso gira correttamente in questo caso Rimanendo con un terminale con il debugger aperto, proviamo a lanciare su un altro terminale /> uguali ciao miao /> UGUALI 1.31 /> uguali ciao miao /> UGUALI A questo punto pensiamo che l errore sia nella funzione uguali, quindi togliamo il breakpoint dal main e lo mettiamo sulla funzione uguali e facciamo girare con run (gdb) delete 1 (gdb) break uguali Breakpoint 2 at 0x80485a6: file uguali.c, line 8. (gdb) run ciao miao The program being debugged has been started already. Start it from the beginning? (y or n) y...`/home/lorenzo/articoli/uguali' has changed; rereading symbols. Starting program: /home/lorenzo/articoli/uguali ciao miao Breakpoint 2, uguali (s1=0xbffff9a9 "ciao", s2=0xbffff9ae "miao") at uguali.c:8 8 l1 = strlen( s1 ) ; l2 = strlen( s2 ) ; 1.32

gdb: il debugger C sotto Linux (cont.) gdb: il debugger C sotto Linux (cont.) Eseguiamo ora il programma passo dopo passo con n 9 if ( l1!= l2 ) return 0 ; 11 for ( i = 1 ; i < l1 ; ++i ) 12 if ( s1[i]!= s2[i] ) 11 for ( i = 1 ; i < l1 ; ++i ) il test sulla prima lettera ('c' e 'm') sarebbe dovuto fallire ed invece ha avuto successo; possiamo visualizzare il contenuto di s1[i] col comando print (gdb) print s1[i] s1[i] = 105 'i a questo punto ci ricordiamo che il primo carattere in una stringa (vettore di caratteri) ha indice 0, e non 1: quindi dobbiamo far partire il ciclo for da 0 e non da 1. a questo punto ci ricordiamo che il primo carattere in una stringa (vettore di caratteri) ha indice 0, e non 1: quindi dobbiamo far partire il ciclo for da 0 e non da 1. (gdb) display s2[i] 1: s2[i] = 105 'i' 12 if ( s1[i]!= s2[i] ) 1: s2[i] = 97 'a' A questo punto il nostro programma funziona a dovere e possiamo uscire dal debugger con quit. (gdb) quit 1.33 1.34 gdb: analizzare un file di core Quando un programma crash di solito termina con l indicazione "Segmentation Fault (core dumped)" e viene generato il file core. Questi non è altro che una fotografia della memoria usata dal programma al momento in cui è stato terminato. Utilizzando gdb possiamo analizzare il file di core per localizzare l errore, per far cio si avvia gdb con il nome dell eseguibile, che in questo esempio chiamiamo crash, e core gdb crash core Lanciato il gdb appare subito l indirizzo di memoria dove è avvenuto l errore #0 0x40054b03 in?? () from /lib/libc.so.6 per capire quale funzione l ha causato viene usato il comando bt (backtrace) che stampa lo stack delle chiamate per raggiungere quel punto (gdb) bt #0 0x40054b03 in?? () from /lib/libc.so.6 #1 0x80484fc in copia (s=0xbffffc87 "crash") at crash.c:6 #2 0x804852e in main (argc=1, argv=0xbffffba0) at crash.c:14 In questo modo è facile capire che l errore è avvenuto al momento in cui è stata eseguita l istruzione alla linea numero 6 del programma crash.c 1.35