arthur

Utente Mitico
Autore del topic
5 Maggio 2009
8.204
0
Miglior risposta
0
La filosofia
Linux non è solo un sistema operativo ma anche un modo per concepire la programmazione e lo sviluppo del software. Tanto si sente parlare in questi periodi di Linux e di free software; il problema maggiore è che molti ne parlano perché qualcuno ne ha parlato loro, e spesso queste informazioni "tramandate oralmente" iniziano a circolare in maniera errata o con qualche tipo di "personalizzazione" che nulla ha a che vedere con ciò che in verità è la filosofia Linux.

Leggevo pochi giorni fa in un quotidiano locale questa definizione di free software: «Distribuire un software come 'free software' altro non vuol dire che rilasciarlo come freeware ma per i sistemi Linux» che si concludeva poi con: «[...] e le aziende possono prendere questo software per rivendelo ad ignari clienti». Partiamo da questi esempi per illustrare per sommi capi cosa sia effettivamente il free software.

In prima battuta, si può dire che un software rilasciato come free sia un software liberamente utilizzabile da chiunque senza alcuna restrizione, in forma sorgente o compilata; anche la distribuzione e la modifica dello stesso non sono vincolate sebbene, in caso di modifiche all'originale, ne debba essere sempre essere indicato l'autore.

Con queste poche righe, che spiegano per sommi capi cosa sia il software free (o libero), abbiamo già demolito le tesi errate citate poco sopra: il freeware ed il software libero hanno in comune soltanto la non onerosità del prodotto, ma il secondo è molto di più: spesso, anche l'autore del più misero programma freeware non ne fornisce i sorgenti, mentre grazie al software libero possiamo, se capaci ed interessati, leggere i sorgenti di programmi come Apache, sendmail e molti altri. Inoltre, il programma freeware non è modificabile, cosa che non avviene con il free software a patto che l'autore delle modifiche non reclami la paternità del software.

