Sabes soy algo nuevo en linux y pues me gustaría que me ayudaras a realizar un script de shell bash con el cual pueda saber las conexiones de un usuario a mi equipo... Me explico.. Mostrar las sesiones que ese usuario estuvo en mi computadora.. En las ultimas 24 horas se que se emplea el comando last y dicho comando recibe parámetros como el nombre del usuario... Me imagino que seria algo así..
last username if [temp==horactual] then awk '{print $fechas}' Fi Estoy algo enredado en ello...
Perdona que haya tardado en contestar pero estoy liado en el trabajo. A ver si entiendo lo que quieres. ¿Deseas saber los usuarios que se han conectado a una máquina UNIX las últimas 24 Horas? ¿O en el día de hoy solo? Qué datos deseas saber, ¿sólo los nombres de los distintos usuarios o repetidos? El comando last muestra varias columnas, ¿cuál o cuáles quieres? Acláramelo
Hola... Necesito la lista de conexiones que muestra last para un usuario especifico osea que quedaría como $1 el nombre del usuario osea como parámetro, pero específicamente necesito eso la lista con las fecha y las horas, tambn la ultima linea de duración de cada sesión... y pues tambn las ultimas sesiones en el mes para ese usuario con las mismas columnas... Gracias... Te agradezco de antemano por tu ayuda...
Vale! Pues yo creo que es tan sencillo como: last | egrep "^$1" De esta forma, del comando last obtengo aquellas entradas en las que el primer campo (^ significa "al principio de cada línea") es el usuario $1 que es el parámetro posicional 1. ¿Es esto? ¿Necesitas qué esté más elaborado?
Más elaborado! last | egrep "^$1 " | tr -s " " | cut -f 5- -d" " Asi obtenemos una salida tipo: May 8 08:51 - 09:14 (00:22) May 8 08:51 - 10:15 (01:24) Con mes, día, hora inicio - hora fin y duración ante paréntesis para el usuario $1. Si deseas más, dímelo
Hola.. Gracias por tu respuesta... Necesito mostrar las conexiones del usuario en las ultimas 24 horas partiendo desde la hora actual hasta la hora anterior, osea que cuente 24 horas atrás desde la hora actual y pues mostrar la lista de las fechas de esas conexiones... para ese usuario... lo del mes actual lo hice gracias a tu lineas pero esa linea la use para el mes actual y te lo agradezco lo que me ha quedado difícil es lo de las 24 horas no se como hacerlo... te agradecería nuevamente tu ayuda...
¿Quieres decir que si ahora son las 13:30 del 11 de diciembre, quieres las conexiones desde las 13:30 de ayer 10 de diciembre hasta las 13:30 de hoy 11 de diciembre? ¿Exactamente las últimas 24 horas? Si es así (me temo que sí, je je) va a ser más complicado porque en scripts de UNIX manejar fechas y/u horas es complicado ... Contéstame por favor y lo miro. Pero ya te anticipo que va a ser tedioso. Me llevará algo de tiempo ...
Hola... Gracias por tu colaboración... Y te digo que si, es eso lo que se busca; no exactamente de hora a hora sinoo horas aproximadas a esa hora actual... creeo que convirtiendo la fecha actual en un numero entero creeeo se puede lograr ahora con el comando date '+%s' se obtiene un numero entero y creeo que es la fecha actual en segundos... creeo que sabes más de eso que yoo es lo que he podido leer... Nuevamente gracias...! Y disculpa por la incomodidad,...
Aquí lo tienes: #!/usr/bin/ksh clear # Comprobamos el único parámetro posicional: el usuario if [ $# != 1 ] then echo "Se debe introducir un usuario." echo "Uso: $0 USUARIO\n" exit fi USU=`echo $1 | tr '[:upper:]' '[:lower:]'` # Cálculo del día anterior al actual: month=`date | cut -f2 -d" " | cut -c1-3` dia=`date | cut -f3 -d" " | cut -f1 -d","` case $month in Jan) if [ $dia -eq 1 ] then mesant="Dec" diaant="31" else mesant="$month" diaant=`expr $dia - 1` fi ;; Feb) if [ $dia -eq 1 ] then mesant="Jan" diaant="31" else mesant="$month" diaant=`expr $dia - 1` fi ;; Mar) if [ $dia -eq 1 ] then mesant="Feb" diaant="28" else mesant="$month" diaant=`expr $dia - 1` fi ;; Apr) if [ $dia -eq 1 ] then mesant="Mar" diaant="31" else mesant="$month" diaant=`expr $dia - 1` fi ;; May) if [ $dia -eq 1 ] then mesant="Apr" diaant="30" else mesant="$month" diaant=`expr $dia - 1` fi ;; Jun) if [ $dia -eq 1 ] then mesant="May" diaant="31" else mesant="$month" diaant=`expr $dia - 1` fi ;; Jul) if [ $dia -eq 1 ] then mesant="Jun" diaant="30" else mesant="$month" diaant=`expr $dia - 1` fi ;; Aug) if [ $dia -eq 1 ] then mesant="Jul" diaant="31" else mesant="$month" diaant=`expr $dia - 1` fi ;; Sep) if [ $dia -eq 1 ] then mesant="Aug" diaant="31" else mesant="$month" diaant=`expr $dia - 1` fi ;; Oct) if [ $dia -eq 1 ] then mesant="Sep" diaant="30" else mesant="$month" diaant=`expr $dia - 1` fi ;; Nov) if [ $dia -eq 1 ] then mesant="Oct" diaant="31" else mesant="$month" diaant=`expr $dia - 1` fi ;; Dec) if [ $dia -eq 1 ] then mesant="Nov" diaant="30" else mesant="$month" diaant=`expr $dia - 1` fi ;; *) echo "error" exit ;; esac # Ultimos accesos: ayer y hoy. last | egrep "^$USU " | tr -s " " | cut -f 5- -d" " | egrep "^$month $dia |^$mesant $diaant " | sort > $$.1 # Si no existe este fichero, es que no hubo accesos ni ayer ni hoy: if [ ! -s $$.1 ] then echo "El usuario $1 no accedió a este servidor ni ayer ni hoy." rm $$.1 fi cat $$.1 Al final te lo he hecho para hoy y ayer (los dos días completos), no exactamente las últimas 24 horas. Ya te advertí que es tedioso porque UNIX para manejar fechas es bastante malo ... Yo lo he hecho (y probado) para Sun Solaris (lo siento pero no dispongo de Linux). En teoría, debería funcionarte igual de bien que a mi. Si tienes alguna duda o pregunta, házmelo saber por favor. Y dime si te vale esto.
Hola.. Gracias por tu colobaracion me fue de gran ayuda... proobare el script ...... Nuevamente gracias por tu tiempo y me disculpo si te cause molestias...