Linux: Introducción Al Shell
Linux: Introducción Al Shell
Linux: Introducción Al Shell
Introducción al Shell
Linux 02
• Índice
• OBJETIVOS.......................................................................................................... 3
• INTRODUCCIÓN .................................................................................................. 4
2.1. Funcionamiento de la línea de comandos ................................................ 5
2.1.1. Introducción........................................................................................... 5
2.1.2. Las diferentes Shell en Linux ................................................................ 8
2.1.3. Cómo cambiar de shell ....................................................................... 10
2.1.4. Introducción a ficheros especiales y caracteres especiales................ 12
2.1.5. Otros aspectos importantes ................................................................ 15
2.2. Comandos básicos ................................................................................... 18
2.2.1. Para obtener ayuda............................................................................. 19
2.2.2. Comandos para moverse por el terminal ............................................ 21
2.2.3. Comandos para apagar y reiniciar el sistema ..................................... 21
2.2.4. Moverse en el sistema de archivos ..................................................... 24
2.2.5. Trabajar con archivos y directorios ..................................................... 26
2.2.6. Comandos para obtener información del sistema.............................. 28
2.2.7. Operaciones con ficheros y directorios ............................................... 30
2.2.8. Comprimir y descomprimir archivos .................................................... 36
2.3. Redirecciones............................................................................................ 38
2.4. Expresiones regulares.............................................................................. 45
2.5. Filtros ......................................................................................................... 51
2.6. Editores de texto ....................................................................................... 58
2.6.1. Editor vi ............................................................................................... 58
2.6.2. Editor EMACS ..................................................................................... 61
• RESUMEN .......................................................................................................... 65
Introducción al Shell 1
Linux 02
• Objetivos
Introducción al Shell 3
Formación Abierta
• Introducción
En esta unidad se pretende realizar una introducción a los diferentes tipos de shell y
en particular a la shell por defecto de GNU/Linux, la shell Bash. Una shell
simplemente es otro programa de GNU/Linux que va a proporcionar una interfaz de
intermediación entre el usuario y el sistema interpretando de esta forma lo que el
usuario introduce desde la línea comandos para que el sistema pueda llevar a cabo
las funciones solicitadas.
Se explicarán los comandos más útiles para realizar funciones básicas de usuario y
se presentarán organizados por diferentes categorías de funcionalidades.
Por último, se darán a conocer los principales editores de texto de GNU/Linux que
ayudarán en las tareas sencillas de edición de archivos.
4 Introducción al Shell
Linux 02
Por encima del sistema de ventanas, se instala un entorno de escritorio, con barras
de herramientas, botones y otras opciones. Los dos más conocidos son GNOME y
KDE. Por ejemplo, en la distribución de Ubuntu se encuentra con GNOME, al igual
que en las distribuciones Debian, Red Hat y Fedora. KDE lo podemos encontrar en
la distribución paralela de Ubuntu, denominada Kubuntu.
Esto en cuanto al entorno gráfico, pero el tema que este capítulo ocupa es el Shell
de Linux.
2.1.1. Introducción
Cuando Linux es iniciado por el usuario, se pone en marcha una aplicación que
realizará las funciones de interfaz entre nosotros y el kernel de Linux. A este
programa se le llama el Shell de Linux. Cuando se ejecuta y aparece la ventana de
terminal mostrará un indicador y estará esperando a que se introduzcan las órdenes
oportunas en forma de comandos. Por esta razón, también se le suele llamar el
intérprete de comandos de Linux.
Introducción al Shell 5
Formación Abierta
usuario@host directorio$
6 Introducción al Shell
Linux 02
Los comandos que se pueden introducir a través de la Shell pueden ser internos o
externos:
Los comandos internos están compuestos de un código que forma parte del
proceso de una shell.
Los comandos externos tienen el código para ser ejecutado en un archivo,
bien en formato binario ejecutable o como guión de la propia shell.
Introducción al Shell 7
Formación Abierta
En la siguiente tabla se puede observar nombres, las shell más comunes y sus
ubicaciones:
Bourne sh /bin/sh
8 Introducción al Shell
Linux 02
Gran número de estructuras de lenguaje de alto nivel: if, while, select, etc.
Soporte de examen de archivos y carpetas.
Soporte de aritmética de enteros.
Desarrollo de programas más rápido que comparado con lenguajes como C.
Mecanismo de historial interactivo de comandos que emula a uno de los dos
editores más usado en GNU Linux por defecto.
Soporte de funciones.
Estructuras avanzadas para igualar patrones y la habilidad de procesar
cadenas de caracteres complejos.
Presencia en la mayoría de las distribuciones GNU Linux y otros sistemas
operativos.
Es el shell por defecto de GNU Linux.
El shell va a interpretar los scripts preparados para dicha shell con lo cual nos se
van a ahorrar las tareas de compilación y la de vinculación (link). Existe la
disponibilidad de estructuras y de comparaciones avanzadas de patrones de
caracteres, formas de examinar archivos y directorios, aritmética de enteros y
soporte de funciones así como un mecanismo que permitirá revisar el historial de
comandos para poder ser editado en vi o emacs, los dos editores de texto más
característicos de GNU/Linux.
Introducción al Shell 9
Formación Abierta
En ocasiones puede que sea interesante cambiar de shell. Por ejemplo, se puede
encontrar por Internet un guión de una shell para TC que interesa muchísimo por
cuestiones de programación por ejemplo, pero no sirve para Bash.
Se puede cambiar nuestra shell de tres formas distintas según sean nuestras
necesidades:
Cambiando nuestra shell por defecto pero solo para nuestra sesión actual.
Pasando a una nueva configuración para todo conexión subsiguiente a
nuestro sistema.
Creando sesiones adicionales de shell que se ejecutarán de forma
concurrente a nuestra shell por defecto o por encima de ella.
10 Introducción al Shell
Linux 02
Se puede ver todas las shell que hay instaladas en nuestro sistema con el comando
more /etc/shells, como se puede ver a continuación:
Introducción al Shell 11
Formación Abierta
Pero antes de empezar con los comandos básicos, es necesario tener una serie de
conocimientos mínimos de estos ficheros y algunos caracteres especiales que se
van a poder usar precisamente con estos comandos y por lo tanto ya resulte más
familiar.
De entre todos los directorios, hay algunos especiales porque son propiedad del
sistema operativo, como por ejemplo podría ser el directorio /bin, que se usa para
almacenar todas las órdenes que se pueden enviar a la shell, o el directorio /etc
donde se podrían encontrar determinadas órdenes para la administración del
sistema.
12 Introducción al Shell
Linux 02
Ficheros ordinarios
Directorios
Especiales, es decir, los dispositivos físicos.
Aunque un directorio al fin y al cabo también es un fichero, las funciones que tiene
asignadas son diferentes a las de un fichero ordinario pues de hecho la primera
diferencia fundamental es que un directorio va a contener a un conjunto de ficheros
ordinarios.
Los ficheros especiales son desde el punto de vista práctico igual que los ficheros
ordinarios pero suelen ser utilizados para relacionar diferentes dispositivos físicos.
Por ejemplo:
/ El directorio raíz
. El directorio actual
.. El directorio padre del directorio actual
~ El directorio de entrada
Introducción al Shell 13
Formación Abierta
En cuanto a los caracteres especiales hay algunos que nos van a ser muy útiles
para utilizar con los comandos y para localizar e identificar ficheros. Los llamamos
comodines:
cat *.f
cat [A-B]* .c
En nuestro caso, visualizaría por pantalla todos los ficheros con extensión .c cuyo
nombre sea A o B, o empiezan por A o B.
cat ?[A-D]
En este ejemplo visualizaría por pantalla todos los ficheros que tengan solo dos
caracteres, de los cuales el primero es arbitrario y el segundo carácter tiene que
estar comprendido entre las letras A y D, es decir, puede ser A, B, C o D.
Se podría utilizar también para realizar operaciones con ficheros. Por ejemplo:
cp data* /home/datos
Con este comando se van a copiar todos los ficheros cuyo nombre empiece por
data al directorio /home/datos.
Sino se hubiera podido disponer del asterisco se habría tenido que añadir todos los
ficheros uno a uno en el comando de la siguiente forma:
cp data01,data02,data03 /home/datos
14 Introducción al Shell
Linux 02
Estos comodines se pueden utilizar para todo tipo de comandos. Por ver otro
ejemplo distinto, se podría usar el comando echo, cuya misión consiste en producir
un eco en la pantalla de lo que se introduzca por teclado:
Además de estos metacaracteres que son utilizados directamente por nuestra shell,
existen otros que se utilizan para definir patrones de búsqueda de texto y que son
denominados expresiones regulares y pueden ser utilizados para comandos de
búsqueda tipo grep o para usar en editores de texto como vi pero estos se explican
más adelante.
Este archivo contiene los valores de unas variables importantes para la shell
denominadas variables de entorno de shell. Además, se ejecutan los archivos de
arranque de la shell que son unos archivos ocultos y se encuentran en el directorio
de cada usuario (~/.profile).
A continuación, se muestran dos tablas (figuras 2.8 y 2.9) donde aparecen las
principales variables de entorno y los archivos de arranque de las shell Bash y TC.
Introducción al Shell 15
Formación Abierta
Variable Función
MAIL Nombre del archivo que contiene el buzón de correo del sistema
Archivo Función
Cuando se pone en marcha una Shell Bash en modo interactivo, se ejecutan las
órdenes del archivo ~/.bashrc, si es que el archivo existe.
16 Introducción al Shell
Linux 02
Una de las recomendaciones generales que se hacen a los usuarios que están
comenzando con Linux, es que nunca trabajen de forma habitual con el usuario
administrador (root) y que solo lo utilicen cuando sea realmente necesario.
Mientras tanto, trabajar con el usuario con derechos limitados.
Una vez dicho todo esto, se debe saber que en la línea de comandos, cuando sea
nuestro usuario normal se podrían obtener permisos de root con el comando su.
Por ejemplo, con el comando sudo kedit /etc/fstab el sistema preguntará por la
contraseña de root, y una vez se haya introducido la correcta permitirá editar el
archivo /etc/fstab.
Con el comando sudo se permite ejecutar la instrucción con permisos de root pero
solo para esta línea de comandos. Para ganar privilegios de root durante toda la
sesión de la consola habrá que escribir simplemente su e introducir el password de
root.
Introducción al Shell 17
Formación Abierta
El comando podría ser un ejecutable binario (como un archivo .EXE de los sistemas
Windows) o podría ser un comando que formara parte de la consola.
Con el comando incorrecto Bash se está queriendo decir que no hay ningún
comando llamado whoammi.
Bash tiene una utilidad de histórico de comando a la que se podrá acceder pulsado
la tecla con la flecha hacia arriba y de esta forma por ejemplo, en este caso se
podría corregir rápidamente nuestro error.
18 Introducción al Shell
Linux 02
Por lo general, todos los comandos dispondrán de página man, pero si alguno no lo
tuviera, se recibirá el aviso correspondiente y nuestra siguiente opción sería utilizar
el modificador --help para obtener la información que deseamos: $ ls –help.
El comando man también puede resultar útil para conocer Linux en general y
bastaría con escribir simplemente: $ man intro.
Buscará la palabra clave user dentro de todas las páginas man disponibles y nos
devolverá un listado que contienen dicha palabra.
Si se quiere hacer una búsqueda más rápida (man puede resultar muy lento en
ocasiones puesto que tiene que buscar en todo el host) hay dos comandos más
sencillo que se pueden utilizar.
Introducción al Shell 19
Formación Abierta
Por último, el comando info puede dar una información mucho más detallada de la
funcionalidad y las opciones de los comandos. Si por ejemplo se ejecuta el
comando info ls para conocer más a fondo el comando ls se encontraría el
siguiente resultado:
Mostrará una información muy extensa del comando ls. Casi se podría decir que es
un pequeño manual de este comando.
20 Introducción al Shell
Linux 02
Por último, un comando muy importante que cabe destacar sería el comando clear
que borrará el contenido de la pantalla.
F1
man (-K)
--help
whatis
apropos
info
clear
Introducción al Shell 21
Formación Abierta
Comando shutdown
El comando shutdown se utiliza para apagar el equipo. Las siguientes son las
opciones más utilizadas:
22 Introducción al Shell
Linux 02
Para cancelar esta orden desde la misma consola habría que pulsar Ctrl+C y si se
hace desde otra consola basta con escribir el comando: sudo shutdown-c
Comando halt
El comando halt se utiliza para apagar el equipo. Las siguientes son las opciones
más utilizadas:
Comando reboot
Dispone de las mismas opciones que el comando halt pero reboot simplemente
reinicia el equipo.
shutdown
halt
reboot
Introducción al Shell 23
Formación Abierta
Comando pwd
Comando cd
24 Introducción al Shell
Linux 02
Nuestras únicas limitaciones las marcarán los permisos que existan y que
permitirán o denegarán mover por determinados directorios.
pwd
cd
cd ..
cd -
cd /
cd /ruta_completa
Introducción al Shell 25
Formación Abierta
cp archivo1 archivo2
rm archivo1
26 Introducción al Shell
Linux 02
rm –rf directorio
mkdir imágenes
rmdir imágenes
Introducción al Shell 27
Formación Abierta
cp
mv
rm
mkdir
rmdir
chmod
chown
ln
Comando df: nos va a dar información sobre el espacio de disco del sistema
de archivos en las particiones que tengamos configuradas. Si se añade el
operador –h aún será más útil. Mostrará información sobre el tamaño total,
el usado y el disponible.
28 Introducción al Shell
Linux 02
Introducción al Shell 29
Formación Abierta
df -h
top
free
uname -a
ifconfig
iwconfig
lsusb
El comando ls merece una mención especial porque va a ser de los comandos que
más se van a utilizar. Su función es la de listar archivos de los directorios. Su
análogo en Windows sería el comando MS-DOS dir pero en Linux podemos sacar
más partido de este comando.
Como todos los comandos de Linux admite parámetros. A continuación, una lista de
ellos:
30 Introducción al Shell
Linux 02
ls –l: mostrará toda la información sobre los archivos: sus permisos, usuario
y grupo al que pertenece, tamaño, cuando fue su último acceso, fecha y
hora de creación y por supuesto nombre del archivo. En la figura 2.20 se
puede ver un ejemplo.
ls –s: mostrará el tamaño de los archivos listados.
ls –t: ordena el listado mostrando en primer lugar los ficheros que
recientemente fueron creados o modificados. El resultado se observa mejor
si se añade el parámetro –l de tal forma que quedará ls-lt.
Introducción al Shell 31
Formación Abierta
ls –r: muestra el resultado en orden inverso, alfabética (ls –lr) o por tiempo
(ls –ltr).
ls –m: se muestran los ficheros ordenados horizontalmente y separados por
comas.
ls –x: se muestran los ficheros en columnas ordenados horizontalmente.
Cuando se ejecuta la orden ls –l para cada uno de los ficheros, la información que
ofrece empezando desde la izquierda a la derecha es la siguiente:
Comando cat
Por supuesto, para poder leer o consultar un fichero se tiene que tener permisos de
lectura como se acaba de ver unos párrafos más arriba.
32 Introducción al Shell
Linux 02
Comando more
Al igual que el comando cat, el comando more nos permite visualizar en pantalla el
contenido de un fichero, con la particularidad de que more sí que permite hacer una
pausa entre pantalla y pantalla pudiendo avanzar entre ellas pulsando la barra
espaciadora.
Comando less
Este comando permitirá desplazar hacia delante o hacia atrás por los ficheros de
pantalla en pantalla. Cada vez que se termine una página preguntará si se quiere
ver la siguiente.
En nuestro ejemplo, el fichero tenía poco contenido pero si tuviéramos que pasar a
la siguiente página valdría con pulsar la barra espaciadora y para avanzar una
línea la tecla Intro. Para movernos hacia arriba tendríamos que utilizar la tecla B.
Introducción al Shell 33
Formación Abierta
Para terminar con el comando se tendría que pulsar la tecla Q. Se puede aprender
más sobre este comando como siempre a través de la página man del comando.
Como sus nombres en inglés indican, estos dos comandos van a permitir visualizar
el principio o el fin de uno o más archivos. Se podrá usar el modificador -n para
designar cuantas líneas se quieren desplegar. El número por defecto son 10.
También se puede utilizar la opción -v para imprimir siempre el nombre del archivo
como cabeza de la impresión en pantalla. El comando head es muy útil para
identificar las primeras líneas de más de un archivo. Si se escribe la siguiente orden
en la línea de comandos: head -5 /home/usuario/doc* visualizará las primeras
cinco líneas de todos los archivos en el directorio /home/usuario que empiecen con
el nombre doc.
El comando tail no será útil para leer los archivos log por ejemplo cuando se
quieran ver las nuevas entradas agregadas que obviamente siempre van al final:
tail -7 /var/log/messages visualizará las últimas 7 líneas del archivo
/var/log/messages.
También se puede usar la opción +n con el comando tail de la siguiente forma: tail
+15 /var/log/messages de tal forma que la sentencia comienza en la línea 15 y
despliega cada línea hasta el final del archivo.
Si se usa la opción -f con tail, podremos supervisar de forma interactiva como los
nuevos mensajes son añadidos al archivo log: tail -f /var/log/messages.
Para que se muestre cada nuevo mensaje al momento de ser escrito al log. Habrá
que pulsar CTRL+C para finalizar el despliegue de la pantalla.
Comando touch
34 Introducción al Shell
Linux 02
touch fichero.log
Comando du
ls
cat
MORE
less
head
tail
touch
du
Introducción al Shell 35
Formación Abierta
Comando tar
El comando tar se usa para combinar múltiples archivos en un solo archivo, pero
retiene la estructura de directorio original. Aunque fuera creado para guardar los
archivos originalmente en cintas, puede ser utilizado en cualquier medio de
almacenamiento.
Al crear un archivo tar, se tienen que usar las rutas relativas. Si la posición en el
sistema de archivos es /home/usuario y se desea guardar todos los archivos en el
directorio /home/usuario/prueba se deberá escribir la ruta como /prueba/*.
Si se intentan utilizar las rutas absolutas, las barras que preceden al nombre de los
directorios serán eliminadas. Esta medida previene que se sobrescriban los
archivos cuando se vaya a descomprimir el archivo.
Por ejemplo, para crear un archivo tar conteniendo todos los archivos en el pwd
sería necesario escribir lo siguiente: tar -cf archivo.tar .
Este comando causaría que el contenido del pwd sea comprimido a un archivo tar
llamado archivo. La opción -c crea el archivo tar y la opción -f da el nombre al
nuevo archivo creado. El punto final es para expresar el directorio actual.
Se podrá ver el contenido del archivo tar usando el siguiente comando: tar -tf
archivo.tar
La opción -t causa que tar imprima los nombres de los archivos contenidos en el
paquete tar. El comando tar no solo permite crear el archivo tar, también nos
permitirá restaurar el contenido del archivo. Para extraer su archivo tar, habría que
escribir: tar -xvf archivo.tar
Aquí la opción -x le dirá a tar que tiene que extraer el contenido del archivo. La
opción -v determinará que tar imprima los archivos en pantalla en el momento que
son extraídos y la opción -f nombra el archivo tar que va a ser extraído.
36 Introducción al Shell
Linux 02
Introducción al Shell 37
Formación Abierta
2.3. Redirecciones
Cuando se ejecutan comandos en Linux, se obtienen los datos que necesitan
mediante tres archivos estándar:
• Standard Input (entrada estándar). Los programas pueden leer datos desde
su archivo estándar input, de forma abreviada denominado stdin. Por defecto,
suele ser el teclado. Los caracteres escritos a un programa, por ejemplo, editor
de textos van directos al stdin.
Redireccionar la salida
38 Introducción al Shell
Linux 02
Mediante el comando >> existe la posibilidad de añadir al final del fichero y así nos
aseguraríamos que no se va a borrar nada.
ls –l >> prueba.txt
cp fichero1 fichero2
Pero nos sirve de introducción para comprobar que también podemos concatenar
varios ficheros y almacenarlos en otro:
Introducción al Shell 39
Formación Abierta
Redireccionar la entrada
Estas operaciones por norma general se van a realizar para decirle a un comando
que no recoja la información desde el teclado, sino de un fichero. Este
redireccionamiento de entrada se expresa mediante el carácter <. No será muy
frecuente puesto que la mayoría de los comandos permiten especificar el fichero
sobre el cual operar.
Por ejemplo, si se quisieran ordenar las líneas del fichero prueba.txt se podría
escribir: sort < prueba.txt pero en realidad sería lo mismo que poner sort
prueba.txt.
Otro ejemplo más práctico podría ser el de buscar un nombre en un fichero que
contiene la agenda de contactos: grep "Cristian" < teléfonos, aquí la orden grep
toma su entrada del archivo teléfonos que se encuentra almacenado en nuestro
directorio actual, y no del teclado. El resultado se mostrará en pantalla así como si
hubiera un error.
Con este comando se está ordenando que los mensajes de error y de diagnóstico,
junto con cualquier otra información que el comando esriba a su salida de error
estándar será escrita a un archivo de nombre errores.txt. La salida estándar aún
seguirá siendo la pantalla, por lo tanto la información de salida seguirá mostrando a
través del terminal.
Se puede encontrar con ocasiones en las que se desee redireccionar las salidas
stdout y stderr al mismo sitio de la primera (stdout). Se conseguiría de la siguiente
forma: 2 > &1.
De esta forma se ordena a nuestra shell que la salida 2 (stderr) la redirija al mismo
sitio donde va la salida 1 (stdout). El archivo de destino contendrá la salida
estándar del comando y los posibles errores.
40 Introducción al Shell
Linux 02
Con esta sentencia grep es usado para realizar una búsqueda de todas las líneas
de los archivos que se encuentren bajo el directorio /etc y que contengan la cadena
configure. Como se ejecuta el comando con un usuario sin privilegios seguramente
se van a producir mensajes de error tipo permiso denegado. De esta forma, al
haber redireccionado la salida de errores al dispositivo nulo, solo se verán las
salidas con resultados válidos.
Por último, habría que comentar que todas las redirecciones nuestra shell las va a
interpretar por orden desde la izquierda. Es decir, si se tuviese el siguiente
comando ls –l directorio1 directorio2 2>&1 >archivo esta orden conectaría la
salida estándar de errores al mismo sitio donde va dirigida la salida estándar antes
de que fuera redireccionada hacia archivo, que en este caso era la pantalla, pero
bien podría ser a otro sitio diferente, por ejemplo, cuando más adelante se
desarrollen scripts.
Tuberías (pipes)
cat prueba.txt
sort prueba.txt
Pero en realidad estas operaciones podrían realizarse en una conjunta puesto que
la entrada del comando sort es la salida del comando cat. Aquí es donde se
introduce el carácter | (tubería) que va a ser el que nos ayude a conectar ambas
instrucciones:
Introducción al Shell 41
Formación Abierta
Por seguir utilizando ejemplos lo más prácticos posibles para una mejor
comprensión del concepto de tubería se puede usar también el siguiente: who|wc-l.
En este caso, la tubería le está indicando al shell que conecte la salida stdout del
comando de la izquierda (who) a la entrada estándar (stdin) del comando a la
derecha (wc –l). Por lo tanto, la salida del comando who es pasado al comando
wc-l.
Las tuberías solo trabajan en los flujos de la salida estándar de los comandos.
Pueden ser usadas para conectar dos o más comandos con conexiones múltiples
tuberías, algo bastante frecuente en programación Linux gracias a los denominados
filtros que se estudiarán más adelante, pero como adelanto se puede comentar
que un filtro es un programa que va a leer los datos de la entrada estándar y
escribe sus resultados en la salida estándar y llevando así a cabo un filtrado a
través del sistema de tuberías.
Se amplía el ejemplo anterior para tener un comando con 2 tuberías: who | grep
ttyp | wc-l.
En este caso la salida del comando who va a ser la entrada del comando grep que
va a filtrar todas las líneas que no contengan la cadena ttyp. Por último, la salida
del grep pasará por la tubería del comando wc, que contará el número de líneas
que ha encontrado en los resultados que en nuestro caso vendrá a significar el
número de usuario que tenemos conectados en este momento a nuestra red.
Para redondear este capítulo se va a ver algún ejemplo como mezclar las
redirecciones con las tuberías para conseguir nuestros propósitos en forma de
comandos. grep "Silvia" < trabajadores | lpr -Pspr
42 Introducción al Shell
Linux 02
Comando tee
Para comprobarlo, se utiliza el comando cat para visualizar los dos archivos. Hay
que recordar que para finalizar este tipo de comandos con entrada desde teclado
hay que pulsar Ctrl+D.
Introducción al Shell 43
Formación Abierta
Con este comando estaría mostrando el contenido del fichero 1 que lo recibiría
como entrada mediante la tubería el comando tee que a su vez lo muestra por
pantalla mientras lo guarda en un fichero.
Con la opción 2>&1 conseguiremos que los mensajes de error vayan a la salida
estándar, es decir, a la pantalla.
Si se quiere evitar perder el contenido del fichero2 se tendría que añadir el siguiente
modificador del comando tee: cat archivo1 2>&1 | tee -a archivo2
44 Introducción al Shell
Linux 02
Al principio suele costar mucho aprender a usar este tipo de expresiones regulares
pero pronto se comprenderá todo el trabajo que nos puede ahorrar en futuras
situaciones.
Uno de los casos más comunes y sencillos es cuando se quiere buscar por ejemplo
todos los ficheros Word en un directorio en concreto y se ha utilizado la expresión
*.doc para decirle al sistema que esos son el tipo de fichero que se está deseando
buscar. Pero una expresión regular formal es algo más complejo.
Introducción al Shell 45
Formación Abierta
.. .. ..
El resultado del comando grep utilizando expresiones regulares sería que iría a
buscar todas las líneas que empiecen por el carácter 1.
46 Introducción al Shell
Linux 02
Metacarácter Función
() Subexpresión o grupo
[] Conjunto de caracteres
\d Cualquier dígito
Y ahora se ponen unos cuantos ejemplos para ver de forma práctica lo que se
acaba de explicar:
Introducción al Shell 47
Formación Abierta
^ comienzo de la línea
$ final de la línea
48 Introducción al Shell
Linux 02
"[0-9]{2}\/[0-9]{2}[0-9]{2}\/[0-9]{2}"
Se usa como separador de la expresión regular el carácter " / " y para ello tenemos
que protegerlo con el metacarácter " \ ". Con el resto de la expresión le se indica
que tiene dos dígitos y valdría para fecha con formato 13/06/09. Se podría mejorar
indicándole que los dígitos del día y del mes puedan tener uno o dos dígitos:
"[0-9]{1,2}\/[0-9]{1,2}[0-9]{2}\/[0-9]{2}"
No obstante aún se podría caer en errores como 9/99/07, así que en nuestro afán
de perfeccionar la expresión habría que escribir algo para que el mes no fuera
mayor de 12 y el día de 31.
"([1-9]|1[012])"
Con lo que se conseguiría tener un solo dígito que va del 1 al 9 o tener dos dígitos
donde el primero es un 1 fijo y el segundo puede ser 0,1 o 2.
"([1-9]|[12][0-9]|3[01])"
Con lo que se dice, el día podría ser de una de las 3 siguientes formas:
"([1-9]|[12][0-9]|3[01])\/\/([1-9]|1[012])\/[0-9]{2}"
Por último, si se tuviese que trabajar con fechas 01/01/10 habría que añadir "0?"
donde se dice que el "0" puede estar presenta o no:
"(0?[1-9]|[12][0-9]|3[01])\/\/(0?[1-9]|1[012])\/[0-9]{2}"
Introducción al Shell 49
Formación Abierta
Bien, si se comienza con la parte que queda a la izquierda de la "@" puede estar
compuesta por caracteres alfanuméricos con posibilidad de encontrar "-", "_" o "."
: (aa.bb / abc / abc_de_fg).
Por lo tanto, para empezar esta expresión regular quedaría de la siguiente forma:
([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*
([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*[.]([0-9a-zA-Z]){2,4}
"^([0-9a-zA-Z]+)([._-]([0-9a-zA-Z]+))*@([0-9a-zA-Z]+)([._-]([0-9a-zA-
Z]+))*[.]([0-9a-zA-Z]){2,4}$"
50 Introducción al Shell
Linux 02
2.5. Filtros
Se les da el nombre de filtros al grupo de comandos que reciben alguna entrada,
realizan alguna transformación y escriben una salida.
Comando grep
Permite buscar las líneas que contienen un determinado patrón de búsqueda dentro
de uno o varios archivos y mostrar aquellas líneas donde se encuentra alguna
coincidencia. Para ello, se hace uso de las denominadas expresiones regulares que
se han comentado previamente.
• -n para que muestre el número de línea dentro del archivo que se haya
especificado.
• -v para que muestre las líneas que no concuerdan con el patrón que se ha
suministrado.
Por ejemplo, si se quiere buscar la cadena domain dentro del archivo /etc/hosts se
escribía lo siguiente:
Introducción al Shell 51
Formación Abierta
Si se quiere que además de buscar en ese directorio buscara también en todos los
subdirectorios tendría que utilizar el modificador –r, como por ejemplo de la
siguiente forma:
Pero el comando grep puede hacer mucho más que estas búsquedas sencillas
haciendo uso de las mencionadas expresiones regulares:
Con este comando se buscararía la cadena buscar y luego de cualquier texto que
continúen con linea.
Para buscar las líneas que no coincidan habría que utilizar el modificador –v
52 Introducción al Shell
Linux 02
Hasta aquí se ha estado explicando el uso del comando grep para buscar cadenas
de texto pero el verdadero potencial de este comando se desarrolla a través de las
expresiones regulares.
Devolvería todas las líneas del comando who que empiezan por un patrón, en este
caso, comienzan por el nombre de usuario en concreto "usuario".
Otro ejemplo:
ls -l | grep "^…….rw"
Permitiría visualizar solo aquellos archivos procedentes del comando ls-l que
tengan permisos de lectura y escritura para el grupo otros. Como ya se ha visto con
anterioridad buscaba al principio y los puntos indican que no le importa el carácter
en esa posición.
Guardar en el archivo milistado.txt todas las líneas del archivo log que empiezan
con error o dump:
Estas son solo algunas de las posibilidades del comando grep que además tiene
una versión avanzada de filtros en los comandos egrep y fgrep.
Introducción al Shell 53
Formación Abierta
Como siempre se indica, esta es solo una aproximación de las posibilidades de este
comando. Para una visión completa habría que acudir a la página man del
comando:
man grep
Comando find
• Se dice donde se van a buscar los ficheros. En nuestro caso en concreto, la ruta
es el directorio /etc/
• Se puede hacer uso del modificar –type para especificarle el tipo de archivo que
se está buscando. En nuestro caso se ha usado el modificador f para indicarle
que son ficheros ordinarios, pero se podría especificar una d para directorios.
Estas son solo algunas de las opciones de búsqueda posible ya que también se
podrían buscar por propietario, por grupo, por permisos, fechas, etc. En todos los
casos el comando find buscará en la ubicación que se le diga y visualizará una
lista de todos los archivos que coinciden con nuestro patrón de búsqueda.
Por explicar alguna de sus propiedades más particulares, este comando también
nos puede servir para encontrar directorios o ficheros que no tienen propiedad
alguno, ni de usuarios ni a grupos:
54 Introducción al Shell
Linux 02
Comando sort
Introducción al Shell 55
Formación Abierta
• -n: Este modificador servirá para ordenar los campos numéricos por su valor
numérico.
• -r: Con este modificador se podrá realizar una ordenación inversa, de mayor a
menor.
• -b: Este modificador servirá para descartar las espacios en blanco que
encuentre al principio.
Estos serían algunos de los modificadores más importantes, el resto como siempre
se puede consultar con la ayuda en línea a través del comando sort –help.
Comando tr
Este comando exige que los parámetros tengan la misma cantidad de caracteres o
bien que el segundo sea un solo carácter. En este caso, reemplazará todos los
caracteres del primero por el del segundo.
• -d: Este modificador servirá para eliminar los caracteres de la primera cadena
pasada como parámetro.
• -s: Este modificador servirá para eliminar los caracteres repetidos de la primera
cadena pasada como parámetro.
• -c: Este modificador servirá para eliminar los caracteres que no coincidan con la
primera cadena pasada como parámetro.
56 Introducción al Shell
Linux 02
Otro ejemplo:
En primer lugar el comando convertirá todo aquello que no sean letras en "\n" que
es el salto de línea. A continuación, todas las mayúsculas en minúsculas y por
último, el comando sort las ordenará alfabéticamente eliminando las que sean
iguales con lo que se obtendrá finalmente una línea por cada palabra original del
archivo "archivo".
grep
sort
find
tr
Introducción al Shell 57
Formación Abierta
Cada uno deberá elegir el editor con el que más a gusto se sienta a la hora de
trabajar. Desde un punto de vista práctico, los dos editores más populares son vi y
emacs, adecuados para realizar tareas más complejas de edición. Pero para
aprovechar esa potencia habrá que aprenderse las órdenes necesarias para
realizar esas tareas.
2.6.1. Editor vi
El editor vi de Linux tiene la gran mayoría de opciones habituales de un editor de
textos y destaca por la gran flexibilidad a la hora de crear archivos de texto. Es más
complejo que otros editores un tanto más simples pero va a dar la posibilidad de
trabajar con ficheros de tamaño más grande.
58 Introducción al Shell
Linux 02
Las operaciones que se pueden realizar con el editor vi son de dos categorías:
Del modo edición al modo comando, se pasa con la tecla ESC. Del modo comando
al modo de edición se puede pasar con alguno de los siguientes caracteres
(i,I,a,A,o,O). Por defecto, al entrar en el editor vi se entra en modo comando.
Una cosa a tener en cuenta es que conviene estar el máximo tiempo posible en
modo comando ya que con esto se pueden evitar modificaciones no deseadas en
el texto. Cuando se quiera dejar de escribir, por tanto, una buena práctica será
pulsar ESC.
Introducción al Shell 59
Formación Abierta
dw Borrar palabra
p Pegar el buffer detrás del cursor P Pegar el buffer delante del cursor
60 Introducción al Shell
Linux 02
5. Ahora se quiere incluir una línea en medio de las dos que diga Esto es la
segunda línea. Para insertar la línea que falta se podría hacer de tres
formas:
En definitiva, esta solo es una aproximación al editor de texto vi. Solo el manejo
diario de esta herramienta llevará a utilizarlo con soltura.
Algunas de las características por las que destaca sobre el resto son las siguientes:
Introducción al Shell 61
Formación Abierta
Esta diferencia pasa a ser una cuestión muy importante cuando se quieren emplear
opciones de cortar, pegar y copiar. Por ejemplo, en vi, quitar elimina el texto del
búfer principal mientras que emacs es más parecido a pegar en el búfer principal.
62 Introducción al Shell
Linux 02
Esc- Borrar la palabra que precede al Borrar desde el cursor hasta el final
Ctrl-K
Retroceso cursor de la línea en curso
5. Escriba alias.
7. Utilice las teclas de la flecha para moverse hasta la siguiente línea en blanco.
9. Utilice las teclas de flecha para situar el cursor al final de la palabra ALICIA
si todavía no está allí.
Introducción al Shell 63
Formación Abierta
10. Utilice la tecla RETROCESO para borrar las letras C,I y A de la palabra
ALICIA.
Este solo ha sido un ejemplo muy sencillo de introducción al editor de textos emacs
puesto que el objetivo de este capítulo no es conocer a fondo todas las
posibilidades que pueda ofrecer emacs sino darlo a conocer al lector para que
pueda comparar de forma simple con el editor de textos vi.
64 Introducción al Shell
Linux 02
• Resumen
• Los editores de texto vi y emacs para poder editar textos de una forma sencilla e
interactiva.
Introducción al Shell 65