1.3.- Utilizar una cónsola

El uso de una consola de Linux es bastante intuitivo para cualquiera que haya utilizado antes un Sistema Operativo basado en texto: se escribe un comando, en el que posiblemente se han incluido opciones, y el ordenador ejecuta el comando. En su mayor parte, los comandos de Linux son externos, es decir, son programas independientes de la consola. No obstante, hay algunos comandos internos y puede ser importante estar al tanto de esta diferencia.

INICIAR UNA CONSOLA

Si se conecta a Linux en modo texto, puede que nos encontremos directamente con la consola por defecto, que es la que espera el prompt y espera recibir comandos.

Pero si conectamos Linux en modo gráfico (GUI), tendrá que iniciar una consola manualmente. Algunas GUI proporcionan una opción de menú para iniciar un programa llamado terminal, xterm, Konsole o algo similar. Estos programas permiten ejecutar programas en modo texto dentro del GUI de Linux.

USO DE COMANDOS INTERNOS Y EXTERNOS

Los comandos internos son los nativos de la consola. La mayoría de las consolas presentan un conjunto similar de comandos internos, pero hay diferencia entre consolas. Consulte la página man de su consola para conocer con más detalle, en particular si utiliza alguna consola singular.

Los comandos internos que más se utilizará son los responsables de llevar a cabo algunas tareas comunes:

  • Cambiar de directorio de trabajo.- Cada vez que ejecutemos una consola, trabajará en un directorio específico. Cuando hace referencia a un fichero sin proporcionar una ruta completa a éste,  la consola trabajará sobre el directorio actual (se aplican reglas similares a muchos programas).
    El comando cd cambia el directorio de trabajo actual. Por ejemplo si escribimos cd /home/atika el prompt mostrará el directorio /home/atika.

Captura de pantalla de 2013-09-01 15:38:22

El carácter llamado virgulilla (~) es un atajo útil; representa su directorio principal (home)por lo que cd ~ tendrá el mismo efecto que cd /home/atika.

  • Mostrar el directorio de trabajo.- El comando pwd muestraImprime» en pantalla) el directorio de trabajo actual.

pwd

  • Mostrar una línea de texto.- el comando echo muestra el texto introducido; por ejemplo echo Hola mundo, el sistema mostrará la cadena "Hola mundo". resulta útil en los script para monitorizar las variables de entorno en busca de errores.

echo

  • Ejecutar un programa.- El comando exec ejecuta el programa externo especificado. En la mayoría de los casos es mejor escribir el nombre del programa directamente que queramos ejecutar, aunque el comando exec posee una funcionalidad adicional: en lugar de crear un nuevo proceso que se ejecuta junto a la consola, el nuevo proceso reemplaza a la consola. Cuando finalice el proceso será como si hubiéramos salido de la consola.

exec

gedit

  • Cronometrar una operación .- El comando time mide el tiempo que tardan en ejecutarse  los comandos subsiguientes. Por ejemplo, si escribimos time pwd se nos dirá cuanto tarda el sistema en ejecutar el comando pwd. El tiempo se muestra cuando finalice el comando completo.

time

Se muestran tres tiempos: el de ejecución total (tiempo real), el del CPU del usuario y el de CPU del sistema. Los dos valores finales nos indican el tiempo de CPU consumido, que posiblemente sea muy inferior al de ejecución total.

time2

  • OPCIONES DE SET.- en su forma básica, set muestra una amplia variedad de de opciones relativas al funcionamiento de bash. Estas opciones tiene un formato parecido a las variables de entorno, pero no son lo mismo. Podemos pasarle a set varias opciones para que afecten a un amplio rango de operaciones de consola.

EjEMPLOS:

BASH=/bin/bash
BASH_ARGC=()
BASH_ARGV=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]=»3″ [1]=»00″ [2]=»15″ [3]=»1″ [4]=»release» [5]=»i386-redhat-linux-gnu»)
BASH_VERSION=’3.00.15(1)-release’
COLORS=/etc/DIR_COLORS.xterm
COLUMNS=97
DIRSTACK=()
DISPLAY=localhost:10.0
EUID=0
GROUPS=()
G_BROKEN_FILENAMES=1
HISTFILE=/root/.bash_history
HISTFILESIZE=1000
HISTSIZE=1000
HOME=/root
HOSTNAME=pcalonso
HOSTTYPE=i386
IFS=$’ ‘
INPUTRC=/etc/inputrc
KDEDIR=/usr
LANG=es_ES.UTF-8
LESSOPEN=’|/usr/bin/lesspipe.sh %s’
LINES=34
LOGNAME=root
LS_COLORS=’no=00:fi=00:di=00;34:ln=00;36:
pi=40;33:so=00;35:bd=40;33;01:cd=40;
33;01:or=01;05;37;41:mi=01;05;37;41:
ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:
*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:
*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:
*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:
*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:
*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:
*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:
*.png=00;35:*.tif=00;35:’
MACHTYPE=i386-redhat-linux-gnu
MAIL=/var/spool/mail/root
MAILCHECK=60
OLDPWD=/root
OPTERR=1
OPTIND=1
OSTYPE=linux-gnu
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
PIPESTATUS=([0]=»0″)
PPID=3352
PROMPT_COMMAND=’echo -ne «?33]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}?07″‘
PS1='[u@h W]$ ‘
PS2=’> ‘
PS4=’+ ‘
PWD=/etc
SHELL=/bin/bash
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
SHLVL=1
SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass
SUPPORTED=es_ES.UTF-8:es_ES:es
TERM=xterm
UID=0
USER=root
XAUTHORITY=/root/.xauthIJObfe
_=export

  • SALIR DE LA CONSOLA.- Tanto el comando exit como el comando logout cierran la consola. exit cierra cualquier consola, pero logout sólo las consolas de acceso (las que se ejecutan automáticamente al iniciar un acceso en modo de texto, frente a las que se ejecutan en ventanas xterm o similares).

Hay comandos externos que hacen lo mismo que algunos de los internos, pero no siempre están instalados en todos los sistemas. Incluso cuando lo  están, los comandos internos tienen prioridad ante los externos, a menos que se proporcione la ruta completa al comando externo en la línea de comandos, escribiendo por ejemplo /bin/pwd en vez de pwd.

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡

Confusión entre comandos externos e internos

Cuando existe duplicidad entre comandos internos y externos, a veces éstos generan resultados ligeramente distintos o aceptan opciones diferentes. en ocasiones, estas diferencias generan problemas. Tomemos como ejemplo el comando pwd y los enlaces simbólicos a directorios (los enlaces simbólicos los veremos en posteriores capítulos. Estos son ficheros que apuntan a otros ficheros o directorios, que al ser accedidos se comportan en casi todos los aspectos como los ficheros o directorios a los que apuntan).

Supongamos que crea un enlace simbólico a /bin dentro de su directorio home, que después pasa cd a dicho directorio y que, más tarde desee saber donde se encuentra. El comando pwd interno de bash genera un resultado diferente al del comando pwd externo.

≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡≡

Cuando se escribe un comando que la consola no identifica como uno de sus comandos internos, la consola revisa su ruta para localizar un programa para ejecutar que tenga ese nombre. La lista es una lista de directorios en los que se pueden encontrar comandos y que viene definida por la variable de entorno PATH. Una cuenta típica de usuario suele tener en su ruta entre seis y doce directorios. Podemos ajustar la ruta cambiando la variable de entorno PATH en el fichero de configuración de la consola.

También puede ejecutar programas que no estén en la ruta indicando la ruta completa en la línea de comando. Por ejemplo, si escribimos ./miprograma se ejecutará el programa miprograma en el directorio actual, mientras que /home/atika/otroprograma ejecutará el programa otroprograma en el directorio /home/atika.

Advertencia: La cuenta root debería tener, normalmente una ruta más corta que las cuentas de usuario ordinarias. Por lo general, omitiremos de la ruta de root los directorios que almacenan GUI y otros programas diseñados para usuarios y evitar que la cuenta root se utilice para operaciones rutinarias, minimizando de este modo el riesgo que supone para la seguridad la posibilidad de que root ejecute determinados binarios. Sobre todo la ruta de root jamás debe incluir el directorio actual (./). La inclusión de este directorio en la ruta de root hace posible la ejecución de programas malintencionados desde root que sustituyen a los programas habituales, como ls, haciendo que root pase a un directorio que contiene un programa de este tipo. Por eso es más que recomendable omitir intencionadamente el directorio actual de las rutas habituales de los usuarios. Si este directorio debe formar parte de la rutas habituales de los usuarios, debe aparecer al final de la misma para que los programas estándar tengan prioridad sobre cualquier programa de sustitución que haya en el directorio actual.

Tanto en el caso de los programas de la ruta como en el de aquéllos en los que se escribe la ruta completa como parte del comando, se debe marcar como ejecutable el fichero del programa. Esto se hace a través del bit de ejecución  que se almacena con el fichero. Los programas habituales se marcan como ejecutables en la instalación, pero si necesitamos modificar el estado del ejecutable de un programa, podemos usar el comando chmod, que describiremos más adelante.

ALGUNOS TRUCOS DE LA CONSOLA DE COMANDOS.- Para muchos usuarios, escribir los comandos puede ser tedioso derivando en errores. Esto cobra relevancia cuando la persona que escribe es lenta o descuidada. Por ese motivo, las consolas de Linux incluyen varias herramientas que pueden ayudar a acelerar las operaciones. La primera es la compleción de comandos. Escriba parte de un comando o (como opción de un comando) un nombre de fichero y luego pulse TAB. La consola intentará rellenar el resto del comando o del nombre de fichero. Si solo coincide un comando o nombre de fichero con los caracteres que lleva escrito, la consola lo rellenará y colocará un espacio a continuación. En cambio si los caracteres que ha escrito no identifican a un único comando o nombre de fichero, la consola rellenará lo que pueda y se detendrá.Si pulsamos de nuevo TAB, el sistema mostrará las posibles finalizaciones. Entonces podrá escribir uno o dos caracteres más, en caso de que no haya completado el comando o nombre de fichero, y pulsar de nuevo la tecla TAB para que se repita el proceso.

