http://www.linuxtrent.it/ Corso Linux Base -mini guida- Software Libero Il software libero è software rilasciato con una licenza che permette a chiunque di utilizzarlo e che ne incoraggia lo studio, le modifiche e la redistribuzione; per le sue caratteristiche, si contrappone al software proprietario ed è differente dalla concezione open source. La parola libero non implica la possibilità di utilizzare il software libero in maniera indiscriminata: il Software Libero è comunque soggetto ad una licenza d’uso, a differenza ad esempio del software di pubblico dominio. Rispetto al software proprietario, la licenza d’uso del software libero permette di: * eseguire il programma per qualsiasi scopo; * accedere alla struttura interna del programma (codice sorgente), studiarla ed eventualmente modificarla; * ridistribuirlo in un numero di copie illimitato. La licenza d’uso pone in genere i seguenti vincoli, di cui i principali sono: - gli autori precedenti del software devono essere menzionati anche nelle versioni modificate, lasciando intatto il loro copyright; - non è possibile applicare una licenza d’uso incompatibile con la licenza originaria o che vada contro le norme della licenza stessa. Per esempio chiunque può riemettere del software rilasciato sotto LGPL usando la licenza GPL (tale operazione è anche chiamata upgrade della licenza), mentre non è possibile fare il contrario (naturalmente se non si è il detentore unico del copyright); - normalmente, nella licenza, vi è una clausola che sancisce la non usabilità del software se non si rispetta la licenza d’uso o se una o più norme della stessa licenza non sono valide per termini di legge; - quando si distribuisce un binario occorre o distribuire insieme anche i sorgenti o garantire per iscritto la possibilità a tutti gli utenti di venirne in possesso dietro richiesta ed al solo costo del supporto Le “quattro libertà” Secondo Richard Stallman e la Free Software Foundation da lui fondata, un software per poter essere definito libero deve garantire quattro “libertà fondamentali”: * Libertà di eseguire il programma per qualsiasi scopo (chiamata “libertà 0”) * Libertà di studiare il programma e modificarlo (“libertà 1”) * Libertà di copiare il programma in modo da aiutare il prossimo (“libertà 2”) * Libertà di migliorare il programma e di distribuirne pubblicamente i miglioramenti, in modo tale che tutta la comunità ne tragga beneficio (“libertà 3”). I termini software libero e open source vengono usati per indicare quella che è sostanzialmente la stessa cosa, ma da punti di vista nettamente diversi. Il primo, nato agli inizi degli anni ottanta, indica software la cui licenza soddisfa una definizione in quattro punti prevalentemente basata su concetti etici, quali la possibilità di studiare, di aiutare il prossimo, di favorire la comunità; il secondo, nato alla fine degli anni novanta si riferisce alla Open Source Definition, a sua volta derivata dalle Debian Free Software Guidelines, ovvero una serie di 10 punti pratici che definiscono quali criteri legali debba soddisfare una licenza per essere considerata effettivamente libera, ovvero, con il nuovo termine, open source. GNU/Linux Linux è un termine che può assumere più di un significato. A seconda del contesto infatti può indicare il kernel originariamente sviluppato da Linus Torvalds, oppure il sistema operativo basato su tale kernel. Siccome il sistema operativo basato su Kernel Linux include molto software GNU, la Free Software Foundation insiste nell’affermare che per indicarlo bisognerebbe usare il termine “GNU/Linux”, tuttavia l’accezione della parola “Linux” come nome dell’intero sistema operativo è ormai entrata da tempo nell’uso comune, sia in ambito tecnico/scientifico che in ambito popolare. Per indicare il sistema operativo basato su kernel Linux, si possono quindi utilizzare indifferentemente il termine “GNU/Linux” o il termine “Linux”. Molto conosciuto nell’uso server, Linux gode del supporto da società come IBM, Sun Microsystems, Hewlett-Packard, Red Hat e Novell, ed è usato come sistema operativo su una gran varietà di hardware; dai computer desktop ai supercomputer, fino a sistemi embedded come cellulari e palmari. Linux è un derivato dell’architettura UNIX/AIX, Solaris, HPUX e altri, strutturato per essere compatibile con le specifiche di POSIX e inoltre raccoglie librerie provenienti dai sistemi System V e BSD. Il cuore di Linux è per definizione il Kernel, ovvero il nucleo principale del sistema operativo in grado di eseguire operazioni Multitasking e Multiutente. Il primo kernel è stato creato nel 1991 dallo studente finlandese Linus Torvalds, da qui il sistema operativo prende il nome Linux (Linus), “x” come Unix. La prima release del kernel della serie 2.2.x è stata rilasciata nei primi di febbraio del 1999. Il kernel Linux è in continua evoluzione ed è possibile scaricare gli ultimi sorgenti del kernel sia nella versione stabile (avente numero pari), che nella versione di sviluppo (avente numero dispari) direttamente dal sito ww.kernel.org In tutto il mondo sono tanti gli sviluppatori/programmatori che contribuiscono al mantenimento di del sistema operativo, questo è stato sicuramente uno dei fattori determinanti per la diffusione di Linux. Distribuzioni Linux Introduzione Per distribuzione, si intende una raccolta di programmi precompilati sotto forma di pacchetti che facilitano l’installazione di un sistema operativo GNU/Linux. Oggi, risulta particolarmente difficile scegliere una distribuzione piuttosto che un’altra, in quanto esistono moltissime distribuzioni, circa 200, ciascuna con particolari caratteristiche ideate per specifici target di applicazione e tipologie di utenti. Al fine di poter rendere facile uno dei primi approci al mondo di linux, quale la scelta della distribuzione, elencheremo solo alcune delle distribuzioni Linux più conosciute ed utilizzate. CentOS - http://www.centos.org E’ una distribuzione derivata dai sorgenti di RedHat e destinata a tutti coloro che desiderano la stabilità di un sistema operativo enterprise senza il costo del supporto e delle certificazioni. Caldera SCO - http://www.sco.com E’ stata una tra le prime distribuzioni commerciali, con la sua OpenLinux rilasciata in due differenti versioni, una dedicata ai server e una invece adattata all’utenza desktop. Debian - http://www.debian.org Debian si presenta con più di 15000 pacchetti ed è una delle distribuzioni gratuite più conosciute. Uno dei particolari di questa distro è la selezione granulare dei pacchetti forniti e del rinomato tool di gestione dei pacchetti “apt”. Gentoo - http://www.gentoo.org E’ una particolare distribuzione Linux basata sul sistema Portage scritto interamente in python, il quale offre molte caratteristiche che rendono Gentoo ancora migliore. Molte di queste comprendono tool software che migliorano le prestazioni, l’affidabilità e la sicurezza. Fedora - http://fedora.redhat.com/ Fa parte del progetto Open Source sponsorizzato da RedHat. E’ una delle distribuzioni più utilizzata, intuibile e comunque può contare sull’eredità lasciatagli da RedHat. Inoltre esiste una grande comunità che opera ogni giorno per il mantenimento del progetto. Non è un prodotto supportato da Red Hat, Inc. Mandrake/Mandriva - http://www.mandrivalinux.com Fu una delle prime distribuzioni concepita con l’obbiettivo principale di facilitare il processo di installazione del sistema operativo all’utente finale. E’ una buon punto di partenza per chi desidera avvicinarsi per la prima volta al mondo di linux. RedHat - http://www.redhat.com RedHat è stata una delle più celebri distribuzioni Linux fondata nel 1994, che ha fatto la storia e che con l’andare del tempo è diventata quasi uno standard, offrendo svariati tools ottimizzati per una gestione del sistema davverro intuibile. Oggi, RedHat, offre soluzioni commerciali sia a livello Enterprise che Desktop con un efficentissimo servizio di supporto avanzato. RedHat fornisce servizi di Training. Le certificazioni RedHat sono le più accreditate e rispettate, basate sulle conoscenze pratiche e riconosciute nell’intero settore IT. Slackware - http://www.slackware.com E’ stata una delle prime distribuzioni Open Source ideata e sviluppata da Patrick Volkerding ed è la più utilizzata dai puristi e dai più esperti. Per chi desidera approfondire i funzionamenti e la natura di un sistema Linux puro questa è la distribuzione più indicata. Suse - http://www.novell.com/linux SuSE Linux, acquistata nel 2003 da Novell Inc, è una distribuzione commerciale molto curata ed orientata al mercato Enterprise e Desktop. Non passa certo inosservato il famigerato tool YAST, per l’amministrazione del sistema. Recentemente è stata rilasciata OpenSuSE, una versione gratuita scaricabile da http://www.opensuse. org Ubuntu - http://www.ubuntu.com E’ un progetto Open Source, basato sul core Debian che sta avendo tantissimo successo. Il processo di installazione è molto simile, se non uguale, a quello Debian e comunque facile da installare anche per i principianti. Il desktop manager è basato su Gnome, per gli amanti di KDE è stata rilasciata la versione Kubuntu http://www.kubuntu.org Kernel Le varie parti di un sistema operativo Un sistema operativo UNIX consiste di un kernel ed alcuni programmi di sistema. Ci sono anche alcuni programmi applicativi con cui si fa il vero lavoro. Il kernel è il cuore del sistema operativo: tiene traccia dei file sul disco, avvia i programmi e li fa girare contemporaneamente, assegna la memoria ed altre risorse ai vari processi, riceve e manda i pacchetti alla rete, e così via. Il kernel fa pochissime cose da solo, ma fornisce gli strumenti con cui si possono costruire tutti i servizi; evita anche che chiunque acceda all’hardware direttamente, forzando tutti a utilizzare gli strumenti che fornisce: in questo modo protegge gli utenti l’uno dall’altro. Gli strumenti forniti dal kernel vengono usati attraverso chiamate di sistema. I programmi di sistema usano gli strumenti forniti dal kernel per implementare i vari servizi richiesti per un sistema operativo. I programmi di sistema, come tutti gli altri programmi, girano `sopra al kernel’, in quello che viene chiamato modalità utente (user mode). La differenza tra i programmi di sistema e i programmi applicativi è lo scopo: le applicazioni sono concepite per fare delle cose utili (o per giocare, se si tratta di un gioco), mentre i programmi di sistema servono per fare funzionare il sistema stesso. Un word processor è un’applicazione, telnet è un programma di sistema. La differenza è comunque spesso non definita, ed è importante solo per chi è abituato a dividere tutto in categorie. applications kernel CPU memory devices Il kernel di Linux consiste di diverse parti importanti: la gestione dei processi, la gestione della memoria, i driver per i dispositivi hardware, i driver per i filesystem, la gestione della rete ed altre parti minori. In Figura ne sono mostrati alcuni. Probabilmente le parti più importanti del kernel (nient’altro funziona senza di esse) sono la gestione della memoria e dei processi. La gestione della memoria si occupa di assegnare le aree di memoria e di spazio di swap ai processi e a parti del kernel, e per la cache di buffer. La gestione dei processi crea i processi ed implementa il multitasking cambiando il processo attivo sul processore. Shell In un sistema operativo, la shell è il programma che permette agli utenti di comunicare con il sistema e di avviare i programmi. È una delle componenti principali di un sistema operativo, insieme al kernel. La shell è l’”ambiente di lavoro” attraverso il quale è possibile impartire al computer comandi, richiedendo l’esecuzione di programmi. Esistono molti tipi di shell, che si dividono principalmente in testuali e grafiche. Quando si parla semplicemente di “shell”, si intende di solito una shell testuale. Shell grafica L’evoluzione grafica delle shell è rappresentata dalle cosiddette GUI (Graphic User Interface, interfacce grafiche utente), che hanno una rappresentazione dei dati pensata per essere molto più vicina al modo di percepire il mondo da parte degli essere umani. Con le GUI il computer e il suo contenuto non sono più rappresentati da linee di testo, ma da icone e finestre che permettono di fare operazioni complesse con un clic del mouse. Il limite delle GUI è il loro alto consumo delle risorse di calcolo del computer: sono più pesanti e in rete possono essere gestite da remoto solo a discapito di prestazioni ed eleganza. Molti utenti esperti, inoltre, le ritengono meno efficienti (ad esempio perché per svolgere compiti ripetitivi possono essere di grandi aiuto le capacità di scripting che molte shell testuali incorporano) e meno flessibili. Le shell grafiche sono state sicuramente un passo avanti per l’iterazione uomo-macchina, ma quelle a riga di comando non possono essere sostituite per la loro potenza e velocità d’uso. Shell testuale La shell testuale è un ambiente di lavoro che funziona ‘a riga di comando’, con istruzioni testuali che vengono impartite attraverso la tastiera per avviare programmi, eseguire comandi, visualizzare il file system, interagire in ogni modo con il computer. Un programma viene invocato digitando il suo nome, eventualmente seguito da altri dati, che vengono passati come argomenti al programma. Completata una riga di comando, si preme invio per richiederne l’esecuzione. Sono inoltre presenti potenti strumenti per collegare tra loro diversi programmi per svolgere compiti complessi, come le pipe e la redirezione. Pacchetti Un Sistema di gestione dei pacchetti è una collezione di strumenti che automatizzano il processo di installazione, aggiornamento, configurazione e rimozione dei pacchetti software di un computer. Il termine è particolarmente utilizzato in Linux, dato che questi sistemi poggiano molto più pesantemente su di esso, con migliaia di pacchetti in una sola normale installazione. In tali sistemi, il software è distribuito in pacchetti, generalmente incapsulati in un singolo file. I pacchetti spesso includono anche altre importanti informazioni, come il nome completo, versione, e fornitore del software, informazioni sul checksum, ed una lista di altri pacchetti, conosciuti come dipendenze, che sono necessarie al software per funzionare correttamente. I sistemi di gestione dei pacchetti sono incaricati del compito di organizzare tutti i pacchetti installati in un sistema e mantenere la loro usabilità. Questi sistemi raggiungono questo scopo usando varie combinazioni delle seguenti tecniche: * Verifica del checksum dei file per evitare differenze tra le versioni locali ed ufficiali di un pacchetto; * Semplici strumenti per l’installazione, l’aggiornamento, e la rimozione; * Gestione delle dipendenze per la distribuzione del software funzionante da un pac chetto; * Controllo degli aggiornamenti per fornire le ultime versioni dei software, che spesso includono riparazioni di difetti ed aggiornamenti di sicurezza; * Raggruppamento di pacchetti a seconda della funzione per aiutare l’utente ad eli minare la confusione durante l’installazione ed il mantenimento. RPM, il gestore di pacchetti RPM. Introdotto da Red Hat, ma oggi utilizzato da molte altre distribuzioni Linux. RPM è il formato base standard per la pacchettizzazione di Linux. Ci sono molti strumenti di alto livello che utilizzano il sistema RPM, semplificando il processo di ricerca, scaricamento ed installazione di pacchetti e delle loro dipendenze, inclusi: * * YUM usato in Fedora Core. * * up2date, usato in Red Hat Enterprise Linux. Sebbene progettato per dialogare con la rete Red Hat Network, up2date può anche utilizzare pacchetti con sorgenti yum ed apt con repository RPM. * * YasT*, utilizzato su distribuzioni Linux SUSE. * * urpmi utilizzato da Mandrakelinux. * * Advanced Packaging Tool (APT) per RPM. * * dpkg, utilizzato originariamente da Debian GNU/Linux ed ora anche da altri sistemi. Il formato .deb utilizzato da dpkg fu il primo ad avere uno strumento per la risoluzione delle dipendenze largamente conosciuto, chiamato APT. L’unico in grado di gestire i pacchetti .deb è APT Repository Un repository è un archivio di pacchetti .deb (quelli tipici Debian), che presenta una struttura ben definita, molto simile a quella che si trova all’interno di uno dei CD di installazione. Come si installano i pacchetti Tutte le distribuzioni hanno tools pensati per l’installazione o l’aggiornamento di programmi: Suse ha Yast (sia testuale che grafico) Mandrivia ha rpmdrake o (testuale) urpmi, Fedora ha Yum (testuale) con Yumex e/o Kyum (grafici) Debian ha apt (testuale) e synaptic (grafico) Gentoo ha emerge (testuale) e Kuroo (grafico) Slackware ha swaret (testuale). Bisogna avere l’accortezza di scaricare ed installare i pacchetti che servono dalla propria distribuzione, e solo da quella. Così facendo si ha la certezza del loro corretto funzionamento. Filesystem Il file system Linux, ha una struttura ad albero la cui radice (root) viene rappresentata dal carattere ‘/’ il quale contiene a sua volta altre sottodirectory di sistema. / - è la root directory del filesystem, tutte le altre sono sub-directory. /bin - Contiene gli eseguibili in formato binario. /boot - All’interno di questa directory, troviamo l’immagine del kernel (vmlinuz), l’immagine ramdisk per il precaricamento moduli dei block device, il file di configurazione del kernel e i file di configurazione del boot loader GRUB. /dev - Contiene i file indispensabili al sistema per l’indirizzamento delle periferiche. /etc - Contiene tutti i file di configurazione del sistema, delle periferiche, dei servizi, degli account, delle password, di avvio, di rete e altri file di configurazione. /home - E’ per default la directory dove risiedono le home dir degli utenti di sistema. /lib - Contiene le librerie utilizzabili dai file eseguibili e dal kernel. /mnt - E’ la directory utilizzata per il mount point dei device rimovibili come cd-rom, floppy drivers, pendrive usb, etc. /media - Come mnt, rappresenta il mount point dei device rimovibili come cd-rom, floppy drivers, pendrive usb, etc. /opt - Solitamente contiene i programmi installati dagli utenti o software di terze parti. /proc - Contiene diverse sottodirectory all’interno delle quali si trovano file creati dal sistema riportanti statistiche sul sistema e del kernel. /root - La home-directory di root ossia dell’amministratore di sistema. /sbin - Qui troviamo tutti gli eseguibili di sistema e i programmi utilizzabili soltanto dall’utente root (super-user) per la gestione e amministrazione del sistema. /tmp - Contiene i file temporanei creati dal sistema e dalle applicazioni. Quasi tutte le distribuzioni ripuliscono parte dei file contenuti all’avvio del sistema. /usr - Questa directory contiene i programmi utilizzabili da tutti gli utenti, comandi e utility di amministrazione ed è sicuramente una delle più importanti in quanto gran parte del sistema vi risiede all’interno. Osservando il contenuto di questa, si nota subito che somiglia molto alla directory / in quanto contiene le directory bin, etc, lib, sbin, etc. Analizziamo le subdirectory più importanti. /usr/include - Qui si trovano i file d’intestazione utilizzati dal compilatore C. /usr/local - Un buon amministratore di sistema installa qui i propri software. /usr/man - Contiene il manuale di sistema. /usr/share - Contiene alcuni file richiamati dalle applicazioni di sistema. /var - E’ la directory dei cosiddetti dati variabili. Qui i programmi di sistema registrano le informazioni di runtime, creano file di cache, di controlllo utente e di spool. Gruppi e Utenti Linux è un sistema operativo multiutente e multigruppo, dove ogni utente ad eccezione di root, ha dei limiti di accesso ad alcune porzioni di filesystem. Ogni utente può appartenere a uno o più gruppi. Questa struttura permette la gestione dei relativi permessi di lettura (r), scrittura (w) ed esecuzione (x) in maniera granulare consentendo ad un amministratore di assegnare i relativi permessi sia a livello utente che di gruppo e di terzi (other). Permessi Per visualizzare i permessi impostati su file e directory possiamo utilizzare il seguente comando: # ls -lh il risultanto sarà qualcosa di simile: [1] drwxr-xr-- 2 root users 4,0K 18 mag 23:25 directory1 [2] -rw-r--r-- 1 root root 46K 6 dic 2006 filetest1 [3] -rw-r--r-- 1 root root 4,1K 8 dic 2006 filetest2 Come dimostra l’output del comando soprastante, abbiamo una directory chiamata “directory1” sulla riga [1] e due file rispettivamente “filetest1” sulla riga [2] e “filetest2” sulla riga [3]. Vediamo di comprendere meglio il significato di quanto riportato sulla riga [1]: d rwx r-x r-x 2 root root 4,0K 18 mag 23:25 directory1 d C1 rwx C2 r-C3 --C4 root C5 users C6 La riga [1] è suddivisa in sei colonne, da C1 a C6, per spiegare singolarmente il significato di questi campi: C1 C2 C3 C4 C5 C6 : : : : : : “d” quando presente, indica che questa è una directory e non un file, permessi assegnati all’utente proprietario, permessi assegnati al gruppo proprietario, permessi assegnati a tutti gli altri utenti diversi dall’ utente proprietario e dal gruppo, utente proprietario, gruppo proprietario. Cosa significano i caratteri “rwx”: r : permesso di lettura w : permesso di scrittura, modifica e rimozione x : permesso di esecuzione nel caso di un file e di accesso nel caso di una directory A questo punto descriviamo i permessi impostati sulla “directory1” del nostro esempio: La “directory1” appartiene all’utente “root” il quale hai i permessi di lettura (r), scrittura (w) ed accesso (x) come indicato nell’esempio “rwx” - tale directory appartiene anche al gruppo “users” ciò significa che un qualsiasi utente del suddetto gruppo ha soltanto i permessi di lettura (r) abilitati, come indicato nell’esempio “r--” - tutti gli altri utenti come indicato nell’esempio “---” non hanno alcun permesso abilitato, per cui non possono leggere, scrivere ed accedere la directory. File e Directory CD - Spostarsi in una directory, es. ‘/home/corsolinux’: # cd /home/corsolinux CD - Risalire di un livello, es. dall’interno della directory ‘/home/corsolinux’ a ‘/home’: # cd .. CD - Risalire di due livelli, es. dall’interno della directory ‘/home/corsolinux’ a ‘/’: # cd ../.. CD - Spostarsi sulla propria home directory: # cd CD - Spostarsi sulla home directory di un utente: # cd ~utente CD - Tornare sulla directory precedente: # cd PWD - Visualizzare il path(percorso) della directory di lavoro corrente: # pwd LS - Visualizzare il contenuto della directory corrente: # ls LS - Distinguere file e directory: # ls -F LS - Visualizzare i permessi, il proprietario, il gruppo, la dimensione, e la data di modifica: # ls -l LL - Molte distribuzioni fornisco il comando ‘ll’ come alias di ‘ls -l’: # ll LS - Visualizzare file e directory nascoste: # ls -la LS - Visualizzare in ordine di modifica: # ls -lat MKDIR - Creare una cartella denominata corsolinux: # mkdir corsolinux MKDIR - Creare una sottodirectory chiamata ‘subdir’ dentro la directory ‘mia_dir’: # mkdir mia_dir/subdir MKDIR - Creare un’intera gerarchia di directory nidificate con un solo comando: # mkdir -p corsolinux/amministrazione/comandi_utili MKDIR - Creare contemporaneamente due directory ‘dir1’ e ‘dir2’ con un solo comando: # mkdir dir1 dir2 RM - Cancellare la directory ‘dir1’: # rm -rf dir1 MV - Spostare (o rinominare) un file (o una directory) da filetest1 a file_nuovo: # mv filetest1 file_nuovo CP - Crea nuova copia del file ‘filetest1’ chiamandolo ‘copia_filetest1’: # cp filetest1 copia_filetest1 CP - Copiare le directory nidificate dentro ‘dir1’ all’interno della directory ‘dir2’: # cp -r dir1/* dir2/ CP - Copia ricorsiva di una directory contente subdirectory: # cp -r dir1 dir2 CP - Preservare i permessi e le proprietà di directory e/o file durante una copia utilizzando l’opzione ‘-p’: # cp -rp dir dir2 Come trovare aiuto Quasi tutti i programmi quando vengono installati, installano anche le proprie pagine man e info contenenti la descrizione del programma, il modo di utilizzo, le opzioni e altre informazioni. Per leggerle basta aprire konsole e digitare: man nome_programma oppure info nome_programma Da Konqueror basta digitare nella casella dell’indirizzo: man: nome_programma oppure info: nome_programma (ricordarsi i due punti) Altre preziose fonti di informazioni sono date dalla comunità di utilizzatori e sviluppatori, dai Forum di Linux, dai LUG (Linux User Groups) italiani, dove è anche possibile incontrare altri utenti di Linux, dagli HowTo (che ogni distribuzione installa). In rete si trova sempre aiuto. Questo manuale è rilasciato sotto licenza Creative Commons 2.5 Italia License. http://creativecommons.org/licenses/by-nc-sa/2.5/it/ Testi tratti da www.wikipedia.org e www.linuxguide.it. Linuxtrent Il LinuxTrent è una associazione senza fini di lucro che promuove il Software Libero nella realtà della regione con un occhio di riguardo alle scuole e alla pubblica amministrazione. Dal punto di vista organizzativo, il LinuxTrent è una sezione dell’Associazione Polisportiva Oltrefersina di Pergine. http://www.linuxtrent.it/