.dsy:it.
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Sistemi operativi I (http://www.dsy.it/forum/forumdisplay.php?forumid=269)
-- [LAB] Esercizi Shell Svolti (http://www.dsy.it/forum/showthread.php?threadid=38923)


Posted by Spr1gg4N on 12-08-2009 11:04:

[LAB] Esercizi Shell Svolti

Ciao a tutti volevo proporre di creare un thread (questo :D) con su lo svolgimento degli esercizi di scripting proposti sul wiki (e perchè no, magari anche di altri) così da dare una mano a chi deve preparare il laboratorio.

Elenco degli esercizi proposti sul wiki:

*Trovare l'utente col minor numero di file nel sistema
* Trovare l'utente col file piu' recente nel sistema
* Elencare i tre utenti che hanno il maggior numero di file nel sistema
* Trovare tutti i file col numero dispari di righe (quindi sono i file di testo)
* Trovare tutti i file modificati di venerdi' (sia un venerdi' particolare che di venerdi' in generale)
* Trovare tutti i link simbolici nel filesystem
* Trovare tutti i file di testo che non siano script
* Contare quanti file di manuale ci sono nel filesystem
* A quante “pagine” (una pagina equivale a circa 1500 caratteri) corrispondono tutti i file di testo del filesystem?
* Quali file ha modificato l'utente XY in una specifica data?
* Quali file di testo ha modificato l'utente XY nell'ultimo anno?
* Qual'e' l'utente che ha modificato piu' file nell'ultimo anno?
* Calcolare il numero di righe totali che ha scritto sul filesystem un certo utente nell'ultimo mese
* Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato
* Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato ESCLUDENDO gli hardlink
* Quanta memoria occupa il processo piu' grande?


Posted by Spr1gg4N on 19-08-2009 17:25:

Spero che qualcuno mi corregga se ho fatto qualche cavolata :D

* Trovare tutti i file col numero dispari di righe (quindi sono i file di testo)



code:
#!/bin/sh TEMP=temp echo "Calculating..." & (find / -type f | xargs wc -l 2>/dev/null | sed s/^\ *// > $TEMP) echo -e "LINES\t\tFILE" echo "--------------------------------------------" while read line; do LC=$(echo $line | cut -f 1 -d " ") NAME=$(echo $line | cut -f 2 -d " ") PAIR=$(expr $LC % 2) if [ $PAIR -ne 0 ]; then echo - e "$LC\t\t$NAME" fi done < $TEMP rm $TEMP


Ho utilizzato un file temporaneo altrimenti mi andava in "Out of space"....e direi anche giustamente dato che i file trovati da find / sono molti....ma la mia domanda è: è corretto fare in questo modo? Altrimenti ora come ora non saprei come farlo....
Se il find ritornasse pochi file allora avrei potuto anche fare solo un for che ciclava sui risultati del find....ma nel caso del find / questa è l'unica soluzione che mi viene in mente :D


* Trovare tutti i file di testo che non siano script

code:
#!/bin/sh TEMP="$(pwd)/temp" echo "Calculating..." & (find / -type f | grep -v '^'"$TEMP"'$' > $TEMP) while read line do FILE=$(echo $line) if [ "$(head -1 $FILE)" != "#!/bin/sh" ]; then echo $FILE fi done < $TEMP rm $TEMP


* Trovare tutti i link simbolici nel filesystem

code:
#!/bin/sh for LINK in $(find / -type l); do echo $LINK done


In questo script non è stato necessario utilizzare un file temporaneo perchè tanto i link simbolici che ho trovato sono solo 2.

*Trovare l'utente col minor numero di file nel sistema

code:
#!/bin/sh echo -e "USER\t\tUID\t\t#FiLES" echo "-----------------------------------------------" MINUSER=$(head -1 /etc/passwd | cut -f 1 -d : ) MINUID=$(head -1 /etc/passwd | cut -f 3 -d : ) MINFILES=$(find / -user $MINUID | wc -l) while read line; do USER=$(echo $line | cut -f 1 -d : ) UID=$(echo $line | cut -f 3 -d : ) if [ "$UID" -eq "$MINUID" ]; then echo -e "$MINUSER\t\t$MINUID\t\t$MINFILES" continue fi FILES=$(find / -user $UID | ec -l) fi [ "$MINFILES" -ge "$FILES" ]; then MINFILES=$FILES MINUSER=$USER MINUID=$UID fi echo -e "$USER\t\t$UID\t\t$FILES" done < /etc/passwd echo "\nMINORE:\n-----------------------------------------------" echo -e "$MINUSER\t\t$MINUID\t\t$MINFILES"


In questo esercizio stampo anche tutti gli utenti, i relativi UID e il relativo numero di files così da avere un riscontro col risultato finale (l'utente col minor numero di files)

* Elencare i tre utenti che hanno il maggior numero di file nel sistema

code:
#!/bin/sh TEMP="$(pwd)/temp" while read line; do USER=$(echo $line | cut -f 1 -d : ) UID=$(echo $line | cut -f 3 -d : ) FILES=$(find / -user $UID | wc -l) echo -e "$FILES $USER" >> $TEMP done < /etc/passwd sort -nr $TEMP | head -3 rm $TEMP


Posted by mark on 02-09-2009 10:55:

* Trovare l'utente col file piu' recente nel sistema

non ho trovato di meglio per ora

code:
#!/bin/sh find / -type f -exec stat -atime {} \; > atime.tmp find / -type f -exec stat -uid {} \; > uid.tmp paste -d ' ' atime.tmp uid.tmp | sort +0 -n rm *.tmp

__________________
Non ti perdere di coraggio se ti tocca lavorare molto e raccogliere poco.....


All times are GMT. The time now is 23:30.
Show all 3 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.