Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni42 pagine

02 Comandilinux

Caricato da

ipasrl.guest
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni42 pagine

02 Comandilinux

Caricato da

ipasrl.guest
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Mod 18 –

Programmazione
Raspberry Pi
L’ambiente Linux
Raspberry Pi – Ambiente Linux
Cos’è un Sistema Linux?

• I sistemi operativi di tipo GNU/Linux (spesso detti solamente Linux) appartengono ad una
famiglia di sistemi operativi detti Unix-like (dal nome del sistema UNIX da cui hanno preso
origine negli anni ‘70).

• Sono considerati Unix-like una grande quantità di sistemi operativi sia proprietari che open-
source come ad esempio: Linux, Minix, Mac OS X, FreeBSD, DragonFlyBSD, NetBSD,
OpenBSD, Atx, Open Server, UnixWare, Solaris, Open Solaris, HP-UX

• Tutti questi sistemi operativi mantengono caratteristiche in comune (lo standard si chiama
POSIX) come il linguaggio della shell dei comandi e la struttura del sistema operativo. Prima
del progetto GNU/Linux infatti stavano nascendo molteplici ‘dialetti’ Unix che avrebbero
portato con sé diverse incompatibilità.
Raspberry Pi – Ambiente Linux
Windows è un sistema Linux?
• Windows NON segue lo standard POSIX e infatti il prompt dei comandi utilizza un linguaggio
diverso da quello della shell di Linux
• La Windows PowerShell cerca di colmare questa lacuna e accetta molti comandi di Linux
anche se non sempre con le stesse funzionalità
Raspberry Pi – Ambiente Linux
Android è un sistema Linux?

• Android è una distribuzione Linux ma non GNU/Linux

• Android adotta quindi una versione modificata del kernel Linux tuttavia non utilizza
l’insieme di programmi e librerie GNU, un esempio è la libreria GNU C Library non utilizzata
da Android e sostituita con una implementazione ad hoc
Raspberry Pi – Ambiente Linux
Quante versioni Linux esistono?

Il sistema GNU/Linux, essendo open source, si è diffuso in un enorme numero di varianti.


Infatti ogni programmatore sufficientemente esperto può scaricarsi il codice sorgente e creare
una versione dell’OS adatta ai suoi scopi. Si trovano versioni del sistema operativo
specializzate in innumerevoli applicazioni: alcune sono adatte a vecchi computer con poche
risorse, ai dispositivi IOT, ai centri di calcolo o ai server; alcune sono rivolte agli sviluppatori;
alcune sono per l’uso domestico altre sono rivolte alle aziende.
Raspberry Pi – Ambiente Linux
Quante versioni Linux esistono?

Le varie versioni di Linux prendono il nome di distro, le distro più famose e diffuse sono:
• Red Hat, CentOS, Fedora, openSuse e derivate: sono state le prime distro a supportare i
pacchetti di installazione .rpm, ora sono supportati da gran parte delle distro ma queste restano
molto utilizzate.
• Debian e derivate (Ubuntu, Linux Mint, Kali Linux, PureOs, Raspbian): sono le distro più diffuse,
sono basate sui pacchetti .deb e sono generalmente user friendly con ambienti grafici simili a
quelli di windows. In questi sistemi i pacchetti vengono gestiti da dpkg che di solito si utilizza
tramite l’interfaccia apt (sono disponibili anche interfacce grafiche per il packet manager in
alcune distro)
• Arch Linux e simili (SystemResque): distro che si focalizzano sulla semplicità e sulla compatibilità,
utilizzano un gestore di pacchetti proprietario (pacman) ma hanno un’interfaccia grafica molto
scarna
• Gentoo e derivate (Chromium OS): la caratteristica di questi sistemi è di non offrire una
repository con file binari già compilati ma di offrire il sorgente che poi viene compilato durante
l’installazione.
• Indipendent distro (Android, Puppy Linux): sono distro che sono state create direttamente dal
kernel Linux, sono molto diverse tra loro ma molto diffuse
Raspberry Pi – Ambiente Linux
Kernel Linux?

