2-Strumenti di base

Transcript

2-Strumenti di base
Editing: copy & paste
• In una finestra putty le funzioni di copy & paste sono realizzabili
direttamente col mouse
• Selezionando un pezzo di testo col mouse di ottiene
direttamente il copy
• Cliccando col tasto destro si ottiene il paste
• Ovviamente è possibile il copy&paste tra la finestra putty e le altre
finestre
Editing: vi
• vi è un text editor con interfaccia a caratteri di antica tradizione
• su molti sistemi in realtà dando il comando vi se ne invoca una
versione “modernizzata” denominata vim (vi improved)
• Dare il comando vimtutor per entrare in un breve tutorial
• In generale il comando per iniziare è: vi nomefile
• vi ha due modalità di funzionamento
– la modalità “Command” (o “Normal”) nella quale ciò che viene digitato
sulla tastiera è interpretato come comando (NON come testo da inserire)
– la modalità “Editing” (o “Insert”) nella quale ciò che viene digitato sulla
tastiera è interpretato come testo da inserire (salvo caratteri speciali come
frecce e backspace in vim)
• La modalità iniziale è “Command”: per passare a “Editing” si usa
di norma il comando i (altre possibilità sono nel tutorial)
• Per tornare a “Command”: digitare ESC
Editing: vi(m)
• E’ facile perdersi tra le due modalità e perdere contestualmente la
pazienza
• Le prime volte se ci si perde è meglio ripartir da capo: ESC per
tornare in normal mode e :q! per uscire senza salvare
• Una volta capito il meccanismo e presa confidenza, vi può
diventare uno strumento di estrema produttività
• Dopo i primi passi con vimtutor, può essere utile riferirsi a
– http://www.vim.org/
sito ufficiale del programma
– http://vimdoc.sourceforge.net/htmldoc/usr_toc.html
per documentazione e manualistica
– http://help.ubuntu.com/community/VimHowto
per un HOWTO
Prova di utilizzo vi
• Saper creare/modificare un “Hello world” con vi è già un buon
segno
• Quindi nel file hello.c contenuto nella directory esempio
ora dovreste riuscire a:
- modificare il testo p.e. far effettuare due fprintf distinte con i
due saluti (usando copia e incolla), scrivere un altro nome
anziche’ Brescia
- sostituire Hello con Ciao (usando il comando di ricerca e
sostituzione)
- salvare il testo modificato in un file con un altro nome e
uscire
• Dovreste anche riuscire a creare da zero un nuovo file di nome
“gioia_vi_hai” che contiene il seguente testo: “Sono contento
di aver imparato vi”
Editing: mcedit
• Ma se non siete contenti ...
• “You may have decided you hate vi . So be it!”
vi è l’editor standard la cui presenza è garantita su qualunque
UNIX, ma se non lo si sopporta si può tentare con mcedit
• Si tratta di un editor “stile MS-DOS”, addirittura dotato di menu a
tendina e di un help interno
• I comandi impartibili sono visualizzati in basso e sono in
corrispondenza con i tasti funzione (p.e. all’avvio, F1 apre l’help,
F9 apre i menu a tendina, F10 esce, etc.)
• “The editor is very easy to use and requires no tutoring”
• Provare a svolgere anche con mcedit i compiti specificati nel
lucido precedente
Compilazione di un programma C
• Per compilare un semplice programma C:
gcc -o nomeeseguibile nomesorgente
• Per eseguirlo basta dare al prompt il nome dell’eseguibile ...
• ... ma con ./ davanti perchè la directory corrente di norma non è
nel path
• Provare a compilare ed eseguire i propri vari hello.
Un processo (in loop infinito)
• Per fare pratica con alcuna operazioni relative ai processi, usiamo
un programma C che esegue un loop infinito (loop.c nella
directory loop)
• Per non caricare troppo il processore è inserita una chiamata a
sleep nel corpo del loop:
- modificare il parametro di sleep da 0.001 a 1
- salvare, compilare loop.c ed avviare l’eseguibile risultante
• A questo punto perdiamo il prompt ... ma abbiamo due possibilità:
digitare CTRL-C per terminare il processo oppure
digitare CTRL-Z per porre il processo in stato Stopped
• Per avviare un processo in background (viene eseguito senza
occupare il prompt) digitare & alla fine della linea di comando
• Per avviare un processo a bassa priorità: nice
• Quindi digitiamo: ./loop & oppure nice ./loop &
Elencare i processi: comando ps
• ps: visualizza lista di processi. Ha molte possibili opzioni e loro
varianti storiche che si mescolano in modo confuso.
L’output è composto da varie colonne ciascuna con
un’intestazione “autoesplicativa”. Si possono selezionare le
colonne da visualizzare (tra le tante possibili) con l’opzione -o
• Alcuni esempi:
– ps :visualizza i processi relativi alla sessione di lavoro corrente su 4
colonne (PID, TTY, TIME, CMD).
– ps -e :visualizza tutti i processi esistenti (sempre con formato 4 colonne)
– ps u -e :visualizza tutti i processi esistenti con formato esteso
– ps aux :equivalente a ps u -e
– ps -u nomeutente :visualizza tutti i processi di un utente
– ps u -u nomeutente :visualizza tutti i processi di un utente con
formato esteso
Esempi d’uso di ps
• Una volta avviato e stoppato (con CTRL-Z) il processo loop:
- ps mostra il processo interprete dei comandi bash, il processo
loop e ps stesso
- ps u mostra informazioni aggiuntive, p.e. tasso di utilizzo CPU
e memoria, occupazione di memoria in pagine (RSS = Resident
Set Size, VSZ = Virtual Memory Size), stato del processo
(R=Running, S=Sleeping, T=sTopped, Z=Zombie,... ), start time,
... purtroppo man ps non documenta bene tutto ciò
- ps -u studente compare un processo in più di proprietà di
studente (quello che gestisce la connessione SSH)
• Usando man, capire come farsi mostrare anche l’identificatore
del processo padre dei nostri processi
Elencare i processi: comando top
• Il comando top presenta un insieme di informazioni statistiche globali sul
sistema e una lista di processi con informazioni disposte su colonne con
intestazioni “autoesplicative”
• top aggiorna dinamicamente il suo output
• top accetta comandi interattivamente, i più semplici sono:
h per avere un help
spazio per aggiornare immediatamente i dati visualizzati
s per stabilire l’intervallo di tempo tra due aggiornamenti
O per scegliere il criterio di ordinamento tra vari possibili
R per invertire il senso di ordinamento (crescente/decrescente)
• Comandi di ordinamento veloci
N
P
M
T
sort tasks by pid (numerically)
sort tasks by CPU usage (default)
sort tasks by resident memory usage
sort tasks by time / cumulative time.
• q per uscire
Comando top
• Il man di top è un po’ più informativo di quello di ps
• Cercare nel man di top il significato delle colonne PR, NI,
SHR
• Verificare quanti Page Fault hanno avuto i processi e quanto
di loro è swappato
• Soddisfare altre curiosità ...
Elencare i processi: comando pstree
• pstree presenta in formato “ASCII art” l’albero genealogico di
tutti i processi del sistema
• E’ possibile specificare un singolo utente del quale visualizzare il
sistema di processi
• Con l’opzione -p viene visualizzato anche il PID
• Con l’opzione -h si evidenzia la genealogia del processo corrente
e con -H quella di un certo processo (identificato tramite PID)
• Con l’opzione -u si visualizzano i cambi di proprietario nella
genealogia
Terminare processi
• Il comando kill PID si usa tipicamente per imporre la
terminazione di un processo con un certo PID
• In generale kill serve per inviare un segnale di un certo tipo
(non necessariamente letale) ad un processo
• Non sempre un semplice kill è sufficiente a terminare un
processo: kill -9 PID invia un segnale di terminazione più
“convincente”
• killall nomeeseguibile si usa per terminare tutti i
processi che sono stati lanciati con un certo nome di eseguibile
• Anche killall in generale invia un segnale ad un gruppo di
processi ed è più letale con l’opzione -9
• Killare tutti i processi loop presenti
Esecuzione in background e jobs
• Eseguire nice ./loop & e poi nice ./loop seguito da
CTRL-Z
• Il comando jobs elenca i processi eseguiti in background (con &)
e posti in stato Stopped (con CTRL-Z)
• I processi inclusi tra i job hanno un proprio numero identificativo
(diverso dal PID e riferito solo alla lista dei job) evidenziato tra
parentesi quadre
• Per riferirsi ad un processo tramite il suo numero di job si usa la
notazione %N (ovviamente un processo ha sempre anche un PID)
Esecuzione in background e jobs
• Il comando bg %N passa un processo dallo stato Stopped a quello
di Running in background (senza %N si seleziona il job corrente,
evidenziato con + nella lista)
• Applicare bg al processo Stopped: rieseguendo jobs si
vedranno due processi Running
• Il comando fg %N passa un processo dallo stato Stopped o
Running in background a quello di Running in foreground con
“occupazione” del prompt (senza %N, selezione come sopra)
• Applicare fg a uno dei due processi in background: si perde il
prompt e lo si riprende con CTRL-Z
• Rieseguendo jobs si vedranno ...
• Il comando kill accetta come parametri anche i numeri di job
• Eliminare tutti i processi loop
Processi duraturi: il comando nohup
• I processi avviati in un sessione di lavoro (anche in background)
vengono terminati quando si esce dalla sessione interattiva
• Per avviare un processo che sopravvive alla sessione interattiva
usare: nohup comando &
• Il processo avviato proseguirà anche dopo il logout dell’utente,
fino alla sua terminazione naturale o forzata
• Ogni eventuale output diretto a schermo sarà salvato in un file
denominato nohup.out
Operazioni remote
• Il comando ssh user@hostname permette di aprire una sessione di lavoro
protetta con cifratura su un host remoto
• Si usa l’opzione -p per specificare la porta da usare (default 22)
• Il comando scp permette di eseguire un cp in modalità remota e sicura
specificando per uno o entrambi i file anche il nome utente e il nome host
remoto (-P per specificare la porta da usare)
• Creare un file di testo denominato vm-NN.txt sulla propria macchina e
trasferirlo sulla macchina soa-60 collegandosi come utente studente
• Il comando sftp user@hostname permette di aprire una sessione ftp
sicura per trasferimento di piu’ file
(-oPort=numeroporta per specificare la porta da usare)
• Vedere il man per i comandi da usare in una sessione ftp
• Ottenere via sftp il file provaFTP.txt presente sulla macchina soa-60
nella home directory di studente
Due domande tipiche
• Chi c’è in casa ?
• Il comando who elenca gli utenti attualmente collegati alla
macchina
• La tal macchina è accesa e raggiungibile ?
• Il comando ping causa l’invio di pacchetti “sonda” ad una
macchina chiedendo risposta.
Se la macchina è attiva, raggiungibile e accetta la richiesta,
giungono pacchetti di risposta e vengono presentate indicazioni
sul tempo di andata e ritorno
• Pingare la soa-60 (o un’altra vm), www.unibs.it e
www.google.it: verificare la differenza dei tempi di andata e
ritorno
• Pingare www.microsoft.com e www.linux.org
Risorse in rete: lynx e wget
• lynx è un Web browser con interfaccia a caratteri, tra le
numerose opzioni, notare la -dump che serve a inviare l’URL
specificato sullo standard output
• Usare lynx per visitare un sito noto (provare a fare una
ricerca del proprio nome e cognome su Google con lynx)
• wget permette il download di risorse in rete in modo non
interattivo. La pagina man è molto ricca e contiene utili esempi
pratici
• Scaricare il seguente file usando wget
ftp://ftp.pbone.net/mirror/archive.fedoraproject.org/fedora/lin
ux/core/5/i386/os/Fedora/RPMS/dos2unix-3.1-24.2.1.i386.rpm
Installazione di software: rpm
• In svariate distribuzioni (non tutte), il software viene distribuito e
installato usando il formato rpm (RedHat Package Management)
• Il primo passo è procurarsi il file .rpm appropriato (da CD, da
mirror in rete, ...)
• Il secondo passo è usare il comando rpm per l’installazione (e
successivamente per l’aggiornamento, la disinstallazione, etc.)
• Il comando rpm ha numerosissime opzioni le più immediate sono:
rpm --install nomefilerpm
per installare
rpm --erase nomepackage
per disinstallare
rpm --update nomefilerpm
per aggiornare
rpm -qa
elenca package installati
• Manuale in linea:
http://www.rpm.org/max-rpm/
Esempi utilizzo rpm
• Installazione del package dos2unix per la trasformazione di
file di testo:
1) scaricare il file dos2unix-3.1-17.i386.rpm (già fatto !)
2) installare il package usando rpm
3) usando le opportune opzioni di rpm -q verificare le
informazioni generali sul package installato e l’elenco dei file
in esso contenuti
• Verificare a quale package appartiene l’eseguibile
/usr/bin/wget
• Nel package trovato individuare quali file di configurazione e
quali file di documentazione sono presenti
Installazione di software: tarballs
• Il software libero viene spesso fornito sotto forma di file tar con i
sorgenti C da compilare
• I passaggi principali sono:
1) Scaricare il file tar e scompattarlo
2) Leggere le istruzioni di compilazione/installazione (spesso un file
README e/o INSTALL o simili prodotti dallo scompattamento)
3) Eseguire con attenzione le istruzioni (sperando non si verifichino
errori di compilazione, in caso decifrarli o rinunciare)
4) Verificare il funzionamento (dovrebbe esistere anche una pagina
man del programma installato)
• Eseguire i passi sopra indicati per il seguente tarball:
http://ftp.gnu.org/pub/gnu/units/units-1.55.tar.gz
Installazione di software: tarballs
• Per concludere in bellezza e nello sfrenato divertimento,
provare a installare ed eseguire il seguente tarball:
http://sourceforge.net/projects/mptris/files/mptris/1.9/mptris1.9.tar.gz/download