archivos

  • Anteriormente comparé los algoritmos de compresión ZIP, bzip2, gzip, RAR, LZMA y ZPAQ para tratar de determinar cuál era el mejor de ellos en término de uso de CPU, tiempo y radio de compresión, con el objetivo de lograr la máxima compresión posible. En esta ocasión voy a repetir el test, pero orientado a lograr la mayor velocidad posible (para que nuestros backups se hagan lo más rápido posible y sin demoras).

  • Luego de explicar el uso básico de zpaq, se me ocurrió llevar a cabo un pequeño experimento como comparación de rendimiento de diferentes algoritmos de compresión. Veamos un benchmark de tiempo, tamaño de archivo y uso de CPU para diferentes formatos.

  • Cada vez que necesito parsear (analizar) texto o archivos, suelo utilizar las herramientas grep, sed y cut. Existe otra herramienta que siempre me resultó desconocida, awk, que es una especie de grep | sed | cut con esteroides. Este interesante artículo que encontré explica su funcionamiento básico en menos de 20 minutos.

  • Comparto un script sencillo que permite borrar automáticamente backups viejos en un servidor GNU/Linux.

  • Me volvió a suceder, esta vez en mi Slackware:

    19:41 emi@vaio ~ $ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sda5        29G   27G     0 100% /
    /dev/sda1       1.9G   21M  1.8G   2% /boot
    /dev/sda6        29G   19G  8.0G  70% /home
    /dev/sda8       191G  186G  4.9G  98% /data
    tmpfs           2.0G  4.0K  2.0G   1% /dev/shm
    /dev/sda9       173G  152G   22G  88% /vault
    

    Como podrán observar, estoy algo complicado de espacio en disco. Pero lo torpe fue haber llenado el sistema de archivos raíz /. Muy raro siendo que dicha partición tiene 30 GB. Cosas que suceden por no utilizar un esquema de particionado más sensato (como mínimo montar los directorios /tmp y /var en particiones separadas). Aunque se puede perdonar el descuido por tratarse de un sistema de escritorio.

    El punto es que me sorprendí al encontrar el sistema de archivos raíz colmado, pues tenía la sensación de que había espacio de sobra. Pero lo que más me sorprendió fue ésto:

    /dev/sda5        29G   27G     0 100% /
    

    Si el tamaño total es 29G y tiene 27G utilizados, ¿cómo puede ser que esté 100% en uso y el espacio disponible sea 0?

    Interesante situación, y es la primera vez que me ocurre. Había oído de este caso dialogando con un experto: quedan 2GB de espacio disponible, pero df reporta que el filesystem está lleno, quedan 0 bytes disponibles. ¿A qué se debe ésto? A que se ha llenado la tabla de i-nodos. Por más que queden bloques libres, no quedan i-nodos disponibles para crear nuevos archivos (que puedan utilizar esos bloques libres), sólo es posible que los archivos existentes aumenten su tamaño. Se ha llegado al límite máximo de archivos en el filesystem.

  • Esta semana logré rescatar un viejo disco de mi época de Windowsero y me propuse conectarlo para hacerle una "limpieza" de archivos, es decir, hacer un poco más de espacio. La idea era borrar la mayor parte de su contenido y usarlo para guardar backups, pero la nostalgia me impide deshacerme de un montón de archivos y software absolutamente obsoleto (como por ejemplo instaladores de Winamp 2, Firefox 2.0 y hasta una imagen iso de Windows 98 SE).

    Como tenía basura acumulada de muchos años, luego de conectar el disco en mi workstation CentOS, pensé en utilizar una herramienta para buscar archivos duplicados. Buscando rápidamente me topé con fdupes, una herramienta para buscar archivos duplicados o repetidos en GNU/Linux.

  • Tuve la necesidad de encontrar todos los archivos modificados el mes de marzo de 2018. Tarea simple gracias a find.

  • En los sistemas de la familia Unix, típicamente utilizamos la herramienta find para buscar archivos por nombre, por fecha de modificación, o tipo, tamaño, etc. Sin embargo puede ser necesario buscar archivos por contenido. Por ejemplo, buscar archivos que incluyan cierta palabra clave dentro de su texto. A tal fin es posible recurrir a grep para realizar búsquedas de texto en archivos (lo que se conoce como full-text search).

  • Realizando un análisis forense tuve la necesidad de buscar archivos modificados en una cierta fecha. Los sistemas operativos de la familia UNIX no almacenan la fecha de creación de los archivos, por lo que debe utilizarse la fecha de modificación.

  • A veces necesitamos buscar un archivo por nombre y nunca recordamos la sintaxis correcta del comando "find" y terminamos desistiendo o utilizando algún bonito buscador con interfaz gráfica. Aunque en realidad, la sintaxis de "find" es muy simple sólo se necesita saber en qué directorio buscar y una parte del nombre del archivo.

  • A veces tenemos el problema de no recordar donde se encuentra un archivo, entonces es necesario buscarlo. Para esto, sólo hace falta recordar el nombre, o parte del nombre, del archivo. En GNU/Linux, el comando find busca archivos en una jerarquía de directorios. Para los usuarios novicios (o quienes vienen desde otro sistema operativo) puede resultar dificil o desconocido ya que find es una de las herramientas más completas, complejas y poderosas de la consola/terminal/línea de comandos/shell. Por eso en este artículo explico cómo buscar correctamente archivos por nombre utilizando comodines (wildcards), por ejemplo astreriscos y símbolos de pregunta.

  • Tuve la necesidad de buscar en un servidor los archivos que fueron creados por un usuario en particular, más específicamente "www-data" (usuario con el que corre Apache en los sistemas Debian y derivados). Esto fue lo único que se me ocurrió hasta el momento para encontrarlos (sin recurrir a auditd).

  • Este artículo tal vez les pueda servir al momento de desarrollar un script Bash. Existe una herramienta en Linux, llamada basename que permite desmenuzar una ruta a un archivo. Es decir, permite remover tanto la ruta al directorio como cualquier sufijo o extensión.

  • Los ejemplos que presento en este artículo pueden ser útiles cuando necesitamos borrar rápidamente muchas líneas de un archivo.

  • Hoy me propuse hacer una limpieza de un sitio MediaWiki para recuperar el espacio en disco utilizado por archivos innecesarios u obsoletos. El problema es que, al eliminar un archivo (por ejemplo en la lista de archivos, accesible desde el menú "Páginas especiales > Lista de archivos"), éste no se elimina en absoluto. Sólo se restringe el acceso, quedando tanto referencias al archivo en la base de datos como el archivo mismo en disco. Esto se debe al mecanismo de control de cambios e historial propio de MediaWiki, que permite deshacer cualquier edición, incluso recuperar un archivo borrado. En este artículo voy a explicar cómo eliminar definitivamente un archivo subido a un sitio MediaWiki.

  • En general es difícil crear un archivo cuyo nombre comience con guión del medio (-), ya que la mayoría de los comandos lo interpretan como un caracter especial para indicar opciones y parámetros. Pero a veces puede suceder que al escribir mal un comando, terminemos creando un archivo cuyo nombre comienza con guión. En este artículo presento el truco necesario para poder borrarlo, cortesía de man rm.

  • A veces uno se encuentra con el problema de no recordar donde puso un archivo, entonces es necesario buscarlo. Para esto, sólo es necesario recordar el nombre (o parte del nombre) del archivo. Para buscar archivos por nombre en GNU/Linux es posible utilizar las herramientas find y locate (estaba escribiendo "los comandos" pero me arrepentí y borré, en general no me gusta utilizar la palabra "comando" ya que los usuarios menos expertos suelen tenerle pánico a la misma, un "comando" es una porción de texto críptico, escrito en un lenguaje que sólo entienden las computadoras, que realiza tareas incomprensibles y puede causar la destrucción total del planeta, en cambio una "herramienta" es algo que nos facilita la vida).

  • Hoy perdí un poco de tiempo tratando de cambiar la aplicación por defecto para abrir una extensión de archivo en particular en GNOME.

  • Supongamos que tenemos un directorio con algunos cientos de gigabytes de archivos, en un servidor en producción, y necesitamos contrastar rápidamente la diferencia contra un backup previo, para saber qué archivos faltan y cuáles son nuevos. Al tratarse de un sistema en producción, no vamos a querer "sacudirle" a los discos examinando el contenido de los archivos uno por uno, especialmente si no necesitamos gran precisión en los resultados. Sólo queremos comparar ambos directorios por nombre de archivo, sin importar las fechas de modificación ni su contenido (checksums).

    Este artículo explica cómo comparar dos árboles de directorio en Linux según los nombres de los archivos, sin examinar el contenido de los mismos.

  • En entregas anteriores expliqué cómo transferir archivos de forma segura utilizando SCP y cómo transferir archivos entre sistemas remotos utilizando SSH (sin FTP, SFTP o SCP). Secure Copy (SCP) permite copiar archivos desde/hacia sistemas remotos utilizando SSH, mientras que SSH permite realizar casi la misma tarea utilizando un túnel y controlando la entrada y salida estándar en ambos extremos.

    Sin embargo, estas dos técnicas permiten solo crear o sobrescribir en el filesystem destino. Pero, ¿qué pasa si en lugar de sobrescribir necesitamos agregar contenido (append) a un archivo existente?

    En este breve artículo voy a explicar cómo es posible hacerlo, para que aprendamos juntos a dominar SSH like a boss.