Para los que gusten de trabajar en línea de órdenes (con frecuencia es más cómodo. Yo de hecho utilizo X casi exclusivamente para ejecutar algunos programas; toda la gestión de ficheros, retoques al sistema, etc, lo hago desde línea de órdenes).
Los intérpretes de órdenes en UNIX suelen ser muy
configurables. Los usuarios pueden modificarlos o darles órdenes para
automatizar tareas o tener un aspecto algo diferente. El intérprete de
órdenes estándar en Linux (y probablemente el más
potente) es bash, que viene de Bourne Again SHell. El
intérprete Bourne fue el primero, y es el más extendido
en UNIX. bash lo supera con creces.
Hay dos ficheros importantes que mirar a la hora de configurar el
comportamiento del bash: el ~/.bash_profile y el
~/.bashrc. El primero son las órdenes que se ejecutarán
la primera vez que entremos en el intérprete. El segundo contiene las
órdenes que se ejecutarán siempre que entremos. Así,
~/.bash_profile se utiliza para guardar las variables de entorno, y
los datos que definen el perfil de usuario, mientras que
~/.bashrc son las órdenes que se deben ejecutar
siempre que entremos en el intérprete, como llamar a programas
como fortune (que nos genera una cita aleatoria), definir los alias,
etc.
Definir los alias en el ~/.bashrc tiene la ventaja de que se
pueden definir los alias dependiendo de las condiciones en las que se
cargue el intérprete. Por ejemplo, yo defino un alias del vi, para que
ejecute vi -g, que carga la versión para X, pero sólo
quiero que el alias se defina si el intérprete se llama desde X (si se
llama desde X, sólo se carga .bashrc, porque obviamente
tendremos que haber tenido previamente un intérprete cargado, que es
donde está ejecutándose X). Entonces, lo que hago es comprobar
si existe la variable de entorno DISPLAY (las variables de entorno se
explican en otra subsección de esta misma sección), lo que es
una forma cutre pero efectiva de comprobar si X está cargado.
Sólo si está, defino el alias. Aunque para entender
perfectamente lo siguiente habría que saber programación en el
lenguaje del intérprete de órdenes (tienes un
tutorial
en
mi página), y conocer algunas órdenes de UNIX, pongo el
código que hace esto a continuación:
if set | grep DISPLAY &>/dev/null; then
alias vi="vi -g"
fi
Un alias es un nombre de una orden ficticia, que se sustituye por otra
orden (en general, por cualquier ristra que nosotros queramos). Uno de los
usos más útiles es para ``soldar'' opciones a un programa. Es
decir, si hay un programa que siempre vamos a llamar con las mismas opciones
(por ejemplo, se supone que nos gusta el ls en color, y para ello
tenemos que darle la opción --color), es muy útil tener
definido un alias para la propia orden, que sustituya la orden por la orden
más las opciones que queramos. En este caso, queremos que
siempre que escribamos ls al principio de una línea (o sea,
cada vez que llamemos al programa ls), se cambie la ristra
ls por ls --color (y que deje todo lo que fuera
después intacto, por supuesto).
Para ello, nos basta con escribir (si lo queremos siempre, lo
escribiremos en nuestro .bash_profile o .bashrc; las
comillas son importantes)
alias ls="ls --color"
También, si estás acostumbrados a teclear win
para entrar en el entorno de ventanas, y por alguna razón
patológica o política :-) no quieres acostumbrarte a
escribir startx, puedes definirte un alias tal que así
(aquí no hacen falta las comillas porque startx no contiene
espacios):
alias win=startx
Ahí va una lista de alias útiles para el novato, junto con una breve explicación:
alias ll='ls -l' # Si quieres conservar el ls original
alias ls='ls -lF --color' # Listado largo en color
alias mv='mv -i' # \ Pedir confirmación
alias cp='cp -i' # > antes de
alias rm='rm -i' # / sobreescribir
ls en color
Aunque por supuesto no es algo necesario, es muy útil tener
configurado el ls de tal forma que muestre los diferentes tipos de
fichero de un color determinado. Para conseguir esto, lo primero que hay que
hacer es definir cómo queremos los colores. Hay una
configuración del sistema, que se cogerá por defecto si no
especificamos algún fichero en nuestro directorio actual.
Tienes que poner en tu .bash_profile la siguiente orden:
eval `dircolors $HOME/.dir_colors`
Suponiendo que llames .dir_colors al fichero donde tengas la
definición de los colores para el ls, y que lo pongas en tu
directorio raíz ($HOME).
Para que tengas por dónde empezar, te adjunto mi fichero
.dir_colors:
# Sigue el fichero ~/.dir_colors -------------------------------------------- # Configuration file for the color ls utility # This file goes in the /etc directory, and must be world readable. # You can copy this file to .dir_colors in your $HOME directory to override # the system defaults. # COLOR needs one of these arguments: 'tty' colorizes output to ttys, but not # pipes. 'all' adds color characters to all output. 'none' shuts colorization # off. COLOR tty # Extra command line options for ls go here. # Basically these ones are: # -F = show '/' for dirs, '*' for executables, etc. # -T 0 = don't trust tab spacing when formatting ls output. # -b = better support for special characters OPTIONS -F -b -T 0 # Below, there should be one TERM entry for each termtype that is colorizable TERM linux TERM console TERM con132x25 TERM con132x30 TERM con132x43 TERM con132x60 TERM con80x25 TERM con80x28 TERM con80x30 TERM con80x43 TERM con80x50 TERM con80x60 TERM xterm TERM vt100 # EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output) EIGHTBIT 1 # Below are the color init strings for the basic file types. A color init # string consists of one or more of the following numeric codes: # Attribute codes: # 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed # Text color codes: # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white # Background color codes: # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white NORMAL 00 # global default, although everything should be something. FILE 00 # normal file DIR 01;34 # directory LINK 01;36 # symbolic link FIFO 40;33 # pipe SOCK 01;35 # socket BLK 40;33;01 # block device driver CHR 40;33;01 # character device driver # This is for files with execute permission: EXEC 01;32 # List any file extensions like '.gz' or '.tar' that you would like ls # to colorize below. Put the extension, a space, and the color init string. # (and any comments you want to add after a '#') .cmd 01;32 # executables (bright green) .exe 01;32 .com 01;32 .btm 01;32 .bat 01;32 .tar 01;31 # archives or compressed (bright red) .tgz 01;31 .arj 01;31 .taz 01;31 .lzh 01;31 .zip 01;31 .z 01;31 .Z 01;31 .gz 01;31 .jpg 01;35 # image formats .jpeg 01;35 .gif 01;35 .bmp 01;35 .xbm 01;35 .xpm 01;35 .tif 01;35 .cc 01;36 # códigos fuente .c 01;36 .h 01;36 .awk 01;36 .l 01;36 .latex 01;36 .tex 01;36 .lyx 01;36 .m 01;36 .old 00;33 # copias de seguridad en color oscuro para que no molesten .txt 01;37 .doc 01;37 .rtf 01;37 .html 00;32 .htm 00;32 # Fin del fichero ~/.dir_colors ---------------------------------------------
Con esto, sólo hace falta dar la opción --color
al ls para que los listados salgan en color.
Las variables de entorno son unos valores, etiquetados con un nombre (para los que sepan programar: variables de las de toda la vida; el nombre de de entorno es porque definen el entorno de trabajo, no por otra cosa). Convencionalmente, los nombres de las variables se ponen en mayúsculas.
Las variables de entorno tienen tres usos básicos:
LC_ALL. Contiene un identificador que tiene que ver con
el idioma (no sé qué es exactamente, pero algunos programas se
preocupan si no la encuentran). Ponle el valor spanish.LC_TYPE. ``Apunta'' al juego de caracteres a utilizar.
El que queremos utilizar es el iso 8859-1, también conocido como ``ISO
latin-1''. El valor al que tenemos que poner LC_CTYPE es
ISO_8859_1.LANG. Es el idioma que preferimos. Si prefieres el
español (¿?), tienes que poner la variable a spanish.
Esto provocará que algunos programas te ``hablen'' en español
(el rm, cp, mv, etc.)VISUAL. Algunos programas, si necesitan editar ficheros
de texto (por ejemplo, algunos clientes de correo electrónico de
línea de órdenes), buscan la variable VISUAL. Si la
ven, la interpretan como una ruta a nuestro corrector de textos preferido. No
está de más ponerla, por si acaso.EDITOR. Análoga a la anterior, aunque se
prefiere VISUAL.PATH. La variable que indica las rutas donde se buscan
los ejecutables, si no se da una ruta completa para llegar hasta ellos. Es una
lista de rutas separada por ``:''. Si el directorio actual no
está incluido, al ejecutar un programa que esté en el directorio
actual el intérprete nos dirá que no lo encuentra, y
tendremos que darle una ruta absoluta, como ./programa, para
poder ejecutarlo.HOME. Indica el directorio raíz del usuario. Si
el usuario se llama pepe, lo más normal es que HOME
tenga el valor /home/pepe.
Para exportar variables de entorno, tenemos dos posibilidades:
export VISUAL=/bin/vi
VISUAL=/bin/vi # Aquí le damos un valor
# Más cosas
export VISUAL
Es importante saber que el export soporta más de una
variable, o sea, podríamos poner (por comodidad, las variables
exportadas no hay que declararlas todas juntas):
VISUAL=/bin/vi
LANG=spanish
# Más órdenes
export VISUAL LANG
Veremos un ejemplo de esto en la última sección (la verdad es que por lo general soy contrario a la enseñanza por ejemplos, pero creo que en este caso no vale la pena complicar las cosas con explicaciones técnicas. Al fin y al cabo, este pequeño manual no es para futuros hackers).
Dado que mucha gente que lea esto no tendrá ganas (ni
probablemente tiempo) como para estar probando hasta que descubra algo, pongo
aquí como ejemplo mis ficheros ~/.bash_profile y
~/.bashrc, con la esperanza que descubras cosas al simple vistazo
(como por ejemplo, que el caracter ``#'' se utiliza para poner
comentarios; es decir, que la máquina los ignora, y no tienes por
qué copiarlos si se te ocurre la locura de copiarlos a mano).
Para que tengas por dínde empezar a imaginarte cosas,
deberías saber que estos ficheros no son más que órdenes
seguidas, una después de otra. Pueden ser asignaciones (dar valores a
variables), ejecutar programas (como las líneas de fortune y
smiley), etc.
Por cierto, otra de las cosas que deberías saber es que el
``prompt'' es el apuntador que aparece a la espera de que escribas
instrucciones (por defecto suele ser un $, o
nombreusuario$). En algún sitio de las páginas
del manual en línea del bash viene explicado como personalizar el
aspecto del apuntador.
.bash_profile
# ~/.bash_profile: executed by bash(1) for login shells.
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# Escogemos la máscara de permisos que tendrán por defecto
# los ficheros
umask 022
# User specific environment and startup programs
KDEDIR=/opt/kde
PATH=$PATH:/usr/games:$HOME/.bin:$KDEDIR/bin:/usr/local/Office40/bin:\
/usr/local/java/bin:. # '\' al final es para continuar en otra línea
JAVADIR=/dos/mbros/cambio/java/lib
CLASSPATH=$JAVADIR/fb.zip:$JAVADIR/images.zip:/usr/local/java/lib/classes.zip:.
ENV=$HOME/.bashrc
USERNAME=""
EDITOR=vi
LESS="-rM"
WWW_HOME=http://rohan/zoso/esp.html
export USERNAME ENV PATH EDITOR KDEDIR LESS CLASSPATH WWW_HOME
export LANG=spanish
export LC_ALL=spanish
export LC_CTYPE=ISO_8859_1
.bashrc
# ~/.bashrc: executed by bash(1) for non-login shells.
# User specific aliases and functions
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# Variables
export PS1="\u:\w\\$ " # Cambiamos el aspecto del prompt
export DATOS="$HOME/.datos"
export FIGNORE=".o" # "Extensiones" a ignorar por el ESC-ESC
# Por seguridad, elegimos por defecto que al copiar, se nos pregunte si
# queremos sobreescribir el fichero destino. Lo mismo hacemos con mv
alias cp='cp -i'
alias mv='mv -i'
alias ls='ls --color -lF'
if set | grep DISPLAY &>/dev/null; then
alias vi="vi -g"
fi
# Instrucción vista en el info, en el nodo 'dircolors invocation', o algo
# así, para que sirva de una vez lo de configurar los colorines en el ls
if [ "$TERM" = "xterm" ]; then
eval `dircolors $HOME/.xterm.dir_colors`
else
eval `dircolors $HOME/.dir_colors`
fi
# Imprimimos algunas cosas interesantes en la pantalla
echo
echo "La cita del día:"
fortune
echo " --- "
echo "El smiley del día:"
smiley