• Data la sua enorme versatilità molte persone si riferiscono a Linux parlando di sistema
operativo, tuttavia con il termine «Linux» ci si riferisce solamente al kernel, ovvero al nucleo
centrale che si occupa dell’interfacciamento tra le risorse hardware e le applicazioni
dell’utente
A
C H p
o p a
a K
m L s c
r e U
p d i t
r s
n S i
u w n e
a u h o
t e r
e r x e n
l
r e l s
l
Raspberry Pi – Ambiente Linux
E GNU?

• GNU è l’acronimo di «GNU’s not Unix», ovvero GNU non è Unix ma bensì un sistema
operativo Unix-Like caratterizzato dallo scopo di essere ottenuto solamente utilizzando
software open-source.

• Tuttavia GNU è un sistema operativo privo di kernel e quindi può essere abbinato a diversi
di questi, come per esempio Linux e da cui prende appunto il nome di sistemi operativi
GNU/Linux.
Raspberry Pi – Ambiente Linux
Caratteristiche dei Sistemi Linux

• I sistemi Linux sono tipicamente sistemi multiutente, questo significa che lo stesso
dispositivo può essere utilizzato da molte persone (anche contemporaneamente da diverse
interfacce) e ognuna avrà accesso solo ai suoi file personali e non a file di sistema.

• Gli utenti possono a loro volta essere divisi in gruppi, ogni utente può decidere se rendere
un suo file visibile o scrivibile solo a se stesso, ai membri del suo gruppo, o anche a tutti gli
utenti.

• L’unico utente che ha accesso libero ai file di sistema (e a quelli di tutti gli utenti) è
l’amministratore di sistema detto anche root o super utente.
Raspberry Pi – Ambiente Linux
Struttura dei file

Riservato al Documents
root
Desktop
usr
pi …
etc
var Documents
/ tizio
dev Desktop
home


caio
Documents

Desktop


Raspberry Pi – Ambiente Linux
GUI o Shell?

• I sistemi operativi Linux non sono basati sull’ambiente grafico (come i sistemi Windows
moderni), possono funzionare benissimo senza interfaccia e, anzi è possibile installare
l’ambiente desktop dopo aver istallato il sistema (per Ubuntu ad esempio ne sono
disponibili moltissimi).

• Normalmente Raspberry Pi OS offre diverse interfacce utente tra cui è possibile switchare
utilizzando i tasti (Ctrl+Alt+F1, Ctrl+Alt+F2, Ctrl+Alt+F3 …) di solito di default si lavora con
l’interfaccia di cui è attivo l’ambiente grafico, è possibile però attivare anche le altre (e
anche più ambienti grafici contemporaneamente e con utenti diversi). Per tornare al solito
mondo grafico è sufficiente utilizzare la combinazione Ctrl+Alt+F7

• Il gestore grafico utilizzato da Raspberry Pi OS (e da quasi tutti i sistemi Unix-like) si chiama


X Window System e può essere avviato con il comando startx
Raspberry Pi – Ambiente Linux
GUI o Shell?

• Su Raspberry è possibile decidere tramite le impostazioni di sistema se il gestore grafico


deve essere attivato di default o se attivarlo manualmente ogni volta. Ovviamente senza
gestor grafico possono essere utilizzate solo le applicazioni con interfaccia a riga di
comando.

• Una volta che l’ambiente grafico è stato avviato è possibile utilizzare comunque le
applicazioni da riga di comando utilizzando una shell. Per richiamare la shell predefinita
premere Ctrl+Alt+T o utilizzare l’icona nella barra delle applicazioni
Raspberry Pi – Ambiente Linux
Comandi Linux da Shell/Terminale

• Abbiamo visto quindi che le applicazioni grafiche e in generale la GUI sui listemi GNU/Linux
possono essere sostituiti da tutta una serie di comandi
• Un generico comando è espresso nella seguente forma:
comando [opzioni] [argomenti]
• Le opzioni sono solitamente precedute da ‘-’ o ‘--’ e possono anche essere raggruppate
• Gli argomenti invece sono i dati su cui si opera (per esempio i file se si stanno effettuando
operazioni di copia/incolla)

