Advertisement
chete

Practica 3 Sistemas Operativos

Oct 29th, 2014
457
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # ------------------- #
  4. # Sistemas operativos #
  5. # Práctica 3 #
  6. # ------------------- #
  7.  
  8. ###
  9. ## Funciones auxiliares
  10. #
  11.  
  12. # Espacio utilizado en disco
  13. function diskUsed()
  14. {
  15. du -sh|cut -f1
  16. }
  17.  
  18. # Cuenta del número de subdirectorios
  19. function numDir()
  20. {
  21. ls -l|grep ^d|wc -l
  22. }
  23.  
  24. # Cuenta del número de archivos
  25. function numFiles()
  26. {
  27. ls -l|grep ^-|wc -l
  28. }
  29.  
  30. # El archivo más grande
  31. function biggestFile()
  32. {
  33. ls -lS | grep ^- | awk '{print $8}' | head -1
  34. }
  35.  
  36. # El archivo más pequeño
  37. function smallestFile()
  38. {
  39. ls -lS | grep ^- | awk '{print $8}' | tail -1
  40. }
  41.  
  42. # Cuenta del número de archivos con permiso de lectura para $USER
  43. function numReadFilesUser()
  44. {
  45. #ls -l|grep ^-r|wc -l
  46. ls -l|grep ^-r|awk '{print $3,$8}'|grep $USER|awk '{print $2}' > tmp.txt && ls -l|grep ^-.{3}r|awk '{print $4,$8}'|grep `cat /etc/group|grep $GROUPS|cut -d: -f1`|awk '{print $2}' >> tmp.txt && ls -l|egrep '^-.{6}r'|awk '{print $8}' >> tmp.txt && expr `sort -u tmp.txt | wc -l` - 1 && rm tmp.txt
  47. }
  48.  
  49. # Cuenta del número de archivos con permiso de escritura para $USER
  50. function numWriteFilesUser()
  51. {
  52. #ls -l|grep ^-.w|wc -l
  53. ls -l|grep ^-.w|awk '{print $3,$8}'|grep $USER|awk '{print $2}' > tmp.txt && ls -l|grep ^-.{4}w|awk '{print $4,$8}'|grep `cat /etc/group|grep $GROUPS|cut -d: -f1`|awk '{print $2}' >> tmp.txt && ls -l|egrep '^-.{7}w'|awk '{print $8}' >> tmp.txt && expr `sort -u tmp.txt | wc -l` - 1 && rm tmp.txt
  54. }
  55.  
  56. # Cuenta del número de archivos con permiso de ejecución para $USER
  57. function numRunFilesUser()
  58. {
  59. #ls -l|grep ^-..x|wc -l
  60. ls -l|grep ^-..x|awk '{print $3,$8}'|grep $USER|awk '{print $2}' > tmp.txt && ls -l|grep ^-.{5}x|awk '{print $4,$8}'|grep `cat /etc/group|grep $GROUPS|cut -d: -f1`|awk '{print $2}' >> tmp.txt && ls -l|egrep '^-.{8}x'|awk '{print $8}' >> tmp.txt && sort -u tmp.txt | wc -l && rm tmp.txt
  61. }
  62.  
  63. # Cuenta del número de archivos ejecutables para cualquier usuario
  64. function listRunFiles()
  65. {
  66. ls -l|grep ^-..x..x..x|awk '{print $8}'
  67. }
  68.  
  69. ###
  70. ## Inicio del script
  71. #
  72.  
  73. # Caracteres de escape para colorear la salida estándar en bash.
  74. # Se pueden quitar, basta con eliminar las variables ${red}, ${blue} y ${endColor} de las llamadas a 'echo'
  75. red='\e[0;31m'
  76. blue='\e[0;34m'
  77. endColor='\e[0m'
  78.  
  79. # Si no recibimos ningún argumento trabajermos en el directorio actual
  80. if test $# -eq 0
  81. then
  82. dir=.
  83. fi
  84.  
  85. # Si recibimos un parámetro trabajaremos en el directorio que se indique
  86. if test $# -eq 1
  87. then
  88. dir=$1
  89. fi
  90.  
  91. # Si recibimos más de un parámetro abortamos la ejecución
  92. if test $# -gt 1
  93. then
  94. echo -e "${blue}Numero de argumentos incorrecto${endColor}"
  95. exit 0
  96. fi
  97.  
  98. # Accedemos al directorio de trabajo
  99. cd $dir > /dev/null # /dev/null es la salida nula, con esto evitamos que escriba mensajes por pantalla, prueba a quitarlo
  100. if test $? -ne 0
  101. then
  102. echo -e "${blue}No existe el directorio $dir${endColor}"
  103. exit 0
  104. fi
  105.  
  106. # Visualizamos el directorio de trabajo
  107. echo -e "\n${blue}Estadísticas del directorio `pwd`${endColor}\n"
  108.  
  109. while true # Bucle infinito
  110. do
  111. # Visualizamos el menú
  112. echo -e "${blue}Por favor, seleccione una opción de la lista:${endColor}"
  113. echo -e "\t${blue}1. Espacio total ocupado${endColor}"
  114. echo -e "\t${blue}2. Numero de subdirectorios${endColor}"
  115. echo -e "\t${blue}3. Numero de archivos${endColor}"
  116. echo -e "\t${blue}4. Fichero más grande${endColor}"
  117. echo -e "\t${blue}5. Fichero más pequeño${endColor}"
  118. echo -e "\t${blue}6. Número de ficheros con permiso de lectura para $USER${endColor}"
  119. echo -e "\t${blue}7. Número de ficheros con permiso de escritura para $USER${endColor}"
  120. echo -e "\t${blue}8. Número de ficheros con permiso de ejecución para $USER${endColor}"
  121. echo -e "\t${blue}9. Ficheros con permiso de ejecución para todos los usuarios${endColor}"
  122. echo -e "\t${blue}10. Salir${endColor}"
  123.  
  124. read option
  125. case $option in
  126. 1) dUsed=`diskUsed`
  127. echo -e "\n${red}Espacio total ocupado: $dUsed${endColor}\n"
  128. ;;
  129. 2) nDir=`numDir`
  130. echo -e "\n${red}Numero de subdirectorios: $nDir${endColor}\n"
  131. ;;
  132. 3) nFiles=`numFiles`
  133. echo -e "\n${red}Numero de archivos: $nFiles${endColor}\n"
  134. ;;
  135. 4) bigFile=`biggestFile`
  136. echo -e "\n${red}El archivo más grande: $bigFile${endColor}\n"
  137. ;;
  138. 5) smallFile=`smallestFile`
  139. echo -e "\n${red}El archivo más pequeño: $smallFile${endColor}\n"
  140. ;;
  141. 6) nFiles=`numReadFilesUser`
  142. echo -e "\n${red}Número de ficheros con permiso de lectura para $USER: $nFiles${endColor}\n"
  143. ;;
  144. 7) nFiles=`numWriteFilesUser`
  145. echo -e "\n${red}Número de ficheros con permiso de escritura para $USER: $nFiles${endColor}\n"
  146. ;;
  147. 8) nFiles=`numRunFilesUser`
  148. echo -e "\n${red}Número de ficheros con permiso de ejecución para $USER: $nFiles${endColor}\n"
  149. ;;
  150. 9) nFiles=`listRunFiles`
  151. echo -e "\n${red}Ficheros con permiso de ejecución para todos los usuarios:\n$nFiles${endColor}\n"
  152. ;;
  153. 10) break
  154. ;; # Abortamos la ejecución del bucle while
  155. *) echo -e "\n${red}Opción no válida${endColor}\n"
  156. ;;
  157. esac
  158. done
  159. # Fin del script
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement