Mod 4
Mod 4
Mod 4
1 Introducción
Si eres como la mayoría de las personas, probablemente estés familiarizado con el uso de
la Interfaz Gráfica de Usuario (o GUI «Graphical User Interface») para controlar tu
computadora. Fue introducida a las masas por Apple en la computadora Macintosh y
popularizado por Microsoft. La GUI proporciona una forma fácil de descubrir y administrar
tu sistema. Sin una GUI, algunas herramientas para gráficos y video no serían prácticas.
Antes de la popularidad de la GUI, la Interfaz de Línea de Comandos (o CLI «Command
Line Interface») era la forma preferida para controlar una computadora. La CLI se basa
únicamente en la entrada por teclado. Todo lo que quieres que tu computadora haga, se
retransmite escribiendo comandos en lugar de ir haciendo clics en los iconos.
Si nunca has usado una CLI, al principio puede resultar difícil porque requiere de
memorizar comandos y sus opciones. Sin embargo, la CLI proporciona un control más
preciso, una mayor velocidad y capacidad para automatizar fácilmente las tareas a través
del scripting (ver barra lateral). Aunque Linux tiene muchos entornos GUI, podrás controlar
Linux mucho más eficazmente mediante la Interfaz de Línea de Comandos.
Una terminal virtual puede ejecutarse al mismo tiempo que una GUI, pero requiere
que el usuario se conecte o inicie sesión a través de la terminal virtual antes de
que pueda ejecutar los comandos (como lo haría antes de acceder a la interfaz
GUI). La mayoría de los sistemas tienen múltiples terminales virtuales que se
pueden acceder pulsando una combinación de teclas, por ejemplo: Ctrl-Alt-F1
Nota: En las máquinas virtuales puede que las terminales virtuales no estén disponibles.
4.3.1 Prompt
Una ventana del terminal muestra un prompt (o «símbolo o aviso» en español); el prompt
aparece cuando no se ejecutan ningún comando y cuando la salida completa del comando
se ha desplegado en la pantalla. El prompt está diseñado para decirle al usuario que
introduzca un comando.
La estructura del prompt puede variar entre las distribuciones, pero por lo general contiene
información sobre el usuario y el sistema. A continuación te mostramos una estructura
común de un prompt:
sysadmin@localhost:~$
4.3.2 El Shell
Un shell es el intérprete que traduce los comandos introducidos por un usuario en acciones
a realizar por el sistema operativo. El entorno Linux proporciona muchos tipos diferentes
de shells, algunos de los cuales han existido por muchos años.
El shell más comúnmente utilizado para las distribuciones de Linux se llama el BASH shell.
Es un shell que ofrece muchas funciones avanzadas, tales como el historial de comandos,
que te permite fácilmente volver a ejecutar comandos previamente ejecutados.
El BASH shell tiene también otras funciones populares:
Nota: La lista anterior es sólo un breve resumen de algunas de las muchas funciones
proporcionadas por el BASH shell.
sysadmin@localhost:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Vi
deos
sysadmin@localhost:~$
sysadmin@localhost:~$ ls /etc/ppp
ip-down.d ip-up.d
sysadmin@localhost:~$
sysadmin@localhost:~$ ls -l
total 0
drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 2015 Desktop
drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 2015 Documents
drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 2015 Downloads
drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 2015 Music
drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 2015 Pictures
drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 2015 Public
drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 2015 Templates
drwxr-xr-x 1 sysadmin sysadmin 0 Jan 29 2015 Videos
sysadmin@localhost:~$
En la mayoría de los casos, las opciones pueden utilizarse conjuntamente con otras
opciones. Por ejemplo, los comandos ls -l -h o ls -lh listarán los archivos con sus
detalles, pero se mostrará el tamaño de los archivos en formato de legibilidad humana en
lugar del valor predeterminado (bytes):
sysadmin@localhost:~$ ls -l /usr/bin/perl
-rwxr-xr-x 2 root root 10376 Feb 4 2014 /usr/bin/perl
sysadmin@localhost:~$ ls -lh /usr/bin/perl
-rwxr-xr-x 2 root root 11K Feb 4 2014 /usr/bin/perl
sysadmin@localhost:~$
Nota que el ejemplo anterior también demostró cómo se pueden combinar opciones de
una letra: -lh . El orden de las opciones combinadas no es importante.
La opción -h también tiene la forma de una palabra completa: --human-readable (--
legibilidad-humana).
Las opciones a menudo pueden utilizarse con un argumento. De hecho, algunas de las
opciones requieren sus propios argumentos. Puedes utilizar los argumentos y las opciones
con el comando lspara listar el contenido de otro directorio al ejecutar el comando ls -
l/etc/ppp:
sysadmin@localhost:~$ ls -l /etc/ppp
total 0
drwxr-xr-x 1 root root 10 Jan 29 2015 ip-down.d
drwxr-xr-x 1 root root 10 Jan 29 2015 ip-up.d
sysadmin@localhost:~$
sysadmin@localhost:~$ date
Sun Nov 1 00:40:28 UTC 2015
sysadmin@localhost:~$ ls
Desktop Documents Downloads Music Pictures Public Templates
Videos
sysadmin@localhost:~$ cal 5 2015
May 2015
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
sysadmin@localhost:~$ history
1 date
2 ls
3 cal 5 2015
4 history
sysadmin@localhost:~$
!3
sysadmin@localhost:~$ history
1 date
2 ls
3 cal 5 2015
4 history
sysadmin@localhost:~$ !3
cal 5 2015
May 2015
Su Mo Tu We Th Fr Sa
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
sysadmin@localhost:~$
Ejemplo Significado
Para mostrar el valor de una variable, puedes utilizar el comando echo (o «eco» en
español). El comando echo se utiliza para mostrar la salida en la terminal; en el ejemplo
siguiente, el comando mostrará el valor de la variable HISTSIZE:
sysadmin@localhost:~$ HISTSIZE=500
sysadmin@localhost:~$ echo $HISTSIZE
500
sysadmin@localhost:~$
Hay muchas variables del shell que están disponibles para el shell BASH, así como las
variables que afectarán a los diferentes comandos de Linux. No todas las variables del
shell están cubiertas por este capítulo, sin embargo, conforme vaya avanzando este curso
hablaremos de más variables del shell.
Basado en la anterior salida, cuando intentas ejecutar un comando, el shell primero busca
el comando en el directorio /home/sysadmin/bin. Si el comando se encuentra en ese
directorio, entonces se ejecuta. Si no es encontrado, el shell buscará en el
directorio /usr/local/sbin.
Si el comando no se encuentra en ningún directorio listado en la variable PATH, entonces
recibirás un error, command not found:
sysadmin@localhost:~$ zed
-bash: zed: command not found
sysadmin@localhost:~$
sysadmin@localhost:~$ PATH=/usr/bin/custom:$PATH
sysadmin@localhost:~$ echo $PATH
/usr/bin/custom:/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr
/sbin:/usr/bin:/sbin:/bin:/usr/games
sysadmin@localhost:~$
sysadmin@localhost:~$ variable1='Something'
Para ver el contenido de la variable, te puedes referir a ella iniciando con el signo de $:
Para ver las variables de entorno, utiliza el comando env (la búsqueda a través de la salida
usando grep, tal como se muestra aquí, se tratará en los capítulos posteriores). En este
caso, la búsqueda para variable1 en las variables de entorno resultará en una salida
nula:
Después de exportar variable1 llegará a ser una variable de entorno. Observa que esta
vez, se encuentra en la búsqueda a través de las variables de entorno:
El comando export también puede utilizarse para hacer una variable de entorno en el
momento de su creación:
/bin/date
sysadmin@localhost:~$ which cal
/usr/bin/cal
sysadmin@localhost:~$
Esta salida sería similar a la salida del comando which (tal como se explica en el apartado
anterior, que muestra la ruta completa del comando):
El comando type también puede identificar comandos integrados en el bash (u otro) shell:
Usando la opción -a, el comando type también puede revelar la ruta de otro comando:
El comando type también puede identificar a los aliases para otros comandos:
sysadmin@localhost:~$ type ll
ll is aliased to `ls -alF'
sysadmin@localhost:~$ type ls
ls is aliased to `ls --color=auto'
sysadmin@localhost:~$ which ll
sysadmin@localhost:~$ which ls
/bin/ls
El comando type soporta otras opciones y puede buscar varios comandos al mismo
tiempo. Para mostrar sólo una sola palabra que describe al echo, ll, y a los
comandos which, utiliza la opción -t:
sysadmin@localhost:~$ alias
alias alert='notify-send —urgency=low -i "$([ $? = 0 ] && echo termina
l || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/
[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
Los alias que ves en los ejemplos anteriores fueron creados por los archivos de
inicialización. Estos archivos están diseñados para hacer automático el proceso de
creación de los alias. Hablaremos sobre ellos con más detalle en un capítulo posterior.
Los nuevos alias se pueden crear introduciendo alias name=command (o «alias
nombre=comando» en español), donde nombre es el nombre que quieres dar a el alias y
comando es el comando que quieres que se ejecute cuando se ejecuta el alias.
Por ejemplo, puedes crear un alias de tal manera que lh muestre una lista larga de
archivos, ordenados por tamaño con un tamaño "human friendly" (o «amigable para el
usuario» en español) con el comando alias lh='ls -Shl'. Introduciendo lh debe ahora
dar lugar a la misma salida que introduciendo el comando ls -Shl:
Los alias creados de esta manera sólo persistirán mientras el shell esté abierto. Una vez
que el shell es cerrado, los nuevos alias que hayas creado, se perderán. Además, cada
shell posee sus propios alias, así que si creas un alias en un shell y luego lo abres en otro
shell, no verás el alias en el nuevo shell.
4.11 Globbing
Los caracteres de globbing se denominan a menudo como "comodines". Estos son
símbolos que tienen un significado especial para el shell.
A diferencia de los comandos que ejecutará el shell, u opciones y argumentos que el shell
pasará a los comandos, los comodines son interpretados por el mismo shell antes de que
intente ejecutar cualquier comando. Esto significa que los comodines pueden utilizarse con
cualquier comando.
Los comodines son poderosos porque permiten especificar patrones que coinciden con los
nombres de archivo en un directorio, así que en lugar de manipular un solo archivo a la
vez, puedes fácilmente ejecutar comandos que afectarán a muchos archivos. Por ejemplo,
utilizando comodines es posible manipular todos los archivos con una cierta extensión o
con una longitud de nombre de archivo determinado.
Ten en cuenta que estos comodines pueden utilizarse con cualquier comando, ya que es
el shell, no el comando que se expande con los comodines a la coincidencia de nombres
de archivo. Los ejemplos proporcionados en este capítulo utilizan el comando echo para
demostración.
El patrón t* significa "cualquier archivo que comienza con el carácter t y tiene cero o más
de cualquier carácter después de la letra t".
Puedes usar el asterisco en cualquier lugar dentro del patrón del nombre de archivo. El
siguiente ejemplo coincidirá con cualquier nombre de archivo en el directorio /etc que
termina con .d:
Los comodines pueden utilizarse juntos para encontrar patrones más complejos. El
comando echo /etc/*???????????????????? imprimirá sólo los archivos del
directorio /etc con veinte o más caracteres en el nombre del archivo:
El asterisco y el signo de interrogación también podrían usarse juntos para buscar archivos
con extensiones de tres letras ejecutando el comando echo /etc/*.???:
4.11.3 Corchetes [ ]
Los corchetes se utilizan para coincidir con un carácter único representando un intervalo
de caracteres que pueden coincidir con los caracteres. Por ejemplo, echo
/etc/[gu]* imprimirá cualquier archivo que comienza con el carácter g o u y contiene
cero o más caracteres adicionales:
El comando echo /etc/*[0-9]* mostrará todos los archivos que contienen al menos un
número:
sysadmin@localhost:~$ echo /etc/*[0-9]*
/etc/dbus-1 /etc/iproute2 /etc/mke2fs.conf /etc/python2.7 /etc/rc0.d
/etc/rc1.d /etc/rc2.d /etc/rc3.d /etc/rc4.d /etc/rc5.d /etc/rc6.d
sysadmin@localhost:~$
El intervalo se basa en el cuadro de texto de ASCII. Esta tabla define una lista de
caracteres disponiéndolos en un orden estándar específico. Si proporcionas un orden
inválido, no se registrará ninguna coincidencia:
Esto es útil cuando quieres mostrar algo en la pantalla, lo que suele ser un carácter
especial para el shell:
Las comillas dobles todavía permiten la sustitución de comando (se tratará más adelante
en este capítulo), sustitución de variable y permiten algunos metacaracteres de shell sobre
los que aún no hemos hablado. Por ejemplo, en la siguiente demostración, notarás que el
valor de la variable PATH es desplegada:
The car costs $100
sysadmin@localhost:~$
sysadmin@localhost:~$ echo "The service costs $100 and the path is $PA
TH"
The service costs 00 and the path is /usr/bin/custom:/home/sysadmin/bi
n:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/ga
mes
sysadmin@localhost:~$ echo 'The service costs $100 and the path is $PA
TH'
The service costs $100 and the path is $PATH
sysadmin@localhost:~$ echo The service costs \$100 and the path is $PA
TH
The service costs $100 and the path is /usr/bin/custom:/home/sysadmin/
bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/
games
sysadmin@localhost:~$
sysadmin@localhost:~$ date
Mon Nov 2 03:35:50 UTC 2015
Ahora fíjate en la salida de la línea de comandos echo Today is date (o «eco La fecha
de hoy es» en español):
Today is date
sysadmin@localhost:~$
February 2015
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
March 2015
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
sysadmin@localhost:~$ ls /etc/xml
catalog catalog.old xml-core.xml xml-core.xml.old
sysadmin@localhost:~$ ls /etc/junk
ls: cannot access /etc/junk: No such file or directory
sysadmin@localhost:~$
La manera en que usarías el éxito o fracaso del comando ls junto con && sería ejecutando
una línea de comandos como la siguiente:
catalog catalog.old xml-core.xml xml-core.xml.old
success
sysadmin@localhost:~$ ls /etc/junk && echo success
ls: cannot access /etc/junk: No such file or directory
sysadmin@localhost:~$
En el primer ejemplo arriba, el comando echo fue ejecutado, porque tuvo éxito el
comando ls. En el segundo ejemplo, el comando echo no fue ejecutado debido a que el
comando ls falló.