• Esiste un help in linea che ci può aiutare con qualsiasi comando dobbiamo utilizzare e ne
descrive dettagliatamente la sintassi da utilizzare, le caratteristiche e le possibili opzioni che
sono specificabili
man <comando>
Raspberry Pi – Ambiente Linux
Comandi utili per spostarsi tra le directory

• pwd mostra il pathname della directory corrente


• cd [pathname] consente di cambiare la directory di lavoro attuale
• cd ~ posiziona l’utente nella sua home
• cd .. sposta la cartella di lavoro nella directory subito superiore
• cd – torna nell’ultima directory visitata
Raspberry Pi – Ambiente Linux
Comandi utili per creare e rimuovere directory

• mkdir <directoryname> crea una cartella con il nome specificato all’interno della cartella di
lavoro attuale
• rmdir <directoryname> cancella una cartella ma solamente se questa è vuota altrimenti è
necessario specificare l’opzione –r per avviare una cancellazione ricorsiva

Altri comandi utili per file e cartelle

• ls mostra il contenuto della cartella corrente, è disponibile con diverse opzioni tra le quali la
più utile è –al che indica di scrivere anche i file nascosti e di specificare, proprietari,
permessi e data di creazione
• touch crea un file vuoto con il nome specificato
• cat scrive sul terminale il contenuto di un file specificato (attenzione se è un file binario sarà
illeggibile)
Raspberry Pi – Ambiente Linux
Comandi utili per i file

• rm rimuove un file definitivamente


• cp copia il file indicato nella destinazione indicata
• mv sposta il file indicato nella destinazione indicata (si usa anche per rinominare)
• ln crea un collegamento al file indicato nella destinazione indicata
• nano un editor di testo basilare che funziona senza interfaccia grafica
• vim un editor di testo senza interfaccia grafica (non molto user-friendly)
Raspberry Pi – Ambiente Linux
Altri comandi

• sudo scritto prima di un comando indica che dovrà essere eseguito come superutente.
ATTENZIONE! Prima di eseguire un comando da superutente verificare attentamente la sua
funzione MAI eseguire come superutente un programma di cui non si conoscono gli effetti
• whoami scrive il nome dell’utente che stai utilizzando
• hostname scrive il nome della postazione che state utilizzando
• ps scrive i processi in corso ( usare l’opzione –ef per informazioni dettagliate)
• kill termina il processo di cui è viene dato l’id (ci sono diversi gradi di terminazione… leggere
il manuale per ulteriori informazioni)
• ifconfig scrive informazioni sulle interfacce di rete attive, tra cui gli indirizzi IP
• exit: chiude la shell dei comandi o effettua il logout
• reboot: comanda il riavvio del sistema (solo da super utente)
• shutdown: comanda lo spegnimento della macchina, è possibile ordinare un conto alla
rovescia o un orario specifico (solo da super utente)
Raspberry Pi – Ambiente Linux
Esercizio

Supponendo che / sia una cartella all’interno dei vostri Documenti e che i rettangoli
rappresentino delle cartelle e i cerchi dei file:
• Scrivere i pathname assoluti dei file F6, F11 e F12

1. /D3/F6

2. /D2/D5/F11

3. /D1/D4/D6/F12
Raspberry Pi – Ambiente Linux
Esercizio

Supponendo che / sia una cartella all’interno dei vostri Documenti e che i rettangoli
rappresentino delle cartelle e i cerchi dei file:
• Supponendo di essere posizionati in D6 scrivere i pathname relativi dei file F4, F9, F10 e F13

1. ../../F4

2. ../F9

3. ../../../D2/D5/F10

4. ../D7/F13
Raspberry Pi – Ambiente Linux
Pac-Man e la caccia al tesoro nel terminale

• Proprio come nel gioco di Pac Man andrete alla ricerca dei fantasmi che
hanno infestato il vostro computer
• I fantasmi sono: Blinky, Clyde, Spooky, Pinky, Inky, Funky e Sue
• Per catturare i fantasmi dovrete muovervi nel vostro computer solo tramite
la shell dei comandi, cliccate ctrl + alt + F1 per disabilitare l’interfaccia
grafica
Raspberry Pi – Ambiente Linux
Pac-Man e la caccia al tesoro nel terminale

