Cambiar permisos en Solaris desde java


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

}

Problema de actividad al 100% en Windows 10


Puede    que de repente su ordenador con Windows 10   haya dejado de responder  en un  tiempo razonable a cualquier petición  que se  haga  llegando incluso  a demorarse alrededor de  varios minutos el simple hecho abrir cualquier menú contextual .

Lo extraño es que tras ese comportamiento anómalo  tras un rato  comience a  responder de  forma rápida ( normal)  para  luego volverse a repetir el ciclo de demoras y así sucesivamente

Puede que ante un comportamiento tan anormal   haya tenido la  tentación de reinstalar W10  tal y como tratamos en este post , pero   para ese problema probablemente no   mejorara el comportamiento. Hay personas  que  incluso  optan  por cambiar  el disco o  formatear la unidad  de sistema con el consiguiente  trabajo posterior  de instalación  de todo  el sw original   y configuración,  pero si no quiere hacer todo ese trabajo,  todavía  hay algunas  posibilidades  que podemos explorar ;

 

PASOS PREVIOS

Antes de acudir a acciones  mas contundente   lo primero es actualizar  todos los controladores   y sobre todo hacer una análisis de todo el equipo con Windows Defender.

Asimismo vaciar la papelera de reciclaje o eliminar archivos temporales,puede ayudar ( incluso  hay personas que optan por probar a desactivar el archivo de paginación) .
Si el resultado no ha dado ningún cambio entonces siga los siguientes  pasos:

 

PASO 1: Monitorización de la actividad del disco

Un primer análisis  consistirá en   ir al administrador de  tareas ( control+alt +del )   y habilitar si no lo tiene el apartado de actividad de disco

Si padece de este problema, probablemente en el administrador es fácil   que incluso sin uso ,   el porcentaje de  uso del disco sea permanentemente del 100% , señal inequívoca que  nos explica que el porque de la demora sin duda se debe a una excesiva actividad en el disco principal

Cuando ejecute el administrador de tareas, puede que vea que algunos de estos ejecutables: System.exe, Antimalware Service Executable , Host  del servicio , o Telemetria  y experiencias de usuario conectado)   los cuales  aparentemente hacen este gran gasto de uso de  disco.
IMG_20170528_181300[1].jpg

Una vía  para solucionar sin duda sobre todo es  probar desactivar algunas de esas tareas que están generando esa actividad de disco anormal ( en el ejemplo podria ser  Telemetria  y experiencias de usuario conectado),   quitar  algunas tareas programadas etc,

 

Para deshabilitar  un servicio no critico como por ejemplo  el servicio «Telemetria  y experiencias de usuario conectado», haga lo siguiente:

  1. Oprime las teclas «Windows» + «R» y en Ejecutar, escribe services.msc y haz clic en Aceptar.
  2. En la lista de servicios, haz clic con el botón secundario del ratón en Telemetria  y experiencias de usuario conectado y a continuación, haz clic en Propiedades.
  3. En la lista Tipo de inicio, selecciona Deshabilitado y después haz clic en Aplicar
  4. Seguido, en la pestaña de Recuperación y en las opciones de Primer, Segundo y siguientes errores, Selecciona No realizar ninguna acción.
  5. Luego, haz clic en Aplicar y por último en Reiniciar.

 

PASO 2:Desactivamos la Optimización programada

Si no hemos resuelto el problema en el paso anterior, seguiremos la siguiente secuencia:

  •   Panel de Control–>
  •          Sistema  y seguridad –>
  •                        Herramientas Administrativas –>
  •                                       Desfragmentar y optimizar unidades

Desactivamos la Optimización programada  de todas las unidades  pinchando en  la parte inferior   de Optimizacion Programada  y deschequeando  el check   «Ejecución programada(recomendado)»

Asimismo nos iremos a las unidades  y pincharemos en cada una en el apartado  «Optimizar»  no cerrando    la ventana de  Optimizar unidades hasta que no haya concluido el proceso para todas la unidades

disocs

En ese momento pude que crea haber solucionado el problema desactivando la optimización automática de su  mi disco por unas horas, hasta que nuevamente retome  el mismo problema, quizás  oscilando entre 98 – 100% e  impidiendo trabajar con  algo de fluidez, si es así puede pasar el siguiente paso .

PASO 3: Deshabilitar  Servicio de transferencia inteligente de segundo plano)

El  Servicio de transferencia inteligente en segundo plano (BITS) transfiere de forma asincrónica archivos que están en primer plano o en segundo plano, controlando el flujo de las transferencias para preservar la capacidad de respuesta de otras aplicaciones de red y reanuda automáticamente las transferencias de archivos si se interrumpe una sesión de transferencia, por ejemplo debido a la desconexión de la red o al reinicio del equipo.

BITS proporciona un nivel de prioridad de primer plano y tres niveles de prioridad de segundo plano que se utilizan para clasificar por orden de prioridad los trabajos de transferencia. Los trabajos con prioridad superior prevalecen sobre los trabajos con prioridad inferior. Los trabajos con el mismo nivel de prioridad comparten el período de transferencia, lo que evita que un trabajo grande bloquee los trabajos pequeños en la cola de transferencias. Los trabajos con prioridad inferior no reciben tiempo de transferencia hasta que todos los trabajos con prioridad superior se han completado o están en estado de error.

BITS utiliza BranchCache de Windows para el almacenamiento en caché del mismo nivel.

Como vemos es un servicio que ayuda al SO a mantenerlo actualizado, pero dado que esta trabajando en segundo plano haciendo un uso alto del disco del sistema podemos probar  de desactivarlo    y comprobar si mejora el rendimiento

Antes de empezar, tenga en cuenta que este servicio ayuda los procesos en segundo plano, por lo que el iniciar, apagar, reiniciar o alguna acción en su equipo, puede tardar un poco.

 

Para deshabilitar el servicio, haga lo siguiente:

  1. Oprima las teclas «Windows» + «R» y en Ejecutar, escribe services.msc y haz clic en Aceptar.
  2. En la lista de servicios, haz clic con el botón secundario del ratón en Servicio de transferencias inteligente en segundo plano (BITTS) y a continuación, haz clic en Propiedades.
  3. En la lista Tipo de inicio, selecciona Deshabilitado y después haz clic en Aplicar.Imagen
  4. Seguido, en la pestaña de Recuperación y en las opciones de Primer, Segundo y siguientes errores, Selecciona No realizar ninguna acción.
    Imagen
  5. Luego, haz clic en Aplicar y por último en Reiniciar.

Quite la selección del servicio (Servicio de transferencia inteligente de segundo plano) y le dan aceptar y luego a reiniciar mas tarde.

 

 

PASO 4: Optimizar unidades

Por ultimo seguiremos la siguiente secuencia:

  •   Panel de Control–>
  •          Sistema  y seguridad –>
  •                        Herramientas Administrativas –>
  •                                       Desfragmentar y optimizar unidades

En esta opción seleccionamos la partición donde esta instalado el sistema operativo en ( lo mas normal es que sea al Disco Local C) y   luego clic en optimizar

Este proceso desfragmentara y optimizara el sistema   durando aproximadamente 1 hora  o menos en función de su sistema  y del tamaño del disco

Una vez terminado el proceso reiniciar y debería  mejorar  el rendimiento del Disco considerablemente.

 

Si lo anterior no funciona es posible que una descarga e instalación de actualizaciones esté consumiendo el 100% del disco duro, lo cual podríamos resolverlo buscando desde Servicios ,es decir  :

  1. Oprima las teclas «Windows» + «R» y en Ejecutar, escribe services.msc y haz clic en Aceptar.
  2. En la lista de servicios, haz clic con el botón secundario del ratón en Windows Update y a continuación, haz clic en Propiedades.
  3. En la lista Tipo de inicio, selecciona Manual y después haz clic en Aplicar.
  4. Seguido, en la pestaña de Recuperación y en las opciones de Primer, Segundo y siguientes errores, Selecciona No realizar ninguna acción.

 

Este proceso  podemos hacerlo también con otros servicios como Windows Search  o Superftech para evitar que ocurran este tipo de problemas.

Por ultimo  buscando Windows Update en Cortana podemos ver si hay una descarga de actualización en proceso, además de seleccionar horas del ordenador en desuso para que las actualizaciones y reinicios no se produzcan mientras estemos trabajando con el ordenador.