Error splicing file:file too large


En efecto en un ordenador con sistema operativo Linux  en cualquier de sus variantes como Ubuntu, Lubuntu ,Fedora, etc.  puede  que copiando archivos  grandes hacia una unidad extraible USB termine dando error con el típico mensaje   “Error splicing file:file too large“.

Afortunadamente entender el motivo  del error es sencillo ,pues generalmente el problema se debe a que el disco de destino (es decir en la unidad extraible en el que desea copiar el archivo) está formateado con el sistema de fichero FAT32 , el cual  tiene un límite de tamaño de archivo de aproximadamente 4GB, por lo que efectivamente Linux cuando intenta copiar sobre una unidad destino formateada en fat32 el so. empieza copiando hasta que llega  aproximadamente a los 4GB , momento en el cual no puede continuar, pues el sistema de ficheros no lo permite, terminando dando error y abortándose la copia.

Curiosamente según el tipo de fichero que sea ,es posible que incluso abortando la copia con el mensaje Error splicing file:file too large , en caso de copias de ficheros de vídeo ( por ejemplo en formato mkv) , a pesar de esto, incluso con el error puedan ser reproducibles parcialmente ( es decir, sin poder reproducirse hasta su totalidad).

Afortunadamente para resolver este problema, la solución es bien sencilla pues bastara en volver a  formatear su disco de destino a EXT3, EXT4 o NTFS.

Mientras que FAT, FAT32 y exFAT se utilizan en memorias USB y tarjetas SD , NTFS es   utilizado sobre todo por discos duros, lo cual no significa  que ntfs no  deba usarse también en unidades extraibles USB: todo lo contrario ,pues por las razones que vamos a ver , ntfs tambien deberia ser  la mejor opción para unidades  extraibles usb.

NTFS (New Technology File System) es el sistema de archivos que Windows utiliza por defecto,  (de hecho windows sólo puede ser instalado en una unidad con este sistema),Su adaptación no es casual pues , ntfs  conlleva  múltiples ventajas:

  • Como hemos comentado su límite de tamaño de archivos es de 16 TB,  ( los volúmenes pueden llegar a tener 264 TB cada uno)
  • Se pueden configurar los permisos de acceso a un archivo (vital para un sistema operativo).
  • Permite cifrar archivos.
  • Permite nombres de archivos largos.
  • Se recupera más fácilmente de errores si el ordenador se cuelga

Vemos pues para soslayar el problema “Error splicing file:file too large”  y la unidad destino esta formateada en otro formato ,  tendremos  que  formatear en NTFS  pues así no habrá problemas  a  la hora de copiar estos ficheros.

 

FORMATEO DESDE WINDOWS

En realidad formatear en NTFS un unidad USB con Windows 10 es muy fácil:

  • Pinche con el botón DERECHO del ratón en el menú Inicio de Windows y elige Explorador de archivos.
  • En la ventana que se abre haga clic a la izquierda en Este equipo.
  • A la derecha verá las unidades de disco duro, particiones, discos o pendrives USB o CD/DVD que tenga tu PC. Seleccione la unidad que quiere formatear pinchando en ella con el botón izquierdo. Luego haz clic encima con el botón DERECHO y elige Formatear. (!IMPORTANTE !: -Es obvio que debe elegir con mucho cuidado la unidad pues formatearla borrará por completo todo lo que haya en ella.
  • Al elegir la opción de formateo se abre su ventana de propiedades.Defina así las opciones siguientes que incluye:
      • Sistema de archivos:Pincha en la lista desplegable de abajo y elija  NTFS.
      • Tamaño de unidad de asignación. Lo normal es que deba mantener el tamaño que te indique por defecto la ventana de formateo.
      • Etiqueta del volumen :Escriba un nombre que describa lo que hay o habrá en ese disco o USB. No es una opción obligatoria pero sí recomendable.
      • Opciones de formato:Desactive la casilla de Formato rápido haciendo clic en ella. Así obligara a que Windows chequee el disco o USB e intente reparar de forma automática posibles errores que tenga por lo que puede ahorrarle problemas futuros o hasta pérdidas de datos. Por cierto mantener el formato rápido acelera el proceso pero se salta la comprobación del disco o USB.
  • Finalmente pulse Iniciar cuando acabes de configurar esas opciones. Confirme con Aceptar el aviso de que se borrará todo lo que haya en esa unidad.
  • El formateo tardara más o menos dependiendo del tamaño de la unidad seleccionada, la velocidad de su PC y si ha elegido o no la opción rápida. Acepte y cierra la ventana cuando termine.

 

FORMATEO DESDE LINUX

Ahora veremos como  soslayar el problema ” Error splicing file:file too large”  y la unidad destino esta formateada en otro formato ,   formateando  en NTFS  desde el propio Linux  para que no haya problemas  a  la hora de copiar ficheros de mas de 4GB

Lo primero que tenemos que tener claro a la hora de formatear una unidad es la ruta en la que se encuentra en el sistema.

Para ver que dispositivo es el que vamos a usar escribimos en Terminal (Abrir Terminal presionando Ctrl + Alt + T) :

Para eso, solo tendremos que escribir en el Terminal el comando:

df

Este comando nos mostrará todos las particiones y discos que tiene actualmente el ordenador conectados al sistema. Como podremos observar, los sistemas basados en Ubuntu 16.04 asignan cómo nombre de partición de la siguiente forma sdaX donde la X es un número de partición, por lo que si tenemos una unidad USB  conectado , el nombre será muy similar a sdaX ( por e ejemplo sdb3).

Una vez hayamos encontrado la memoria USB desde el terminal, tenemos que desmontarlo del sistema para que podamos formatearlo. Para realizar esta tarea tendremos que ejecutar el siguiente comando:

sudo umount /dev/sdb3

Ahora ya lo tenemos preparado para formatear. Por lo que tendremos que escribir la siguiente línea de código en el terminal.

sudo mkfs.vfat -F 32 -n "Nombre_pendrive" /dev/sdb3

Quizá no entiendas nada de lo que hemos puesto en esa parte de código, pero aquí estamos para resolver estas dudas:

  • mkfs.vfat: Es el programa de ejecución de la herramienta del terminal para formatear unidades del sistema.

  • -F 32: Esto le indica al sistema que el formato ha de realizarse con el sistema de archivos de Fat32.

  • -n “Nombre_pendrive”: Este será el nombre que aparecerá cada vez que conectemos el USB al ordenador.

  • /dev/sdb3: Esta tiene que ser la ruta completa donde se sitúa la memoria USB que queremos formatear.

 

Es posible formatear   en diferentes formatos:

  • Formatear USB con Extended File System (Ext) :Este es el sistema de archivos preferido por Linux.

<pre “>

sudo mkfs.ext4 /dev/sdb3

  • Formatear USB con FAT (File Allocation Table) 
 sudo mkfs.vfat /dev/sdb3 
  • Formato de formato USB con NTFS (Sistema de archivos de nueva tecnología)
 sudo mkfs.ntfs /dev/sdb3 

Por ultimo, salimos de Terminal con:

exit

Esta es la salida de la ejecución de estos comandos:

[email protected]:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 214372 0 214372 0% /dev
tmpfs 47028 2948 44080 7% /run
/dev/sda1 38192692 11567744 24655132 32% /
tmpfs 235132 0 235132 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 235132 0 235132 0% /sys/fs/cgroup
tmpfs 47024 12 47012 1% /run/user/1000
/dev/sdb1 15108880 41156 15067724 1% /media/carlos/KINGSTON16G

[email protected]:~$ sudo umount /dev/sdb1
[sudo] password for carlos:

[email protected]:~$ sudo mkfs.ntfs /dev/sdb1
Cluster size has been automatically set to 4096 bytes.
Initializing device with zeroes: 41%100% – Done.
Creating NTFS volume structures.
mkntfs completed successfully. Have a nice day.
[email protected]:~$

 

No esta de mas recordar que debe cambiar la identificación del dispositivo USB en los comandos anteriores o desde el interfaz grafico ,En el  ejemplo en un viejo portatil hp con Lubuntu se ha usado sdb3 , pero no necesariamente sera el mismo identificador que tengan sus unidades.

Como puedes observar, es un proceso muy sencillo pero tiene las complicaciones de saber que es lo que hace cada cosa y cual es la dirección correcta que queremos formatear, ya que si nos equivocamos puede ser fatal para nuestro sistema operativo.

 

 

 

Cómo borrar cualquier aplicación en Android sin root


El proceso de rooteo de un terminal   destinado  a conceder permisos de super-usuario al usuario con el que se accede a  Androud esta destinado a usuarios un poco más avanzados y que saben lo que hacen, porque con una modificación del sistema incorrecta podemos dejar nuestro sistema corrupto pero en efecto una vez que tengamos acceso a root podemos suprimir aquellas aplicaciones que el fabricante haya pre-instalado    así como incluso algunas  propias de aplicaciones de Android   que vengan incluidas con el sistema operativo  y que no necesitamos ( por ejemplo  salvapantallas , animaciones , clientes de correo, etc. )  , lo cual   en muchos  casos nos permitirá  rebajar en gran medida  no  solo  la tasa de ocupación de la memoria interna    sino  también el numero de procesos que tenemos corriendo en nuestro terminal contribuyendo así a mejorar el rendimiento del terminal

Sin embargo como ya adelantábamos, no todo es perfecto al tener privilegios de root   , sobre todo cuando se desconocen los riesgos, pues llegar a este punto  también tiene sus inconvenientes :

  1. Se pierde la garantía: es decir ,realizando el proceso de root en el terminal e instalando las aplicaciones necesarias, se anula la garantía del fabricante ( a no ser  que el fabricante lo comercialice ya rooteado ) . Afortunadamente  no obstante el proceso de rooteo en casi todos los terminales es revertible.  

  2. Se pierden las actualizaciones vía OTA: Al hacer root estamos modificando el sistema, por lo que en los pasos previos a una actualización OTA se detectará que el sistema ha sido modificado, inhabilitando el servicio de actualización oficial. En algunos casos podrá llevar a cabo la actualización, pero lo más probable es que se elimine el root del terminal.

  3. Disminuye la seguridad del sistema: El fin principal de hacer root a un terminal es poder dar permisos de super-usuario ( es decir sin restricciones  )  a determinadas aplicaciones para que realicen cambios en el sistema lo cual puede generar bastantes problemas  cuando desde las propias aplicaciones se tiene acceso a todo el sistema de ficheros  y proceso en cursos sin limitaciones .

  4. Puede crear conflicto con algunas aplicaciones: Como cualquier modificación de software, este proceso puede entrar en conflicto con otras aplicaciones. 

  5. Inestabilidad del sistema: Aunque por norma general este proceso se realiza para mejorar el sistema, si no sabemos bien lo que hacemos podemos provocar mucha inestabilidad en el sistema, haciendo que este disminuya su rendimiento o aumente su uso de batería. Por ejemplo, si no prestamos atención al dar permisos podemos dotar de privilegios a una aplicación para que consulte nuestra ubicación constantemente, cualquier aplicación del tiempo por ejemplo, con lo que esto aumentará el uso de batería y disminuirá el rendimiento al tener constantemente un proceso realizando operaciones en nuestro sistema.

Vemos que rootear un terminal tiene  sus peligros , pero ¿y  si pudiésemos  tener las ventajas del rooteo   pero sin disminuir la seguridad,ni perder la garantía ni las actualizaciones?  Pues en efecto se puede  como a vamos a ver a  continuación  

 

Una de las utilidades  mas interesantes del rooteo es desinstalar aplicaciones que no podemos  quitar desde el propio dessistalador al estar incluidas enla rom del so  bien porque se han incluido por el propio fabricante o bien porque vengan incluidas en el propio SO

Para desistalar estas aplicaciones “especiales ” vamos a necesitar la aplicación App Inspector, disponible gratis en la Google Play Store. Esta app sirve para inspeccionar las propiedades detalladas de todas las aplicaciones instaladas en su dispositivo. Estas propiedades están disponibles desde  PackageManager interno de Android, por lo general muchas de ellas no están expuestas por la interfaz de usuario por defecto del sistema (como el código de la versión, Target SDK versión, etc)  de modo que esta app es util  no solo para los desarrolladores   sino para  usuarios curiosos por igual.

 

Captura de pantalla

 

Al abrirla, entonces podremos ver el nombre de ‘paquete’ de cualquiera de las aplicaciones que estén instaladas en nuestro teléfono inteligente. Es decir, que lo que deberíamos hacer con ella es identificar cuál es el ‘nombre interno’ de la app pre-instalada de la que nos queremos deshacer. Y a partir de aquí podremos continuar.

Captura de pantalla

Esta interesante aplicación   incluso no  da acceso a información del bloatware preinstalado, para que sin necesidad de tener el móvil rooteado podemos  desinstalarlo   ,como vamos a  ver a continuación mediante la utilidad  adb

Si sólo necesita el ADB no hay necesidad de instalar el SDK completo pues es posible  instalar una versión versión mínima de dicha herramienta.

El  ADB es básicamente un software o programa de PC a través del cual se puede darle órdenes especiales al móvil, usando comandos de texto. Estos comandos incluyen órdenes básicas que se usan en el sistema Linux (copiar, pegar, mover, son algunos ejemplos) así como una variedad de comandos específicos para desarrolladores.

Los comandos ADB se pueden mandar al teléfono cuando el mismo está encendido/arrancado, y también cuando se encuentra en modo recovery. La herramienta ADB se puede utilizar para enviar comandos hacia dispositivos con y sin root.

Si tiene instalado Android Studio , este se instala por defecto  junto con el resto del software , pero  tendremos después que invocarlo o donde hayamos almacenado los archivos binarios de ADB, para lo cual pulsaremos Shift y clic derecho en la carpeta correspondiente, para que la consola de comandos se abra exactamente ahí.

Si no tiene el adb instalado , siga estos pasos:

  • Descargue la ultima versión disponible(en este momento la 1.4.3)   para 32 y 64 bits para Windows en el foro  de xda-developes http://forum.xda-developers.com/showthread.php?t=2317790.
  • Ejecute el instalador haciendo doble clic en  minimal_adb_fastboot_v1.4.3_setup.exe
  • Instale normalmente siguiendo las instrucciones.
  • Se instalara: en C:\Program Files (x86)\Minimal ADB and Fastboot
  • Al finalizar se abrirá la ventana a través de la cual podrás enviar los comandos a tu móvil.

 

Ahora tendremos que abrir nuestro ordenador, y con el móvil conectado por el cable USB, abriremos Símbolo del sistema mediante el comando  cmd

 Hecho esto, tendremos que irnos  a  la ruta  C:\Program Files (x86)\Minimal ADB and Fastboot     e   introducir el  comando :

  • adb shell pm disable-user –user 0  <package_to_disable>
  • package_to_disable>  : indica  el nombre de paquete de la aplicación que queremos eliminar de nuestro dispositivo  y que hemos conseguido con la aplicación App Inspector )

En el  siguinte ejemplo  con el citado comadno vamos a desactivar el instalador de facebook :

Ahroa en el caso de que quisiéramos recuperar unlistado de las aplicaciones que hemos deshabilitado siguiendo este método, entonces tendríamos que ejecutar el siguiente comando:

  • adb shell pm list packages -d

Con este  comando  se mostrarán las aplicaciones que han sido deshabilitadas , dpnde como vemos  donde ya se ha incluido el instalador de la app de facebook que desactivamos con el comando del ejemplo anterior:

Para habilitar  una app , el comando que tendríamos que ejecutar es el siguiente, sustituyendo , de nuevo, por el nombre de paquete que corresponda

  • adb shell pm enable

Algunos ejemplos  de  app que se pueden desinstalar o congelar sin peligro:

  • Calculadora: No es necesaria, aunque tal vez si la borra  nos convenga en otro momento  instalar otra  alternativa.
  • Calendario: Igual que la calculadora, esta aplicación no afectará al funcionamiento de tu smartphone.
  • Cámara: La aplicación de Cámara no supondría ningún problema para su terminal para  ser desinstalada, pero   personalmente nunca la eliminaria  puesto que si desistalamos no podremos acceder a la cámara.
  • Correo: Si no le interesa el cliente de correo nativo de Android siempre podemos desinstalarlo y con ello liberarnos memoria interna, Sobre todo tiene sentido cuando usamos otros gestores de correo como gmail o el propio outlook  para este cometido.
  • Fondos Animados: Esta es una de las funciones que, personalmente, veo más inútiles. Mediante estos desinstaladores podremos borrar los fondos animados, aunque no vienen todos en un pack. Algunos de estos fondos son: Burbujas, Agujero Negro, Humo Mágico o Phase Beam. Dependiendo del dispositivo y del fabricante  incluso puede haber muchos más.
  • Galería: si utilizá alguna alternativa, como Quickpic, tal vez no necesita la galería por defecto (o la que os haya instalado el fabricante).
  • Gmail: Por la misma razón  que exponíamos anteriormente con el cliente de correo nativo , si no le interesa el cliente de correo de Google puede desinstalarlo sin problemas.
  • Google+: Esta red social de Google cada  vez tiene menos adeptos desde que Google decidió dejarla  solo para  clientes empresariales.     Sin duda , si no es un lciemte empresarial , lo mejor  es desinstalarla.
  • Google Chrome: Si sois usuarios de otros navegadores, tal vez no queráis tener en vuestro smartphone el navegador de Google.
  • Google Maps: Se puede borrar sin que tenga ningún efecto en el rendimiento del terminal.La aplicación de mapas de Google  está rastreando la ubicación todo el tiempo, para lanzar notificaciones cuando se acerca a un sitio u otro  por lo que su so en primer plano consume muchísima batería, y en segundo plano, si tiene el GPS activado, también
  • Google Play: Google Play y sus diversas aplicaciones (Music, Libros, Kiosco, Películas y Games) se pueden desinstalar sin efectos graves, aunque siempre es recomendable tener una tienda alternativa.
  • StreetView: Si hemos borrado Google Maps esta app no nos servirá para nada puesto que es complementaria.
  • YouTube: La aplicación de YouTube no afecta en nada al sistema.
  • Google Calendar: La aplicación de calendario de Google no deja de sincronizar en segundo plano, y además sabe perfectamente qué estás haciendo, cuándo y dónde lo estás haciendo. La única forma de limitarlo es o bien desactivando la sincronización automática o deshabilitándola / desinstalándola.
  • Google Now:La aplicación de Google es el asistente virtual que, hasta que llegue Google Assistant, hay instalado en todos los terminales. Dicha app no deja de actualizarse en segundo plano, obteniendo información del tráfico, del tiempo, noticias, información de interés… Eso consume muchísima batería sin que nos demos cuenta. Si no usas el desbloqueo por voz o no eres demasiado fan de Google Now, no pierdes nada por desinstalarla de tu terminal.
  • Google Photos:Aunque es una de las apps más útiles que nos podemos encontrar en el panorama Android, la aplicación de sincronización en la nube y galería de Google consume muchísima batería. Cada vez que hacemos una foto o un vídeo y estamos conectados a una red WiFi, Google Fotos se pone a sincronizar en segundo plano y a subir todos los nuevos archivos a la nube. Si no la tenemos bien configurada, puede llegar a consumir mucha batería. Sobre todo , si no se hace uso de su servicio, lo mejor es deshabilitarla o desistalarala

Como enviar correos con adjuntos desde Linux desde linea de comandos


Es frecuente   en el manejo de maquinas Linux  usar muchos scripts en bash o c-shell para automatizar tareas  de una forma sencilla, dado  que al contrario de lo que muchas personas piensan,   shell script (o c-shell)  son  bastantes potentes  a la hora de manipular información .

Ante la cuestión de cómo enviar un correo electrónico desde linea de comandos  o desde un script , incluso  con archivos adjuntos desde una máquina Linux ,    lo primero   que pensamos es usar  la utilidad  mailx la cual mejora en muchos aspectos a la utilidad mail de viejos sistemas

La sintaxis básica para enviar correos electrónicos desde una máquina Linux mediante el comando mailx se muestra a continuación:

mailx -vvv -s   $asunto -r   $from  -S   $smtp     $destino

Como vemos , podemos   observar  varios parámetros en la  línea  anterior;

  • -vvv = Verbosity.
  • -s = especifica el asunto (subject).
  • -r = especificar el origen del Email.
  • -S = especifica el  smtp server.

Y lo ideal es usar variables:

  • $asunto: almacenamos el asunto ( subject ) del correo
  • $from : almacenamos el usuario que envía el correo
  • $smtp : almacenamos el servidor de correo
  • $destino : almacenamos  la dirección de correo destinatario  ( pueden poner sucesivas separando con espacios estas)