• Per dare il via alla caccia nel vostro terminale digitate:


$wget -O – [Link] | bash
• Notate che il simbolo $ non va digitato, indica che la vostra shell è pronta a
ricevere un comando
• Il comando ‘wget’ permette di scaricare direttamente un file dall’indirizzo
specificato
• Il comando ‘| bash’ invece significa di eseguire quanto scaricato tramite bash
subito dopo averlo scaricato (Fate attenzione, questo può risultare MOLTO
pericoloso se non sapete cosa state scaricando)
• ‘bash’ è un comando che permette di eseguire i comandi contenuti in un file
Raspberry Pi – Ambiente Linux
Pac-Man e la caccia al tesoro nel terminale

• Vedrete che il comando appena digitato farà stampare del testo sul terminale,
vuol dire che sta scaricando i file e preparando l’occorrente per iniziare la caccia
• Ora premete ctrl+l oppure digitate reset nel vostro terminale
• Sempre nella vostra home create una cartella ‘quarantena’:
mkdir quarantena
• Usate i comandi elencati precedentemente per muovervi tra le directory del
vostro computer e trovare i fantasmi
• Una volta trovato un fantasma copiatelo nella vostra cartella ‘quarantena’ ed
eliminatelo dalla cartella in cui si trova (ATTENZIONE: ciò che viene rimosso con il
comando da terminale non viene spostato nel cestino MA è rimosso
definitivamente!)
Raspberry Pi – Ambiente Linux
Pac-Man e la caccia al tesoro nel terminale

• Navigate ora fino alla cartella ‘quarantena’ e utilizzate il comando ‘cat’ seguito dal nome del
file, sarà mostrato il contenuto del file ovvero il bottino che avete raccolto!

Ciliegia Fragola Pesca Mela Uva Boss Campana Chiave

100 300 500 700 1000 2000 3000 5000

• Ora liberatevi definitivamente della cartella che contiene i fantasmi e il vostro pc sarà salvo
Raspberry Pi – Ambiente Linux
Come installare nuove applicazioni?

• Nei sistemi Linux le installazioni sono gestite dall’applicazione dpkg, normalmente però ci si
interfaccia con quest’ultima utilizzando il comando apt che è più user friendly.
• Per ogni sistema Linux attualmente supportato esiste una repository
([Link] è quella italiana per la versione Debian), cioè un archivio che
comprende tutte le applicazioni open-source già compilate e testate per il sistema che si sta
utilizzando. Apt contiene un elenco di pacchetti disponibili per l’installazione e può essere
utilizzato sia per istallare nuovo software che per tenere aggiornato quello vecchio.
Raspberry Pi – Ambiente Linux
Os Recenti Os Datati

apt list dpkg -l Mostra un elenco di tutti i pacchetti per la repository del
sistema operativo in uso (anche per le architetture diverse dalla
propria)
apt list --installed dpkg --get-selections Mostra un elenco dei pacchetti attualmente installati
| grep -v deinstall
apt update apt-get update Aggiorna l’archivio del computer con i dati della repository
remota, informa inoltre l’utente se ci sono dei pacchetti da
aggiornare

apt upgrade apt-get upgrade Aggiorna tutti i pacchetti che richiedono l’aggiornamento

apt install gedit apt-get install gedit Installa il pacchetto specificato e tutti i pacchetti che occorrono
per farlo funzionare
apt remove gedit apt-get remove gedit Disinstalla il pacchetto specificato
Raspberry Pi – Ambiente Linux
E se il sistema non fosse più supportato?

