View difference between Paste ID: DJMFgDL9 and 1Az7ZWZw
SHOW: | | - or go back to the newest paste.
1
#!/bin/bash
2-
#ismael moreno
2+
#angeldp
3-
#for.sh
3+
#pesa2.sh
4-
#peso de cada perfil,superan 200MB ¿bloquear el accesso?,bin/false
4+
5-
#se que me falta comentarle
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-
# Vale, pues lo comentaré yo. (angeldp)
7+
# preguntando si se desea impedir el acceso a ese usuario.
8
9
clear
10-
# Vale, lista de carpetas en /home
10+
# Solo funciona con root o sudo así que lo compruebo
11-
# el problema es que 
11+
if [ "$USER" != "root" ]
12-
for VARIABLE in `ls /home`
12+
	then
13
	echo "Debe ejecutar este script con privilegios de administrador. Use sudo."
14-
# Mejor du -sh
14+
	exit
15-
	PESOPERFILES=`du -s "/home/$VARIABLE" 2> /dev/null | cut -d: -f1`
15+
fi
16-
# Mejor echo "El directorio $VARIABLE ocupa $PESOPERFILES"
16+
# Obtengo la lista de directorios
17-
	echo " el peso de los perfiles es de $PESOPERFILES "
17+
HOMES=`cut -d: -f6 /etc/passwd` 
18-
# done
18+
# Hago un bucle que recorre todos los perfiles de usuario
19-
# El problema del bucle for anterior es que no lo aprovechas.
19+
# asignando a PERFIL en cada iteración la ruta a cada directorio home
20-
# por eso comento el fin del bucle. Debe finalizar abajo del todo
20+
for PERFIL in $HOMES
21-
# Todo lo que pones a continuación debería ir dentro. Una 
21+
22-
# vez que ha finalizado $VARIABLE y $PESOPERFILES no se modifican
22+
# 	Si el perfil existe (puede ser que el directorio no se haya creado)
23-
# sleep 2
23+
	if [ -d "$PERFIL" ]
24-
 	echo " este perfil es de $VARIABLE "
24+
25-
#aqui abajo me da un fallo.... y no se porque
25+
# 	Obtengo su tamaño en kB y en unidades más legibles
26-
# Las comillas son solo para cadenas de caracteres, con números no
26+
		kbPERFIL=`du -s "$PERFIL" 2> /dev/null | cut -f1`
27-
#	if [ "$PERSOPERFILES" -gt "200000" ]
27+
		humanPERFIL=`du -sh "$PERFIL" 2> /dev/null | cut -f1`
28-
	if [ $PESOPERFILES -gt 200000 ]
28+
	else
29
# 	Si no existe, pongo su tamaño a cero.
30-
		echo " la carpeta /home/$VARIABLE pasa del limite permitido"
30+
		kbPERFIL=0
31-
		echo " ¿quiere bloquear la cuenta? "
31+
		humanPERFIL=0
32-
		echo " pulse s para aceptar o n para denegar "
32+
	fi
33-
		read -n1 OPC
33+
# 	Si el perfil ocupa más de 200MB (200000KBytes)
34-
# El if no acaba aquí
34+
	if [ $kbPERFIL -gt 200000 ]
35-
# fi
35+
36-
		case $OPC in
36+
#		Obtengo el nombre del propietario y pregunto si quiere bloquear su acceso
37-
			s | S )
37+
		perfilUSER=`grep :${PERFIL}: /etc/passwd | cut -d: -f1`
38-
			echo " se esta procediendo a bloquear la cuenta "
38+
		echo "El usuario $perfilUSER ha superado el límite máximo de 200MB en su carpeta $PERFIL"
39-
			echo  " espere "
39+
		echo "Actualmente está usando $humanPERFIL"
40-
			sleep 1
40+
		echo "¿Quiere que le bloqueemos el acceso? s/n "
41-
			echo "."
41+
		read -s -n1 OPCION
42-
			sleep 1
42+
#		Si responde que sí le bloqueo, si no paso al siguiente usuario.
43-
			echo "."
43+
		if [ "$OPCION" = "s" -o "$OPCION" = "S" ]
44-
			sleep 1
44+
			then
45-
			echo "."
45+
#			Para bloquear el acceso cojo la línea del passwd sin el campo de la shell
46-
# La variable BLOQUEAR no pinta nada, ojo con las llaves,corta los campos buenos (-f1-6) y ojo con espacios en nombres de archivos			
46+
#			agrego a esa línea la shell /bin/false y la vuelvo a meter en el passwd
47-
# BLOQUEAR=`more etc/passwd | grep ^{$VARIABLE}: | cut -d":" -f7 > campo bueno.txt
47+
#			En LINEA se va a guardar la línea donde aparece el usuario (empieza por $perfilUSER)
48-
			LINEA=`more /etc/passwd | grep ^${VARIABLE}: | cut -d: -f1-6`
48+
#			si su shell (los campos del 1 al 6) Ej:
49-
# creo que eh cogido bien el campo siete del usuario que yo queria ahora no se como cogiendo ese campo como 
49+
#			user1:x:1001:1001:Usuario:/home/user1 
50-
# modificarle... y cambiarle por /bin/bash.
50+
			LINEA=`more /etc/passwd | grep ^${perfilUSER}: | cut -d: -f1-6`
51-
# Pues algo así como añadir /bin/false a la línea que no tenía campo 7
51+
#			Luego añado dos puntos y /bin/false a eso, quedando:
52
#			user1:x:1001:1001:Usuario:/home/user1:/bin/false			
53-
Solo queda eliminar la línea del archivo con grep -v
53+
54-
			more /etc/passwd | grep -v ^${VARIABLE}: > miPasswd
54+
#			Con grep -v obtengo todas las líneas de /etc/passwd menos la del usuario
55-
# Añadir la línea al fichero modificado
55+
#			es decir, el mismo archivo, pero sin la línea del usuario y lo guardo
56
# 			en un archivo temporal:
57-
# Y mover el archivo a su sitio (tienes que ser root, igual deberías comprobarlo antes y redireccionar los errores
57+
			more /etc/passwd | grep -v ^${perfilUSER}: > miPasswd
58-
			mv miPasswd /etc/passwd;;
58+
			# Añado la línea al fichero temporal:
59-
# echo " terminaria de hacerlo" ;;
59+
60-
n | N )
60+
			# Muevo el fichero a su lugar 
61-
echo " gracias por todo "
61+
			mv miPasswd /etc/passwd	
62-
exit
62+
#			El read lo único que hace es pausar el programa
63-
esac
63+
			read -n1 -s -p "Usuario $perfilUSER bloqueado, pulse cualquier tecla para continuar" TECLA
64-
# cuando lo leas no seas malo y no te rias mucho de mi ajajajjaja
64+
			echo -e "\n"
65-
# el exit le eh puesto hay pero dudaba si ponerle antes
65+
		fi
66-
# no pongas el examen muy dificil que mira que nivel mas bajo tengo jajaj
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