elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Ordenar usuarios en Bash [Solucionado]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ordenar usuarios en Bash [Solucionado]  (Leído 3,255 veces)
Flakito81


Desconectado Desconectado

Mensajes: 519



Ver Perfil
Ordenar usuarios en Bash [Solucionado]
« en: 5 Abril 2010, 02:37 am »

Hola gente!!

Mi pregunta es simple, pero que soy incapaz de dar con la solución:

¿Cómo puedo ordenar los usuarios logeados por los procesos que tiene abierto?

Hasta ahora para conseguir los usuarios hago algo tal que:
Código
  1. who | cut -d ' ' -f1 | sort -u
  2.  
Guardo la salida en un array y con un for lanzo un ps -Af (seleccionado las columnas que me interesan) le pongo el grep $i y finalmente hago otro ps similar al anterior y cuento las lineas (wc -l) para saber el numero de procesos.
La salida me viene quedando:
USER  STIME PROCESOS

(Donde el usuario solo se muestra una vez (uso el head para ello))

El tema es que no puedo ordenar esas filas por numero de procesos porque pertenecen a dos comandos diferentes y no lo puedo hacer en uno (al menos no se como) xq si uso el wc -l solo me va a sacar el numero de procesos y ninguna otra informacion.
La unica solucion que se me ocurre es que los usuarios ya esten ordenados en el array por el numero de procesos, pero no sé como.

Espero que me podais ayudar!!

Gracias!


« Última modificación: 6 Abril 2010, 02:04 am por Leo Gutiérrez. » En línea

leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: Ordenar usuarios en Bash
« Respuesta #1 en: 5 Abril 2010, 04:50 am »

Hola, Flakito81, no te he entendido muy bien, pero bueno, veamos.

El comando:
Código
  1. ps -u USUARIO

Te podría facilitar las cosas, ahora, si lo trabajas con "wc" o "awk":

Código
  1. leo@lein:~/Escritorio$ ps -u leo | wc -l
  2. 54
  3. leo@lein:~/Escritorio$ ps -u root | wc -l
  4. 64
  5. leo@lein:~/Escritorio$
  6.  

Yo en mi caso no te puedo ayudar mucho porque solo tengo un usuario en mi máquina:

Código
  1. leo@lein:~/Escritorio$ who | awk '{print$1}' | uniq | wc -l
  2. 1
  3. leo@lein:~/Escritorio$
  4.  

O incluso podrías usar esto:

Código
  1. leo@lein:~/Escritorio$ ps aux -u leo | grep -ci "leo"
  2. 53
  3. leo@lein:~/Escritorio$ ps aux -u root | grep -ci "root"
  4. 66
  5. leo@lein:~/Escritorio$
  6.  

Usando -c para las ocurrencias.

O incluso podrías hacer esto (no probado con más de 1 usuario):

Código
  1. for usuario in $(who | awk '{print $1}' | uniq); do echo -e "$usuario : `ps -u $usuario | wc -l`"; done
  2.  
Código
  1. for usuario in $(who | awk '{print $1}' | uniq); do echo -e "$usuario : `ps -u $usuario | wc -l`"; done | sort

Solo tengo un usuario en mi máquina, así que no puedo ayudarte mucho, pero publica tus avances y el código para ver que se puede hacer.


« Última modificación: 5 Abril 2010, 05:14 am por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Flakito81


Desconectado Desconectado

Mensajes: 519



Ver Perfil
Re: Ordenar usuarios en Bash
« Respuesta #2 en: 6 Abril 2010, 01:51 am »

Para empezar te quiero dar las gracias Leo no sólo por responder sino porque me ayudaste bastante.

Recien estoy comenzando a hacer scripts en bash muy simples y no domino todos los comandos, de hecho el awk lo había visto escrito por ahí  pero no sabía para que era.

En cuanto a que no entendias no me extraña porque leyendo ahora mi propio post me cuesta entenderme a mi mismo xDD. Pero te explico lo que quería hacer, e hice:
 La idea era crear un script que listara el numero de procesos de cada usuario (conectados a un servidor), junto con su login y con stime mas antiguo de sus procesos (todo ello ordenado en orden descendente por numero de procesos) . Opcionalmente quería ponerle dos opciones tan sencillas como inutiles:
1- informar al usuario que ha superado el número de procesos asignados
2- matarle procesos hasta que esté dentro del limite

Obviamente sé que lo segundo es inviable porque se pueden matar procesos importantes. Y lo primero un poco también porque si tiene desactivado los mensajes el write no funciona.


Ese era todo mi problema, el script lo tengo hecho y lo postearé el viernes probablemente.

Lo dicho muchisimas gracias por la ayuda.

PD: Ya se que existe el comando ulimit 
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SOLUCIONADO] Problema con Bash
Scripting
javier1212 2 3,214 Último mensaje 4 Enero 2011, 07:46 am
por leogtz
Menu de bash (solucionado)
Scripting
Norlak 2 3,376 Último mensaje 27 Enero 2011, 01:57 am
por leogtz
(SOLUCIONADO)¿Con que software puedo ordenar frases de un texto?
Software
SuperDraco 7 3,550 Último mensaje 3 Mayo 2011, 13:41 pm
por Shadow
[SOLUCIONADO][PYTHON] Como ordenar(sort) un diccionario?
Scripting
Jirp96 5 15,162 Último mensaje 10 Junio 2016, 17:35 pm
por cerototal
[BASH] Ordenar contactos sin utilizar sort
Scripting
zenok 2 1,358 Último mensaje 28 Noviembre 2014, 12:49 pm
por zenok
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines