Buscar aquí

20 noviembre 2017

cómo compartir carpetas entre máquinas linux

Una duda bastante habitual, es cómo compartir archivos entre dos máquinas linux, y en realidad, es algo que se hace desde hace mucho tiempo y no es complicado.  Habitualmente, utilizamos quizás un cliente sftp, o rsync o quizás scp, etc.  Pero una mejor manera es utilizando NFS un antiguo protocolo en los *NIX de muy buena performance y fácil configuración, que nos permite compartir los filesystems, dando variados ajustes de seguridad de ser necesario.


Primero, hay que levantar algunos servicios como nfs, una vez levantado, hay que agregar al firewall el puerto del servicio que es el 2049.

Después se modifica el archivo /etc/exports o se agrega un archivo al /etc/exports.d, en mi caso lo agregué al /etc/exports:

~]# cat /etc/exports
/home/nfs 10.11.13.0/24(rw,sync)

La idea aquí es compartir el directorio nfs en la carpeta /home, a todos los equipos que estén en la red 10.11.13.X, y que tengan permiso de lectura y escritura.  Además, el sync nos indica que los cambios deben ser completados en el servidor NFS antes de informar el éxito el cliente, esto es para asegurarse de que no hay problemas.
 

Una vez lista la modificación, se ejecuta

exportfs -a

y con esto queda disponible el directorio compartido.


Desde otra máquina con linux, para montar el directorio compartido, se debe tener disponible algún punto de montaje,  habitualmente es bueno dejarlos bajo /mnt, y se debiera crear una nueva carpeta:

mkdir /mnt/nfs_compartido

Finalmente, podrán montar este directorio compartido con un comando como:

mount -t nfs nombre_servidor_nfs:/home/nfs /mnt/nfs_compartido

hay un detalle importante acá en la configuración, es que si se agrega en el archivo de configuración /etc/exports el parámetro fsid=0 por ejemplo (he visto varias páginas que usan esta opción), se tendrá que montar en la máquina cliente utilizando

mount -t nfs nombre_servidor_nfs:/ /mnt/nfs_compartido

pero por simpleza y saber que se está montando, es mejor no usar el fsid.

06 noviembre 2017

Cómo reemplazar solo una parte de los textos

Habitualmente, cuando se necesita reemplazar una parte de texto pequeña, no toda una palabra, por ejemplo, en una línea se tiene la hora con formato:

HH:MI:SS

por ejemplo:
cualquier texto, 23:59:57
otro texto cualquiera, 23:58:04
un texto mas cualquiera, 23:57:39
el texto cualquiera, 23:56:37

si interesara por ejemplo dejar solo lo correspondiente a la hora, algo así
cualquier texto, 23:00:00
otro texto cualquiera, 23:00:00
un texto mas cualquiera, 23:00:00
el texto cualquiera, 23:00:00

una forma util es usando sed:

sed 's/\(.*\)\([0-9][0-9]\):[0-9][0-9]:[0-9][0-9]/\1\2:00:00/'

traduciendo esto, en la parte del patrón a buscar:
1-  \(.*\) esto hace match con cualquier cosa
2- \([0-9][0-9]\) esto hace match, con un patrón que viene con dos números entre 0 y 9 cada uno.
3- :[0-9][0-9] esto hace match, con un patrón que viene un símbolo de dos puntos (:) seguido de dos números, entre 0 y 9 cada uno.
4- :[0-9][0-9] esto hace match, con un patrón que viene un símbolo de dos puntos (:) seguido de dos números, entre 0 y 9 cada uno.

Entonces el patrón buscaría:

Cualquier cosa, seguida de dos números  entre 0 y 9 cada uno, seguido del símbolo de dos puntos, seguido de dos números entre 0 y 9, seguido del símbolo de dos puntos, seguido de dos números entre 0 y 9.

El truco aquí es que en 1 y 2, el patrón está encerrado entre \( y \), esto indica que lo que haga match en ese patrón, será posible utilizarlo después.  Por ello, después en la segunda parte del sed, donde se indica con que se reemplazará, aparecen los \1 y \2, que indica lo obtenido en 1 y 2.