• Publicidad

Permisos

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

Permisos

Notapor ElCidJJ » 2008-09-06 18:33 @814

Hola, aquí me encuentro atrapado en este inmenso y gran mundo del perl; y no se si es por sobredosis de trabajo o por saturación de mis neuronas, que tengo una nueva duda que plantearles:

Me gustaría saber como puedo comprobar los permisos de una serie de archivos. En este caso necesito saber si unos determinados archivos no tienen los permisos de lectura y ejecución para todos los usuarios. Yo lo he intentado así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#Recorro el contenido de un fichero cuyo último campo es la dirección del fichero que quiero comprobar
 
#Comprobamos que las tareas tengan los permisos de lectura, ejecución y no sean un directorio

while ($linea=<MANEJADOR_FICHERO>)
                {
                        @identificador1=split / /,$linea;


#$identificador1[6] Contiene la direccion relativa de los ficheros a comprobar
#                       print("$identificador1[6]\n");

                        if (!(-r './'.$identificador1[6] and -x './'.$identificador1[6] and -d './'.$identificador1[6]))
                        {
#GUardo en un vector la linea donde está ese fichero que no tiene los permisos necesarios
                                $vector_de_permisos[$posicion_permisos] = $identificador1[0];
                                $bandera_permisos=1;
                                $posicion_permisos++;  
                        }

...
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


No está bien puesto que me dicen que todos los ficheros no tienen los permisos y comprobado están que los tienen todos, excepto uno.

A ver si me podéis ayudar con esto, que no sé cómo ponerlo bien. Muchísimas Gracias.
ElCidJJ
Perlero nuevo
Perlero nuevo
 
Mensajes: 10
Registrado: 2008-08-19 07:38 @360

Publicidad

Notapor creating021 » 2008-09-06 18:49 @825

Cambia ésta parte del código:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if (!(-r './'.$identificador1[6] and -x './'.$identificador1[6] and -d './'.$identificador1[6]))
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Por ésta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( not ( -r -x -d "./$identificador1[6]" ) ) { ... }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


No le he probado pero en teoría funciona.

PD: Te recomiendo usar perltidy...
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

Notapor explorer » 2008-09-06 19:17 @845

Pues sí, creating021, esa última solución funciona, pero solo si estás usando el Perl 5.10: Stacked filetest operators

Por otra parte, no resuelve el problema planteado por ElCidJJ, ya que las comprobaciones de fichero -r, -x y -d se refieren a los permisos del usuario, no a los del resto de usuarios (los otros).
Última edición por explorer el 2008-09-06 20:05 @878, editado 1 vez en total
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2008-09-06 19:58 @873

Para obtener los permisos del fichero, hay que usar el tercer elemento devuelto por la función stat().

El siguiente código puede resolver el problema:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;

use Fcntl ':mode';

my $fichero  = "salida.dat";
my $permisos = (stat $fichero)[2];
my $es_legible    = $permisos & S_IROTH;
my $es_ejecutable = $permisos & S_IXOTH;

#printf "Los permisos son %04o\n", $permisos & 07777;
#print "[$es_legible,$es_ejecutable]\n";

if ( !$es_legible or !$es_ejecutable ) {
    print "No es legible o no es ejecutable\n";
}

__END__
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Un poco de lógica booleana:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( !$es_legible or !$es_ejecutable ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
es lo mismo que
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
if ( !($es_legible and $es_ejecutable) ) {
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Más información: perldoc -f stat
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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

cron