• Publicidad

Contar número de usuarios en el sistema

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Contar número de usuarios en el sistema

Notapor haganex » 2012-08-25 08:39 @402

Buenos días.

Recurro a ustedes porque estoy intentado hacer un contador el cual me muestre cuántos usuarios tienen bash por defecto. El problema es que siempre me retorna 0. No entiendo por qué. Y el segundo código es para contar todos los usuarios que se encuentran alojados en passwd.

Soy nuevo en programación y leyendo tutoriales hice el código que pongo más abajo.

Espero me puedan ayudar.

¡¡ Muchas gracias !!


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #cuanta cuántos usuarios tiene bash por defecto
  2. #!/usr/bin/perl
  3. open(count, "/etc/passwd") or die "No existe el fichero";
  4. $contador=0;
  5. while ($lin=<count>)
  6. {
  7.         chomp $lin;
  8.         @cuentas = split(/:/,$lin);
  9.         if ($cuentas[7] eq "bin/bash")
  10.         {
  11.                 $contador++;
  12.         }
  13. }
  14.         print "/bin/bash:$contador\n";
  15. close F1;
  16.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #contador de usuarios en el sistema
  2. #!/usr/bin/perl
  3. open(F1, "/etc/passwd") or die "No existe el fichero";
  4. $contador=0;
  5. while ($linea=<F1>)
  6. {
  7.         for($i = 0; $i < scalar @x; $i++)
  8.         {
  9.                 $contador++;
  10.         }
  11. }
  12.         print "$contador \n";
  13. close F1;
  14.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
haganex
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2012-08-25 08:15 @385

Publicidad

Re: ayuda a resolver problema

Notapor creating021 » 2012-08-25 17:31 @771

Cuando se abre un fichero y la función open retorna un error, no quiere decir necesariamente que el fichero no existe (puede ser que tiene permisos de lectura).
Es mejor imprimir el error que da el sistema:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. open FL, "fichero" or die "No se pudo abrir el fichero: $!\n";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


La comparación que hace en la línea 9 del primer código está mala porque la ruta del ejecutable es "/bin/bash" (te ha faltado el "/" al principio).

El segundo código no funciona porque @x no existe.

Te recomiendo usar el pragma strict para que perl te muestre los errores que tienes.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. # código
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: Contar número de usuarios en el sistema

Notapor haganex » 2012-08-26 08:49 @409

creating021: gracias por contestar el mensaje. Hice el cambio de poner el / antes de bin pero aun así me sigue diciendo 0 al momento de retornar la cantidad de usuarios que tiene bash por defecto. También usé el strict y no me envía ningún error al de compilación, solamente errores de referencia hacia lo que tiene dentro del programa.

¡ Espero me puedan ayudar !

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #use strict;
  3.  
  4. open(count, "/etc/passwd") or die "No se pudo abrir el fichero: $!\n";
  5. $contador=0;
  6. while ($lin=<count>)
  7. {
  8.         chomp $lin;
  9.         @cuentas = split(/:/,$lin);
  10.         if ($cuentas[7] eq "/bin/bash")
  11.         {
  12.                 $contador++;
  13.         }
  14. }
  15.  
  16. print "/bin/bash:$contador\n";
  17. close count;
  18.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
haganex
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2012-08-25 08:15 @385

Re: Contar número de usuarios en el sistema

Notapor creating021 » 2012-08-26 09:50 @451

Viendo los campos del fichero passwd, noto que @cuentas debe de tener 7 campos y no 8.
Recuerda que en los vectores y matrices el primer elemento está en la posición cero y el último elemento es n-1, siendo n el número de elementos.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. if ($cuentas[6] eq "/bin/bash") {#...}
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Algo más, hay que tener en cuenta que no todas las personas usan bash.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: Contar número de usuarios en el sistema

Notapor explorer » 2012-08-26 11:43 @530

creating021 escribiste:Algo más, hay que tener en cuenta que no todas las personas usan bash.
Incluso hay no-personas que sí usan bash:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ fgrep /bin/bash /etc/passwd
  2. at:x:25:25:Batch jobs daemon:/var/spool/atjobs:/bin/bash
  3. bin:x:1:1:bin:/bin:/bin/bash
  4. daemon:x:2:2:Daemon:/sbin:/bin/bash
  5. ftp:x:40:49:FTP account:/srv/ftp:/bin/bash
  6. games:x:12:100:Games account:/var/games:/bin/bash
  7. lp:x:4:7:Printing daemon:/var/spool/lpd:/bin/bash
  8. man:x:13:62:Manual pages viewer:/var/cache/man:/bin/bash
  9. news:x:9:13:News system:/etc/news:/bin/bash
  10. nobody:x:65534:65533:nobody:/var/lib/nobody:/bin/bash
  11. root:x:0:0:root:/root:/bin/bash
  12. uucp:x:10:14:Unix-to-Unix CoPy system:/etc/uucp:/bin/bash
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Contar número de usuarios en el sistema

Notapor reLlene » 2012-08-27 08:55 @413

Hecha la aclaración de explorer, lo que puedes hacer, haganex, es aplicar otro filtro no solamente en $cuentas[6] como te ha dicho el compañero creating021 sino también en $cuentas[5] haciendo que dicho campo se trate de una ruta de usuario, como lo son: '/home/usuario01' o '/root'...
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: Contar número de usuarios en el sistema

Notapor creating021 » 2012-08-27 12:14 @551

Una forma mejor sería ver en /etc/login.defs el valor de UID_MIN y UID_MAX, y ver si $cuentas[2] está en el rango.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: Contar número de usuarios en el sistema

Notapor explorer » 2012-08-27 12:42 @571

haganex no ha pedido distinguir entre los usuarios humanos y los no-humanos :)

De hecho, los no-humanos hacen labores muy importantes, así que quizás le interese poder controlarlos también :)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Contar número de usuarios en el sistema

Notapor haganex » 2012-08-27 22:27 @977

Chicos: muchas gracias por la ayuda. Ya logré solucionar el problema.
haganex
Perlero nuevo
Perlero nuevo
 
Mensajes: 12
Registrado: 2012-08-25 08:15 @385


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados