Extraer nombre de fichero y extensión en bash

De cuando en cuando necesito extraer el únicamente el nombre del fichero y/o su extensión. Para ello en bash podemos hacer los siguiente (vía Stack Overflow):
NOMBRE_FICHERO=$(basename -- "$RUTA_COMPLETA")
EXTENSION="${NOMBRE_FICHERO##*.}"
NOMBRE_FICHERO="${NOMBRE_FICHERO%.*}"
Para más información sobre la expansión de parámetros en el siguiente enlace podremos encontrarla: http://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

Captura de pantalla en el portapapeles

Si por la razón que sea no se tiene acceso a ninguna herramienta gráfica de captura de pantalla o no queremos utilizar una, podemos utilizar scrot para realizarlas.

Pero scrot sólo envía dichas capturas a un fichero. Pero ¿y si queremos tener esa captura en el portapapeles para poder pegarla en una aplicación que soporte el pegado de imágenes? Ahí es donde entra xclip.

El programa xclip no viene por defecto (al menos no en Arch Linux). Para instalarlo, es tan simple como:

$ sudo pacman -S xclip
resolviendo dependencias...
buscando conflictos entre paquetes...

Paquetes (1) xclip-0.13-2

Tamaño total de la instalación:  0,06 MiB

:: ¿Continuar con la instalación? [S/n] S
(1/1) comprobando las claves del depósito                [##############################] 100%
(1/1) verificando la integridad de los paquetes          [##############################] 100%
(1/1) cargando los archivos de los paquetes              [##############################] 100%
(1/1) comprobando conflictos entre archivos              [##############################] 100%
(1/1) comprobando el espacio disponible en el disco      [##############################] 100%
:: Procesando los cambios de los paquetes...
(1/1) instalando xclip                                   [##############################] 100%
:: Ejecutando los «hooks» de posinstalación...
(1/1) Arming ConditionNeedsUpdate...

Una vez instalado podemos colocar texto o imágenes en el portapapeles de la siguiente manera:
$ echo '¡Hola mundo!' | xclip -i
Para pegar el texto almacenado en el portapapeles con la orden anterior debemos pulsar el botón central del ratón. Si quisiéramos que estuviera disponible mediante [CTRL]+v sólo necesitaríamos añadir el parámetro -selection:
$ echo '¡Hola mundo!' | xclip -i -selection clip
En lugar de xclip lea de la entrada estándar podemos pasarle un fichero como parámetro y sería el contenido de dicho fichero el que se almacenaría en el portapapeles:
$ xclip /etc/issue
No sólo podemos poner texto en el portapapeles mediante xclip. También podemos colocar imágenes, para ello debemos decirle el formato de los datos que contiene el fichero que le pasamos.
$ xclip -selection clip -t image/png fichero.png
Con la orden anterior, pondríamos el contenido de fichero.png en el portapapeles (accesible mediante [CTRL]+v) e indicamos que se trata de una imagen en formato PNG.

Vim. Plantillas para cabeceras que se incluyen automáticamente.

Recientemente he visto un artículo donde explica como configurar vim para que incluya un texto al comienzo de un fichero nuevo. Pienso que es bastante útil. Por ejemplo se puede hacer que incluya el texto de la licencia GPL3.
Lo primero creamos un fichero de texto con lo que queremos que se incluya. Por ejemplo el texto para indicar que el fichero de texto es software libre bajo la licencia GPL3 en ficheros C/C++
/*
This file is part of <foobar>.

<foobar> is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation, either version 3 of the License, or (at your
option) any later version.

<foobar> is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License along
with <foobar>. If not, see <https://www.gnu.org/licenses/>.
*/
Luego editamos el fichero .vimrc en nuestro $HOME y añadimos lo siguiente:
au bufnewfile *.{c,h,cpp,hpp,cc} 0r /home/la/.vim/doc/cabecera_licencia_gpl3_C_multiple.txt
Deberemos, eso sí, sustituir manualmente <foobar> por el nombre de nuestro programa.

Una de tamaños

  • Tamaño de las bases de datos
Para conocer el tamaño de las bases de datos alojadas en el servidor ejecutaremos la siguiente consulta SQL:
SELECT
  table_schema "Data Base Name",  
  sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB",  
  sum( data_free )/ 1024 / 1024 "Free Space in MB"  
FROM information_schema.TABLES  
GROUP BY table_schema; 
  • Tamaño de las tablas de una base de datos
Para conocer el tamaño de todas las tablas de alguna de las bases de datos alojadas en el servidor, podemos ejecutar la siguiente consulta SQL:
select  
    table_name,  
    table_rows "# Filas",  
    data_length "Tamaño datos",  
    index_length "Tamaño índices",  
    round(((data_length + index_length) / 1024 / 1024),2) "Ocupado en MB",  
    round((data_free / 1024 / 1024),2) "Libre en MB",  
    round((data_free / (data_length + index_length)),6) "Fragmentación"  
from information_schema.tables  
where table_schema = "miBaseDeDatos"  
order by (data_length + index_length)  
desc;

CMake. Soporte para MySQL/MariaDB y PostgreSQL en C.

Para añadir soporte para MySQL/MariaDB o PostgreSQL en C utilizando CMake podemos partir del siguiente CMakeLists.txt
cmake_minimum_required(VERSION 3.5)
project(CPasos C)


set(CMAKE_C_FLAGS_DEBUG "-D_ZZSoft_DEBUG_ -Wall")

include(FindPkgConfig)
pkg_check_modules(LIBMYSQLCLIENT REQUIRED mysqlclient)


foreach(FLAG ${LIBMYSQLCLIENT_CFLAGS_OTHER})
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${FLAG}")
endforeach()

pkg_check_modules(LIBPOSTGRESQL REQUIRED libpq)

set (HEADER_FILES variables.h)
set (SOURCES main.c ${HEADER_FILES})
set (THREADS_PREFER_PTHREAD_FLAG ON)

find_package(Threads REQUIRED)

link_directories(${LIBMYSQLCLIENT_LIBRARY_DIRS} ${LIBPOSTGRESQL})

add_executable(${PROJECT_NAME} ${SOURCES})
target_include_directories(${PROJECT_NAME} PRIVATE ${LIBMYSQLCLIENT_INCLUDE_DIRS} ${LIBPOSTGRESQL_INCLUDE_DIRS})
target_link_libraries (${PROJECT_NAME} PRIVATE ${CMAKE_THREAD_LIBS_INIT} ${LIBMYSQLCLIENT_LIBRARIES} ${LIBPOSTGRESQL_LIBRARIES})
Normalmente para añadir el soporte para alguna librería utilizando cmake se utiliza la función find_package que busca dentro de los directorios configurados ficheros con extensión cmake. Las pruebas las hice sobre Ubuntu, y en esta distribución, para el soporte PostgreSQL no me funcionó esta función. Para el soporte MySQL/MariaDB partí de https://mysqlserverteam.com/the-client-library-part-4-how-to-write-a-simple-mysql-client-in-c-using-cmake-and-pkg-config/

Previsión meteorológica desde la línea de órdenes

Personalmente utilizo la línea de órdenes prácticamente para todo lo que hago con el ordenador (aunque tenga instalado entorno gráfico) así que poder conocer la previsión meteorológica desde la línea de órdenes es algo que me resulta bastante práctico. Por ello, gracias a @igor_chubin, consultando mediante curl la web wttr.in/ciudad podemos conocer la previsión para la "ciudad" que indiquemos en la URL.
curl wttr.in/Zanzabornín
Como se puede ver, están permitidos caracteres UTF-8. Al ejecutar la línea anterior, veremos algo como lo siguiente: 


 
Una nota para finalizar. El código fuente de esta aplicación creada por @igor_chubin está disponible en su GitHub.

Conocer IP pública desde la línea de órdenes

En ocasiones suele necesitarse conocer la IP pública de una máquina y si no disponemos de entorno gráfico para poder acceder a alguna de las webs que te la muestran (o si como a mi os resulta más cómoda la línea de órdenes), podemos ejecutar la siguiente línea que sólo necesita de curl:
curl ipinfo.io/ip

Si preferimos utilizar wget, o es la orden que tenemos instalada en nuestra máquina, podemos ejecutar:
wget -qO- ipinfo.io/ip