Como es sabido , hay 3 atributos básicos en Unix para archivos simples: lectura, escritura y ejecutar.
- R , es decir permiso de lectura (read):Si tiene permiso de lectura de un archivo, puede ver su contenido.
- W , es decir permiso de escritura (write):Si tiene permiso de escritura de un archivo, puede modificar el archivo. Puede agregar, sobrescribir o borrar su contenido.
- X, es decir permiso de ejecución (execute):Si el archivo tiene permiso de ejecución, entonces puedes decirle al sistema operativo que lo ejecute como si fuera un programa. Si es un programa llamado “foo” lo podremos ejecutar como cualquier comando.
En este punto es muy interesante saber que un script en Cshell (interprete) necesitara permisos de lectura y ejecución para poderlo lanzar, pero sin embargo un programa compilado en java( por ejemplo en un jar) solo necesitara permisos de lectura .
Para cambiar los permisos tanto en directorios como en ficheros en todas las versiones de unix y variantes usamos el comando chmod (change mode) pudiéndose agregar o remover permisos a uno o mas archivos con + (mas) o – (menos)
La representación octal de chmod es muy sencilla:
- Lectura tiene el valor de 4
- Escritura tiene el valor de 2
- Ejecución tiene el valor de 1
Entonces:
rwx | 7 | Lectura, escritura y ejecución |
rw- | 6 | Lectura, escritura |
r-x | 5 | Lectura y ejecución |
r– | 4 | Lectura |
-wx | 3 | Escritura y ejecución |
-w- | 2 | Escritura |
–x | 1 | Ejecución |
— | 0 | Sin permisos |
Por lo tanto:
chmod u=rwx,g=rwx,o=rwx | chmod 777 |
chmod u=rwx,g=rx,o= | chmod 760 |
chmod u=rw,g=r,o=r | chmod 644 |
chmod u=rw,g=r,o= | chmod 640 |
chmod u=rw,go= | chmod 600 |
chmod u=rwx,go= | chmod 700 |
Es decir para asignar a un fichero o directorio permisos totales usaremos el comando
chmod 777 fichero
Es una tarea habitual que nuestras aplicaciones java necesiten cambiar permisos en el sistema de ficheros no solo windows sino tambien en la maquina donde se ejecutaran ( Solaris, Unix,etc)
La forma tradicional de hacerlo a partir de Jr6 es mediante las primitivas setReadable, setExecutable o setWritable del objeto fichero (file)
Por ejemplo para dar permisos totales (777) sobre un objeto file, esta es la sintaxis a usar:
file.setReadable(true, false);
file.setExecutable(true, false);
file.setWritable(true, false);
Por desgracia aunque podamos compilar código java mediante las primitivas setReadable, setExecutable o setWritable ,por ejemplo para dar permisos totales (777) sobre un objeto file , puede que en la maquina donde se ejecute nos falle porque tenga otra versión de java inferior
Una solución bastante potente que resuelve el problema es usar el metodo untime.getRuntime().exec que nos permite invocar a otro programa java o incluso comandos del sistema operativo ( en nuestro caso chmod 77)
Como ejemplo , os muestro una clase que cambia los permisos a 777 un fichero o directorio que se le pase como parámetro:
public static void permisos777 (final String pathname)
{
Process theProcess = null;
//intentamos cambiar los permisos del fichero recien creado
System.out.println(«Cambiamos permisos 777 a «+pathname);
try
{
theProcess = Runtime.getRuntime().exec(«chmod 777 «+ pathname);
}
catch(IOException e)
{
System.out.println(«Error en el método exec()»);
}
//fin de cambio de permisos
}
Debe estar conectado para enviar un comentario.