• Nei sistemi più vecchi la repository non è più disponibile oppure è stata spostata ad un indirizzo
diverso, ma la repository è l’unico modo per installare programmi su sistemi linux? No!
• Non tutti i programmi sono disponibili sulla repository (ad esempio quelli con codice proprietario
non ci sono) per cui esistono altri sistemi di installazione:
• Alcuni programmi non hanno bisogno di installazione, basta scaricarli e copiarli in una
cartella. In questa categoria rientra buona parte dei programmi Python.
• Di alcuni programmi è possibile scaricare l’installer (in formato .deb o .rpm) e poi installarlo
utilizzando dpkg
• Di alcuni programmi viene fornito un eseguibile che effettua l’installazione (.run) oppure un
file che contiene istruzioni di installazione che vengono eseguite automaticamente dalla shell
(.sh)
• Se un programma è open-source è sempre possibile compilarlo a partire dal codice sorgente
(anche se di solito è un operazione lunga e richiede una certa esperienza)
Raspberry Pi – Ambiente Linux
Cos’è Bash?

• Bash è la Shell di Linux più utilizzata e diffusa attualmente


• E’ l’interfaccia a linea di comando che permette l’interazione con i sistemi operativi derivati
da Unix, quindi anche con Raspberry Pi OS

Cos’è lo Shell Scripting?

• Invece di inserire un comando alla volta e riceverne subito il risultato è possibile far
eseguire a Bash degli script di comandi
• Uno script può contenere una semplice lista di comandi ma anche funzioni, cicli e istruzioni
condizionali
Raspberry Pi – Ambiente Linux
Hello World e la sintassi del linguaggio
Questa riga informa il sistema che il file
deve essere eseguito da /bin/bash,
ovvero il percorso della standard bash
shell su qualsiasi sistema Unix

La seconda e l’ultima parte della terza


riga iniziano con # ed indicano un
commento che sarà quindi ignorato da
dalla shell
L’unica eccezione alla regola # è
rappresentata dalla prima riga dove si La terza riga esegue il comando echo
ha #! e indica una direttiva che Unix con due parametri (il primo è Hello e il
tratterà in maniera specifica secondo è World) e permette di
stampare a schermo i parametri che
riceve in ingresso

Per eseguire il file avremo bisogno di rendere il file eseguire andando a modificarne i permessi!
Raspberry Pi – Ambiente Linux
Comandi per modificare i permessi

• chown cambia il proprietario di un file e può essere eseguito solo da root


• chmod cambia i permessi di lettura/scrittura/esecuzione un file, soltanto il proprietario del
file può cambiarne i permessi

• I permessi di accesso possono essere:


• r di lettura (read) chmod [[u][g][o]] {-|+|=} [r][w][x]
• w di scrittura (write)
• x di esecuzione (execute)
• Possono essere assegnati:
• u di utente (user) chmod o+w test per esempio da a tutti il diritto di scrittura al
• g di gruppo (group) file test
• o di altri (others)

Si può anche usare la notazione numerica addizionale dove r=4 w=2 e x=1 quindi per esempio chmod 777
da a tutti tutti i diritti
Raspberry Pi – Ambiente Linux
Eseguire lo script bash

• Se si eseguisse subito lo script senza modificare i permessi si riceve questo messaggio

• chmod +rx [Link] permette di rendere eseguibile lo script


• Dopo di che si può eseguire effettivamente con ./[Link]
Raspberry Pi – Ambiente Linux
Dichiarazione di variabili

• Come negli altri linguaggi di programmazione, anche negli script bash è possibile definire
variabili e queste verranno richiamate con il simbolo $

Qui invece viene richiamata la variabile


Questa è la dichiarazione della variabile location utilizzando la notazione
ATTENZIONE! Non deve contenere spazi ${nome variabile}
ATTENZIONE! Le parentesi graffe
possono essere omesse a meno che non
siano strettamente necessarie
Raspberry Pi – Ambiente Linux
Dichiarazione di variabili

• La dichiarazione di variabili negli script bash è molto flessibile e può essere utilizzata anche
per dichiarare i comandi da utilizzare

Qui lo richiamiamo con la stessa sintassi


della variabile precedente
Per esempio dichiariamo come variabile
il comando da usare

• Bash è un linguaggio a tipizzazione dinamica, ovvero non è necessario dichiarare anche il


tipo delle variabili
Raspberry Pi – Ambiente Linux
Costrutti condizionali

• Esistono anche i costrutti condizionali definiti tramite le parole chiavi


• if CONDIZIONE ; then
Alternativamente al ; si può mandare a
• elif CONDIZIONE ; then
capo then in una nuova riga:
• else If CONDIZIONE
• fi then

