Blog Tinux Net

Shells commands (bash, zash)

Comandos que no son sencillo de recordar o son utiles para la programacion

  • Publicado en

    Sí, existen varias herramientas en Linux que permiten hacer copias de seguridad al estilo de Git, donde se realiza una copia completa inicial y luego se gestionan cambios incrementales (diferenciales). Aquí te presento algunas opciones populares:

    1. BorgBackup

    • Descripción: BorgBackup es una herramienta de copia de seguridad que permite realizar copias completas iniciales y luego gestionar copias incrementales. Además, soporta compresión y encriptación.
    • Características:
      • Deduplicación de datos.
      • Compresión y encriptación.
      • Soporte para copias incrementales.
      • Fácil de usar y configurar.
    • Instalación: bash sudo apt-get install borgbackup # En Debian/Ubuntu sudo dnf install borgbackup # En Fedora
    • Uso básico: bash borg init /ruta/al/repositorio borg create /ruta/al/repositorio::nombre_de_la_copia /ruta/a/respaldar

    2. Restic

    • Descripción: Restic es una herramienta moderna de copias de seguridad que también utiliza deduplicación y soporta copias incrementales. Es fácil de usar y tiene soporte para varios backends (local, SFTP, AWS S3, etc.).
    • Características:
      • Deduplicación.
      • Encriptación.
      • Soporte para múltiples backends.
      • Copias incrementales.
    • Instalación: bash sudo apt-get install restic # En Debian/Ubuntu sudo dnf install restic # En Fedora
    • Uso básico: bash restic init --repo /ruta/al/repositorio restic backup --repo /ruta/al/repositorio /ruta/a/respaldar

    3. rsnapshot

    • Descripción: rsnapshot es una herramienta de copias de seguridad basada en rsync que permite realizar copias completas e incrementales. Es muy eficiente en el uso del espacio en disco.
    • Características:
      • Basado en rsync.
      • Copias completas e incrementales.
      • Fácil de configurar.
    • Instalación: bash sudo apt-get install rsnapshot # En Debian/Ubuntu sudo dnf install rsnapshot # En Fedora
    • Uso básico: bash rsnapshot configtest # Verificar la configuración rsnapshot hourly # Realizar una copia de seguridad

    4. Timeshift

    • Descripción: Timeshift es una herramienta diseñada principalmente para realizar copias de seguridad del sistema, pero también puede ser utilizada para respaldar directorios específicos. Utiliza rsync y soporta copias incrementales.
    • Características:
      • Enfocado en copias de seguridad del sistema.
      • Soporte para copias incrementales.
      • Interfaz gráfica y de línea de comandos.
    • Instalación: bash sudo apt-get install timeshift # En Debian/Ubuntu sudo dnf install timeshift # En Fedora
    • Uso básico: bash timeshift --create --comments "Copia inicial" --tags D

    5. Duplicati

    • Descripción: Duplicati es una herramienta de copias de seguridad que soporta copias incrementales y encriptación. Puede respaldar a varios destinos, incluyendo servicios en la nube.
    • Características:
      • Soporte para copias incrementales.
      • Encriptación.
      • Interfaz gráfica y de línea de comandos.
    • Instalación: bash sudo apt-get install duplicati # En Debian/Ubuntu sudo dnf install duplicati # En Fedora
    • Uso básico: bash duplicati-cli backup /ruta/a/respaldar

    6. ZBackup

    • Descripción: ZBackup es una herramienta de copias de seguridad basada en deduplicación que permite realizar copias completas e incrementales. Es eficiente en el uso del espacio y soporta compresión.
    • Características:
      • Deduplicación.
      • Compresión.
      • Soporte para copias incrementales.
    • Instalación: bash sudo apt-get install zbackup # En Debian/Ubuntu sudo dnf install zbackup # En Fedora
    • Uso básico: bash zbackup init /ruta/al/repositorio zbackup backup /ruta/al/repositorio /ruta/a/respaldar

    Conclusión

    Cada una de estas herramientas tiene sus propias ventajas y características, por lo que la elección dependerá de tus necesidades específicas. Si buscas algo simple y eficiente, BorgBackup o Restic son excelentes opciones. Si prefieres algo más enfocado en el sistema, Timeshift es una buena alternativa. Para una solución más gráfica, Duplicati puede ser la mejor opción.

    Las copias de seguridad incrementales y diferenciales son dos enfoques comunes para realizar respaldos de datos de manera eficiente, especialmente cuando se quiere ahorrar espacio y tiempo. Aquí te explico las diferencias clave entre ambas:


    Copia de seguridad incremental

    • Cómo funciona:

      • Después de una copia completa inicial, solo se respaldan los archivos que han cambiado desde la última copia de seguridad (ya sea completa o incremental).
      • Cada copia incremental depende de la copia anterior para restaurar los datos completos.
    • Ventajas:

      • Ahorro de espacio: Solo se almacenan los cambios desde la última copia, lo que reduce significativamente el tamaño de cada respaldo.
      • Velocidad: Las copias son más rápidas porque solo se procesan los archivos modificados.
    • Desventajas:

      • Restauración más compleja: Para restaurar los datos, es necesario tener la copia completa inicial y todas las copias incrementales posteriores. Si falta alguna, la restauración puede fallar.
      • Fragilidad: Si una copia incremental se corrompe, puede afectar la capacidad de restaurar datos posteriores.
    • Ejemplo:

      • Día 1: Copia completa (100 GB).
      • Día 2: Copia incremental (5 GB de cambios desde el Día 1).
      • Día 3: Copia incremental (3 GB de cambios desde el Día 2).
      • Para restaurar al Día 3, necesitas la copia completa del Día 1 y las incrementales del Día 2 y Día 3.

    Copia de seguridad diferencial

    • Cómo funciona:

      • Después de una copia completa inicial, se respaldan todos los archivos que han cambiado desde la última copia completa.
      • Cada copia diferencial contiene todos los cambios acumulados desde la última copia completa, no solo desde la última copia diferencial.
    • Ventajas:

      • Restauración más sencilla: Solo necesitas la copia completa inicial y la última copia diferencial para restaurar los datos.
      • Menos frágil: Si una copia diferencial se corrompe, no afecta a las copias anteriores.
    • Desventajas:

      • Mayor uso de espacio: Cada copia diferencial es más grande que una incremental, ya que incluye todos los cambios desde la última copia completa.
      • Más lento: A medida que pasa el tiempo, las copias diferenciales pueden volverse más grandes y tardar más en realizarse.
    • Ejemplo:

      • Día 1: Copia completa (100 GB).
      • Día 2: Copia diferencial (5 GB de cambios desde el Día 1).
      • Día 3: Copia diferencial (8 GB de cambios acumulados desde el Día 1).
      • Para restaurar al Día 3, solo necesitas la copia completa del Día 1 y la diferencial del Día 3.

    Resumen de diferencias

    Característica Copia incremental Copia diferencial
    Base de referencia Cambios desde la última copia (completa o incremental). Cambios desde la última copia completa.
    Tamaño de copia Más pequeño (solo cambios recientes). Más grande (cambios acumulados).
    Restauración Requiere copia completa + todas las incrementales. Requiere copia completa + última diferencial.
    Velocidad de copia Más rápida (solo cambios recientes). Más lenta (cambios acumulados).
    Robustez Más frágil (depende de todas las copias). Menos frágil (depende de la última).

    ¿Cuál elegir?

    • Incremental: Ideal si tienes limitaciones de espacio y tiempo, y no te importa la complejidad de la restauración.
    • Diferencial: Recomendado si prefieres una restauración más sencilla y no te preocupa el mayor uso de espacio.

    Ambas estrategias son útiles, y la elección depende de tus necesidades específicas, como la frecuencia de las copias, el espacio disponible y la importancia de la facilidad de restauración.

  • Publicado en

    Creado dos archivos, el script en s, y el archivo de exclusion

    File rsync-remote.zsh :

    rsync -avr --exclude-from='.exclude.rsync' --exclude  ~/NombreCliente/httpdocs-dev/ nombre_usuario@dominio.io:/ruta/absoluta/del/httpdocs-dev
    

    Recomendable es que se ponga la clave publica de .ssh en el directorio de know_host para que no se tenga que preguntar por contraseña File .exclude.rsync :

    .exclude.rsync
    node_modules/
    src/
    software/
    package-lock.json
    package.json
    *nextcloudsync.log
    *.db
    *.dba
    *.db-wal
    *sync-exclude.lst
    *db-shm
    

    Principalmente son los archivos que no son necesario o bien tendrían un problema de seguridad.

  • Publicado en

    Rsync: Copias Incrementales

    El desarrollo de esta script es para hacer copias de seguridad que ademas cada cierto tiempo haga una copia completa y guarde un numero especifico de completas, eliminando las mas antiguas., pero también hacer como git en control de versiones pero sin ramificaciones.

    0.- Creamos una variable del path que queremos hacer la copia de seguridad. printenv para ver variables printenv HOME devuelve el path home

    1.- Creamos un directorio para la copia de seguridad:

    mkdir /mnt/backup
    

    dentro de ella creamos la main para la copia maestra

    mkdir /mnt/backup/main
    

    y otra para las incrementales

    mkdir /mnt/backup/incrementals
    

    2.- Utilizaremos varios parámetros de rsync para hacer una copia de seguridad distinta. Usa el comando rsync con las siguientes opciones clave:

    • -a: modo de archivo, preserva enlaces simbólicos, permisos, propietario, grupo, etc.
    • -b: hace una copia de seguridad de los archivos antes de actualizarlos.
    • --backup-dir: especifica el directorio donde se almacenarán las versiones anteriores de los archivos.
    • -u: actualiza solo archivos que han cambiado.
    • --delete: elimina archivos en el destino que ya no existen en el origen.
    • --exclude Los directorios o archivos que no queremos que se hagan copia de seguridad como por ejemplo los .git o los modules. Recomendable es crear un archivo de ficheros y/o directorios de exclusión exclude.txt Hay que tener cuidado con este Tip: si la ruta de destino no existe, rsync, la creará si tiene permisos, si se omite la barra al final del directorio «/», rsync, copiará el directorio de origen dentro del directorio de destino.

    Preparando el directorio para las incrementales:

    mkdir $(date +'%Y-%m-%d:%H%M')
    

    Comando date para generar el directorio con la fecha y la hora como versión. Luego inyectar al comando mkdir para crear con la fecha: Quedaría algo parecido a: 2024-07-05:0914

    Para respaldar el origen de la copia de seguridad. Podemos utilizar una variable para guardar la extensión del archivo y del directorio:

    dateincr=$(date +'%Y-%m-%d:%H%M')
    

    Para respaldar el directorio /home/origen/ al directorio /mnt/backup/ y almacenar versiones anteriores en un subdirectorio con la fecha:

    rsync -ab --backup-dir=/mnt/backup/`date + %F%H%M`
     -u --delete
     --exclude=/mnt/backup/ /home/origen/
     /mnt/backup/incrementales/
    

    Script final en zsh:

    #!/bin/zsh
    # 
    # Black        0;30     Dark Gray     1;30
    # Red          0;31     Light Red     1;31
    # Green        0;32     Light Green   1;32
    # Brown/Orange 0;33     Yellow        1;33
    # Blue         0;34     Light Blue    1;34
    # Purple       0;35     Light Purple  1;35
    # Cyan         0;36     Light Cyan    1;36
    # Light Gray   0;37     White         1;37
    
    # Regular Colors
    Black='\033[0;30m'        # Black
    Red='\033[0;31m'          # Red
    Green='\033[0;32m'        # Green
    Yellow='\033[0;33m'       # Yellow
    Blue='\033[0;34m'         # Blue
    Purple='\033[0;35m'       # Purple
    Cyan='\033[0;36m'         # Cyan
    White='\033[0;37m'        # White
    Orange='\033[1;33m'     #Yellow        1;33
    
    clear
    BackupSource=$(printenv PWD)/Source/;
    BackupMain=$(printenv PWD)/main/;
    BackupIncrementals=$(printenv PWD)/incrementals/;
    BackupDateIncrementals=$(date +'%Y-%m-%d:%H%M')
    
    echo "La mecaniva de este script es la siguiente:";
    echo "Del archivo Fuente (Source) hace previamente una copia inicial de diferencianasnteriores al archivo de incrementales de los archivos que se han detectado como Modificado ";
    echo "Luego hace una actualizacion el archivo main con los nuevos cambios que se han detectado en el Source";
    echo "la primera copia se denomina Full Backup";
    
    echo '***************************************************';
    echo '*                                                 *';
    echo '*                                                 *';
    echo "*     ${Green} Sistema de copia de Seguridad Incremental ${White}   *";
    echo '*                                                 *';
    echo "*    ${Purple}El directorio Origen:                        *";
    echo "*     ${Cyan}$BackupSource            *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*    El directorio Main:                          *';
    echo "*     $BackupMain              *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*    El directorio de Incrementales:              *';
    echo "*     ${Orange}$BackupIncrementals      *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '***************************************************';
    
    echo 'Archivos en el directrio Fuente';
    eza --color $BackupSource
    echo 'Archivos en la Copia Main del Backup';
    eza --color $BackupMain;
    echo '______________________________________________________';
    echo '\n';
    echo 'Variable de generacion del la version de la Incremental';
    echo 'BackupDateIncrementals: '$BackupDateIncrementals;
    echo '\n';
    echo 'Ejemplo de posible script hecho con la devolucion de variables:';
    echo 'Crea el directorio para la Incremental:'
    mkdir $BackupIncrementals/Backup-$BackupDateIncrementals;
    rsync -avhb --delete --backup-dir=$BackupIncrementals/Backup-$BackupDateIncrementals $BackupSource $BackupMain;
    # rsync -avhb --delete --backup-dir=/ruta/destino/copia_$(date +%d%m%Y%H%M) /ruta/origen/ /ruta/destino/ 
    echo '\n';
    echo 'Listado de directorio creados'
    eza -al $BackupIncrementals;
    
    echo 
    echo '***************************************************';
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*                                                 *';
    echo "*    ${Purple}Ficheros en Origen:                 *";
    echo "*     ${Cyan}$BackupSource                       *";
    echo "*      $(eza $BackupSource)                        *"; 
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*    Ficheros en la main del Backup:              *';
    echo "*     $(eza  $BackupMain)                         *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '*    Los ficheros Incrementados:              *';
    echo "* $(eza $BackupIncrementals"Backup"-$BackupDateIncrementals )                  *";
    echo '*                                                 *';
    echo '*                                                 *';
    echo '***********************
    
  • Publicado en

    Para buscar una palabra en documentos PDF desde la terminal en Linux, puedes utilizar la herramienta pdfgrep[1][2][4]. Aquí te muestro algunos ejemplos de cómo usarla:

    Buscar una palabra específica en un archivo PDF:

    pdfgrep palabra archivo.pdf
    

    Buscar una frase en un archivo PDF, ignorando mayúsculas y minúsculas y mostrando el número de línea:

    pdfgrep -ni "frase a buscar" archivo.pdf  
    

    Buscar una palabra en varios archivos PDF del directorio actual:

    pdfgrep -ni palabra *.pdf
    

    Buscar recursivamente en todos los archivos PDF de un directorio y subdirectorios:

    pdfgrep -r --include "*.pdf" palabra /ruta/directorio
    

    Contar cuántas veces aparece una palabra en varios archivos PDF:

    pdfgrep -c palabra *.pdf
    

    Algunas características adicionales de pdfgrep:

    • Es compatible con expresiones regulares para búsquedas más avanzadas
    • Permite excluir ciertos archivos de la búsqueda con --exclude
    • Tiene más opciones que puedes consultar con pdfgrep --help

    Para instalar pdfgrep en Linux, está disponible en los repositorios de la mayoría de distribuciones[2]. Por ejemplo en Ubuntu/Debian:

    sudo apt install pdfgrep
    

    Y en Arch Linux:

    sudo pacman -S pdfgrep
    

    En resumen, pdfgrep es una herramienta muy útil para buscar texto en archivos PDF directamente desde la terminal en Linux, con opciones avanzadas y fácil de instalar.

    Citations: [1] https://platzi.com/tutoriales/1748-terminal-2019/5574-pdfgrep-buscar-palabras-de-un-archivo-pdf-en-la-terminal-gnulinux/ [2] https://lamiradadelreplicante.com/2017/03/10/buscar-texto-en-archivos-pdf-con-pdfgrep/ [3] https://fortinux.gitbooks.io/humble_tips/content/usando_la_linea_de_comandos/tutorial_usar_grep_para_buscar_texto_dentro_de_archivos_en_gnulinux.html [4] https://platzi.com/tutoriales/1276-terminal-2018/5389-buscar-palabras-de-un-archivo-pdf-en-la-terminal-gnulinux-usando-pdfgrep/ [5] https://atareao.es/tutorial/terminal/buscar-archivos-en-el-terminal/