Herramientas y Variables en la Shell de Linux
Table of Contents
ToggleVariables en la Shell de Linux
Las variables son parámetros con nombre que contienen valores. Se pueden crear, modificar, referenciar y hacerlas parte del entorno de ejecución. Por ejemplo la personalización del prompt bash se puede realizar mediante la modificación de la variable $PS1
Ejemplo:
$ PS1=”[soy \u en \h dir actual \W]\$”
[soy usuario1 en debian dir actual etc]$
Secuencias de escape con ‘\’ y sus significados:
\u Nombre de usuario
\h Nombre de host
\W Directorio de trabajo
\A Hora actual
El sistema cuenta con algunas variables predefinidas. Las cuales se pueden verificar con el comando env:
$usuario@debian:~$ env
TERM=xterm
SHELL=/bin/bash
OLDPWD=/etc
USER=tiner
MAIL=/var/mail/usuario
PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
PWD=/etc
LANG=en_US.UTF-8
PS1=[soy \u en \H dir actual \W \A]$
SHLVL=1
HOME=/home/usuario
LANGUAGE=en_US:en
LOGNAME=usuario
- La variable PATH le indica el shell actual donde buscar los comandos que son ejecutados cuando no se le especifica una ruta. Si tengo un comando en directorio /opt/prueba el cual no está en la variable PATH, para ejecutarlo tengo que escribir la ruta completa, ejemplo: /opt/prueba/comando
- La variable USER indica el usuario que está logueado en el shell.
- La variable HOME muestra el directorio de inicio del usuario logueado.
Para definir una nueva ruta en la variable PATH, puede hacerlo de la siguiente manera:
$ PATH=$PATH:/opt/prueba.txt
Luego, con el comando export podemos exportar la variable como variable de entorno, para que sea utilizada por cualquier proceso de nuestro actual shell y de sus subshells.
$ export PATH
Una variable muy importante es EDITOR, la cual es empleada por varias aplicaciones. Sencillamente se define con la ruta al comando:
$ export editor=/usr/bin/vim
Para que el valor de una variable sobreviva la salida de sesión en una shell es necesario exportar la variable pero, además, guardar esa configuración (como en el ejemplo anterior) en archivos tales como ~/.bashrc o ~/.profile de nuestro prompt
Herramientas en la Shell de Linux
Alias de comandos
Aunque el sistema operativo y el shell nos ofrecen multitud de comandos y utilidades, podemos crear alias con nombres que tengan más sentido para nosotros o que sean más pequeños y así teclear menos caracteres. Por ejemplo, si estamos familiarizado con la línea de comandos de Windows o del DOS estamos acostumbrado a escribir “dir” para obtener una lista de archivos de un directorio, para obtener lo mismo en Linux se escribiría ls -l.
Podríamos crear un alias de tal forma que cada vez que escribiésemos dir se ejecutase ls -l, utilizando la siguiente expresión:
$ alias dir=”ls -l”
La sintaxis será siempre el alias seguido del comando que queremos que se ejecute cuando se teclee el alias separado por el signo igual.
Con el comando alias listamos todos los que están activados:
$ alias
alias cp=’cp -i’
alias l.=’ls -d .* –color=auto’
» » ll=’ls -l –color=auto’
» » ls=’ls –color=auto’
alias mv=’mv -i’
» » rm=’rm -i’
alias which=’alias | /usr/bin/which –tty-only –read-alias –show-dot –show-tilde’
$ unalias cp
Para sacar el alias.
Substitución de comandos
Aquí hacemos que los comandos se ejecuten de manera diferente, dándoles otro comportamiento.
$ touch ejemplo `echo –text`.`date `
$ ls -l ejemplo*
-rw-rw-r– 1 user user 0 Oct 21 14:02 ejemplo.Tue
En este ejemplo, usamos las comillas invertidas para que se ejecute el comando echo y date; como ven, bash interpreta que tiene que ejecutar un comando y lo que devuelve lo pone en el nombre del archivo que crea.
Otro ejemplo sería con $(comando):
$ touch otro$(echo –ejemplo2).$(date)
$ ls -l otr*
-rw-rw-r– 1 user user 0 Oct 21 14:30 otro-ejemplo2.Tue
Comando history
Este comando se utiliza para ver los comandos ejecutados con anterioridad en el shell. Veamos un ejemplo:
$ history
1 ls -ltr
2 cd /home/
3 ltr
4 cat text.txt
5 vim text.txt
….
Además, los archivos que fueron ejecutados antes se guardan en otro archivo que comienza por los antiguos hasta los más recientes. Veamos las funciones de las siguientes variables:
- HISTSIZE define el número de comandos que recordará el shell durante la sesión actual. Esta variable puede estar definida tanto en /etc/profile como en ~/.profile (~ equivale al directorio home del usuario) y su valor por defecto es de 1000 entradas. El comando history muestra todas las entradas del archivo del historial que se guarda en ~/.bash_history.
- HISTCMD proporciona el índice dentro del historial comando que se está ejecutando.
- HISTFILE especifica el nombre del fichero que contendrá el historial (~/.bash_history por defecto).
- HISTFILESIZE especifica el máximo número de líneas que contendrá el archivo espe- cificado en HISTFILE y, aunque suele tener el mismo valor que HISTSIZE, podría ser diferente dado que esta última se refiere solo al histórico de la sesión actual y no al tamaño total del archivo histórico.
Comando fc
Esta herramienta proporciona otra opción para editar los comandos del fichero histórico antes de ejecutarlos. El comando fc abre el editor de textos por defecto con el comando especificado y ahí podemos editarlo y salvarlo antes de ejecutarlo disponiendo de toda la potencia de un editor de textos.
Podemos llamar a dicho comando utilizando como parámetro el número del comando que queremos editar o, también, con un rango de comandos para, de esta forma, editarlos y ejecutarlos en conjunto. También podemos especificar el editor de textos a utilizar. Una vez que llamamos a fc, el archivo de comandos puede ser editado como cualquier otro archivo de texto y los comandos editados se ejecutarán al salir del editor.
La opción -l la utilizamos para mostrar una lista de los valores especificados a continuación, podemos escribir, por ej., fc -l 50 60 y obtenemos la lista de los comandos del 50 al 60 en el historial.
Operadores de expansión del historial de comandos:
!! También conocido como bang-bang, este operador hace referencia al comando más reciente del historial.
!n Hace referencia al comando número n del historial. Puedes utilizar el comando history para conocer estos números.
!-n Hace referencia al comando actual menos n en el historial.
!cadena Hace referencia al comando más reciente que comience por cadena.
!?cadena Hace referencia al comando más reciente que contenga cadena.
^cadena1^cadena2 Situación rápida. Repite el último comando reemplazando la primera aparición de cadena1 por cadena2.