Basi di Linux

Da raspibo.
Versione del 28 ott 2013 alle 13:22 di Dave4rp (discussione | contributi)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)
Jump to navigation Jump to search

Aiutati che il ciel ti aiuta!

Cerchiamo di raccogliere qui alcuni consigli che possono tornare utile a chi è ai primi passi con i sistemi GNU/Linux e la programmazione.

Non si parlerà di elettronica, e non scenderemo nei dettagli; per quelli ci saranno il corso e le discussioni sul social network.

Il giusto approccio

Si può riassumere in niente panico: è software, non potete fare danni. O meglio, potete fare quantità inimmaginabili di danni, ma al tempo stesso potete porvi nelle condizioni di rendere tali danni irrilevanti (risolvendo il problema o ricominciando da capo).

Non abbiate quindi paura di fare un po' di esperimenti e, se proprio non vi riesce, descrivete quel che avete fatto e chiedete aiuto: è molto più facile aiutarvi se vi presentate stile "ho provato a fare X, ma mi sono bloccato di fronte al problema Y che non so risolvere", piuttosto che "voglio fare X, mi insegni?"

Cercate di avere un approccio metodico: premere tasti a caso non funziona; se decidete di seguire passo-passo una qualche guida cercate sempre di capire il significato dei singoli passaggi; se improvvisate assicuratevi di avere chiari il punto di partenza, l'obiettivo e - dato che quasi sempre quel che si vuole ottenere è troppo grande per essere risolto con un unico passaggio - cercate di scomporre il problema in una serie di punti da risovere in sequenza. Allo stesso tempo evitate di essere eccessivamente timorosi: abbandonare perché uno dei passaggi vi risulta poco chiaro non ha senso; non iniziare neanche perché "nessuno mi insegna", ancora meno. Piuttosto chiedete aiuto, cercate in rete una soluzione, copiate qualcosa di già pronto anche se al momento non lo capite (chiederete poi...), aggirate il problema barando, ma insomma... provateci.


Evitiamo i danni

Vecchio PC

Il modo più semplice per evitare danni, è procurarsi un sistema sacrificabile ed imparare a ripartire da zero. Se avete una vecchio PC e potete dedicare al sistema l'intero disco fisso (previo backup del precedente contenuto, se importante), ottimo: provate ad installare una distribuzione qualsiasi (Ubuntu, Debian, Fedora, ma va bene più o meno tutto). I sistemi di installazione attuali sono estremamente semplici e ben descritti altrove, ad esempio nella guida per l'installare grafica di Ubuntu o quella di Fedora.


Virtualizzazione

Grazie ai sistemi di virtualizzazione potete emulare uno o più sistemi completi all'interno del vostro PC; il sistema emulato sarà poi a vostra disposizione come se fosse un altro computer e - in caso di problemi - diventa molto semplice salvarne lo stato in modo da ripristinarlo in seguito ripartendo quindi da una condizione "pulita".

Su computer che non siano vecchi di un decennio e che abbiano una quantità di RAM sufficiente (diciamo almeno un paio di GB, meglio se di più), le prestazioni dei moderni sistemi di virtualizzazione sono molto buone.

Un virtualizzatore molto semplice da usare e disponibile per varie piattaforme è VirtualBox di cui potete trovare svariate guide in rete. Da notare che a differenza di altri sistemi - magari un po' più complessi da usare - VirtualBox non è in grado di emulare architetture diverse dalla x86, quindi non pensate di emularci un Raspberry Pi (cosa che non sarebbe così semplice neppure con altri strumenti, per la cronaca)

Raspberry Pi

Per utilizzare un Raspberry Pi come sistema di test potete fare riferimento a questa pagina del wiki, che copre l'installazione ed una prima configurazione del sistema.


Reperire informazioni

In questo un motore di ricerca è il vostro miglior amico, come sempre.

Guide complete

Un classico testo italiano di introduzione ai sistemi Linux (con anche un certo grado di approfondimento) è Appunti di Informatica Libera

Secoli fa compilai un breve elenco di comandi linux che forse può ancora essere utile come riferimento rapido o per una prima infarinatura (non tutti i comandi lì descritti sono ancora attuali o importanti, e di certo non vi serve impararli tutti).

Help in linea

Sui sistemi Linux è sempre presente, per ogni comando, una esaustiva pagina di manuale. Per accedervi, basta eseguire:

       man nome_del_comando

Ad esempio man man mostrerà la pagina relativa allo stesso comando man (non è necessario che la leggiate tutta: a parte forse -a, la maggior parte delle sue opzioni non vi serviranno mai). È possibile che di default abbiate installate solo le versioni in inglese; se cercate delle traduzioni in italiano, verificate di aver installato il pacchetto manpages-it (o simile).

Fanno eccezione tutti i comandi e costrutti della shell, che sono brevemente documentati usando il comando help (e.g.: help test)

Links utili

Raspberry Pi How to: Learning Linux Commands (en)

Il sistema nel suo complesso

