Professional Documents
Culture Documents
Que indicaría al usuario (sergio) y el equipo en el que está (linuxtotal), ~ indica HOME (en este
caso /home/sergio) o directorio de inicio, esta parte cambia cada vez que se ingresa a otro
directorio:
[sergio@linuxtotal ~]$ cd /etc
[sergio@linuxtotal etc]$
Algo útil, pero porque mejor no personalizarlo a nuestro gusto, asi que empezemos por partes.
Se puede apreciar que se utilizan secuencias de escapes para ir construyendo el prompt, cada
secuencia se indica con '\' seguido de un comando como 'u' (user) o 'h' (host), los demás caracteres
como [,],@, espacio, etc. son opcionales y puedes elegirlos tu al acomodo que desees, las
secuencias de escape son las siguientes:
• \a un caracter ASCII de ring
• \d la fecha actual en formato "dia_sem mes día", "dom nov 18"
• \e un caracter ASCII de escape
• \h el nombre del equipo hasta el primer ., ejemplo linuxtotal de linuxtotal.com.mx
• \H el nombre del equipo
• \n nueva línea
• \r retorno de carro, enter
• \s el nombre del shell
• \t el tiempo actual en formato de 24 horas HH:MM:SS
• \T el tiempo actual en formato de 12 horas HH:MM:SS
• \@ el tiempo actual en formaro de 12 horas con am/pm
• \u el usuario actual
• \v la version de bash
• \V el número de release de batch, versión + parche
• \w el directorio de trabajo actual, path
• \W el nombre del directorio actual
• \! el número en el historial del comando
• \# el número de comando de este comando
• \$ si el usuario es root (UID=0) se indica un '#', un usuario normal '$'
• \\ diagonal
• \[ inicio de una secuencia de caracteres no imprimibles
• \] fin de la secuencia de caracteres no imprimibles
Solo se indica el cambio a PS1, con PS1=' ', entre las comillas simples va la nueva secuencia que se
desea, asi que personaliza el tuyo.
Puedes probar en una terminal escribiendo lo siguiente: tput setaf 1 y el texto se cambiará a
rojo y puedes añadir por ejemplo un fondo verde tput setb 2 y te dará un fondo verde para el
text. Asi que digamos, en base al prompt anterior, que se desea la hora en rojo y negritas, esto lo
haría:
(20:05:52)[sergon-~]$> PS1='\[$(tput setaf 1)(\t)$(tput sgr0)\][\u-\W]\$> '
(20:06:43)[sergon-~]$>
mmmm, un poco complicado, veamos por partes:
• \[ inicio de secuencia de caracteres no imprimibles
• $(tput setaf 1) cambia a color rojo el texto, $(comando) expande el resultado de un comando
que se ejecuta
• (\t) lo que se ve visible en pantalla (20:06:43)
• $(tput sgr0) apagamos los atributos, si no lo hacemos todo quedará en rojo
• \] termina la secuencia de caracters no imprimibles
No es tan complicado una vez que entendimos lo que sucede. Y es posible agregar más
características en un sola invocación de $(), $(tput bold; tput setaf 1).
Ahora bien, una vez cambiado tu prompt, este no permanecerá así, si cierras la sesión o la terminal
y vuelves a ingresar, notarás que sigues con tu mismo y aburrido prompt de siempre, el cambio a la
variable PS1 hay que agregarlo a tu archivo de inicialización de tu sesión, generalmente '.bashrc' o
'.bash_profile', incluso podrías poner los colores en variables, para facilitar el uso de la definición
de PS1:
# se añade lo siguiente a .bashrc
# colores del texto
rojo=$(tput setaf 1)
verde=$(tput setaf 2)
# colores de fondo
azulF=$(tput setab 4)
grisF=$(tput setab 7)
# sin color
sc=$(tput sgr0)
PS1='\[$rojo(\t)$sc\][\u-\W]\$> '
Pues ahí lo tienes, ahora cambia tu prompt a algo que te agrade más a ti y te sea más útil.
Indicadores Basicos
Las siguientes configuraciones son útiles para distinguir el indicador de root de otros usuarios sin
privilegios:
• Edita el archivo de configuración personal de Bash:
$ nano ~/.bashrc
• Edita el archivo .bashrc del root; copialo desde /etc/skel si no existe aún:
# nano /root/.bashrc
Este indicador tiene las caracteristicas de que el nombre de usuario esta en verde, el directorio de
trabajo en azul claro, un indicador $ en verde claro y la escritura de texto en blanco.
Editar el indicador del usuario root:
sudo vim /root/.bashrc
Este indicador tiene las caracteristicas de que el nombre 'root' esta en rojo, el directorio de trabajo
en azul claro, un indicador # en rojo y la escritura de texto en un horrible, tipo matrix, verde. ;)
Esta es la lista de algunos códigos de color para bash:
Negro 0;30 Gris Obscuro 1;30
Azul 0;34 Azul Claro 1;34
Verde 0;32 Verde Claro 1;32
Cyan 0;36 Cyan Claro 1;36
Rojo 0;31 Rojo Claro 1;31
Purpura 0;35 Fiuscha 1;35
Café 0;33 Amarillo 1;33
Gris Claro 0;37 Blanco 1;37
Reemplazar el digito 0 con 1 para obtener la versión del color claro, experimenta a tu gusto, y revisa
el extracto de las páginas del manual de bash a continuación para además personalizar los carácteres
especiales de escape.
Consejo:
\[ comienza un secuencia de carácteres no imprimibles
\] termina un secuencia de carácteres no imprimibles
Más personalizaciones para el indicador de Bash
• Editar el archivo ~/.bashrc comentando el indicador inicial de Arch:
# PS1='[\u@\h \W]\$ '
Los carácteres \[ y \] son necesarios para evitar problemas con saltos de linea en la terminal.
También puede ser deseable editar el archivo /root/.bashrc con un conjunto de entradas
similares, usando RED para distiguir al usuario en la opción \u.
Diferentes opciones pueden ser personalizadas con la secuencia de escape de la forma \x (extraidas
de las páginas del manual de bash):
Bash permite agregar estas cadenas al indicador mediante la inserción de
caracteres especiales escapados con diagonal invertida que se decodifican como
sigue:
Indicadores Avanzados
Wolfman
After reading through most of the Bash Prompt Howto, I developed a color bash prompt that
displays the last 25 characters of the current working directory. This prompt should work well on
terminals with a black background. The following code goes in your home directory's .bashrc
file.
• Comment out Arch's default prompt.
# PS1='[\u@\h \W]\$ '
• Next add the bash_prompt_command function. If you have a couple directories with long
names or start entering a lot of subdirectories, this function will keep the command prompt
from wrapping around the screen by displaying at most the last pwdmaxlen characters from
the PWD. This code was taken from the Bash Prompt Howto's section on Controlling the
Size and Appearance of $PWD and modified to replace the user's home directory with a
tilde.
##################################################
# Fancy PWD display function
##################################################
# The home directory (HOME) is replaced with a ~
# The last pwdmaxlen characters of the PWD are displayed
# Leading partial directory names are striped off
# /home/me/stuff -> ~/stuff if USER=me
# /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20
##################################################
bash_prompt_command() {
# How many characters of the $PWD should be kept
local pwdmaxlen=25
# Indicate that there has been dir truncation
local trunc_symbol=".."
local dir=${PWD##*/}
pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
NEW_PWD=${PWD/#$HOME/\~}
local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
if [ ${pwdoffset} -gt "0" ]
then
NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
fi
}
• This code generates the command prompt. There's not much to this. A bunch of colors are
defined. The user's color for the username, hostname, and prompt ($ or #) is set to cyan, and
if the user is root (root's UID is always 0), set the color to red. The command prompt is set to
a colored version of Arch's default with the NEW_PWD from the last function.
• Also, make sure that your color variables are enclosed in double and not single quote marks.
Using single quote marks seems to give bash problems with line wrapping correctly.
bash_prompt() {
case $TERM in
xterm*|rxvt*)
local TITLEBAR='\[\033]0;\u:${NEW_PWD}\007\]'
;;
*)
local TITLEBAR=""
;;
esac
local NONE="\[\033[0m\]" # unsets color to term's fg color
# regular colors
local K="\[\033[0;30m\]" # black
local R="\[\033[0;31m\]" # red
local G="\[\033[0;32m\]" # green
local Y="\[\033[0;33m\]" # yellow
local B="\[\033[0;34m\]" # blue
local M="\[\033[0;35m\]" # magenta
local C="\[\033[0;36m\]" # cyan
local W="\[\033[0;37m\]" # white
# background colors
local BGK="\[\033[40m\]"
local BGR="\[\033[41m\]"
local BGG="\[\033[42m\]"
local BGY="\[\033[43m\]"
local BGB="\[\033[44m\]"
local BGM="\[\033[45m\]"
local BGC="\[\033[46m\]"
local BGW="\[\033[47m\]"
• Finally, append this code. This ensures that the NEW_PWD variable will be updated when
you cd somewhere else, and it sets the PS1 variable, which contains the command prompt.
PROMPT_COMMAND=bash_prompt_command
bash_prompt
unset bash_prompt
• If you want to play around with the colors of this prompt, open your .bashrc file in a text
editor. When you want to see what the new prompt looks like, enter the following from your
home directory, and the prompt will immediately change.
$ source ~/.bashrc
Me mostrará lo siguiente:
Por orden de uso, vemos los comandos utilizados recientemente en el sistema operativo. Si listamos
el fichero .bash_history con el comando cat, veremos idéntico resultado, ya que es en éste fichero
donde se guarda dicho historial.
1 cat .bash_history
Y nos listará la información:
Aún así history, por defecto, tiene algunas limitaciones, a 500 o 1000 entradas por usuario, y otra
problema es que si tenemos múltiples ventanas de consola abiertas sólo guardará información de la
primera. Los parámetros del comando están ubicados en el fichero .bashrc, que se pueden
modificar de manera fácil, veamos un ejemplo.
Los parámetros:
1 # for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
2 HISTSIZE=1000
3 HISTFILESIZE=2000
Indican el tamaño del historial y el máximo de ordenes que se almacenarán. Aquí podemos
modificar los parámetros, sustituyendo ambas cantidades por la cifra ‘100000’, para que así siempre
guarde todo el historial.
A continuación:
1 shopt -s histappend
De ésta manera se guardará el historial de todas nuestras terminales, es decir, se irán anexando en
vez de sobrescribirse.
El comando también tiene una serie de parámetros adicionales:
• history -n, muestra el número de líneas.
• history -a, añade los comandos de la sesión actual al archivo de historial.
• history -c, borra todo el historial.
Otra manera de trabajar con el historial de comandos es la combinación de teclas CTRL+R, que
nos permite buscar dentro del historial, buscando por palabra.
También podemos utilizar con el comando history algunos tips interesantes, que he descubierto en
la web del amigo replicante:
• Combinar con el comando tail, para por ejemplo descubrir los últimos comandos utilizados:
$history | tail -10, o bien los 10 primeros: $history | head -10
• Si queremos que se ejecute justo el último de la lista escribimos: !!
• O bien ejecutar un comando específico si sabemos su número en la lista: !74
• Y de forma consecutiva: !54 & !74