Advertisement
angeldp

pesa2.sh

Jun 12th, 2015
350
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #!/bin/bash
  2. #angeldp
  3. #pesa2.sh
  4.  
  5. # El script, al ejecutarse, comprobará los directorios personales de los usuarios
  6. # del sistema. Mira cuánto ocupan; y si sobrepasan los 200MB, lo informa
  7. # preguntando si se desea impedir el acceso a ese usuario.
  8.  
  9. clear
  10. # Solo funciona con root o sudo así que lo compruebo
  11. if [ "$USER" != "root" ]
  12.     then
  13.     echo "Debe ejecutar este script con privilegios de administrador. Use sudo."
  14.     exit
  15. fi
  16. # Obtengo la lista de directorios
  17. HOMES=`cut -d: -f6 /etc/passwd`
  18. # Hago un bucle que recorre todos los perfiles de usuario
  19. # asignando a PERFIL en cada iteración la ruta a cada directorio home
  20. for PERFIL in $HOMES
  21.     do
  22. #   Si el perfil existe (puede ser que el directorio no se haya creado)
  23.     if [ -d "$PERFIL" ]
  24.         then
  25. #   Obtengo su tamaño en kB y en unidades más legibles
  26.         kbPERFIL=`du -s "$PERFIL" 2> /dev/null | cut -f1`
  27.         humanPERFIL=`du -sh "$PERFIL" 2> /dev/null | cut -f1`
  28.     else
  29. #   Si no existe, pongo su tamaño a cero.
  30.         kbPERFIL=0
  31.         humanPERFIL=0
  32.     fi
  33. #   Si el perfil ocupa más de 200MB (200000KBytes)
  34.     if [ $kbPERFIL -gt 200000 ]
  35.         then
  36. #       Obtengo el nombre del propietario y pregunto si quiere bloquear su acceso
  37.         perfilUSER=`grep :${PERFIL}: /etc/passwd | cut -d: -f1`
  38.         echo "El usuario $perfilUSER ha superado el límite máximo de 200MB en su carpeta $PERFIL"
  39.         echo "Actualmente está usando $humanPERFIL"
  40.         echo "¿Quiere que le bloqueemos el acceso? s/n "
  41.         read -s -n1 OPCION
  42. #       Si responde que sí le bloqueo, si no paso al siguiente usuario.
  43.         if [ "$OPCION" = "s" -o "$OPCION" = "S" ]
  44.             then
  45. #           Para bloquear el acceso cojo la línea del passwd sin el campo de la shell
  46. #           agrego a esa línea la shell /bin/false y la vuelvo a meter en el passwd
  47. #           En LINEA se va a guardar la línea donde aparece el usuario (empieza por $perfilUSER)
  48. #           si su shell (los campos del 1 al 6) Ej:
  49. #           user1:x:1001:1001:Usuario:/home/user1
  50.             LINEA=`more /etc/passwd | grep ^${perfilUSER}: | cut -d: -f1-6`
  51. #           Luego añado dos puntos y /bin/false a eso, quedando:
  52. #           user1:x:1001:1001:Usuario:/home/user1:/bin/false           
  53.             LINEA="${LINEA}:/bin/false"
  54. #           Con grep -v obtengo todas las líneas de /etc/passwd menos la del usuario
  55. #           es decir, el mismo archivo, pero sin la línea del usuario y lo guardo
  56. #           en un archivo temporal:
  57.             more /etc/passwd | grep -v ^${perfilUSER}: > miPasswd
  58.             # Añado la línea al fichero temporal:
  59.             echo $LINEA >> miPasswd
  60.             # Muevo el fichero a su lugar
  61.             mv miPasswd /etc/passwd
  62. #           El read lo único que hace es pausar el programa
  63.             read -n1 -s -p "Usuario $perfilUSER bloqueado, pulse cualquier tecla para continuar" TECLA
  64.             echo -e "\n"
  65.         fi
  66. #   Si el perfil no supera el límite, pero existe (es mayor que cero)
  67.     elif [ $kbPERFIL -le 200000 -a $kbPERFIL -gt 0 ]
  68.         then
  69. #       Obtengo el nombre del propietario y le informo de lo que ocupa
  70.         perfilUSER=`grep :${PERFIL}: /etc/passwd | cut -d: -f1`
  71.         echo "El usuario $perfilUSER lleva consumidos $humanPERFIL de espacio"
  72.         read -n1 -s -p "Pulse cualquier tecla para continuar" TECLA
  73.         echo -e "\n"
  74. #   Si el perfil no existe, también informo
  75.     else
  76. #       Obtengo el nombre del propietario y le informo de que no existe su perfil
  77.         perfilUSER=`grep :${PERFIL}: /etc/passwd | cut -d: -f1`
  78.         echo "La carpeta $PERFIL de $perfilUSER no existe"
  79.         read -n1 -s -p "Pulse cualquier tecla para continuar" TECLA
  80.         echo -e "\n"
  81.     fi
  82. done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement