Esercizio per la comprensione di bootloaders, organizzazione dell'albero delle directory, installazione, mount e /etc/fstab, creazione filesystem e swap, copia dei file. Installare il sistema sulla prima meta` dell'hard disk (con almeno una partizione a parte per /usr e /var, piu` una di swap), lasciando libero il resto dello spazio disco. Usare ext2 per tutte le partizioni. Modificare lilo perche' all'avvio parta un sistema di default senza prompt, dopo due secondi. Una volta completata l'installazione partizionare la seconda meta` con lo stesso schema, creare i relativi filesystem, ext3 per la radice, reiser per gli altri. Creare ed attivare la seconda partizione di swap. Se fdisk non funziona cancellare la eventuale partizione estesa e ricrearla fino alla fine del disco, riallocando esattamente gli stessi settori per le partizioni impiegate nel sistema corrente. Montare la nuova radice e copiare le directory necessarie, limitandosi a creare quelle che serviranno come mount point per le altre. Montare le partizioni per /usr e /var e copiare il relativo contenuto. Modificare lilo per consentirgli di lanciare il nuovo sistema usando il kernel dell'attuale ma la nuova root directory, ed inserire la relativa voce. Nel nuovo sistema installare grub e metterlo sulla partizione usata come radice (invece che sull'MBR). Configurarlo per fargli lanciare sia il primo che il secondo sistema con i relativi kernel. Tornare sul primo sistema e configurare lilo per fargli lanciare il secondo sistema attraverso grub. Esercizio sui link. - Creare un link simbolico. Creare un hard link al link simbolico. Cancellare il link simbolico. Che succede e perche'? - Editare un file e salvarlo. Non uscire dall'editor. Da un'altra console cancellare il file. Rientrare nell'editor, fare delle modifiche e risalvare il file con altro nome. Cosa succede e perche'? Esercizi su find - Trovare tutti i file con il suid bit attivo. - Trovare tutte le directory con lo stiky bit attivo. - Trovare tutti i file con lo sgid bit attivo. - Trovare tutti i file piu` vecchi di X [ore|minuti|giorni]. Esercizi sulla shell - cat file1 file2 > file1 che succede e perche'? - cat file1 file2 >> file1 che succede e perche'? Come si fa? Esercizi su textutils, sed e grep - Contare le occorrenze della parola yyy nel file xxx. cat xxx | grep -w -e yyy | sed 's/yyy/yyy\ /g' | grep -w -e yyy | wc -l - Estrarre da ifconfig l'IP di default della interfaccia ifconfig eth0 | grep "inet addr" | cut -f2 -d":" | cut -f 1 -d" " - Ottenere il terminale di controllo dato il nome di un processo ps -e | grep nome | cut -c6-15 - Ottenere il numero di inode di un file dato il nome ls -il | grep nome | cut -c1-8 - rinomina .xxx in .yyy nella directory corrente ls *.xxx | sed 's/.*/& &/' | sed 's/.xxx$/.yyy/' | xargs -0 mv - usare grep per rimuovere tutti i commenti e le righe vuote dal file di configurazione di apache: egrep -c '^\s*(#|$)' Esercizi rete - Assegnare alla propria macchina un indirizzo del tipo 172.16.X.Y dove X è la propria fila e Y la posizione della macchina a partire dalla propria destra. Verificare il funzionamento pingando le macchine degli altri corsisti più vicini (sia a fianco che davanti e dietro). - Assegnare alla propria macchina un indirizzo del tipo 192.168.X.Y dove X è la propria fila e Y la posizione della macchina a partire dalla propria destra. Verificare il funzionamento pingando le macchine degli altri corsisti più vicini (sia a fianco che davanti e dietro). Esercizi sul DNS - creare una zona locale, definire il dominio mio_cognome.lan e chiamare le macchine degli altri come nome_1.mio_cognome.lan, ... - a coppie definire sulla propria macchina un secondario per la macchina dell'altro. Esercizi NFS - ciascuno condivida una prima subdirectory della sua home con il resto della classe in lettura/scrittura, ed una seconda subdirectory in sola lettura. (deve funzionare anche se l'uid degli altri non corrisponde). Esercizi Samba - ciascuno condivida una subdirectory della sua home con il resto della classe. Esercizio Quote - attivare le quote disco per gli utenti su /home, modificare la quota di un utente, impostare un valore basso per lo spazio disco sia per soft che per hard limit e verificare cosa succede quando questi due limiti vengono passati. - Esercitazione reti Installare apache, postfix e courier e configurarli per l'uso di una webmail (squirrelmail). Integrare la configurazione del DNS in modo da potersi mandare la posta fra alunni (prevede la configurazione del PC del docente come primario per la zona base). Esercizio Kernel - Installare e compilare il kernel dai sorgenti applicando un patch. Indire una gara a chi riesce a creare il kernel di dimensione minore mantenendo invariate le capacità del sistema (devono funzionare la rete, X, e dhclient). - Utenti e gruppi Creare gli utenti pippo, topolino e paperino, Creare i gruppi topolinia e paperopoli. Assegnare gli utenti pippo e topolino a topolinia e paperino a paperopoli. Creare due directory topolinia e paperopoli di proprieta degli omonimi gruppi e verificare i permessi di accesso alle stesse ed ai file in esse create. Rendere topolino amministratore di topolinia e fargli mettere una password al gruppo. Fare entrare paperino nel gruppo topolinia con gli appositi comandi e verificarne il funzionamento. Far inserire paperino nel gruppo topolinia dall'amministratore dello stesso. ESERCIZI DI SCRIPTING Creare uno script che salva i file del mese scorso presenti nella cartella passata come argomento in una sottodirectory di una directory di archiviazione che deve avere un nome nella forma MMM-YYYY (dove MMM è il nome del mese, in localizzazione inglese, e YYYY l'anno. Modificare lo script precedente per fargli prendere un secondo argomento che indichi il numero di mesi da salvare. Creare uno script che copia tutti i file di un utente in una directory di archiviazione in una sottodirectory corrispondente al nome dell'utente stesso. Creare uno script che rinomina tutti i file della directory corrente nella forma nomeNN.ext (dove NN sono cifre e ext è una estensione qualsiasi passabile come argomento opzionale e con default .jpg) in nome0NN.ext. Modificare lo script precedente per consentirgli di usare come primo argomento una directory iniziale da cui si deve partire per eseguire l'operazione di rinomina in maniera ricorsiva per i file presenti al suo interno ed in tutte le eventuali sottodirectory. Creare uno script che cambia il proprietario dei file in una directory passata come secondo argomento (che di default deve essere /var/www) a root escluso quelli di un elenco di directory da indicare con una lista inserita nello script. Modificare il precedente script per fargli aggiungere un primo argomento che possa prendere solo i valori start e stop. Con start lo script deve cambiare il proprietario di tutti i file della directory passata come secondo argomento opzionale (il cui default deve essere /var/www) a www-data. Con stop lo script deve riportare a proprietà di root e gruppo root tutti i file il cui gruppo non è www-data. Scrivere uno script che prende due argomenti numerici di cui il secondo è opzionale che stampa l'elenco degli utenti che hanno UID compreso fra i due valori, o maggiore del primo se il secondo argomento non viene specificato. Scrivere uno script che identifica la presenza di eventuali utenti che hanno lo stesso UID e stampa i relativi username e l'UID. Scrivere uno script che imposta una quota disco per tutti gli utenti che fanno parte di un gruppo specificato come primo argomento, i successivi argomenti devono essere soft ed hard limit. Creare uno script da mettere nel cron giornaliero che invia una email all'amministratore se uno dei dischi presenta una occupazione di spazio disco maggiore dell'80%. Creare uno script che effettua un backup giornaliero a rotazione del contenuto di una lista di directory. Lo script deve prevedere una variabile che indica il numero di copie, una che indica la directory di backup ed una che indica la lista delle directory da salvare. Le copie devono essere generate in altrettante sottodirectory della directory di backup nominate Day-N dove N corrisponde al numero della copia, (1, 2, 3, ecc.) ogni giorno deve essere usato il numero successivo, tornando al numero iniziale quando si supera il numero di copie. Il backup deve preservare tutte le proprietà dei file. Si scriva uno script che esaminando il contenuto delle directory di backup create dallo script precedente determini stampi in ordine progressivo con in testa il più recente il numero di giorni fa in cui è stato eseguito il backup ed il nome della rispettiva directory. Creare uno script che stampa il processo che usa più CPU al momento dell'esecuzione. Creare uno script che stampa il processo che usa più memoria al momento dell'esecuzione. Creare uno script che verifica se una macchina è presente sulla rete e nel caso riporta il suo uptime usando SSH. Create uno script che dato un indirizzo IP verifichi se è locale e nel caso lo sia verifichi che sia attivo e riporti il MAC address della scheda di rete ad esso corrispondente. Creare uno script che data una directory da passare come argomento riporti l'elenco dei processi che la stanno utilizzando. Creare uno script che imposti una durata massima della validità della password in giorni (primo argomento) per tutti gli utenti di un gruppo (secondo argomento). Creare uno script che stampi il default gateway della propria macchina (solo quello). Creare uno script che riporti tutti i file che contengono uno spazio nel nome a partire dalla directory specificata come argomento. Creare uno script che crei una copia di tutti i file che iniziano per lettera maiuscola in una directory passata come argomento, cambiandogli nome in tutte lettere minuscole. OBSOLETI - LPD Inserire in printcap una voce che permetta di utilizzare la stampante remota della macchina dell'insegnante (questo deve abilitare l'accesso in lpd.perms).