Unix e Zen
Indice
afs
Afs e' questo sistema "magico" che permette di condividere i dischi di tutto il
mondo a partire da un'unica "supercartella" chiamata /afs
. Ogni
computer potrebbe in teoria comparire subito dopo col suo nome di dominio. Ad esempio /afs/cern.ch/
. Dopodiche' ci sono le cartelle sul computer
remoto che diventano parte integrante del nostro sistema di file dopo che ci
siamo allocati con klog username@sito.remoto
.
Aggiorna la cache afs su un computer (per riportare subito cambiamenti della cartella indicata) | fs flushvolume /afs/sito.remoto/cartella/
|
Qual'e' lo spazio ancora disponibile nella mia area? | fs quota
|
Aggiungere un disco
Installa il disco collegandolo fisicamente al PC
|
Partiziona il nuovo disco(se necessario) | fdisk o cfdisk
|
Determina/crea il file speciale associato al nuovo disco | dmesg o MAKEDEV
|
Crea il filesystem sulle partizioni | mkfs
|
Controlla il nuovo filesystem | fsck
|
Monta il nuovo filesystem | mount
|
Modifica /etc/fstab
|
Ant
Installazione |
Download in /usr/local/ant
Aggiungi /usr/local/ant/bin a $PATH
setenv ANT_HOME /usr/local/ant
Invocazione | Definisci nella cartella dove devi fare la compilazione un file build.xml
Dai il comando ant
| |
Al centro c'e' l'hardware...
Volendo visualizzare lo schema di un sistema Unix dovete immaginare una serie
di cerchi concentrici con al
centro l'hardware. Intorno all'hardware c'e' il kernel. E' inteso
che il kernel ha tutti i device driver per comunicare con l'hardware.
Intorno al kernel c'e' la shell. Infine il cerchio piu' esterno
e' formato dai programmi applicativi.
Per funzionare,un sistema operativo
Unix, ha bisogno di almeno un disco con 3 partizioni. Le 3 partizioni
sono quella di root che serve per le operazioni essenziali e puo' essere
anche molto piccola, la partizione di swap che serve per realizzare
la memoria virtuale e deve essere dell'ordine di grandezza della RAM, e infine
una partizione utenti contenente tutto il resto.La gerarchia di cartelle
di un sistema Unix che si ottiene col comando ls -lR / e' virtuale
e la sua corrispondenza con partizioni su disco dipende da come sono stati
montati i file system nelle varie partizioni. Inoltre ci sono cartelle che non corrispondono a cartelle su disco:e' il caso della cartella
/dev che contiene tutti i device
conosciuti dal sistema o della cartella /proc legata ai processi in esecuzione.
Attenzione alle porte!
Ormai tutti sanno che il computer su Internet comunica attraverso un certo
numero di porte che come le frequenze di una radio sono numerate 1,2,etc
e che alcune frequenze sono riservate ad alcuni servizi come 80 per http (il
server Web), 21 per telnet, etc... Ma dove e' descritto tutto questo sotto
Unix? Due files di testo /etc/services e /etc/inetd.conf mostrano i vari servizi e la loro eventuale
gestione attraverso il demone inetd.
Tutta la sicurezza sta nel controllare queste porte. Purtroppo ci sono
letteralmente infiniti modi di penetrare, inclusi quelli che saranno scoperti
in futuro. Ma e' possibile perlomeno creare una checklist delle principali debolezze. E' quello che fa questo documento riassunto nella tabella che segue:
causa del problema | Come accertarsene | Come proteggersi
|
Installazione di default di Linux ed applicazioni
|
Account senza password o con password debole
|
Backup mancanti o fatti male
|
Troppe porte aperte |
netstat -lnp dato come root
nmap fa invece lo scan delle porte aperte dall'esterno:
Esempi di uso:
nmap pcba10
nmap 192.135.10.1-255 -p 36794
nmap 192.135.20.1-255 -p 36794
nmap 193.206.185.1-255 -p 36794
| Chiudere le porte che non servono
|
Facile accesso alle utility per l'amministrazione | find / \( ! -fstype nfs \) -type f \( -perm -04000 -o -perm -02000 \) -exec ls -l {} \; | Disabilitare i suid superflui
|
Mancato filtraggio di pacchetti errati
|
Monitoraggio incompleto o mancante
|
Programmi CGI vulnerabili | whisker | cancellare i programmi
|
Problemi con telnet, rsh, rlogin | | Installa e usa ssh
|
Problemi con ftp | | Installa ssh e usa scp
|
Buffer overflow nei servizi RPC
|
Problemi col programma Sendnail
|
Problemi col programma Bind
|
Problemi con LPD (demone per la stampa in remoto)
|
Problemi con sadmind e mountd
|
Problemi con SNMP
|
In generale per diagnosticare quali debolezze ha il vostro computer, potete usare Nessus.
Tripwire e' invece un tool per accertarsi della presenza di hacker.Lo fa rivelando modifiche in file di sistema che non dovrebbero cambiare. Infine un firewall come Guarddog (in effetti un'interfaccia grafica ai file di configurazione di
Linux) permette di ridurre al massimo le porte: al limite solo ssh rendendo
il vostro computer meno vulnerabile.
Qui un interessante documento.
netstat | lista di connessioni
|
netstat -s -p tcp | statistica sulle connessioni tcp(monitoraggio di attacco Denial of Service)
|
Comandi Unix
comando Unix | comando equivalente in altri sistemi operativi | a cosa serve | Annotazioni
|
cat | type, append | "concatenate" cioe' mostrare un file al terminale, concatenare piu' file insieme | cat filedamostrare
cat filedaappendere >> file
cat file1 file2 file3 > fileunico
|
chmod | set protection | chmod ugo+rwx file aggiunge un permesso
chmod ugo-rwx file toglie un permesso
chmod xxx file (xxx cifre ottali) imposta tutti i permessi
|
cd | cd
|
cp | copy
|
cut | | estrai colonne
|
date | | imposta data e ora | Deve essere dato da root
|
file | | lista il tipo di file
|
gnumeric | excel | edit excel documents
|
grep | search
|
history | | lista gli ultimi comandi dati | !stringa richiama il comando che comincia con stringa
!n richiama il comando n nella lista
set history=n cambia le dimensioni del buffer che memorizza i comandi
|
lpr -Pnomestampante file | PRINT/PRINTER=nomestampante file | Stampa file | Per trovare i nomi delle stampanti dai cat /etc/printcap
|
ln | | ln -s file1 file2 crea file2 come collegamento a file1 (gia' esistente)
|
ls | dir
|
more
|
mv | rename
|
nl | | Come cat ma aggiunge il numero di linea a ogni riga listata
|
od | | dump (ottale) di un file | possibili anche dump esadecimale,ascii,etc
|
paste | | aggiungi colonne
|
pwd | sho def | per sapere in che cartella siamo
|
rehash | | se si sono aggiunti nuovi comandi nelle cartelle indicate in $PATH, occorre dare questo comando perche' siano accessibili | Comando csh
|
rm | erase o delete
|
stat | | lista le caratteristiche di un file
|
sort |
|
tail
|
uniq
|
wc | conta numero righe in un file
|
where | | where progname Dove si trova il programma progname
|
xdvi | | vedere file TeX dvi |
|
xload | | fai vedere il grafico del carico del sistema |
|
xxd | | dump esadecimale di un file |
|
Inserimento in un comando della `stringa risultato di un altro comando ` | | Basta includere il comando tra apici all'indietro ( ` ).Ad esempio se il file pidfile contiene il pid di un programma che vogliamo ammazzare, allora possiamo scrivere kill -9 `cat pidfile`
|
> (dirottamento di output su un file) | /out=temp.lis | comando > temp.lis
comando >& temp.lis | La seconda forma e' necessaria se si vuole
dirottare su file tutti i messaggi. In bash si scrive:
comando > temp.lis 2>&1
|
E' possibile scrivere nella stessa riga piu' comandi separandoli con ";". Ad esempio:
sed 's/\/zitobin/http:\/\/pcba10\.ba\.infn\.it\/cgi-bin/g' lez2.html > temp.html ; mv -f temp.html lez2.html ; chmod 644 lez2.html
Esempi di esecuzione su macchina Linux utilizzando questo file
ls -l log.txt
-rw-r--r-- 1 zito xu 1252902 Mar 7 15:15 log.txt
file log.txt
log.txt: ASCII text
wc log.txt
12026 120259 1252902 log.txt
tail log.txt
dhcp-207-225-sth.fccj.cc.fl.us - - [06/Mar/2001:23:53:46 +0100] "GET /www/icones
/phone.gif HTTP/1.1" 200 334
ouc155.chillicothe.ohiou.edu - - [06/Mar/2001:23:53:49 +0100] "GET /www/wfractal
.html HTTP/1.1" 200 417
sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:55:36 +0100] "GET /~gela
o/tina.html HTTP/1.0" 200 7107
sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:55:39 +0100] "GET /slt/r
evenge/modotti.jpeg HTTP/1.0" 404 289
sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:55:39 +0100] "GET /slt/s
illytomte.c.gif HTTP/1.0" 404 285
sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:56:11 +0100] "GET /slt/r
evenge/modotti.jpeg HTTP/1.0" 404 289
sdn-ar-002florlap268.dialsprint.net - - [06/Mar/2001:23:56:11 +0100] "GET /slt/s
illytomte.c.gif HTTP/1.0" 404 285
62.98.7.50 - - [07/Mar/2001:00:01:08 +0100] "GET /icons/blank.gif HTTP/1.1" 304
-
62.98.7.50 - - [07/Mar/2001:00:01:08 +0100] "GET /icons/unknown.gif HTTP/1.1" 30
4 -
62.98.7.50 - - [07/Mar/2001:00:01:08 +0100] "GET /icons/back.gif HTTP/1.1" 304 -
Configurazione del sistema e i suoi files
Sotto Unix tutto e' file. Tutto il sistema viene governato attraverso una serie
di file di testo che possono essere modificati quasi tutti a mano.
Questi files che spesso hanno il nome nomeprogramma.conf
legato
al programma che li usa, si trovano quasi tutti sotto /etc/
I dispositivi
di i/o sono anch'essi files (i file speciali della cartella dev
). Questi hanno un codice "b" o "c" a seconda che si tratti di block o
character devices. Tipici block devices sono i dischi che si possono accedere in maniera casuale, mentre i character device si accedono in maniera sequenziale.
Anche file sono considerati i socket delle "prese di comunicazione"
che permettono lo scambio di informazioni tra programmi su computer diversi.
Altri esempi di file sono i crontab in /var/spool/
.
Principali cartelle
File di configurazione
Cups
Cups sta per Common Unix Printing System ed e' un software fornito sotto la
licenza GNU per risolvere il problema della stampa su una macchina Unix/Linux.
Il cuore di Cups e' un server Web tipo Apache .Potete connettervi usando la password di root e gestire stampanti e code di stampa direttamente dal Web.La documentazione la trovate su documentation.htmlDal punto di vista dell'utente esso accetta tutti i normali comandi
di stampa .Questi erano serviti prima di Cups da un demone di stampa(lpd) che
rispondeva ai comandi lp(System V) e lpr(Berkeley).System V e Berkeley sono due versioni storiche di Unix, ma Linux (senza Cups) usa lpr.La gestione delle code di stampa veniva fatta attraverso dei file di spool
disposti nelle cartelle /var/spool/lpd.C'erano piu' code per stampante.
lpstat -p -d -o | Lista di stampanti disponibili e job di stampa in coda
|
lpr filename | Stampa filename sulla stampante predefinita
|
lpr -o landscape
lpr -o sides=two-sided-short-edge
lpr -o sides=two-sided-long-edge
lpr -o page-ranges=1-10 | Stampa con opzioni varie
|
xpp | Richiamo di un'interfaccia grafica per facilitare la specifica di opzioni di stampa.
|
nets-xpp | Richiamo di Cups con interfaccia grafica in Netscape.
|
lprm num_job | Per cancellare un job dalla coda di stampa
|
C++
Essendo il linguaggio C stato creato proprio per scrivere il sistema operativo
Unix, ed essendo il C++ l'evoluzione ad oggetti di C, non c'e' dubbio che il
C++ sia il linguaggio per eccellenza delle macchine Unix/Linux.
Il compilatore di riferimento e' quello GNU. Esso viene richiamato con gcc o g++ a seconda che si vogliano compilare programmi stile C o C++.
Ma in effetti il compilatore e' unico.Purtroppo i compilatori evolvono in continuazione e le nuove versioni non sempre sono compatibili con le vecchie. Ci sono
delle buone ragioni per dover cambiare ma la cosa non e' facile. Uno di questi
passaggi e' quello tra egcs 2.91.66 ed egcs 2.95.2 .
gcc -v | Per conoscere la versione installata
|
Demoni
I demoni Unix sono i programmi fatti partire a bootstrap che rimangono poi sempre in esecuzione. Essi non sono percio' collegati a un particolare utente e terminale.Assieme
costuituiscono un formidabile gruppo di geni della macchina pronti a
servirci in tutte le nostre necessita'.Nell'uscita del comando ps -eaf essi compaiono subito dopo il processo init
di numero 1, come processi fatti partire dal processo stesso (quindi con un 1
in terza colonna).Come sa il sistema quali demoni far partire? Come avviene in molti casi in Unix, la configurazione viene fatta aggiungendo 2 file di testo
per demone con un nome speciale in una speciale cartella. Il file di testo
sndemone contiene lo script di partenza, kndemone lo script di terminazione.
Queste cartelle vanno create per ogni runlevel del sistema operativo.
Un run level e' una delle modalita' di run che si sceglie all'inizio ed e' indicata da un numero (0:halt,1:singolo utente(si indica anche con "s"),2:multiutente senza rete, 3:multiutente con rete, 5:multiutente con rete e interfaccia frafica, 6:reboot).
Ad esempio il computer prima visto stava girando in runlevel 5 e la cartella
usata per i demoni era la /etc/rc.d/rc5.d/ .I demoni sono
fatti partire dal processo init in ordine alfabetico dei file s*.Se volete far
partire un nuovo demone basta aggiungere due nuovi files in questa cartella
col nome appropriato.
Quando init fa partire un demone invia allo script la stringa
"start". Quando invece lo stoppa (allo shutdown) invia la stringa "stop".
Per questo spesso i 2 programmi sndemone e kndemone sono dei link allo stesso
programma che reagisce opportunamente alle stringhe start e stop.Questo programma viene messo nella cartella /etc/rc.d/init.d.Ad esempio Apache fornisce lo script apachectl gia' pronto che puo essere inserito in questa
directory. Dovunque poi e' necessario usare lo script si definisce con un link:
ln -s ../init.d/apachectl S96apache
Da root e' possibile passare da un runlevel all'altro dando il comando init numerolivello
. Da notare che il passaggio da un livello all'altro comporta sia start che stop di servizi. Solo il passaggio al livello 0 comporta la disattivazione di tutti i servizi.
Lo spegnimento del computer ottenuta col comando shutdown -h now
e' diverso come effetti da init 0
in quanto provoca un kill immediato
di tutti i servizi.
Possiamo definire, se lo riteniamo necessario, altri runlevel impostando opportunamente /etc/inittab e introducendo nuove cartelle rc.d.
Un demone molto particolare e' quello chiamato inetd : questo
e' un "super server" collegato ai servizi TCP/IP e viene introdotto per limitare il numero di demoni in esecuzione contemporanea. In pratica
se un particolare servizio sara' usato poche volte durante il giorno, e' inutile
farlo partire come un demone a parte, ma lo si puo' definire come un servizio
inetd. Il demone inetd fara' in modo da far partire il servizio relativo quando viene richiesto. Uno speciale file /etc/inetd.conf lista i servizi da far andare sotto
inetd. Si parla percio' di demoni inetd in contrapposizione di quelli standalone.
Un altro demone particolare e' cron
che provvede ad eseguire dei comandi a tempo per i singoli utenti seguendo le direttive dei file crontab
dei singoli utenti.
crontab -l | Dato da root permette di conoscere tutti i task
fatti partire periodicamente dal sistema.
|
find e locate
I comandi find e locate permettono di trovare ambedue dei file nelle cartelle
su disco ma lavorano in maniera completamente diversa. find
fa la
ricerca cartella per cartella ed e' percio' lento ma i suoi risultati sono
sempre corretti. locate
usa un database ritornando il risultato
in maniera velocissima. Ma dato che il database e' aggiornato solo una volta
al giorno da un cron job che richiama l'apposito comando di aggiornamento
updatedb
, i suoi risultati possono essere sbagliati.
find . -type d | Lista i nomi di tutte le cartelle
|
find . -name "*.java" | Trova tutti i file .java a partire
dalla cartella dove ci troviamo | Senza gli apici puo' creare problemi.
|
find . -atime -2 | Lista files che hanno avuto accessi negli ultimi 2 giorni
|
find . -ctime -2 | Lista files che sono stati modificati negli ultimi 2 giorni
|
find $HOME -size +1000000c | Lista files di dimensione maggiore di 1M
|
find $HOME -size +1000000c -ls | Esegui il comando ls su tutti i files di dimensione maggiore di 1M
|
find . -ctime -1 -maxdepth 1 | Lista i files della directory dove ci troviamo modificati nelle ultime 24 ore.
|
sh -c 'find / -name access_log 2> /dev/null' | Trova l'access log di Apache | Nota il 2> per eliminare tutti i messaggi di errore. Inoltre lo strano modo di scrivere il comando che altrimenti non funzionerebbe con
la shell tcsh.
|
find -name "*.ps" -exec ps2pdf {} \; | Esegui il comando ps2pdf su tutti i file di tipo ps
|
locate stringa | Lista tutti i file e le cartelle nel cui nome compare la stringa data. | Il nome di un file comprende il cammino completo.
|
gdb
gdb
e' il debugger sotto Unix.Anche se ora ha una bellissima interfaccia grafica sotto forma del programma DDD,e' bene conoscerne almeno le principali istruzioni.Se volete usarlo dovete fare 2 cose importanti:
- Compilare con l'opzione -g
- Definire con un comando
dir cartella1:cartella2: cartellan
le cartelle dove gdb
deve cercare i sorgenti
Se un file dddcommand
contiene questo e altri eventuali comandi
iniziali, potete far partire il debugger con:
gdb -x dddcommand programma_da_debuggare
All'inizio potete dare subito il comando run
in modo da far cominciare l'esecuzione. Interrompete con CTRL_C quando volete intervenire col
debugger. Per riprendere l'esecuzione date il comando c(ontinue) due volte se necessario.
Ed ecco le principali istruzioni:
Per inserire un breakpoint all'inizio del main | b main
|
Per posizionarvi sulla classe Pippo | l Pippo
|
Per posizionarvi alla funzione pluto della classe Pippo | l Pippo.pluto
|
Per andare avanti nella lista | l
|
Per andare indietro nella lista | l -
|
Per posizionarvi alla riga n | l n
|
Per creare un breakpoint alla riga n | b n
|
Per stampare una variabile | p variabile
|
Per stampare il tipo di una variabile | pt variabile
|
Per stampare il valore di un'espressione | p espressione
|
Per stampare n elementi di un array | p *array@n
|
Per stampare l'indirizzo di una funzione | p nomefunzione
|
Per eseguire la prossima istruzione | s
|
Per ottenere informazioni sullo stack | info stack
|
Per ottenere informazioni sull'indirizzo dell'ultima istruzione | info register eip
|
Per ottenere il dump assembler di una funzione | disas nomefunzione
|
Se si vuole esaminare un core dump usare gdb -q -c core
dove core
e' il nome del file contenente il core dump.
gimp
Gimp
e' il Photoshop di Linux.
Grokking the GIMP libro disponibile online.
Trucchi
Correggere un'immagine usando i livelli | Seleziona Image->Colors->Levels ; clicca su "Auto"
|
Creare l'immagine favicon.ico richiesta da IE | Crea un'immagine delle giuste dimensioni (32x32 pixel) e salvala in formato ppm. Poi usa ppmtowinicon per trasformarlo nel formato adatto.
|
Creare l'immagine speculare di un layer o una selezione | Seleziona
il tool flip e clicca sul layer o la selezione.
|
Creare la texture di un sasso | Crea un nuovo layer bianco; filters->render->clouds->plasma ;image->colors->desaturate;Clicca sul tool "Fill with color" e imposta opacity:80 Mode:Multiply Threshold:190 ; Definisci il colore #ff9010;Esegui il fill; Filters->map->bump map usando lo stesso layer come "bump map"
|
Creare una gif animata | Carica le immagini dell'animazione in differenti layer. Ordina i layer in maniera opportuna; prova l'animazione con Filters->Animation->Animation Playback ;Quando l'animazione e' Ok, Filters->Animation->Animation Optimize ; Ora clicca sull'immagine Image->Mode->Indexed (elimina il dithering); Ora procedi al salvataggio come gif selezionando "Animazione". A questo punto
potete guardare l'animazione con un browser per controllarla.
|
Creare una selezione complessa formata da molte selezioni | Procedi dalla seconda selezione in poi tenendo premuto il tasto di SHIFT. Potete anche
deselezionare una parte di una selezione usando CTRL durante l'operazione.
|
Creare un pattern che puo' tessellare uno sfondo(1) | Seleziona Image e quindi Transforms ed infine offset
|
Creare un pattern che puo' tessellare uno sfondo(2) | Seleziona Filters->Map->Make seamless
|
Creare un testo colorato galleggiante sullo sfondo | Crea una nuova immagine abbastanza grande da contenere il testo. Con CTRL-L fai apparire
la finestra dei layer e clicca sul tasto "New layer" per creare un altro layer
oltre allo sfondo. Usando il tool "Text" crea il testo e fissalo a questo layer. Ora duplica questo layer. Seleziona "New layer" e applica Filter->Blur->Gaussian sperimentando con vari valori (circa 1/10 della dimensione della fonte). Ora usa il tool "Move layers" per spostare l'ombra in modo da creare l'effetto.
Infine seleziona "New Layer copy" e "Keep Trans.". A questo punto puoi usare
i tool di "Fill" per colorare a piacimento il testo con un singolo colore,
un gradiente o un pattern.
|
Dare al layer 1 la stessa forma dell'immagine del layer 2 | Clicca col tasto destro sul layer2(nella finestra dei layer) selezionando Alpha to Selection; Attivate l'immagine del layer 1; Select->Invert; CTRL-K
|
Definire un nuovo pattern | Salva l'immagine con l'estensione
.pat e muovi nella cartella .gimp/patterns/
Dove trovo il controllo livelli e curve in gimp | Image->Colors->Levels ; Image->Colors->Curves
| Estrarre i colori da un'immagine per sostituirli a quelli di un'altra | Image->Mode->Indexed ; Ora nella finestra "Palette" cliccate su Edit. Poi selezionate "New" poi "Import" e quindi "Indexed Palette" del'immagine da cui volete
copiare i colori.Ora avete i colori da copiare in una palette. Se volete
utilizzarli in un'altra immagine non dovete fare altro che trasformare l'immagine in "Indexed" (ALT-I) "Use Custom Palette" e selezionate la paletta dell'altra
immagine.
| Fare un foto ritocco | Usa il tool Paint using pattern or image region. Tenendo premuto "CTRL" seleziona la parte di immagine(buona) da usare nel fotoritocco. Dopodiche' usa il tool come un pennello per fare il fotoritocco.
Una croce ti indica i pixel che sono copiati. Richiede un po' di addestramento manuale ma funziona ottimamente per eliminare macchie e altre imperfezioni.
| Fare la gamma correction di un'immagine | Usa il menu Image->Colors->Levels.Il valore di mezzo degli "Input Values" corrisponde alla Gamma correction.
| Provare velocemente la colorazione con diversi gradienti | Seleziona
Filters, Color, Map, Gradient map. Ora clicca
sul gradiente nel toolbox e dovrebbe comparire la finestra con tutti i gradienti(lo stesso effetto si ottiene con CTRL-G). Scegli un nuovo gradiente. Vai
sulla figura e clicca ALT-F . Ripeti per tutti i gradineti che vuoi provare.
Se un gradiente va quasi bene, clicca sopra nella finestra del gradiente
e prova a modificarlo.
| Rendere effettive le selezioni fatte con i tool "Select using Bezier" e
"Select using shapes" | Ambedue queste selezioni richiedono la scelta di una serie
di punti ma non e' intuitivo cosa fare per renderle effettive. Nel primo caso:
andare nella finestra dei "layers" selezionare "Path" e cliccare su "Path to selection". Nel secondo caso basta cliccare all'interno della selezione.
| Rendere trasparente un colore di un'immagine | Seleziona Select e quindi By Color. Clicca un punto dell'immagine del colore che interessa.Ora vai su Edit e seleziona clear
| Riempire una selezione con un pattern | Trascina il pattern sulla selezione col tasto centrale del mouse premuto.
| Ruotare un layer di un angolo arbitrario | Seleziona tools e quindi Transform tools ed infine transform
| Salvare e poi riprendere una selezione | Dopo aver fatto la selezione:
Select->Save to channel . Per riprenderla , vai nei canali e seleziona la
maschera salvata. Quindi clicca sul cerchietto "Channel to Selection"
| Separare un'immagine dallo sfondo | Usa la "bacchetta magica" (Select contiguous regions) ,provando con diversi "tresholds" finche' facendo CTRL-X lo
sfondo e solo lo sfondo scompare.
| Tessellare un layer con un pattern | Seleziona il pattern, poi scegli
il tool Fill with a color or a pattern dopo averne modificate le proprieta' in modo da usare un pattern per il fill.
| Usare nell'immagine 2 i colori dell'immagine 1 | Seleziona immagine 2; Image->Mode->Indexed "Use CustomPalette" "New" "Import" Seleziona immagine 1.
| Vedere un solo layer escludendo gli altri | Clicca sull'occhio tenendo il tasto SHIFT premuto.
| |
gpg
gpg sta per Gnupg ed e' una specie di versione open source del famoso PGP(Pretty Good Privacy). Con la tecnica della coppia di chiavi (pubblica
e privata), vi permette di crittare file per voi stessi o di inviare
file crittati a corrispondenti. Per inviare un file crittato a un corrispondente bisogna procurarsi (importare) la sua chiave pubblica. Cosi' voi dovete esportare la vostra chiave a tutti quelli che vogliono inviare
dei file.
gpg --gen-key | creare la vostra coppia di chiavi
| Non scordarsi la passphrase altrimenti non potrete piu' usare
le vostre chiavi!
|
gpg --list-secret-keys
|
gpg --list-keys
|
gpg --armor --output pubkey.txt --export 'Nome Cognome' | generare un file contenente la vostra chiave pubblica pronta da
inviare ai vostri corrispondenti o da salvare su un supporto di backup
|
gpg -ao my-pgp-private.key --export-secret-keys keyid
| generare un file contenente la vostra chiave privata per
salvarla su un supporto di backup | La keyid viene listata dal comando
gpg --list-secret-keys . Una volta salvato il file su una
memoria di backup, ricordarsi di cancellarlo.
|
gpg -e -r 'Il tuo nome' -o nomefile.gpg nomefile | critta un tuo file
|
gpg --output nomefile --decrypt nomefile.gpg | Decritta un file crittato da te stesso
|
Installazione di software
L'installazione di programmi con pacchetti rpm facilita di molto le cose in
quanto tutto viene fatto in maniera automatica e ,attraverso un database di pacchetti, registrato per facilitare gli aggiornamenti.
Invece i file tar (tarball) magari compressi, sono un modo facile per ricostruire interi alberi di file.
rpm -i nomefilerpm | Per installare un pacchetto(programma)
|
rpm -e nomeprogramma | Per disinstallare un programma installato con rpm
|
rpm -U nomefilerpm | Per aggiornare un programma installato con rpm
|
rpm -qa | Per conoscere i nomi di tutti i programmi installati con rpm
|
rpm -qf nomefile | Per sapere a quale pacchetto appartiene un file
|
rpm -qplR nomefilerpm | per sapere da quale pacchetti dipende e quale files installera' un programma rpm
|
tar xfvz file.tar.gz
tar cvfz file.tar.gz nomecartella | Estrazione e creazione di tarball compressa (funziona solo su Linux).Dare come nome di cartella l'indirizzo relativo
invece di quello assoluto cioe' "etc" invece di "/etc" per permettere la rilocazione dei file.
|
tar tvf nometarball
tar xvf nometarball
tar cvf nometarball nomecartella | Per listare,estrarre e creare una tarball. Per i nomi delle cartelle vale la stessa cosa detta sopra.
|
Installazione di software da Internet a partire dal sorgente
Esemplificazione con mysql:
- Trova su Internet il file da copiare con Netscape.Copia il link.
wget http://www.mysql.com/Downloads/MySQL-3.23/mysql-3.23.36.tar.gz
tar -zxvf mysql-3.23.36.tar.gz
cd mysql-3.23.36
./configure --prefix=/usr/local/mysql
make
su
make install
Se devi rifare l'installazione da 5, allora ricordati di cancellare i file creati da configure con:
rm config.cache
jdb
jdb
il debugger Java.Per poterlo usare conviene compilare con
javac -g
.
Per farlo partire dare:
jdb Nomeclasse
invece di java Nomeclasse
Ed ecco le principali istruzioni:
Per inserire un breakpoint all'inizio del main | stop in Nomeclasse.main
|
Per inserire un breakpoint all'inizio di un metodo | stop in Nomeclasse.nomemetodo
|
Per far partire l'esecuzione | run
|
Per far continuare l'esecuzione | cont
|
Per listare le istruzioni vicino a quella in esecuzione | list
|
Per listare l'istruzione n e seguenti | list n
|
Per creare un breakpoint alla riga n | stop at Nomeclasse:n
|
Per stampare una variabile | print variabile
|
Per stampare tutte le variabili locali | locals
|
Per eseguire la prossima istruzione | step
|
Per eseguire la prossima istruzione senza saltare all'interno di un metodo | next
|
Librerie shared
Quando un programma e' linkato con delle librerie shared, queste non sono incluse nel modulo eseguibile, ma il programma si annota per cosi' dire quello che
deve caricare e lo carica sul momento, all'atto dell'esecuzione. Questo viene
fatto per evitare di avere programmi enormi in esecuzione, tutti con la propria copia delle librerie piu' comuni.
ldd nome_modulo_eseguibile | lista delle librerie shared richiamate
|
ls /etc/ld.so.conf | Cartelle dove avviene la ricerca delle librerie shared
|
printenv LD_LIBRARY_PATH | altre cartelle da ricercare
|
Magic pipe
Alla base di Unix c'e' l'idea di stream.L'input/output e' tutto
fatto usando gli stream. Due processi possono comunicare attraverso
uno stream. E' questo alla base del pipe:l'output di un processo e'
attaccato attraverso un stream di dati all'input di un altro processo.
A livello di comandi Unix questo si indica col carattere
"|", intendendo con questo che l'output di un comando puo' essere inviato
al comando successivo. Si e' realizzata cosi' una "connessione" tra i due
comandi : in inglese "pipe".
Esempi di uso col file log.txt che contiene la lista
degli accessi a un Web server in circa 24 ore.
- Quanti accessi si sono avuti il 6 Marzo 2001?
cat log.txt|grep 06/Mar/2001|wc -l
12019
- Lista in ordine alfabetico tutti i computer che hanno raggiunto il sito a partire dall'Inghilterra (codice di nazione uk)
cat log.txt | cut -d [ -f 1 | sort | uniq | grep uk
adsl-129.zen.co.uk - -
alice.csd.plymouth.ac.uk - -
host62-6-75-180.dialup.lineone.co.uk - -
id-14.id.rca.ac.uk - -
infd.central.susx.ac.uk - -
ip154248.wstcmp.ukans.edu - -
netforce-gw.serviceline.co.uk - -
p206-42.unl.ac.uk - -
phpc132.ph.surrey.ac.uk - -
proxyserver.flexible-lamps.co.uk - -
smlc01.leeds.ac.uk - -
webcachebp1a.cache.pol.co.uk - -
webcachebp2a.cache.pol.co.uk - -
webcachemp1b.cache.pol.co.uk - -
webcachemp2b.cache.pol.co.uk - -
webcachemp3b.cache.pol.co.uk - -
webcachewp1b.cache.pol.co.uk - -
webcachewp2b.cache.pol.co.uk -
- Quali sono le pagine utente (url con ~) piu' popolari?
cat log.txt | sed "s/%7e/~/g" | grep "~" | sed "s/^.* \/~/\/~/g" | sort | uniq -c | sort -nr |more
Esempi di uso con questo file di testo.Lista ordinata delle parole con conteggio delle stesse.
cat testo.txt | tr ' ,' '\n' | sort | uniq -c | sort -n
Altri esempi:
- Per unzippare e untarare nello stesso tempo.
gzip -c mysql.tar.gz|tar xvf -
- Per ammazzare il processo
sendmail
kill -9 `ps -eaf|grep -i sendmail|grep -v grep|awk '{print $2}'`
- Lista del gid di un utente
grep zito /etc/passwd | awk -F ":" '{print $3}'
- Lista dei file in ordine di grandezza
ls -l |sort +4n
Monitoraggio del sistema
Versione del sistema operativo |
uname -r (kernel)
Lista di CPU cores |
cat /proc/cpuinfo
Hardware |
/sbin/lspci -vv |
Questo documento da ulteriori spiegazioni.
| Spazio e partizioni su disco | df
cfdisk
| Lista dei messaggi di boot | dmesg
| Lista dei processi | ps -eaf oppure ps ax (piu' veloce)
| Percento risorse usate adesso e processi piu' attivi | top | Esempio di output
| Uso memoria virtuale | vmstat 1
| Connessioni di rete aperte in questo momento | netstat
netstat -na |grep -i listen
netstat -na |grep -i established | Il secondo comando ci dice quali demoni stanno ascoltando alle varie porte, il terzo quali connessioni con l'esterno sono aperte in questo momento
| Pacchetti che passano dalla scheda di rete | tcpdump tcpdump -n | Col secondo comando si evitano i paccheti generati da tcpdump stesso per trasformare i numeri tcp/ip in nomi
| Stato rete | ping -f nomecomputer
| Indirizzo IP e traffico di rete | /sbin/ifconfig
| Files e connessioni (socket) aperte adesso | lsof
fuser -v .
| Monitoraggio con SNMP | Programma MRTG Multi Router Traffic Grapher | Esempio di report
| Lista utenti collegati | who o w :quest'ultimo da' piu' informazioni.
last -100 da la storia degli ultimi 100 collegamenti
| Dimensione dell'albero a partire da una cartella | du -ks nomecartella
| Traffico NFS | nfsstat -n -c -i 1
| Ultimi messaggi di sistema | tail -f /var/log/messages
| Messaggi su tutti i log di sistema | /var/log/
| Librerie e programmi installati | rpm -qa | Linux Red Hat
| Sono stato bucato? | chkrootkit | Vedi qui per l'installazione. Da fare ogni settimana.Disponibile
localmente su /afs/caspur.it/project/sec/unix/
| | |
MySQL
groupadd mysql
useradd -g mysql mysql | Aggiungiamo un utente mysql per
far girare il database da un utente non privilegiato.
|
./configure --prefix=/usr/local/mysql
make
su
make install
scripts/mysql_install_db
chown -R mysql.mysql /usr/local/mysql
| Installazione di MySQL
|
/usr/local/bin/safe_mysqld --user=mysql &Far partire il data base
| cp support-files/mysql.server /etc/init.d
ln -s /etc/init.d/mysql.server /etc/rc.d/rc3.d/s99mysql
ln -s /etc/init.d/mysql.server /etc/rc.d/rc0.d/s01mysql
| Inclusione di mysql tra i processi da far partire a bootstrap e far
terminare a shutdown
| /usr/local/mysql/bin/mysql -uroot -p mysql
GRANT ALL PRIVILEGES ON Persone.* TO pippo@localhost
IDENTIFIED BY 'password';
| Crea un utente pippo con tutti i privilegi sul database Persone
Alla fine dare /usr/local/mysql/bin/mysqladmin -uroot -p reload
per aggiornare le impostazioni del database in esecuzione.
| /usr/local/mysql/bin/mysql -uroot -p mysql
GRANT SELECT,UPDATE ON Persone.* TO pluto@localhost
IDENTIFIED BY 'password';
| Crea un utente pluto con i soli privilegi di Select e Update sul database Persone
Alla fine dare /usr/local/mysql/bin/mysqladmin -uroot -p reload
per aggiornare le impostazioni del database in esecuzione.
| /usr/local/mysql/bin/mysql -uroot -p mysql
DELETE FROM mysql.user WHERE User = 'pluto';
FLUSH PRIVILEGES;
| Cancella l'utente pluto
| /usr/local/mysql/bin/mysqladmin -uroot -p create PersoneCrea il database Persone
| telnet nomecomputer 3306 | Per conoscere la versione di MySQL in uso
| | |
Monitoraggio MySql
Quanti e quali databases? | show databases;
/user/local/mysql/bin/mysqlshow -uroot -p
|
Dimensioni dei databases? | ls -lR /user/local/mysql/data/ | more
du -k /user/local/mysql/data | sort -r -n | less
|
status | /user/local/mysql/bin/mysqladmin -uroot -p version status extended-status variables
|
show status;
|
Messaggi di errore | tail -f /user/local/mysql/data/al1.ba.infn.it.err
|
Quante tabelle sono aperte e a quali database appartengono? | /user/local/mysql/bin/mysqlshow -uroot -p status da il numero di tabelle aperte e il numero di threads
/user/local/mysql/bin/mysqlshow -uroot -p processlist da la lista
dei processi con i database che ognuno di essi gestisce . Le ultime query sono
state fatte ai database con time di sleep piu' basso.
|
Numero di queries al secondo | /user/local/mysql/bin/mysqlshow -uroot -p status calcola questions/uptime
|
Monitoraggio minimo continuo tipo top | Provate a far girare questo script shell, dovreste ottenere ogni 10 secondi questa schermata
|
Pine
Copiare tutti i messaggi di inbox nella cartella "saved-messages" |
Selezionali tutti con ; quindi A. Scrivi A S e seleziona la cartella
di destinazione.
|
Eliminare i famigerati messaggi Sircam Hi ... | Aggiungi in Setup
Rules la regola testo="Hi .."
|
Eliminare tutti i messaggi marcati con D |
Usa il comando eXpunge
|
Impostare un viewer per application/pincopallino
| edita ~/.mailcap aggiungendo
application/pincopallino;/path/viewer %s
|
Far partire pine in modo che mostri all'inizio subito i messaggi nella INBOX
| pine -i
|
procmail
File di configurazione .procmailrc
monitorare il filtraggio di spam | tail -n 20 -f pmlog
|
procmail recipe per eliminare mail con una frase data nel messaggio |
:0B:
* ()\<hr size="1" noshade>
/dev/null
| Notate l'uso di () come escape character di <
|
Statistiche senza modificare il log | mailstat -k pmlog
|
Statistiche e azzeramento del log previa copia su pmlog.old | mailstat pmlog
|
PROCMAIL QUICK START
Python
Python puo' essere considerato come il "Basic" dei sistemi Linux, considerando
la sua relativa facilita' e la sua interattivita'. Scrivete python
e il linguaggio e' pronto a eseguire i vostri comandi. Potete cosi' divertirvi
a scrivere e vedere immediatamente eseguiti tutti i vostri comandi.
Oppure potete memorizzare una sequenza di comandi in un file pippo.py e poi farlo eseguire scrivendo python pippo.py.Meglio ancora potete
creare dei moduli contenenti definizioni di nuovi comandi e poi richiamarli con l'istruzione import nomemodulo.
Il Phyton tutorial
da' molti esempi da tentare per entrare nel linguaggio. Ma la potenza
dello stesso e' dovuta alla libreria di moduli gia' pronti da usare.
Comando | Azione prodotta dal comando | Annotazioni
|
import module | Importa il modulo indicato | Il nome del file contenente il modulo deve terminare con .py
|
dir(modulo) | Lista tutte le definizioni presenti in un modulo importato | dir() ritorna tutte le definizioni nel modulo nel quale ci troviamo
|
from module import lista di nomi separati da virgola | Importa le definizioni dal modulo indicato | I nomi indicati (definiti nel modulo) possono essere usati senza bisogno
di usare la notazione modulo.nome. E' possibile usare * per importare
tutte le definizioni.
|
Ctrl+D | Uscire da phyton
|
Trucchi
indicare a python da quale directory caricare una nuova libreria | setenv PYTHONPATH directory oppure aggiungere subito dopo import sys
sys.path.append(directory)
|
processare la lista dei file di tipo jpg in una directory creando un file xml con una riga per ogni file | find -name "*.jpg" | python createxml.py
Definire lo script python createxml in questo modo:
import mimetypes
import os.path
import sys
for line in sys.stdin:
filename = os.path.normpath(line[:-1])
if filename == '.' or not os.path.isfile(filename):
continue # Skip this, because it's not a file.
print "<image url=\""+filename+"\" title=\""+filename+"\"/>"
|
Regexp,Regular Expression, Espressioni Regolari : mini tutorial
Non potete dire di conoscere Unix se non sapete scrivere le famigerate regexp
che vengono usate un po' dappertutto.
Una prima considerazione:una regexp e' un programma completo nonostante la sua brevita'.Dovete percio' affrontarla come si affronta un programma:dovete
svilupparla e testarla passo a passo.
Cosa fa' "un programma regexp" ? Lavora su un testo sul quale puo' fare
3 cose:
- Ritrovare tutte le configurazioni di un certo tipo(pattern match in inglese)
- Estrarre tutti i pattern ritrovati in un testo
- Sostituire un pattern con un'altro
Le operazioni 1 e 2 vengono fatte contemporaneamente col comando:
/regexp/
L'operazione 3 con s/regexp1/regexp2/
La stringa di testo su cui lavora la regexp dipende dal contesto e cosi'
le variabili che contengono le stringhe estratte.
Ad esempio in Perl si puo' caricare nella variabile $_ la stringa su cui
lavorare, estrarre con $quanti=/regexp/
0 o piu' stringhe
il cui numero e' ritornato da $quanti e il cui valore e' tornato da $1
$2 ...
In vi
s/regexp1/regexp2/
agisce sulla riga corrente. Le strighe estratte sono contenute in \1 \2 ...
Se invece scriviamo %s/regexp1/regexp2/g
possiamo agire su tutto il file.
Ma procediamo con ordine ...
La piu' semplice regexp consiste nello scrivere la stringa da confrontare:
s/pippo/pluto/
sostituisce "pluto" a "pippo".
Ma attenzione! Anche a questo livello c'e' una piccola complessita':la stringa non puo' contenere i 14 caratteri riservati in Perl(metacaratteri) ^ $ . + \ [ ] * ? | { } ( )
Se intendete scrivere proprio questi caratteri, allora dovete precederli con \ : ad esempio /pippo\.com/
Ed ecco il significato dei metacaratteri:
metacarattere | significato | esempio | commenti
|
. | ogni carattere eccetto \n |
|
\d | ogni carattere numerico
|
\D | ogni carattere non numerico
|
[ ] | ogni carattere incluso nelle parentesi
|
[^ ] | ogni carattere non incluso nelle parentesi
|
[ - ] | ogni carattere nell'intervallo
|
* | zero o piu ripetizioni del carattere precedente
|
+ | uno o piu ripetizioni del carattere precedente
|
? | zero o uno ripetizioni del carattere precedente
|
{n} | n ripetizioni
|
{n,} | n o piu' ripetizioni
|
{n,m} | n o piu' ripetizioni con un massimo di m
|
^ | posizione inizio della stringa
|
$ | posizione fine della stringa
|
| | la regexp precedente oppure la regexp seguente
|
(regexp ) | la regexp puo' essere trattata come un unico carattere | | Le parentesi tonde permettono anche di estrarre una parte del pattern.
Questa viene assegnata alle variabili $1 , $2 ,
|
Per chi conosce la sintassi dei linguaggi di programmazione, esiste
una definizione rigorosa di regexp.
- Una regexp e' una serie di "rami" separati dall'operatore | di alternativa.
- Un ramo e' uno o piu' "pezzi" concatenati.
- Un pezzo e' un atomo seguito da un indicatore di ripetizione
- Un atomo e' un singolo carattere oppure una regexp racchiusa tra parentesi
tonde oppure un pattern estratto da una (regexp) precedente.
Il modo migliore per riuscire a trovare la regexp che risolve il vostro
problema e' di sperimentare con un programma come vi
,sed
o egrep
provando diverse formule sempre piu' complesse finche' non avete trovato
quella che fa al caso vostro. A quel punto potete copiarla nel programma Perl
o altro dove vi serve.Attenzione pero': tra le varie implementazioni ci sono
piccole differenze.Ad esempio in vi i metacaratteri sono solo ] ^ $ } , gli
altri caratteri vanno scritti con \ davanti.
Esempio Trovare la regexp che permette di estrarre da un file di URL di ricerche fatte con vari motori,le parole chiavi usate nelle
ricerche.
Cominciamo con google che si presenta in questo modo:
9 2 103 22 9 5 host215-252.pool212171.interbusiness.it 212.171.252.215 3796http://www.google.it/search?hl=it&ie=UTF-8&oe=UTF-8&q=salvare database mysql asp&btnG=Cerca con Google&lr=lang_it http://www.ba.infn.it/~zito/corso/webdata.html
Smanettando con vi troviamo che:
s/q=[^&]*&/bingo/
funziona.Ora passiamo a righe del tipo:
9 2 103 22 21 1 dt0b2nc0.tampabay.rr.com 24.92.28.192 799http://search.yahoo.com/search?p=method of Loci http://www.ba.infn.it/~zito/loci.html
s/p=.*http/p=bingohttp/
Cosi' scopriamo che abbiamo bisogno di:s/qs=[^&]*&/bingo/
per le query su Virgilio.Di s/key=[^&]*&/bingo/
per Tiscali.
A questo punto ci siamo quasi:dobbiamo combinare le varie alternative in
un'unica regexp e possiamo cominciare a provare con un programma Perl:
$quanti=/(qs|key|q|p)=[^&]*(&|http)/;
Ora non ci resta che estrarre le parole chiavi inserendo un ulteriore gruppo
di parentesi tonde:
/(qs|key|q|p)=([^&]*)(&|http)/
Il programma completo Perl e' il seguente:
#!/usr/bin/perl
$guestbook = "/home/zito/temp/source/filexp.txt";
open (IN, $guestbook) || die "Can't open $guestbook";
@content = <IN>
close (IN);
$numvis = @content;
$count = 0;
while($count < $numvis) {
$entry = @content[$count];
$_=$entry;
$quanti=/(qs|key|q|p)=([^&]*)(&|http)/;
if($quanti>0){print "$2\n";}
$count++;
}
# end
e produce questo risultato.
Questo file contiene altri esempi di uso di espressioni
regolari con vi e sed.
Altri regexp tutorial vi spiegano il significato di tutti i caratteri speciali.
Cosa vogliamo | regexp
|
Per mettere entro doppi apici un URL | s/href=\([^>]*\)>/href="\1">/
|
Setuid Binaries
Un binario setuid si comporta in maniera molto diversa di un normale binario.Se voi, utente pippo eseguite un normale programma, allora il programma esegue con i vostri privilegi, anche se magari il file appartiene a root. Invece un programma marcato setuid
dal proprietario vi
permette di eseguirlo coi privilegi del proprietario (cio' che significa quasi
sempre privilegi di root). Si capisce perche' questi programmi sono molto ricercati dagli hacker. Un esempio tipico e' su
marcato come setuid dall'owner root.
chmod 6755 filename | fa diventare setuid il programma contenuto in filename
|
find / -perm -4000 | Quali programmi setuid ci sono nel sistema
|
Le shell
Quando si danno dei comandi in un terminale, i comandi vengono interpretati
da un particolare programma detto shell.Il problema e' che esistono
molte shell e ci sono alcune sottili differenze nel modo come trattano
i comandi. Inoltre se scriviamo una sequenza di comandi da fare eseguire
da un file (programmiamo la shell) , la programmazione e' differente a seconda
della shell. Per scoprire quale shell state usando date il comando:
echo $SHELL
.
Per sapere quali shell sono disponibili date il comando:
cat /etc/shells
/bin/bash
/bin/sh
/bin/ash
/bin/bsh
/bin/ksh
/bin/tcsh
/bin/csh
/usr/bin/csh
/usr/bin/ksh
/usr/bin/rsh
/usr/bin/sh
/usr/local/bin/bash
/usr/local/bin/tcsh
/usr/local/bin/zsh
Per cambiare shell di login bisogna invece usare il comand chsh dando una delle
shell disponibili.Se volete cambiare shell solo temporaneamente, allora
basta dare il nome della shell. Per tornare alla shell precedente basta dare
il comando exit.
Le shell si dividono in 2 gruppi principali:shell compatibili Bourne(bash
) e
shell compatibili csh.Per quanto le shell abbiano molti comandi in comune,
ci sono alcuni comandi che sono differenti. Ad esempio rehash e' un
comando di csh e non e' disponibile su shell bash.
Tutte le shell eseguono all'inizio i comandi presenti in un particolare file, che potete usare per personalizzare l'uso del computer. Questi file di login sono di solito nella cartella principale ma dato che cominciano col carattere "." possono essere visti solo col comando ls -a
. Ad esempio
la shell tcsh puo' essere personalizzata col file .tcshrc
.
Utenti e la loro gestione
I sistemi Unix sono multiutente e questo ha conseguenze anche nel caso che
voi siate l'unico utente della macchina. Dovete per forza conoscere come e'
fatta la gestione utenti.
Tutto si basa su 2 file di configurazione /etc/passwd
e
/etc/group
che potete anche editare a mano. Il concetto base
e' che avete un certo numero di utenti divisi in vari gruppi. Un utente puo'
anche appartenere a piu' gruppi anche se appartiene a un unico gruppo primario.
Un gruppo d'altra parte puo' anche avere zero utenti (a parte l'utente root
che di diritto fa parte di tutti i gruppi).In generale l'appartenenza a un gruppo indica il fatto di avere certi privilegi. Ogni utente e' identificato
da un numero univoco uid e ogni gruppo da un gid. Nel file passwd
vengono incluse le informazioni essenziali per ogni utente inclusa la password crittata (a meno di non usare il sistema di sicurezza avanzato
detto C2 che raggruppa le password nel file shadow
accessibile solo
al root
).
Nel file group
viene indicata tra l'altro l'informazione che un
utente appartiene a piu' gruppi(in passwd
compare il solo gruppo
primario).
Il root,come si e' detto ,appartiene a ogni gruppo avendo tutti i privilegi
(ed usando il comando su nomeutente
puo' camuffarsi da qualsiasi
utente). In generale, a piu' gruppi un utente appartiene, piu' privilegi esso ha. Cioe' i privilegi sono stabiliti in maniera implicita come somma delle risorse accessibili attraverso i gruppi di cui si fa parte. La necessita' di creare tanti gruppi, deriva da questioni di protezione del sistema:se ci fosse solo un
utente root allora sarebbe facile sia per un hacker che per lo stesso proprietario , fare dei grossi danni.
L'utente root
L'utente root ha tutti i privilegi e come tale puo' combinare maggiori
danni al computer.Per questo e' preferibile lavorare normalmente come utente normale e passare nello stato di superutente solo quando e' necessario. Come esempio di danni e' l'esecuzione di un rm *
da root in una cartella di
sistema che porterebbe a una distruzione di file importanti. Un'altro pericolo
e' legato al fatto di usare dei comandi modificati da hacker che possono produrre ,se siete come root, risultati catastrofici. Per lo stesso motivo e' pericoloso mandare in esecuzione programmi come un server Web con i privilegi di root.
Infatti Apache subito dopo la partenza fa eseguire tutti i propri processi
come un utente nobody senza particolare privilegi per evitare problemi.
su - | diventa utente root passando nella home directory di root
|
Trucchi
Come fare per ... | |
Accedere ai caratteri che non sono sulla vostra tastiera | Aggiungete nella vostra home directory al file .Xmodmap le righe:
keycode 117 = Mode_switch
add Mod3 = Mode_switch
(il 117 deve riferirsi a un tasto non usato come quello di Windows)
Ora date il comandoxmodmap ~/.Xmodmap Premendo contemporaneamente
il tasto prescelto con altri tasti si accedono ad altri caratteri della fonte che si sta usando
Provate anche a usare "AltGr" con un altro tasto
|
Avere una lista di tutte le pagine man disponibili | xman
|
Conoscere le fonti e i caratteri disponibili | xfontsel
Conoscere il codice corrispondente a un tasto | xev
Come avere l'output di un comando sia rediretto su un file che sulla consolle | ls-l |tee temp.lis
Copiare un file conservando i permessi | cp -p
| Copiare con scp un'intero albero di cartelle | scp -r user@computer:percorso_cartella_radice nome_cartella_destinazione/
| Copiare tutti i gif da una cartella Web | wget -r -l1 --no-parent -A.gif url_cartella
| Dare la priorita' minima a un job che consuma molta memoria | renice 19 -p pid
| Debuggare un programma | Esegui la compilazione del programma con l'opzione -g . Dopo mandato in esecuzione trova il pid del programma e dai l'istruzione gdb /cammino/programma pid
| Disegnare un grafo come questo | Esegui il seguente programma perl col comando
./grafo.pl | neato -Tgif -Gcenter -Gsize="6,6" -o grafo.gif Viene usato graphvis col suo linguaggio di descrizione grafi..
| Eseguire un comando su un computer remoto senza allocarsi | rsh nome computer comando ssh nomecomputer comando
| Eseguire un modulo eseguibile che richiede delle librerie shared senza
installare le librerie | Usa lo shell wrap-exec per preparare un
tar-gz con tutti i file. Copia questo file e quindi dopo averlo decompresso
esegui il wrapper (con lo stesso nome del programma originario) che richiama tutte le librerie shared copiate tutte nella stessa cartella.
| Fare un diagramma | Usa il programma dia
Fare una pagina html con un indice visuale di tutte le immagini contenute in una cartella | montage -geometry 120x120+10+10 -tile 5x100 -background white -label %f *.jpg dir.html
| Far partire un programma con la priorita' minima | nice +19 comando_che_fa_partire_il_programma
| Far ripartire la stampa che sembra bloccata | Da root dare lpc quindi status , stop nomecodastampa, start nome codastampa, status
talvolta e' necessario dare abort nomecodastampa invece di stop codastampa
| Far scorrere l'output in una finestra terminale senza ricorrere al cursore e al mouse | Usa i tasti CTRL+Pageup e CTRL+Pagedown
| Far riconoscere i tasti cursore in una finestra | set -o emacs
or setenv TERM xterm
| Fare una copia di una finestra in formato png | import ciccio.png
| Guardare il contenuto di un documento che Mozilla vuole downloadare | Scegli come applicazione per leggere il documento /usr/bin/emacs
| Installare plugin in Mozilla | Mozilla va fatto partire da root altrimenti la procedura automatica non funziona
| Leggere il contenuto di un file .man | man nome_del_file
| Modificare una stringa in piu' file | sed -i "s/pcba10.ba.infn.it\/images/s3.amazonaws.com\/zgfractals/g" frame*.html
| Montare un cdrom | mount -t auto /dev/cdrom /mnt/cdrom come root. Ricordati di dare umount /mnt/cdrom
| Montare un dischetto msdos | mount -t vfat /dev/fd0 /mnt/floppy come root. Ricordati di dare umount /mnt/floppy e se dice che il device e' busy fare il cd su una cartella diversa di
| Permettere un core dump di dimensioni qualsiasi | ulimit -c unlimited (comando bash)
| Montare una chiave usb | Come root crea la cartella /mnt/usbkey . Prova a montare la chiave su /dev/sda1 col comando mount -t vfat /dev/sda1 /mnt/usbkey . Se non funziona riprova
con sdb1,sdc1,... fino a trovare quello che funziona.
Ora aggiungi a /etc/fstab la riga
/dev/sda1 /mnt/usbkey vfat user,rw,noauto,umask=0 0 0
Ora come un normale utente puoi montare/smontare la chiave usb con mount/umount /mnt/usbkey
Permettere un core dump di dimensioni qualsiasi | ulimit -c unlimited (comando bash)
| Preparare un poster da un postscript | Scaricare poster e dopo averlo installato con make dare il comando:
poster -v -iA4 -mA4 -pA0 input.ps > output.ps
(questo comando produce un poster A0 a partire da un A4 suddividendolo in piu'
fogli A4)
| Recuperare i plugins della vecchia installazione di Mozilla quando si installa quella nuova | Provate a copiare tutti i files nella cartella plugins della vecchia nella cartella plugins della nuova. Provate i plugins per
vedere se funzionano ancora. Se non funzionano cancellate il file. Questa tecnica di sicuro non funziona con Java run time "javaplugin_oji.so". In questo caso
localizzate il file (con "locate javaplugin_oji.so") e poi fate un link (dopo esservi posizionati nella cartella dei plugin) con:
ln -s /cammino_del_runtime_java/libjavaplugin_oji.so .
| Rinominare tutti i files di una cartella | Usa il comando rename Ad esempio: rename .svg .xml tmap*.svg cambia l'estensione
di tutti i file indicati nell'ultimo argomento da svg a xml
| Ripartire senza X-server | Ci sono vari modi:
- edita /etc/inittab sostituendo id:3:initdefault al posto di id:5:initdefault
- Quando Lilo chiede cosa scegliete scrivere:linux init 3
- CTRL_ALT_F1
| Sapere dove va caricato l'indirizzo per sfruttare un buffer overflow | ./buffo `perl -e 'print "A"x28 . "\x78\x56\x34\x12";'` Sposta la stringa "12345678" finche' non corrisponde all'indirizzo eip.Il controllo va fatto con gdb sul core dump.
| Sapere quali job sono in attesa di stampa per una data stampante remota | lpq -Pstampante
| Scaricare tutti i file di una cartella accessibile via Web | dare il comando wget -r url_della_cartella (perche' la cosa funzioni dando
l'url della cartella nel browser si deve ottenere la lista dei file)
| Spostare un programma in background | CTRL-Z e quindi fg
| Trasformare un latex in ps | latex file.tex
dvips -o file.ps file
| Trovare le cartelle che occupano piu' spazio su disco | du -k nomecartellaprincipale|sort -r -n|less
| Unzippare e starare un file conservando il file compresso originario e senza creare file intermedi | gunzip < file.tar.gz | tar xvf -
| wget di un documento con un url complesso in un file dal nome semplice | wget "url complesso" -O nomefile
| Zippare i files di una cartella nel formato accessibile con winzip sotto Windows | zip archivio.zip *
| | | | | |
Variabili ambiente(environment variable)
Si tratta di variabili il cui valore descrive l'ambiente di lavoro.Queste
variabili sono impostate durante il login e il loro valore pilota tutti
i programmi usati.
I due tipi di shell hanno 2 files differenti per impostare queste variabili:
.login per le shell C e .bash_profile per shell bash(questi 2
file di avvio sono eseguiti solo a login).Invece ogni volta che si apre una
nuova finestra vengono eseguiti i file di avvio .cshrc per shell C e
.bashrc per l'altro gruppo di shell.
Inoltre una delle differenze tra le due famiglie di shell e'
proprio nei comandi che impostano/annullano la definizione di una variabile
ambiente:
CSH: setenv name value
BASH: export name=value
CSH: unsetenv name
BASH: unset name
echo $nome | Per sapere il valore della variabile nome
|
printenv | Per sapere il valore di tutte le variabili
|
setenv PATH /usr/xxx:$PATH | Per aggiungere una nuova cartella a PATH
|
setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/lib/ssa/ | Aggiungere una nuova cartella dove cercare librerie shared
|
vim
Modificare la stringa xxx in yyy in tutto il testo | :%s/xxx/yyy/g
|
Cancellare tutte le righe contenenti xxx | :g /xxx/d
|
Esegui il comando cmd su tutte le righe che soddisfano address | :g address cmdAddress puo' essere % n1,n2 . n $ n1-n n1+n /stringa/ ?stringa?
| Cancella tutti i caratteri fino al prossimo carattere apice | d/'
| modifica tutti i caratteri fino al prossimo carattere apice | s/'
| modifica tutti i caratteri fino alla fine riga | C
| cancella tutti i caratteri fino alla fine riga | D
| Lista tutte le opzioni per ex | :set all
| Lista le opzioni impostate per ex | :set
| Lista il file con i numeri di riga | :set number | set nonumber tornera' alla modalita' senza numeri di riga
| Sapere il numero della riga del cursore | CONTROL_g
| Cancella le righe da n1 a n2 | :n1,n2 d
| Copia le righe da n1 a n2 dopo n3 | :n1,n2 m n3
| Trasferisci le righe da n1 a n2 dopo n3 | :n1,n2 t n3
| Sostituisci ogni numero di una o piu' cifre con un "uguale" davanti
con la stringa "numero" | :%s/=[0-9][0-9]*/numero/g
Elimina il carattere CONTROL_M alla fine di ogni riga | :%s/CONTROL_VCONTROL_M$// | Per scrivere CONTROL_M bisogna dare prima CONTROL_V (dice a vi di prendere il carattere che segue cosi' com'e')
| Lista tutte le assegnazioni di comandi a caratteri | map
| Esegui il comando 16dw su tutte le righe | g/pat/normal 16dw
| | |
Provate queste ricerche sul file log.txt
ricerca tutti i numeri(senza punto) | /[0-9][0-9]* | * indica 0 o piu ripetizioni di cifra
|
ricerca numeri tcp-ip | /[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\
|
ricerca richieste al server diverse da GET | /+0100] "[A-F,H-Z]
|
Creazione di un file di comandi SQL a partire dal file esportato da un database.
:%s/'/''/g | Converti gli apici duplicandoli.
|
:%s/TAB/,'/ | Converti il primo tab nei caratteri ,' | TAB si scrive premendo il tasto TAB
|
:%s/TAB/ / | Sostituisci il secondo TAB con uno spazio
|
:%s/TAB/','/
|
:%s/TAB/','/
|
:%s/^\(.*\)/INSERT INTO autore VALUES(\1');/ |
Completa l'istruzione SQL | Notare il copia incolla di tutta la riga \(.*\)
|
:%s/''/NULL/g | Trasforma in NULL i campi vuoti.
|
Il file .exrc
Il file .exrc va messo nella home directory ed e' il file di configurazione
di vi.
Esempio.Quando si da' il comando z tutti gli indirizzi
http:// etc seguiti da un apice(') sono cancellati.
La sintassi del comando map e' semplicemap carattere comando
ma
la sua scrittura nel file .exrc va fatta in una maniera non ovvia:
nel nostro caso comando=:s/http.*'/'/; nel file .exrc bisogna scrivere:
map z :s/http.*'/'/ctrlV CR
(Cioe' gli ultimi due caratteri devono essere control+V e CarriageReturn )
Trucchi
Come editare piu' file di seguito senza uscire da vim | Per passare da un file all'altro usare edit nuovofile
|
X server
Tra i vari demoni (programmi che girano in continuazione) di un sistema Unix/Linux grande importanza ha l'X server in quanto permette l'esecuzione di programmi
con interfaccia grafica su computer remoti che inviano all'X server informazioni per disegnare la stessa interfaccia.La variabile ambiente DISPLAY indica il nome del computer remoto. Di solito i programmi grafici vengono fatti partire
da una finestra di testo creata connettendosi con telnet al computer remoto.
Sui sistemi Linux l'X server e' di solito uno di quelli forniti da XFree86
e il file di configurazione si trova su /etc/X11/XF86Config. Il nome tradizionale del server e' "X" ma di solito questo nome e' linkato al server vero e proprio che si trova in /usr/bin/X11. Ecco un esempio di file di configurazione per far vedere 2 monitor come un'unico monitor sfruttando le
possibilita' offerte da TwinView della scheda grafica Nvidia.
xhost +computer | Autorizza computer a inviare
grafica al server x
|
xhost +localhost | Autorizza il server ad accettare grafica da localhost(ad es. finestre aperte da altri utenti che devono dare il comando:
setenv DISPLAY :0.0
|
xdpyinfo | Stampa le caratteristiche dell'X server del
computer indicato dalla variabile ambiente DISPLAY come quello a cui verranno
inviati le direttive grafiche.
|
X -showconfig
X -probeonly | Comandi da usare per trovare la causa di cattivo funzionamento
di schede video e monitor.Servono per avere informazioni sul server X usato
e sui parametri di scheda video e monitor.
|
vi /etc/X11/XF86Config | file da editare per cambiare le
impostazioni di scheda grafica e monitor.
|
ln -s /usr/X11R6/bin/XF86_SVGA /usr/X11R6/bin/X | Per poter usare il nome generico "X" per richiamare invece "XF86_SVGA"
|
Bibliografia
Page author Giuseppe Zito: info@zitogiuseppe.com
Last update: