Archivo de la categoría: GNU/Linux

Generalidades sobre GNU/Linux.

Chequear la batería del portátil desde línea de comandos

Aunque todas las distribuciones actuales tienen entornos gráficos con aplicaciones que controlan en todo momento el estado de la batería del portátil y nos muestran avisos cuando queda poca batería, si usáis un entorno más liviano (tipo openbox) y/o queréis comprobarlo por vuestra cuenta, aquí os indico cómo podéis hacerlo.

Para chequear el nivel de la batería podéis usar este script:

REMAINING=`cat /proc/acpi/battery/BAT0/state | awk '/remaining/ {print $3}'`
TOTAL=`cat /proc/acpi/battery/BAT0/state | awk '/present rate/ {print $3}'`
echo "$REMAINING * 100 / $TOTAL" |bc

Y con este otro script podéis controlar también el adaptador para ver cuándo está online y cuándo offline. Este script hace uso del anterior y así, si está sin cable de corriente y la batería baja de un nivel que especificamos se apaga el equipo (es el comando «h» que se ve ahí). El script sería éste:

BAT=`/usr/local/bin/show_bat.sh`
MIN_BAT=10
AC_ADAPTER=`cat /proc/acpi/ac_adapter/ADP0/state | awk '{print $2}'`
if [ $AC_ADAPTER = "off-line" ]; then
        if [ $BAT -lt $MIN_BAT ]; then
                if [ $BAT -lt 3 ]; then
                        echo "El equipo se quedón sin batería" > $HOME/LEEME.txt
                        /usr/local/bin/h
                else
                        zenity --warning --text="Batería baja" --display=:0.0
                fi
        fi
fi
Espero que os resulte útil.

Bookmarks en la línea de comandos

Si con los anteriores artículos sobre zsh ya os he convencido y lo usáis cotidianamente como yo, este plugin para zsh os va a gustar.

A veces tenemos que entrar en largas rutas de directorios. Esto implica escribirlos (aunque sea usando las abreviaciones y tabulador igualmente lleva un tiempo) cada vez que queramos entrar en ellos.

Cuando esa operación la tenemos que hacer asiduamente, conviene agilizarlo. Para ello, podríamos usar los comandos push pop, como vimos en este artículo. Sin embargo, hay una forma más versátil y es haciendo uso de un plugin para zsh llamado zshmarks, creado por el usuario de github .

Para activarlo lo podemos hacer fácilmente tanto si usamos oh-my-zsh, como vimos aquí, o antigen, como vimos aquí.

Con este plugin podemos usar ciertos comandos rápidos para guardar y acceder a rutas de directorios de forma muy cómoda e intuitiva (*). Veamos unos ejemplos, que es la forma más sencilla de ver cómo funciona.

  • bookmark NOMBRE_BOOKMARK–> Añade como bookmark «NOMBRE_BOOKMARK» el directorio actual.
  • showmarks  –> Muestra los bookmarks que tenemos guardados.
  • deletemark NOMBRE_BOOKMARK –> Elimina el bookmark en cuestión.
  • jump NOMBRE_BOOKMARK –> Va a la ruta a la que apunta dicho bookmark.

Como vemos, para guardar un bookmark, accedemos primero a la ruta que deseamos guardar y luego escribimos bookmark NOMBRE_BOOKMARK, donde NOMBRE_BOOKMARK es el nombre que le queremos dar al bookmark.

Todos los bookmarks se guardan en un simple archivo de texto plano cuyo nombre se especifica en la variable BOOKMARKS_FILE, por lo que podéis copiar vuestros bookmarks a todos vuestros PCs muy fácilmente.

Para agilizar aún más la escritura, podéis crear alias para dichos comandos, tal y como propone el creador de este plugin en su web:

alias g="jump"
alias s="bookmark"
alias d="deletemark"
alias p="showmarks"

También podéis crear directamente alias para un comando y bookmark. Ejemplo:

alias l=»jump logs»

De esta forma simplemente tecleando l + INTRO ya iríamos a la ruta que queremos.

Espero que os resulte útil.

 

(*) Es similar al manejo de bookmarks en otras aplicaciones, como en el explorador de archivos (Dolphin, por ejemplo) o el navegador web.

OCR usando Google Drive

En el anterior artículo hablábamos de una aplicación para GNU/Linux que realiza OCR sobre imágenes.

Existen muchas webs que realizan este tipo de procesado (tenemos que subir la imagen y nos devuelven un archivo de texto). Normalmente tienen limitaciones de texto, de peso de imagen, de número de páginas, de formatos de salida aceptados, de tiempo…

Otra opción -que es la que os quería comentar en este pequeño post-, es usar Google Drive.

Para esto último tenemos que activar, dentro de Google Drive, las dos opciones que véis en la siguiente imagen (*):

Opción OCR Google Drive

Una vez hecho esto, cada vez que subamos un archivo de imagen o pdf nos preguntará si queremos convertirlo a texto.

Una vez hecho, cuando abramos el archivo aparecerá la imagen y a continuación todo el texto.

Hay una limitación de 10 hojas si se trata de un pdf. Para mejores resultados, y al igual que dijimos en el anterior artículo, tened en cuenta:

  • Mejor cuando mayor contraste (blanco y negro mejor que escala de grises)
  • Mejor cuanta más calidad tenga la imagen (sin pasarnos de peso en la imaegn, eso sí, que creo que es de 2 MB)
  • Mejor si el formato es sencillo (negrita, cursiva, tamaño de letra). Si incluye tablas, múltiples columnas, etc., el resultado no será muy fiable.

 

(*) Si le habéis dado a «probar la nueva versión de Google Drive» esta opción no aparece y tendréis que volver a esta versión para poder usarla (es posible que esté ya en la nueva versión pero yo no la ví en su momento).

OCR usando GNU/Linux

En la actual «era digital», todo resulta mucho más sencillo -la mayoría de las veces-, trabajando con los archivos en formato electrónico en lugar de en papel.

Además, para archivarlos es mucho más cómodo, no ocupan espacio físico en el despacho y además es todo más versátil (por ejemplo, puedes hacer búsquedas rápidamente en grandes cantidades de ficheros).

Dicho esto, está claro que además de tener archivos en formato electrónico, también nos encontramos con archivos en formato impreso (en papel, vaya). Estos últimos podemos escanearlos para guardarlos en el ordenador.

La «pega» es que si necesitamos editarlos esto no es posible porque, una vez escaneados, son una imagen -no son texto-. En cualquier caso, a estas alturas esto es algo que se soluciona fácilmente, existiendo aplicaciones que además de escanear realizan un reconocimiento óptico de caracteres (lo que se conoce como «OCR», por sus siglas en inglés: Optic Character Recognition).

Estas aplicaciones analizan la imagen en cuestión en busca de patrones que puedan parecerse a las letras de un idioma y signos de puntuación.

Si el documento tiene imágenes entre el texto y/o el formato no es sencillo (tiene tablas, columnas, etc.), el OCR no será todo lo preciso que podría, pero para la mayoría de documentos, cartas, informes, etc., nos hará un buen trabajo (quitándonos muchas horas de pasarlo de nuevo a ordenador tecleándolo entero).

Interesa que la imagen escaneada esté en una calidad aceptable. Cuando mayor contraste mejor (es decir, mejor escanear en blanco y negro que en escala de grises o color normalmente).

Lo que nos interesa a nosotros es, por tanto, encontrar un software que realice ocr en nuestro sistema operativo (GNU/Linux, claro). Yo os recomiendo la aplicación tesseract, la cuál fue desarrollada en su momento por HP y ahora es continuada por Google. Existe para la mayoría de las distros y es gratuita bajo la licencia Apache 2.0. Si vuestra distro no la trae en los repositorios oficiales (no será una distro muy conocida entonces), Podéis descargarla aquí:

Usar la aplicación es sencillo:

tesseract IMAGEN.png SALIDA -l spa

donde:

  • IMAGEN.png es nuestra imagen escaneada (acepta varios formatos, entre ellos png)
  • SALIDA es el fichero de salida que se genera con el texto
  • con -l spa indicamos que el texto está en español (admite muchos más idiomas (*))

(*) Para ver qué idiomas tenemos instalados escribimos: tesseract –list-langs.

 

Paralelizando tareas en la línea de comandos

Los procesadores actuales, como bien sabéis, tienen varios cores. Esto significa que en teoría pueden ejecutar varias cosas en paralelo. Así, si tienen 4 cores, podrían ejecutar 4 procesos al mismo tiempo.

El problema es que normalmente las aplicaciones no están diseñadas para sacar todo el rendimiento a nuestros procesadores con todos sus cores, de forma que a veces está trabajando un core mientras los otros apenas hacen nada.

En GNU/Linux tenemos un comando (desarrollado por la propia fundación GNU) que permite ejecutar varias tareas en paralelo. Se llama parallelSe encuentra disponible para todas las distros más importantes directamente desde los repositorios.

El ejemplo más sencillo es el de comprimir varios archivos. Veamos cómo lo haríamos normalmente:

gzip *

Vamos a ejecutar este comando con el comando time delante para que al finalizar nos diga cuánto ha tardado (así podremos luego comparar más fácilmente). Además, le pondremos la opción -1, que hará que comprima más y tardará un poquito más:

[ user ] [~/a] > time gzip -1 * 
gzip -1 * 10,80s user 0,40s system 96% cpu 11,622 total

En mi PC obtengo un uso de sistema del 96% y 11,6 segundos de tiempo en ejecutarlo.

Se obtiene un 96% de uso de CPU porque para el comando time, 100% es el máximo uso de un core. Como tenemos 4 cores (en el caso de mi CPU), el total sería 400%, por lo que se están desperdiciando aproximadamente(*) 3/4 partes de procesador.

Para llevar a cabo esta tarea con parallel tendríamos que hacerlo así:

[ user ] [~/a] > ls | time parallel gzip -1
[... información sobre parallel ...]

parallel gzip -1 10,93s user 0,53s system 317% cpu 3,605 total

Lo que da como resultado un 317% de uso de CPU y un total de 3,6 segundos de ejecución.

El hecho de que se obtenga 317% de uso de CPU se explica por lo que decíamos antes. time tiene en cuenta 100% por cada core. Por tanto, aquí se está aprovechando mucho mejor la CPU. En nuestro ejemplo hemos comprimido sólo 4 archivos de 66 megas cada uno. Si comprimiéramos más y durara más el proceso, poco a poco el % de uso aumentaría aprovechando aún más todos los cores, es decir, cuanto más dure el proceso más partido sacará.

Si queréis comprobar de una manera más visual qué porcentaje de cada core se está usando en cada momento podéis usar la utilidad htop.

Parallel tiene muchas más opciones. Podéis incluso usarlo para usar no sólo los cores de un equipo, sino las cpus de varios equipos en red. Un parámetro interesante es el que permite especificar qué capacidad de cpu queremos usar para la tarea. Es el parámetro -j. Siguiendo con el ejemplo anterior, podríamos poner esto:

[ user ] [~/a] > ls | time parallel -j 50% gzip -1
[ ... información sobre parallel ... ]

parallel -j 50% gzip -1 10,84s user 0,46s system 188% cpu 6,005 total

Con esto indicamos que se use la mitad de la CPU. En este caso el resultado ha sido 164% de ocupación de CPU y unos 6 segundos, es decir, como usamos la mitad, tardamos el doble -aproximadamente- que antes.

Aquí tenéis el tutorial de GNU por si le queréis sacar todo el pringue a este comando.

Más info aquí.

(*) Decimos aproximadamente porque el sistema operativo está ejecutando más cosas aparte de nuestro comando gzip.

Obteniendo información del hardware con dmidecode

A veces uno necesita (o simplemente quiere) saber qué componentes tiene su PC exactamente. Una forma de saberlo es abrir el equipo y observar estos datos viendo los componentes directamente.

Sin embargo, si queremos saber esto sin necesidad de abrir el equipo podemos usar dmidecode.

dmidecode es una aplicación para GNU/Linux que permite obtener información sobre el hardware y que está almacenada en la BIOS. Hace uso de DMI (Desktop Management Interface), que no es más que un framework para obtener información sobre los componentes de un ordenador.

Así pues, con dmidecode podemos conocer, entre otros, la marca de la placa base, el modelo, la revisión, la cantidad de memoria RAM instalada, bancos de memoria ocupados y libres, etc., etc.

Lo primero que necesitamos es instalar el paquete dmidecode usando el sistema de paquetería de la propia distribución. En el caso de openSUSE:

zypper in dmidecode

En el caso de ubuntu

aptitude install dmidecode

y así sucesivamente.

Aunque tiene varios parámetros (ya que la información que se puede recopilar es bastante completa), la forma más sencilla de usarla es pasándole una cadena que especifica qué parámetro queremos saber. Por ejemplo, para saber el fabricante de la placa base ejecutaremos esto:

dmidecode -s baseboard-manufacturer

En el caso de mi portátil, el resultado es: Dell Inc.

Para ver todos los parámetros de este tipo ejecutamos esto:

dmidecode -s

Ahí se listan todos, pero podemos obtener aún más información usando otros parámetros.

Si queremos obtener toda la información referente a la memoria, por ejemplo, usaríamos el parámetro -t:

dmidecode -t memory

Esto ofrece mucha información. Si buscamos algo más concreto, como por ejemplo, saber cuál es la capacidad máxima de memoria que admite nuestro equipo pondremos:

dmidecode t16 | grep -i "maximum capacity"

Como siempre, con man podéis obtener toda la información que podéis necesitar para sacarle más partido al comando.

Personalizando zsh: antigen

En una entrada anterior hablaba de oh-my-zsh, que es una forma de personalizar zsh.

Aunque con oh-my-zsh se pueden conseguir cosas bastante interesantes como vimos, con antigen se puede realizar esto con más facilidad.

Antigen es realmente un gestor de plugins para zsh, que actúa de intermediario entre nosotros y el fichero de configuración .zshrc (con antigen es mucho más fácil su gestión).

Para instalar antigen haremos esto:

curl -L https://raw.githubusercontent.com/zsh-users/antigen/master/antigen.zsh > antigen.zsh

source antigen.zsh

A partir de ahora ya podemos probarlo. Como ejemplo vamos a ver cómo activar el plugin que activa el resaltado de la sintaxis en zsh:

antigen bundle zsh-users/zsh-syntax-highlighting

Con esto activamos dicho plugin.

Si queremos probar con un tema para el prompt, nada más fácil:

antigen theme agnoster

Como ya os indiqué en la entrada de oh-my-zsh, tenéis todos los temas aquí.

Si queremos que estos cambios estén siempre activos cuando arranquemos nuestra sesión en el terminal, meteremos estos cambios en .zsh, pero de esta forma:

antigen bundles <<EOBUNDLES
  command-not-found
  gem
  npm
  sublime
  python
EOBUNDLES

De esta forma, podemos meter todos los plugins que queramos aplicar en nuestro zsh metiendo una línea nueva entre los dos EOBUNDLES.

Si queremos aplicar un tema pondremos esto:

antigen theme jdavis/zsh-files themes/jdavis

Y, por último, introducimos la línea que aplica todos los cambios:

antigen apply

Esto último es necesario al usar antigen bundles en lugar de una lista de antigen bundle. La diferencia es que con antigen bundles y luego antigen apply la carga de los plugins es mucho más rápida.

Muy interesante es la opción de actualizar todos los bundles (plugins) que tenéis en vuestro .zshrc. Se hace automática y sencillamente con este comando:

antigen update

Para actualizar el propio antigen usaremos este comando:

antigen selfupdate

Con esto ya deberíais tener vuestro zsh personalizado con plugins y temas chulos usando antigen. Si queréis más información, podéis mirar aquí pero, sobre todo, aquí.

Personalizando zsh: oh-my-zsh

En la anterior entrada os comenté que zsh es un intérprete de comandos para GNU/Linux (también para otras plataformas, como MAC OS) que permite, entre otras cosas, un nivel de personalización mucho más alto que bash.

Para este fin nació oh-my-zsh, que no es más que una aplicación (un framework en realidad) que permite personalizar fácilmente nuestro zsh.

Para ello consta de multitud de plugins y temas y permite adaptar el aspecto y funcionalidad de zsh a nuestras preferencias personales. Es una forma sencilla (*) de realizar cambios en la configuración de zsh.

Para instalarlo, nada más fácil:

$ wget --no-check-certificate http://install.ohmyz.sh -O - | sh

Una vez instalado simplemente editamos el fichero .zshrc, que tendremos en nuestro directorio home.

Para cambiar el tema del prompt modificaremos el parámetro ZSH_THEME. Por ejemplo:

ZSH_THEME=robbyrussell

Si no queremos ningún tema (estaría todo como antes de instalar oh-my-zsh) lo dejaremos así:

ZSH_THEME=""

Existe una lista de temas para poder aplicar en el prompt de nuestro shell favorito, la podéis encontrar en este enlace.

Como indican aquí, también es interesante usar el tema random, que lo que hace es ir cambiando de un tema a otro aleatoriamente. De esta forma podemos ir viéndolos todos y quedarnos al final con el que más nos guste.

Los plugins permiten añadir cosas interesantes, como autocompletado de parámetros de comandos. Por ejemplo, al escribir zypper  (instalador de paquetes de openSUSE) y a continuación escribís in y pulsáis tabulador, os dirá qué parámetros acepta.

Aquí tenéis una lista de los plugins que existen para oh-my-zsh.

Para añadir un plugin simplemente tenéis que añadir el nombre del plugin a la lista entre paréntesis que hay tras el parámetro «plugins» dentro del fichero .zshrc. Por ejemplo:

plugins=(rails git ruby)

Si conocéis más formas de usar oh-my-zsh para mejorar la experiencia con zsh sentíos libres de dejar un comentario.

 

(*) En una próxima entrega veremos una forma de personalizar zsh aún más sencilla que ésta :-O.

Pasando de bash a zsh

Hace tiempo oí hablar de zsh, un shell bastante potente que tenía peculiaridades que lo hacían, a priori, mejor o, al menos, más completo que el archiconocido bash.

Por cuestiones de tiempo no lo pude probar en su momento, pero no hace mucho me decidí a instalarlo y echarle un vistazo.

Realmente, una vez instalado, zsh (o Z shell) es muy parecido al bash, por lo que si el uso que le dais al terminal es ocasional no vais a notar mucha diferencia en primera instancia. De hecho, en estos casos casi que os recomiendo que ni lo instaléis, porque bash funciona perfectamente y las bondades de zsh son útiles para uno uso más intensivo.

La única excepción que veo a esto es que, aunque no uséis mucho la terminal, queráis darle un aspecto más chulo (más colorido, mostrando más datos, más personalizado), ya que estos menesteres con zsh no son complicados y los resultados son bastante decentes.

Si le dais más uso sí que le sacaréis mayor provecho ya que muchas de las funcionalidades que zsh incorpora y de las que bash carece (*).

Hay un documento (una presentación web) de visita obligada si queréis ver qué puede hacer zsh y que otros shells no puede, y es ésta. En ella se muestran cosas que puedes hacer en zsh y que, por ejemplo, en bash no se puede.

En ella muestran ejemplos prácticos de por qué os puede resultar muy útil sustituir vuestro intérprete de comandos actual por zsh. Os comento algunas interesantes:

  • El tabulador que se usa para completar un comando, si lo usáis tras introducirlo, os va a completar con los parámetros del comando. Por ejemplo, si ponéis zypper in y le dais al tabulador, os va a mostrar los distintos parámetros de zypper que comienzan con las letras in, como pueden ser info o install, por ejemplo.
  • Si accedéis a una ruta de directorios muy profunda, como por ejemplo:
/home/amms/un/directorio/cualquiera/pero/profundo

y queremos ir al directorio:

/home/amms/otro/directorio/cualquiera/pero/profundo

no hace falta que reescribamos la ruta completa, sino que podemos poner esto:

cd un otro

y lo que hará será sustituir en la ruta actual el directorio un por otro, ahorrándonos mucho tiempo y la molestia de tener que reescribirla por completo.

  • Existe la posibilidad de poner una cadena como prompt derecho. Podemos usar distintos parámetros para personalizarlo (también el izquierdo), pudiendo ser éstos la fecha, la hora, la ruta, el usuario, usar colores, etc.
  • Se pueden usar lo que se denominan alias globales. Ejemplo:
alias -g p='-ef | grep'

que es muy útil, al menos para mí.

Para instalarlo podéis usar el gestor de paquetes de vuestra distro, porque está en todas las distros conocidas (si no lo está, cambiad de distro, ¡ya!). Una vez instalado tenéis que especificar que queréis que éste sea vuestro shell por defecto. Para ello, ejecutáis como root:

chsh -s `which zsh` $USER

Si os animáis a instalarlo y tenéis alguna pega me podéis poner un comentario y lo vemos.

En otro artículo os hablaré de cómo personalizar fácilmente zsh (sí, me refiero a  usar cosas como oh-my-zsh o antigen).

(*) Realmente hay algunas cosas que sí que se pueden implementar en bash con funciones pero es un poco más rudimentario que zsh en general para aspectos de personalización y de funcionalidad práctica en general.

Monitorizar temperatura de disco duro con hddtemp

hddtemp es un comando de Linux que permite monitorizar la temperatura del disco duro de vuestro equipo. Es un comando que hay que ejecutar como root (o con sudo). Hay que pasarle como parámetro el disco duro que queremos monitorizar. Ejemplo:

[ user ] [~] > /usr/sbin/hddtemp /dev/sdb
/dev/sdb: ST9750420AS: 39°C

Si lo queréis ejecutar con vuestro usuario debéis aplicarle el setuid bit de esta forma:

chmod u+s /usr/sbin/hddtemp

Con esto se consigue que el programa hddtemp adquiera los permisos el propietario del mismo (root).

Yendo un paso más allá, podéis incorporar esta información en conky. Conky es un programa para monitorizar cosas en vuestro PC y, en general, mostrar información al respecto. En este caso particular, nos mostraría constantemente la temperatura del disco duro.