Elige Tu Propio Prompt

El prompt

El prompt es la cadena de texto que le indica al usuario que puede ingresar comandos en un shell. En Linux existe la variable PS1 que guarda el valor del mismo. PS1 significa "Prompt String 1".

Por ejemplo, en Fedora tiene el valor [\u@\h \W]\$ y se expande a:

test@localhost:~$

Esta variable reemplaza automáticamente determinados caracteres escapados con una contrabarra. Algunos de ellos son:

Caracter escapado Reemplazado por
\d Fecha en formato dom abr 21
\h El nombre del host sin el dominio
\H El nombre del host completo
\t hora en formato 24 hs
\T hora en formato 12 horas
\@ hora en formato 12 horas am/pm
\u El usuario actual
\w el directorio actual
\W la ruta relativa del directorio actual

También se pueden usar secuencias de escape ANSI para colorear, por ejemplo

Prompt con colores ANSI

Esto se explica así:

  • La secuencia \[\033indica el comienzo de una secuencia ANSI
  • [1;32m\]es color verde
  • \[\033[0m\]cierra la secuencia de colores (de otra manera todo lo que tipeemos a continuación quedará también en verde

Podemos seguir personalizando el prompt a nuestro gusto y necesidad.1

También podemos echar mano a algunos de los proyectos que nos facilitan esta tarea, tal como veremos a continuación.

sexy-bash-prompt

Sino queremos hacer todo a mano podemos usar un software como sexy-bash-prompt. Todd Wolfson creó un prompt para bash que también puede usarse para status y ramas en git. Utiliza tput, un programa para configurar terminales usadas por la shell, y también para inicializar o resetear la terminal.

Instalación de sexy-bash-prompt

  • Creamos el directorio Descargas si no existe:

# [ -d ~/Descargas ] || mkdir ~/Descargas

  • Clonamos el repositorio:-

# git clone --depth 1 --config core.autocrlf=false https://github.com/twolfson/sexy-bash-prompt

  • Entramos en el directorio del repo:

# cd sexy-bash-prompt

  • Instalamos:

# make intall

  • Recargamos la configuración de la shell

# . ~/.bashrc

¡Listo!

sexy-bash-prompt

Configuración de sexy-bash-prompt

Se puede adaptar a gusto el aspecto del prompt editando el archivo ~/.bashrc y/o ~/.bash_prompt

Personalizando sexy-bash-prompt

Aquí vemos un ejemplo de configuración personalizada:

powerline

Powerline2 se trata de un software mucho más sofisticado escrito en python por Kim Silkebækken.

Originalmente este proyecto se llamaba vim-powerline el cual proporcionaba una línea de estado para vim, pero posteriormente evolucionó para ser una línea de estado para aplicaciones tales como bash y tmux entre otros.

Instalación de Powerline

En el caso de Fedora viene como paquete y se puede instalar con:

# dnf install powerline

La configuración para bash se puede realizar en el archivo .bashrc de esta manera:

if [ -f `which powerline-daemon` ]; then
  powerline-daemon -q
  POWERLINE_BASH_CONTINUATION=1
  POWERLINE_BASH_SELECT=1
  . /usr/share/powerline/bash/powerline.sh
fi

En el caso de CentOS 7, el software se puede instalar con pip y luego agregar en .bashrc:

if [ -f `which powerline-daemon` ]; then
  powerline-daemon -q
  POWERLINE_BASH_CONTINUATION=1
  POWERLINE_BASH_SELECT=1
  .  /bindings/bash/powerline.sh
fi

Y así queda luego de hacer . .bashrc:

Powerline

Configuración de Powerline

La configuración de powerline en CentOS al instalar con pip está en /usr/local/lib/python3.6/site-packages/powerline/config_files. En Fedora se encuentra en /etc/xdg/powerline. Para modificar alguno de los archivos se pueden crear el directorio ~/.config/powerline y poner las modificaciones allí.

Existen varios archivos de configuración que tienen el mismo nombre, pero ubicados en diferentes directorios, los cuales se combinan, como es habitual los archivos del usuario tienen prioridad sobre los globales.

Poniendo como ejemplo CentOS y la shell BASH, los archivos de configuración serían:

Ruta del archivo o directorio Descripción
$PYTHONPATH/site-packages/powerline/config_files/config.json Archivo principal de configuración
$PYTHONPATH/site-packages/powerline/config_files/colorschemes/default.json Configuración predeterminada del esquema de colores
$PYTHONPATH/site-packages/powerline/config_files/colorschemes/shell/default.json Configuración predeterminada del esquema de colores para la shell

Al editar el archivo local ~/.config/powerline/config.json podemos cambiar el esquema de colores predeterminado:

Esquema de colores

Para cambiar el esquema de colores:

# mkdir -p .config/powerline/colorschemes/shell # cp /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/shell/__main__.json .config/powerline/colorschemes/shell/

La definición de esos grupos se puede ver en /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/default.json

Por ejemplo superuser tiene el valor information:additional, el cuál este a su vez tiene: "fg": "gray9", "bg": "gray4", "attrs": [].

Podemos copiar el archivo correspondiente y personalizarlo:

# cp /usr/local/lib/python3.6/site-packages/powerline/config_files/colorschemes/shell/default.json .config/powerline/colorschemes/shell/

Supongamos que le hacemos la siguiente modificación:

{
        "name": "Default color scheme for shell prompts",
        "groups": {
                "hostname":         { "fg": "brightyellow", "bg": "mediumorange", "attrs": [] },
                "environment":      { "fg": "white", "bg": "darkestgreen", "attrs": [] },
                "mode":             { "fg": "darkestgreen", "bg": "brightgreen", "attrs": ["bold"] },
                "superuser":             { "fg": "brightred", "bg": "white", "attrs": ["bold"] },
                "attached_clients": { "fg": "white", "bg": "darkestgreen", "attrs": [] }
        },
        "mode_translations": {
                "vicmd": {
                        "groups": {
                                "mode": {"fg": "darkestcyan", "bg": "white", "attrs": ["bold"]}
                        }
                }
        }
}

Luego habría que cambiar el archivo principal del tema .config/powerline/colorschemes/shell/__main__.json:

{
        "groups": {
                "continuation":         "cwd",
                "continuation:current": "cwd:current_folder",
                "exit_fail":            "critical:failure",
                "exit_success":         "critical:success",
                "jobnum":               "information:priority",
                "superuser":            "mysuperuser"
        }
}

Hay cambios que no se aplican directamente, para este tipo de casos hacer lo siguiente:

# powerline-daemon --replace

Para cambiar de tema:

cp /usr/local/lib/python3.6/site-packages/powerline/config_files/themes/unicode_terminus_condensed.json .config/powerline/themes/shell/default.json

Y luego recargar el daemon.

PureLine

Otra alternativa escrita por Chris Marsh es Pureline3, que ofrece un prompt al estilo de Powerline pero escrito en bash.

PureLine

Instalación de pureline

  • Clonar el repositorio

# git clone https://github.com/chris-marsh/pureline.git

  • Copiar el directorio

cp -r pureline ~/.pureline

  • Entrar en el diretorio

cd pureline/

  • Usar alguno de los archivos de configuración existentes:

cp configs/powerline_full_256col.conf ~/.pureline.conf

  • Agregar la línea siguiente en ~/.bashrc:

source ~/.pureline/pureline .pureline.conf

  • Y recargar la configuración de bash:

souce ~/.bashrc

Configuración de PureLine

Editando el archivo ~/.pureline.conf se puede modificar a gusto el prompt:

Configurando PureLine

Quedaría así:

E incluso se puede cambiar el símbolo principal del prompt:

Full Custom

Nota sobre fuentes

Hay dos maneras básicamente en que un prompt muestre bien los glifos (por ejemplo flechas y otros símbolos especiales): usar la fuente PowerlineSymbols.otf (en Fedora está en el paquete powerline-fonts) como secundaria para una de las fuentes existentes o instalar una fuente parcheada4.

Conclusión

Un prompt puede resultar una herramienta que proporcione información muy útil y también para diferenciar hosts al loguearnos. De estas opciones me parece la mejor PureLine ya que está escrita en bash, la configuración es más natural y sencilla. Powerline usa de acuerdo a ps_mem unos 12 MB de memoria RAM. No obstante, de acuerdo a su propio sitio de desarrollo hay que tener en cuenta que las próximas versiones de PureLine puede cambiar el modo de configuración, por lo tanto sus archivos podrían necesitar necesitar cambios.

Resumen y Enlaces de Interés


Mi nombre es Sergio Belkin. Hace más de 15 años que trabajo con Linux y software libre. Una de las cosas que más me fascinan son las distintas maneras de aprender, re-aprender, y des-aprender.

Aprender algo nuevo puede ser fácil, difícil, desafiante, temible o irritante. Mis primeros tipos de educación fueron fundamentalmente conductistas y/o constructivistas. Con el tiempo uno va aprendiendo nuevas maneras, valga la redundancia de "aprender".

Muchos toman el aprendizaje como la incorporación de nuevos conocimientos. Muchos también hablan de hacer un "clic". Es decir, descubrís algo que te cambia de una manera abrupta, aprendés algo que te cambia para siempre, de manera unidireccional y definitivo. Más bien creo en los aprendizajes por niveles de profundidad. Me explico, supongamos que para aprender C, hace falta saber B, y para aprender B hace falta saber A. Un enfoque muy convencional es "aprendo A, aprendo B, aprendo C". En realidad creo que uno va dando clics cada vez más profundos.

Es decir, en lugar de sencillamente:

A->B->C

es mejor:

A0->B0->C0... An->Bn->Cn

Cada iteración profundiza lo aprendido y va redescubriendo nuevas cosas. Obviamente hay muchos casos que profundizar en "A, B y C" quedan obsoletos y allí tenemos que desaprender y aprender otra vez.

Diagrama de netfilter/iptables

netfilter/iptables

Claves

  • Las reglas se organizan en tablas: raw, mangle, nat, filter.
  • Las tablas tienen cadenas, filter, por ejemplo tiene INPUT, OUTPUT y FORWARD. Y como se puede apreciar las decisiones de routing implican que INPUT y FORWARD son excluyentes. Lo mismo que OUTPUT y FORWARD.
  • El orden siempre es raw, mangle, nat, filter (si es que están presentes).
  • Hay 3 lugares en que se decide el ruteo, uno de los cuales es local.
  • Solamente se filtra en filter, obviamente.

Más?

3 comandos sorprendentes para redes en Linux


1. Ver la configuración de una conexión vpn

Esto es para NetworkManager:

$ nmcli -t --mode multiline   -f vpn.data connection sh sb`

2. Ver conexiones sin cerrar

# watch -dc ss -ntapei -o state close-wait
Every 2,0s: ss -ntapei -o state close-wait                     dublin.ireland.home: Tue Sep 24 21:22:34 2019

Recv-Q     Send-Q           Local Address:Port            Peer Address:Port
1          0                     10.8.0.2:52642           13.33.131.20:443       users:(("plasma-browser-",p
id=6307,fd=168)) uid:1000 ino:89490 sk:322 -->
         ts sack cubic wscale:8,7 rto:316 rtt:113.283/26.037 ato:40 mss:1345 pmtu:1500 rcvmss:1345 advmss:14
48 cwnd:10 bytes_sent:1297 bytes_acked:1298 bytes_received:9627 segs_out:24 segs_in:20 data_segs_out:9 data_
segs_in:12 send 949.8Kbps lastsnd:16878831 lastrcv:16931986 lastack:16878730 pacing_rate 1.9Mbps delivery_ra
te 336.3Kbps delivered:10 app_limited busy:726ms rcv_space:14480 rcv_ssthresh:64088 minrtt:92.968

3. Ver Access Points disponibles

nmcli d wifi

Estadísticas generales de sockets

El archivo /proc/net/sockstat muestra una síntesis muy útil de cada tipo de socket:

# cat /proc/net/sockstat

sockets: used 435
TCP: inuse 29 orphan 0 tw 10 alloc 58 mem 2
UDP: inuse 101 mem 83
UDPLITE: inuse 0
RAW: inuse 0
FRAG: inuse 0 memory 0

Interesante ¿no?

Creación de Archivos Temporales

Algo bastante frecuente es crear archivos temporales a mano para probar cierto código. Estaba bastante acostumbrado a crear archivos del tipo /tmp/q[0-9]. Así, terminaba con muchos archivos con ese patrón. Hay varios problemas con eso, uno de ellos es que si ya tenemos abierto un archivo /tmp/q1 por ejemplo, podemos fácilmente olvidar eso y abrirlo en otra shell con vim. Y ya sabemos como nuestro querido editor se molesta (y con razón en esos casos). Un truco que se me había ocurrido era crear un alias de este tipo: alias viq='alias viq='vi /tmp/q$(date +'%s')'

El problema con ese approach es que no era reutilizable. Es decir al ejecutarlo de vuelta abría un archivo con otro nombre. Existe una opción que es tal vez mejor y es usar el comando mktemp.

Ejemplo:

mktemp 
/tmp/tmp.7WUOKYMTEQ

Es decir, crea el archivo /tmp/tmp.7WUOKYMTEQ

Si el archivo deseamos crearlo en otro lugar, sencilamente hacemos algo así:

mktemp -d /home/sergio/temp

También podemos editar el archivo directamente:

mktemp|xargs vim -

10 Trucos poderosos con RPM

Nota: Los nombres de los paquetes están puestos como ejemplos

1. Mostrar los tipos de archivos que contiene un paquete

rpm -q --fileclass zram

2. Mostrar el orden y fecha en que fueron instalados los paquetes

rpm -qa --last --qf '%{name}\n'|tac

3. Mostrar los nombres (y solamente los nombres!) de todos los paquetes instalados

rpm -qa --qf '%{name}'|sort

4. Ver los cambios que tiene un paquete en su versión

rpm -q --changes neovim|less

5. Ver lo que hace un paquete al instalarse/desinstalarse

rpm -q --scripts mariadb-server

6. Restaurar los permisos predeterminados

rpm --restore mariadb

Este comando restaura los permisos, propietarios y capacidades de los archivos. No reestablece marcas de tiempo.

7. Extraer los archivos de un paquete

cd /tmp
dnf download mariadb-server # Aquí puede usarse también yumdownloader
mkdir mariadb-server
mv mariadb-server*rpm mariadb-server
cd mariadb-server
rpm2cpio mariadb-server  | cpio -imdv

8. Listar los paquetes duplicados

rpm -qa --dupes

9. Encontrar el archivo de licencia del paquete

rpm -qL firefox

10. Operar por red

Las operaciones con rpm se pueden realizar también con direcciones remotas, como se muestra en la imagen inferior:

RPM por red

Más información

rpm.org - Home

Manejo eficiente de marcadores

Hace algún tiempo les había presentado a buku, un gestor de línea de comandos de marcadores. Usar Firefox y buku rompe un poco el flujo de trabajo al tener que ir a una línea de comandos. Entonces aquí es cuando bukubrow, un complemento escrito por Sam A. Horvath-Hunt viene al rescate. Se trata de una extensión para Firefox que funciona como interfaz gráfica de buku:

buku

Con esta extensión podemos buscar, agregar, editar, borrar marcadores, abrirlos en ventanas y/o pestañas. Todos eso se puede hacer o bien accediendo al botón en la barra de herramientas como haciendo clic derecho sobre la página deseada. Es importante tener en cuenta que es necesario bajar e instalar la bukubrow-host que sirve para conectar buku con la extensión. Esta aplicación usa un archivo json para conectarse con la extensión de Firefox:

{"name":"com.samhh.bukubrow","description":"Bukubrow host for the Firefox extension","path":"/usr/local/bin/bukubrow-linux-x64","type":"stdio","allowed_extensions":["bukubrow@samhh.com"]}

De esta manera podemos manipular la base de buku directamente desde Firefox :wink:

Más información: Native messaging - Mozilla | MDN

Tabla comparativa Microsoft Windows, OS X y Linux

Esta es una tabla comparativa resumida de los 3 sistemas operativos principales en la actualidad. Si bien Wikipedia cuenta con una muy buena, decidí hacer una resumida con los datos que a mí entender son los más buscados e interesantes.

Windows OS X Linux
Licencia Propietaria Propietaria Libre
Tipo de desarrollo Código fuente cerrado Código fuente cerrado (con componentes libres) Código fuente abierto
Kernel Híbrido Híbrido Monolítico
Año de creación 1985 2001 1991
GUI (Interfaz gráfica de usuario) Windows Shell Aqua Hay múltiples para elegir
Idiomas soportados 138 381 Más de 500
Principales Sistemas de archivos NTFS,FAT32, exFAT HFS, HFS Plus, Apple FIle System ext4, xfs, zfs
Versiones para teléfonos celulares Windows CE iOS Android, Tizen, Ubuntu Touch, SailfishOS, Plasma Mobile, etc.
Arquitecturas soportadas ARM, IA-32, ARM64, Itanium, x86-64, DEC Alpha, MIPS, PowerPC x86_64 Alpha, ARC, ARM, C6x, H8/300, Hexagon, Itanium, m68k, Microblaze, MIPS, NDS32, Nios II, OpenRISC, PA-RISC, PowerPC, RISC-V, s390, SuperH, SPARC, Unicore32, x86, Xtensa

Fuente y más información: - macOS - Wikipedia


  1. Es una estimación aproximada de acuerdo a Debian -- Archivos PO en Debian, para cada idioma. Tener en cuenta que Linux es heterogéneo: depende del software referido y también de la distribución. 

10 extensiones recomendadas para Firefox

Estas son 10 extensiones que recomiendo para usar en Firefox:

Complementos de Firefox

1 Copy as Markdown

Esta extensión permite copiar un link como markdown, es realmente útil para luego pegarlo en cualquier editor que soporte ese lenguaje.

2 DuckDuckGo Privacy Essentials

Esta extensión proporciona el grado de privacidad que posee un sitio de acuerdo a : - Si es una conexión cifrada - Cantidad de rastreadores - Prácticas de privacidad

3 Markdown Here

Esta extensión permite escribir en cajas de texto formateado en lenguaje markdown y luego con un clic hacer que lo convierta en html interpretado

4 Max Tabs (Web Extension)

Muchas veces corremos la tentación de tener infinidad de pestañas abiertas, esto además de consumir recursos, resulta caótico y nos saca de foco. Esta extensión pone un límite a la cantidad de solapas abiertas.

5 Plasma Integration

Logra que Firefox y el entorno de escritorio Plasma trabajen mejor en conjunto permitiendo: - Manejar los controles multimedia - Enviar archivos al teléfono celular usando KDE Connect - Mostrar archivos descargados

6 Save-to-Read

Aunque parecería algo trivial hace algo muy útil con unos clics guarda las páginas que deseamos leer en otro momento en carpeta especial de los Marcadores.

7 PrivacyBadger

Esta extensión es un proyecto de la Electronic Frontier Foundation se complementa de manera genial con la de DuckDuckGo ya bloquea de manera automática cookies y/o dominios con la posibilidad de personalizar la configuración en el caso de que algún sitio no funcione correctamente con algún bloqueo aplicado.

8 TrackMeNot

Este complemento es una idea ingeniosa de Daniel C. Howe (artista y crítico de tecnología) y Helen Nissebaum (Profesora de ciencia de la información en Cornell Tech) para evitar la vigilancia electrónica. En lugar de ocultar o cifrar nuestra actividad en Internet, hace uso del ruido y de la obfuscación: realiza búsquedas aleatorias en segundo plano en los principales motores de búsqueda.

9 uBlock Origin

Esta extensión cuyo autor es Raymond Hill, es una de las más populares tal vez y sirve para bloquear publicidad y molestas ventanas emergentes.

10 Vivaldifox

El nombre de esta extensión se debe a una característica del aspecto visual del navegador Vivaldi. Aplica colores en la barra de Firefox de acuerdo al contenido del sitio, más allá de ser un toque estilístico es de ayuda también para identificar a las pestañas abiertas.

VivaldiFox