El comando anterior se puede complementar añadiendo   un cuerpo al contenido del correo  gracias al comando echo redirigiendo con el pipe (|)  hacia mailx

 echo  $cuerpo  | mailx -vvv -s   $asunto -r   $from  -S   $smtp     $destino

Dónde  $cuerpo  es  una variable que almacena el cuerpo del  email

person using macbook pro on brown wooden desk

Photo by rawpixel.com on Pexels.com

Es importante destacar que podemos obviar el servidor  stmp server si está configurado en la máquina así  como el origen del correo obvio , quedando su uso habitual tal como sigue:

 echo  $cuerpo  | mailx  -s   $asunto  -S     $destino1  $destino2  $destino3

Como se aprecia,   se  añade   un cuerpo al contenido del correo  gracias al comando echo redirigiendo con el pipe (|)  hacia mailx y se usan varias variables:

  • $cuerpo  es  una variable que almacena el cuerpo del  email
  • $asunto: almacenamos el asunto ( subject ) del correo
  • $smtp : almacenamos el servidor de correo
  • $destino1 : almacenamos  la dirección de correo destinatario
  • $destino2 : almacenamos  la dirección de correo destinatario
  • $destino3 : almacenamos  la dirección de correo destinatario

Anexando  adjuntos

Si   la versión de mailx que esta usando está por encima  de 12.x,e puede usar el nuevo interruptor adjunto (-a) en mailx para enviar archivos adjuntos con el correo ,  lo cual es una opción más simple  que el comando uuencode.