Linux è un sistema multiutente e multitasking. Ciò significa che più utenti possono usare la macchina (non è però detto che ad un utente coincida una persona fisica: possono anche trattarsi di utenze usate internamente per vari motivi) e che più processi, anche di utenti diversi, vengono eseguiti in contemporanea (o qualcosa che ci somiglia abbastanza ;-)

I pacchetti e le distribuzioni

Un sistema Linux non si limita al solo sistema operativo, ma viene rilasciato in distribuzioni (Ubuntu, Debian, Fedora, openSUSE e moltissime altre) che comprendono anche una infinità di altri programmi, ciascuno contenuto in uno più pacchetti (per fare un esempio: esiste il pacchetto gimp che include un noto programma di fotoritocco, ed anche il pacchetto gimp-help-it che si può installare opzionalmente se volete l'help in italiano). La distribuzione garantisce che l'installazione di nuovi programmi sia semplice e fa in modo che tutte le dipendenze necessarie al funzionamento di un dato programma vengano soddisfatte (ad esempio installando tutte le librerie necessarie).

Oltre agli strumenti grafici che sicuramente la vostra distribuzione mette a disposizione (synaptic, per esempio) è bene prendere confidenza con gli strumenti a riga di comando per la gestione dei pacchetti (dpkg, rpm, aptitude, apt-get, smart, yum o altri a seconda della vostra distribuzione).

Gli utenti

Il sistema operativo garantisce agli utenti la possibilità di compiere determinate azioni (leggere/scrivere un file, accedere ad un dispositivo e così via) in base ai privilegi associati a ciascun utente. Ciascun utente ha un proprio spazio (la propria home) nella directory /home/nome-utente (nota che normalmente gli utenti usati internamente dal sistema non hanno una home in /home) in cui salvare i propri file.

L'utente root è l'amministratore di sistema e - semplificando - può fare tutto; è bene crearsi un utente non privilegiato e non lavorare come root, se non nei rari casi in cui ci sono da fare modifiche al sistema stesso. La sua home è /root

Il filesystem

Il filesystem è uno degli elementi centrali del sistema, trattandosi della principale risorsa condivisa tra tutti gli utenti e primo elemento a cui vengono applicati i permessi degli utenti (lettura e scrittura di file e directory, per esempio).

La sua struttura gerarchica è descritta in man hier

Ogni file e directory ("cartelle" se siete abituati ad altri sistemi) è di proprietà di un determinato utente ed appartiene ad un certo gruppo, ha inoltre permessi separati di esecuzione, lettura e scrittura definiti rispettivamente per utente, gruppo e tutti gli altri e ad esempio rispondo quindi in maniera separata a domande come "può il proprietario di questo file scriverlo?", "possono gli utenti che fanno parte del gruppo proprietario di questo file scriverlo?" e "possono tutti gli altri utenti scriverlo?"

Per potervi accedere, le directory devono essere eseguibili; una descrizione più approfondita dei permessi sui file la trovate qui

Esecuzione di comandi

Dopo aver effettuato un login testuale (direttamente sul sistema o via rete) o dopo aver aperto un terminale (se state usando l'interfaccia grafica), vi ritroverete al prompt della shell; di norma si tratta del programma bash, ma ne esistono svariate altre. Dai qui è possibile eseguire comandi ed utilizzare i costrutti forniti dalla shell per la creazione di script complessi che eseguano più comandi secondo sequenze logiche (insomma: potete programmare).

Per eseguire un comando è sufficiente scriverne il nome seguito dagli eventuali parametri. La shell cerca gli eseguibili in una serie di directory contenute in una variabile di ambiente (pensatela come una variabile utilizzabile per modificare il comportamento dell'interprete di comandi) detta PATH. Di norma la directory corrente non è contenuta nel PATH; per eseguire un programma in essa contenuto dovete indicarne il percorso completo (come /home/davide/eseguibile) o quello relativo (ad esempio ./eseguibile se siete nella stessa directory). Negli esempi appena forniti abbiamo visto l'uso di / per riferirsi alla directory radice (da cui l'intero albero del filesystem si dipana) e . (usato in ./eseguibile) per fare riferimento alla directory corrente; esiste un altro riferimento relativo: .. punta alla directory immediatamente superiore a quella corrente. La shell di normale espande alcuni caratteri speciali, come ~ che usata da sola fa riferimento alla home dell'utente corrente.

Maggiori informazioni: http://www.debian.org/doc/manuals/debian-reference/ch01.it.html#_unix_file_basics

Cosa succede nel sistema

Un sistema Linux ha sempre un ampio numero di servizi in esecuzione detti daemons ("demoni"); di norma qualunque evento significativo del sistema viene registrato in file testuali nella directory /var/log; è spesso molto utile tenere traccia di quel che accade. Un modo semplice per monitorare continuamente un file è usare il comando tail (che mostra le ultime righe del file) con l'opzione -f (che, arrivato alla fine del file, continua ad aspettare nuove righe); per esempio:

       tail -f /var/log/kern.log

Mostrerà di continuo gli ultimi messaggi scritti dal kernel. Va tenuto presente che di norma questi file sono leggibili solo da root.

Programmazione

Bash

Links

Python

Links