NOTA: Las consolas más populares de Linux, incluyendo bash y tsch, incluyen la compleción de comandos y nombres de fichero, a diferencia de algunas consolas más antiguas, que no ofrecen esta útil funcionalidad.

Otro de los atajos útiles de la consola es el historial que guarda un registro de todos los comandos escritos (que se almacena en ~/.bash_history en el caso de bash). El modo para acceder al atajo basta pulsar Flecha Arriba en su teclado y recuperaremos el comando anterior. Pulsándola repetidamente accedemos a todos los comandos para poder elegir el que nos convenga. Si nos pasamos del comando que buscábamos podemos volver atrás pulsando Flecha Abajo, respectivamente. Las teclas CTRL-P y CTRL-N tiene la misma función que Flecha Arriba y Flecha Abajo, respectivamente.

También podemos utilizar el historial de comandos para realizar búsquedas hacia atrás (inversa), que es lo que, probablemente, desee hacer, y comience a escribir caracteres que sean exclusivos del comando que desea localizar. Los caracteres que escriba no tienen que ser los primeros del comando; pueden encontrarse en cualquier parte de éste. También podemos seguir escribiendo hasta encontrar el comando correcto o bien, tras escribir unos cuantos caracteres, pulsar varias veces CTRL-R hasta encontrar el deseado. La combinación CTRL-S funciona de manera similar, pero buscando hacia adelante desde el historial de comandos, resultando útil si ha utilizado la búsqueda hacia atrás o la tecla Flecha Arriba y se ha pasado en su búsqueda. Si no conseguimos encontrar el comando y deseamos terminar la búsqueda, pulsaremos CTRL-G.

Una vez que tengamos localizado el comando en el historial, es probable que desee editarlo. Como otras muchas consolas, bash proporciona funcionalidades de edición modeladas a partir de las del editor Emacs:

  • CTRL-A o CTRL-E.- Desplaza el cursor al inicio o el final de la línea respectivamente. Las teclas Flecha izquierda y Flecha derecha sirven para desplazarse carácter a carácter dentro de la línea. Si pulsa CTRL y Flecha izquierda o Flecha derecha simultáneamente nos desplazaremos palabra por palabra, al igual que con la combinación ESC seguido de B o F.
    historial
  • CTRL-D o Supr.- Borra el carácter que hay bajo el cursor, mientras que al pulsar la tecla Retroceso se borra el carácter a la izquierda del cursor. Al pulsar CTRL-K se borra todo el texto que hay entre el cursor y el final de la línea. Al pulsar CTRL-X seguido de Retroceso se borra todo el texto que va desde el cursor al comienzo de la línea.
  • CTRL-T.- Se intercambia el carácter que haya delante del cursor por el que hay bajo el cursor. Al pulsar ESC seguido de T se intercambian las dos palabras que hay justo antes del cursor (o debajo de este).
  • Cambiar mayúsculas y minúsculas.- Al pulsar ESC seguido de U se convierte a mayúsculas el texto que hay entre el cursor y el final de la palabra. Al pulsar ESC seguido de L se convierte a minúscula el texto que hay entre el cursor y el final de la palabra. si pulsamos ESC seguido de C se convierte en mayúscula la letra que hay bajo el cursor (o la primera letra de la siguiente palabra), Dejando intacto el resto de la palabra.
  • Llamar a un editor.- Podemos emplear el editor que deseemos para modificar el comando pulsando CTRL-X seguido de CTRL-E. La consola bash intentará iniciar el editor definido en las variables de entorno $FCEDIT o $EDITOR o Emacs, como último recurso.

Estos comandos de edición son sólo los más útiles de los que soporta bash; consulte su página man para conocer otras funcionalidades de edición menos comunes. En la práctica, lo más probable será que haga un uso intensivo de la compleción de comandos y nombres de fichero, del historial de comandos y, quizá, de algunas funcionalidades de edición.

El comando history proporciona una interfaz para visualizar y administrar el historial. Si escribe solo history se mostrarán todos los comandos del historial (por lo general, los últimos 500 comandos): si añade un número, solo se mostrará ese número de comandos de los últimos ejecutados. Si escribe history -c limpiará el historial, lo cual puede ser útil si ha escrito recientemente comandos que no desea mostrar a otras personas (como los comandos que incluyen contraseñas).

Deja un comentario

Este sitio utiliza Akismet para reducir el spam. Conoce cómo se procesan los datos de tus comentarios.