Ando buscando un scripts de bash que me liste los usuarios que se han conectado a mi maquina, usuarios que poseen un directorio de trabajo pues he leído que se obtinen con el comando last y el nombre del usuario. Pero me gustaría poder ver los usuarios que se han conectado las ultimas 24 horas y del ultimo mes.. Soy algo nuevo en linux y quisiera tu ayuda... Gracias de antemano.. Y disculpa si te molesto con mi inquietud...
1 Respuesta
Respuesta de chernandezba
1
1
chernandezba, 15 años de experiencia en administración de sistemas Linux
La opción -t del comando last no te obtiene los usuarios logueados en un tiempo dado, sino los usuarios logueados, desde el registro del sistema, hasta la fecha indicada. Por ejemplo, si le pides: Last -t 20091140000000 Te mostrará los usuarios que se han logueado, desde que se tiene registro, hasta el 14 de noviembre a las 00 horas, o sea, no te mostrará los que hayan iniciado sesión el 15, 16, etc. Además, este registro se mantiene en el archivo /var/log/wtmp, que es rotado automáticamente por el sistema operatiuvo, y puede ser que en un momento dado te muestre registros desde un mes atrás hasta hoy, o quizá, sólo te muestre registros desde hace dos días hasta el día actual. Para ver registros anteriores, debes examinar los archivos /var/log/wtmp.1 , .2 ,etc Lo que pides no es muy fácil, creo que lo mejor sería, obtener todos los registros disponibles (ejecutando diversos comandos last con el parámetro -f) y luego, mediante algún tipo de grep y un contador, mostrar registros del día anterior, de anteayer, etc. Ese contador puede ser de tipo numérico, que exprese un día determinado según los segundos transcurridos desde 1970 (la salida que retorne un comando "date +%s"), e ir restando el número de segundos de cada día (2678400) para obtener el día anterior. Para obtener el día determinado según el contador de segundos puedes ejecutar el comando date así: date -d "@${CONTADOR}" Donde ${CONTADOR} es el contador. Realizando unos cuantos grep en la salida del comando date, con esa fecha calculada, puedes obtener exactamente lo que pides
Sabes... te doy las gracias por tus recomendaciones, pues me gustaría que si posees algún ejemplo que afiance lo de mostrar la información desde la fecha actual a la anterior osea al día de ayer... pues no soy un experto en shell scripts y pues me gustaría que me ayudaras un poquito más... gracas nuevamente de todas formas tratare de implementar lo que me dices... aunque pues estuve probando el comando last con los parámetros que me dices y pues no me muestra la información descrita.. sin embargo investigare parámetros para este comando...
Te copio el script que me pides: #!/bin/bash export LANG=C #Asegurar salida de todos los comandos en ingles #Funcion para obtener un usuario logueado desde N dias hasta hoy #Parametro entrada: #1= Numero de dias a mostrar hasta hoy #2= Usuario obtener_usuarios() { DIAS=$1 USUARIO=$2 #Obtener fecha actual en segundos HOY=`date +%s` echo "USUARIO $USUARIO" while [ $DIAS -ge 0 ]; do echo DIA=`date -d "@$HOY"` #Obtener fecha mostrada en el comando last DIA_SEMANA=`date -d "@$HOY" +%a` MES=`date -d "@$HOY" +%b` DIA=`date -d "@$HOY" +%e` DIA_BUSCAR="$DIA_SEMANA $MES $DIA" #Obtener salida total del comando last i filtrar por fecha calculada last|grep -i "$DIA_BUSCAR"|grep -i "$USUARIO" #Seguir para el dia anterior DIAS=$(($DIAS-1)) HOY=$(($HOY-86400)) done } #Obtener usuarios con home directory desde /home USUARIOS=`getent passwd|grep "/home"|cut -d ':' -f1` echo "Usuarios entre ayer y hoy" for i in $USUARIOS; do obtener_usuarios 1 $i done echo echo "Usuarios desde el mes anterior hasta hoy" for i in $USUARIOS; do obtener_usuarios 31 $i Done
Sabes aun no lo he podido probar porque en el pc donde estoy no poseo linux, sin embargo lo haré en el transcurso del día... Te agradezco enteramente este favor... Dios .. espero funcione...! Gracias ... gracias muchas gracias... Disculpa la molestia... y pues si tengo alguna duda espero pues me la resuelvas... Gracias nuevamente...