Los ficheros de inicio de Bash
tipos de shell
- Interactivo: permite interactuar, ejecutando comandos introducidos desde el teclado.
- No Interactivo: ejecuta los comandos desde un script
- De Inicio: los shells que se ejecutan justo después de haberse identificado. Son los que solicitan usuario y contraseña (versus los interactivos que no la solicitan, que no serían de inicio)
inicio + interactivo
- /etc/profile: afecta a todos los usuarios
- /etc/bash.bashrc: llamado por el anterior, afecta a todos los usuarios
- ~/.profile: cada usuario tiene el suyo y se lo puede personalizar. Existen nombres alternativos a este fichero con la misma función y solo se ejecutará uno de ellos, en este orden:
- ~/.bash_profile
- ~/.bash_login
- ~/.profile
- ~/.bashrc: llamado por el anterior
- ~/.bash_logout: ejecutado a la salida del usuario
- /etc/bash.bash_logout: ejecutado a la salida de todos los usuarios.
no inicio + interactivo
- /etc/bash.bashrc
- ~/.bashrc
no inicio + no interactivo
Solo ejecutará el fichero indicado por la variable de entorno BASH_ENV, que indica la ruta absoluta al fichero y se ejecutará antes de ejecutar el script
export BASH_ENV=/home/usuario/.inicio
/via: https://www.fpgenred.es/GNU-Linux/ficheros_de_arranque.html
orden de ejecución al iniciar sesión
proceso de login
# | Login Shell | Interactive Shell | Comentari |
---|---|---|---|
1 | /etc/profile | ||
2 | /etc/bash.bashrc | /etc/bash.bashrc | o /etc/bashrc |
3 | ~/.bash_profile | Solo uno de estos, en este orden | |
~/.bash_login | |||
~/.profile | |||
4 | ~/.bashrc | ~/.bashrc |
al salir:
- ~/.bash_logout
- /etc/bash_logout o /etc/bash.bash_logout
macintosh
- /etc/profile → <home>/.bash_profile
- /etc/bashrc → <home>/.bashrc
- variables de entorno
- variables shell
añadir en /etc/profile: source /etc/bashrc
añadir en <home>/.bash_profile: source <home>/.bashrc
scripts de inicio
/etc/profile
Aquí se muestra un fichero /etc/profile básico. Este fichero comienza estableciendo ciertas funciones auxiliares y algunos parámetros básicos. Especifica varios parámetros del historial de bash y, por razones de seguridad, desactiva el almacenamiento de un fichero de historial permanente para root. También establece un símbolo del sistema por defecto. Entoces invoca a pequeños guiones de propósito único en el directorio /etc/profile.d para proporcionar una mayor inicialización.
# Inicio de /etc/profile # Escrito para Más Allá de Linux From Scratch # por James Robertson <jameswrobertson@earthlink.net> # modificaciones por Dagmar d'Surreal <rivyqntzne@pbzpnfg.arg> # Variables de entorno del sistema y programas de inicio. # Alias del sistema y funciones deberían estar en /etc/bashrc. Variables # de entorno personales y programas de inicio deberían estar en # ~/.bash_profile. Alias personales y funciones deberían estar en # ~/.bashrc. # Función para ayudarnos a manejar rutas. El segundo argumento es # el nombre de la variable de ruta a modificar (por defecto PATH) pathremove () { local IFS=':' local NEWPATH local DIR local PATHVARIABLE=${2:-PATH} for DIR in ${!PATHVARIABLE} ; do if [ "$DIR" != "$1" ] ; then NEWPATH=${NEWPATH:+$NEWPATH:}$DIR fi done export $PATHVARIABLE="$NEWPATH" } pathprepend () { pathremove $1 $2 local PATHVARIABLE=${2:-PATH} export $PATHVARIABLE="$1${!PATHVARIABLE:+:${!PATHVARIABLE}}" } pathappend () { pathremove $1 $2 local PATHVARIABLE=${2:-PATH} export $PATHVARIABLE="${!PATHVARIABLE:+${!PATHVARIABLE}:}$1" } if [ $EUID -eq 0 ] ; then unset HISTFILE fi # Define algunas variables de entorno. export HISTSIZE=1000 export HISTIGNORE="&:[bf]g:exit" #export PS1="[\u@\h \w]\\$ " export PS1='\u@\h:\w\$ ' for script in /etc/profile.d/*.sh ; do if [ -r $script ] ; then . $script fi done # Ahora hacemos limpieza unset pathremove pathprepend pathappend # Fin de /etc/profile
/etc/profile.d
install --directory --mode=0755 --owner=root --group=root /etc/profile.d
/etc/profile.d/dircolors.sh
Este guión utiliza los ficheros ~/.dircolors y /etc/dircolors para controlar el color de los nombres de ficheros en un listado de directorio. Controla la salida colorizada de cosas como ls –color.
# Setup for /bin/ls to support color, the alias is in /etc/bashrc. if [ -f "/etc/dircolors" ] ; then eval $(dircolors -b /etc/dircolors) if [ -f "$HOME/.dircolors" ] ; then eval $(dircolors -b $HOME/.dircolors) fi fi alias ls='ls --color=auto'
/etc/profile.d/extrapaths.sh
Este guión añade varias rutas útiles a las variables de entorno PATH y PKG_CONFIG_PATH. Si quieres, puedes descomentar la última sección para añadir un punto al final de tu ruta. Esto te permitirá lanzar ejecutables del directorio actual sin especificar ./, sin embargo quedas avisado de que esto se considera un grave riesgo de seguridad.
if [ -d /usr/local/lib/pkgconfig ] ; then pathappend /usr/local/lib/pkgconfig PKG_CONFIG_PATH fi if [ -d /usr/local/bin ]; then pathprepend /usr/local/bin fi if [ -d /usr/local/sbin -a $EUID -eq 0 ]; then pathprepend /usr/local/sbin fi for directory in $(find /opt/*/lib/pkgconfig -type d 2>/dev/null); do pathappend $directory PKG_CONFIG_PATH done for directory in $(find /opt/*/bin -type d 2>/dev/null); do pathappend $directory done if [ -d ~/bin ]; then pathprepend ~/bin fi #if [ $EUID -gt 99 ]; then # pathappend . #fi
/etc/profile.d/readline.sh
Este guión establece el fichero de configuración inputrc por defecto. Si el usuario no tiene ajustes personales, utiliza el fichero global.
# Setup the INPUTRC environment variable. if [ -z "$INPUTRC" -a ! -f "$HOME/.inputrc" ] ; then INPUTRC=/etc/inputrc fi export INPUTRC
/etc/profile.d/tinker-term.sh
Algunas aplicaciones necesitan una configuración específica de TERM para soportar color.
# This will tinker with the value of TERM in order to convince certain # apps that we can, indeed, display color in their window. if [ -n "$COLORTERM" ]; then export TERM=xterm-color fi if [ "$TERM" = "xterm" ]; then export TERM=xterm-color fi
/etc/profile.d/umask.sh
Establecer el valor de umask es importante para la seguridad. Aquí desactivamos los permisos de escritura para el grupo para los usuarios del sistema y cuando el nombre del usuario y el nombre del grupo no son el mismo.
# By default we want the umask to get set. if [ "$(id -gn)" = "$(id -un)" -a $EUID -gt 99 ] ; then umask 002 else umask 022 fi
/etc/profile.d/X.sh
Si X está instalado, actualizamos también las variables PATH y PKG_CONFIG_PATH.
if [ -x /usr/X11R6/bin/X ]; then pathappend /usr/X11R6/bin fi if [ -d /usr/X11R6/lib/pkgconfig ] ; then pathappend /usr/X11R6/lib/pkgconfig PKG_CONFIG_PATH fi
/etc/profile.d/xterm-titlebars.sh
Este guión muestra un ejemplo de un método diferente para establecer el símbolo del sistema. La variable normal, PS1, se suplementa con PROMPT_COMMAND. Si está establecido, el valor de PROMPT_COMMAND se ejecuta como comando antes de mostrar cada símbolo del sistema primario.
# The substring match ensures this works for "xterm" and "xterm-xfree86". if [ "${TERM:0:5}" = "xterm" ]; then PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME} : ${PWD}\007"' export PROMPT_COMMAND fi
/etc/profile.d/i18n.sh
Este guión muestra cómo establecer ciertas variables de entorno necesarias para el soporte del idioma nativo. Establecer correctamente estas variables te ofrece:
- La salida de los programas traducida a tu idioma nativo.
- Una correcta clasificación de caractéres en letras, dígitos y otras clases. Esto es necesario para que Bash acepte correctamente las pulsaciones de teclado en locales diferentes al inglés.
- La ordenación alfabética correcta para tu país.
- El tamaño de papel correcto
- El formato correcto para los valores de moneda, fecha y hora.
- Sustituye [ll] con el código de dos letras de tu lenguaje (por ejemplo, “es”) y [CC] con el código de dos letras de tu país (por ejemplo, “ES”). También puedes necesitar especificar (y en realidad esta es la forma preferida) tu codificación de caractéres (por ejemplo, “iso8859-15”) después de un punto (con lo que el resultado sería “es_ES.iso8859-15”). Ejecuta el siguiente comando para obtener más información:
man 3 setlocale
- La lista de todas las locales soportadas por Glibc puede obtenerse ejecutando el siguiente comando:
locale -a
# Set up i18n variables export LC_ALL=[ll]_[CC] export LANG=[ll]_[CC] export G_FILENAME_ENCODING=@locale
- La variable LC_ALL establce el mísmo valor para todas las categorías de la locale. Para un mejor control, puede que quieras establecer valores individuales para todas la categorías listads en la salida del comando locale.
- La variable G_FILENAME_ENCODING le indica a aplicaciones como Glib y GTK+ que los nombre de fichero están en la codificación de la localey no en UTF-8 como asumen por defecto.
/etc/bashrc
Aquí se muestra un fichero /etc/bashrc básico.
# Begin /etc/bashrc # Written for Beyond Linux From Scratch # by James Robertson <jameswrobertson@earthlink.net> # updated by Bruce Dubbs <bdubbs@linuxfromscratch.org> # Make sure that the terminal is set up properly for each shell if [ -f /etc/profile.d/tinker-term.sh ]; then source /etc/profile.d/tinker-term.sh fi if [ -f /etc/profile.d/xterm-titlebars.sh ]; then source /etc/profile.d/xterm-titlebars.sh fi # System wide aliases and functions. # System wide environment variables and startup programs should go into # /etc/profile. Personal environment variables and startup programs # should go into ~/.bash_profile. Personal aliases and functions should # go into ~/.bashrc # Provides a colored /bin/ls command. Used in conjunction with code in # /etc/profile. alias ls='ls --color=auto' # Provides prompt for non-login shells, specifically shells started # in the X environment. [Review the LFS archive thread titled # PS1 Environment Variable for a great case study behind this script # addendum.] #export PS1="[\u@\h \w]\\$ " export PS1='\u@\h:\w\$ ' # End /etc/bashrc
~./bash_profile
Aquí se muestra un fichero ~/.bash_profile básico. Si quieres que cada nuevo usuario tenga este fichero automáticamente, basta con que cambies la salida del siguiente comando a /etc/skel/.bash_profile y compruebes los permisos tras la ejecución del comando. Entonces puedes copiar /etc/skel/.bash_profile a los directorios personales de los usuarios que ya existan, incluido root, y estableces correctamente el grupo y propietario.
# Inicio de ~/.bash_profile # Escrito para Más Allá de Linux From Scratch # por James Robertson <jameswrobertson@earthlink.net> # actualizado por Bruce Dubbs <bdubbs@linuxfromscratch.org> # Variables de entorno personales y programas de inicio # Alias personales y funciones deberían estar en ~/.bashrc. Variables de # entorno del sistema y programas de inicio deberían estar en /etc/profile. # Alias del sistema y funciones están en /etc/bashrc. append () { # Primero elimina el directorio local IFS=':' local NEWPATH for DIR in $PATH; do if [ "$DIR" != "$1" ]; then NEWPATH=${NEWPATH:+$NEWPATH:}$DIR fi done # Luego añade el directorio export PATH=$NEWPATH:$1 } if [ -f "$HOME/.bashrc" ] ; then source $HOME/.bashrc fi if [ -d "$HOME/bin" ] ; then append $HOME/bin fi unset append # Fin de ~/.bash_profile
~/.bashrc
# Inicio de ~/.bashrc # Escrito para Más Allá de Linux From Scratch # por James Robertson <jameswrobertson@earthlink.net> # Alias personales y funciones # Variables de entorno personales y programas de inicio deberían estar en # ~/.bash_profile. Variables de entorno del sistema y programas de inicio # están en /etc/profile. Alias del sistema y funciones están en # /etc/bashrc. if [ -f "/etc/bashrc" ] ; then source /etc/bashrc fi # Fin de ~/.bashrc
~/.bash_logout
Comprobarás que el fichero ~/.bash_logout no incluye un comando clear. Esto es porque el borrado de la pantalla se indica en el fichero /etc/issue.
Otros ficheros
/etc/issue
Cuando inicies por primera vez tu nuevo sistema LFS, la pantalla de entrada al sistema será bien sencilla (como debe ser en un sistema esencial). Sin embargo, mucha gente querrá que su sistema muestre alguna información en el mensaje de entrada. Esto se puede conseguir utilizando el fichero /etc/issue.
El fichero /etc/issue es un fichero de texto plano que también aceptará algunas secuencias de Escape (ver más abajo) para insertar información sobre el sistema. Además existe el fichero issue.net que puede usarse cuando se ingresa en el sistema remotamente. Sin embargo, ssh sólo lo usará si estableces la opción en su fichero de configuración y, además, no interpretará las secuencias de escape que se describen más abajo.
Una de las cosas más comunes que la gente quiere hacer es borrar la pantalla en cada entrada al sistema. Lo más sencillo es poner una secuencia de escape «clear» (borrar) en /etc/issue. Una forma simple de hacerlo es con clear > /etc/issue. Esto insertará el código de escape pertinente al principio del fichero /etc/issue. Advierte que si haces esto, cuando edites el fichero deberías dejar el carácter ^[c de la primera línea.
agetty (el programa que normalmente analiza /etc/issue) reconoce las siguientes secuencias de escape. Esta información proviene de man agetty, donde puedes encontrar información adicional sobre el proceso de entrada al sistema.
El fichero issue puede contener ciertos códigos de escape para mostrar diferente información. Todos los códigos de escape consisten en una barra invertida (\) seguida de una de las letras que se explican más abajo (por lo que \d en /etc/issue insertaría la fecha actual).
b Inserta la velocidad en baudios de la línea actual. d Inserta la fecha actual. s Inserta el nombre del sistema, el nombre del sistema operativo. l Inserta el nombre de la línea tty actual. m Inserta el identificador de la arquitectura de la máquina, i486 por ejemplo. n Inserta el nombre de nodo de la máquina, también conocido como nombre de máquina (hostname). o Inserta el nombre del dominio de la máquina. r Inserta la versión del núcleo, por ejemplo 2.4.16. t Inserta la hora actual. u Inserta el número de usuarios conectados en ese momento. U Inserta la cadena "1 user" o "<n> users" dónde <n> es el número de usuarios conectados en ese momento. v Inserta la versión del SO, por ej. la fecha de creación, etc.
/etc/dircolors
Si quieres utilizar las capacidades de dircolors ejecuta el siguiente comando. Los pasos anteriores para /etc/skel también pueden usarse para facilitar un fichero ~/.dircolors cuando se añade un nuevo usuario. Como antes, basta con cambiar el nombre del fichero de salida en el siguiente comando y asegurar que los permisos, propietario y grupo son los correctos en los ficheros creados y/o copiados.
dircolors -p > /etc/dircolors
Si deseas personalizar los colores utilizados para diferentes tipos de ficheros, puedes editar el fichero /etc/dircolors. Las instrucciones para establecer los colores se encuentran en dicho fichero.
/via: http://www.escomposlinux.org/lfs-es/blfs-es-6.0/postlfs/profile.html