Como ejemplo mandar un fichero  a un destinatario, es muy sencillo usando el siguiente comando:

mailx -a $file  -s  $asunto  $destino1

En l comando anterior  se usan estas variables :

  • $asunto: almacenamos el asunto ( subject ) del correo
  • $destino1 : almacenamos  la dirección de correo destinatario
  • $file: ruta directa cal fichero a  anexar

El comando anterior imprimirá una nueva línea en blanco en el cuerpo del mensaje  aunque puede escribir el cuerpo del mensaje  presionar [ctrl] + [d] para enviar, lo cual  adjuntará el archivo al correo electrónico saliente correctamente con el Content-Type y encabezados  apropiados.

Para hacer esto más “scriptable”, puede enviar el mensaje sin un cuerpo con el siguiente comando:

mailx -a $file  -s  $asunto  $destino1< /dev/null

Para enviar correos con un cuerpo de mensaje, reemplace / dev / null en el comando anterior con su archivo de cuerpo de mensaje.

mailx -a $file  -s  $asunto  $destino1<   $cuerpo

Donde $cuerpo  es  una variable que almacena el cuerpo del  email

En esta  versión de mailx, los encabezados que se usan en el correo electrónico saliente cambian de:

From:
Date:
To:
Subject:

A la forma siguiente:

From:
Date:
To:
Subject:
User-Agent:
MIME-Version:
Content-Type:
Content-Transfer-Encoding:

Si la versión de mailx está por debajo de 12.x, puede usarse el comando uuencode para enviar correos con archivos adjuntos.

El comando uuencode  se utiliza para codificar un archivo binario.De forma predeterminada, uuencode tiene entrada desde la entrada estándar y escribe en la salida estándar como se muestra a continuación ( esa es la razón por la que se repite el nombre del fichero) utilizando  por defecto el formato de codificación estándar de UU.

 uuencode  $fichero $fichero | mailx -s $asunto  $destino

Usando el formato anterior ,como se aprecia, se  añade   un cuerpo al contenido del correo  gracias al comando echo redirigiendo con el pipe (|)  hacia mailx  , de forma similar a añadir un cuerpo al  correo ,  pero esta vez estamos anexamos un fichero previamente codificado con uuencode

Las variables usadas:

  • $asunto: almacenamos el asunto ( subject ) del correo
  • $destino : almacenamos  la dirección de correo destinatario
  • $fichero : almacenamos  la ruta completa del fichero a adjuntar
  •  $fichero : almacenamos  la misma  ruta completa del fichero a adjuntar ( en efecto se repite y no es un error)

Por cierto, en caso de necesitar adjuntar varios ficheros, puede usar esta receta:

uuencode $fichero1 $fichero1  >/tmp/out.mail

uuencode $fichero2 $fichero2  >/tmp/out.mail

cat email-body.txt >>/tmp/out.mail

Y ahora ya si podemos  enviar el correo:

mailx -s $asunto  $destino </tmp/out.mail

high angle view of paper against white background

Photo by Pixabay on Pexels.com

Correos con anexos y cuerpo

La sintaxis  para enviar correos electrónicos desde una máquina Linux mediante el comando mailx  puede tener problemas a la hora de incluir  además de anexo un cuerpo  en el mensaje, por lo que podemos usar en su lugar el comando mutt usando la siguiente sintaxis:

echo $body | mutt -s $asunto -a $fichero  $destino1  $destino2 $destino3

Como vemos , podemos   observar  varios parámetros en la  línea  anterior;

  • -s = especifica el asunto (subject).
  • -a = especifica el nombre del fichero con la ruta completa

Y como en  los ejemplos anteriores , lo ideal es usar variables:

  • $asunto: almacenamos el asunto ( subject ) del correo
  • $destino1 : almacenamos  la dirección de correo destinatario
  • $destino2 : almacenamos  la dirección de correo destinatario
  • $destino3 : almacenamos  la dirección de correo destinatario
  • $body : almacenamos el cuerpo del correo

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

}