Sab Sep 06, 2008 5:33 pm
|
 |
ElCidJJ
Perlero Nuevo

|
Registrado: 19 Ago 2008
Mensajes: 8
|
|
| Permisos |
|
|
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í:
| Perl: |
#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++;
}
... |
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. |
|
|
|

Sab Sep 06, 2008 6:17 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4100
Ubicación: Valladolid, España
|
|
|
|
|
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).
Ultima edición por explorer el Sab Sep 06, 2008 7:05 pm, editado 1 vez |
|

Sab Sep 06, 2008 6:58 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4100
Ubicación: Valladolid, España
|
|
|
|
|
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:
| Perl: | #!/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__ |
Un poco de lógica booleana: | Perl: | if ( !$es_legible or !$es_ejecutable ) { | es lo mismo que | Perl: | if ( !($es_legible and $es_ejecutable) ) { |
Más información: perldoc -f stat |
|
Powered by phpBB © 2001, 2005 phpBB Group
|