Prendiamo ora la fine della definizione sopra riportata: il software distribuito come free può essere venduto? La GPL (Generic Public License, Licenza Pubblica Generica), che definisce cosa sia e come debba essere trattato il free software, non lo nega affatto, sebbene ci siano delle clausole: non è in nessun caso possibile far sembrare il software come proprio solamente perché lo si vende e non si può vendere un software rilasciato come free con una differente licenza d'uso; per questo, gli utenti che sopra sono definiti "ignari" non lo sono affatto o, almeno, non dovrebbero esserlo!
Il consiglio è comunque di leggere per intero la GPL reperibile tramite qualsiasi motore di ricerca o, per chi abbia già Linux installato (o sia in procinto di farlo!), nelle directory di documentazione del programmi, solitamente /usr/doc/*. Una traduzione in italiano è reperibile sul sito di Open Press.

Adesso, come per tutte le cose, cerchiamo di ridimensionare il discorso: Linux non vive solamente di software libero, esistono anche realtà che scrivono software proprietario e non è sancito da nessuna parte che utilizzando Linux si debba utilizzare solamente software libero (software che comunque esiste anche per altri sistemi): pochi sono, in verità, gli esempi di software a pagamento o shareware: più spesso si vedono pacchetti etichettati come "non-free" per il fatto, ad esempio, di contenere algoritmi proprietari (si pensi al formato Gif, ad esempio); oppure perché tale software sia liberamente utilizzabile da privati ma non a scopo commerciale oppure sia distribuito solamente in forma binaria (come Netscape). Ma prendiamo l'esempio del software non utilizzabile liberamente per scopi commerciali: perché etichiettarlo "non free" quando per l'utente casalingo non lo è? Semplicemente, per il fatto di non essere attinente ai dettami della GPL, che indica software free il software che ha le caratteristiche viste sopra indipendentemente da chiunque ne faccia uso ed in qualsiasi situazione.

Le distribuzioni
Iniziamo anche questo capitolo predendo in esame uno dei più frequenti errori che si compiono: "Qual è l'ultima versione di Linux?" oppure "Quale versione devo installare?". Queste due frasi non hanno di per sé alcun senso, visto che non esiste una "versione di Linux", né tantomeno una che convenga installare al posto di un'altra. Ciò di cui invece ha senso parlare è, casomai, la versione del kernel di Linux e la distribuzione da installare. Se del primo ci interesseremo più avanti, le distribuzioni sono l'argomento che tratteremo in queste pagine.

Fare la solita lista delle distribuzioni ci sembra qualcosa di abbastanza inutile, ed abbiamo così deciso di illustrare per sommi capi solamente le distribuzioni più note; sappiate comunque che, oltre alle sei che citeremo ne esistono molte altre, alcune note altre praticamente sconosciute nel nostro paese.

Partiamo con un nome molto noto: RedHat. Questa distribuzione, che è alla base di moltissime altre distribuzioni, sembra essere una delle più complete nel panorama Linux anche se, per ciò che molti chiamano "commercializzazione", sembra che l'eccessiva fretta nel rilasciare nuove versioni con software aggiornato porti spesso ad un numero troppo alto di bug (errori del software) che risultano fastidiosi all'utente finale. Non va dimenticato comunque che, grazie al lavoro della casa produttrice nonchè degli utenti e degli sviluppatori, i bug riscontrati abbiano spesso vita molto breve.

Se RedHat è la distribuzione più nota a livello mondiale, Debian è la distribuzione che meglio incarna la filosofia del software open source. I cd ufficiali, infatti, contengono solamente software protetto da licenza GPL o equivalente, sebbene sia possibile avere anche un ulteriore cd contenente il software detto non-free (perché protetto da licenza proprietaria o perché, sebbene GPL, dipende da software non libero). Debian, oltre che un'ottima distribuzione è la dimostrazione di come con il solo software libero sia possibile allestire server completi e, negli ultimi periodi, anche avere un'ottima stazione di lavoro per i compiti di tutti i giorni. Un elemento penalizzante (a detta di molti, sebbene noi non ci troviamo d'accordo!) è la presenza di un tool di installazione gidicato troppo complesso e la mancanza di strumenti che rendano facili l'amministrazione del sistema.

Un'altra distribuzione molto nota ed utilizzata anche in Italia è la tedesca SuSE; questa distribuzione sembra davvero essere (Debian a parte) la distibuzione corredata dal maggior numero di applicazioni. Inoltre, cosa non di poco conto, è corredata di un tool (YAST, acronimo per 'Yet Another Setup Tool', ossia 'l'ennesimo tool di setup') che permette sia una facile installazione agli utenti poco esperti che una veloce amministrazione agli utenti più smaliziati, che comunque sembrano sempre preferire il lavoro fatto a mano.

Quarta distribuzione della nostra brevissima carrellata è Slackware, che si dice sia la preferita dai più esperti per la mancanza quasi totale di tools di configurazione: tutto questo lavoro deve essere svolto manualmente, vero incubo per gli utenti agli inizi! Il lato positivo è comunque che, se si sa come agire per configurare il sistema, si avrà sempre tutto sotto il massimo controllo.

L'ultima distribuzione è OpenLinux di Caldera: la particolarità di questa distribuzione è, oltre ad un setup semplificato ed assistito, il target a cui si rivolge. OpenLinux è infatti pensata come "distribuzione per l'ufficio" e viene fornita, al contrario di RedHat, di software non recentissimo (a meno di reali necessità) e per questo più testato e, almeno in teoria, privo di bug e sicuro. Per un uso domestico, comunque, ci sembrano più appropriate altre distribuzioni.

A questo punto abbiamo tracciato per sommi capi i profili delle distribuzioni più note: ma la sostanza è diversa da distribuzione a distribuzione? Certamente no, il cuore del sistema è sempre lo stesso kernel ed il software, sebbene possa essere più o meno recente, è sempre il medesimo; inoltre, nonostante la presenza di tools di configurazione e di amministrazione, è sempre possibile armarsi di editor ed andare a configurare a mano tutto il sistema.

Ma allora, cosa differenzia le distribuzioni? Spesso, una volta installate e configurate, veramente poco! Altre volte, invece, i file e le directory sono organizzati in maniera differente per scelta di chi produce la distribuzione (visto che nulla in Linux è imposto): ad esempio, gli script di inizializzazione del sistema (detti script di init, di cui ci interesseremo a breve) si possono trovare in /etc/init.d oppure in /etc/rc.local/init.d; ancora, determinate distribuzioni definiscono delle 'policy' per cui, ad esempio, la radice di tutte le librerie debba essere collocata in una determinata directory e via dicendo.

Una volta che si sappia come gestire il sistema, comunque, si riuscirà senza troppi problemi a destreggiarsi anche davanti a tali problemi per, ad esempio, un cambio di distribuzione o la reale necessità di lavorare con un sistema differente. Un'altra importantissima differenza fra le distribuzioni, lasciata in parte fino a questo momento, sono i pacchetti: ma ne parleremo nelle prossime pagine.

I Pacchetti
Quando si parla di pacchetti si intende un archivio di file contenente del software (compilato o in forma di sorgenti), pronto per essere installato sulla macchina in maniera, solitamente, quasi del tutto automatica; a differenza degli archivi contenenti i sorgenti, con i pacchetti precompilati non ci dovremo preoccupare di compilare ed installare il software, con tutte le opzioni del caso: chi ha creato il pacchetto è sicuramente una persona preparata e con un sacco di esperienza alle spalle; inoltre, il suo pacchetto sarà certamente stato testato prima di diventare scaricabile da tutti e, ultimo ma non meno importante, il pacchetto è molto più semplice da rimuovere. Il tutto sta, ovviamente, nel saper scegliere i pacchetti giusti!

I formati più utilizzati di pacchetto sono i ".deb" e i ".rpm": i primi sono utilizzati da distribuzioni come Debian e relative derivate, i secondi da RedHat e derivate (ma anche da SuSE).

Qui nasce il primo grande dubbio: un pacchetto di RedHat può essere installato anche su una SuSE e viceversa? In fondo, il formato del pacchetto è lo stesso! In genere, operazioni di questo tipo portano ad avere il software installato e funzionante, sebbene non siano troppo consigliabili.

Chiariamo il tutto con un esempio: utilizzate una SuSE e volete installare il pacchetto "abc.rpm" scaricato dal sito di RedHat: esistono alternative? Almeno due:
  • se il pacchetto esiste per una distribuzione, con grandissima probabilità esisterà anche per le altre, quindi basterà una ricerca sul sito di SuSE per vedere se anche loro hanno rilasciato tale software come pacchetto rpm;
  • dovesse non succedere, il software sarà certamente presente in formato sorgente, quindi basterà un po' di coraggio per compilarsi il pacchetto e, per i più stoici, potrebbe essere anche una buona scusa per creare il primo rpm fatto in casa! Pochi sono i programmi che non si possono ottenere in questo modo: spesso sono solamente i programmi di installazione e configurazione della distribuzione che, sebbene siano spesso forniti come codice sorgente, servono solo a fare danni se portati su altre distribuzioni.
Vediamo ora, in chiusura dell'argomento, come effettivamente si installino tali pacchetti. Per gli rpm, esiste un apposito programma di gestione chiamato con molta originalità, rpm (RedHat Packet Manager), la cui sintassi generale è: rpm [opzioni] pacchetto.rpm

In [opzioni] si può specificare cosa fare con il pacchetto: installarlo (-i), rimuoverlo ( e), aggiornarlo (-U), eseguire una "finta installazione" per controllare se tutto può essere realmente eseguito senza problemi (--test) ecc. Per la gestione dei pacchetti .deb esiste invece il programma dpkg, la cui sintassi di base è identica a quella di rpm; anche le operazioni (installazione, rimozione, query ecc.) di gestione del pacchetto sono pressochè le stesse.

Ma come sono fatti, si chiederà qualcuno, i pacchetti al loro interno? Chi abbia creato almeno una volta un pacchetto sa che non basta creare un archivio di file, ma serve qualcosa in più: se di base all'interno di un pacchetto la parte predominante sia l'archivio contenente i file necessari al programma, non si può dire che sia tutto qui! Un pacchetto contiene molte informazioni in più del semplice archivio: ad esempio, è presente in ogni pacchetto la descrizione del programma, la lista delle dipendenze che devono essere soddisfatte per la corretta installazione del software, le directory nelle quali devono essere copiati i file del programma e via dicendo. Un pacchetto, quindi, può essere visto come un archivio (contenente il software) accompagnato da una serie di informazioni per l'installazione (ma non solo: anche per la rimozione, per l'interrogazione ecc) del software stesso.

E il tutto in un solo file: potrà tornare utile come esempio il famoso "setup.exe" di moltissimi programmi scritti per sistemi Windows: in un file è contenuto il programma e le istruzioni per la sua installazione, sebbene un pacchetto per Linux sia molto più flessibile e completo!

I Bootloader
Prima di passare ad uno degli argomenti di maggiore interesse, ossia
l'installazione del sistema, è necessario spendere qualche parola sul bootloader.

Il bootloader è un piccolo programma utilizzato, come suggerisce il nome stesso, per il boot del sistema. Spesso si commette l'errore di identificare il bootloader con il programma che lo fornisce: prendendo come esempio il loader più utilizzato, LiLO (Linux LOader), si dice che questo sia il bootloader anche se in realtà non è propriamente così: LiLO (il programma) fornisce il bootloader.

Il funzionamento di un booloader è assai complicato ma lo si può sintetizzare e semplificare in poche fasi:
  • in un primo momento, il BIOS della macchina carica il bootloader;
  • questo, in seguito, carica il kernel del sistema o i "boot sectors" di altri sistemi operativi (come Windows) passando ad altri programmi la successiva operazione di boot (COMMAND.COM in Windows).
Ma dove risiede il bootloader? Molti l'avranno cercato in lungo e in largo per il proprio hard disk senza trovarne la minima traccia, altri ancora se lo saranno chiesti senza però indagare troppo sulla sua locazione. Ebbene, molto spesso il bootloader viene installato su una particolare zona del disco detta MBR (Master Boot Record), corrispondente ai primi 512 byte di un disco, che può essere divisa in due parti (sarebbero in verità tre ma per semplicità non consideriamo l'ultima): la zona del "Program Code", di 446 byte, e la "Partition Table", di 64 byte. La prima non è altro che la locazione dove fisicamente viene installato il bootloader, mentre la seconda, come il nome stesso suggerisce, è utilizzata per definire le partizioni presenti sul disco.

Adesso che per sommi capi abbiamo visto il funzionamento di un bootloader, vediamo quali sono i loader più utilizzati sotto Linux.

Primo fra tutti va citato certamente LILO, probabilmente il più diffuso ed affidabile, con il supporto per moltissimi tipi di filesystem. Nelle ultime versioni è stato corretto un bug che impediva a LILO di installarsi in dischi di determinate dimensioni, rendendolo quindi inutilizzabile con i moderni dischi di grande capacità.

Del tutto differente rispetto a LILO è LOADLIN, che permette di "arricchire" un normale boot di un sistema DOS (e quindi anche Windows!) in modo da riuscire ad avviare anche altri sistemi. Il funzionamento di LOADLIN, visto daun punto di vista non tecnico, è semplicissimo: nel file AUTOEXEC.BAT (o CONFIG.SYS) è inserita una chiamata a LOADLIN stesso e, tramite un file come BOOT.SYS che contiene i dati per i sistemi operativi da avviare, è possibile effettuare la scelta del sistema da avviare. Il vantaggio di LOADLIN si fa sentire quando si installa Linux su un disco che già ospita Windows: non è necessario ridefinire o modificare alcun settore di boot, visto che LOADLIN non va a scriverci ma è richiamato dopo che l'MBR è stato letto.

Una menzione a questo punto merita anche GRUB, un loader recente che, in pochissimi Kb, permette operazioni a dir poco stupefacenti. In primo luogo, la schermata di selezione del sistema da avviare non è più a caratteri, ma possiede una gradevole e semplice interfaccia grafica. Inoltre, è dotato di una minima shell che permette di "vedere" le partizioni (ma anche i singoli file!) addirittura prima che il sistema venga avviato! Questa operazione, sebbene non troppo adatta a chi sia alla prime armi, è utilissima per recovery o boot di un kernel non precdentemente specificato al momento della configurazione. Ultimo ma non meno importante, GRUB è distribuito con licenza GPL, a differenza di LILO.

L'installazione: introduzione
Eccoci finalmente giunti al momento focale: l'installazione del sistema, probabilmente uno dei momenti più traumatici per chi si avvicini per la prima volta ad un sistema operativo non-Microsoft (ma sarebbe meglio dire "Unix-like"!).

Sebbene questa sia complessa, comunque, non c'è troppo da spaventarsi: non occorre sapere ogni minima informazione sul proprio sistema, intesa come caratteristica dell'hardware installato, né bisogna essere degli esperti informatici per avere un sistema correttamente installato: alcune distribuzioni, infatti, sono venute talmente tanto incontro all'utente da permettere l'installazione con pochi click di mouse. Ed ecco che appare il primo problema: un'installazione troppo automatizzata è identica ad una curata manualmente nei minimi particolari? Purtroppo no, per ovvie ragioni.

Come esempio porto una mia esperienza con l'installazione di una di queste distribuzioni "a portata di utente".

Volevo un giorno provare una di queste fantomatiche "installazioni assistite" ritrovandomi con una partizione libera su disco, oltre alle partizioni native e di swap già create ed utilizzate. Al momento di installare il nuovo sistema, mi ritrovavo con la prima partizione già utilizzata, la seconda partizione di swap già creata ed utilizzata e la terza completamente libera: su quest'ultima volevo eseguire l'installazione, utilizzando la partizione di swap che già avevo a disposizione. Dopo le prime fasi di scansione del disco, il wizard mi propone di installare la nuova distribuzione sopra la vecchia: lo fermo sperando che non abbia già avuto la brillante idea di scrivere sulla partizione utilizzata e specifico a mano che la partizione che intendo utilizzare era la terza. Lui non sembra avere il minimo problema, ed alla fine mi ritrovo con la mia "terza partizione" spezzata in due: una che ospitava il sistema e l'altra, di 128 Mb ... di swap! Praticamente, 128 Mb sprecati.

Oltre a questo "piccolo" inconveniente, altri sono quelli che possono accadere con queste installazioni che cercano in tutti i modi di non richiedere l'intervento dell'utente: il consiglio è di utilizzarli nel caso disponiate di un disco completamente vuoto (se vi venisse ad esempio modificata la tabella delle partizioni di un disco che normalmente utilizzate sarebbero guai!), ma di tenerle sott'occhio nel caso abbiate un disco che intendete dedicare a più di un sistema. Inoltre, spesso questo tipo di installazione permette anche una modalità semi-automatica, che vi chiede di confermare le scelte fatte in maniera automatica dall'installer. Oppure, ripiegate su una distribuzione fra quelle "ostiche" che vi chiederanno come agire passo dopo passo: almeno, in caso di errori, sapete che è stato uno sbaglio vostro e non della macchina!

Indipendente dalla vostra scelta, comunque, nelle prossime pagine verrà vista una normale installazione nei suoi passi più importanti, dalla partizione del disco alla scelta del software da installare. Tutto questo, speriamo, per guidarvi in un'installazione il più indolore possibile, senza comunque vedere nel dettaglio l'installazione di ogni singola distribuzione.

Installazione: preparazione del disco
La prima cosa da fare per l'installazione del sistema è quella di preparare il disco fisso: nel caso abbiate un disco fisso intero da dedicare a Linux, molto di quanto descritto sotto non vi servirà; se invece avete un disco da dividere fra Linux e Windows, leggete con attenzione quanto segue.

In primo luogo, vediamo lo spazio che il sistema richiede: sebbene si riesca ad installare Linux anche su un 80Mb di disco, vale sempre la regola del "più ce n'è, meglio è!": in un Gb si inizia a stare comodi, ma per un'installazione completa con la prospettiva di iniziare a lavorare e quindi ad occupare spazio, 2Gb sono molto meglio. Se avete a disposizione uno spazio libero più grande, non esitate comunque ad utilizzarlo. Ricordiamo comunque che Linux ha bisogno anche di uno spazio di swap, ossia una partizione dedicata dove eseguire lo swapping della memoria, che normalmente i sistemi windows fanno in un file (Win386.swp): lo spazio per la partizione di swap può variare da pochi megabyte a qualche centinaio di megabyte. Una scelta ottimale può essere quella di creare una partizione di swap da 128 Mb, che in ogni caso farete fatica a saturare! Se comunque il vostro computer monta una buona quantità di RAM, potete rimpicciolire la partizione di swap fino anche a 32 Mb; questa scelta dipende sostanzialmente dallo spazio utilizzabile sul disco per questa partizione e dalla quantità di RAM montata sulla macchina, sebbene eccedere i 128 Mb sia spessissimo una scelta sconsigliata. Una nota per chi abbia una macchina con un grande quantitativo di ram (512 Mb e oltre): non fate la brutta scelta di non creare una piccola partizione di swap, piuttosto restringetela a 32 Mb.

Sistemato il discorso della RAM, passiamo alle partizioni da creare ed utilizzare per Linux: vale la pena in primo luogo specificare che Linux NON si installa su partizioni o, peggio, all'interno di una partizione Windows (sebbene esistano soluzioni che permettono di installare Linux all'interno di una normale partizione Ms-DOS, che ne rallenta enormemente le prestazioni), ma necessita di partizioni proprie: dimenticate quindi la FAT e iniziate a farvi "amico" il termine "ext2". Altra cosa da ricordare è che Linux, a differenza di Windows, non necessita di una partizione primaria, ma può essere installato anche all'interno di una partizione estesa.

Delineati questi aspetti, occupiamoci più da vicino della creazione delle partizioni: nel caso abbiate un disco non utilizzato da altri sistemi, il problema sarà minimo poichè durante l'installazione vi verrà chiesto (e a volte consigliato) come volete che sia diviso il disco. Il problema maggiore si incontra quando si debba dividere un disco già utilizzato per un altro sistema: assumendo che vi sia spazio libero a sufficienza, le strade che si aprono sono due: utilizzare il sempre buono Partition Magic, che ha una licenza commerciale ed è a pagamento ma che permette di creare, ridefinire e ridimensionare partizioni con grande semplicità, oppure utilizzare un piccolo programmma distribuito con licenza GPL chiamato 'fips' (e che ovviamente gira su sistemi windows!) che esegue lo stesso lavoro, sebbene non si presenti così intuitivo come il precedente. Vediamo quindi cosa occorre per lavorare con fips e come effettivamente lo si usa.

In primo luogo, accertatevi di avere spazio a sufficienza per l'installazione del nuovo sistema, tenendo in considerazione anche lo spazio di cui avrete bisogno per la partizione di swap. A questo punto, dovrete eseguire la deframmentazione del disco se, dalla schermata di defrag, notate che alcuni dati sono contenuti alla fine del disco fisso: eseguire la deframmentazione serve a scrivere tutti i dati all'inizio del disco, in modo che la parte restante, rimasta libera, possa essere ripartizionata; nel caso ci siano infatti dei dati alla fine del disco, fips non vi lascerà procedere poichè, creando una o più nuove partizioni, quei dati sarebbero eliminati, rischiando che il vecchio sistema non venga più eseguito correttamente, visto che Windows ha la pessima mania di inserire dati nevralgici alla fine del disco. Una volta che non vi saranno più dati alla fine del disco, potrete procedere con il partizionamento.

Perchè fips non rischi di corrompere il sistema attualmente in uso, è necessario che Windows non sia in esecuzione: sarà quindi necessario eseguire la procedura di arresto del sistema e, invece di scegliere "Arresta il sistema", selezionare l'opzione "Riavvia in modalità MS-DOS". A questo punto sarà possibile eseguire fips, che troverete nei cd della vostra distribuzione, solitamente nella directory "boot" o "dosutils"; il consiglio è comunque quello di copiare l'eseguibile di fips in un floppy, visto che difficilmente dopo il riavvio in modalità DOS il lettore cdrom verrà riconosciuto. Se non lo avete, fips è scaricabile da
Perfavore, Entra oppure Registrati per vedere i Link!
.

Una volta lanciato, fips eseguirà una scansione dei dischi rigidi presenti nel sistema, chiedendovi in quale abbiate intenzione di agire; successivamente vi verrà chiesta la partizione che vorrete restringere: se la vostra macchina monta un solo disco e su questo è presente solamente una partizione, non dovrete segliere alcunchè ma solamente confermare, altrimenti scegliete la partizione più idonea. Scelta la partizione, si potrà decidere la nuova dimensione (e quindi restringerla) con i tasti freccia e confermare la scelta con il solito tasto invio.
Data conferma dell'operazione, fips andrà a modificare la "partition table" di cui abbiamo parlato nelle pagine precedenti, restringendo la partizione originaria e lasciandovi dello spazio vuoto e non assegnato sul disco. Il consiglio, a questo punto, è di non creare le partizioni partendo dal vecchio windows: al momento dell'installazione di Linux avrete la possibilità di creare in modo semplice tutte le partizioni di cui avrete bisogno.

Nel caso invece scegliate di creare una nuova partizione, terminata l'operazione di partizionamento il vostro disco ospiterà ovviamente una nuova partizione che verrà utilizzata per l'installazione di Linux. Se comunque, dopo aver ripartizionato, riavviaste Windows, in "Risorse del Computer" vedreste una nuova unità alla quale non riuscirete ad accedere, ed il buon sistema vi chiederebbe di formattarla! Ovviamente formattarla in FAT (o NTFS) non avrebbe alcun senso, visto che andremo a breve a creare su tale spazio un nuovo filesystem! Una volta fatto, da Windows sparirà la nuova unità "fantasma", visto che questo non legge (almeno nativamente) le partizioni ext2.

Installazione: le partizioni
Nel paragrafo precedente vi è stato dato il consiglio di non creare al momento alcuna partizione, e subito dopo vi imbattete in un capitolo proprio dedicato alle partizioni; cambio di rotta? Assolutamente no! Quando andremo a vedere dettagliatamente l'installazione, vedremo come il sistema ci verrà incontro per la creazione delle partizioni, e non intendiamo fermarci a dare spiegazioni su quante partizioni creare, quanto grandi crearle eccetera: abbiamo preferito dedicare a questa parte del processo di installazione un capitolo a sé stante, così che il capitolo sull'installazione risulti il più lineare e scorrevole possibile.

Come già anticipato, avrete bisogno come minimo di due partizioni per installare il nuovo sistema Linux: una contenente i file del sistema stesso e delle applicazioni, l'altra per lo swapping, di dimensione massima di 128 MByte (più grande sarebbe quasi sicuramente uno spreco). Non sempre, comunque, un'installazione si esegue in solamente due partizioni: si tende spesso, invece, a creare un numero maggiore di partizioni su cui installare il sistema, per determinati motivi che in seguito vedremo.

Spessissimo si usa creare una partizione apposita per la directory contenente i file personali degli utenti: la dimensione può variare, ma come minimo 500 MByte andrebbero assegnati a tale partizione per permettere agli utenti di lavorare senza problemi di spazio. Separare in una partizione questa directoty (che risponde al nome di "/home", ma vedremo in seguito le directory principali del sistema e la loro funzione) può essere utile nel caso di una reinstallazione del sistema: se non commettiamo errori come la sovrascrittura accidentale, potremo reinstallare il sistema con le directory degli utenti già pronte e contenente quanto questi vi avessero scritto, visto che in fase di installazione il sistema non ha alcun bisogno di scrivere all'interno di tale directory.

A seconda della distribuzione, poi, possono essere create partizioni distinte per /usr, /usr/lib o /var: il vantaggio principale è, oltre ad una più comoda manutenzione, quello di snellire la partizione principale, identificata dalla directory chiamata "root directory" (quella che Windows identifica con C:emoji_slight_smile: ed identificata con una slash (/); non confondete la root directory con la directory di root: la prima è "/", la seconda è invece "/root", ed hanno ovviamente significato e valenza completamente differente.

Le dimensioni per le partizioni possono variare a seconda dello spazio disponibile, sebbene sia buona norma non creare mai partizioni troppo piccole per evitare che si saturino presto, soprattutto la partizione /usr che, assieme a quella dove saranno inserite le directory degli utenti, dovrà contenere una grande mole di dati, che cresceranno per ogni programma che andrete ad installare.

Se vi accingete comunque ad installare per la prima volta un sistema Linux, potete benissimo fare a meno delle partizioni multiple: vi farebbero certo perdere del tempo ed avrebbero poca utilità, almeno per il momento! Per adesso, quindi, limitatevi a creare solamente le due partizioni principali, tenendo d'occhio quanto spazio occupano le directory più importanti del sistema mano a mano che lavorate per successive installazioni più precise.

Installazione: il boot
Quanto c'era di essenziale da sapere prima di iniziare con l'installazione è stato detto, speriamo non in maniera troppo affrettata; è ora il momento di inziare con l'installazione vera e propria. Supporremo in queste pagine di avere uno o più supporti (CD-ROM) dai quali avviare l'installazione, e non ci cureremo delle macchine non dotate di un lettore cd per le quali si rende necessaria un'installazione via rete.

Il primo quesito da porsi è: la macchina supporta il boot da cdrom? Dopo aver controllato nel BIOS, le possibilità non possono essere che due: nel caso la macchina supporti questo tipo di boot (tutte le macchine recenti, diciamo prodotte fino a tre/quattro anni fa, lo supportano), le prossime righe sulla creazione di un floppy di boot sono superflue. Altrimenti, continuate la lettura.

Se la macchina non supporta il boot da cdrom, basterà prendere un semplice floppy da 1.44 Mb per copiare (da Windows) al suo interno un'immagine del kernel che permetterà al sistema di eseguire il boot che ci permetterà di iniziare l'installazione. Il programma da eseguire per la copia del file è RAWRITE.EXE, solitamente nella directory 'boot' o 'dosutils' del cdrom. Con il solito doppio click il programma verrà lanciato e per prima cosa vi chiederà dove copiare l'immagine del kernel: indicate la prima unità floppy (A:emoji_slight_smile: e date conferma. La seconda domanda che vi sarà fatta è dove si trova il file immagine; tale file, guardacaso di 1.44 Mb di dimensione, si trova solitamente nella directory 'boot' del cd sebbene il suo nome possa variare: potrebbe essere 'rescue1440.bin', 'root.bin', 'boot.bin' o altri ancora: nel cdrom, comunque, troverete riferimenti alla creazione del floppy di boot e, visto che ogni distribuzione utilizza un diverso nome per il file, lasciamo ai lettori l'onere di ricercare quale sia. Immesso quindi il percorso ed il nome del file quando richiesto da rawrite (ad esempio d:bootrescue1440.bin), aspettate che la copia sia terminata e potrete iniziare l'installazione.

Riavviato il sistema, entrate nel programma per la gestione del BIOS ed impostate, a seconda delle vostre esigenze, il boot da cdrom o da floppy; nel secondo caso, sarà comunque necessario inserire il cdrom all'interno del lettore.

L'installazione ha avuto inizio!

Probabilmente inizierete a leggere messaggi incomprensibili a video, finché verrà caricato il programma di setup che vi guiderà nel processo di installazione del sistema. A questo punto siete completamente nelle sue mani: solitamente tali programmi, comunque, vengono tradotti anche in italiano, cosa che vi semplificherà non di poco la scelta delle opzioni.

Visto che ogni distribuzione adotta un suo programma di installazione (OpenLinux addirittura vi permette di giocare a Tetris mentre vengono installati i pacchetti!!), non ci è sembrato sensato descrivere passo dopo passo l'installazione né di una distribuzione né tantomeno di tutte le distribuzioni più note; abbiamo quindi pensato di darvi delle note generali su alcune scelte che dovrete sicuramente fare nell'intero processo, indipendentemente dalla distribuzione scelta.

Installazione: suggerimenti
Prima di tutto, i dischi: se con windows eravate abituati alle lettere di unità (come C: per il primo disco, A: per il floppy e via di seguito), con Linux l'identificazione di questi media è completamente differente. Ogni disco o sua partizione è identificato da un file che, univocamente, vi permette di effettuare le normali operazioni discrittura e lettura, ed il cui nome varia a seconda del tipo di disco: una facile spiegazione può essere fatta considerando il canale (per i dischi IDE) a cui il media è connesso: 'hda' sarà il master primario, probabilmente il disco fisso, 'hdb' lo slave primario, 'hdc' il master secondario e 'hdd' lo slave secondario. Quindi, se avete un disco come master primario ed un cdrom come master secondario, essi saranno visti rispettivamente come 'hda' e 'hdc'. Notate come Linux identifichi univocamente, a differenza di Windows, ogni device: se con windows avete due dischi (C: e D:emoji_slight_smile: ed un cdrom (E:emoji_slight_smile: e togliete il secondo disco, al cdrom viene assegnata la lettera di unità D; se la stessa situazione viene a crearsi con Linux, le "lettere" di unità non cambiano: se prima i due dischi erano 'hda' e 'hdb' ed il cdrom 'hdc', dopo aver tolto il secondo disco (hdb) il cdrom resterà sempre identificato con 'hdc', per il motivo visto sopra.

Come sappiamo tutti, inoltre, i dischi possono essere partizionati: come identificare quindi le partizioni? Se windows automaticamente crea o elimina lettere di unità, Linux non fa altro che aggiungere un numero che identifica la partizione: se quindi il vostro disco è connesso come master primario (hda) e avete creato al suo interno tre partizioni, queste saranno viste come 'hda1', 'hda2' e 'hda3'. Davanti ad esempio a 'hdc3' saprete subito che quella è la terza partizione creata sul disco collegato come master secondario! Per le periferiche SCSI il discorso è identico, solamente che al posto di 'hd' troverete 'sd': quindi la prima partizione sul primo disco della catena SCSI sarà 'sda1' e via dicendo.

Abbiamo introdotto questo discorso, che approfondiremo in seguito quando andremo a parlare della struttura delle directory, perché molte distribuzioni linux vi chiedono esplicitamente dove installare il sistema: e se, senza queste piccole nozioni, un utente si fosse trovato davanti a qualcosa come 'hda2', avrebbe o lasciato perdere l'installazione oppure avrebbe rischiato di commettere eventuali danni su altre partizioni già utilizzate da altri sistemi!

Dopo le directory, un breve cenno al discorso di "mount point". Dopo avervi chiesto dove installare il sistema, probabilmente l'installazione vi chiederà di assegnare alla partizione scelta un "mount point", ossia una directory (per il momento è solo un nome, visto che la directory
fisicamente non esiste!) che identificherà la partizione; se avete optato per un'installazione utilizzando una sola partizione (più la swap, ovviamente!), il mount point sarà la directory principale del sistema, ossia "/", la slash, quello che in Windows e C:. Se avete invece scelto di utilizzare più partizioni, potete assegnare ad ognuna un mount point differente come /home, /usr ecc.

A questo punto tutto dovrebbe filare liscio: vi verranno poste altre domande, ma molto più 'leggere' come la scelta della TimeZone (Europa-Roma, giusto per fugare tutti i dubbi!) o la scelta di un nome per la vostra macchina: potete scegliere un nome qualsiasi, che potete cambiare in qualsiasi altro momento!

Tre fasi importantissime arrivano adesso: la scelta dei pacchetti da installare, la scelta della password per l'amministratore della macchina e la creazione di un utente di default. Dei pacchetti ci occuperemo in seguito, adesso focalizziamoci sugli utenti.

In primo luogo, dovrete scegliere una password per l'utente che funge da amministratore della macchina; i consigli sono due: non lasciatela in bianco e non dimenticatevela! State infatti scegliendo una password per l'utente che ha pieni privilegi su ogni parte, file o directory della macchina, il superuser, chiamato 'root' nei sistemi Unix.

In secondo luogo, l'installazione vi chiederà quasi sicuramente di creare l'account per un utente che utilizzerete normalmente: non manchiamo di ricordare che l'accesso come utente root è da utilizzarsi solo quando effettivamente necessario, esempio può essere la configurazione di un programma. Ovviamente rispondete affermativamente alla domanda e createvi un alter-ego sulla macchina; è proprio con questo alter-ego che inizieremo l'esplorazione del mondo Linux, visto che, qualsiasi cosa facciate, non potete toccare i punti nevralgici del sistema!

Ma portate pazienza per qualche altra pagina: l'installazione non è ancora terminata!

Installazione: i Programmi
Sebbene questa fase preceda la creazione dell'utente e l'assegnazione della password per l'utente root, abbiamo deciso di affrontarla successivamente per poterla trattare in maniera più approfondita.

L'installazione di Linux solitamente non ha niente a che vedere con la più semplice installazione di Windows: al termine della seconda, infatti, avrete solamente un sistema operativo e qualche applicativo di poca utilità! Con Linux il discorso è totalmente differente: nei cd della vostra distribuzione avrete a disposizione un numero quasi spropositato di pacchetti software, per fare con la vostra macchina tutto ciò che volete! L'unico problema, se così lo si può chiamare, è che questi pacchetti devono essere selezionati durante l'installazione, uno ad uno o a gruppi, sebbene ovviamente in seguito potete aggiungere quello che manca o togliere quello che è di troppo.

Solitamente, l'installazione permette di scegliere fra tre alternative:
  • installazione server;
  • installazione workstation;
  • installazione personalizzata.
La prima vorrebbe essere un'installazione volta a creare un server di rete, la seconda una macchina da utilizzare a casa o in ufficio, la terza lascia invece spazio alle necessità individuali.

La prima e la seconda alternativa, sebbene si presentino interessanti, non lo sono più di tanto: i pacchetti che verranno installati sono scelti per accontentare le esigenze generali, e quasi sicuramente vi installerebbero componenti che non utilizzerete mai o mancheranno di installare qualche programma di cui avete assoluto bisogno!

Il consiglio è quindi quello di investire un po' di tempo e scegliere manualmente il software che si desidera installare.

Qui si nota una sostanziale differenza fra le distribuzioni: alcune vi mettono davanti alle centinaia di pacchetti distinti per categoria da scegliere uno per uno, altre invece vi presentano delle "macro famiglie" (come "programmazione", "grafica", "window managers" e così via) che potete installare in toto oppure scegliere per ognuna solo ciò che vi interessa: il consiglio è anche qui di scegliere manualmente i pacchetti. Un esempio? Se scegliete "programmazione" vi verrà installato un po' di tutto, dai compilatori C al Python, passando per linguaggi di cui ignoravate totalmente l'esistenza! Dovreste in un secondo momento andare a cercare i pacchetti superflui e rimuoverli!

Una buona idea è spesso quella di partire con la scelta individuale dei pacchetti, installando solamente lo stretto necessario per poi, di volta in volta, installare quanto necessario.

Ovviamente, questo è solamente un nostro consiglio: se preferite scegliere delle installazioni generali potete benissimo farlo, ma sarebbe meglio sedersi comodi per qualche mezz'ora ed eseguire la scelta a mano anche per un altro motivo: dovendo 'spulciare' fra l'innumerevole numero di pacchetti, leggerete anche una loro descrizione, che vi aiuterà a capire a cosa effettivamente serva il programma.

Qualunque sia la vostra scelta, comunque, alla fine dell'installazione vi si predenterà la prima richiesta di login: il vostro nuovo sistema vi chiederà chi siete per darvi (o negarvi!) l'accesso alle risorse. E tutto senza riavviare la macchina!! :-)

Ma prima di 'presentarci' al sistema c'è ancora qualcosa che è meglio sapere e conoscere in anticipo: per questo nelle prossime pagine esamineremo altre caratteristiche del sistema, in modo da iniziare i primi colloqui con il sistema con qualche conoscenza in più, per fare in modo che il tutto sia il più naturale possibile!

Comunque, il momento del primo login ormai non è più così distante!

Le directory
Ogni sistema, appena installato, crea le sue directory di default: ovviamente, in un'installazione di linux, le directory sono di gran lunga differenti da quelle che troviamo in altri sistemi quali ad esempio windows. Iniziamo quindi a vedere le directory principali del nostro sistema e che tipo di dati queste contengano.

Nella directory /bin sono contenuti tutti i programmi fondamentali del sistema, utilizzabili sia dall'utente root sia dagli utenti ordinari. Ad esempio, non possono mancare in questa directory i comandi per copiare e rimuovere file, per spostarsi fra le directory ma anche alcuni applicativi di rete.

/boot contiene di norma i file essenziali per l'avvio del sistema: solitamente, al suo interno viene conservata anche l'immagine del kernel, necessaria per il boot del sistema.

La directory /cdrom, assieme a /floppy, è utilizzata per leggere i contenuti dei CD e dei floppy; a differenza di windows, comunque, inserendo un media all'interno del lettore ed entrando nella rispettiva directory, non ne vedremo i contenuti: questo perchè il media deve essere, come si dice in gergo, "montato". Vedremo in seguito questo tipo di operazione.

Nella directory /dev sono contenuti i file che identificano i device presenti nella nostra macchina, fungendo da tramite fra la macchina ed il device stesso. Come ricorderete, abbiamo identificato la prima partizione del primo disco IDE come /dev/hda1: esplorando questa directory, ovviamente, lo troverete assieme a molti altri.

/etc è una directory "contenitore", visto che al suo interno trovano spazio i file di configurazione dei programmi installati nel sistema. Per chiarezza, solitamente, ogni programma crea una propria sottodirectory di /etc nella quale inserisce i propri file di configurazione (a meno che il file di configurazione sia solo uno). Per la configurazione del sistema, quindi, /etc è il primo punto di partenza.

La directory /home è la "casa" degli utenti ordinari del sistema: al suo interno trovano infatti spazio diverse directory, una per ogni utente e con il nome dell'utente stesso (ad esempio, /home/pippo e /home/pluto). Ogni utente, dopo il login, verrà mandato proprio nella sua home directory dove potrà lavorare in libertà, visto che nel resto del sistema difficilmente potrà scrivere file.

/lib contiene le librerie del sistema quali, ad esempio, libc, pam e le librerie curses. Le altre librerie proprie dei programmi si trovano invece solitamente sotto la idrectory /usr.

La directory /lost+found, creata in automatico dal sistema quando viene creato un filesystem, è una directory che dovrete sempre sperare di trovare vuota: essa infatti contiene i "pezzi" del filesystem dopo operazioni di chiusura non pulite o dopo che alcune parti del disco risultino danneggiate.

/proc è anche definita come un filesystem virtuale: essa infatti è un po' lo specchio del sistema, visto che contiene informazioni prese in real-time dal sistema stesso relativamente agli "eventi in mutamento" (ad esempio, il login o il logout di un utente) o agli eventi statici (come le carateristiche del processore in uso). Quasi tutti i file al suo interno sono leggibili, sebbene moltissimi dei quali non siano interpretabili! Per iniziare l'esplorazione, provate ad esempio a lanciare il comando:

less /proc/cpuinfo

Come /home per gli utenti ordinari, poi, /root è la directory principale dell'utente principale del sistema, root.

/sbin contiene invece una serie di eseguibili che di norma possono essere lanciati solamente dall'utente root: ad esempio, è presente il comando fdisk che, in mano ad un normale utente (pensate ad un sistema con molti utenti magari collegati via telnet) potrebbe essere pericolosissimo per il sistema.

Come in ogni sistema che si rispetti, è poi presente la directory temporanea, chiamata /tmp. Qui ogni utente può scrivere, ed il suo contenuto sarà cancellato periodicamente o, al più, al riavvio del sistema.

/usr è una directory con contenuti molto variegati, che vedremo in dettaglio in seguito; contiene, ad esempio, documentazioni, eseguibili, librerie e molto altro.

Per finire, vediamo la directory /var. Sebbene meno "poliedrica" di /usr, anch'essa contiene parecchie cose: ad esempio, i file di spool (di stampa, delle email ecc), gli articoli scaricati da usenet, i PID dei processi in esecuzione ecc.

Nella prossima lezione vedremo più in dettaglio i contenuti delle directory di sistema che abbiamo appena esaminato.

Le sottodirectory
Dopo aver fatto una carrellata delle directory principali del sistema, ci occuperemo di vedere cosa nello specifico queste directory contengano, tenendo sempre a mente che, viste le differenze fra le distribuzioni, non sempre quanto riportato in queste pagine sarà lo specchio di quanto in effetti si possa vedere sulla vostra macchina!

Iniziamo dalla directory /etc: di norma, come accennato, questa directory contiene i file di configurazione dei programmi installati ed in generale del sistema ma, elencando i contenuti della directory stessa, si potrà ben notare che /etc è zeppa di sottodirectory: questo perchè, limitandoci ai soli programmi, ognuno avra di norma un proprio posto dove inserire i propri file; il sistema risulta quindi ordinato e la sua gestione da parte dell'amministratore più semplice. Quindi, ad esempio, Apache terrà i propri file di configurazione in /etc/apache ( o /etc/httpd, in alcuni sistemi), X11 in /etc/X11 e così via. Inotre, /etc contiene anche directory e file relativi alla configurazione ed inizializzazione del sistema: così è ad esempio per /etc/inittab, /etc/init.d (o rc.d/init.d in alcune distribuzioni) e via dicendo.

Della particolarità della directory /proc si è già parlato: ma cos'è e, soprattutto, a cosa serve? Vi faccio un esempio al volo: sul portatile dal quale sto scrivendo è installato quel programma che monitorizza il carico della batteria, visibile attraverso il comando "apm"; se lanciato, ottengo questo output:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
che mi indica se il computer è connesso o meno alla linea elettrica e la quantità di carica della batteria rimanente. Masochisticamente, avrei anche potuto lanciare un:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
che mi avrebbe restituito qualcosa di simile a:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
certo leggibile in alcune parti (so che mi rimane il 78% della batteria) ma non so dove andare a leggere se il sistema è o meno connesso alla rete elettrica.

Quindi, si potrebbe semplificare e dire che la directory /proc contiene lo "stato in un dato momento del sistema" relativamente alle informazioni in continuo mutamento (ad esempio l'apm, il numero di utenti collegati ecc.) e lo "stato del sistema" relativamente a quelle in qualche modo statiche, come possono essere le caratteristiche del processore montato. Di massima, tutte le informazioni in /proc sono leggibili tramite il comando:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
o, al limite,
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Se nel tentativo di leggere un file il terminale vi si dovesse riempire di caratteri simili a geroglifici, non pensate al fatidico Ctrl+Alt+Canc: basterà digitare "reset" (anche se probabilmente non vedrete i caratteri a monitor), premere invio ed il tutto ritornerà alla normalità!

Veniamo ora a /usr per esaminarne il variegato contenuto: intanto, la prima directory che incontrerete sarà X11R6, contenente gli eseguibili (/usr/X11R6/bin/), le librerie (/usr/X11R6/lib/) e le pagine di manuale (/usr/X11R6/man/) relative all'ambiente grafico più comunemente noto con il nome di "X".

Trovano poi spazio le directory /usr/bin e /usr/sbin, ossia tutti gli eseguibili ad uso e consumo degli utenti della macchina (bin) e dell'amministratore (bin e sbin) non strettamente legati al funzionamento del sistema di base; questo vuol dire che, se installate un programma di riproduzione degli MP3, con grossa pobabilità l'eseguibile andrà a finire proprio in /usr/bin.

Altra importantissima directory è poi /usr/doc, che conterrà sottodirectory (una per ogni programma!) piene di megabyte di documentazione: fate in modo di familiarizzaere presto con i suoi contenuti!! Per gli sviluppatori, poi, la directory /usr/include contiene una miriade di file ".h": non credo sia necessario aggiungere altro!

Anche la directory /usr/man è di importanza estrema: sebbene non contenga assolutamente niente di strettamente necessario al funzionamento del sistema, al suo interno si trovano le pagine di manuale (man pages) per i programmi: oltre alla già citata /usr/doc, quindi, sappiate che esiste un altra directory (e non è l'unica!) contenente dell'ottima documentazione. Vedremo nei prossimi capitoli come leggerla e sfruttarla.

Chiudiamo il capitolo elencando i contenuti della directory /var. Lesottodirectory più importanti sono:
  • log, che contiene tutti i file di log dei programmi in esecuzione sulla macchina, utili per poterla amministrare al meglio ed essenziali per scovare errori di configurazione, tentativi di intrusione dall'esterno ecc.
  • mail, che conterrà i messaggi di posta elettonica scaricati da internet o inviati dalla rete locale (o addirittura da un utente o demone ad un altro utente) e non ancora letti.
  • run, contenente il PID (una sorta di cartellino d'identità numerico) dei servizi in esecuzione.
  • spool che contiene lo spool di stampa, delle email e simili.
A questo punto abbiamo visto le directory principali del sistema, il loro contenuto e le loro sottodirectory; ancora qualche indispensabile cenno teorico per poter poi partire ad esaminare il sistema da un lato più "gradevolmente" pratico!

Il Bootstrap: parte prima
Molto probabilmente, alcuni avranno già a questo punto tentato di avviare per la prima volta il loro nuovo sistema linux: la prima sorpresa è il processo di bootstrap (chiamato in seguito semplicemente boot).

A differenza di sistemi come Windows, dove tutto avviene in maniera celata agli occhi dell'utente, linux ed in generale gli unix tutti non fanno segreto di cosa avviene al momento dell'avvio: se windows ci ha abituati alla schermata colorata dove, per pochi attimi, si poteva vedere qualche riga dell'autoexec.bat, con linux sarete letteralmente sommersi dai messaggi che il sistema ci propone (sebbene sia presente una "simpatica" patch del kernel che permette di visualizzare una schermata in stile Windows all'avvio, con tanto di progress-bar e immagine a scelta, fra cui pure Matrix! Se vi interessa, provate a cercare lpp, acronimo di "linux progress patch" su freshmeat.net o siti simili). Sebbene ai più tali messaggi possano sembrare inutili, spesso sono invece utilissimi per capire cosa sta facendo il sistema, quali periferiche ha individuato (e, ahinoi, quali no!), quali servizi ha avviato e simili.

Un esempio, preso dal mio portatile, potrebbe essere qualcosa del genere:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Spaventati? :-)

Niente paura, faremo luce sui punti più importanti con una breve analisi delle voci più importanti (ed è per questo che alcune linee sono state numerate, cosa che ovviamente non avviene durante un normale boot!).

La riga [1] è una delle più importanti, poiché ci dice la versione del kernel che stiamo utilizzando (2.2.18), la versione del compilatore (gcc, il nome del compilatore, versione 2.95.2) e la data di compilazione del kernel.

La riga [2] invece ci dice che stiamo lavorando in una console VGA di 25 righe e 80 colonne, ma le cose più interessanti vengono in seguito!

Intanto, alla riga [3] ci viene presentato lo stato della memoria, quanta ne abbiamo installata (65472k) e quanta disponibile (63120k), con tanto di dicitura di "chi usa la memoria e quanta ne usa"; tenete presente quel "44k", lo vedremo anche in seguito!

Le righe dalla [4] alla [11] ci svelano le caratteristiche del processore in uso: un Pentium III Coppermine con 256k di cache L2. Vengono poi rilevati i bus PCI (da [12] a [14]) ed i supporti/protocolli di rete (da [15] a [20]).

Alla riga [21] viene prontamente rilevato il mouse PS2, che in realtà è un touchpad, cosa che comunque per il kernel non fa alcuna differenza!

Alle linee [22] e [23] vengono rilevate le due porte seriali, che con Windows chiamavamo COM1 e COM2 ma che Linux identifica come ttyS0 e ttyS1, con tanto di IO e IRQ! Subito di seguito, vengono rilevati i controller IDE ([24] - [28]) e per ognuno ci vengono date informazioni aggiuntive: ad esempio, hda è un disco fisso IDE targato IBM [29] di 5729MB e con cache di 384kB [31].

Alla riga [33], come noterete, viene rilevato il floppy da 1.44! Subito dopo ([34] - [38]) viene rilevato il supporto Point-to-Point Protocol (PPP), comunemente utilizzato per le connessioni ad internet.

Sempre in ambito di networking, viene rilevata la scheda di rete ([39] - [52]), una Eternet Express Pro100 di Intel che, come vedete, viene "spremuta" per benino: fra le altre cose, vediamo che è una cheda 10/100, con indirizzo MAC 00:00:E2:39:61:8A, che usa l'IRQ 10, che è dotata di un connettore RJ45, ecc.

Alle linee [53] e [54] vengono lette e rilevate le partizioni: ne esistono 5, delle quali le prime tre sono primarie e la 4 logica che "contiene" la quinta!

Viene poi visto l'APM [55] e finalmente vengono liberati i 44k di memoria utilizzati per il boot: adesso potremo utilizzare anche questi [56]. Per finire, alla riga [57] viene attivato lo spazio di swap: in caso di necessità, il sistema potrà andarci a scrivere!

Ma non è ancora tutto: probabilmente questa parte di messaggi (leggibile con il comando "dmesg | more") è la più criptica e tecnica, ma è a breve seguita da altri utili messaggi del sistema più "fruibili" e, forse, interessanti.

Per non appesantire la lettura, abbiamo deciso di riportarli nell'articolo seguente.

Il Bootstrap: parte seconda
Come premesso, ecco la seconda parte dei messaggi di boot:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Ed eccoci ancora a commentare cosa accade al momento del boot.
Alla riga [1] vediamo che qualcosa chiamato INIT viene avviato; ma cos'è questo init?? Esso viene definito come "inizializzatore del controllore dei processi", ossia il padre di tutti i processi: immaginate che il sistema sia un albero, e che init ne sia il tronco: senza di esso, nessuno ramo (processo) potrebbe essere avviato. Vedremo nella prossima pagina una descrizione più dettagliata di init.

Alla riga [2] viene caricato un file di cui, a prima vista, si sa poco: esso è la mappa di default dei caratteri della tastiera, che fa in modo che quando premiamo il tasto "a" a video appaia una "a" e non qualsiasi altro carattere ma, più che altro, permette di scegliere la mappatura della tastiera così che corrisponda effettivamente alle diciture riportate sui tasti (ad esempio, con le tastiere americane la chiocciola non si ottiene con Alt+ò, ma con Shift+2).

Alle linee [3] e [4] torna lo spazio di swap: qui ne vediamo la grandezza e la priorità assegnatagli. Subito dopo viene attivata (o, tecnicamente, montata) la root partition, che risiede fisicamente nella terza partizione del disco (/dev/hda3).

Alla linea [5] si nota anche un nome, fsck, acronimo per "file system check: questo programma, simile al chkdsk di DOS, controlla lo stato dei dischi ma ha una fondamentale differenza di implementazione: se sotto DOS questo viene lanciato solamente quando il sistema viene chiuso in maniera non-pulita (crash, ad esempio!!), sotto linux viene lanciato ad ogni boot, con determinate conseguenze:
  • se il computer è stato spento in maniera corretta, il filesystem viene marcato come "clean" e non viene controllato;
  • se il computer è stato spento in maniera non corretta, il filesystem viene controllato;
  • la terza cosa che può accadere è insolita per gli utenti windows: dopo un numero di boot (determinato dal programma tune2fs con l'opzione -c) il filesystem viene ancora controllato, sebbene fosse marcato come clean. Questo per garantire che il filesystem non sia mai danneggiato. È per questo che a volte si nota che il programma fsck viene avviato senza un'apparente motivo: non spaventatevi quindi se, dopo un determinato numero di avvii, il boot si arresta ed il disco gira all'impazzata: "stiamo lavorando per voi", recitava un famoso cartello!
Alle linee [7] e [8] vengono rilevate le dipendenze dei moduli (parti del kernel che possono essere caricate a richiesta) che vengono successivamente caricati: vedremo quando parleremo di moduli cosa questo significhi.

Notate ora le linee dalla [9] alla [12]: dopo la partizione principale, vengono montate anche le altre partizioni: nel mio caso, viene montata /dev/hda5 in /share; tale partizione è formattata vfat e, fra le altre opzioni, viene montata in read & write (rw).

A questo punto le operazioni sui dischi sono compiute, ed il sistema può iniziare a configurare le interfacce di rete (linea [13]): questo significa, di massima, che viene configurata l'interfaccia di loopback (una sorta di rete virtuale locale, dove il traffico in entrata ed in uscita è tutto relativo al computer in uso) e la scheda ethernet, a cui viene assegnato un indirizzo IP altrove specificato.

Alla linea [14] viene avviato un servizio molto importante: portmap, qualcosa di simile adun "guardiano delle porte" presenti nel nostro sistema e, subito sotto ([15] e [16]) viene aggiornato l'orologio di sistema.

Ma la parte interessante arriva a questo punto: dopo aver ripulito le directory temporanee [17] da eventuali file rimasti, il nostro INIT passa al runlevel 2: cosa sia il runlevel lo vedremo nella prossima pagina, assieme al significato del "2" ma per ora diciamo che il sistema diventa operativo: ma manca ancora qualcosa per poter iniziare a colloquiarci. Devono infatti essere avviati i servizi principali del sistema che, come vedete, sono elencati uno sotto l'altro: leggiamo quindi che vengono attivati i demoni (vedete questi "demoni" come un servizio. Niente di malefico, mi raccomando!) che si occupa di loggare i messaggi (se ricordate, tutti i log sono solitamente in /var/log), il demone che controlla l'apm, il server di database PostgreSQL, un server FTP (proftpd) e HTTPD (Apache). Nel caso, per qualsiasi arcano motivo, uno dei servizi non possa essere avviato, ne avrete notifica proprio a questo punto: invece del nome del servizio, vedrete un messaggio d'errore e potrete (ok, non adesso ma in seguito!) riparare e far ripartire manualmente il demone.

A questo punto il sistema ci si "presenta" (Debian GNU/Linux 2.2 khufu.net tty1) con qualche informazione (ognuna delle quali può essere modificata, tolta oppure se ne possono aggiungere altre!) e, in maniera trasparente, viene avviato un programma di nome getty: sarà questo che, in accoppiata con il programma login, ci aprirà la porta verso il colloquio con il sistema, chiedendoci un nome utente ed una password con i quali sarà in grado di riconoscerci e darci accesso alla macchina.

Questo è (quasi!) tutto quello che riguarda il boot del sistema: ricordiamo comunque che la maggior parte di tali messaggi saranno differenti da macchina a macchina e che potrete leggerli premendo il tasto BlocScorr durante il boot oppure, a login avvenuto, tramite il comando:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
che vi mostrerà comunque solamente la parte dei messaggi relativi al kernel, ossia tutti quelli che abbiamo visto nella pagina precedente.

Nelle prossime pagine vedremo più da vicino tutto quello che riguarda i runlevel e i demoni.

Init e i runlevel
Abbiamo presentato nelle pagine precedenti il fondamentale init, senza però soffermarci troppo sulle spiegazioni; in questa pagina cercheremo di fare più luce su questo importantissimo 'personaggio'.

Prima di parlarne, comunque, dobbiamo introdurre il discorso dei runlevel: un runlevel, tecnicamente parlando, è una configurazione software del sistema che permette l'esistenza solo di un gruppo selezionato di processi. Più semplicemente, un runlevel è uno stato del sistema in cui possono venire compiute solo determinate operazioni. I runlevel sono sette, enumerati da 0 a 6, sebbene esistano anche il 7, l'8 ed il 9 che però i normali Unix (e Linux con loro) non utilizzano. Lo 0, l'1 ed il 6 sono riservati e corrispondono rispettivamente a: arresto del sistema (0), single-user mode (1) e reboot (2). Gli altri, invece, corrispondono alla modalità multi-user, ossia il normale stato operativo del sistema.

Detto questo, che comunque capirete meglio in seguito, torniamo ad init. Init è detto il padre dei processi, quello cioè che "dà vita" a tutti gli altri processi avviati, in automatico o per esplicita richiesta di un utente, dalla macchina. Come processo principale, init ha PID uguale ad uno; il PID (Process ID) è un numero, assegnato automaticamente secondo sequenza dal sistema, che identifica univocamente un processo, sia esso automatico (cioè avviato in automatico dal sistema operativo) oppure lanciato da un utente. Come possiamo dimostrare che init ha PID uguale ad uno? Utilizzando il comando "ps", che visualizza i processi attivi, con l'opzione "x", che riporta i processi avviati senza terminale di controllo: nel risultato potreste leggere (anzi, leggerete!) qualcosa del genere:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Le colonne che ci interessano sono PID, TTY (terminale su cui è in esecuzione il programma), STAT (lo stato del programma stesso; S è sinonimo di sleeping) e COMMAND, che ovviamente mostra il nome del programma.

Visto cos'è init, veniamo a come in pratica questo venga invocato. Esso viene chiamato in causa all'avvio dopo il boot del kernel e, come prima cosa, legge il file /etc/inittab per trovare il runlevel di default al quale portare il sistema: nel caso della mia distribuzione è il 2, sebbene anche se fosse stato 3, 4 o 5 non ci sarebbe stata differenza! (se non erro, RedHat e sue derivate utilizzano il 3 come runlevel di default)

Ma cos'è il runlevel 2 e cosa lo differenza dagli altri? La definizione di runlevel è già stata data in precedenza, quello che si vuole mettere qui in evidenza è cosa comporta nel sistema il raggiungimento di tale runlevel. A questo scopo, dobbiamo rivolgerci ancora al file /etc/inittab, nel quale sono presenti le righe:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Vediamo innanzitutto la sintassi di queste righe, riportabile al modello:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Quindi, al runlevel che ci interessa esaminare, il secondo, viene invocata l'azione "wait", che indica ad init di avviare il processo ed attenderne la terminazione; il processo che viene avviato è /etc/init.d/rc con un "2" come argomento. Cos'è questo programma "rc" che viene richiamato? Esso non è altro che uno script di shell, che, dopo opportuni controlli ed accorgimenti, si porta nella directory /etc/rcX.d e ne esegue gli script contenuti. Alla "X" che abbiamo utilizzato va comuque sostituito l'argomento passato come opzione al comando rc: quindi, nel caso del runlevel 2, rc si porterà nella directory /etc/rc2.d.

Detto questo, esaminiamo il contenuto della directory /etc/rc2.d e, in generale, di tutte le altre /etc/rcX.d. Vediamo intanto cosa contengono, utilizzando il probabilmente noto comando "dir" (ma dimenticatelo in fretta visto che poi utilizzeremo solo il comando "ls"!):
dir /etc/rc2.d
il cui output è:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Come vedete, ogni file ha il nome composto da tre parti: una S o una K (in questo caso solo una S!) che indicano se il processo deve essere avviato (S = start) o interrotto (K = kill), un numero, che indica la priorità con cui questi devono essere avviati ed il nome del processo. Vediamo un esempio: l'avvio di gpm (il demone che gestisce il mouse) è precedente all'avvio si apache, visto che gpm ha un id numerico 20 contro il 91 di apache. L'id numerico qui riportato non ha comunque nulla a che fare con il PID che il programma si vedrà assegnato dal sistema: il numero che qui precede il nome del programma è utilizzato per definire al priorità con la quale vengono avviati i processi!

Quindi, una volta che init verrà avviato, lancerà il programma "rc" che si incaricherà di avviare i servizi citati in /etc/rc2.d

Apriamo prima di chiudere due parentesi: ricordate che precedentemente abbiamo detto che i runlevel 2, 3, 4 e 5 sono equivalenti? Alla luce di quanto detto, adesso possiamo dimostrarlo. A parte forzare un cambiamento di runlevel (attuabile con il comando telinit seguito dal numero di runlevel) e notare che ... non succede niente, vediamolo più tecnicamente. Utilizzeremo il programma "diff" che visualizza in output le differenza fra due file o due directory: lanciando in sequenza
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
il comando non darà alcun output. Se invece lanciamo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
verranno stampate a video le differenze fra le directory (lasciamo a voi la prova!)

La seconda parentesi da aprire è dedicata a occhi più "tecnici": forse qualcuno avrà notato che i file presenti in, ad esempio, /etc/rc2.d, non sono veri e proprio file, bensì dei link che puntano a degli script che portano il nome del link senza la S o la K ed il numero presenti in /etc/init.s; ad esempio, /etc/tc2.d/S91apache punta a /etc/init.d/apache. Tutti gli script linkati in /etc/rcX.d sono presenti in /etc/init.d, così che possano essere utilizzati come e quando serve all'entrata di ogni runlevel!

Comunque, per chiudere, vogliamo tranquillizzarvi: abbiamo descritto init e runlevel abbastanza approfonditamente più che altro per rendere chiari i meccanismi di avvio del sistema; tutti i link e gli script necessari saranno installati automaticamente all'installazione del sistema o di un nuovo programma che avrà bisogno di essere lanciato all'avvio, a meno che vogliate scrivere un vostro programma che debba essere automaticamente avviato al boot e interrotto allo shutdown del sistema!

Demoni e servizi
Nel precedente capitolo abbiamo visto l'avvio dei programmi "automatizzato" da init, esaminando il contenuto della varie directory /etc/rcX.d (che, non abbiamo in precedenza detto, possono variare a seconda della distribuzione). Ci siamo però fermati al fatto che un servizio viene avviato richiamato dal programma rc. Questa cosa è comunque ricollegabile a qualcosa di cui ci siamo già occupati: i messaggi del boot; richiamiamo quindi qualcosa di già visto:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Questo sono gli ultimi messaggi che si vedranno al boot prima che ci si presenti la richiesta di login. E, se riprendete quanto già scritto nel capitolo precedente, noterete certamente che tutti questi programmi vengono eseguiti nello stesso ordine che ci si aspetta leggendo il numero che, in /etc/rc2.d, precede il nome del programma da avviare.

Tutti questi programmi avviati automaticamente all'avvio del sistema, sono detti demoni o servizi: la loro caratteristica fondamentale, a differenza dei normali programmi, è che i demoni sono normalmente in esecuzione per tutta una sessione di lavoro (che, per un server, potrebbe essere anche di qualche mese!), dall'avvio allo shutdown. Il motivo è semplice: questi programmi, infatti, devono sempre essere in ascolto per soddisfare eventuali richieste provenienti dall'utente o dall'esterno, nel caso la macchina sia in rete. Prendiamo ad esempio il server FTP, proftpd, suppondendo che la macchina sia collegata in rete: se esso non fosse in esecuzione, ogni connessione alla nostra macchina sarebbe categoricamente rifiutata, e l'amministratore dovrebbe agire manualmente per avviarlo; ma se installiamo un servizio, probabilmente lo facciamo perchè intendiamo utilizzarlo, quindi perchè lasciarlo inattivo?

La questione dei "servizi sempre attivi" su una macchina spesso porta a qualche perplessità: molti, infatti, si chiedono perchè avere dei programmi sempre attivi anche se non vengono utilizzati. Se da un lato questa perplessità sia più che giustificata, dall'altra dobbiamo andare a vedere come funziona tecnicamente un demone, facendoci ancora una volta aiutare dal programma "ps", che ci fornirà altre importanti informazioni.

Un demone, normalmente, è un programma che resta in attesa su una porta del sistema in attesa che qualcuno o qualcosa richieda una connessione. Lo stato in cui normalmente questo programma si trova è detto "sleep", come se il programma fosse "in letargo": le risorse occupate dal demone, quindi, risultano minime, poichè di fatto il programma sta solamente "sopravvivendo"!

Vediamo ora la cosa con qualche dato in più alla mano: tramite il programma "ps" vediamo di ricavare qualche utile informazione: monotoriamo il demone Apache (legato al protocollo HTTP) in sleep ed in attività:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
In questo primo caso, Apache è in Sleep (dimostrato dalla "S" nella colonna "STAT"), non occupa per nulla la CPU (visto che nella colonna CPU c'è un chiaro 0.0%) ed utilizza una piccola parte di memoria, che probabilmente avrà utilizzato per l'avvio e per restare in vita. Come vedete, quindi, un programma in sleep occupa solamente una parte della memoria (che comunque occuperebbe anche se fosse avviato su richiesta) e nessun'altra risorsa di sistema! E, soprattutto, non ci forza ad avviare un servizio quando ce ne sia il reale bisogno, visto che questo saprà rispondere automaticamente una volta interrogato.

Il fatto di avere molti servizi attivi nella macchina, comunque, potrebbe comportare seri problemi di sicurezza, di cui ci oppuperemo in seguito.

Vediamo ora come i singoli servizi possano essere gestiti manualmente. Già abbiamo detto che nelle installazioni standard i servizi vengono attivati automaticamente al boot, e che vengono interrotti al momento dello shutdown. Esiste però la possibilità di gestire manualmente i servizi in una macchina, ed il caso più probabile è quello di una modifica della configurazione stessa.

Torniamo ad Apache per gli esempi. Di default, esso è in ascolto sulla porta 80 ma, per qualche motivo, si potrebbe decidere di modificare questa impostazione, mettendolo in ascolto, ad esempio, sulla porta 8080. Dopo aver modificato il file di configurazione, se Apache non viene riavviato esso sarà sempre in ascolto sulla porta 80, fino al successivo reboot quando il file di configurazione verrà riletto. Ma, soprattutto per un server di rete, i periodi di uptime (ossia il periodo di attività senza interruzioni di una macchina) sono assai lunghi, e non sarebbe pensabile di, come si dice in gergo, "buttare giù" il server.

Per questo motivo, è prevista la possibilità di riavviare un solo servizio senza che nessun'altra applicazione ne risenta.

Di base, il comando è:
/etc/init.d/apache stop (o /etc/rc.d/init.d/apache stop per RedHat e derivate).
per interromperlo e:
/etc/init.d/apache start per avviarlo. In alternativa, un metodo più rapido è:
/etc/init.d/apache restart tramite il quale le azioni stop e start vengono chiamate in successione. Di norma, tutti i servizi prevevedono almeno le opzioni stop, start e restart con la sintassi:

/etc/init.d/NOME_SERVIZIO start|stop|restart. Inoltre, alcuni servizi prevedono anche altre azioni che comunque, rispetto alle precedenti, vengono usate molto più di rado.

Halt e Reboot
Nelle pagine precedenti abbiamo visto come sia gestito l'avvio del sistema, ma forse qualcuno si sarà già chiesto: e adesso come lo spengo? Con Windows si è abituati ad utilizzare il tasto "Avvio" anche per le operazioni di shutdown e reboot (anche se utilizzare un tasto che si chiama "Avvio" per spegnere fa quantomeno sorridere!!), mentre con Linux le cose si fanno diverse.

Tralasciamo le distribuzioni super-grafiche che, utilizzando solo ed esclusivamente l'ambiente grafico, permettono di avere dei pulsanti per lo spegnimento ed il reboot del sistema. Concentriamoci invece su come effettivamente si possa spegnere il sistema. Non crederete che si possa fare in una maniera sola, no? :-)

Di norma, esistono i comandi halt e reboot che, rispettivamente, spengono il sistema e lo riavviano. Oltre a questi, comunque, esistono altre alternative. Ad esempio si può optare per il comando shutdown che, con le opzioni -r oppure -f esegue un reboot o uno shutdown.

E non è ancora finita! Se ricordate, parlando di init, abbiamo parlati dei runlevel: ricordate a cosa corrispondevano il runlevel 0 e 6? In effetti, lanciando
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
eseguiremo uno shutdown del sistema, mentre con
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
verrà avviato il reboot della macchina.

Un altro metodo consiste nel premere la combinazione di tasti Ctrl+Alt+Canc, sempre che il nostro sistema sia configurato per questa azione. Andate a leggere il file /etc/inittab: se trovate una riga del tipo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
con la combinazione sopra citata eseguiremo uno shutdown; se invece leggiamo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
tale combinazione di tasti eseguiremo un reboot!

Così come abbiamo esaminato cosa succede al boot, vediamo cosa invece accade durante lo shutdown.

Una volta invocato il comando che spegne o reboota la macchina, verrà prima di tutto inviato un messaggio a tutti gli utenti del tipo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
(dove trovano posto, ovviamente, solamente la voce reboot o shutdown!) A questo punto, il login viene disattivato e viene richiamato nuovamente init che porta il sistema a runlevel 0 (per lo shutdown) o 6 (per il reboot).

In seguito, init fermerà tutti i servizi attivi nella macchina andando ad eseguire, come abbiamo visto, gli script in /etc/rc0.d o /etc/rc6.d: per ogni servizio interrotto, il sistema ci avvertirà con una riga del tipo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Una volta che tutti i servizi sono stati interrotti, init manda dei segnali ai processi eventualmente ancora attivi (pensate, ad esempio, se un utente stava utilizzando un browser): in prima battuta, viene inviato un SIGTERM, che si limita a terminare i processi attivi; se alcuni riescano a "resistere" a questo segnale, viene inviato un SIGKILL, che letteralmente "ammazza" ogni processo ancora in esecuzione.

Per terminare l'operazione di reboot/shutdown, init si dedica a quanto relativo alla rete: rilascia infatti gli eventuali filesystem di rete montati e deconfigura le interfacce di rete (ad esempio le schede Ethernet). Dopo di questo esegue le operazioni finali: disattiva la swap e smonta il filesystem principale.

A questo punto, il sistema viene riavviato oppure arrestato ed è possibile staccarlo fisicamente dalla rete elettrica senza che questo comporti la corruzione del filesystem.

Con questo breve capitolo abbiamo terminato la prima overview generale del sistema, e ci concentreremo (finalmente, diranno alcuni!) alla gestione del sistema.

La documentazione
Dopo la fase introduttiva nella quale abbiamo illustrato per sommi capi le parti principali che compongono la nostra Linux-box (ma sappiate che quanto detto vale, in generale e con le dovute differenze, anche per tutta la grande famiglia degli Unix), iniziamo ora a vedere come interagire ed iniziare a lavorare con il nostro sistema.

Come tutti sapranno, comunque, Linux non ha l'user-friendliness propria di altri sistemi, e spesso districarsi fra comandi e configurazioni non è cosa da poco. Quello che tutti purtroppo dimenticano, invece, è che installando Linux normalmente andiamo ad installare (salvo nostre indicazioni in contrario) anche una quantità quasi smisurata di documentazione sui diversi programmi e sul sistema in generale, alla quale si aggiunge anche tutta quella presente in internet.

Lasciando da parte ciò che internet propone, sebbene una nota meritino gli Appunti Linux di Daniele Giacomini, leggibili all'url
Perfavore, Entra oppure Registrati per vedere i Link!
, in questo capitolo ci soffermeremo su ciò che abbiamo sul sistema e che, forse, non sappiamo di avere!

La documentazione che ci viene installata sul sistema si può dividere in due "famiglie": la documentazione generale e le pagine di manuale.

Documentazione Generale
Alla documentazione che abbiamo definito come "generale" è spesso dedicata un'intera directory (/usr/doc o /usr/share/doc, oppure entrambe in alcuni casi, a seconda della policy di ogni distribuzione) che contiene a sua volta delle sottodirectory, ognuna delle quali contenente informazioni utili per un determinato programma: ad esempio, ci potrebbe essere /usr/share/doc/apache oppure /usr/share/doc/sendmail. Il contenuto di tali directory è spesso vario, ed alcuni dei file "standard" che potreste trovare sono:
  • README, che contiene informazioni generali sul programma, a volte anche sulla sua installazione e configurazione, sui BUG presenti ecc.
  • Changelog, che contiene una lista dei cambiamenti, delle modifiche e dei bugfixes apportati dagli sviluppatori al programma;
  • copyright, contenente informazioni sul copyright del programma;
  • COPYING, ossia il testo completo della licenza con la quale il programma è distribuito.
Oltre a questi file, spesso si trova anche una directory "examples", contenente uno o più file di esempio per configurare il programma, e che spesso risultano molto utili e rendono il procedimento di configurazione molto più agevole.

Di massima, questi sono i file che si dovrebbero trovare in ognuna della sottodirectory di /usr/share/doc sebbene, come già detto, non c'è nulla di standard; ad esempio, la distribuzione Debian usa inserire il file Chengelog.Debian, relativo ai cambiamenti apportati al pacchetto .deb del programma o il file README.Debian, che contiene informazioni addizionali sul pacchetto relative alla distribuzione (ad esempio, come il programma è stato compilato, i cambiamenti rispetto all'originale ecc.); oppure, alcuni programmi vengono forniti con tanto di manuale in diversi formati (fra cui txt, html e ps) o con dei file README addizionali che trattano di argomenti come sicurezza, upgrades, architetture ecc: non è raro infatti vedere file come README.UPGRADE, README.NT, README.SOLARIS ecc.

I file più importanti in queste directory sono comunque i README "semplici": spesso sono note dell'autore del software relative a come implementare al meglio il programma sulla propria macchina, e dovrebbero sempre meritare una lettura!

Una piccola nota: spesso i README sono presentati come file compressi (README.gz) e non leggibili tramite i comandi cat, less o more (a meno di versioni modificate degli stessi). Per non dover ogni volta decomprimere il file e ricomprimerlo una volta terminata la lettura, usiamo l'utility zless, che permette di decomprimere a video i file compressi con estensione .gz; la sua sintassi, ovviamente, è
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Nel caso non aveste il programma zless, potete arrangiarvi con:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Da non dimenticare poi sono gli HOW-TO, che solitamente occupano un pacchetto a sé stante nei cd della distribuzione: di norma, questi HOW-TO sono in lingua inglese, ma esistono anche le traduzioni in italiano (si veda
Perfavore, Entra oppure Registrati per vedere i Link!
, il sito di Italian Linux Documentation Project); tradotto, HOW-TO suona come "come fare": per qualsiasi domanda vi poniate (Come configuro la SoundBlaster?) esisterà quasi sicuramente un HOW-TO che ve lo spiega passo dopo passo! In generale, questo documenti sono in /usr/doc/HOWTO e le relative traduzioni nella sottodirectory italian/.

Le pagine di manuale
Oltre a quanto visto sopra, un'altra ottima fonte di informazione e documentazione sono le pagine di manuale, le così dette "man pages". Le man pages sono documenti che danno informazioni sul funzionamento dei programmi (ma non solo), sulle loro opzioni e, molto spesso, sulla loro configurazione.

Queste possono essere lette digitando al prompt dei comandi il comando "man" seguito dal nome del programma del quale ci interessa saperne di più: ad esempio, si potrebbero voler vedere le opzioni di "ping": digitiamo quindi: man ping e vedremo apparire una pagina di documentazione relativa proprio al comando ping.

Per finire, citiamo altri due comandi che ci possono tornare utili quando siamo alla ricerca di documentazione specifica: apropos e whatis.Il primo, apropos, ricerca un termine nei nomi e nelle descrizioni delle pagine di manuali, così che digitando ad esempio: apropos ping il sistema ci restituirà i nomi delle pagine di manuale le cui descrizioni contengono il testo "ping":
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Come vedete, le pagine di manuale trovate (con la relativa sezione fra parentesi) non si riferiscono solamente al comando ping, ma anche a comandi come swapon e swapoff che con ping c'entrano davvero poco ma nella cui descrizione è presente la sequenza di caratteri 'ping'.

Vogliamo invece sapere in un attimo cos'è un determinato comando?Utilizziamo whatis e lo sapremo! Infatti, lanciando whatis ping ci verrà restituito:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Notate come, a differenza di apropos, whatis visualizzi solamente la descrizione del programma che abbiamo indicato!

Questo, per quanto riguarda la documentazione, è tutto: il consiglio è di ricordare sempre che, installando Linux installeremo anche una quantità immensa di documentazione che, almeno in teoria, dovrebbe aiutarci a risolvere la maggior parte dei nostri problemi; impariamo quindi a tenerla sempre in grande considerazione!

Login e Prompt
Siamo oramai giunti alla parte interessante di questo corso! Il sistema è installato ed avete le nozioni di base, quindi non ci resta che iniziare a colloquiare con il sistema!

Il primo passo che un utente deve compiere dopo il boot del sistema è il login, cosa che chi utilizza windows NT conoscerà ma alla quale gli utenti windows 9x sono estranei. Questo perchè Linux, a differenza dei vari windows 9x è un sistema multiutente: anche windows 9x, da un certo punto di vista, è multiutente, visto che è possibile creare due o più "utenti" nello stesso sistema ognuno dei quali con le proprie impostazioni e propri file (sebbene non esista il concetto di ownership dei file): il fatto è che la multiutenza di windows 9x è detta "multiutenza seriale", mentre linux è un sistema a multiutenza parallela. Cosa significano queste due (apparentemente asurde) definizioni? Nella multiutenza seriale, possono esistere più utenti che possono però lavorare solamente uno alla volta sulla macchina: se ad esempio l'utente "pippo" sta utilizzando la macchina, l'utente "pluto" dovrà aspettare che il primo si disconnetta per poter lavorare (il famigerato "Disconnetti Utente" del menu di avvio). Nella multiutenza parallela, invece, due o più utenti possono lavorare in simultanea sulla stessa macchina senza che il lavoro dell'uno sia bloccato o intralciato dal lavoro dell'altro. Addirittura, i due utenti si potranno anche parlare l'uno con l'altro, ma vedremo più avanti questi giochetti!

Tutta questa prefazione per introdurre un programma che vedremo ogni qualvolta avvieremo il sistema: login.

Login altro non è che un programma che ci presenta una richiesta di username e password per poterci dare l'autorizzazione a lavorare sulla macchina: una volta che avremo digitato una coppia username-password corretta, potemo iniziare il nostro colloquio con il sistema o, in caso opposto, non potremo fare alcunchè (ecco perchè non si dovrebbero mai dimenticare le password!).

Il login avviene solitamente in due modi: testuale (in console) o grafico (sotto X). Il primo è il più classico ed in stile unix, mentre il secondo è più "evoluto" e ci permette di lavorare direttamente nell'ambiente grafico, grazie a programmi come xdm, gdm, wdm, qdm e simili. Un consiglio spassionato è comunque quello di evitare la seconda opzione, visto che sarebbe meglio iniziare a conoscere Linux a partire dalla console per poi spostarsi all'ambiente grafico (come faremo in queste pagine): iniziare a lavorare direttamente in grafica può da un lato essere comodo, ma dall'altro può non farvi comprendere appieno sia le potenzilità di questo sistema sia i suoi fondamenti: forse all'inizio vi sembrerà impossibile lavorare in una console a caratteri, ma vedrete che con il tempo non ne potrete più fare a meno!

Tornando al login (testuale, mi raccomando!), siamo rimasti alla richiesta di uno username: digitate il nome dell'utente che l'installazione vi ha chiesto di creare (sperando che l'abbiate fatto, visto che utilizzare l'account di root può essere molto pericoloso, soprattutto quando non si conosce bene il sistema, e ancora di più quando lo si conosca, dicono alcuni!), dopodichè inserite la password: se non avete fatto errori, vi vedrete catapultati nella vostra home directory [1] con il prompt pronto ad eseguire ogni vostro ordine, buono o cattivo che sia! A questo punto, il programma di login fa la sua uscita di scena dalla console sulla quale stiamo lavorando (ma non dalle altre: provate a digitare Alt+FX dove alla X potete sostituire un numero normalmente da uno a sei, e vedrete altre console pronte a dare accesso ad altri utenti, o un ulteriore accesso a voi stessi) ed entra in gioco la shell. La shell altro non è che il ponte che unisce voi al sistema: tramite essa potrete impartire comandi e vederne l'output; senza una shell il sistema sarebbe lo stesso "vitale" ma voi avreste qualche problema in più a comandarlo! Le shell nel mondo unix sono moltissime (le trovate elencate nel file /etc/shells), sebbene la più utilizzata (e comoda, IMHO!) sia la bash: per vedere qual'è la shell che state utilizzando digitate
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
e leggete l'output. Ogni utente del sistema, inoltre, può scegliere la propria shell, specificata nel file /etc/passwd con il comando "chsh", sebbene durante la creazione degli stessi ne venga assegnata una di default, specificata nel file /etc/adduser.conf. Per il momento, se l'utente che state utilizzando utilizza una shell differente dalla bash, digitate il comando
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
e state sicuri che molto difficilmente la cambierete in futuro!

A questo punto, la shell ci unisce al sistema, che è pronto a processare ogni nostro comando: ma non abbiamo ancora visto quali siano i comandi principali di sistema e non sappiamo come dargli ordini! Personalmente, dopo il mio primo login ho battuto "help" per vedere di cavarne (inutilmente!!) qualche informazione: ho quindi spento tutto e sono andato a leggermi un po' di documentazione!
Nei prossimi capitoli vedremo infatti quali siano i comandi principali del sistema.

Note:
[1]: potete verificarlo con il comando "pwd" che, nel mio caso, restituisce "/home/edo".

Esplorare il filesystem con 'cd', 'ls' e 'dir'
È il momento di imparare una "lingua" che il sistema saprà riconoscere e che ci permetterà di poter interagire con esso!

Prima di iniziare la carrellata di comandi, ricordiamo una cosa: noi saremo quanto più precisi possibile, ma non ci sarà possibile per evidenti motivi spiegare tutte le opzioni per ogni singolo comando: per ogni informazione aggiuntiva che vi interessi avere rivolgetevi alla pagine di manuale digitando
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
come abbiamo visto nella lezione sulla documentazione.
Ed è finalmente ora di iniziare con l'esplorazione dei più comuni comandi che il nostro Linux ci mette a disposizione. Il primo comando che vedremo, essenziale per muoversi fra le directory e certamente noto a molti, è cd.

cd

Senza argomenti, cd ci riporta alla nostra home directory; con un argomento, che dovrà essere un nome di directory, cd ci porterà all'interno della directory specificata. Utilizzato con l'argomento -, cd ci riporta alla directory di provenienza. Facciamo un esempio e digitiamo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
per entrare nella directory /tmp. A questo punto digitiamo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
per tornare nella nostra home directory.

Per finire, digitiamo
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
e ci vedremo ancora in /tmp !

dir e ls

Il secondo comando, anch'esso noto a chi abbia lavorato con un sistema DOS, è dir, che elenca file e directory presenti nella directory corrente, se non altrimenti specificato. Molto spesso, per non dire sempre, al posto di dir si usa il comando ls (abbreviazione per list): essi hanno non solo la stessa funzione, ma anche la stessa identica sintassi: lo potete constatare confrontando le pagine di manuale relative all'uno ed all'altro comando.

Normalmente, ls (o dir) visualizza i file in ordine alfabetico e non visualizza i file nascosti, quelli cioè il cui nome inizia con un punto: per vedere anche questi file, dobbiamo utilizzare l'opzione -a (all) che ci svelerà la presenza anche di due directory: "." e ".."; la prima è la rappresentazione della directory corrente, la seconda della directory precedente nell'albero delle directory: così, con:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
vedremo la lista dei file e delle directory presenti nella directory corrente, con
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
vedremo invece la lista dei file e delle directory (d'ora in poi generalizzeremo dicendo solo "file") presenti nella directory "madre" della directory corrente.

Inoltre, per vedere il contenuto di una directory senza dovercisi spostare, è ovviamente possibile digitare
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!

Opzioni di ls

Ma torniamo alle opzioni di ls: con -l potremo utilizzare il "long listing format", che ci darà maggiori informazioni sui file. Un output potrebbe essere questo:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Qui notiamo molte informazioni in più su ogni file, non solo il suo nome! Ad esempio, vediamo a chi appartiene, la sua grandezza e la data di creazione. Per il blocco di informazioni riportate sulla sinistra non abbiate fretta: lo esamineremo in seguito; per il momento, sappiate solo che è un insieme di caratteri che definiscono le caratteristiche di ogni file.

Altre opzioni, forse meno utilizzate ma sempre utili sono:
Opzione Descrizione
-h che esprime la grandezza del file in formato più facilmente leggibile (ad esempio, 2K, 32M, 4G, etc.); non ha senso se utilizzato da solo, ma può essere utile accoppiato con -l
--color che distingue tramite colori i i tipi di file
-S per ordinare i file in ordine di grandezza discendente
-t per odrinare i file in ordine di creazione discendente (i più recenti in alto)

Per avere tutte le possibili opzioni relative al comando ls, vi rimandiamo alla pagina di manuale del comando stesso.

Operare sui file: 'cp', 'mv', 'rm' e 'mkdir'
Ora che sappiamo muoverci nel filesystem ed esaminare il contenuto di una directory, concentriamocoi sui singoli file e sulle operazioni che possiamo fare su di essi: vedremo quindi i comandi per copiare, spostare ed eliminare i file presenti sul disco; inoltre, vedremo come eseguire le stesse operazioni sulle directory, imparando anche come crearle.

cp

Il primo comando è cp, utilizzato per copiare file e directory. La sua sintassi è molto semplice:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
oppure, per la copia multipla di file, si usa:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
che permetterà di copiare i file file1 .. fileN nella directory di destinazione. Vediamo un esempio:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
che copierà 'miofile' nella directory /tmp. Se in /tmp esiste già un file chiamato miofile, questo sarà sovrascritto dal nuovo file.

Opzioni di cp

Vediamo ora le opzioni più importanti di cp:
-b Esegue automaticamente una copia di backup di ogni file di destinazione esistente
-f Forza la sovrascrittura dei file, senza richiedere interventi da parte dell'utente
-i Attiva la modalità interattiva, che chiede conferma prima dell'evanutale sovrascrittura di file di destinazione preesistenti; il suffisso usato è il classico simbolo della tilde, ~
-p Mantiene, se possibile, gli attributi (permessi, ownership, etc.) del file
-r Permette di attivare la modalità ricorsiva, che permette la copia di directory
-v Attiva la modalità verbose, che visualizza in output quello che il sistema ha fatto in seguito al nostro comando

mv

Dopo aver visto come copiare file e directory, dedichiamoci allo spostamento ed al cambio di nome dei file; tutto questo è fatto con un solo comando: mv, la cui sintassi è:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Tramite mv, oltre a cambiare il nome di un file, è anche possibile rinominare una directory o muovere più directory in un'altra directory. Le opzioni di mv sono molto simili a quelle di cp, sebbene in numero minore. Quelle che a noi interessano sono le stesse viste per il comando cp, con l'esclusione di -p che per mv non esiste.

rm e rmdir

Come ultimo, ci rimane il comando rm, che permette di eliminare file o directory. La sua sintassi è abbastanza semplice:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Le opzioni di rm sono anch'esse simili a quelle di mv; le più utili sono le stesse che sono state viste per cp, con l'esclusione di "-p" che qui non ha alcun senso pratico.

Deve qui essere aperta una parentesi relativa alle directory: di norma, se siete sicuri di poter elimimare una directory non vuota, potete utilizzare il comando
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
che forza l'eliminazione della directory 'directory' e dei suoi contenuti. Per eliminare una directory vuota, si usa invece il comando:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
A volte, però, tale comando non sembra sortire gli effetti desiderati: nonostante la directory sembri vuota, quanto scritto sopra ci restituisce un errore, dove il sistema si lamenta perchè esistono dei file all'interno della directory che vogliamo eliminare.

Accade spesso, infatti, che per controllare il contenuto di una directory si usi solamente ls che, per sua natura, non visualizza i file nascosti! A questo punto si può procedere in due modi: entrare nella directory e cancellare tali file oppure, se si è sicuri che i file nascosti all'interno di tale directory non sono importanti, si può procedere con rm -rf.

mkdir

Come ultima cosa, vediamo come creare le directory: il comando è mkdir, la cui sintassi è:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Vediamo un esempio: nella nostra home directory, supponiamo /home/utente, è presente la directory "dir" e vogliamo creare "sottodir" come sottodirectory della precedente. La prima cosa che viene in mente di fare è di entrare in "dir" e lanciare il comando:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
È però possibile, e anche molto più comodo, utilizzare direttamente il comando:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
con una sola attenzione: il comando
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
non fa quello che ci si potebbe aspettare, ossia creare sottodir, sottodir2 e sottodir3 come sottodirectory di dir; quello che qui accade, invece, è la creazione di sottodir come sottodirectory di dir e la creazione di sottodir2 e sottodir3 allo stesso livello di dir!

Quindi, per non dover scrivere:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
dir3
in questo caso è più comodo entrare in dir e lanciare:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Con queste nozioni, potrete certamente iniziare a fare gli esperimenti sulla creazione, rimozione e spostamento di file e directory. Permetteteci però qualche consiglio:
  • utilizzate touch per creare file vuoti con cui operare; il comando touch file crea il file vuoto file; utilizzate invece il comando mkdir (mkdir nomedirectory) per la creazione delle directory
  • spostatevi in /tmp per le prove; è più sicuro e vi eviterà di lasciare file e directory inutili sparsi per il filesystem o, peggio, di eliminare file importanti o di sistema per qualche disattenzione
  • non, ripeto, NON utilizzate l'utente root per queste prove: uno stupido errore di digitazione può, come si dice in gergo, "rasare" un intero filesystem!
In conclusione, ricordiamo che tutti i comandi fino a qui visti permettono di specificare caratteri jolly, quali ad esempio l'asterisco o il punto di domanda. Ad esempio:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
rimuoverà tutti i file il cui nome inizia con "ab" seguiti da zero o più caratteri. Invece, il comando:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
eliminerà tutti i file il cui nome inizia con ab seguiti da un qualsiasi carattere.

I principali comandi in 'bin' e 'sbin'
Nelle due precedenti lezioni abbiamo esaminato i comandi principali per muoverci all'interno del filesystem e per agire su file e directory. Dedicheremo questa pagina ad altri comandi non meno utili e legati a diverse funzioni relative al nostro sistema Linux.

Presenteremo in questa pagina una lista in ordine alfabetico, senza soffermarci troppo sulle opzioni di ognuno di essi; per ogni informazione, si rimanda alle pagine di manuale relative ad ogni comando.

Comando Descrizione
apropos Visualizza una lista di elementi correlati a quello che gli si passa come argomento. Ad esempio, apropos bash mostrerà tutte le pagine di manuale relative a bash
bzip2, bunzip2 Permette di creare e decomprimere archivi in formato ".bz2", molto usati per il buon grado di compressione che tale formato offre. Maggiori informazioni le potrete reperire sul nostro articolo
cat Permette di leggere il contenuto di un file. Il comando cat non funziona da pager, ed è quindi molto spesso sostituito da comandi come less o more
chmod Con chmod si possono modificare gli attributi di file e directory. È ad esempio possibile, tramite questo comando, rendere eseguibile un file, negare a determinati utenti la sua lettura etc
chown Modifica l'owner (il proprietario) di un file o di una directory
date Senza argomenti visualizza la data corrente; può inoltre essere utilizzato per la modifica della data e dell'ora del sistema
fdformat Formatta un floppy
find È il comando utilizzato per la ricerca di file all'interno del filesystem
free Visualizza informazioni sulla memoria di sistema, che comprende sia la RAM che lo swap
grep Permette di ricercare determinati pattern all'interno di uno o più file. È un comando molto utile, con il quale è utile familiarizzare il prima possibile
gzip, gunzip Questi due domandi permettono di creare ed estrarre archivi in formato .gz
kill Invia un segnale di terminazione ad un processo. Si usa spesso per terminare (con l'opzione -9) processi che non rispondono più
less Permette di leggere il contenuto di un file ed esegue la paginazione sullo stesso (in pratica, ferma la visualizzazione dopo che una schermata è stata riempita con il contenuto del file ed aspetta a passare alla successiva finchè non gli viene esplicitamente richiesto dall'utente)
ln Crea link simbolici ed hard link fra file all'interno del filesystem
lynx Avvia il browser testuale lynx, molto utile per la navigazione veloce fra pagine con contenuto testuale
mailq Visualizza la coda dei messaggi di posta elettronica in uscita
mc MidnightCommander (mc) è un filemanager veloce e versatile, che comprende fra le altre anche funzioni ftp
more Analogo di less, che però non permette di scorrere un file all'indietro
mount, umount Comandi utilizzati per montare e smontare devices (ad esempio partizioni, cdrom, etc.)
passwd Cambia la password di un utente
pwd Visualizza la directory corrente
su Permette di diventare (e quindi agire come) un altro utente fra quelli presenti nel sistema. Senza argomenti, richiede la password per l'account di root
tail Visualizza le ultime linee di un file. Con l'opzione "-f" continua a visualizzare il file mano a mano che alla fine dello stesso vengono aggiunte linee. Spesso si usa per monitorare in realtime i file di log del sistema
tar Crea ed estrae archivi di file. Il comando tar non comprime i file, perciò spesso è utilizzato assieme a comandi come gzip e bzip2
uptime Visualizza da quanto tempo il sistema è in esecuzione, riportando anche il carico medio negli ultimi 1, 5 e 15 minuti
whereis Visualizza la locazione dell'eseguibile, della pagina di manuale ed altre informazioni relative al comando passatogli come argomento
Questa è una lista, ovviamente non completa, dei comandi principali; non ha pretese di essere completa (un'installazione di base di linux comprende pià di mezzo migliaio di eseguibile, ai quali se ne aggiungono altri mano a mano che si installano altri programmi). Oltre a questi, che sono comandi che, di massima, tutti gli utenti possono lanciare, esistono anche comandi eseguibili solamente dall'utente root, e che per questo risiedono nelle directory /sbin e /usr/sbin. Vediamone alcuni.

Comando Descrizione
fdisk, cfdisk Questi due programmi, il primo più complesso e il secondo più semplice, permettono di modificare le partizioni di un disco
e2fsck Permette di eseguire un controllo sull'integrità dei un filesystem, come l'analogo scandisk di dos. Normalmente, ogni venti volte che un filesystem viene montato, esso viene controllato senza richieste da parte del sistema all'utente
halt Arresta il sistema
ifconfig Il comando ifconfig permette di configurare le interfacce di rete (assegnazione di IP e simili)
lspci Esegue una scansione dei BUS PCI individuando le periferiche ad essi connesse
mke2fs Crea una partizione Second Extended Filesystem
modprobe Carica a richiesta dei moduli del kernel
shutdown Esegue un reboot (opzione -r) o uno spegnimento (-h) del sistema dopo un determinato tempo
adduser Crea un nuovo profilo utente

I devices: uso di floppy e cdrom
In questa lezione vedremo come utilizzare floppy e cdrom. Se Windows ci ha abituati a poter utilizzare i media subito dopo avere inserito i media nel vano, con Linux il discorso si fa leggermente diverso.

Sebbene esistano dei programmi che "si accorgono" della presenza di, ad esempio, un cdrom nel lettore, di norma Linux deve essere istruito su fatto che l'utente vuole leggere o scrivere dati in un device che non sia un disco.

mount

Anche qui, abbiamo un comando che serve proprio a "far vedere" a linux i device: questo comando è mount, la cui sintassi di base è:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
dove device è il media che si deve montare (ad esempio il cdrom, che potrebbe essere identificato come /dev/hdd) e "dir" è la directory nella quale verrà montato il device stesso (ad esempio, /cdrom); "dir" viene spesso definito anche come "mount point".

Vediamo un semplice esempio: creiamo, se non esiste, la directory /cdrom; nel caso questa già esista, proviamo ad entrarci: noteremo che, a meno di stranezze, questa è vuota. Adesso inseriamo il cd nel lettore e, sempre supponendo che nel nostro sistema il lettore cdrom sia lo slave secondario (/dev/hdd) lanciamo il comando:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Se tutto va per il verso giusto, il lettore dovrebbe mettersi in funzione e un
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
ci permetterà di esplorare i contenuti del cd. Lo stesso discorso vale per il floppy: in questo caso, però, il device è /dev/fd0 (la prima unità floppy) e come mount point è meglio scegliere la directory /floppy.

le opzioni di mount

Il comando mount ci mette a disposizione molte opzioni, alcune utili altre addirittura essenziali per montare correttamente i media; vediamone qualcuna:

Opzione Descrizione
-r monta il filesystem in read-only, come avviene per i cdrom
-w monta i device in read-write, siano esempio i floppy
-t permette di specificare il filesystem del media: ad esempio, per i cdrom si usa spesso "-t iso9660", per i floppy formattati sotto windows si usa -t vfat e via di seguito. Ovviamente, il filesystem deve essere supportato dal kernel, pena l'impossibilità di montare il device
-o permette di specificare delle opzioni per il mount: probabilmente per le operazioni di base tale opzioni non sono necessarie ma possono essere molto utili per operazioni più complesse (ad esempio, il mount di device di rete)
Una volta montato un device, noterete che anche premendo il pulsante di eject (escluso il floppy) il media non uscirà. Questo perchè non abbiamo istruito Linux a "lasciare libero" il nostro device. Anche qui, c'è un comando che serve appositamente a questo: umount, la cui sintassi è semplicemente:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
dove con "dir" dobbiamo andare ad indicare la directory nella quale è montato il media. Riprendiamo l'esempio fatto sopra, ipotizzando di avere già montato il cd in /cdrom: per smontarlo, basterà solamente lanciare:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
A questo punto, con il pulsante eject del drive sarà possibile estrarre il disco dal lettore.

Può però accadere, a volte, che l'umount fallisca dicendoci "device is busy", ossia che qualcosa tiene occupato il device. Spesso, questo accade perchè un utente si trova all'interno del mount point: se provate ad esempio a dare:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
otterrete proprio il messaggio: "/cdrom: device is busy". Ricordate quindi di "uscire" dal mount point quando volete smontare il device.

Sfruttare gli alias per velocizzare il mount

Finiamo questo capitolo con un paio di trucchetti: il primo riguardante il cdrom ed il secondo il floppy.

A volte continuare a lanciare una serie di comandi per montare i cd può risultare fastidioso: per questo si possono utilizzare gli alias: scrivete nel vostro ~/bashrc o ~/bash_profile o entrambi (a seconda che vogliate utilizzare questi alias da X, da console o da entrambi) quanto segue:
Codice:
Perfavore, Entra oppure Registrati per vedere i codici!
Adesso, lanciando solamente cdin o cdout potrete montare e smontare i device senza troppi problemi!

Ma vediamo soprattutto il secondo, che è una serie di quattro comandi: il primo (cd) ci porta nella nostra home (altrimenti, se per caso siamo nel mount point, sarà impossibile smontare il device), il secondo smonta il device; il terzo ci riporta alla directory dove eravamo prima del "cd" ed il quarto espelle il cd! Notiamo soprattutto il comando eject solitamente è un programma (e quindi un pacchetto) che va installato a parte, altrimenti l'apertura del drive fallirà riportandovi un errore; alternativamente, esiste anche il comando cdeject presente nel pacchetto cdtool.

Passiamo ora al floppy: immaginate di dover copiare un file da un floppy ad un altro: bisognerà quindi:
  1. montare il primo floppy
  2. copiare il file
  3. smontare il floppy
  4. montare il secondo floppy
  5. copiare il file
Questa sarebbe la procedura standard se non esistesse il comando fdflush che permette al drive di "accorgersi" del cambiamento del floppy. Quindi, la procedura sopra illustrata si riduce al dover:
  1. montare il primo floppy;
  2. copiare il file
  3. inserire il secondo floppy e lanciare "fdflush /dev/fd0
  4. copiare il file
Una solo passo in meno, ma una grande comodità in più! L'unica nota, per chiudere, è che non tutti i drive riescono ad accorgersi del cambiamento del floppy: se eseguendo la procedura descritta sopra, dopo aver lanciato fdflush, vedete ancora il contenuto del primo disco, probabilmente il comando fdflush è inutile nel vostro sistema!

Introduzione al Kernel
In una precedente lezione abbiamo parlato delle origini di Linux soffermandoci sul fatto che esso è soltanto il kernel del sistema operativo GNU/Linux. Abbiamo anche accennato al ruolo che ricopre il kernel; in questo articolo approfondiremo alcuni lati di questa parte del sistema operativo cercando di dare alcuni suggerimenti per la sua compilazione. Come già detto il kernel ha il compito di amministrare le risorse presenti sul nostro sistema, rendendole disponibili ai processi. In questo modo si evita di far accedere i programmi direttamente a memoria, CPU, ecc. Ciò porta a una migliore organizzazione, stabilità, e maggiori performance.

Esistono fondamentalemente due tipi di kernel: "monolitico" e "microkernel". Le differenze tra i due tipi sono enormi e spesso sono nate anche delle forme ibride. Senza soffermarci troppo su questioni tecniche che potrebbero risultare noiose, ci sembra doveroso sottolineare le differenze tra i due e quali sono state le motivazioni che hanno portato Linus a preferirne uno tra questi modelli.

Un kernel monolitico ha il vantaggio essere strutturato in un unico file, risultando quindi piu' veloce, semplice e lineare. Un microkernel invece ha una struttura piu' complessa e articolata: è basato su un unico nucleo che si occupa soltanto di gestire il passaggio di messaggi alle altri componenti che sono staccate dal kernel. Queste ultime inoltre girano in "userspace". In questo modo ogni parte del kernel è completamente distinta dalle altre che vengono coordinate mediante lo scambio di messaggi. Questo tipo di kernel deve preoccuparsi solo di gestire questi messaggi e di amministrare le risorse delegando quest'ultimo compito a dei processi esterni (server). Ciò permette di aver un kernel molto snello a scapito (seppur di poco) delle prestazioni.

Linux è basato sulla prima tipologia. Ciò fu oggetto di discussione tra Linus Torvalds e Andrew S. Tanenbaum, creatore del sistema operativo MINIX, dal quale Torvalds prese spunto per Linux. Nonostante Linux si ispirasse a MINIX che era un microkernel, Linus decise di optare per un kernel monolitico. La tesi di Tanenbaum era fondata soprattutto sul fatto che quella dei kernel monolitici era una tecnologia ormai obsoleta e anche Linux rischiava di diventare obsoleto già prima di nascere. A queste accuse Torvalds rispose che Linux già per il fatto stesso di esistere era vincente: Hurd, il kernel (microkernel) su cui si doveva basare il sistema operativo GNU di Richard Stallman, non era ancora maturo e Linux poteva sopperire a questa mancanza. Tanenbaum (che era professore di Sistemi Operativi) concluse una sua email dicendogli: «I still maintain the point that designing a monolithic kernel in 1991 is a fundamental error. Be thankful you are not my student. You would not get a high grade for such a design» («Rimango ancora dell'idea che progettare un kernel monolitico nel 1991 è un errore di strutturazione. Sei fortunato che non sei un mio studente. Non prenderesti un buon voto per un tale progetto») Chissà se si è ricreduto di tale affermazione...

Tuttavia la complessità alla quale sta arrivando Linux ha di nuovo aperto il dibattito sull'opportunità di rivedere la struttura stessa del kernel. La posizione di Torvalds a proposito però non è cambiata. Recentemente hanno fatto discutere alcune sue affermazioni nella sua biografia "Just for Fun: The Story of an Accidental Revolutionary" nella quale descrive il kernel MACH (microkernel creato dalla Carnegie Mellon University nel 1985 sul quale è basato MacOS X) come pieno di errori di progettazione e spazzatura. Il kernel Linux si differenzia dalla maggior parte dei kernel monolitici per una interessante caratteristica: pur essendo basato su un nucleo compatto ha la possibilità di "collegare" a questo nucleo dei moduli, in modo da allegerire il kernel e aggiungere alcuni supporti solo se ce ne è l'effettiva necessità. Bisogna prestare attenzione che questo tipo di approccio si differenzia notevolmente da quello dei microkernel (dove i moduli comunicano per mezzo di messaggi, e non vengono "agganciati" al nucleo principale facendone parte), ma che permette di alleggerire notevolmente il kernel.

Ricompilare il Kernel
In questo articolo analizziamo i passi da seguire per ricompilare il kernel.
Prima di tutto è necessario dotarsi dei sorgenti del kernel. Se non si hanno già disponibili sul proprio Hard Disk possono essere trovati al sito
Perfavore, Entra oppure Registrati per vedere i Link!
. Per un kernel della serie 2.4 sono necessari alcuni aggiornamenti (tutte le ultime distribuzioni sono pronte per il kernel 2.4) che potrete trovare nel file /usr/src/linux/Documentation/Changes. Attualmente l'ultima versione è la 2.4.6 (linux-2.4.6). Bisogna prestare attenzione alla seconda cifra che caratterizza il kernel (4 nel nostro caso). Solo i kernel con la cifra pari sono considerati sufficientemente stabili, mentre gli altri sono ritenuti in fase di sviluppo e destinati agli sviluppatori.

I sorgenti andranno posizionati nella directory /usr/src e quindi decompressi. Per tutte queste operazioni è necessario "loggarsi" da utente root. Prendiamo il caso che abbiate scaricato il file linux-2.4.6.tar.gz.
lnxbox1:~# mv linux-2.4.6.tar.gz /usr/src
lnxbox1:~# cd /usr/src
lnxbox1:/usr/src# tar xfvz linux-2.4.6.tar.gz
Se avete già i sorgenti del kernel basta scaricare soltanto le patch di aggiornamento. Le patch sono sequenziali, dipendenti cioè dalla versione precedente. Questo vuol dire che se avete già il kernel 2.4.0 per passare al kernel 2.4.6 dovrete scaricare 6 patch e installarle. Per installare una patch scrivete:
lnxbox1:/usr/src# gzip -cd patchXX.gz | patch -p0
Dove al posto di XX vi è la versione della patch.

I sorgenti sono anche disponibili come bz2, che offre un miglior grado di compressione, ma che non ha ancora soppiantato il gz.

Se tutto è andato bene ci ritroveremo i sorgenti del nostro kernel nella directory /usr/src/linux.
Entriamo in questa directory: lnxbox1:~# cd /usr/src/linux e diamo:
lnxbox1:/usr/src/linux# make mrproper
In questo modo elimineremo tutti i collegamenti vecchi e dipendenze con la precedente versione. Questa operazione elimina anche il file .config che contiene la configurazione per il kernel.

A questo punto dobbiamo scegliere le opzioni da includere nel nuovo kernel. Da utente root scriviamo quindi:
lnxbox1:/usr/src/linux# make config
In questo modo ci verrà chiesto interattivamente cosa includere e cosa no. Esistono tuttavia dei modi più amichevoli per la configurazione del kernel. Al posto di make config possiamo scrivere:
lnxbox1:/usr/src/linux# make menuconfig
Per caricare il menu di configurazione testuale. Oppure:
lnxbox1:/usr/src/linux# make xconfig
Per caricare il menu di configurazione per X.

A questo punto si tratterà di scegliere quali opzioni del kernel fanno al caso nostro e quali no. Compilare il kernel è una delle operazioni più delicate nella quale potremo imbatterci, perché richiede una buona conoscenza dell'hardware installato sul proprio sistema e anche un minimo errore potrebbe costarci l'impossibilità di poter riavviare Linux.

Putroppo non sarebbe neanche possibile analizzare nei dettagli tutte le opzioni presenti nel kernel. Daremo però dei suggerimenti utili su quali sono le opzioni fondamentali da abilitare e quali possono essere gli errori più comuni. Se si è in dubbio se abilitare o meno un'opzione può tornare sempre di grande utilità l'help in linea. Generalizzando nell'incertezza la scelta meno rischiosa è "abbondare" nelle opzioni.

È buona norma accludere nel kernel solo il supporto per i componenti hardware fondamentali (come HD, filesystem ext2, supporto per i multiprocessore, ecc.) mentre compilare come moduli (contraddistinti da una M) le parti non indispensabili per il boot (come supporto a schede audio, schede di rete, filesystem aggiuntivi come FAT, ecc). Analizziamo ora i menu di configurazione.

Code maturity level options
È bene abilitare questa opzione ("Prompt for development and/or incomplete code/drivers") da includere staticamente (built-in, non come modulo quindi).

Loadable module support
È bene abilitare le opzioni in questo menu in modo da poter usare i moduli.

Processor type and features
In questo menu possiamo scegliere l'ottimizzazione per il nostro processore o abilitare il supporto per il multiprocessore o l'MTRR.

General setup
Da questo menu sono assolutamente da abilitare il supporto per la rete (Networking support), i supporti per le schede PCI, quello per i binari del kernel in formato ELF (Kernel support for ELF binaries) (ma anche quelli a.out e MISC per una maggiore compatibilità con i vecchi formati). Se volete potete abilitare da qui il supporto per APM (il risparmio energetico). Sono anche da abilitare "Sysctl support" e "System V IPC"

Memory Technology Devices (MTD)
Le opzioni in questo menu possono essere disabilitate nella stragrande maggioranza dei casi.

Parallel port support
Da qui possiamo includere il supporto per la porta parallela (anche compilandola come modulo).

Plug and Play configuration
Da questo menu possiamo abilitare il supporto al Plug And Play (anche come modulo)

Block devices
Da qui abilitiamo il supporto per il floppy "Normal PC floppy disk support" (meglio se built-in) e "Loopback device support".

Multi-device support (RAID and LVM)
Se avete un controller RAID o volete usare il Logical Volume Manager potete abilitare le opzioni in questo menu. Ciò potrebbe richiedere però il caricamento di alcuni demoni fatti per gestire queste feature.

Networking options
Da qui abiliterete le opzioni per il networking come il TCP/IP, supporto per firewall, masquerading, IPV6, QoS, IPX. Una delle novità del kernel 2.4 è il supporto per il khttpd, l'accelerazione per il server http (abilitatela solo se avete installato un server http).

Telephony Support
Anche da questo menu quasi sicuramente non dovrete abilitare nulla

ATA/IDE/MFM/RLL support
Abilitate (come built-in) "ATA/IDE/MFM/RLL support" e entrate nel menu sottostante.
IDE, ATA and ATAPI Block devices
Da qui abilitate (come built-in):
"Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support"
"Include IDE/ATA-2 DISK support"
"Include IDE/ATAPI CDROM support"

Abilitate anche i supporti per il DMA se volete usarlo e l'opzione relativa al vostro chip presente sulla scheda madre.
Se avete un masterizzatore IDE dovreste abilitare anche "SCSI emulation
support" e disabilitare l'opzione relativa al CDROM ("Include IDE/ATAPI
CDROM support").

SCSI support
Da qui potete abilitare il supporto per periferiche SCSI (comprese quelle emulate). Se avete un controller SCSI dovrete abilitare l'opzione relativa al vostro modello dal sottomenu "SCSI low-level drivers".

IEEE 1394 (FireWire) support
A meno che voi non abbiate interfacce FireWire potrete anche ignorare questo menu (disabilitate eventuali opzioni abilitate).

I2O device support
Nella stragrande maggioranza dei casi potete ignorare anche questo menu

Network device support
Da qui potete abilitare il supporto per una scheda di rete, PPP (necessario per collegarsi a Internet col vostro provider), e per altri tipi di connessione (PLIP o SLIP). Potete abilitare le opzioni che fanno al caso vostro come modulo.

Amateur Radio support
Da questo menu è possibile abilitare il supporto per il Packet Radio, che potrete tranquillamente ignorare.

IrDA (infrared) support
Se avete una porta infrarossi potrete abilitarla da questo menu. Da un sottomenu potrete anche scegliere il driver.

ISDN subsystem
Da questo menu potrete abilitare il supporto per le schede ISDN con i relativi driver.

Old CD-ROM drivers (not SCSI, not IDE)
A meno che non abbiate un lettore CD obsoleto con interfaccia non standard, ignorate questo menu.

Input core support
Da questo menu potrete abilitare il supporto per le interfaccie USB come mouse, tastiere, joystick.

Character devices
Da qui potrete abilitare il supporto alle porte seriali, alle stampanti parallele, mouse PS/2, joystick e all'orologio di sistema. Da qui potrete anche abilitare il supporto per l'AGP e per il DRI in modo da aumentare le prestazioni della vostra scheda video sotto X.

Multimedia devices
In questo menu troverete il supporto per periferiche di acquisizione video oppure schede radio.

File systems
Da questo menu dovrete abilitare come built-in il filesystem dove è presente la partizione di root del vostro sistema / (ext2 o reiserfs) e potrete abilitare come modulo i filesystem non indispensabili dei quali necessitiate il supporto. Da qui potrete abilitare anche il supporto per il devfs, anche se ve lo sconsiglio caldamente per ora essendo ancora in fase sperimentale.

Abilitate invece il "/proc file system support". È bene ribadire che il filesystem della vostra partizione Linux dovrebbe non essere compilato come modulo, pena l'impossibilità di fare il boot. Da qui potrete anche scegliere la codifica dei caratteri per la vostra nazione ("Native Language Support"). Per l'Italia la scelta cade su ISO-8859-1.

Console drivers
Da qui potrete il supporto per la vostra scheda VGA e per il Frame-buffer dall'opzione "Frame-buffer support".

Sound
Da questo menu avrete la possibilità di abilitare il supporto alla vostra scheda audio e per l'Open Sound System.

USB support
Tramite questo menu avrete la possibiltà di attivare il supporto per l'interfacce USB. C'è anche da dire che il supporto USB sotto Linux è ancora in fase sperimentale, e spesso non c'è modo di far andare molte di esse.

Bluetooth support
Questo è una delle novità del kernel 2.4.6. Permette il supporto per le periferiche wireless che utilizzano questo protocollo. Potete evitare di abilitare anche questa opzione.

Kernel hacking
Questo menu permette di abilitare un'opzione per il debug del kernel. Normalmente non dovrebbe essere acclusa.

A questo punto potete tranquillamente uscire e salvare.

Tra gli errori che potreste commettere il più comune è senza dubbio quello di dimenticarvi di abilitare il supporto per qualche parte del sistema essenziale, come il supporto per i dischi IDE (o SCSI se usate quelli), oppure il supporto al filesystem ext2. È importante anche che il supporto per questi sia messo come built-in, non come modulo, pena un kernel panic dopo il boot. Un'altro dei consigli è quello di provare sempre la propria versione del kernel prima di sostituirla. Potete configurare LILO in modo da avere sempre una versione di emergenza da caricare. Verrà descritta più avanti questa soluzione.

A questo punto bisogna dare i seguenti comandi per compilare sia i moduli che il kernel.
lnxbox1:/usr/src/linux# make dep && make bzImage
lnxbox1:/usr/src/linux# make modules && make modules_install
L'operatore && permette di eseguire dei comandi in serie avviando il successivo solo se il precedente è andato a buon fine. A questo punto ci dovremmo ritrovare l'immagine del nuovo kernel nella directory /usr/src/linux/arch/i386/boot sotto il nome di bzImage. Copiamo l'immagine nella directory /boot e rinominiamolo per esempio in vmlinuz-new.
lnxbox1:/usr/src/linux#
cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-new
Copiamo anche il file /usr/src/linux/System.map nella directory /boot
lnxbox1:/usr/src/linux# cp /usr/src/linux/System.map /boot
A questo punto dovremmo essere in grado di installare il nuovo kernel. Per far questo dobbiamo modificare il file /etc/lilo.conf. Se per esempio vogliamo lasciare la possibilità di caricare il vecchio kernel (caldamente consigliato qualora qualcosa andasse storto), possiamo rinominare il vecchio kernel presente in /boot (di solito chiamato vmlinuz) in vmlinuz-old, aggiungere una voce al LILO e sostituire il kernel. Per esempio cercate nel file /etc/lilo.conf la voce:
image=/boot/vmlinuz
label=Linux
read-only
root=/dev/hda5
l'ultima riga cambia a seconda di dove risiede la vostra partizione con Linux. Questa parte del file di configurazione di LILO assegna l'immagine del kernel presente in /boot/vmlinuz assegnandole il nome di Linux. Possiamo rinominare il vecchio kernel in vmlinuz-old, copiare il nuovo kernel in /boot e dandogli il nome di vmlinuz, lasciare invariata la voce precedente e aggiungere sotto una sezione del tipo:
image=/boot/vmlinuz-old
label=old
read-only
root=/dev/hda5
a questo punto scriviamo:
lnxbox1:~# lilo
Per rendere effettive le modifiche. Se qualcosa fosse andato storto in questo modo abbiamo sempre la possibilità di avviare Linux per correggere gli errori usando il vecchio kernel che richiameremo scrivendo old al prompt di LILO durante il boot.

Compilare il kernel non è mai una operazione facile. Una degli ostacoli più grandi è capire cosa abilitare e cosa no. Se proprio non sapete se un'opzione fa o meno al caso vostro il mio consiglio è di consultare l'help in linea, per farsi un'idea a proposito. Se poi i dubbi dovessero rimanere abilitate nel frattempo l'opzione, per poi tornarvi su successivamente e affinare la scelta, quando vi ritroverete un nuovo kernel compilato e funzionante.

Fonte:
Perfavore, Entra oppure Registrati per vedere i Link!


Non dite che è un semplice copia è incolla, perchè per fare questo"copia e incolla" ci ho messo 1:30 min.
 
Ultima modifica:
  • Like
Reactions: 1 person
fantastica ... per me da rilievo... sentiamo i MOD cosa dicono.... però fantastica davvero... ringrazio bravo arthur
 
Grazie a te hackme ^^
Aspettiamo un Mod :emoji_relieved:
 
Sinceramente non ho proprio voglia di leggere tutto sto malloppone xD mi sono limitato a visionare gli argomenti senza entrare nello specifico, ma vista la fonte sto in fiducia..

Rilievo accordato, tanto mancava una guida buona (ma saranno in pochi ad arrivare fino alla fine della lettura)
 
Sarebbe una cosa utile inserire un'indice all'inizio del topic, in modo da trovare il punto che ci interessa facilmente con uno strumento di ricerca del Browser :emoji_slight_smile:
Io alzo reputazione, è utile e mi è servita.
 
si ... gente ho appena installato la 10.04 .... fa un po schifo come grafica ... soprattutto i bottoni "chiudi" , "massimizza","minimizza" sembrano quelli del mac !!!
però w linux comunque
 
Sinceramente, dubito anche io che la leggano tutti.
Ma, comunque chi vuole avere info riguardo a linux,
in un argomento specifico, può cercare in questo topic.
Comunque grazie Abe per il rilievo e
grazie a tutti voi.
 
si ... gente ho appena installato la 10.04 .... fa un po schifo come grafica ... soprattutto i bottoni "chiudi" , "massimizza","minimizza" sembrano quelli del mac !!!
però w linux comunque

non c'è niente per spostarli a destra? Sta cosa dei bottoni è l'unica ragione che mi stà facendo valutare bene la possibilità di cambiare versione.. non mi piace proprio averli come il mac
 
non c'è niente per spostarli a destra? Sta cosa dei bottoni è l'unica ragione che mi stà facendo valutare bene la possibilità di cambiare versione.. non mi piace proprio averli come il mac

e quello che sto cercando di fare ... ci sto smanettando da 10 ore.... aspetta e poi ti dico se riesco a fare qualcosa
 
Ma certo che si possono mettere i bottoni a destra. :emoji_relieved:

Voi siete abituati a questo :

w896hk.jpg


E il vostro tema è questo che ho evidenziato :

of7l9v.jpg


Voi per cambiare il tutto dovete fare :

Tasto destro sul Desktop > Change Desktop BackGround

E andare a selezionare questo tema che ho evidenziato :

10qewpc.jpg


Ora confrontate l'immagine (2) con l'immagine (3), noterete che la X ha cambiato posizione, quindi il risultato finale sarà questo :

33kc8xi.png


Era talmente semplice. :emoji_relieved:
 
Ma certo che si possono mettere i bottoni a destra. :emoji_relieved:

Voi siete abituati a questo :

w896hk.jpg


E il vostro tema è questo che ho evidenziato :

of7l9v.jpg


Voi per cambiare il tutto dovete fare :

Tasto destro sul Desktop > Change Desktop BackGround

E andare a selezionare questo tema che ho evidenziato :

10qewpc.jpg


Ora confrontate l'immagine (2) con l'immagine (3), noterete che la X ha cambiato posizione, quindi il risultato finale sarà questo :

33kc8xi.png


Era talmente semplice. :emoji_relieved:

hackme ha già postato una guida su come risolvere ::emoji_relieved:
 
Ottima Guida , e ottime fonti . Me la sono mangiata anche se non ho letto propio tutti i comandi , mi sono limitato a leggere tutti i concetti . Anche perchè speravo avessi dedicato un sessione per LVM , peccato mi serviva propio . Non ho capito perchè poi lo hai annotato insieme a Raid alla fine , non dovrebbe essere importante per la compilazione delle partizione per creare un sistema flessibile e gestibile da LVM ??

Hai fatto troppo compia e incolla PRRRRR :emoji_slight_smile: scherzo . Volevo solo dire che come l'hai gestita bene in modo temporale dovrebbe essere messo all'inizio . Comunque bravo !! Ci vuole tempo per trovare tutto sulle fonti .
 
Bhè un copia incolla durato 2 ore ::emoji_relieved:
Grazie mille :soso:
 
Di base, il comando è:
/etc/init.d/apache stop (o /etc/rc.d/init.d/apache stop per RedHat e derivate).
per interromperlo e:
/etc/init.d/apache start per avviarlo. In alternativa, un metodo più rapido è:
Vabbè fa nulla
C'è un errore di scrittura ;-) , modificalo se no si confondono eheheh .
--------------- AGGIUNTA AL POST ---------------
Bhè un copia incolla durato 2 ore ::emoji_relieved:
Grazie mille :soso:

De nada , beh comunque è molto utile , soprattutto per chi si vuole fare un infarinata .
 
Ultima modifica:
Bhe, per lo più è creata per chi cerca qualcosa in particolare, dato che la guida è divisa in molti argomenti!