Tramite questa sintassi si chiede se il file


‘[Link]’ esiste

ESERCIZIO: Aggiungere un controllo aggiuntivo prima dell’else per verificare se esiste il file
[Link], se esiste comunicarlo all’utente ed effettuarne la copia
Raspberry Pi – Ambiente Linux
ESERCIZIO: Aggiungere un controllo aggiuntivo prima dell’else per verificare se esiste il file
[Link], se esiste comunicarlo all’utente ed effettuarne la copia
Raspberry Pi – Ambiente Linux
Cicli For
Variabile del ciclo
Parole chiavi Insieme su cui effettuare
il ciclo for

Corpo del ciclo

L’insieme su cui effettuare il ciclo


può anche essere composto da
valori di qualunque tipo
Raspberry Pi – Ambiente Linux
Cicli while e until

• Il ciclo while continua ad eseguire fino a che la condizione specificata continua ad essere
vera
• Il ciclo until invece funziona inversamente al while e continua ad eseguire fino a che la
condizione specificata è falsa
Raspberry Pi – Ambiente Linux
Uscire da un ciclo prima che questo sia terminato

• L’istruzione break interrompe il ciclo all’interno del quale viene richiamata

Redirezionare l’output

• È possibile anche redirezionare l’output, normalmente stampato nel terminale, verso un file
• Per sovrascrivere quanto contenuto nel file e inserire all’inizio l’output del comando lanciato
utilizzare ‘comando > file’
• Se si vuole concatenare l’output del comando ed aggiungerlo in coda al file utilizzare il
doppio >>
Raspberry Pi – Ambiente Linux
Richiedere un input all’utente

• Tramite il comando read è possibile leggere quanto digitato dall’utente sul terminale
• Fate attenzione perché questa istruzione è bloccante, vuol dire che il vostro terminale si
fermerà su questa istruzione fino a che l’utente non avrà digitato l’input e premuto invio
• La sintassi è «read INPUT» e il dato inserito viene conservato all’interno della variabile
INPUT, a questa si potrà accedere come a tutte le altre variabili tramite $INPUT
Raspberry Pi – Ambiente Linux

Esercizio

• Scrivere un ciclo che legga un input dall’utente e lo scriva sul terminale e continui finché
l’utente non scrive «esci»
• Il comando read permette di leggere l’input dell’utente
• Ci sono diversi modi per risolvere l’esercizio, uno di questi richiede l’istruzione break che
interrompe il ciclo all’interno del quale viene chiamata
Raspberry Pi – Ambiente Linux
Esercizio

• Scrivere un ciclo che legga un input dall’utente e lo scriva sul terminale e continui finché
l’utente non scrive «esci»
• Il comando read permette di leggere l’input dell’utente
• Ci sono diversi modi per risolvere l’esercizio, uno di questi richiede l’istruzione break che
interrompe il ciclo all’interno del quale viene chiamata
Raspberry Pi – Ambiente Linux
Argomenti in ingresso allo script Bash

• Anche gli script bash sono programmi che possono essere eseguiti e quindi, come i
programmi «main» per esempio del linguaggio C, possono accettare in ingresso dei
parametri
• Gli argomenti passati in ingresso allo script bash sono disponibili come i suoi parametri
posizionali e sono identificati da numeri in base al primo argomento che è stato fornito allo
script

Per esempio se scrivete il


seguente script bash e lo
richiamate passando come
argomenti «pippo» e «Pluto»
Il risultato sarà quello che vedete
Raspberry Pi – Ambiente Linux
Esercizio

• Scrivere uno script shell che riceve due parametri


• il nome di una directory
• il nome di un file
• Lo script visualizza:
• Lo username dell’utente
• La home directory dell’utente (È contenuta nella variabile $HOME)
• La directory corrente
• L’elenco dei file contenuti nella directory indicata dal primo parametro
• Poi lo script scrive sul file indicato dal secondo parametro:
• Lo username dell’utente
• Il nome della directory indicata dal primo parametro
• L’elenco dei file contenuti nella directory indicata dal primo parametro

Potrebbero piacerti anche